• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

polserver / polserver / 25918451630

15 May 2026 12:43PM UTC coverage: 60.929% (+2.1%) from 58.859%
25918451630

push

github

turleypol
added dynamic property which returns a pointer of the object instead of
a copy like the current imp.
needed to be able to eg store a vector

43 of 61 new or added lines in 2 files covered. (70.49%)

14455 existing lines in 345 files now uncovered.

44695 of 73356 relevant lines covered (60.93%)

449621.59 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

94.74
/pol-core/bscript/objaccess.cpp
1
#include "objmembers.h"
2
#include "objmethods.h"
3

4
#include <algorithm>
5
#include <string>
6
#include <unordered_map>
7

8

9
namespace Pol::Bscript
10
{
11
ObjMember object_members[] = {
12
    // MBR_*, "name"
13
    { MBR_X, "x" },  // 0
14
    { MBR_Y, "y" },  // 1
15
    { MBR_Z, "z" },
16
    { MBR_NAME, "name" },
17
    { MBR_OBJTYPE, "objtype" },
18
    { MBR_GRAPHIC, "graphic" },  // 5
19
    { MBR_SERIAL, "serial" },
20
    { MBR_COLOR, "color" },
21
    { MBR_HEIGHT, "height" },
22
    { MBR_FACING, "facing" },
23
    { MBR_DIRTY, "dirty" },  // 10
24
    { MBR_WEIGHT, "weight" },
25
    { MBR_MULTI, "multi" },
26
    { MBR_AMOUNT, "amount" },  // item
27
    { MBR_LAYER, "layer" },
28
    { MBR_CONTAINER, "container" },  // 15
29
    { MBR_USESCRIPT, "usescript" },
30
    { MBR_EQUIPSCRIPT, "equipscript" },
31
    { MBR_UNEQUIPSCRIPT, "unequipscript" },
32
    { MBR_DESC, "desc" },
33
    { MBR_MOVABLE, "movable" },  // 20
34
    { MBR_INVISIBLE, "invisible" },
35
    { MBR_DECAYAT, "decayat" },
36
    { MBR_SELLPRICE, "sellprice" },
37
    { MBR_BUYPRICE, "buyprice" },
38
    { MBR_NEWBIE, "newbie" },  // 25
39
    { MBR_ITEM_COUNT, "item_count" },
40
    { MBR_WARMODE, "warmode" },  // character
41
    { MBR_GENDER, "gender" },
42
    { MBR_TRUEOBJTYPE, "trueobjtype" },
43
    { MBR_TRUECOLOR, "truecolor" },  // 30
44
    { MBR_AR_MOD, "ar_mod" },
45
    { MBR_HIDDEN, "hidden" },
46
    { MBR_CONCEALED, "concealed" },
47
    { MBR_FROZEN, "frozen" },
48
    { MBR_PARALYZED, "paralyzed" },  // 35
49
    { MBR_POISONED, "poisoned" },
50
    { MBR_STEALTHSTEPS, "stealthsteps" },
51
    { MBR_SQUELCHED, "squelched" },
52
    { MBR_DEAD, "dead" },
53
    { MBR_AR, "ar" },  // 40
54
    { MBR_BACKPACK, "backpack" },
55
    { MBR_WEAPON, "weapon" },
56
    { MBR_SHIELD, "shield" },
57
    { MBR_ACCTNAME, "acctname" },
58
    { MBR_ACCT, "acct" },  // 45
59
    { MBR_CMDLEVEL, "cmdlevel" },
60
    { MBR_CMDLEVELSTR, "cmdlevelstr" },
61
    { MBR_CRIMINAL, "criminal" },
62
    { MBR_IP, "ip" },
63
    { MBR_GOLD, "gold" },  // 50
64
    { MBR_TITLE_PREFIX, "title_prefix" },
65
    { MBR_TITLE_SUFFIX, "title_suffix" },
66
    { MBR_TITLE_GUILD, "title_guild" },
67
    { MBR_TITLE_RACE, "title_race" },
68
    { MBR_GUILDID, "guildid" },  // 55
69
    { MBR_GUILD, "guild" },
70
    { MBR_MURDERER, "murderer" },
71
    { MBR_ATTACHED, "attached" },
72
    { MBR_CLIENTVERSION, "clientversion" },
73
    { MBR_REPORTABLES, "reportables" },  // 60
74
    { MBR_SCRIPT, "script" },            // npc
75
    { MBR_NPCTEMPLATE, "npctemplate" },
76
    { MBR_MASTER, "master" },
77
    { MBR_PROCESS, "process" },
78
    { MBR_EVENTMASK, "eventmask" },  // 65
79
    { MBR_SPEECH_COLOR, "speech_color" },
80
    { MBR_SPEECH_FONT, "speech_font" },
81
    { MBR_USE_ADJUSTMENTS, "use_adjustments" },
82
    { MBR_RUN_SPEED, "run_speed" },
83
    { MBR_LOCKED, "locked" },          // lockable //70
84
    { MBR_CORPSETYPE, "corpsetype" },  // corpse
85
    { MBR_TILLERMAN, "tillerman" },    // boat
86
    { MBR_PORTPLANK, "portplank" },
87
    { MBR_STARBOARDPLANK, "starboardplank" },
88
    { MBR_HOLD, "hold" },  // 75
89
    { MBR_HAS_OFFLINE_MOBILES, "has_offline_mobiles" },
90
    { MBR_COMPONENTS, "components" },  // house
91
    { MBR_ITEMS, "items" },            // multi
92
    { MBR_MOBILES, "mobiles" },
93
    { MBR_XEAST, "xeast" },  // map //80
94
    { MBR_XWEST, "xwest" },
95
    { MBR_YNORTH, "ynorth" },
96
    { MBR_YSOUTH, "ysouth" },
97
    { MBR_GUMPWIDTH, "gumpwidth" },
98
    { MBR_GUMPHEIGHT, "gumpheight" },  // 85
99
    { MBR_ISOPEN, "isopen" },          // door
100
    { MBR_QUALITY, "quality" },        // equipment
101
    { MBR_HP, "hp" },
102
    { MBR_MAXHP_MOD, "maxhp_mod" },
103
    { MBR_MAXHP, "maxhp" },      // 90
104
    { MBR_DMG_MOD, "dmg_mod" },  // weapon
105
    { MBR_ATTRIBUTE, "attribute" },
106
    { MBR_INTRINSIC, "intrinsic" },
107
    { MBR_HITSCRIPT, "hitscript" },
108
    { MBR_AR_BASE, "ar_base" },  // 95
109
    { MBR_ONHIT_SCRIPT, "onhitscript" },
110
    { MBR_ENABLED, "enabled" },  // account
111
    { MBR_BANNED, "banned" },
112
    { MBR_USERNAMEPASSWORDHASH, "usernamepasswordhash" },
113
    { MBR_MEMBERS, "members" },  // guild //100
114
    { MBR_ALLYGUILDS, "allyguilds" },
115
    { MBR_ENEMYGUILDS, "enemyguilds" },
116
    { MBR_PID, "pid" },  // script
117
    { MBR_STATE, "state" },
118
    { MBR_INSTR_CYCLES, "instr_cycles" },  // 105
119
    { MBR_SLEEP_CYCLES, "sleep_cycles" },
120
    { MBR_CONSEC_CYCLES, "consec_cycles" },
121
    { MBR_PC, "pc" },
122
    { MBR_CALL_DEPTH, "call_depth" },
123
    { MBR_NUM_GLOBALS, "num_globals" },  // 110
124
    { MBR_VAR_SIZE, "var_size" },
125
    { MBR_REALM, "realm" },
126
    { MBR_UO_EXPANSION, "uo_expansion" },
127
    { MBR_CUSTOM, "custom" },    // house
128
    { MBR_GLOBALS, "globals" },  // 115
129
    { MBR_FOOTPRINT, "footprint" },
130
    { MBR_CLIENTINFO, "clientinfo" },
131
    { MBR_DELAY_MOD, "delay_mod" },
132
    { MBR_CREATEDAT, "createdat" },
133
    { MBR_OPPONENT, "opponent" },  // 120
134
    { MBR_CONNECTED, "connected" },
135
    { MBR_ATTACHED_TO, "attached_to" },
136
    { MBR_CONTROLLER, "controller" },
137
    { MBR_OWNERSERIAL, "ownerserial" },
138
    { MBR_DEFAULTCMDLEVEL, "defaultcmdlevel" },  // 125
139
    { MBR_UCLANG, "uclang" },
140
    { MBR_RACE, "race" },
141
    { MBR_TRADING_WITH, "trading_with" },
142
    { MBR_TRADE_CONTAINER, "trade_container" },
143
    { MBR_ALIGNMENT, "alignment" },  // 130
144
    { MBR_CURSOR, "cursor" },
145
    { MBR_GUMP, "gump" },
146
    { MBR_PROMPT, "prompt" },
147
    { MBR_STACKABLE, "stackable" },
148
    { MBR_MOVEMODE, "movemode" },  // 135
149
    { MBR_HITCHANCE_MOD, "hitchance_mod" },
150
    { MBR_EVASIONCHANCE_MOD, "evasionchance_mod" },
151
    { MBR_TILE_LAYER, "tile_layer" },
152
    { MBR_CLIENTVERSIONDETAIL, "clientver_detail" },
153
    { MBR_SAVEONEXIT, "saveonexit" },  // 140
154
    { MBR_FIRE_RESIST, "resist_fire" },
155
    { MBR_COLD_RESIST, "resist_cold" },
156
    { MBR_ENERGY_RESIST, "resist_energy" },
157
    { MBR_POISON_RESIST, "resist_poison" },
158
    { MBR_PHYSICAL_RESIST, "resist_physical" },  // 145
159
    { MBR_FIRE_RESIST_MOD, "resist_fire_mod" },
160
    { MBR_COLD_RESIST_MOD, "resist_cold_mod" },
161
    { MBR_ENERGY_RESIST_MOD, "resist_energy_mod" },
162
    { MBR_POISON_RESIST_MOD, "resist_poison_mod" },
163
    { MBR_PHYSICAL_RESIST_MOD, "resist_physical_mod" },  // 150
164
    { MBR_STATCAP, "statcap" },
165
    { MBR_SKILLCAP, "skillcap" },
166
    { MBR_LUCK, "luck" },
167
    { MBR_FOLLOWERSMAX, "followers_max" },
168
    { MBR_TITHING, "tithing" },  // 155
169
    { MBR_FOLLOWERS, "followers" },
170
    { MBR_FIRE_DAMAGE, "damage_fire" },
171
    { MBR_COLD_DAMAGE, "damage_cold" },
172
    { MBR_ENERGY_DAMAGE, "damage_energy" },
173
    { MBR_POISON_DAMAGE, "damage_poison" },  // 160
174
    { MBR_PHYSICAL_DAMAGE, "damage_physical" },
175
    { MBR_FIRE_DAMAGE_MOD, "damage_fire_mod" },
176
    { MBR_COLD_DAMAGE_MOD, "damage_cold_mod" },
177
    { MBR_ENERGY_DAMAGE_MOD, "damage_energy_mod" },
178
    { MBR_POISON_DAMAGE_MOD, "damage_poison_mod" },  // 165
179
    { MBR_PHYSICAL_DAMAGE_MOD, "damage_physical_mod" },
180
    { MBR_PARTY, "party" },
181
    { MBR_LEADER, "leader" },
182
    { MBR_PARTYLOOT, "partycanloot" },
183
    { MBR_CANDIDATE_OF_PARTY, "candidate_of_party" },  // 170
184
    { MBR_CANDIDATES, "candidates" },
185
    { MBR_MOVECOST_WALK, "movecost_walk_mod" },
186
    { MBR_MOVECOST_RUN, "movecost_run_mod" },
187
    { MBR_MOVECOST_WALK_MOUNTED, "movecost_walk_mounted_mod" },
188
    { MBR_MOVECOST_RUN_MOUNTED, "movecost_run_mounted_mod" },  // 175
189
    { MBR_AGGRESSORTO, "aggressorto" },
190
    { MBR_LAWFULLYDAMAGED, "lawfullydamaged" },
191
    { MBR_GETGOTTENBY, "getgottenby" },
192
    { MBR_UO_EXPANSION_CLIENT, "uo_expansion_client" },
193
    { MBR_CLIENTTYPE, "clienttype" },  // 180
194
    { MBR_DEAFENED, "deafed" },
195
    { MBR_CLIENT, "client" },
196
    { MBR_TYPE, "type" },
197
    { MBR_ATTRIBUTES, "attributes" },
198
    { MBR_EDITING, "house_editing" },  // 185
199
    { MBR_HOUSEPARTS, "house_parts" },
200
    { MBR_DOUBLECLICKRANGE, "doubleclickrange" },
201
    { MBR_MOUNTEDSTEPS, "mountedsteps" },
202
    // New boat stuff start
203
    { MBR_ROPE, "rope" },
204
    { MBR_WHEEL, "wheel" },  // 190
205
    { MBR_HULL, "hull" },
206
    { MBR_TILLER, "tiller" },
207
    { MBR_RUDDER, "rudder" },
208
    { MBR_SAILS, "sails" },
209
    { MBR_STORAGE, "storage" },  // 195
210
    { MBR_WEAPONSLOT, "weaponslot" },
211
    // New boat stuff end
212
    { MBR_MULTIID, "multiid" },
213
    { MBR_TRADEWINDOW, "tradewindow" },
214
    { MBR_LASTCOORD, "lastcoord" },
215
    { MBR_FACETID, "facetid" },  // 200
216
    { MBR_EDITABLE, "editable" },
217
    { MBR_ACTIVE_SKILL, "active_skill" },
218
    { MBR_CASTING_SPELL, "casting_spell" },
219
    { MBR_CARRYINGCAPACITY_MOD, "carrying_capacity_mod" },
220
    { MBR_MAX_ITEMS_MOD, "max_items_mod" },  // 205
221
    { MBR_MAX_WEIGHT_MOD, "max_weight_mod" },
222
    { MBR_MAX_SLOTS_MOD, "max_slots_mod" },
223
    { MBR_SPEED_MOD, "speed_mod" },
224
    { MBR_NAME_SUFFIX, "name_suffix" },
225
    { MBR_TEMPORALLY_CRIMINAL, "temporally_criminal" },  // 210
226
    { MBR_LAST_TEXTCOLOR, "last_textcolor" },
227
    { MBR_INSURED, "insured" },
228
    { MBR_LAST_ACTIVITY_AT, "last_activity_at" },
229
    { MBR_LAST_PACKET_AT, "last_packet_at" },
230
    { MBR_HOUSE, "house" },  // 215, Item
231
    { MBR_SPECIFIC_NAME, "specific_name" },
232
    { MBR_CARRYINGCAPACITY, "carrying_capacity" },
233
    { MBR_NO_DROP, "no_drop" },
234
    { MBR_NO_DROP_EXCEPTION, "no_drop_exception" },
235
    { MBR_PORT, "port" },  // 220
236
    // Additions for new properties
237
    { MBR_LOWER_REAG_COST, "lower_reagent_cost" },
238
    { MBR_SPELL_DAMAGE_INCREASE, "spell_damage_increase" },
239
    { MBR_FASTER_CASTING, "faster_casting" },
240
    { MBR_FASTER_CAST_RECOVERY, "faster_cast_recovery" },
241
    { MBR_DEFENCE_CHANCE_INCREASE, "defence_increase" },  // 225
242
    { MBR_DEFENCE_CHANCE_INCREASE_CAP, "defence_increase_cap" },
243
    { MBR_LOWER_MANA_COST, "lower_mana_cost" },
244
    { MBR_FIRE_RESIST_CAP, "resist_fire_cap" },
245
    { MBR_COLD_RESIST_CAP, "resist_cold_cap" },
246
    { MBR_ENERGY_RESIST_CAP, "resist_energy_cap" },  // 230
247
    { MBR_POISON_RESIST_CAP, "resist_poison_cap" },
248
    { MBR_PHYSICAL_RESIST_CAP, "resist_physical_cap" },
249
    { MBR_HIT_CHANCE, "hit_chance" },
250
    // Additions for new properties mods
251
    { MBR_LOWER_REAG_COST_MOD, "lower_reagent_cost_mod" },
252
    { MBR_SPELL_DAMAGE_INCREASE_MOD, "spell_damage_increase_mod" },
253
    { MBR_FASTER_CASTING_MOD, "faster_casting_mod" },  // 235
254
    { MBR_FASTER_CAST_RECOVERY_MOD, "faster_cast_recovery_mod" },
255
    { MBR_DEFENCE_CHANCE_INCREASE_MOD, "defence_increase_mod" },
256
    { MBR_DEFENCE_CHANCE_INCREASE_CAP_MOD, "defence_increase_cap_mod" },
257
    { MBR_LOWER_MANA_COST_MOD, "lower_mana_cost_mod" },
258
    { MBR_FIRE_RESIST_CAP_MOD, "resist_fire_cap_mod" },  // 240
259
    { MBR_COLD_RESIST_CAP_MOD, "resist_cold_cap_mod" },
260
    { MBR_ENERGY_RESIST_CAP_MOD, "resist_energy_cap_mod" },
261
    { MBR_POISON_RESIST_CAP_MOD, "resist_poison_cap_mod" },
262
    { MBR_PHYSICAL_RESIST_CAP_MOD, "resist_physical_cap_mod" },
263
    { MBR_LUCK_MOD, "luck_mod" },  // 245
264
    { MBR_HIT_CHANCE_MOD, "hit_chance_mod" },
265
    { MBR_PACKAGE, "package" },
266
    { MBR_SWING_SPEED_INCREASE, "swing_speed_increase" },
267
    { MBR_SWING_SPEED_INCREASE_MOD, "swing_speed_increase_mod" },
268
    { MBR_EXPORTED_FUNCTIONS, "exported_functions" },  // 250
269
    { MBR_DISABLE_INACTIVITY_TIMEOUT, "disable_inactivity_timeout" },
270
    { MBR_CURSED, "cursed" },
271
    { MBR_SNOOPSCRIPT, "snoopscript" },
272
    { MBR_CHARACTER_OWNER, "character_owner" },
273
    { MBR_PARRYCHANCE_MOD, "parrychance_mod" },  // 255
274
    { MBR_PILOT, "pilot" },
275
    { MBR_BUFFS, "buffs" },
276
    { MBR_WEIGHT_MULTIPLIER_MOD, "weight_multiplier_mod" },
277
    { MBR_HELD_WEIGHT_MULTIPLIER, "held_weight_multiplier" },
278
    { MBR_FUNCTION, "function" },
279
    { MBR_POSITION_CHANGED_AT, "position_changed_at" },
280
    { MBR_MOVED_AT, "moved_at" },
281
    { MBR_VISUAL_RANGE, "visual_range" },
282
    { MBR_MIN_ATTACK_RANGE_INCREASE, "min_attack_range_increase" },
283
    { MBR_MIN_ATTACK_RANGE_INCREASE_MOD, "min_attack_range_increase_mod" },  // 265
284
    { MBR_MAX_ATTACK_RANGE_INCREASE, "max_attack_range_increase" },
285
    { MBR_MAX_ATTACK_RANGE_INCREASE_MOD, "max_attack_range_increase_mod" },
286
    { MBR_ITEMS_DECAY, "items_decay" },
287
    { MBR_LOGGED_IN, "logged_in" },
288
};
289
int n_objmembers = sizeof object_members / sizeof object_members[0];
290
ObjMember* getKnownObjMember( const char* token )
5,724✔
291
{
292
  static auto cache = []() -> std::unordered_map<std::string, ObjMember*>
225✔
293
  {
294
    std::unordered_map<std::string, ObjMember*> m;
225✔
295
    for ( int i = 0; i < n_objmembers; ++i )
61,200✔
296
    {
297
      m[object_members[i].code] = &object_members[i];
60,975✔
298
    }
299
    return m;
225✔
300
  }();
5,724✔
301
  std::string temp( token );
5,724✔
302
  std::transform( temp.begin(), temp.end(), temp.begin(),
5,724✔
303
                  []( char c ) { return static_cast<char>( ::tolower( c ) ); } );
36,766✔
304
  auto member = cache.find( temp );
5,724✔
305
  if ( member != cache.end() )
5,724✔
306
    return member->second;
3,724✔
307
  return nullptr;
2,000✔
308
}
5,724✔
309
ObjMember* getObjMember( int id )
8,285✔
310
{
311
  if ( id >= n_objmembers )
8,285✔
312
    return nullptr;
×
313
  return &( object_members[id] );
8,285✔
314
}
315

316
ObjMethod object_methods[] = {
317
    { MTH_ISA, "isa", false },                // 0
318
    { MTH_SET_MEMBER, "set_member", false },  // 1
319
    { MTH_GET_MEMBER, "get_member", false },
320
    { MTH_SETPOISONED, "setpoisoned", false },
321
    { MTH_SETPARALYZED, "setparalyzed", false },
322
    { MTH_SETCRIMINAL, "setcriminal", false },  // 5
323
    { MTH_SETLIGHTLEVEL, "setlightlevel", false },
324
    { MTH_SQUELCH, "squelch", false },
325
    { MTH_ENABLE, "enable", false },
326
    { MTH_DISABLE, "disable", false },
327
    { MTH_ENABLED, "enabled", false },  // 10
328
    { MTH_SETCMDLEVEL, "setcmdlevel", false },
329
    { MTH_SPENDGOLD, "spendgold", false },
330
    { MTH_SETMURDERER, "setmurderer", false },
331
    { MTH_REMOVEREPORTABLE, "removereportable", false },
332
    { MTH_GETGOTTENITEM, "getgottenitem", false },  // 15
333
    { MTH_CLEARGOTTENITEM, "cleargottenitem", false },
334
    { MTH_SETWARMODE, "setwarmode", false },
335
    { MTH_SETMASTER, "setmaster", false },                        // npc
336
    { MTH_MOVE_OFFLINE_MOBILES, "move_offline_mobiles", false },  // boat
337
    { MTH_SETCUSTOM, "setcustom", false },                        // house       //20
338
    { MTH_GETPINS, "getpins", false },                            // map
339
    { MTH_INSERTPIN, "insertpin", false },
340
    { MTH_APPENDPIN, "appendpin", false },
341
    { MTH_ERASEPIN, "erasepin", false },
342
    { MTH_OPEN, "open", false },  // door             //25
343
    { MTH_CLOSE, "close", false },
344
    { MTH_TOGGLE, "toggle", false },
345
    { MTH_BAN, "ban", false },  // account
346
    { MTH_UNBAN, "unban", false },
347
    { MTH_SETPASSWORD, "setpassword", false },  // 30
348
    { MTH_CHECKPASSWORD, "checkpassword", false },
349
    { MTH_SETNAME, "setname", false },
350
    { MTH_GETCHARACTER, "getcharacter", false },
351
    { MTH_DELETECHARACTER, "deletecharacter", false },
352
    { MTH_GETPROP, "getprop", false },  // 35
353
    { MTH_SETPROP, "setprop", false },
354
    { MTH_ERASEPROP, "eraseprop", false },
355
    { MTH_PROPNAMES, "propnames", false },
356
    { MTH_ISMEMBER, "ismember", false },        // guild
357
    { MTH_ISALLYGUILD, "isallyguild", false },  // 40
358
    { MTH_ISENEMYGUILD, "isenemyguild", false },
359
    { MTH_ADDMEMBER, "addmember", false },
360
    { MTH_ADDALLYGUILD, "addallyguild", false },
361
    { MTH_ADDENEMYGUILD, "addenemyguild", false },
362
    { MTH_REMOVEMEMBER, "removemember", false },  // 45
363
    { MTH_REMOVEALLYGUILD, "removeallyguild", false },
364
    { MTH_REMOVEENEMYGUILD, "removeenemyguild", false },
365
    { MTH_SIZE, "size", false },  // ARRAY
366
    { MTH_ERASE, "erase", false },
367
    { MTH_INSERT, "insert", false },  // 50
368
    { MTH_SHRINK, "shrink", false },
369
    { MTH_APPEND, "append", false },
370
    { MTH_REVERSE, "reverse", false },
371
    { MTH_SORT, "sort", false },      // dict
372
    { MTH_EXISTS, "exists", false },  // 55
373
    { MTH_KEYS, "keys", false },
374
    { MTH_SENDPACKET, "sendpacket", false },  // packet
375
    { MTH_SENDAREAPACKET, "sendareapacket", false },
376
    { MTH_GETINT8, "getint8", false },
377
    { MTH_GETINT16, "getint16", false },  // 60
378
    { MTH_GETINT32, "getint32", false },
379
    { MTH_SETINT8, "setint8", false },
380
    { MTH_SETINT16, "setint16", false },
381
    { MTH_SETINT32, "setint32", false },
382
    { MTH_GETSTRING, "getstring", false },  // 65
383
    { MTH_GETUNICODESTRING, "getunicodestring", false },
384
    { MTH_SETSTRING, "setstring", false },
385
    { MTH_SETUNICODESTRING, "setunicodestring", false },
386
    { MTH_GETSIZE, "getsize", false },
387
    { MTH_SETSIZE, "setsize", false },              // 70
388
    { MTH_CREATEELEMENT, "createelement", false },  // datastore
389
    { MTH_FINDELEMENT, "findelement", false },
390
    { MTH_DELETEELEMENT, "deleteelement", false },
391
    { MTH_SENDEVENT, "sendevent", false },  // script
392
    { MTH_KILL, "kill", false },            // 75
393
    { MTH_LOADSYMBOLS, "loadsymbols", false },
394
    { MTH_SET_UO_EXPANSION, "set_uo_expansion", false },
395
    { MTH_CLEAR_EVENT_QUEUE, "clear_event_queue", false },
396
    { MTH_ADD_COMPONENT, "add_component", false },
397
    { MTH_ERASE_COMPONENT, "erase_component", false },  // 80
398
    { MTH_DELETE, "delete", false },
399
    { MTH_SPLIT, "split", false },
400
    { MTH_MOVE_CHAR, "move_char", false },
401
    { MTH_GETINT16FLIPPED, "getint16flipped", false },
402
    { MTH_GETINT32FLIPPED, "getint32flipped", false },  // 85
403
    { MTH_SETINT16FLIPPED, "setint16flipped", false },
404
    { MTH_SETINT32FLIPPED, "setint32flipped", false },
405
    { MTH_GETCORPSE, "getcorpse", false },
406
    { MTH_SETDEFAULTCMDLEVEL, "setdefaultcmdlevel", false },
407
    { MTH_PRIVILEGES, "privileges", false },  // 90
408
    { MTH_GETUNICODESTRINGFLIPPED, "getunicodestringflipped", false },
409
    { MTH_SETUNICODESTRINGFLIPPED, "setunicodestringflipped", false },
410
    { MTH_ADD_CHARACTER, "addcharacter", false },
411
    { MTH_SET_SWINGTIMER, "setswingtimer", false },
412
    { MTH_ATTACK_ONCE, "attack_once", false },  // 95
413
    { MTH_SETFACING, "setfacing", false },
414
    { MTH_COMPAREVERSION, "compareversion", false },
415
    { MTH_SETLEADER, "setleader", false },
416
    { MTH_ADDCANDIDATE, "addcandidate", false },
417
    { MTH_REMOVECANDIDATE, "removecandidate", false },  // 100
418
    { MTH_RANDOMENTRY, "randomentry", false },
419
    { MTH_SEEK, "seek", false },
420
    { MTH_PEEK, "peek", false },
421
    { MTH_TELL, "tell", false },
422
    { MTH_FLUSH, "flush", false },  // 105
423
    { MTH_GETSINT8, "getsint8", false },
424
    { MTH_GETSINT16, "getsint16", false },
425
    { MTH_GETSINT32, "getsint32", false },
426
    { MTH_SETSINT8, "setsint8", false },
427
    { MTH_SETSINT16, "setsint16", false },  // 110
428
    { MTH_SETSINT32, "setsint32", false },
429
    { MTH_SETAGGRESSORTO, "setaggressorto", false },
430
    { MTH_SETLAWFULLYDAMAGEDTO, "setlawfullydamagedto", false },
431
    { MTH_CLEARAGGRESSORTO, "clearaggressorto", false },
432
    { MTH_CLEARLAWFULLYDAMAGEDTO, "clearlawfullydamagedto", false },  // 115
433
    { MTH_HASSPELL, "hasspell", false },
434
    { MTH_SPELLS, "spells", false },
435
    { MTH_REMOVESPELL, "removespell", false },
436
    { MTH_ADDSPELL, "addspell", false },
437
    { MTH_DEAF, "deaf", false },  // 120
438
    { MTH_SETSEASON, "setseason", false },
439
    { MTH_NEXTSIBLING, "nextxmlsibling", false },
440
    { MTH_FIRSTCHILD, "firstxmlchild", false },
441
    { MTH_SAVEXML, "savexml", false },
442
    { MTH_APPENDNODE, "appendxmlnode", false },  // 125
443
    { MTH_SETDECLARATION, "setxmldeclaration", false },
444
    { MTH_SETATTRIBUTE, "setxmlattribute", false },
445
    { MTH_REMOVEATTRIBUTE, "removexmlattribute", false },
446
    { MTH_REMOVENODE, "removexmlnode", false },
447
    { MTH_APPENDTEXT, "appendxmltext", false },  // 130
448
    { MTH_XMLTOSTRING, "xmltostring", false },
449
    { MTH_APPENDXMLCOMMENT, "appendxmlcomment", false },
450
    { MTH_ADD_HOUSE_PART, "addhousepart", false },
451
    { MTH_ERASE_HOUSE_PART, "erasehousepart", false },
452
    { MTH_ACCEPT_COMMIT, "acceptcommit", false },  // 135
453
    { MTH_SPLITSTACK_AT, "splitstackat", false },
454
    { MTH_SPLITSTACK_INTO, "splitstackinto", false },
455
    { MTH_CANCEL_EDITING, "cancelediting", false },
456
    { MTH_CLONENODE, "clonenode", false },
457
    { MTH_HAS_EXISTING_STACK, "hasexistingstack", false },  // 140
458
    { MTH_LENGTH, "length", false },
459
    { MTH_JOIN, "join", false },
460
    { MTH_FIND, "find", false },
461
    { MTH_UPPER, "upper", false },
462
    { MTH_LOWER, "lower", false },  // 145
463
    { MTH_FORMAT, "format", false },
464
    { MTH_DISABLE_SKILLS_FOR, "disableskillsfor", false },
465
    { MTH_CYCLE, "cycle", false },
466
    { MTH_ADD_BUFF, "addbuff", false },
467
    { MTH_DEL_BUFF, "delbuff", false },  // 150
468
    { MTH_CLEAR_BUFFS, "clearbuffs", false },
469
    { MTH_CALL, "call", false },
470
    { MTH_SORTEDINSERT, "sorted_insert", false },
471
    { MTH_SETUTF8STRING, "setutf8string", false },
472
    { MTH_SET_PILOT, "set_pilot", false },  // 155
473
    { MTH_SET_ALTERNATE_MULTIID, "set_alternate_multiid", false },
474
    { MTH_FILTER, "filter", false },
475
    { MTH_REDUCE, "reduce", false },
476
    { MTH_MAP, "map", false },
477
    { MTH_FINDINDEX, "findindex", false },  // 160
478
    { MTH_SET_MULTIID, "set_multiid", false },
479
    { MTH_NEW, "new", false },
480
    { MTH_CALL_METHOD, "call_method", false },  // internal, does not need objref.xml documentation
481
    { MTH_STACKTRACE, "stacktrace", false },
482
    { MTH_ASSIGN, "assign", false },  // 165
483
    { MTH_MATCH, "match", false },
484
    { MTH_REPLACE, "replace", false },
485
};
486
int n_objmethods = sizeof object_methods / sizeof object_methods[0];
487
ObjMethod* getKnownObjMethod( const char* token )
4,400✔
488
{
489
  // cache needs to hold a pointer to the original structure! eprog_read sets the override member
490
  static auto cache = []() -> std::unordered_map<std::string, ObjMethod*>
441✔
491
  {
492
    std::unordered_map<std::string, ObjMethod*> m;
441✔
493
    for ( int i = 0; i < n_objmethods; ++i )
74,529✔
494
    {
495
      m[object_methods[i].code] = &object_methods[i];
74,088✔
496
    }
497
    return m;
441✔
498
  }();
4,400✔
499
  std::string temp( token );
4,400✔
500
  std::transform( temp.begin(), temp.end(), temp.begin(),
4,400✔
501
                  []( char c ) { return static_cast<char>( ::tolower( c ) ); } );
34,120✔
502
  auto method = cache.find( temp );
4,400✔
503
  if ( method != cache.end() )
4,400✔
504
    return method->second;
3,574✔
505
  return nullptr;
826✔
506
}
4,400✔
507
ObjMethod* getObjMethod( int id )
3,919✔
508
{
509
  if ( id >= n_objmethods )
3,919✔
UNCOV
510
    return nullptr;
×
511
  return &( object_methods[id] );
3,919✔
512
}
513

514
}  // namespace Pol::Bscript
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc