From Pawn
Each native of AMX Mod X and its standard modules that amxts covers, and what
a plugin writes in its place: an element of the API, or plain TypeScript. A
native that is not here is called as it is, from @amxts/core/natives
(Natives).
entity.<field> is any field of an entity, a player or a weapon by its own
name (player.gravity, weapon.clip); game.<field> a field of the game
rules (game.ctWins); event.<field> an argument of an event or a message
(event.attacker). The entities,
players, hooks and
messages pages list them.
amxmodx
| Pawn | amxts |
|---|---|
abort, log_error, set_fail_state | throw new Error(message) |
add, strcat | a + b |
angle_vector | vector.directions() |
argparse, parse | text.split(" ") |
arrayset | array.fill(value) |
bind_pcvar_float, bind_pcvar_num, get_cvar_float, get_pcvar_float, get_pcvar_num | cvar.number |
bind_pcvar_string, get_pcvar_string | cvar.value |
callfunc_begin, callfunc_begin_i, callfunc_end, callfunc_push_array, callfunc_push_float, callfunc_push_floatrf, callfunc_push_int, callfunc_push_intrf, callfunc_push_str, get_func_id | plugin.call() |
cellarray.inc | an array: list[i], push, length, splice, indexOf |
cellstack.inc | an array: push, pop |
celltrie.inc | a Map or a Record: get, set, has, delete, size |
change_task | clearTimeout(handle); handle = setTimeout(...) |
clamp | Math.min(Math.max(x, low), high) |
ClearSyncHud | hudLine.clear(player) |
client_cmd | player.command() |
client_print, client_print_color | player.print() |
close_dir, next_file, open_dir, read_dir | readdirSync(path) of @amxts/core/fs |
console_print | player.print(text, "console") |
contain, strfind | text.indexOf(part) |
containi | text.toLowerCase().indexOf(part) |
copy | a = b |
copyc | text.slice(0, text.indexOf(c)) |
create_cvar | new Cvar(name) |
CreateHudSyncObj | new HudLine() |
CreateMultiForward | forward.create() |
CreateOneForward | new Forward(name) |
cvar_exists | cvar.exists |
datapack.inc | an object, or a closure's variables |
date | new Date().getFullYear(), getMonth(), getDate() |
dbg_fmt_error | error.message |
dbg_trace_begin, dbg_trace_info, dbg_trace_next | error.stack |
delete_file, unlink | unlinkSync() of @amxts/core/fs |
DestroyForward, funcidx, heapspace, menu_destroy | nothing: a plugin does not need it |
dir_exists, file_exists | existsSync(path) of @amxts/core/fs |
disable_cvar_hook | cvar.removeEventListener |
disable_event, unregister_message | server.removeMessageListener |
emit_sound | entity.emitSound |
enable_cvar_hook | cvar.addEventListener |
enable_event | server.addMessageListener |
engclient_cmd(id, "drop") | player.dropItem() |
engine_changelevel | server.changeLevel() |
equal | a == b |
equali | a.toLowerCase() == b.toLowerCase() |
ExecuteForward | forward.emit() |
fclose, fopen | readFileSync, writeFileSync, appendFileSync of @amxts/core/fs |
feof, fgets | readFileSync(path).split("\n") of @amxts/core/fs |
find_player, find_player_ex | server.players.find(...) |
find_plugin_byfile, get_plugin, get_pluginsnum, is_plugin_loaded | server.plugins |
float, floatabs, floatacos, floatadd, floatasin, floatatan, floatatan2, floatcmp, floatcos, floatcosh, floatdiv, floatfract, floatlog, floatmul, floatpower, floatsin, floatsinh, floatsqroot, floatstr, floatsub, floattan, floattanh | Math, Number(text), number.toFixed(n) |
float_to_str | String(n), n.toFixed(2) |
floatround | rounded() |
format, formatex, vdformat, vformat | `${a} ${b}` |
format_args, getarg, numargs, setarg | ...args |
format_time | new Date() and its getters, padStart |
fprintf | appendFileSync(path, ${a} ${b}) of @amxts/core/fs |
fputs, write_file | writeFileSync, appendFileSync of @amxts/core/fs |
fread_blocks | readFileSync() of @amxts/core/fs |
get_amxx_verstring | server.versions |
get_array, get_array_f, get_float_byref, get_param, get_param_byref, get_param_f, get_string, param_convert | the parameters of an export function |
get_char_bytes, is_char_lower, is_char_mb, is_char_upper, is_string_category, isalnum, isalpha, isdigit, isspace, mb_strtotitle | string methods |
get_cvar_num | cvar.num() |
get_cvar_pointer | cvar.pointer |
get_cvar_string | cvar.str() |
get_distance, get_distance_f, vector_distance | a.distanceTo(b) |
get_gametime | game.time |
get_lang, get_langsnum | lang.languages() |
get_localinfo("amxx_logs") | server.logsDir |
get_mapname | server.map |
get_maxplayers | server.maxPlayers |
get_modname | server.game |
get_msg_arg_float, get_msg_arg_int, get_msg_arg_string, get_msg_args, set_msg_arg_float, set_msg_arg_int, set_msg_arg_string | event.args |
get_msg_argtype, read_datatype | event.args.isText(i) |
get_pcvar_bool | cvar.boolean |
get_players | server.players |
get_playersnum | server.players.length |
get_systime | Date.now() / 1000 |
get_time | new Date() and its getters: getHours(), getDate(), ... |
get_timeleft | game.timeLeft |
get_user_aiming | player.aim |
get_user_armor | player.armor |
get_user_authid | player.steamId |
get_user_deaths | player.deaths |
get_user_flags | player.access |
get_user_frags | player.frags |
get_user_health | player.health |
get_user_index | server.players.find(player => player.name == name) |
get_user_info | userInfo.get() |
get_user_ip | player.ip |
get_user_msgid, message_end, write_angle, write_angle_f, write_byte, write_char, write_coord, write_coord_f, write_entity, write_long, write_short, write_string | player.send() |
get_user_name | player.name |
get_user_origin(id, origin, 1) | player.eyes |
get_user_ping | player.ping |
get_user_team | player.team |
get_user_time | player.connectedSeconds |
get_user_userid | player.userId |
get_user_weapon | player.activeItem |
get_user_weapons | player.items |
get_vaultdata | storage.get(key) |
get_weaponname | weapon.classname |
GetFileTime, file_size | statSync() of @amxts/core/fs |
GetLangTransKey, SetGlobalTransTarget | lang.translate(player, key) |
has_map_ent_class | Entity.find({ classname }) != null |
hook_cvar_change | cvar.addEventListener("change", ...) |
INI_CreateParser, INI_DestroyParser, INI_ParseFile, INI_SetParseEnd, INI_SetParseStart, INI_SetRawLine, INI_SetReaders, SMC_CreateParser, SMC_DestroyParser, SMC_GetErrorString, SMC_ParseFile, SMC_SetParseEnd, SMC_SetParseStart, SMC_SetRawLine, SMC_SetReaders | configs.read(name) of @amxts/config-core |
is_map_valid | server.mapExists() |
is_user_alive | player.isAlive |
is_user_bot | player.isBot |
is_user_connected | player.isConnected |
is_user_hltv | player.isHltv |
LibraryExists, module_exists | hasModule() |
LoadFileForMe | readFileSync(path) of @amxts/core/fs |
log_amx | console.log, console.error |
log_to_file | appendFileSync(path, line) of @amxts/core/fs |
LookupLangKey | lang.translate() |
max | Math.max(a, b) |
mb_strtolower, strtolower, tolower | text.toLowerCase() |
mb_strtoupper, strtoupper, toupper | text.toUpperCase() |
mb_ucfirst, ucfirst | text[0].toUpperCase() + text.slice(1) |
menu_addblank, menu_addblank2 | menu.addBlank() |
menu_additem | menu.addItem() |
menu_addtext, menu_addtext2 | menu.addText() |
menu_create, menu_setprop, register_menucmd, register_menuid | new Menu(title, options) |
menu_display | menu.show() |
menu_item_setcall, menu_makecallback | menu.addItem({ enabled, visible }) |
menu_item_setname | menu.addItem({ title: context => ... }) |
message_begin(..., SVC_TEMPENTITY) | effects.beamPoints(...), effects.explosion(...), ... |
min | Math.min(a, b) |
mkdir | mkdirSync(path) of @amxts/core/fs |
next_hudchannel | player.showHud |
num_to_str | String(n) |
pause | plugin.stop() |
power | a ** b |
precache_generic, precache_model, precache_sound | server.precache() |
PrepareArray | forward.emit(array) |
query_client_cvar | player.queryCvar() |
random | Math.floor(Math.random() * n) |
random_float | Math.random() * (b - a) + a |
random_num | Math.floor(Math.random() * (b - a + 1)) + a |
read_argc, read_args, read_argv, read_argv_float, read_argv_int | the command's arguments: server.addCommand<Args>(usage, ...) |
read_data | event.<field>, event.args |
read_datanum | event.args.length |
read_file | readFileSync(path).split("\n")[i] of @amxts/core/fs |
read_flags | accessOf() |
register_clcmd, register_concmd | server.addCommand |
register_cvar | new Cvar(name, default) |
register_dictionary | lang.load() |
register_event, register_event_ex | server.addMessageListener(name, listener) |
register_message | server.addMessageListener() |
register_native | export function |
register_plugin | plugin() |
register_srvcmd | server.addServerCommand |
remove_quotes | text.replaceAll("\"", "") |
remove_task | clearTimeout() |
remove_vaultdata | storage.delete(key) |
rename_file | renameSync() of @amxts/core/fs |
replace, replace_stringex | text.replace(a, b) |
replace_string | text.replaceAll(a, b) |
rmdir | rmdirSync() of @amxts/core/fs |
server_cmd | server.command() |
server_print | console.log |
set_array, set_array_f, set_float_byref, set_param_byref, set_string | the result of an export function |
set_cvar_float, set_pcvar_float, set_pcvar_num | cvar.number = ... |
set_cvar_num | cvar.setNum() |
set_cvar_string | cvar.setStr() |
set_dhudmessage, show_dhudmessage | player.showHud(text, { large: true }) |
set_error_filter | try { ... } catch (error) { ... } |
set_hudmessage, show_hudmessage | player.showHud() |
set_module_filter, set_native_filter | nothing: a missing native answers 0 and says so once |
set_msg_block | event.preventDefault() |
set_pcvar_bool | cvar.boolean = ... |
set_pcvar_string | cvar.value = ... |
set_task | setTimeout() |
set_user_info | userInfo.set() |
set_vaultdata | storage.set(key, value) |
setc | "a".repeat(n) |
show_menu | menu.show(player, data) |
show_motd | player.showMotd() |
ShowSyncHudMsg | hudLine.show(player, text) |
sorting.inc | array.sort((a, b) => a - b) |
split_string, strtok, strtok2 | text.split(...) |
sqroot | Math.sqrt(x) |
str_to_float, strtof | parseFloat(text) |
str_to_num | parseInt(text) |
strcmp | a == b, a.localeCompare(b) |
strlen | text.length |
strncmp | a.startsWith(b) |
strtol | parseInt(text, radix) |
swapchars | bitwise operators |
task_exists | the handle setTimeout returned, kept in a variable |
tickcount | performance.now() |
time | new Date().getHours(), getMinutes(), getSeconds() |
trim | text.trim() |
unpause | plugin.start() |
user_has_weapon | player.items.some(item => item.kind == "ak47") |
user_kill | player.kill() |
user_slap | player.slap() |
vaultdata_exists | storage.has(key) |
vector_length | vector.magnitude() |
vector_to_angle | vector.toAngles() |
velocity_by_aim | vector.fromAngles() |
fun
| Pawn | amxts |
|---|---|
get_user_godmode | player.takeDamage |
get_user_gravity | player.gravity |
get_user_maxspeed | player.maxSpeed |
get_user_noclip | player.moveType == "noclip" |
get_user_rendering, set_user_rendering | player.renderMode, renderFx, renderColor, renderAmount |
give_item | player.give() |
set_user_armor | player.armor |
set_user_footsteps | player.silentSteps |
set_user_frags | player.frags |
set_user_godmode | player.takeDamage = "no" |
set_user_gravity | player.gravity = ... |
set_user_health | player.health |
set_user_maxspeed | player.maxSpeed = ... |
set_user_noclip | player.moveType = "noclip" |
set_user_origin | player.origin = ... |
spawn | entity.spawn() |
strip_user_weapons | player.removeAllItems() |
cstrike
| Pawn | amxts |
|---|---|
cs_create_entity | Entity.create(classname) |
cs_find_ent_by_class | Entity.find({ classname }) |
cs_find_ent_by_owner | Entity.find({ owner }) |
cs_get_user_armor, cs_set_user_armor | player.armor, player.kevlar |
cs_get_user_bpammo | player.getAmmo() |
cs_get_user_deaths, cs_set_user_deaths | player.deaths |
cs_get_user_defuse | player.hasDefuser |
cs_get_user_hasprim | player.hasPrimary |
cs_get_user_hostagekills | player.hostagesKilled |
cs_get_user_lastactivity | player.lastMovement |
cs_get_user_model, cs_set_user_model | player.model |
cs_get_user_money | player.money |
cs_get_user_nvg | player.hasNightVision |
cs_get_user_shield | player.ownsShield |
cs_get_user_team | player.team |
cs_get_user_tked | player.justKilledTeammate |
cs_get_user_vip | player.isVip |
cs_get_user_weapon | player.activeItem?.kind |
cs_get_user_weapon_entity | player.activeItem |
cs_get_weapon_ammo | weapon.clip |
cs_get_weapon_burst | weapon.weaponState.includes("glockBurstMode") |
cs_get_weapon_id | weapon.kind |
cs_get_weapon_silen | weapon.weaponState.includes("uspSilenced") |
cs_reset_user_model | player.resetModel() |
cs_set_ent_class | entity.classname = ... |
cs_set_user_bpammo | player.setAmmo() |
cs_set_user_defuse | player.hasDefuser = ... |
cs_set_user_hostagekills | player.hostagesKilled = ... |
cs_set_user_lastactivity | player.lastMovement = ... |
cs_set_user_money | player.money = ... |
cs_set_user_nvg | player.hasNightVision = ... |
cs_set_user_team | player.team = ... |
cs_set_user_tked | player.justKilledTeammate = ... |
cs_set_user_vip | player.isVip = ... |
cs_set_weapon_ammo | weapon.clip = ... |
cs_set_weapon_burst, cs_set_weapon_silen | weapon.weaponState |
cs_user_spawn | player.respawn() |
engine
| Pawn | amxts |
|---|---|
attach_view | player.view |
call_think | entity.think() |
create_entity | Entity.create(classname) |
DispatchSpawn | entity.spawn() |
entity_get_byte, entity_get_edict, entity_get_edict2, entity_get_float, entity_get_int, entity_get_string, entity_get_vector, entity_set_byte, entity_set_edict, entity_set_float, entity_set_int, entity_set_string, entity_set_vector | entity.<field>, player.<field> |
entity_range | a.origin.distanceTo(b.origin) |
entity_set_model | entity.model = ... |
entity_set_origin | entity.origin = ... |
entity_set_size | entity.setSize(mins, maxs) |
find_ent_by_class | Entity.find({ classname }) |
find_ent_by_model | Entity.find({ model }) |
find_ent_by_owner | Entity.find({ owner }) |
find_ent_in_sphere | Entity.findAll({ near, radius }) |
find_sphere_class | Entity.findAll({ classname, near, radius }) |
force_use | entity.use(...) |
get_speak, set_speak | player.muted, heardByEveryone, hearsEveryone |
get_usercmd, set_usercmd | ClientCmdStartEvent |
halflife_time | game.time |
is_in_viewcone, is_visible | player.canSee() |
is_valid_ent | entity.exists |
point_contents | pointContents() |
register_impulse | server.addEventListener("impulse", listener) |
register_think | game.addEventListener("think", listener, { classname }) |
register_touch | game.addEventListener("touch", listener, { toucher, touched }) |
remove_entity | entity.remove() |
set_ent_rendering | entity.renderMode, renderFx, renderColor, renderAmount |
set_lights | server.lightStyle |
trace_hull | trace.hull() |
trace_line | player.canSeePoint() |
unregister_impulse | server.removeEventListener |
unregister_think, unregister_touch | game.removeEventListener |
fakemeta
| Pawn | amxts |
|---|---|
create_tr2, free_tr2, get_tr2 | trace.line() |
dllfunc(DLLFunc_ClientConnect) | server.addBot() |
engfunc(EngFunc_CreateFakeClient) | server.addBot() |
get_cd, set_cd | ClientDataEvent |
get_ent_data, get_ent_data_entity, get_ent_data_float, get_ent_data_string, get_ent_data_vector, get_pdata_bool, get_pdata_byte, get_pdata_ehandle, get_pdata_ent, get_pdata_float, get_pdata_int, get_pdata_short, get_pdata_string, get_pdata_vector, pev, set_ent_data, set_ent_data_entity, set_ent_data_float, set_ent_data_string, set_ent_data_vector, set_pdata_bool, set_pdata_byte, set_pdata_ehandle, set_pdata_ent, set_pdata_float, set_pdata_int, set_pdata_short, set_pdata_string, set_pdata_vector, set_pev, set_pev_string | entity.<field>, player.<field> |
get_es, set_es | EntityStateEvent |
get_gamerules_entity, get_gamerules_float, get_gamerules_int, get_gamerules_string, get_gamerules_vector, set_gamerules_entity, set_gamerules_float, set_gamerules_int, set_gamerules_string, set_gamerules_vector | game.<field> |
pev_valid | entity.exists |
register_forward(FM_AddToFullPack, ..., 1) | EntityStateEvent |
hamsandwich
| Pawn | amxts |
|---|---|
DisableHamForward | game.removeEventListener |
EnableHamForward | game.addEventListener |
ExecuteHam, ExecuteHamB | weapon.deploy(), weapon.deploy({ hooks: false }) |
get_pdata_cbase, get_pdata_cbase_safe, set_pdata_cbase | entity.<field>, player.<field> |
GetHamReturnEntity, GetHamReturnFloat, GetHamReturnInteger, GetHamReturnStatus, GetHamReturnString, GetHamReturnVector, GetOrigHamReturnEntity, GetOrigHamReturnFloat, GetOrigHamReturnInteger, GetOrigHamReturnString, GetOrigHamReturnVector | event.result |
RegisterHam | game.addEventListener() |
RegisterHamFromEntity | game.addEventListener(name, listener, { classname }) |
SetHamParamEntity, SetHamParamEntity2, SetHamParamFloat, SetHamParamInteger, SetHamParamString, SetHamParamVector | event.<field> = ... |
SetHamReturnEntity, SetHamReturnFloat, SetHamReturnInteger, SetHamReturnString, SetHamReturnVector | the listener's return value |
nvault
| Pawn | amxts |
|---|---|
nvault_close | nothing: a plugin does not need it |
nvault_get, nvault_lookup | storage.get() |
nvault_open | new Storage(name) |
nvault_prune | storage.prune() |
nvault_remove | storage.delete() |
nvault_set | storage.set() |
geoip
| Pawn | amxts |
|---|---|
geoip_code2_ex | player.countryCode |
geoip_country_ex | player.country |
regex
| Pawn | amxts |
|---|---|
regex.inc | RegExp: /.../.exec(text), text.match, text.replace |
json
| Pawn | amxts |
|---|---|
json.inc | JSON.parse<T>(text), JSON.stringify(value) |
reapi
| Pawn | amxts |
|---|---|
DisableHookChain | game.removeEventListener |
DisableHookMessage, UnregisterMessage | server.removeMessageListener |
EnableHookChain | game.addEventListener |
EnableHookMessage | server.addMessageListener |
engset_view | player.view |
FClassnameIs | entity.classname == name |
get_entvar, get_member, get_member_s, set_entvar, set_member, set_member_s | entity.<field>, player.<field> |
get_member_game, set_member_game | game.<field> |
GetHookChainReturn | event.result |
GetMessageArgsNum | event.args.length |
GetMessageArgType | event.args.isText(i) |
GetMessageData | event.<field> |
is_entity | entity.exists |
is_regamedll, is_rehlds | server.versions |
RegisterHookChain | game.addEventListener() |
RegisterMessage | server.addMessageListener(name, listener) |
REU_GetAuthKey | player.authKey |
REU_GetAuthtype | player.authType |
REU_GetProtocol | player.protocol |
rg_add_account | player.money += ... |
rg_balance_teams | game.balanceTeams() |
rg_check_win_conditions | game.checkWinConditions() |
rg_create_entity | Entity.create(classname) |
rg_drop_item | player.dropItem() |
rg_find_ent_by_class | Entity.find({ classname }) |
rg_find_ent_by_owner | Entity.find({ owner }) |
rg_find_weapon_bpack_by_name | player.items.find(item => item.classname == name) |
rg_get_user_ammo | weapon.clip |
rg_get_user_armor, rg_set_user_armor | player.armor, player.kevlar |
rg_get_user_bpammo | player.getAmmo() |
rg_give_defusekit | player.hasDefuser = true |
rg_give_item | player.give() |
rg_has_item_by_name | player.items.some(item => item.classname == name) |
rg_hint_message | player.screen.hint() |
rg_join_team | player.joinTeam() |
rg_remove_all_items | player.removeAllItems() |
rg_remove_entity | entity.remove() |
rg_remove_item | player.removeItem(weapon) |
rg_remove_items_by_slot | player.removeItems() |
rg_reset_maxspeed | player.resetMaxSpeed() |
rg_reset_user_model | player.resetModel() |
rg_restart_round | game.restartRound() |
rg_round_end | game.endRound() |
rg_round_respawn | player.respawn() |
rg_send_audio | player.playSound() |
rg_send_bartime, rg_send_bartime2 | player.screen.progressBar() |
rg_set_observer_mode | player.observerMode = ... |
rg_set_user_ammo | weapon.clip = ... |
rg_set_user_bpammo | player.setAmmo() |
rg_set_user_footsteps | player.silentSteps |
rg_set_user_model | player.model |
rg_set_user_team | player.team |
rg_swap_all_players | game.swapTeams() |
rg_switch_weapon | player.switchWeapon() |
rg_update_teamscores | game.ctWins = ..., game.terroristWins = ... |
rg_weapon_deploy | weapon.deploy() |
rg_weapon_reload | weapon.reload() |
rg_weapon_send_animation | weapon.sendWeaponAnim(...) |
rh_drop_client | player.kick(reason) |
rh_emit_sound2 | entity.emitSound |
rh_get_mapname | server.map |
SetHookChainArg, SetMessageData | event.<field> = ... |
SetHookChainReturn | the listener's return value |
SetMessageBlock | event.preventDefault() |
Natives
A native is a function one AMX Mod X plugin or module offers the others. Natives go both ways here: a TypeScript plugin exports its own for Pawn plugins, and calls the natives of AMX Mod X, ReAPI and other modules where @amxts/core has nothing of its own.
Testing
A test loads the plugin's real code — compiled by the same AssemblyScript, against the same API and natives as the server build — into a fake server written in TypeScript, and drives it the way players and the game would. The library is @amxts/core/test-utils, part of the core: