Subversion Repository Public Repository

fonline_sdk

This repository has no backups
This repository's network speed is throttled to 100KB/sec

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
// FOS Mapper Sort -8

// Tabs
#define TAB_CUSTOM0                     ( 0 )
#define TAB_CUSTOM1                     ( 1 )
#define TAB_CUSTOM2                     ( 2 )
#define TAB_CUSTOM3                     ( 3 )
#define TAB_CUSTOM4                     ( 4 )
#define TAB_CUSTOM5                     ( 5 )
#define TAB_CUSTOM6                     ( 6 )
#define TAB_CUSTOM7                     ( 7 )
#define TAB_CUSTOM8                     ( 8 )
#define TAB_CUSTOM9                     ( 9 )
#define TAB_ITEMS                       ( 10 )
#define TAB_TILES                       ( 11 )
#define TAB_CRITTERS                    ( 12 )
#define TAB_FAST_ITEMS                  ( 13 )
#define TAB_IGNORE_ITEMS                ( 14 )
#define TAB_INVENTORY                   ( 15 ) // Only for TabSetName(...)
#define TAB_MESAGE_BOX                  ( 16 ) // Only for TabSetName(...)
#define TAB_MAPS                        ( 17 ) // Only for TabSetName(...)

// Fonts
#define FONT_DEFAULT                    ( 0 )

// Font flags
#define FT_NOBREAK                      ( 0x0001 )
#define FT_NOBREAK_LINE                 ( 0x0002 )
#define FT_CENTERX                      ( 0x0004 )
#define FT_CENTERY                      ( 0x0008 )
#define FT_CENTERR                      ( 0x0010 )
#define FT_BOTTOM                       ( 0x0020 )
#define FT_UPPER                        ( 0x0040 )
#define FT_NO_COLORIZE                  ( 0x0080 )
#define FT_ALIGN                        ( 0x0100 )
#define FT_SKIPLINES( l )    ( 0x0200 | ( ( l ) << 16 ) )
#define FT_BORDERED                     ( 0x0400 )

// Cursors
#define CURSOR_DEFAULT                  ( 0 )
#define CURSOR_MOVE_SELECTION           ( 1 )
#define CURSOR_PLACE_OBJECT             ( 2 )

// Mouse click states
#define MOUSE_BUTTON_LEFT               ( 0 )
#define MOUSE_BUTTON_RIGHT              ( 1 )
#define MOUSE_BUTTON_MIDDLE             ( 2 )
#define MOUSE_BUTTON_WHEEL_UP           ( 3 )
#define MOUSE_BUTTON_WHEEL_DOWN         ( 4 )
#define MOUSE_BUTTON_EXT0               ( 5 )
#define MOUSE_BUTTON_EXT1               ( 6 )
#define MOUSE_BUTTON_EXT2               ( 7 )
#define MOUSE_BUTTON_EXT3               ( 8 )
#define MOUSE_BUTTON_EXT4               ( 9 )

// Keyboard key codes
#define DIK_ESCAPE                      0x01
#define DIK_1                           0x02
#define DIK_2                           0x03
#define DIK_3                           0x04
#define DIK_4                           0x05
#define DIK_5                           0x06
#define DIK_6                           0x07
#define DIK_7                           0x08
#define DIK_8                           0x09
#define DIK_9                           0x0A
#define DIK_0                           0x0B
#define DIK_MINUS                       0x0C /* - on main keyboard */
#define DIK_EQUALS                      0x0D
#define DIK_BACK                        0x0E /* backspace */
#define DIK_TAB                         0x0F
#define DIK_Q                           0x10
#define DIK_W                           0x11
#define DIK_E                           0x12
#define DIK_R                           0x13
#define DIK_T                           0x14
#define DIK_Y                           0x15
#define DIK_U                           0x16
#define DIK_I                           0x17
#define DIK_O                           0x18
#define DIK_P                           0x19
#define DIK_LBRACKET                    0x1A
#define DIK_RBRACKET                    0x1B
#define DIK_RETURN                      0x1C /* Enter on main keyboard */
#define DIK_LCONTROL                    0x1D
#define DIK_A                           0x1E
#define DIK_S                           0x1F
#define DIK_D                           0x20
#define DIK_F                           0x21
#define DIK_G                           0x22
#define DIK_H                           0x23
#define DIK_J                           0x24
#define DIK_K                           0x25
#define DIK_L                           0x26
#define DIK_SEMICOLON                   0x27
#define DIK_APOSTROPHE                  0x28
#define DIK_GRAVE                       0x29 /* accent grave */
#define DIK_LSHIFT                      0x2A
#define DIK_BACKSLASH                   0x2B
#define DIK_Z                           0x2C
#define DIK_X                           0x2D
#define DIK_C                           0x2E
#define DIK_V                           0x2F
#define DIK_B                           0x30
#define DIK_N                           0x31
#define DIK_M                           0x32
#define DIK_COMMA                       0x33
#define DIK_PERIOD                      0x34 /* . on main keyboard */
#define DIK_SLASH                       0x35 /* / on main keyboard */
#define DIK_RSHIFT                      0x36
#define DIK_MULTIPLY                    0x37 /* * on numeric keypad */
#define DIK_LMENU                       0x38 /* left Alt */
#define DIK_SPACE                       0x39
#define DIK_CAPITAL                     0x3A
#define DIK_F1                          0x3B
#define DIK_F2                          0x3C
#define DIK_F3                          0x3D
#define DIK_F4                          0x3E
#define DIK_F5                          0x3F
#define DIK_F6                          0x40
#define DIK_F7                          0x41
#define DIK_F8                          0x42
#define DIK_F9                          0x43
#define DIK_F10                         0x44
#define DIK_NUMLOCK                     0x45
#define DIK_SCROLL                      0x46 /* Scroll Lock */
#define DIK_NUMPAD7                     0x47
#define DIK_NUMPAD8                     0x48
#define DIK_NUMPAD9                     0x49
#define DIK_SUBTRACT                    0x4A /* - on numeric keypad */
#define DIK_NUMPAD4                     0x4B
#define DIK_NUMPAD5                     0x4C
#define DIK_NUMPAD6                     0x4D
#define DIK_ADD                         0x4E /* + on numeric keypad */
#define DIK_NUMPAD1                     0x4F
#define DIK_NUMPAD2                     0x50
#define DIK_NUMPAD3                     0x51
#define DIK_NUMPAD0                     0x52
#define DIK_DECIMAL                     0x53 /* . on numeric keypad */
#define DIK_F11                         0x57
#define DIK_F12                         0x58
#define DIK_NUMPADENTER                 0x9C /* Enter on numeric keypad */
#define DIK_RCONTROL                    0x9D
#define DIK_DIVIDE                      0xB5 /* / on numeric keypad */
#define DIK_SYSRQ                       0xB7
#define DIK_RMENU                       0xB8 /* right Alt */
#define DIK_PAUSE                       0xC5 /* Pause */
#define DIK_HOME                        0xC7 /* Home on arrow keypad */
#define DIK_UP                          0xC8 /* UpArrow on arrow keypad */
#define DIK_PRIOR                       0xC9 /* PgUp on arrow keypad */
#define DIK_LEFT                        0xCB /* LeftArrow on arrow keypad */
#define DIK_RIGHT                       0xCD /* RightArrow on arrow keypad */
#define DIK_END                         0xCF /* End on arrow keypad */
#define DIK_DOWN                        0xD0 /* DownArrow on arrow keypad */
#define DIK_NEXT                        0xD1 /* PgDn on arrow keypad */
#define DIK_INSERT                      0xD2 /* Insert on arrow keypad */
#define DIK_DELETE                      0xD3 /* Delete on arrow keypad */
#define DIK_LWIN                        0xDB /* Left Windows key */
#define DIK_RWIN                        0xDC /* Right Windows key */
#define DIK_CLIPBOARD_PASTE             0xFF

// Draw primitive types
#define DRAW_PRIMITIVE_POINTLIST        ( 0 )
#define DRAW_PRIMITIVE_LINELIST         ( 1 )
#define DRAW_PRIMITIVE_LINESTRIP        ( 2 )
#define DRAW_PRIMITIVE_TRIANGLELIST     ( 3 )
#define DRAW_PRIMITIVE_TRIANGLESTRIP    ( 4 )
#define DRAW_PRIMITIVE_TRIANGLEFAN      ( 5 )

// Sprite cut type
#define SPRITE_CUT_NONE                 ( 0 )
#define SPRITE_CUT_HORIZONTAL           ( 1 )
#define SPRITE_CUT_VERTICAL             ( 2 )

Commits for fonline_sdk/Modules/Core/MapperCore.fos

Diff revisions: vs.
Revision Author Commited Message
646 Diff Diff cvet picture cvet Mon 04 Jul, 2016 14:40:54 +0000

Improved namespaces for scripts.
Now each script module treated as namespace (Gui::Object, Entire::GetEntire).
And now you can access from any module to any module by specifying it namespace.
Disabled features: #include, shared, import.
Script addressation changed from module@func to module::func.

626 Diff Diff cvet picture cvet Mon 06 Jun, 2016 07:41:30 +0000

Один шрифт по умолчанию от движка (нулевой), остальное загружается игрой.

610 Diff Diff cvet picture cvet Mon 23 May, 2016 16:22:23 +0000

Реорганизация движка.

606 Diff Diff cvet picture cvet Mon 23 May, 2016 15:41:24 +0000

Реорганизация движка.

599 Diff Diff cvet picture cvet Sat 30 Jan, 2016 13:31:16 +0000

Новая порция интерфейсов от Felinssa и добавленные хоткеи клиента.

В маппере добавлена возможность изменения значений свойств.
Теперь оно происходит не сразу, а после нажатия Enter.
Для удобства добавлена визуальная индикация процесса редактирования.
Есть возможность перемещения между свойствами стрелками клавиатуры вверх-вниз.
При включении редактирования сущности ввод на консоль теперь не идет.

Правка багов движка связанных с работой стекающихся предметов.
Правка падения клиента при ViewMap.
Правка копи-паста сущностей в маппере.
Правка падения клиента при выбрасывании предмета.
Правка падения сервера при вызове GetSlotItem.
Правка сохранения времени дня в маппере.

593 Diff Diff cvet picture cvet Sat 19 Dec, 2015 11:01:26 +0000

Все классы сущностей (Item, Critter, Map, Location, кастомные) наследуются от общего Entity.
Что дает возможность даункастить их в Entity, и апкастить в нужный тип.
Пример:
void func(Entity@ a)
{
Item@ item = cast< Item >( a );
if( item !is null )
...
}

Изменения по прототипам.
В скриптах больше нет класса ProtoItem, теперь все свойства хранятся в экземпляре Item.
Теперь прототип это строго значения по умолчанию свойств сущностей.
Значение может меняться в экземпляре.
Функция GetProtoItem сейчас возвращает константный экземпляр Item со стартовыми значениями из прототипа.

Прототипы теперь могут наследоваться.
Для наследования используется ключевое слово $Parent, где перечисляется один или несколько прототипов для наследования.
Пример:
$Parent = Parent1 Parent2 Parent3
Наследование идет слева направо.
Так же есть возможность инъекции в определенные или все прототипы.
Для этого используются ключевые слова $Inject и $InjectOverride.
Для указания всех прототипов используется ключевое слово All.
Пример:
$Inject = All
Что означает, что прототип будет внедрен во все остальные прототипы.
$InjectOverride означает то, что свойства применяться в самом конце.
Весь порядок применения свойств:
$Inject из других прототипов в этот, $Parent прототипа (слева направо), свойства прототипа, $InjectOverride других прототипов в этот.
После всей этой цепочки и появляется итоговые значения свойств прототипа.

Один файл прототипа может содержать в себе несколько прототипов.
Сделано для возможности размещения групп прототипов в одном файле. Например: сет стен, однотипные ящики.
Для задания имени прототипа явно (т.к. неявно оно берется из имени файла) используется ключевое слово $Name.
Пример:
Файл MyWall.foitem
[ProtoItem]
Type = Wall
IsShootThru = false
...
[ProtoItem]
$Name = MyWall1
$Parent = MyWall
PicMap = MyWall1.png
[ProtoItem]
$Name = MyWall2
$Parent = MyWall
PicMap = MyWall2.png

Немного изменился формат прототипов, для их миграции написан питон скрипт (Tools/Scripts/592_ProtoFix.py).
В будущем для различного рода патчей контента будет практиковаться написание подобных скриптов.

В связи с новой концепцией работы прототипов теперь опции Default и Random в прагмах property исключены, т.к. задание стартовых значений происходит в прототипах.

Изменился механизм работы с картами.
Удалена промежуточная сущность MapperObject, теперь работа идет с обычными Item/Critter.
Формат карт изменился, теперь он соответствует стандартному формату [App]/Key=Value.
Теперь можно работать с любыми свойствами сущностей, для их просмотра используются функции ShowCritterProperty, ShowItemProperty.
После чего они будут видны в инспекторе сущностей в маппере.
Пока редактирование свойств работает не очень хорошо, будет исправлено в ближайшем будущем.
Так же в будущем будет перенос на скриптовый гуй, и возможно объединение маппера с клиентом.
Новый функционал:
Item@+ Item::AddChild(hash pid)
Item@+ Critter::AddChild(hash pid) const
uint Item::GetChildren(uint16 hexX, uint16 hexY, array<Item@>@+ children)
uint Item::GetChildren(uint16 hexX, uint16 hexY, array<const Item@>@+ children) const
uint Critter::GetChildren(uint16 hexX, uint16 hexY, array<Item@>@+ children)
uint Critter::GetChildren(uint16 hexX, uint16 hexY, array<const Item@>@+ children) const
Item@+ AddItem(hash protoId, uint16 hexX, uint16 hexY)
Critter@+ AddCritter(hash protoId, uint16 hexX, uint16 hexY)
Item@+ GetItemByHex(uint16 hexX, uint16 hexY)
uint GetItemsByHex(uint16 hexX, uint16 hexY, array<Item@>@+ items)
Critter@+ GetCritterByHex(uint16 hexX, uint16 hexY, int findType)
void GetCrittersByHex(uint16 hexX, uint16 hexY, int findType, array<Critter@>@+ critters)
void MoveEntity(Entity& entity, uint16 hexX, uint16 hexY)
void DeleteEntity(Entity& entity)
void DeleteEntities(array<Entity@>& entities)
void SelectEntity(Entity& entity, bool set)
void SelectEntities(array<Entity@>& entities, bool set)
Entity@+ GetSelectedEntity()
uint GetSelectedEntities(array<Entity@>@+ entities)
uint GetTilesCount(uint16 hexX, uint16 hexY, bool roof)
void DeleteTile(uint16 hexX, uint16 hexY, bool roof, int layer)
hash GetTile(uint16 hexX, uint16 hexY, bool roof, int layer)
void AddTile(uint16 hexX, uint16 hexY, int offsX, int offsY, int layer, bool roof, hash picHash)
string@ GetTileName(uint16 hexX, uint16 hexY, bool roof, int layer)
void AddTileName(uint16 hexX, uint16 hexY, int offsX, int offsY, int layer, bool roof, string@+ picName)

Начат переход к более строгому соблюдению константности передаваемых в скрипт сущностей.
Константный объект не может менять своего состояния.
Сделано это для того, что бы исключить возможность модификации сущностей, когда это не подразумевается (например различного рода геттеры).
Данная работа еще не завершена полностью, об окончании будет сообщено дополнительно.

Предметы получили возможность вкладываться друг в друга при любом типе, не только контейнере.
Но пока клиент не получает информации о вложенных в него предметах, поэтому метод
uint Item::GetItems(uint stackId, array<Item@>@+ items) будет всегда возвращать пустой список.
Будет исправлено в будущем.

Различные изменения по скриптам:
Item
IsStackable() -> Stackable
IsDeteriorable() -> Deteriorable
GetScriptId() -> ScriptId
GetCost() -> GetWholeCost()
удалено ProtoItem@ Proto
Critter
ProtoItem@+ GetSlotProto(int slot, uint8& mode) const -> const Item@+ GetSlotItem(int slot) const
Map
Critter@+ AddNpc(hash protoId, uint16 hexX, uint16 hexY, uint8 dir, int[]+ params, int[]+ items, string@+ script)
-> Critter@+ AddNpc(hash protoId, uint16 hexX, uint16 hexY, uint8 dir, array< int >@+ props, string@+ script)
GetWidth() -> Width
GetHeight() -> Height
Location
удалено void Update()
DrawMapSprite разделена на две функции (в первой используется вызов второй, с параметрами взятыми из переданного прототипа)
void DrawMapSpriteProto(uint16 hx, uint16 hy, uint sprId, int frameIndex, int offsX, int offsY, hash protoId)
void DrawMapSpriteExt(uint16 hx, uint16 hy, uint sprId, int frameIndex, int offsX, int offsY, bool isFlat, bool noLight, int drawOrder, int drawOrderHyOffset, int corner, bool disableEgg, uint color, uint contourColor)
В Item@+ AddItem(uint16 hexX, uint16 hexY, hash protoId, uint count, dict< ItemProperty, int >@+ props = null) можно передавать стартовые свойства для генерируемого предмета.

Различного рода фиксы.

571 Diff Diff cvet picture cvet Sat 24 Oct, 2015 10:17:44 +0000

Реорганизация контента.
Настройка Core скриптов.

566 Diff Diff cvet picture cvet Sat 24 Oct, 2015 10:08:47 +0000

Реорганизация контента.
Перемещение Core скриптов.

565 Diff Diff cvet picture cvet Sat 24 Oct, 2015 09:57:00 +0000

Реорганизация контента.
Переименование скриптов.

537 cvet picture cvet Mon 21 Sep, 2015 15:06:06 +0000

Введено некое подобие модульной системы организации контента.
Теперь все будет лежать не по отдельным папакам. т.е. скрипты в scripts, диалоги в dialogs и т.п., а в общей папке Modules, в которой можно группировать файлы как удобно.
Предполагается, что папки верхнего уровня это наименование отдельного модуля.
Любые папки в Modules (включая подпапки) начинающиеся с подчеркивания ‘_’ не будут обрабатываться.
Папки с именем ‘Resources’ будут паковаться в ресурсы клиента.
А в папках ‘Texts’ сервер будет искать файлы локализации текстов.
Пока есть только один модуль ‘TLA’, но в будущем он будет разделен на отдельные, например: Core, Traders, Combat и т.п.
Но нужно помнить, что пространство имен у всех контентных файлов (диалоги, прототипы и т.п.) одно и наличие двух одинаковых в разных папках не допускается.