[{"data":1,"prerenderedAt":4735},["ShallowReactive",2],{"navigation-docs_en":3,"\u002Fdocs\u002Fgetting-started\u002Fcli":140,"\u002Fdocs\u002Fgetting-started\u002Fcli-surround":4729,"\u002Fdocs\u002Fgetting-started\u002Fcli-current":4734},[4,35,61,91,109,123,133],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":34},"Getting started","i-lucide-rocket","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"Introduction","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F01.introduction",{"title":15,"path":16,"stem":17},"Quick start","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002F1.getting-started\u002F02.quick-start",{"title":19,"path":20,"stem":21},"CLI","\u002Fdocs\u002Fgetting-started\u002Fcli","docs\u002F1.getting-started\u002F03.cli",{"title":23,"path":24,"stem":25},"Installing on a server","\u002Fdocs\u002Fgetting-started\u002Finstall","docs\u002F1.getting-started\u002F04.install",{"title":27,"path":28,"stem":29},"A server in Docker","\u002Fdocs\u002Fgetting-started\u002Fdocker","docs\u002F1.getting-started\u002F05.docker",{"title":31,"path":32,"stem":33},"Limitations","\u002Fdocs\u002Fgetting-started\u002Flimitations","docs\u002F1.getting-started\u002F06.limitations",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"Core","i-lucide-zap","\u002Fdocs\u002Fcore","docs\u002F2.core",[41,45,49,53,57],{"title":42,"path":43,"stem":44},"Plugin","\u002Fdocs\u002Fcore\u002Fplugin","docs\u002F2.core\u002F01.plugin",{"title":46,"path":47,"stem":48},"Game events","\u002Fdocs\u002Fcore\u002Fhooks","docs\u002F2.core\u002F02.hooks",{"title":50,"path":51,"stem":52},"Forwards","\u002Fdocs\u002Fcore\u002Fforwards","docs\u002F2.core\u002F03.forwards",{"title":54,"path":55,"stem":56},"Async and promises","\u002Fdocs\u002Fcore\u002Fasync","docs\u002F2.core\u002F04.async",{"title":58,"path":59,"stem":60},"Performance","\u002Fdocs\u002Fcore\u002Fperformance","docs\u002F2.core\u002F05.performance",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":34},"Game","i-lucide-gamepad-2","\u002Fdocs\u002Fgame","docs\u002F3.game",[67,71,75,79,83,87],{"title":68,"path":69,"stem":70},"Players and entities","\u002Fdocs\u002Fgame\u002Fentities","docs\u002F3.game\u002F01.entities",{"title":72,"path":73,"stem":74},"Players: actions","\u002Fdocs\u002Fgame\u002Fplayers","docs\u002F3.game\u002F02.players",{"title":76,"path":77,"stem":78},"Effects","\u002Fdocs\u002Fgame\u002Feffects","docs\u002F3.game\u002F03.effects",{"title":80,"path":81,"stem":82},"Flags","\u002Fdocs\u002Fgame\u002Fflags","docs\u002F3.game\u002F04.flags",{"title":84,"path":85,"stem":86},"Cvars","\u002Fdocs\u002Fgame\u002Fcvars","docs\u002F3.game\u002F05.cvars",{"title":88,"path":89,"stem":90},"Messages","\u002Fdocs\u002Fgame\u002Fmessages","docs\u002F3.game\u002F06.messages",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":34},"Data","i-lucide-database","\u002Fdocs\u002Fdata","docs\u002F4.data",[97,101,105],{"title":98,"path":99,"stem":100},"Storage","\u002Fdocs\u002Fdata\u002Fstorage","docs\u002F4.data\u002F01.storage",{"title":102,"path":103,"stem":104},"Files","\u002Fdocs\u002Fdata\u002Ffs","docs\u002F4.data\u002F02.fs",{"title":106,"path":107,"stem":108},"HTTP","\u002Fdocs\u002Fdata\u002Fhttp","docs\u002F4.data\u002F03.http",{"title":110,"icon":111,"path":112,"stem":113,"children":114,"page":34},"Modules","i-lucide-package","\u002Fdocs\u002Fmodules","docs\u002F5.modules",[115,119],{"title":116,"path":117,"stem":118},"Shared modules","\u002Fdocs\u002Fmodules\u002Fshared-modules","docs\u002F5.modules\u002F01.shared-modules",{"title":120,"path":121,"stem":122},"Creating a module","\u002Fdocs\u002Fmodules\u002Fcreating-a-module","docs\u002F5.modules\u002F02.creating-a-module",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":34},"Pawn","i-lucide-plug","\u002Fdocs\u002Fpawn","docs\u002F6.pawn",[129],{"title":130,"path":131,"stem":132},"Natives","\u002Fdocs\u002Fpawn\u002Fnatives","docs\u002F6.pawn\u002F01.natives",{"title":134,"path":135,"stem":136,"children":137,"icon":139},"Testing","\u002Fdocs\u002Ftesting","docs\u002F7.testing\u002F01.index",[138],{"title":134,"path":135,"stem":136},"i-lucide-flask-conical",{"id":141,"title":142,"body":143,"description":4723,"extension":4724,"meta":4725,"navigation":4726,"path":20,"seo":4727,"stem":21,"__hash__":4728},"docs_en\u002Fdocs\u002F1.getting-started\u002F03.cli.md","The amxts command",{"type":144,"value":145,"toc":4703},"minimark",[146,162,264,285,295,303,310,315,486,488,504,561,571,577,584,707,900,911,1384,1387,1393,1398,1410,1442,1794,1806,1819,1833,1837,1845,2080,2082,2137,2143,2149,2164,2175,2222,2225,2237,2251,2266,2288,2306,2314,2320,2327,2355,2419,2435,2437,2660,2690,2694,2701,2744,2774,2797,2799,2854,2860,2862,3025,3039,3041,3279,3302,3345,3353,3359,3361,3416,3442,3444,3499,3507,3553,3572,3579,3753,3769,3867,3870,3873,3982,3988,4040,4043,4049,4066,4069,4079,4241,4262,4294,4331,4445,4554,4573,4630,4632,4687,4693,4699],[147,148,149,153,154,157,158,161],"p",{},[150,151,152],"code",{},"amxts"," is the command a project runs: it creates projects and modules, adds\nmodules, builds, deploys, type-checks and tests. It is the package\n",[150,155,156],{},"@amxts\u002Fcli",", which ",[150,159,160],{},"@amxts\u002Fcore"," depends on, so every project has it and runs\nit through its package manager:",[163,164,166,203,223,243],"code-group",{"sync":165},"pm",[167,168,174],"pre",{"className":169,"code":170,"filename":171,"language":172,"meta":173,"style":173},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npx amxts \u003Ccommand>\n","npm","sh","",[150,175,176],{"__ignoreMap":173},[177,178,181,185,189,193,196,200],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sBMFI","npx",[177,186,188],{"class":187},"sfazB"," amxts",[177,190,192],{"class":191},"sMK4o"," \u003C",[177,194,195],{"class":187},"comman",[177,197,199],{"class":198},"sTEyZ","d",[177,201,202],{"class":191},">\n",[167,204,207],{"className":169,"code":205,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts \u003Ccommand>\n","pnpm",[150,208,209],{"__ignoreMap":173},[177,210,211,213,215,217,219,221],{"class":179,"line":180},[177,212,206],{"class":183},[177,214,188],{"class":187},[177,216,192],{"class":191},[177,218,195],{"class":187},[177,220,199],{"class":198},[177,222,202],{"class":191},[167,224,227],{"className":169,"code":225,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts \u003Ccommand>\n","yarn",[150,228,229],{"__ignoreMap":173},[177,230,231,233,235,237,239,241],{"class":179,"line":180},[177,232,226],{"class":183},[177,234,188],{"class":187},[177,236,192],{"class":191},[177,238,195],{"class":187},[177,240,199],{"class":198},[177,242,202],{"class":191},[167,244,247],{"className":169,"code":245,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts \u003Ccommand>\n","bun",[150,248,249],{"__ignoreMap":173},[177,250,251,254,256,258,260,262],{"class":179,"line":180},[177,252,253],{"class":183},"bunx",[177,255,188],{"class":187},[177,257,192],{"class":191},[177,259,195],{"class":187},[177,261,199],{"class":198},[177,263,202],{"class":191},[147,265,266,267,269,270,273,274,277,278,280,281,284],{},"The command works with the project's own core, the ",[150,268,160],{}," in its\n",[150,271,272],{},"node_modules",": a core older or newer than the command knows is an error that\nsays which of the two to update. Installed globally\n(",[150,275,276],{},"npm install -g @amxts\u002Fcli","), ",[150,279,152],{}," works the same way in any project, and\n",[150,282,283],{},"init"," anywhere.",[147,286,287,290,291,294],{},[150,288,289],{},"amxts --help"," lists the commands, ",[150,292,293],{},"amxts \u003Ccommand> --help"," shows a\ncommand's options with examples. A mistyped command gets a suggestion:",[167,296,301],{"className":297,"code":299,"language":300},[298],"language-text","$ npx amxts buidl\n✖ Unknown command buidl\n  Did you mean amxts build?\n","text",[150,302,299],{"__ignoreMap":173},[147,304,305,306,309],{},"An error is one line and a hint under it. ",[150,307,308],{},"--debug"," adds where it happened,\nfor a bug report.",[311,312,314],"h2",{"id":313},"commands","Commands",[316,317,318,331],"table",{},[319,320,321],"thead",{},[322,323,324,328],"tr",{},[325,326,327],"th",{},"command",[325,329,330],{},"what it does",[332,333,334,351,364,380,397,410,430,443,460,473],"tbody",{},[322,335,336,345],{},[337,338,339],"td",{},[340,341,343],"a",{"href":342},"#init",[150,344,283],{},[337,346,347,348],{},"creates a project, or a module package with ",[150,349,350],{},"--module",[322,352,353,361],{},[337,354,355],{},[340,356,358],{"href":357},"#dev",[150,359,360],{},"dev",[337,362,363],{},"builds, deploys to the server and does it again on every save",[322,365,366,374],{},[337,367,368],{},[340,369,371],{"href":370},"#build",[150,372,373],{},"build",[337,375,376,377],{},"builds the plugins and the modules into ",[150,378,379],{},"dist\u002F",[322,381,382,390],{},[337,383,384],{},[340,385,387],{"href":386},"#typecheck",[150,388,389],{},"typecheck",[337,391,392,393,396],{},"checks the plugins and ",[150,394,395],{},"amxts.config.ts"," as the editor does",[322,398,399,407],{},[337,400,401],{},[340,402,404],{"href":403},"#test",[150,405,406],{},"test",[337,408,409],{},"runs the project's tests on a fake server",[322,411,412,420],{},[337,413,414],{},[340,415,417],{"href":416},"#module",[150,418,419],{},"module",[337,421,422,425,426,429],{},[150,423,424],{},"module add"," installs a module and lists it in the config; ",[150,427,428],{},"module list"," shows them",[322,431,432,440],{},[337,433,434],{},[340,435,437],{"href":436},"#check",[150,438,439],{},"check",[337,441,442],{},"in a module package: checks it is ready to publish",[322,444,445,453],{},[337,446,447],{},[340,448,450],{"href":449},"#prepare",[150,451,452],{},"prepare",[337,454,455,456,459],{},"gets the server's includes and writes ",[150,457,458],{},".amxts\u002F"," for the editor",[322,461,462,470],{},[337,463,464],{},[340,465,467],{"href":466},"#upgrade",[150,468,469],{},"upgrade",[337,471,472],{},"moves the project to another amxts release: the packages, the code, the build and the server",[322,474,475,483],{},[337,476,477],{},[340,478,480],{"href":479},"#info",[150,481,482],{},"info",[337,484,485],{},"versions and settings, for a bug report",[311,487,283],{"id":283},[147,489,490,491,495,496,498,499,503],{},"Creates a project. It asks, in this order: the package manager (the one that\nruns the command is picked), the folder, the modules (the\n",[340,492,494],{"href":493},"\u002Fmodules","modules catalog","'s), oxlint and oxfmt, git,\nthe server's folder for ",[150,497,360],{}," and, when that server's includes do not say,\nwhich server the project is for. Then it writes the files, installs the\ndependencies, gets ",[340,500,502],{"href":501},"#the-servers-includes","the server's includes"," and says\nwhat to run next:",[163,505,506,521,535,548],{"sync":165},[167,507,509],{"className":169,"code":508,"filename":171,"language":172,"meta":173,"style":173},"npm create amxts@latest\n",[150,510,511],{"__ignoreMap":173},[177,512,513,515,518],{"class":179,"line":180},[177,514,171],{"class":183},[177,516,517],{"class":187}," create",[177,519,520],{"class":187}," amxts@latest\n",[167,522,524],{"className":169,"code":523,"filename":206,"language":172,"meta":173,"style":173},"pnpm create amxts\n",[150,525,526],{"__ignoreMap":173},[177,527,528,530,532],{"class":179,"line":180},[177,529,206],{"class":183},[177,531,517],{"class":187},[177,533,534],{"class":187}," amxts\n",[167,536,538],{"className":169,"code":537,"filename":226,"language":172,"meta":173,"style":173},"yarn create amxts\n",[150,539,540],{"__ignoreMap":173},[177,541,542,544,546],{"class":179,"line":180},[177,543,226],{"class":183},[177,545,517],{"class":187},[177,547,534],{"class":187},[167,549,551],{"className":169,"code":550,"filename":246,"language":172,"meta":173,"style":173},"bun create amxts\n",[150,552,553],{"__ignoreMap":173},[177,554,555,557,559],{"class":179,"line":180},[177,556,246],{"class":183},[177,558,517],{"class":187},[177,560,534],{"class":187},[147,562,563,566,567,570],{},[150,564,565],{},"npm create amxts"," and ",[150,568,569],{},"npx amxts init"," are the same command. What it asks\nlooks like this:",[167,572,575],{"className":573,"code":574,"language":300},[298],"┌  amxts 0.2.0 · a new project\n│\n◇  Which package manager?\n│  npm\n│\n◇  Where should the project go?\n│  my-server\n│\n◇  Which modules? (space to pick, enter to go on)\n│  menu-core\n│\n◇  Add oxlint and oxfmt? (lint and format)\n│  Yes\n│\n◇  Initialize a git repository?\n│  Yes\n│\n◇  Where is the server? its addons\u002Famxts folder, for npm run dev - empty to skip\n│  D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts\n│\n◆  Created my-server in my-server\n│\n●  config-core is listed too: menu-core needs it\n│\n◇  Installed dependencies with npm 11.16.0\n│\n◆  Includes: the server's own (D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxmodx\u002Fscripting\u002Finclude)\n│\n◆  Initialized a git repository\n│\n◆  Prepared the editor config (.amxts\u002Ftsconfig.json)\n│\n◇  Next steps ──────────────────────────────────────╮\n│                                                   │\n│  cd my-server                                     │\n│  npm run dev    # build, deploy, rebuild on save  │\n│                                                   │\n├───────────────────────────────────────────────────╯\n│\n└  Docs: https:\u002F\u002Famxts.github.io\u002Fdocs\u002Fgetting-started\u002Fquick-start\n",[150,576,574],{"__ignoreMap":173},[147,578,579,580,583],{},"Every question is also a flag, and ",[150,581,582],{},"--yes"," takes the defaults for the rest -\nfor a script or CI:",[163,585,586,621,651,680],{"sync":165},[167,587,589],{"className":169,"code":588,"filename":171,"language":172,"meta":173,"style":173},"npx amxts init my-server --modules menu-core,config-core --no-git --server D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts --yes\n",[150,590,591],{"__ignoreMap":173},[177,592,593,595,597,600,603,606,609,612,615,618],{"class":179,"line":180},[177,594,184],{"class":183},[177,596,188],{"class":187},[177,598,599],{"class":187}," init",[177,601,602],{"class":187}," my-server",[177,604,605],{"class":187}," --modules",[177,607,608],{"class":187}," menu-core,config-core",[177,610,611],{"class":187}," --no-git",[177,613,614],{"class":187}," --server",[177,616,617],{"class":187}," D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts",[177,619,620],{"class":187}," --yes\n",[167,622,624],{"className":169,"code":623,"filename":206,"language":172,"meta":173,"style":173},"pnpm dlx amxts init my-server --modules menu-core,config-core --no-git --server D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts --yes\n",[150,625,626],{"__ignoreMap":173},[177,627,628,630,633,635,637,639,641,643,645,647,649],{"class":179,"line":180},[177,629,206],{"class":183},[177,631,632],{"class":187}," dlx",[177,634,188],{"class":187},[177,636,599],{"class":187},[177,638,602],{"class":187},[177,640,605],{"class":187},[177,642,608],{"class":187},[177,644,611],{"class":187},[177,646,614],{"class":187},[177,648,617],{"class":187},[177,650,620],{"class":187},[167,652,654],{"className":169,"code":653,"filename":226,"language":172,"meta":173,"style":173},"yarn dlx amxts init my-server --modules menu-core,config-core --no-git --server D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts --yes\n",[150,655,656],{"__ignoreMap":173},[177,657,658,660,662,664,666,668,670,672,674,676,678],{"class":179,"line":180},[177,659,226],{"class":183},[177,661,632],{"class":187},[177,663,188],{"class":187},[177,665,599],{"class":187},[177,667,602],{"class":187},[177,669,605],{"class":187},[177,671,608],{"class":187},[177,673,611],{"class":187},[177,675,614],{"class":187},[177,677,617],{"class":187},[177,679,620],{"class":187},[167,681,683],{"className":169,"code":682,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts init my-server --modules menu-core,config-core --no-git --server D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts --yes\n",[150,684,685],{"__ignoreMap":173},[177,686,687,689,691,693,695,697,699,701,703,705],{"class":179,"line":180},[177,688,253],{"class":183},[177,690,188],{"class":187},[177,692,599],{"class":187},[177,694,602],{"class":187},[177,696,605],{"class":187},[177,698,608],{"class":187},[177,700,611],{"class":187},[177,702,614],{"class":187},[177,704,617],{"class":187},[177,706,620],{"class":187},[316,708,709,718],{},[319,710,711],{},[322,712,713,716],{},[325,714,715],{},"option",[325,717,330],{},[332,719,720,734,744,762,772,785,814,832,853,863,876,886],{},[322,721,722,727],{},[337,723,724],{},[150,725,726],{},"[folder]",[337,728,729,730,733],{},"where the project goes; ",[150,731,732],{},"my-server"," by default",[322,735,736,741],{},[337,737,738],{},[150,739,740],{},"--pm \u003Cnpm|pnpm|yarn|bun>",[337,742,743],{},"the package manager; the one running the command by default",[322,745,746,751],{},[337,747,748],{},[150,749,750],{},"--modules \u003Clist>",[337,752,753,754,757,758,761],{},"the modules, comma-separated, by their names in the catalog or as npm packages: ",[150,755,756],{},"menu-core,config-core","; ",[150,759,760],{},"\"\""," for none",[322,763,764,769],{},[337,765,766],{},[150,767,768],{},"--no-lint",[337,770,771],{},"no oxlint and oxfmt (they are added by default)",[322,773,774,779],{},[337,775,776],{},[150,777,778],{},"--no-git",[337,780,781,782],{},"no ",[150,783,784],{},"git init",[322,786,787,792],{},[337,788,789],{},[150,790,791],{},"--server \u003Cpath>",[337,793,794,795,798,799,802,803,805,806,809,810,813],{},"the server: its folder, its ",[150,796,797],{},"cstrike"," or its ",[150,800,801],{},"addons\u002Famxts","; the ",[150,804,801],{}," is written to ",[150,807,808],{},".env"," as ",[150,811,812],{},"AMXTS_SERVER",", and the build takes the includes installed there",[322,815,816,821],{},[337,817,818],{},[150,819,820],{},"--target \u003Crehlds|hlds>",[337,822,823,824,827,828,831],{},"the server the project is for, when no server's includes say it: ",[150,825,826],{},"rehlds"," - ReHLDS, ReGameDLL and ReAPI (by default) - or ",[150,829,830],{},"hlds",", plain HLDS",[322,833,834,839],{},[337,835,836],{},[150,837,838],{},"--os \u003Cwindows|linux>",[337,840,841,842,809,844,847,848,852],{},"the server's system, when its folder does not show it: written to ",[150,843,808],{},[150,845,846],{},"AMXTS_SERVER_OS"," (",[340,849,851],{"href":850},"#the-servers-system","the server's system",")",[322,854,855,860],{},[337,856,857],{},[150,858,859],{},"--no-install",[337,861,862],{},"write the files, do not install",[322,864,865,873],{},[337,866,867,869,870],{},[150,868,582],{},", ",[150,871,872],{},"-y",[337,874,875],{},"ask nothing",[322,877,878,883],{},[337,879,880],{},[150,881,882],{},"--force",[337,884,885],{},"write into a folder that is not empty",[322,887,888,893],{},[337,889,890],{},[150,891,892],{},"--local",[337,894,895,896,899],{},"link the core and the official modules from their folders on this machine instead of installing them from npm, for working on amxts itself; ",[150,897,898],{},"AMXTS_CORE"," names the core's folder",[147,901,902,903,906,907,910],{},"A module that needs another brings it: with ",[150,904,905],{},"menu-core",", config-core is\ninstalled too, and ",[150,908,909],{},"modules"," lists it right after menu-core, with a comment\nthat says which module needs it. The build loads it first:",[167,912,917],{"className":913,"code":914,"language":915,"meta":916,"style":173},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight twoslash lsp","import { hostIndex, handled, floatCell, rounded, cellFloat, ret, publicFor, nativeFn, arg, argText, argc, caller, setArg, setArgText, argString, cellsToString, stringToCells, cells, out, text, arrayOf, cell, putCell, noOrigin, hasModule, readText, playerIds, accessOf, paint, print, cmd, cmdWide, setTimeout, sleep, setInterval, clearTimeout, clearInterval, hook, plugin, defineModule, callingPlugin, onPluginStop, createCellArray, destroyCellArray, cellArrayRows, pushCellArrayRow, cellsText, textCells, menuColors, colorTags, showMenu, Handler, WideHandler, Float, CellArray, CellBuffer, TEXT_MAX, Team, AuthType, WeaponName, ItemName, ModuleName, KillOptions, MoveOptions, Client, Player, CommandOptions, CommandInfo, HudOptions, HudEffect, HudLine, FadeDirection, FadeOptions, ShakeOptions, ProgressBarOptions, StatusIconState, Screen, SoundChannel, SoundOptions, Resource, MessageArgs, ClientMessage, PlayerChangeEvent, ServerListenerOptions, CvarChangeEvent, CvarListener, Cvar, Server, server, Game, GameListenerOptions, UseType, ActionOptions, TouchEvent, RoundWinner, EndRoundOptions, game, Variant, VariantName, Flag, Entity, Weapon, WeaponKind, weaponKindOf, RenderMode, RenderFx, MoveType, Solid, TakeDamage, DeadFlag, WaterLevel, Contents, FixAngle, HitGroup, ArmorType, ObserverMode, JoinState, GameMenu, PlayerModel, IgnoredChat, ThrowDirection, BloodColor, MusicState, Target, swapTeam, lang, cvar, TimerHandler, SleepOptions, Call, Ref, PluginInfo, ModuleOptions, ForwardStop, NoArgument, Forward, Storage, EntityFilter, PawnFunction, PawnCall, MenuColor, MenuOptions, MenuContext, MenuItemOptions, Menu, protocolMessageNames, addServerListener, removeServerListener, PluginInitEvent, PluginPauseEvent, PluginUnpauseEvent, ServerChangelevelEvent, PluginCfgEvent, PluginEndEvent, PluginLogEvent, PluginPrecacheEvent, ClientInfochangedEvent, ClientConnectEvent, ClientConnectexEvent, ClientAuthorizedEvent, ClientDisconnectedEvent, ClientRemoveEvent, ClientCommandEvent, ClientPutinserverEvent, InconsistentFileEvent, PluginModulesEvent, OnConfigsExecutedEvent, OnAutoConfigsBufferedEvent, CS_InternalCommandEvent, CS_OnBuyAttemptEvent, CS_OnBuyEvent, ServerFrameEvent, ClientKillEvent, ClientImpulseEvent, ClientCmdStartEvent, PfnThinkEvent, PfnPlaybackeventEvent, PfnKeyvalueEvent, PfnSpawnEvent, ADStopMessage, AllowSpecMessage, AmmoPickupMessage, AmmoXMessage, ArmorTypeMessage, BarTimeMessage, BatteryMessage, BlinkAcctMessage, BombDropMessage, BombPickupMessage, BotVoiceMessage, BuyCloseMessage, ClCorpseMessage, CrosshairMessage, CurWeaponMessage, DamageMessage, DeathMsgMessage, FlashlightMessage, FlashBatMessage, GeigerMessage, HealthMessage, HideWeaponMessage, HostageKMessage, HostagePosMessage, HudTextMessage, InitHUDMessage, ItemPickupMessage, ItemStatusMessage, LocationMessage, MoneyMessage, MOTDMessage, NVGToggleMessage, RadarMessage, ReqStateMessage, ResetHUDMessage, RoundTimeMessage, SayTextMessage, ScenarioMessage, ScoreAttribMessage, ScoreInfoMessage, ScreenFadeMessage, ScreenShakeMessage, SendAudioMessage, ServerNameMessage, SetFOVMessage, ShowMenuMessage, ShowTimerMessage, SpecHealthMessage, SpectatorMessage, StatusIconMessage, StatusTextMessage, StatusValueMessage, TaskTimeMessage, TeamInfoMessage, TeamScoreMessage, TextMsgMessage, TrainMessage, TutorCloseMessage, VGUIMenuMessage, ViewModeMessage, WeaponListMessage, WeapPickupMessage, ServerEventMap, ServerMessageMap, flagList, FlagFamily, FlagStore, EntvarFlags, MemberFlags, FlagList, HideHud, HIDE_HUD, Button, BUTTON, Effect, EFFECT, EntityFlag, ENTITY_FLAG, Damage, DAMAGE, Access, ACCESS, ScoreStatus, SCORE_STATUS, WeaponState, WEAPON_STATE, PhysicsFlag, PHYSICS_FLAG, addGameListener, removeGameListener, HookEvent, HookEntry, RewardReason, ResourceType, TeamChoice, ItemKind, ItemRestriction, BotEvent, RoundEndReason, DeathMessageFlag, KillRarity, PlayerAnimation, VguiMenu, ActivateEvent, ActivateServerEvent, AddFragsEvent, AddItemEvent, AddMoneyEvent, AddMultiDamageEvent, AddResourceEvent, AddTeamScoreEvent, AddToPlayerEvent, AddWeaponEvent, AirAccelerateEvent, AirMoveEvent, ApplyMultiDamageEvent, AttachToPlayerEvent, AutoaimVectorEvent, BalanceTeamsEvent, BecomeBomberEvent, BecomeDeadEvent, BecomeProneEvent, BecomeVipEvent, BestVisibleEnemyEvent, BlindEvent, BlockedEvent, BloodColorEvent, BodyTargetEvent, BounceGibTouchEvent, BuyAmmoEvent, BuyItemEvent, BuyWeaponEvent, CanDeployEvent, CanDropEvent, CanHaveItemEvent, CanHolsterEvent, CanPlayerHearPlayerEvent, CanRespawnEvent, CanShootThroughEvent, CanSpectateEvent, CanSwitchTeamEvent, CanTakeDamageEvent, CenterEvent, ChangeLevelEvent, ChangeModelEvent, ChangeNameEvent, ChangeYawEvent, ChatMessageEvent, CheckMapConditionsEvent, CheckTimeBasedDamageEvent, CheckUserInfoEvent, CheckWaterJumpEvent, CheckWinConditionsEvent, ChildDeathNoticeEvent, ChooseAppearanceEvent, ChooseTeamEvent, ClassifyEvent, ClearMultiDamageEvent, ClientConnectedEvent, ConnectClientEvent, ConsoleMessageEvent, CreateWeaponBoxEvent, DamageDecalEvent, DeathActivityEvent, DeathNoticeEvent, DeathSoundEvent, DefaultDeployEvent, DefaultReloadEvent, DefaultShotgunReloadEvent, DefuseBombEndEvent, DefuseBombStartEvent, DelayEvent, DeployEvent, DisappearEvent, DisconnectClientEvent, DropEvent, DropIdlePlayerEvent, DropPlayerItemEvent, DropShieldEvent, DropWeaponsOnDeathEvent, DuckEvent, DuckMovementEvent, EarPositionEvent, ExplodeBombEvent, ExplodeFlashbangEvent, ExplodeHeGrenadeEvent, ExplodeSmokeGrenadeEvent, ExtractAmmoEvent, ExtractClipAmmoEvent, EyePositionEvent, FadeMonsterEvent, FallDamageEvent, FireBulletsEvent, GameEventEvent, GameThinkEvent, GetForceCameraEvent, GetIntoGameEvent, GetNextBestWeaponEvent, GibMonsterEvent, GibSpawnEvent, GiveAmmoEvent, GiveBombEvent, GiveDefaultItemsEvent, GiveItemEvent, GiveShieldEvent, GunPositionEvent, HasAlienGibsEvent, HasHumanGibsEvent, HasTargetEvent, HealEvent, HintMessageEvent, HolsterEvent, IlluminationEvent, ImpulseEvent, IntermissionEvent, InViewConeEvent, IsAliveEvent, IsBotEvent, IsBspModelEvent, IsInWorldEvent, IsMovingEvent, IsNetClientEvent, IsPlayerEvent, IsSneakingEvent, IsTriggeredEvent, IsUsableEvent, IsWeaponEvent, ItemPostFrameEvent, ItemPreFrameEvent, ItemRestrictedEvent, ItemSlotEvent, ItemUpdateClientDataEvent, JoiningThinkEvent, JumpEvent, JumpMovementEvent, KillEvent, KilledEvent, LadderMoveEvent, LookEvent, MapResetEvent, MaxSpeedEvent, MonsterInitDeadEvent, MoveEvent, NewRoundEvent, NextTargetEvent, ObserverSetModeEvent, ObserverThinkEvent, PainEvent, PainSoundEvent, PlantBombEvent, PlayEmptySoundEvent, PlayerBlindEvent, PlayerDeathThinkEvent, PlayerGotWeaponEvent, PlayerKilledEvent, PlayerSpawnEvent, PlayStepSoundEvent, PointInViewConeEvent, PointVisibleEvent, PostThinkEvent, PrecacheEvent, PrecacheFileEvent, PrecacheModelEvent, PrecacheSoundEvent, PreThinkEvent, PrimaryAmmoIndexEvent, PrimaryAttackEvent, PrintfEvent, RadioEvent, RecoilEvent, ReflectGaussEvent, RelationshipEvent, ReloadEvent, RemoveAllItemsEvent, RemoveGunsEvent, RemoveItemEvent, RemoveSpawnProtectionEvent, ResetEmptySoundEvent, ResetMaxSpeedEvent, ResetSequenceInfoEvent, RespawnEvent, RestartEvent, RetireWeaponEvent, RoundEndEvent, RoundRespawnEvent, RoundStartEvent, SecondaryAmmoIndexEvent, SecondaryAttackEvent, SelectSpawnPointEvent, SendDeathMessageEvent, SendWeaponAnimEvent, ServerCommandEvent, ServerDeactivateEvent, SetAnimationEvent, SetModelEvent, SetObjectCollisionBoxEvent, SetSpawnProtectionEvent, SetToggleStateEvent, ShootEvent, ShootBuckshotEvent, ShouldFadeOnDeathEvent, ShouldSwitchWeaponEvent, ShouldWeaponIdleEvent, ShowMenuEvent, ShowVguiMenuEvent, SpawnEvent, SpawnEquipEvent, SpawnHeadGibEvent, SpawnRandomGibsEvent, SpawnSpotEvent, SpectateNextEvent, StartDeathCamEvent, StartSneakingEvent, StartSoundEvent, StartSpectatingEvent, StopSneakingEvent, SwitchTeamEvent, TakeDamageEvent, TakeDamageImpulseEvent, TeamFullEvent, TeamIdEvent, TeamStackedEvent, ThinkEvent, ThrowFlashbangEvent, ThrowGrenadeEvent, ThrowHeGrenadeEvent, ThrowSmokeGrenadeEvent, ToggleStateEvent, TouchingWeaponEvent, TraceAttackEvent, TraceBleedEvent, TraceLineEvent, UnDuckEvent, UpdateClientDataEvent, UpdateItemInfoEvent, UpdateStatusBarEvent, UseEvent, UseEmptyEvent, UserInfoChangeEvent, VisibleEvent, WaitTillLandEvent, WaterJumpEvent, WeaponIdleEvent, GameEventMap, GameAnswerMap, Vector, EffectRecipients, PointEffectOptions, SegmentEffectOptions, EntityEffectOptions, PlayerEffectOptions, BeamPointsOptions, BeamEntityPointOptions, BeamEntitiesOptions, BeamCircleOptions, BeamFollowOptions, BeamSpriteOptions, LightningOptions, ExplosionOptions, SmokeOptions, ParticleExplosionOptions, ImplosionOptions, SpriteTrailOptions, SpriteOptions, GlowSpriteOptions, StreakSplashOptions, DynamicLightOptions, EntityLightOptions, LineOptions, BoxOptions, LargeFunnelOptions, BloodOptions, FizzOptions, BounceSound, ModelOptions, ExplodeModelOptions, BreakMaterial, BreakModelOptions, SpriteSprayOptions, ArmorRicochetOptions, BubblesOptions, BloodSpriteOptions, ProjectileOptions, SprayOptions, PlayerSpritesOptions, ParticleBurstOptions, FireRise, FireBlend, FireFieldOptions, PlayerAttachmentOptions, effects, request, fetch, useFetch, URL, URLSearchParams, Headers, TlsOptions, RequestInit, Request, ResponseInit, Response, RequestErrorKind, RequestOptions, RequestResult, UseFetchOptions, FetchResult, FetchError } from \"~\u002Ffacade\";\n\u002F\u002F ---cut---\n\u002F\u002F amxts.config.ts\nexport default defineConfig({\n    modules: [\n        \"@amxts\u002Fmenu-core\",\n        \"@amxts\u002Fconfig-core\", \u002F\u002F needed by menu-core\n    ],\n    target: \"rehlds\",\n});\n","ts","twoslash",[150,918,919,925,1206,1257,1270,1284,1292,1374],{"__ignoreMap":173},[177,920,921],{"class":179,"line":180},[177,922,924],{"class":923},"sHwdD","\u002F\u002F amxts.config.ts\n",[177,926,928,932,935,939,1201,1203],{"class":179,"line":927},2,[177,929,931],{"class":930},"s7zQu","export",[177,933,934],{"class":930}," default",[177,936,938],{"class":937},"s2Zo4"," ",[177,940,941],{"class":937},[942,943,946,949],"v-menu",{"class":944,"popper-class":945,"theme":916},"twoslash-hover","shiki twoslash-floating vp-copy-ignore",[177,947,948],{},"defineConfig",[950,951,953],"template",{"v-slot:popper":952},"{}",[177,954,956,1104],{"class":955,"v-pre":173},"twoslash-popup-container vp-copy-ignore",[150,957,959],{"class":958},"twoslash-popup-code",[167,960,964],{"class":961,"style":962,"tabindex":963},"shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#babed8;--shiki-light-bg:#FAFAFA;--shiki-default-bg:#263238;--shiki-dark-bg:#292D3E","0",[150,965,966,980,1005,1021,1036,1066,1082,1099],{},[177,967,968,972,976],{"class":179},[177,969,971],{"style":970},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA","interface",[177,973,975],{"style":974},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B"," AmxtsConfig",[177,977,979],{"style":978},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF"," {",[177,981,982,986,989,992,996,999,1002],{"class":179},[177,983,985],{"style":984},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178","    modules",[177,987,988],{"style":978},"?:",[177,990,991],{"style":974}," string",[177,993,995],{"style":994},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8","[] ",[177,997,998],{"style":978},"|",[177,1000,1001],{"style":974}," undefined",[177,1003,1004],{"style":978},";",[177,1006,1007,1010,1012,1014,1017,1019],{"class":179},[177,1008,1009],{"style":984},"    pluginsDir",[177,1011,988],{"style":978},[177,1013,991],{"style":974},[177,1015,1016],{"style":978}," |",[177,1018,1001],{"style":974},[177,1020,1004],{"style":978},[177,1022,1023,1026,1028,1030,1032,1034],{"class":179},[177,1024,1025],{"style":984},"    outDir",[177,1027,988],{"style":978},[177,1029,991],{"style":974},[177,1031,1016],{"style":978},[177,1033,1001],{"style":974},[177,1035,1004],{"style":978},[177,1037,1038,1041,1043,1046,1049,1052,1054,1056,1058,1060,1062,1064],{"class":179},[177,1039,1040],{"style":984},"    target",[177,1042,988],{"style":978},[177,1044,1045],{"style":978}," \"",[177,1047,826],{"style":1048},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[177,1050,1051],{"style":978},"\"",[177,1053,1016],{"style":978},[177,1055,1045],{"style":978},[177,1057,830],{"style":1048},[177,1059,1051],{"style":978},[177,1061,1016],{"style":978},[177,1063,1001],{"style":974},[177,1065,1004],{"style":978},[177,1067,1068,1071,1073,1076,1078,1080],{"class":179},[177,1069,1070],{"style":984},"    imports",[177,1072,988],{"style":978},[177,1074,1075],{"style":974}," AmxtsImports",[177,1077,1016],{"style":978},[177,1079,1001],{"style":974},[177,1081,1004],{"style":978},[177,1083,1084,1087,1089,1091,1093,1095,1097],{"class":179},[177,1085,1086],{"style":984},"    pawn",[177,1088,988],{"style":978},[177,1090,991],{"style":974},[177,1092,995],{"style":994},[177,1094,998],{"style":978},[177,1096,1001],{"style":974},[177,1098,1004],{"style":978},[177,1100,1101],{"class":179},[177,1102,1103],{"style":978},"}",[1105,1106,1108,1114],"div",{"class":1107},"twoslash-popup-docs vp-doc",[147,1109,1110,1111,1113],{},"Defines the project's settings, in ",[150,1112,395],{},":",[150,1115,1116],{},[167,1117,1118],{"class":961,"style":962,"tabindex":963},[150,1119,1120,1137,1169,1193],{},[177,1121,1122,1125,1127,1131,1134],{"class":179},[177,1123,931],{"style":1124},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[177,1126,934],{"style":1124},[177,1128,1130],{"style":1129},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF"," defineConfig",[177,1132,1133],{"style":994},"(",[177,1135,1136],{"style":978},"{",[177,1138,1139,1142,1144,1147,1149,1152,1154,1157,1159,1162,1164,1167],{"class":179},[177,1140,1141],{"style":984},"  modules",[177,1143,1113],{"style":978},[177,1145,1146],{"style":994}," [",[177,1148,1051],{"style":978},[177,1150,1151],{"style":1048},"@amxts\u002Fconfig-core",[177,1153,1051],{"style":978},[177,1155,1156],{"style":978},",",[177,1158,1045],{"style":978},[177,1160,1161],{"style":1048},"@amxts\u002Fmenu-core",[177,1163,1051],{"style":978},[177,1165,1166],{"style":994},"]",[177,1168,1156],{"style":978},[177,1170,1171,1174,1176,1178,1181,1183,1185,1188,1190],{"class":179},[177,1172,1173],{"style":984},"  menus",[177,1175,1113],{"style":978},[177,1177,979],{"style":978},[177,1179,1180],{"style":984}," file",[177,1182,1113],{"style":978},[177,1184,1045],{"style":978},[177,1186,1187],{"style":1048},"myserver\u002Fmenu",[177,1189,1051],{"style":978},[177,1191,1192],{"style":978}," },",[177,1194,1195,1197,1199],{"class":179},[177,1196,1103],{"style":978},[177,1198,852],{"style":994},[177,1200,1004],{"style":978},[177,1202,1133],{"class":198},[177,1204,1205],{"class":191},"{\n",[177,1207,1209,1213,1252,1254],{"class":179,"line":1208},3,[177,1210,1212],{"class":1211},"swJcz","    ",[177,1214,1215],{"class":1211},[942,1216,1217,1219],{"class":944,"popper-class":945,"theme":916},[177,1218,909],{},[950,1220,1221],{"v-slot:popper":952},[177,1222,1223,1243],{"class":955,"v-pre":173},[150,1224,1225],{"class":958},[167,1226,1227],{"class":961,"style":962,"tabindex":963},[150,1228,1229],{},[177,1230,1231,1233,1235,1237,1239,1241],{"class":179},[177,1232,909],{"style":984},[177,1234,988],{"style":978},[177,1236,991],{"style":974},[177,1238,995],{"style":994},[177,1240,998],{"style":978},[177,1242,1001],{"style":974},[1105,1244,1245],{"class":1107},[147,1246,1247,1248,1251],{},"The project's module packages, by name, e.g. ",[150,1249,1250],{},"\"@amxts\u002Fmenu-core\"",". The build loads each after the ones it requires.",[177,1253,1113],{"class":191},[177,1255,1256],{"class":198}," [\n",[177,1258,1260,1263,1265,1267],{"class":179,"line":1259},4,[177,1261,1262],{"class":191},"        \"",[177,1264,1161],{"class":187},[177,1266,1051],{"class":191},[177,1268,1269],{"class":191},",\n",[177,1271,1273,1275,1277,1279,1281],{"class":179,"line":1272},5,[177,1274,1262],{"class":191},[177,1276,1151],{"class":187},[177,1278,1051],{"class":191},[177,1280,1156],{"class":191},[177,1282,1283],{"class":923}," \u002F\u002F needed by menu-core\n",[177,1285,1287,1290],{"class":179,"line":1286},6,[177,1288,1289],{"class":198},"    ]",[177,1291,1269],{"class":191},[177,1293,1295,1297,1364,1366,1368,1370,1372],{"class":179,"line":1294},7,[177,1296,1212],{"class":1211},[177,1298,1299],{"class":1211},[942,1300,1301,1304],{"class":944,"popper-class":945,"theme":916},[177,1302,1303],{},"target",[950,1305,1306],{"v-slot:popper":952},[177,1307,1308,1338],{"class":955,"v-pre":173},[150,1309,1310],{"class":958},[167,1311,1312],{"class":961,"style":962,"tabindex":963},[150,1313,1314],{},[177,1315,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1336],{"class":179},[177,1317,1303],{"style":984},[177,1319,988],{"style":978},[177,1321,1045],{"style":978},[177,1323,826],{"style":1048},[177,1325,1051],{"style":978},[177,1327,1016],{"style":978},[177,1329,1045],{"style":978},[177,1331,830],{"style":1048},[177,1333,1051],{"style":978},[177,1335,1016],{"style":978},[177,1337,1001],{"style":974},[1105,1339,1340],{"class":1107},[147,1341,1342,1343,1346,1347,1350,1351,1353,1354,1356,1357,1359,1360,1363],{},"The server the project is for, one of ",[150,1344,1345],{},"\"rehlds\""," (ReHLDS, ReGameDLL and\nReAPI) or ",[150,1348,1349],{},"\"hlds\""," (plain HLDS); ",[150,1352,1345],{}," by default. Without a server\n(",[150,1355,812],{},") the ",[150,1358,152],{}," command fetches the includes that server has\ninto ",[150,1361,1362],{},".amxts\u002Finclude","; with one, the build takes the server's own.",[177,1365,1113],{"class":191},[177,1367,1045],{"class":191},[177,1369,826],{"class":187},[177,1371,1051],{"class":191},[177,1373,1269],{"class":191},[177,1375,1377,1379,1381],{"class":179,"line":1376},8,[177,1378,1103],{"class":191},[177,1380,852],{"class":198},[177,1382,1383],{"class":191},";\n",[147,1385,1386],{},"The project it writes:",[167,1388,1391],{"className":1389,"code":1390,"language":300},[298],"my-server\u002F\n├── package.json        scripts: dev, build, typecheck, test, lint\n├── amxts.config.ts     the modules you picked, and the ones they need\n├── tsconfig.json       { \"extends\": \".\u002F.amxts\u002Ftsconfig.json\" }\n├── .oxlintrc.json      the lint rules: @antfu\u002Feslint-config's, run by oxlint\n├── .oxfmtrc.json       oxfmt, for the JSON and YAML files\n├── knip.json           entry points for knip: plugins, the config, the tests\n├── .env                AMXTS_SERVER, when you gave the folder; AMXTS_SERVER_OS\n├── pnpm-workspace.yaml with pnpm: bun's install script is not needed\n├── .gitignore\n├── .gitattributes      LF for the files oxfmt formats\n├── .vscode\u002F            settings and the recommended extensions\n├── README.md\n├── plugins\u002F\n│   └── hello.ts        a plugin that uses the modules you picked\n└── test\u002F\n    ├── hello.test.ts   its tests, on the fake server\n    └── tsconfig.json   the tests' own: Bun's types, not the plugins'\n",[150,1392,1390],{"__ignoreMap":173},[1394,1395,1397],"h3",{"id":1396},"the-servers-includes","The server's includes",[147,1399,1400,1401,1405,1406,1409],{},"Where a plugin needs a Pawn include - an ",[340,1402,1404],{"href":1403},"\u002Fdocs\u002Fpawn\u002Fnatives#implementing-an-existing-include-include","include it implements",",\na Pawn plugin's natives or forwards, a Pawn test - the build looks in the\nproject's ",[150,1407,1408],{},"includes\u002F"," first, then in the server's includes, then in the ones\namxts ships (AMX Mod X's own among them). The server's includes are:",[1411,1412,1413,1424],"ul",{},[1414,1415,1416,1417,1419,1420,1423],"li",{},"with ",[150,1418,812],{},", the server's own ",[150,1421,1422],{},"addons\u002Famxmodx\u002Fscripting\u002Finclude",",\nexactly what is installed there;",[1414,1425,1426,1427,1429,1430,1432,1433,1435,1436,1438,1439,1441],{},"without a server, the includes of the server ",[150,1428,1303],{}," in ",[150,1431,395],{},"\nnames: for ",[150,1434,1345],{}," - ReHLDS, ReGameDLL and ReAPI, the default - amxts\ndownloads ReAPI's includes into ",[150,1437,1362],{},", the release its API is\nmade from; ",[150,1440,1349],{}," - plain HLDS - needs nothing more than AMX Mod X's own.",[167,1443,1445],{"className":913,"code":1444,"language":915,"meta":916,"style":173},"import { hostIndex, handled, floatCell, rounded, cellFloat, ret, publicFor, nativeFn, arg, argText, argc, caller, setArg, setArgText, argString, cellsToString, stringToCells, cells, out, text, arrayOf, cell, putCell, noOrigin, hasModule, readText, playerIds, accessOf, paint, print, cmd, cmdWide, setTimeout, sleep, setInterval, clearTimeout, clearInterval, hook, plugin, defineModule, callingPlugin, onPluginStop, createCellArray, destroyCellArray, cellArrayRows, pushCellArrayRow, cellsText, textCells, menuColors, colorTags, showMenu, Handler, WideHandler, Float, CellArray, CellBuffer, TEXT_MAX, Team, AuthType, WeaponName, ItemName, ModuleName, KillOptions, MoveOptions, Client, Player, CommandOptions, CommandInfo, HudOptions, HudEffect, HudLine, FadeDirection, FadeOptions, ShakeOptions, ProgressBarOptions, StatusIconState, Screen, SoundChannel, SoundOptions, Resource, MessageArgs, ClientMessage, PlayerChangeEvent, ServerListenerOptions, CvarChangeEvent, CvarListener, Cvar, Server, server, Game, GameListenerOptions, UseType, ActionOptions, TouchEvent, RoundWinner, EndRoundOptions, game, Variant, VariantName, Flag, Entity, Weapon, WeaponKind, weaponKindOf, RenderMode, RenderFx, MoveType, Solid, TakeDamage, DeadFlag, WaterLevel, Contents, FixAngle, HitGroup, ArmorType, ObserverMode, JoinState, GameMenu, PlayerModel, IgnoredChat, ThrowDirection, BloodColor, MusicState, Target, swapTeam, lang, cvar, TimerHandler, SleepOptions, Call, Ref, PluginInfo, ModuleOptions, ForwardStop, NoArgument, Forward, Storage, EntityFilter, PawnFunction, PawnCall, MenuColor, MenuOptions, MenuContext, MenuItemOptions, Menu, protocolMessageNames, addServerListener, removeServerListener, PluginInitEvent, PluginPauseEvent, PluginUnpauseEvent, ServerChangelevelEvent, PluginCfgEvent, PluginEndEvent, PluginLogEvent, PluginPrecacheEvent, ClientInfochangedEvent, ClientConnectEvent, ClientConnectexEvent, ClientAuthorizedEvent, ClientDisconnectedEvent, ClientRemoveEvent, ClientCommandEvent, ClientPutinserverEvent, InconsistentFileEvent, PluginModulesEvent, OnConfigsExecutedEvent, OnAutoConfigsBufferedEvent, CS_InternalCommandEvent, CS_OnBuyAttemptEvent, CS_OnBuyEvent, ServerFrameEvent, ClientKillEvent, ClientImpulseEvent, ClientCmdStartEvent, PfnThinkEvent, PfnPlaybackeventEvent, PfnKeyvalueEvent, PfnSpawnEvent, ADStopMessage, AllowSpecMessage, AmmoPickupMessage, AmmoXMessage, ArmorTypeMessage, BarTimeMessage, BatteryMessage, BlinkAcctMessage, BombDropMessage, BombPickupMessage, BotVoiceMessage, BuyCloseMessage, ClCorpseMessage, CrosshairMessage, CurWeaponMessage, DamageMessage, DeathMsgMessage, FlashlightMessage, FlashBatMessage, GeigerMessage, HealthMessage, HideWeaponMessage, HostageKMessage, HostagePosMessage, HudTextMessage, InitHUDMessage, ItemPickupMessage, ItemStatusMessage, LocationMessage, MoneyMessage, MOTDMessage, NVGToggleMessage, RadarMessage, ReqStateMessage, ResetHUDMessage, RoundTimeMessage, SayTextMessage, ScenarioMessage, ScoreAttribMessage, ScoreInfoMessage, ScreenFadeMessage, ScreenShakeMessage, SendAudioMessage, ServerNameMessage, SetFOVMessage, ShowMenuMessage, ShowTimerMessage, SpecHealthMessage, SpectatorMessage, StatusIconMessage, StatusTextMessage, StatusValueMessage, TaskTimeMessage, TeamInfoMessage, TeamScoreMessage, TextMsgMessage, TrainMessage, TutorCloseMessage, VGUIMenuMessage, ViewModeMessage, WeaponListMessage, WeapPickupMessage, ServerEventMap, ServerMessageMap, flagList, FlagFamily, FlagStore, EntvarFlags, MemberFlags, FlagList, HideHud, HIDE_HUD, Button, BUTTON, Effect, EFFECT, EntityFlag, ENTITY_FLAG, Damage, DAMAGE, Access, ACCESS, ScoreStatus, SCORE_STATUS, WeaponState, WEAPON_STATE, PhysicsFlag, PHYSICS_FLAG, addGameListener, removeGameListener, HookEvent, HookEntry, RewardReason, ResourceType, TeamChoice, ItemKind, ItemRestriction, BotEvent, RoundEndReason, DeathMessageFlag, KillRarity, PlayerAnimation, VguiMenu, ActivateEvent, ActivateServerEvent, AddFragsEvent, AddItemEvent, AddMoneyEvent, AddMultiDamageEvent, AddResourceEvent, AddTeamScoreEvent, AddToPlayerEvent, AddWeaponEvent, AirAccelerateEvent, AirMoveEvent, ApplyMultiDamageEvent, AttachToPlayerEvent, AutoaimVectorEvent, BalanceTeamsEvent, BecomeBomberEvent, BecomeDeadEvent, BecomeProneEvent, BecomeVipEvent, BestVisibleEnemyEvent, BlindEvent, BlockedEvent, BloodColorEvent, BodyTargetEvent, BounceGibTouchEvent, BuyAmmoEvent, BuyItemEvent, BuyWeaponEvent, CanDeployEvent, CanDropEvent, CanHaveItemEvent, CanHolsterEvent, CanPlayerHearPlayerEvent, CanRespawnEvent, CanShootThroughEvent, CanSpectateEvent, CanSwitchTeamEvent, CanTakeDamageEvent, CenterEvent, ChangeLevelEvent, ChangeModelEvent, ChangeNameEvent, ChangeYawEvent, ChatMessageEvent, CheckMapConditionsEvent, CheckTimeBasedDamageEvent, CheckUserInfoEvent, CheckWaterJumpEvent, CheckWinConditionsEvent, ChildDeathNoticeEvent, ChooseAppearanceEvent, ChooseTeamEvent, ClassifyEvent, ClearMultiDamageEvent, ClientConnectedEvent, ConnectClientEvent, ConsoleMessageEvent, CreateWeaponBoxEvent, DamageDecalEvent, DeathActivityEvent, DeathNoticeEvent, DeathSoundEvent, DefaultDeployEvent, DefaultReloadEvent, DefaultShotgunReloadEvent, DefuseBombEndEvent, DefuseBombStartEvent, DelayEvent, DeployEvent, DisappearEvent, DisconnectClientEvent, DropEvent, DropIdlePlayerEvent, DropPlayerItemEvent, DropShieldEvent, DropWeaponsOnDeathEvent, DuckEvent, DuckMovementEvent, EarPositionEvent, ExplodeBombEvent, ExplodeFlashbangEvent, ExplodeHeGrenadeEvent, ExplodeSmokeGrenadeEvent, ExtractAmmoEvent, ExtractClipAmmoEvent, EyePositionEvent, FadeMonsterEvent, FallDamageEvent, FireBulletsEvent, GameEventEvent, GameThinkEvent, GetForceCameraEvent, GetIntoGameEvent, GetNextBestWeaponEvent, GibMonsterEvent, GibSpawnEvent, GiveAmmoEvent, GiveBombEvent, GiveDefaultItemsEvent, GiveItemEvent, GiveShieldEvent, GunPositionEvent, HasAlienGibsEvent, HasHumanGibsEvent, HasTargetEvent, HealEvent, HintMessageEvent, HolsterEvent, IlluminationEvent, ImpulseEvent, IntermissionEvent, InViewConeEvent, IsAliveEvent, IsBotEvent, IsBspModelEvent, IsInWorldEvent, IsMovingEvent, IsNetClientEvent, IsPlayerEvent, IsSneakingEvent, IsTriggeredEvent, IsUsableEvent, IsWeaponEvent, ItemPostFrameEvent, ItemPreFrameEvent, ItemRestrictedEvent, ItemSlotEvent, ItemUpdateClientDataEvent, JoiningThinkEvent, JumpEvent, JumpMovementEvent, KillEvent, KilledEvent, LadderMoveEvent, LookEvent, MapResetEvent, MaxSpeedEvent, MonsterInitDeadEvent, MoveEvent, NewRoundEvent, NextTargetEvent, ObserverSetModeEvent, ObserverThinkEvent, PainEvent, PainSoundEvent, PlantBombEvent, PlayEmptySoundEvent, PlayerBlindEvent, PlayerDeathThinkEvent, PlayerGotWeaponEvent, PlayerKilledEvent, PlayerSpawnEvent, PlayStepSoundEvent, PointInViewConeEvent, PointVisibleEvent, PostThinkEvent, PrecacheEvent, PrecacheFileEvent, PrecacheModelEvent, PrecacheSoundEvent, PreThinkEvent, PrimaryAmmoIndexEvent, PrimaryAttackEvent, PrintfEvent, RadioEvent, RecoilEvent, ReflectGaussEvent, RelationshipEvent, ReloadEvent, RemoveAllItemsEvent, RemoveGunsEvent, RemoveItemEvent, RemoveSpawnProtectionEvent, ResetEmptySoundEvent, ResetMaxSpeedEvent, ResetSequenceInfoEvent, RespawnEvent, RestartEvent, RetireWeaponEvent, RoundEndEvent, RoundRespawnEvent, RoundStartEvent, SecondaryAmmoIndexEvent, SecondaryAttackEvent, SelectSpawnPointEvent, SendDeathMessageEvent, SendWeaponAnimEvent, ServerCommandEvent, ServerDeactivateEvent, SetAnimationEvent, SetModelEvent, SetObjectCollisionBoxEvent, SetSpawnProtectionEvent, SetToggleStateEvent, ShootEvent, ShootBuckshotEvent, ShouldFadeOnDeathEvent, ShouldSwitchWeaponEvent, ShouldWeaponIdleEvent, ShowMenuEvent, ShowVguiMenuEvent, SpawnEvent, SpawnEquipEvent, SpawnHeadGibEvent, SpawnRandomGibsEvent, SpawnSpotEvent, SpectateNextEvent, StartDeathCamEvent, StartSneakingEvent, StartSoundEvent, StartSpectatingEvent, StopSneakingEvent, SwitchTeamEvent, TakeDamageEvent, TakeDamageImpulseEvent, TeamFullEvent, TeamIdEvent, TeamStackedEvent, ThinkEvent, ThrowFlashbangEvent, ThrowGrenadeEvent, ThrowHeGrenadeEvent, ThrowSmokeGrenadeEvent, ToggleStateEvent, TouchingWeaponEvent, TraceAttackEvent, TraceBleedEvent, TraceLineEvent, UnDuckEvent, UpdateClientDataEvent, UpdateItemInfoEvent, UpdateStatusBarEvent, UseEvent, UseEmptyEvent, UserInfoChangeEvent, VisibleEvent, WaitTillLandEvent, WaterJumpEvent, WeaponIdleEvent, GameEventMap, GameAnswerMap, Vector, EffectRecipients, PointEffectOptions, SegmentEffectOptions, EntityEffectOptions, PlayerEffectOptions, BeamPointsOptions, BeamEntityPointOptions, BeamEntitiesOptions, BeamCircleOptions, BeamFollowOptions, BeamSpriteOptions, LightningOptions, ExplosionOptions, SmokeOptions, ParticleExplosionOptions, ImplosionOptions, SpriteTrailOptions, SpriteOptions, GlowSpriteOptions, StreakSplashOptions, DynamicLightOptions, EntityLightOptions, LineOptions, BoxOptions, LargeFunnelOptions, BloodOptions, FizzOptions, BounceSound, ModelOptions, ExplodeModelOptions, BreakMaterial, BreakModelOptions, SpriteSprayOptions, ArmorRicochetOptions, BubblesOptions, BloodSpriteOptions, ProjectileOptions, SprayOptions, PlayerSpritesOptions, ParticleBurstOptions, FireRise, FireBlend, FireFieldOptions, PlayerAttachmentOptions, effects, request, fetch, useFetch, URL, URLSearchParams, Headers, TlsOptions, RequestInit, Request, ResponseInit, Response, RequestErrorKind, RequestOptions, RequestResult, UseFetchOptions, FetchResult, FetchError } from \"~\u002Ffacade\";\n\u002F\u002F ---cut---\n\u002F\u002F amxts.config.ts\nexport default defineConfig({\n    modules: [],\n    target: \"hlds\",\n});\n",[150,1446,1447,1451,1669,1716,1786],{"__ignoreMap":173},[177,1448,1449],{"class":179,"line":180},[177,1450,924],{"class":923},[177,1452,1453,1455,1457,1459,1665,1667],{"class":179,"line":927},[177,1454,931],{"class":930},[177,1456,934],{"class":930},[177,1458,938],{"class":937},[177,1460,1461],{"class":937},[942,1462,1463,1465],{"class":944,"popper-class":945,"theme":916},[177,1464,948],{},[950,1466,1467],{"v-slot:popper":952},[177,1468,1469,1587],{"class":955,"v-pre":173},[150,1470,1471],{"class":958},[167,1472,1473],{"class":961,"style":962,"tabindex":963},[150,1474,1475,1483,1499,1513,1527,1553,1567,1583],{},[177,1476,1477,1479,1481],{"class":179},[177,1478,971],{"style":970},[177,1480,975],{"style":974},[177,1482,979],{"style":978},[177,1484,1485,1487,1489,1491,1493,1495,1497],{"class":179},[177,1486,985],{"style":984},[177,1488,988],{"style":978},[177,1490,991],{"style":974},[177,1492,995],{"style":994},[177,1494,998],{"style":978},[177,1496,1001],{"style":974},[177,1498,1004],{"style":978},[177,1500,1501,1503,1505,1507,1509,1511],{"class":179},[177,1502,1009],{"style":984},[177,1504,988],{"style":978},[177,1506,991],{"style":974},[177,1508,1016],{"style":978},[177,1510,1001],{"style":974},[177,1512,1004],{"style":978},[177,1514,1515,1517,1519,1521,1523,1525],{"class":179},[177,1516,1025],{"style":984},[177,1518,988],{"style":978},[177,1520,991],{"style":974},[177,1522,1016],{"style":978},[177,1524,1001],{"style":974},[177,1526,1004],{"style":978},[177,1528,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551],{"class":179},[177,1530,1040],{"style":984},[177,1532,988],{"style":978},[177,1534,1045],{"style":978},[177,1536,830],{"style":1048},[177,1538,1051],{"style":978},[177,1540,1016],{"style":978},[177,1542,1045],{"style":978},[177,1544,826],{"style":1048},[177,1546,1051],{"style":978},[177,1548,1016],{"style":978},[177,1550,1001],{"style":974},[177,1552,1004],{"style":978},[177,1554,1555,1557,1559,1561,1563,1565],{"class":179},[177,1556,1070],{"style":984},[177,1558,988],{"style":978},[177,1560,1075],{"style":974},[177,1562,1016],{"style":978},[177,1564,1001],{"style":974},[177,1566,1004],{"style":978},[177,1568,1569,1571,1573,1575,1577,1579,1581],{"class":179},[177,1570,1086],{"style":984},[177,1572,988],{"style":978},[177,1574,991],{"style":974},[177,1576,995],{"style":994},[177,1578,998],{"style":978},[177,1580,1001],{"style":974},[177,1582,1004],{"style":978},[177,1584,1585],{"class":179},[177,1586,1103],{"style":978},[1105,1588,1589,1593],{"class":1107},[147,1590,1110,1591,1113],{},[150,1592,395],{},[150,1594,1595],{},[167,1596,1597],{"class":961,"style":962,"tabindex":963},[150,1598,1599,1611,1637,1657],{},[177,1600,1601,1603,1605,1607,1609],{"class":179},[177,1602,931],{"style":1124},[177,1604,934],{"style":1124},[177,1606,1130],{"style":1129},[177,1608,1133],{"style":994},[177,1610,1136],{"style":978},[177,1612,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635],{"class":179},[177,1614,1141],{"style":984},[177,1616,1113],{"style":978},[177,1618,1146],{"style":994},[177,1620,1051],{"style":978},[177,1622,1151],{"style":1048},[177,1624,1051],{"style":978},[177,1626,1156],{"style":978},[177,1628,1045],{"style":978},[177,1630,1161],{"style":1048},[177,1632,1051],{"style":978},[177,1634,1166],{"style":994},[177,1636,1156],{"style":978},[177,1638,1639,1641,1643,1645,1647,1649,1651,1653,1655],{"class":179},[177,1640,1173],{"style":984},[177,1642,1113],{"style":978},[177,1644,979],{"style":978},[177,1646,1180],{"style":984},[177,1648,1113],{"style":978},[177,1650,1045],{"style":978},[177,1652,1187],{"style":1048},[177,1654,1051],{"style":978},[177,1656,1192],{"style":978},[177,1658,1659,1661,1663],{"class":179},[177,1660,1103],{"style":978},[177,1662,852],{"style":994},[177,1664,1004],{"style":978},[177,1666,1133],{"class":198},[177,1668,1205],{"class":191},[177,1670,1671,1673,1709,1711,1714],{"class":179,"line":1208},[177,1672,1212],{"class":1211},[177,1674,1675],{"class":1211},[942,1676,1677,1679],{"class":944,"popper-class":945,"theme":916},[177,1678,909],{},[950,1680,1681],{"v-slot:popper":952},[177,1682,1683,1703],{"class":955,"v-pre":173},[150,1684,1685],{"class":958},[167,1686,1687],{"class":961,"style":962,"tabindex":963},[150,1688,1689],{},[177,1690,1691,1693,1695,1697,1699,1701],{"class":179},[177,1692,909],{"style":984},[177,1694,988],{"style":978},[177,1696,991],{"style":974},[177,1698,995],{"style":994},[177,1700,998],{"style":978},[177,1702,1001],{"style":974},[1105,1704,1705],{"class":1107},[147,1706,1247,1707,1251],{},[150,1708,1250],{},[177,1710,1113],{"class":191},[177,1712,1713],{"class":198}," []",[177,1715,1269],{"class":191},[177,1717,1718,1720,1776,1778,1780,1782,1784],{"class":179,"line":1259},[177,1719,1212],{"class":1211},[177,1721,1722],{"class":1211},[942,1723,1724,1726],{"class":944,"popper-class":945,"theme":916},[177,1725,1303],{},[950,1727,1728],{"v-slot:popper":952},[177,1729,1730,1760],{"class":955,"v-pre":173},[150,1731,1732],{"class":958},[167,1733,1734],{"class":961,"style":962,"tabindex":963},[150,1735,1736],{},[177,1737,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758],{"class":179},[177,1739,1303],{"style":984},[177,1741,988],{"style":978},[177,1743,1045],{"style":978},[177,1745,830],{"style":1048},[177,1747,1051],{"style":978},[177,1749,1016],{"style":978},[177,1751,1045],{"style":978},[177,1753,826],{"style":1048},[177,1755,1051],{"style":978},[177,1757,1016],{"style":978},[177,1759,1001],{"style":974},[1105,1761,1762],{"class":1107},[147,1763,1342,1764,1346,1766,1350,1768,1353,1770,1356,1772,1359,1774,1363],{},[150,1765,1345],{},[150,1767,1349],{},[150,1769,1345],{},[150,1771,812],{},[150,1773,152],{},[150,1775,1362],{},[177,1777,1113],{"class":191},[177,1779,1045],{"class":191},[177,1781,830],{"class":187},[177,1783,1051],{"class":191},[177,1785,1269],{"class":191},[177,1787,1788,1790,1792],{"class":179,"line":1272},[177,1789,1103],{"class":191},[177,1791,852],{"class":198},[177,1793,1383],{"class":191},[147,1795,1796,1798,1799,1802,1803,1805],{},[150,1797,283],{}," asks the target when there is no server, or the server's folder has no\nincludes; ",[150,1800,1801],{},"--target"," answers it. ",[150,1804,452],{}," - after every install - and every\nbuild fetch the includes when they are not there yet.",[1807,1808,1809],"warning",{},[147,1810,1811,1812,1815,1816,1818],{},"Without a connection the includes cannot be downloaded: the command says so\nand goes on, and a build stops only where a plugin names an include that is\nnot there. Connect and run ",[150,1813,1814],{},"npx amxts prepare",", or point ",[150,1817,812],{}," at a\nserver with its includes.",[147,1820,1821,1824,1825,1828,1829,1832],{},[150,1822,1823],{},"lint"," checks the code with oxlint, by @antfu\u002Feslint-config's rules, and\nthe JSON and YAML files with oxfmt; ",[150,1826,1827],{},"lint:fix"," fixes what they can - those\nrules format TypeScript too. In VS Code the oxc extension, which\n",[150,1830,1831],{},".vscode\u002Fextensions.json"," recommends, does the same as you type and save.",[1394,1834,1836],{"id":1835},"a-module-package","A module package",[147,1838,1839,1841,1842,1113],{},[150,1840,350],{}," creates a module package instead - a working module with its\nplayground project and a test - see ",[340,1843,1844],{"href":121},"creating a module",[163,1846,1847,1909,1968,2027],{"sync":165},[167,1848,1850],{"className":169,"code":1849,"filename":171,"language":172,"meta":173,"style":173},"npx amxts init --module @you\u002Fgreeter               # .\u002Fgreeter\nnpx amxts init --module @you\u002Fgreeter --natives     # with natives for Pawn plugins\nnpx amxts init --module greeter --dir my-greeter   # into .\u002Fmy-greeter\n",[150,1851,1852,1869,1887],{"__ignoreMap":173},[177,1853,1854,1856,1858,1860,1863,1866],{"class":179,"line":180},[177,1855,184],{"class":183},[177,1857,188],{"class":187},[177,1859,599],{"class":187},[177,1861,1862],{"class":187}," --module",[177,1864,1865],{"class":187}," @you\u002Fgreeter",[177,1867,1868],{"class":923},"               # .\u002Fgreeter\n",[177,1870,1871,1873,1875,1877,1879,1881,1884],{"class":179,"line":927},[177,1872,184],{"class":183},[177,1874,188],{"class":187},[177,1876,599],{"class":187},[177,1878,1862],{"class":187},[177,1880,1865],{"class":187},[177,1882,1883],{"class":187}," --natives",[177,1885,1886],{"class":923},"     # with natives for Pawn plugins\n",[177,1888,1889,1891,1893,1895,1897,1900,1903,1906],{"class":179,"line":1208},[177,1890,184],{"class":183},[177,1892,188],{"class":187},[177,1894,599],{"class":187},[177,1896,1862],{"class":187},[177,1898,1899],{"class":187}," greeter",[177,1901,1902],{"class":187}," --dir",[177,1904,1905],{"class":187}," my-greeter",[177,1907,1908],{"class":923},"   # into .\u002Fmy-greeter\n",[167,1910,1912],{"className":169,"code":1911,"filename":206,"language":172,"meta":173,"style":173},"pnpm dlx amxts init --module @you\u002Fgreeter               # .\u002Fgreeter\npnpm dlx amxts init --module @you\u002Fgreeter --natives     # with natives for Pawn plugins\npnpm dlx amxts init --module greeter --dir my-greeter   # into .\u002Fmy-greeter\n",[150,1913,1914,1930,1948],{"__ignoreMap":173},[177,1915,1916,1918,1920,1922,1924,1926,1928],{"class":179,"line":180},[177,1917,206],{"class":183},[177,1919,632],{"class":187},[177,1921,188],{"class":187},[177,1923,599],{"class":187},[177,1925,1862],{"class":187},[177,1927,1865],{"class":187},[177,1929,1868],{"class":923},[177,1931,1932,1934,1936,1938,1940,1942,1944,1946],{"class":179,"line":927},[177,1933,206],{"class":183},[177,1935,632],{"class":187},[177,1937,188],{"class":187},[177,1939,599],{"class":187},[177,1941,1862],{"class":187},[177,1943,1865],{"class":187},[177,1945,1883],{"class":187},[177,1947,1886],{"class":923},[177,1949,1950,1952,1954,1956,1958,1960,1962,1964,1966],{"class":179,"line":1208},[177,1951,206],{"class":183},[177,1953,632],{"class":187},[177,1955,188],{"class":187},[177,1957,599],{"class":187},[177,1959,1862],{"class":187},[177,1961,1899],{"class":187},[177,1963,1902],{"class":187},[177,1965,1905],{"class":187},[177,1967,1908],{"class":923},[167,1969,1971],{"className":169,"code":1970,"filename":226,"language":172,"meta":173,"style":173},"yarn dlx amxts init --module @you\u002Fgreeter               # .\u002Fgreeter\nyarn dlx amxts init --module @you\u002Fgreeter --natives     # with natives for Pawn plugins\nyarn dlx amxts init --module greeter --dir my-greeter   # into .\u002Fmy-greeter\n",[150,1972,1973,1989,2007],{"__ignoreMap":173},[177,1974,1975,1977,1979,1981,1983,1985,1987],{"class":179,"line":180},[177,1976,226],{"class":183},[177,1978,632],{"class":187},[177,1980,188],{"class":187},[177,1982,599],{"class":187},[177,1984,1862],{"class":187},[177,1986,1865],{"class":187},[177,1988,1868],{"class":923},[177,1990,1991,1993,1995,1997,1999,2001,2003,2005],{"class":179,"line":927},[177,1992,226],{"class":183},[177,1994,632],{"class":187},[177,1996,188],{"class":187},[177,1998,599],{"class":187},[177,2000,1862],{"class":187},[177,2002,1865],{"class":187},[177,2004,1883],{"class":187},[177,2006,1886],{"class":923},[177,2008,2009,2011,2013,2015,2017,2019,2021,2023,2025],{"class":179,"line":1208},[177,2010,226],{"class":183},[177,2012,632],{"class":187},[177,2014,188],{"class":187},[177,2016,599],{"class":187},[177,2018,1862],{"class":187},[177,2020,1899],{"class":187},[177,2022,1902],{"class":187},[177,2024,1905],{"class":187},[177,2026,1908],{"class":923},[167,2028,2030],{"className":169,"code":2029,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts init --module @you\u002Fgreeter               # .\u002Fgreeter\nbunx amxts init --module @you\u002Fgreeter --natives     # with natives for Pawn plugins\nbunx amxts init --module greeter --dir my-greeter   # into .\u002Fmy-greeter\n",[150,2031,2032,2046,2062],{"__ignoreMap":173},[177,2033,2034,2036,2038,2040,2042,2044],{"class":179,"line":180},[177,2035,253],{"class":183},[177,2037,188],{"class":187},[177,2039,599],{"class":187},[177,2041,1862],{"class":187},[177,2043,1865],{"class":187},[177,2045,1868],{"class":923},[177,2047,2048,2050,2052,2054,2056,2058,2060],{"class":179,"line":927},[177,2049,253],{"class":183},[177,2051,188],{"class":187},[177,2053,599],{"class":187},[177,2055,1862],{"class":187},[177,2057,1865],{"class":187},[177,2059,1883],{"class":187},[177,2061,1886],{"class":923},[177,2063,2064,2066,2068,2070,2072,2074,2076,2078],{"class":179,"line":1208},[177,2065,253],{"class":183},[177,2067,188],{"class":187},[177,2069,599],{"class":187},[177,2071,1862],{"class":187},[177,2073,1899],{"class":187},[177,2075,1902],{"class":187},[177,2077,1905],{"class":187},[177,2079,1908],{"class":923},[311,2081,360],{"id":360},[163,2083,2084,2098,2111,2124],{"sync":165},[167,2085,2087],{"className":169,"code":2086,"filename":171,"language":172,"meta":173,"style":173},"npx amxts dev\n",[150,2088,2089],{"__ignoreMap":173},[177,2090,2091,2093,2095],{"class":179,"line":180},[177,2092,184],{"class":183},[177,2094,188],{"class":187},[177,2096,2097],{"class":187}," dev\n",[167,2099,2101],{"className":169,"code":2100,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts dev\n",[150,2102,2103],{"__ignoreMap":173},[177,2104,2105,2107,2109],{"class":179,"line":180},[177,2106,206],{"class":183},[177,2108,188],{"class":187},[177,2110,2097],{"class":187},[167,2112,2114],{"className":169,"code":2113,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts dev\n",[150,2115,2116],{"__ignoreMap":173},[177,2117,2118,2120,2122],{"class":179,"line":180},[177,2119,226],{"class":183},[177,2121,188],{"class":187},[177,2123,2097],{"class":187},[167,2125,2127],{"className":169,"code":2126,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts dev\n",[150,2128,2129],{"__ignoreMap":173},[177,2130,2131,2133,2135],{"class":179,"line":180},[177,2132,253],{"class":183},[177,2134,188],{"class":187},[177,2136,2097],{"class":187},[147,2138,2139,2140,2142],{},"Builds every plugin and module, copies them to the server in ",[150,2141,812],{},",\nreloads it, then watches the plugins folder and the project's modules: a save\nrebuilds the plugins that import the saved file.",[167,2144,2147],{"className":2145,"code":2146,"language":300},[298],"amxts 0.2.0 · dev\n\n  Core      @amxts\u002Fcore 0.2.0\n  Modules   menu-core 0.2.0 · config-core 0.1.1\n  Server    D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts · Windows · ReHLDS · running\n  Plugins   1 in plugins\u002F\n\n✔ hello · 6.2s\n✔ 14:02:11 deployed, the server reloaded config-core, menu-core, hello (7.1s)\n◇ watching plugins - save a plugin and it goes to the server (Ctrl+C stops)\n✔ hello · 4.1s\n✔ 14:03:40 plugins\u002Fhello.ts changed: deployed, the server reloaded hello (4.2s)\n",[150,2148,2146],{"__ignoreMap":173},[147,2150,2151,2152,2155,2156,2159,2160,2163],{},"It opens with what it works with: the core and the modules with their\nversions - one no\nplugin uses says so (",[150,2153,2154],{},"no plugin uses it","), one from a folder on this machine\nrather than from npm is ",[150,2157,2158],{},"local"," - then the server - its folder, its system\n(",[340,2161,2162],{"href":850},"below","), ReHLDS or plain HLDS, and whether it is\nrunning - and how many plugins there are.",[147,2165,2166,2167,2170,2171,2174],{},"Each plugin and module is shown as it compiles: ",[150,2168,2169],{},"◇ compiling hello 1\u002F1","\nwhile it does, ",[150,2172,2173],{},"✔ hello · 6.2s"," when it is done - in a terminal the one line\nturns into the other, in a log (CI) both stay. A plugin goes through two\ncompilers, to WebAssembly and then to machine code, and that is what a build\nspends its time on. So:",[1411,2176,2177,2187,2197],{},[1414,2178,2179,2180,2182,2183,2186],{},"the official modules come compiled for Windows and Linux in their npm\npackages, and a build takes them as they came, with nothing to compile. When the project\nwould compile one differently - its options set in ",[150,2181,395],{},", a\ncore of another version - the build says why\n(",[150,2184,2185],{},"menu-core 0.2.0 was built for @amxts\u002Fcore 0.2.0, the project has 0.2.1 - compiling it here",")\nand compiles it, once. A plugin that uses a module compiles against what\nthe module came with, too, rather than reading the module through first;",[1414,2188,2189,2190,2193,2194,2196],{},"a plugin nothing has changed for since the last build - not its file, not\nwhat it imports - is not compiled again: it is kept from\nbefore in ",[150,2191,2192],{},"node_modules\u002F.cache\u002Famxts",". A ",[150,2195,360],{}," started again goes to the\nserver in seconds;",[1414,2198,2199,2200,2203,2204,1429,2207,2209,2210,2213,2214,2217,2218,2221],{},"several plugins compile at once, each in a process of its own: as many as\nfit in 3 GB of memory - a compile takes about one - and no more than the\nmachine has processor cores. In a terminal the line names them all:\n",[150,2201,2202],{},"◇ compiling hello, shop 2\u002F3",". ",[150,2205,2206],{},"AMXTS_BUILD_MEMORY",[150,2208,808],{}," or the\nenvironment sets the memory in megabytes (",[150,2211,2212],{},"AMXTS_BUILD_MEMORY=6144","),\n",[150,2215,2216],{},"AMXTS_BUILD_JOBS"," the number of compiles outright (",[150,2219,2220],{},"1",": one at a time).\nA plugin comes out the same either way.",[147,2223,2224],{},"A save rebuilds only when the file holds something new - an editor that\nsaves a file as it was, or a package manager that writes a module again, is\nnot a change - and the line names the file.",[147,2226,2227,2229,2230,2232,2233,2236],{},[150,2228,360],{}," compiles for speed: a small plugin in a few seconds, where ",[150,2231,373],{},"\ntakes about ten. Its plugins do the same, a little slower - the server\npeople play on gets ",[150,2234,2235],{},"npx amxts build --deploy",".",[147,2238,2239,2241,2242,2244,2245,2248,2249,1113],{},[150,2240,812],{}," is the ",[150,2243,801],{}," folder of a server with amxts\n(",[340,2246,2247],{"href":24},"installing on a server","), set in the project's ",[150,2250,808],{},[167,2252,2254],{"className":169,"code":2253,"language":172,"meta":173,"style":173},"AMXTS_SERVER=D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts\n",[150,2255,2256],{"__ignoreMap":173},[177,2257,2258,2260,2263],{"class":179,"line":180},[177,2259,812],{"class":198},[177,2261,2262],{"class":191},"=",[177,2264,2265],{"class":187},"D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts\n",[147,2267,2268,2269,2272,2273,2275,2276,2279,2280,2283,2284,2287],{},"It may also name the server's own folder (",[150,2270,2271],{},"D:\u002Fhlds","), its ",[150,2274,797],{}," or\n",[150,2277,2278],{},"cstrike\u002Faddons",": the build takes ",[150,2281,2282],{},"cstrike\u002Faddons\u002Famxts"," under it, and the\n",[150,2285,2286],{},"Server"," line says which folder that is. A folder that is none of them stops\nthe build with one line naming where it looked.",[147,2289,2290,2291,566,2293,2296,2297,2299,2300,2302,2303,2305],{},"Without it ",[150,2292,360],{},[150,2294,2295],{},"build --deploy"," ask for the folder, as ",[150,2298,283],{}," does,\nand write it to ",[150,2301,808],{},". In CI, or with the output in a pipe, nothing is\nasked: the build stops and says ",[150,2304,812],{}," is not set.",[147,2307,2308,2309,566,2311,2313],{},"When the server's module is of another release than the project's core,\n",[150,2310,360],{},[150,2312,373],{}," say so first - the plugins a project builds load only on\nthe module of its own release:",[167,2315,2318],{"className":2316,"code":2317,"language":300},[298],"▲ the server runs amxts 0.1.0, this project 0.2.0 - run amxts upgrade\n",[150,2319,2317],{"__ignoreMap":173},[147,2321,2322,2326],{},[340,2323,2324],{"href":466},[150,2325,469],{}," updates the server too. The release is read from the\nmodule file, not from the running server.",[147,2328,2329,2330,847,2333,2336,2337,2340,2341,2344,2345,2203,2349,2352,2353,2236],{},"The reload goes over rcon to ",[150,2331,2332],{},"127.0.0.1:27015",[150,2334,2335],{},"AMXTS_PORT"," sets another\nport), with ",[150,2338,2339],{},"rcon_password"," from the server's ",[150,2342,2343],{},"cstrike\u002Fserver.cfg",". See\n",[340,2346,2348],{"href":2347},"\u002Fdocs\u002Fgetting-started\u002Fquick-start#hot-reload","hot reload",[150,2350,2351],{},"--os"," is as for ",[150,2354,373],{},[163,2356,2357,2374,2389,2404],{"sync":165},[167,2358,2360],{"className":169,"code":2359,"filename":171,"language":172,"meta":173,"style":173},"npx amxts dev --docker\n",[150,2361,2362],{"__ignoreMap":173},[177,2363,2364,2366,2368,2371],{"class":179,"line":180},[177,2365,184],{"class":183},[177,2367,188],{"class":187},[177,2369,2370],{"class":187}," dev",[177,2372,2373],{"class":187}," --docker\n",[167,2375,2377],{"className":169,"code":2376,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts dev --docker\n",[150,2378,2379],{"__ignoreMap":173},[177,2380,2381,2383,2385,2387],{"class":179,"line":180},[177,2382,206],{"class":183},[177,2384,188],{"class":187},[177,2386,2370],{"class":187},[177,2388,2373],{"class":187},[167,2390,2392],{"className":169,"code":2391,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts dev --docker\n",[150,2393,2394],{"__ignoreMap":173},[177,2395,2396,2398,2400,2402],{"class":179,"line":180},[177,2397,226],{"class":183},[177,2399,188],{"class":187},[177,2401,2370],{"class":187},[177,2403,2373],{"class":187},[167,2405,2407],{"className":169,"code":2406,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts dev --docker\n",[150,2408,2409],{"__ignoreMap":173},[177,2410,2411,2413,2415,2417],{"class":179,"line":180},[177,2412,253],{"class":183},[177,2414,188],{"class":187},[177,2416,2370],{"class":187},[177,2418,2373],{"class":187},[147,2420,2421,2422,2425,2426,2428,2429,2431,2432,2434],{},"The same for the ",[340,2423,2424],{"href":28},"server in Docker"," that mounts the project: it\nbuilds for Linux into ",[150,2427,379],{}," and again on every save, and deploys nothing -\nthe server reads ",[150,2430,379],{}," and reloads a plugin whose file changed - and it\nshows the amxts lines of that server's console under the build.\n",[150,2433,812],{}," is not used.",[311,2436,373],{"id":373},[163,2438,2439,2501,2554,2607],{"sync":165},[167,2440,2442],{"className":169,"code":2441,"filename":171,"language":172,"meta":173,"style":173},"npx amxts build              # dist\u002F: the .aot files and plugins.ini\nnpx amxts build --deploy     # and copies them to AMXTS_SERVER, reloading the server\nnpx amxts build --os linux   # for a Linux server\nnpx amxts build --watch      # and again on every save, without deploying\n",[150,2443,2444,2456,2470,2487],{"__ignoreMap":173},[177,2445,2446,2448,2450,2453],{"class":179,"line":180},[177,2447,184],{"class":183},[177,2449,188],{"class":187},[177,2451,2452],{"class":187}," build",[177,2454,2455],{"class":923},"              # dist\u002F: the .aot files and plugins.ini\n",[177,2457,2458,2460,2462,2464,2467],{"class":179,"line":927},[177,2459,184],{"class":183},[177,2461,188],{"class":187},[177,2463,2452],{"class":187},[177,2465,2466],{"class":187}," --deploy",[177,2468,2469],{"class":923},"     # and copies them to AMXTS_SERVER, reloading the server\n",[177,2471,2472,2474,2476,2478,2481,2484],{"class":179,"line":1208},[177,2473,184],{"class":183},[177,2475,188],{"class":187},[177,2477,2452],{"class":187},[177,2479,2480],{"class":187}," --os",[177,2482,2483],{"class":187}," linux",[177,2485,2486],{"class":923},"   # for a Linux server\n",[177,2488,2489,2491,2493,2495,2498],{"class":179,"line":1259},[177,2490,184],{"class":183},[177,2492,188],{"class":187},[177,2494,2452],{"class":187},[177,2496,2497],{"class":187}," --watch",[177,2499,2500],{"class":923},"      # and again on every save, without deploying\n",[167,2502,2504],{"className":169,"code":2503,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts build              # dist\u002F: the .aot files and plugins.ini\npnpm amxts build --deploy     # and copies them to AMXTS_SERVER, reloading the server\npnpm amxts build --os linux   # for a Linux server\npnpm amxts build --watch      # and again on every save, without deploying\n",[150,2505,2506,2516,2528,2542],{"__ignoreMap":173},[177,2507,2508,2510,2512,2514],{"class":179,"line":180},[177,2509,206],{"class":183},[177,2511,188],{"class":187},[177,2513,2452],{"class":187},[177,2515,2455],{"class":923},[177,2517,2518,2520,2522,2524,2526],{"class":179,"line":927},[177,2519,206],{"class":183},[177,2521,188],{"class":187},[177,2523,2452],{"class":187},[177,2525,2466],{"class":187},[177,2527,2469],{"class":923},[177,2529,2530,2532,2534,2536,2538,2540],{"class":179,"line":1208},[177,2531,206],{"class":183},[177,2533,188],{"class":187},[177,2535,2452],{"class":187},[177,2537,2480],{"class":187},[177,2539,2483],{"class":187},[177,2541,2486],{"class":923},[177,2543,2544,2546,2548,2550,2552],{"class":179,"line":1259},[177,2545,206],{"class":183},[177,2547,188],{"class":187},[177,2549,2452],{"class":187},[177,2551,2497],{"class":187},[177,2553,2500],{"class":923},[167,2555,2557],{"className":169,"code":2556,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts build              # dist\u002F: the .aot files and plugins.ini\nyarn amxts build --deploy     # and copies them to AMXTS_SERVER, reloading the server\nyarn amxts build --os linux   # for a Linux server\nyarn amxts build --watch      # and again on every save, without deploying\n",[150,2558,2559,2569,2581,2595],{"__ignoreMap":173},[177,2560,2561,2563,2565,2567],{"class":179,"line":180},[177,2562,226],{"class":183},[177,2564,188],{"class":187},[177,2566,2452],{"class":187},[177,2568,2455],{"class":923},[177,2570,2571,2573,2575,2577,2579],{"class":179,"line":927},[177,2572,226],{"class":183},[177,2574,188],{"class":187},[177,2576,2452],{"class":187},[177,2578,2466],{"class":187},[177,2580,2469],{"class":923},[177,2582,2583,2585,2587,2589,2591,2593],{"class":179,"line":1208},[177,2584,226],{"class":183},[177,2586,188],{"class":187},[177,2588,2452],{"class":187},[177,2590,2480],{"class":187},[177,2592,2483],{"class":187},[177,2594,2486],{"class":923},[177,2596,2597,2599,2601,2603,2605],{"class":179,"line":1259},[177,2598,226],{"class":183},[177,2600,188],{"class":187},[177,2602,2452],{"class":187},[177,2604,2497],{"class":187},[177,2606,2500],{"class":923},[167,2608,2610],{"className":169,"code":2609,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts build              # dist\u002F: the .aot files and plugins.ini\nbunx amxts build --deploy     # and copies them to AMXTS_SERVER, reloading the server\nbunx amxts build --os linux   # for a Linux server\nbunx amxts build --watch      # and again on every save, without deploying\n",[150,2611,2612,2622,2634,2648],{"__ignoreMap":173},[177,2613,2614,2616,2618,2620],{"class":179,"line":180},[177,2615,253],{"class":183},[177,2617,188],{"class":187},[177,2619,2452],{"class":187},[177,2621,2455],{"class":923},[177,2623,2624,2626,2628,2630,2632],{"class":179,"line":927},[177,2625,253],{"class":183},[177,2627,188],{"class":187},[177,2629,2452],{"class":187},[177,2631,2466],{"class":187},[177,2633,2469],{"class":923},[177,2635,2636,2638,2640,2642,2644,2646],{"class":179,"line":1208},[177,2637,253],{"class":183},[177,2639,188],{"class":187},[177,2641,2452],{"class":187},[177,2643,2480],{"class":187},[177,2645,2483],{"class":187},[177,2647,2486],{"class":923},[177,2649,2650,2652,2654,2656,2658],{"class":179,"line":1259},[177,2651,253],{"class":183},[177,2653,188],{"class":187},[177,2655,2452],{"class":187},[177,2657,2497],{"class":187},[177,2659,2500],{"class":923},[147,2661,2662,2665,2666,2669,2670,2674,2675,1429,2678,2680,2681,2683,2684,2686,2687,2689],{},[150,2663,2664],{},"plugins.ini"," lists the modules first, each after what it requires, then the\nproject's plugins. A module no plugin uses is left out, unless ",[150,2667,2668],{},"pawn"," keeps it\n(",[340,2671,2673],{"href":2672},"\u002Fdocs\u002Fcore\u002Fplugin#only-what-is-used-is-built","only what is used is built",").\n",[150,2676,2677],{},"outDir",[150,2679,395],{}," changes where it writes. A plugin nothing has\nchanged for since the last ",[150,2682,373],{}," is taken as it was built, an official module as it came\n(",[340,2685,360],{"href":357},"); ",[150,2688,2192],{}," removed, every one compiles again.",[1394,2691,2693],{"id":2692},"the-servers-system","The server's system",[147,2695,2696,2697,2700],{},"A plugin is compiled to machine code for its server's system, Windows or\nLinux, and a ",[150,2698,2699],{},".aot"," built for one does not load on the other. The build\ntakes the system from, first to last:",[2702,2703,2704,2718,2725,2741],"ol",{},[1414,2705,2706,2709,2710,2713,2714,2709,2716,1004],{},[150,2707,2708],{},"--os windows"," or ",[150,2711,2712],{},"--os linux"," on ",[150,2715,373],{},[150,2717,360],{},[1414,2719,2720,2722,2723,1004],{},[150,2721,846],{}," in the environment or ",[150,2724,808],{},[1414,2726,2727,2728,2730,2731,2709,2734,2737,2738,1004],{},"the ",[150,2729,812],{}," folder: ",[150,2732,2733],{},"hlds_linux",[150,2735,2736],{},"hlds.exe"," beside the game\nfolder, else the files in its ",[150,2739,2740],{},"addons\u002Famxmodx\u002Fmodules",[1414,2742,2743],{},"the system of the machine the build runs on.",[147,2745,2746,2747,2749,2750,566,2752,2754,2755,2758,2759,2761,2762,2764,2765,2203,2768,2770,2771,2773],{},"The ",[150,2748,2286],{}," line of ",[150,2751,360],{},[150,2753,373],{}," says which: ",[150,2756,2757],{},"Linux",". So a project\nbuilt on Windows deploys to a Linux server as it is, once\n",[150,2760,812],{}," points at it - a mounted share, say - or ",[150,2763,808],{}," says\n",[150,2766,2767],{},"AMXTS_SERVER_OS=linux",[150,2769,283],{}," asks when the server's folder does not show\nit, and ",[150,2772,482],{}," shows what the build would pick.",[1807,2775,2776],{},[147,2777,2778,2782,2785,2786,2788,2789,2792,2793,2796],{},[2779,2780,2781],"strong",{},"A plugin for the other system",[2783,2784],"br",{},"\nA ",[150,2787,2699],{}," built for the other system does not load, and the console says so:\n",[150,2790,2791],{},"was compiled for a Linux server, and this one runs Windows"," (or the other\nway). A ",[150,2794,2795],{},".ts"," the server compiles itself is always built for it.",[311,2798,389],{"id":389},[163,2800,2801,2815,2828,2841],{"sync":165},[167,2802,2804],{"className":169,"code":2803,"filename":171,"language":172,"meta":173,"style":173},"npx amxts typecheck\n",[150,2805,2806],{"__ignoreMap":173},[177,2807,2808,2810,2812],{"class":179,"line":180},[177,2809,184],{"class":183},[177,2811,188],{"class":187},[177,2813,2814],{"class":187}," typecheck\n",[167,2816,2818],{"className":169,"code":2817,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts typecheck\n",[150,2819,2820],{"__ignoreMap":173},[177,2821,2822,2824,2826],{"class":179,"line":180},[177,2823,206],{"class":183},[177,2825,188],{"class":187},[177,2827,2814],{"class":187},[167,2829,2831],{"className":169,"code":2830,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts typecheck\n",[150,2832,2833],{"__ignoreMap":173},[177,2834,2835,2837,2839],{"class":179,"line":180},[177,2836,226],{"class":183},[177,2838,188],{"class":187},[177,2840,2814],{"class":187},[167,2842,2844],{"className":169,"code":2843,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts typecheck\n",[150,2845,2846],{"__ignoreMap":173},[177,2847,2848,2850,2852],{"class":179,"line":180},[177,2849,253],{"class":183},[177,2851,188],{"class":187},[177,2853,2814],{"class":187},[147,2855,2856,2857,2859],{},"Checks the plugins and ",[150,2858,395],{}," with TypeScript, as the editor\ndoes: a misspelled option of a module, a wrong event name, a field that is\nnot there.",[311,2861,406],{"id":406},[163,2863,2864,2908,2947,2986],{"sync":165},[167,2865,2867],{"className":169,"code":2866,"filename":171,"language":172,"meta":173,"style":173},"npx amxts test           # every test in the project\nnpx amxts test hello     # the files whose name has \"hello\"\nnpx amxts test --watch   # again on every save\n",[150,2868,2869,2881,2895],{"__ignoreMap":173},[177,2870,2871,2873,2875,2878],{"class":179,"line":180},[177,2872,184],{"class":183},[177,2874,188],{"class":187},[177,2876,2877],{"class":187}," test",[177,2879,2880],{"class":923},"           # every test in the project\n",[177,2882,2883,2885,2887,2889,2892],{"class":179,"line":927},[177,2884,184],{"class":183},[177,2886,188],{"class":187},[177,2888,2877],{"class":187},[177,2890,2891],{"class":187}," hello",[177,2893,2894],{"class":923},"     # the files whose name has \"hello\"\n",[177,2896,2897,2899,2901,2903,2905],{"class":179,"line":1208},[177,2898,184],{"class":183},[177,2900,188],{"class":187},[177,2902,2877],{"class":187},[177,2904,2497],{"class":187},[177,2906,2907],{"class":923},"   # again on every save\n",[167,2909,2911],{"className":169,"code":2910,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts test           # every test in the project\npnpm amxts test hello     # the files whose name has \"hello\"\npnpm amxts test --watch   # again on every save\n",[150,2912,2913,2923,2935],{"__ignoreMap":173},[177,2914,2915,2917,2919,2921],{"class":179,"line":180},[177,2916,206],{"class":183},[177,2918,188],{"class":187},[177,2920,2877],{"class":187},[177,2922,2880],{"class":923},[177,2924,2925,2927,2929,2931,2933],{"class":179,"line":927},[177,2926,206],{"class":183},[177,2928,188],{"class":187},[177,2930,2877],{"class":187},[177,2932,2891],{"class":187},[177,2934,2894],{"class":923},[177,2936,2937,2939,2941,2943,2945],{"class":179,"line":1208},[177,2938,206],{"class":183},[177,2940,188],{"class":187},[177,2942,2877],{"class":187},[177,2944,2497],{"class":187},[177,2946,2907],{"class":923},[167,2948,2950],{"className":169,"code":2949,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts test           # every test in the project\nyarn amxts test hello     # the files whose name has \"hello\"\nyarn amxts test --watch   # again on every save\n",[150,2951,2952,2962,2974],{"__ignoreMap":173},[177,2953,2954,2956,2958,2960],{"class":179,"line":180},[177,2955,226],{"class":183},[177,2957,188],{"class":187},[177,2959,2877],{"class":187},[177,2961,2880],{"class":923},[177,2963,2964,2966,2968,2970,2972],{"class":179,"line":927},[177,2965,226],{"class":183},[177,2967,188],{"class":187},[177,2969,2877],{"class":187},[177,2971,2891],{"class":187},[177,2973,2894],{"class":923},[177,2975,2976,2978,2980,2982,2984],{"class":179,"line":1208},[177,2977,226],{"class":183},[177,2979,188],{"class":187},[177,2981,2877],{"class":187},[177,2983,2497],{"class":187},[177,2985,2907],{"class":923},[167,2987,2989],{"className":169,"code":2988,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts test           # every test in the project\nbunx amxts test hello     # the files whose name has \"hello\"\nbunx amxts test --watch   # again on every save\n",[150,2990,2991,3001,3013],{"__ignoreMap":173},[177,2992,2993,2995,2997,2999],{"class":179,"line":180},[177,2994,253],{"class":183},[177,2996,188],{"class":187},[177,2998,2877],{"class":187},[177,3000,2880],{"class":923},[177,3002,3003,3005,3007,3009,3011],{"class":179,"line":927},[177,3004,253],{"class":183},[177,3006,188],{"class":187},[177,3008,2877],{"class":187},[177,3010,2891],{"class":187},[177,3012,2894],{"class":923},[177,3014,3015,3017,3019,3021,3023],{"class":179,"line":1208},[177,3016,253],{"class":183},[177,3018,188],{"class":187},[177,3020,2877],{"class":187},[177,3022,2497],{"class":187},[177,3024,2907],{"class":923},[147,3026,3027,3028,3031,3032,3035,3036,2236],{},"Runs ",[150,3029,3030],{},"bun test",": its options go to it as they are. A test puts the project on\na fake server with ",[150,3033,3034],{},"setup()"," - see ",[340,3037,3038],{"href":135},"testing",[311,3040,419],{"id":419},[163,3042,3043,3108,3165,3222],{"sync":165},[167,3044,3046],{"className":169,"code":3045,"filename":171,"language":172,"meta":173,"style":173},"npx amxts module add menu-core      # @amxts\u002Fmenu-core\nnpx amxts module add @you\u002Fgreeter   # any module package from npm\nnpx amxts module add ..\u002Fgreeter     # a module in a folder\nnpx amxts module list\n",[150,3047,3048,3066,3081,3097],{"__ignoreMap":173},[177,3049,3050,3052,3054,3057,3060,3063],{"class":179,"line":180},[177,3051,184],{"class":183},[177,3053,188],{"class":187},[177,3055,3056],{"class":187}," module",[177,3058,3059],{"class":187}," add",[177,3061,3062],{"class":187}," menu-core",[177,3064,3065],{"class":923},"      # @amxts\u002Fmenu-core\n",[177,3067,3068,3070,3072,3074,3076,3078],{"class":179,"line":927},[177,3069,184],{"class":183},[177,3071,188],{"class":187},[177,3073,3056],{"class":187},[177,3075,3059],{"class":187},[177,3077,1865],{"class":187},[177,3079,3080],{"class":923},"   # any module package from npm\n",[177,3082,3083,3085,3087,3089,3091,3094],{"class":179,"line":1208},[177,3084,184],{"class":183},[177,3086,188],{"class":187},[177,3088,3056],{"class":187},[177,3090,3059],{"class":187},[177,3092,3093],{"class":187}," ..\u002Fgreeter",[177,3095,3096],{"class":923},"     # a module in a folder\n",[177,3098,3099,3101,3103,3105],{"class":179,"line":1259},[177,3100,184],{"class":183},[177,3102,188],{"class":187},[177,3104,3056],{"class":187},[177,3106,3107],{"class":187}," list\n",[167,3109,3111],{"className":169,"code":3110,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts module add menu-core      # @amxts\u002Fmenu-core\npnpm amxts module add @you\u002Fgreeter   # any module package from npm\npnpm amxts module add ..\u002Fgreeter     # a module in a folder\npnpm amxts module list\n",[150,3112,3113,3127,3141,3155],{"__ignoreMap":173},[177,3114,3115,3117,3119,3121,3123,3125],{"class":179,"line":180},[177,3116,206],{"class":183},[177,3118,188],{"class":187},[177,3120,3056],{"class":187},[177,3122,3059],{"class":187},[177,3124,3062],{"class":187},[177,3126,3065],{"class":923},[177,3128,3129,3131,3133,3135,3137,3139],{"class":179,"line":927},[177,3130,206],{"class":183},[177,3132,188],{"class":187},[177,3134,3056],{"class":187},[177,3136,3059],{"class":187},[177,3138,1865],{"class":187},[177,3140,3080],{"class":923},[177,3142,3143,3145,3147,3149,3151,3153],{"class":179,"line":1208},[177,3144,206],{"class":183},[177,3146,188],{"class":187},[177,3148,3056],{"class":187},[177,3150,3059],{"class":187},[177,3152,3093],{"class":187},[177,3154,3096],{"class":923},[177,3156,3157,3159,3161,3163],{"class":179,"line":1259},[177,3158,206],{"class":183},[177,3160,188],{"class":187},[177,3162,3056],{"class":187},[177,3164,3107],{"class":187},[167,3166,3168],{"className":169,"code":3167,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts module add menu-core      # @amxts\u002Fmenu-core\nyarn amxts module add @you\u002Fgreeter   # any module package from npm\nyarn amxts module add ..\u002Fgreeter     # a module in a folder\nyarn amxts module list\n",[150,3169,3170,3184,3198,3212],{"__ignoreMap":173},[177,3171,3172,3174,3176,3178,3180,3182],{"class":179,"line":180},[177,3173,226],{"class":183},[177,3175,188],{"class":187},[177,3177,3056],{"class":187},[177,3179,3059],{"class":187},[177,3181,3062],{"class":187},[177,3183,3065],{"class":923},[177,3185,3186,3188,3190,3192,3194,3196],{"class":179,"line":927},[177,3187,226],{"class":183},[177,3189,188],{"class":187},[177,3191,3056],{"class":187},[177,3193,3059],{"class":187},[177,3195,1865],{"class":187},[177,3197,3080],{"class":923},[177,3199,3200,3202,3204,3206,3208,3210],{"class":179,"line":1208},[177,3201,226],{"class":183},[177,3203,188],{"class":187},[177,3205,3056],{"class":187},[177,3207,3059],{"class":187},[177,3209,3093],{"class":187},[177,3211,3096],{"class":923},[177,3213,3214,3216,3218,3220],{"class":179,"line":1259},[177,3215,226],{"class":183},[177,3217,188],{"class":187},[177,3219,3056],{"class":187},[177,3221,3107],{"class":187},[167,3223,3225],{"className":169,"code":3224,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts module add menu-core      # @amxts\u002Fmenu-core\nbunx amxts module add @you\u002Fgreeter   # any module package from npm\nbunx amxts module add ..\u002Fgreeter     # a module in a folder\nbunx amxts module list\n",[150,3226,3227,3241,3255,3269],{"__ignoreMap":173},[177,3228,3229,3231,3233,3235,3237,3239],{"class":179,"line":180},[177,3230,253],{"class":183},[177,3232,188],{"class":187},[177,3234,3056],{"class":187},[177,3236,3059],{"class":187},[177,3238,3062],{"class":187},[177,3240,3065],{"class":923},[177,3242,3243,3245,3247,3249,3251,3253],{"class":179,"line":927},[177,3244,253],{"class":183},[177,3246,188],{"class":187},[177,3248,3056],{"class":187},[177,3250,3059],{"class":187},[177,3252,1865],{"class":187},[177,3254,3080],{"class":923},[177,3256,3257,3259,3261,3263,3265,3267],{"class":179,"line":1208},[177,3258,253],{"class":183},[177,3260,188],{"class":187},[177,3262,3056],{"class":187},[177,3264,3059],{"class":187},[177,3266,3093],{"class":187},[177,3268,3096],{"class":923},[177,3270,3271,3273,3275,3277],{"class":179,"line":1259},[177,3272,253],{"class":183},[177,3274,188],{"class":187},[177,3276,3056],{"class":187},[177,3278,3107],{"class":187},[147,3280,3281,3283,3284,1429,3286,3288,3289,3292,3293,3295,3296,3298,3299,3301],{},[150,3282,424],{}," installs the package with the project's package manager (found\nby its lockfile) and adds it to ",[150,3285,909],{},[150,3287,395],{},", followed by\nthe modules it needs that the list does not have yet, each with a\n",[150,3290,3291],{},"\u002F\u002F needed by menu-core"," comment - only the list changes, the rest of the\nfile stays as you wrote it. A short name is a\nmodule's name in the ",[340,3294,494],{"href":493},": ",[150,3297,905],{}," is\n",[150,3300,1161],{},". A package the catalog does not list is installed from npm\nall the same, with a warning; a package that is not an amxts module is\ninstalled but not added to the config. A module from npm comes at its newest\nversion that works with the project's core. The command reads the catalog\nfrom the registry on GitHub, and offline takes the copy it was published\nwith.",[316,3303,3304,3312],{},[319,3305,3306],{},[322,3307,3308,3310],{},[325,3309,715],{},[325,3311,330],{},[332,3313,3314,3326,3336],{},[322,3315,3316,3321],{},[337,3317,3318],{},[150,3319,3320],{},"--skip-install",[337,3322,3323,3324],{},"only add it to ",[150,3325,395],{},[322,3327,3328,3333],{},[337,3329,3330],{},[150,3331,3332],{},"--skip-config",[337,3334,3335],{},"only install it",[322,3337,3338,3342],{},[337,3339,3340],{},[150,3341,892],{},[337,3343,3344],{},"an official module from its folder on this machine, linked, for working on amxts itself",[147,3346,3347,3349,3350,1113],{},[150,3348,428],{}," shows the modules in the config and whether each is installed,\nthe installed ones the config does not list, and the catalog's modules the\nproject does not have yet - a community module marked ",[150,3351,3352],{},"(community)",[167,3354,3357],{"className":3355,"code":3356,"language":300},[298],"In amxts.config.ts\n  ✔ @amxts\u002Fmenu-core    0.2.0  An opinionated way to create menus\n  ✔ @amxts\u002Fconfig-core  0.1.1  Configs in INI, YAML or JSON, read into typed objects and written back\n\nIn the amxts catalog\n  ○ resemiclip          Semiclip over the ReSemiclip module - who walks through whom, as a rule over two players - npx amxts module add resemiclip\n  ○ ftp                 FTP, FTPS and SFTP - upload, download and list files on another server, every call a promise - npx amxts module add ftp\n",[150,3358,3356],{"__ignoreMap":173},[311,3360,439],{"id":439},[163,3362,3363,3377,3390,3403],{"sync":165},[167,3364,3366],{"className":169,"code":3365,"filename":171,"language":172,"meta":173,"style":173},"npx amxts check\n",[150,3367,3368],{"__ignoreMap":173},[177,3369,3370,3372,3374],{"class":179,"line":180},[177,3371,184],{"class":183},[177,3373,188],{"class":187},[177,3375,3376],{"class":187}," check\n",[167,3378,3380],{"className":169,"code":3379,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts check\n",[150,3381,3382],{"__ignoreMap":173},[177,3383,3384,3386,3388],{"class":179,"line":180},[177,3385,206],{"class":183},[177,3387,188],{"class":187},[177,3389,3376],{"class":187},[167,3391,3393],{"className":169,"code":3392,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts check\n",[150,3394,3395],{"__ignoreMap":173},[177,3396,3397,3399,3401],{"class":179,"line":180},[177,3398,226],{"class":183},[177,3400,188],{"class":187},[177,3402,3376],{"class":187},[167,3404,3406],{"className":169,"code":3405,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts check\n",[150,3407,3408],{"__ignoreMap":173},[177,3409,3410,3412,3414],{"class":179,"line":180},[177,3411,253],{"class":183},[177,3413,188],{"class":187},[177,3415,3376],{"class":187},[147,3417,3418,3419,3421,3422,3425,3426,1269,3429,566,3432,3435,3436,3439,3440,2236],{},"In a module's folder, before publishing it: its ",[150,3420,152],{}," field points at\nfiles that are there, the module file has ",[150,3423,3424],{},"defineModule"," with ",[150,3427,3428],{},"meta.name",[150,3430,3431],{},"README.md",[150,3433,3434],{},"LICENSE"," are there, and ",[150,3437,3438],{},"include\u002F\u003Cname>.inc"," is what the\nbuild writes from the natives. It writes nothing. See\n",[340,3441,1844],{"href":121},[311,3443,452],{"id":452},[163,3445,3446,3460,3473,3486],{"sync":165},[167,3447,3449],{"className":169,"code":3448,"filename":171,"language":172,"meta":173,"style":173},"npx amxts prepare\n",[150,3450,3451],{"__ignoreMap":173},[177,3452,3453,3455,3457],{"class":179,"line":180},[177,3454,184],{"class":183},[177,3456,188],{"class":187},[177,3458,3459],{"class":187}," prepare\n",[167,3461,3463],{"className":169,"code":3462,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts prepare\n",[150,3464,3465],{"__ignoreMap":173},[177,3466,3467,3469,3471],{"class":179,"line":180},[177,3468,206],{"class":183},[177,3470,188],{"class":187},[177,3472,3459],{"class":187},[167,3474,3476],{"className":169,"code":3475,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts prepare\n",[150,3477,3478],{"__ignoreMap":173},[177,3479,3480,3482,3484],{"class":179,"line":180},[177,3481,226],{"class":183},[177,3483,188],{"class":187},[177,3485,3459],{"class":187},[167,3487,3489],{"className":169,"code":3488,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts prepare\n",[150,3490,3491],{"__ignoreMap":173},[177,3492,3493,3495,3497],{"class":179,"line":180},[177,3494,253],{"class":183},[177,3496,188],{"class":187},[177,3498,3459],{"class":187},[147,3500,3501,3502,3504,3505,1113],{},"Gets ",[340,3503,502],{"href":501}," when they are not there\nyet, and writes what the editor reads into ",[150,3506,458],{},[1411,3508,3509,3529,3540],{},[1414,3510,3511,3514,3515,3518,3519,3522,3523,3525,3526,3528],{},[150,3512,3513],{},".amxts\u002Ftsconfig.json",", which the project's ",[150,3516,3517],{},"tsconfig.json"," extends: ",[150,3520,3521],{},"~\u002F","\nis the plugins folder, ",[150,3524,160],{}," and its entries are the core's API,\nthe modules are found by their names, and ",[150,3527,395],{}," is typed from\nthem;",[1414,3530,3531,3534,3535,3539],{},[150,3532,3533],{},".amxts\u002Fimports.d.ts",": what plugins use without an import, as globals for\nthe editor (",[340,3536,3538],{"href":3537},"\u002Fdocs\u002Fcore\u002Fplugin#auto-imports","auto-imports",");",[1414,3541,3542,3545,3546,3549,3550,3552],{},[150,3543,3544],{},".amxts\u002Fapi\u002F",", only when ",[150,3547,3548],{},"AMXTS_DOCS_LANG"," picks a language other than\nEnglish: a copy of the core's API and the modules' with the tooltips in that\nlanguage, which the editor reads instead of the installed packages. The\npackages in ",[150,3551,272],{}," are never changed, and the build compiles them,\nso the plugins come out the same in every language.",[147,3554,3555,869,3557,566,3559,3561,3562,3564,3565,3567,3568,3571],{},[150,3556,373],{},[150,3558,360],{},[150,3560,389],{}," do it first; ",[150,3563,283],{}," does it after the install.\n",[150,3566,458],{}," is the command's own: it is in ",[150,3569,3570],{},".gitignore",", and written again\nwhenever it is out of date.",[311,3573,3574,3575],{"id":469},"upgrade ",[3576,3577],"since",{"v":3578},"0.2",[163,3580,3581,3630,3671,3712],{"sync":165},[167,3582,3584],{"className":169,"code":3583,"filename":171,"language":172,"meta":173,"style":173},"npx amxts upgrade              # to the latest release\nnpx amxts upgrade --to 0.2.0   # to a release of your choice\nnpx amxts upgrade --dry-run    # what it would change, changing nothing\n",[150,3585,3586,3598,3616],{"__ignoreMap":173},[177,3587,3588,3590,3592,3595],{"class":179,"line":180},[177,3589,184],{"class":183},[177,3591,188],{"class":187},[177,3593,3594],{"class":187}," upgrade",[177,3596,3597],{"class":923},"              # to the latest release\n",[177,3599,3600,3602,3604,3606,3609,3613],{"class":179,"line":927},[177,3601,184],{"class":183},[177,3603,188],{"class":187},[177,3605,3594],{"class":187},[177,3607,3608],{"class":187}," --to",[177,3610,3612],{"class":3611},"sbssI"," 0.2.0",[177,3614,3615],{"class":923},"   # to a release of your choice\n",[177,3617,3618,3620,3622,3624,3627],{"class":179,"line":1208},[177,3619,184],{"class":183},[177,3621,188],{"class":187},[177,3623,3594],{"class":187},[177,3625,3626],{"class":187}," --dry-run",[177,3628,3629],{"class":923},"    # what it would change, changing nothing\n",[167,3631,3633],{"className":169,"code":3632,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts upgrade              # to the latest release\npnpm amxts upgrade --to 0.2.0   # to a release of your choice\npnpm amxts upgrade --dry-run    # what it would change, changing nothing\n",[150,3634,3635,3645,3659],{"__ignoreMap":173},[177,3636,3637,3639,3641,3643],{"class":179,"line":180},[177,3638,206],{"class":183},[177,3640,188],{"class":187},[177,3642,3594],{"class":187},[177,3644,3597],{"class":923},[177,3646,3647,3649,3651,3653,3655,3657],{"class":179,"line":927},[177,3648,206],{"class":183},[177,3650,188],{"class":187},[177,3652,3594],{"class":187},[177,3654,3608],{"class":187},[177,3656,3612],{"class":3611},[177,3658,3615],{"class":923},[177,3660,3661,3663,3665,3667,3669],{"class":179,"line":1208},[177,3662,206],{"class":183},[177,3664,188],{"class":187},[177,3666,3594],{"class":187},[177,3668,3626],{"class":187},[177,3670,3629],{"class":923},[167,3672,3674],{"className":169,"code":3673,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts upgrade              # to the latest release\nyarn amxts upgrade --to 0.2.0   # to a release of your choice\nyarn amxts upgrade --dry-run    # what it would change, changing nothing\n",[150,3675,3676,3686,3700],{"__ignoreMap":173},[177,3677,3678,3680,3682,3684],{"class":179,"line":180},[177,3679,226],{"class":183},[177,3681,188],{"class":187},[177,3683,3594],{"class":187},[177,3685,3597],{"class":923},[177,3687,3688,3690,3692,3694,3696,3698],{"class":179,"line":927},[177,3689,226],{"class":183},[177,3691,188],{"class":187},[177,3693,3594],{"class":187},[177,3695,3608],{"class":187},[177,3697,3612],{"class":3611},[177,3699,3615],{"class":923},[177,3701,3702,3704,3706,3708,3710],{"class":179,"line":1208},[177,3703,226],{"class":183},[177,3705,188],{"class":187},[177,3707,3594],{"class":187},[177,3709,3626],{"class":187},[177,3711,3629],{"class":923},[167,3713,3715],{"className":169,"code":3714,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts upgrade              # to the latest release\nbunx amxts upgrade --to 0.2.0   # to a release of your choice\nbunx amxts upgrade --dry-run    # what it would change, changing nothing\n",[150,3716,3717,3727,3741],{"__ignoreMap":173},[177,3718,3719,3721,3723,3725],{"class":179,"line":180},[177,3720,253],{"class":183},[177,3722,188],{"class":187},[177,3724,3594],{"class":187},[177,3726,3597],{"class":923},[177,3728,3729,3731,3733,3735,3737,3739],{"class":179,"line":927},[177,3730,253],{"class":183},[177,3732,188],{"class":187},[177,3734,3594],{"class":187},[177,3736,3608],{"class":187},[177,3738,3612],{"class":3611},[177,3740,3615],{"class":923},[177,3742,3743,3745,3747,3749,3751],{"class":179,"line":1208},[177,3744,253],{"class":183},[177,3746,188],{"class":187},[177,3748,3594],{"class":187},[177,3750,3626],{"class":187},[177,3752,3629],{"class":923},[147,3754,3755,3756,3758,3759,3761,3762,3765,3766,3768],{},"::: warning The command first\n",[150,3757,469],{}," is a command of ",[150,3760,156],{},", and a project runs the version of it its core came with, or the one its own ",[150,3763,3764],{},"package.json"," names. A project whose command has no ",[150,3767,469],{}," yet adds the newest command first, with its package manager:",[163,3770,3771,3798,3821,3844],{"sync":165},[167,3772,3774],{"className":169,"code":3773,"filename":171,"language":172,"meta":173,"style":173},"npm i @amxts\u002Fcli@latest   # or: bun add @amxts\u002Fcli@latest, pnpm add @amxts\u002Fcli@latest, yarn add @amxts\u002Fcli@latest\nnpx amxts upgrade\n",[150,3775,3776,3789],{"__ignoreMap":173},[177,3777,3778,3780,3783,3786],{"class":179,"line":180},[177,3779,171],{"class":183},[177,3781,3782],{"class":187}," i",[177,3784,3785],{"class":187}," @amxts\u002Fcli@latest",[177,3787,3788],{"class":923},"   # or: bun add @amxts\u002Fcli@latest, pnpm add @amxts\u002Fcli@latest, yarn add @amxts\u002Fcli@latest\n",[177,3790,3791,3793,3795],{"class":179,"line":927},[177,3792,184],{"class":183},[177,3794,188],{"class":187},[177,3796,3797],{"class":187}," upgrade\n",[167,3799,3801],{"className":169,"code":3800,"filename":206,"language":172,"meta":173,"style":173},"pnpm add @amxts\u002Fcli@latest   # or: bun add @amxts\u002Fcli@latest, pnpm add @amxts\u002Fcli@latest, yarn add @amxts\u002Fcli@latest\npnpm amxts upgrade\n",[150,3802,3803,3813],{"__ignoreMap":173},[177,3804,3805,3807,3809,3811],{"class":179,"line":180},[177,3806,206],{"class":183},[177,3808,3059],{"class":187},[177,3810,3785],{"class":187},[177,3812,3788],{"class":923},[177,3814,3815,3817,3819],{"class":179,"line":927},[177,3816,206],{"class":183},[177,3818,188],{"class":187},[177,3820,3797],{"class":187},[167,3822,3824],{"className":169,"code":3823,"filename":226,"language":172,"meta":173,"style":173},"yarn add @amxts\u002Fcli@latest   # or: bun add @amxts\u002Fcli@latest, pnpm add @amxts\u002Fcli@latest, yarn add @amxts\u002Fcli@latest\nyarn amxts upgrade\n",[150,3825,3826,3836],{"__ignoreMap":173},[177,3827,3828,3830,3832,3834],{"class":179,"line":180},[177,3829,226],{"class":183},[177,3831,3059],{"class":187},[177,3833,3785],{"class":187},[177,3835,3788],{"class":923},[177,3837,3838,3840,3842],{"class":179,"line":927},[177,3839,226],{"class":183},[177,3841,188],{"class":187},[177,3843,3797],{"class":187},[167,3845,3847],{"className":169,"code":3846,"filename":246,"language":172,"meta":173,"style":173},"bun add @amxts\u002Fcli@latest   # or: bun add @amxts\u002Fcli@latest, pnpm add @amxts\u002Fcli@latest, yarn add @amxts\u002Fcli@latest\nbunx amxts upgrade\n",[150,3848,3849,3859],{"__ignoreMap":173},[177,3850,3851,3853,3855,3857],{"class":179,"line":180},[177,3852,246],{"class":183},[177,3854,3059],{"class":187},[177,3856,3785],{"class":187},[177,3858,3788],{"class":923},[177,3860,3861,3863,3865],{"class":179,"line":927},[177,3862,253],{"class":183},[177,3864,188],{"class":187},[177,3866,3797],{"class":187},[147,3868,3869],{},":::",[147,3871,3872],{},"Moves the project to another amxts release, in one go:",[2702,3874,3875,3923,3934,3944,3976],{},[1414,3876,3877,938,3880,3882,3883,3886,3887,3890,3891,3893,3894,3897,3898,3901,3902,869,3905,3901,3908,3911,3912,3915,3916,869,3919,3922],{},[2779,3878,3879],{},"The packages.",[150,3881,160],{}," goes to the latest version on the\nregistry, or to ",[150,3884,3885],{},"--to",". Every other ",[150,3888,3889],{},"@amxts\u002F"," package in ",[150,3892,3764],{}," -\nthe official modules, the command - has a version of its own, and goes to\nits newest version that works with that core: a module names the cores it\nworks with in its ",[150,3895,3896],{},"peerDependencies",". Each is written the way the project\nwrites it: ",[150,3899,3900],{},"^0.1.0"," becomes ",[150,3903,3904],{},"^0.2.0",[150,3906,3907],{},"0.1.0",[150,3909,3910],{},"0.2.0",". A package\nfrom a folder (",[150,3913,3914],{},"file:",") stays as it is; a module with no version for that\ncore yet stops the upgrade before anything changes. The project's package\nmanager - the one its lockfile names - installs them from the registry\nnpm is set to (",[150,3917,3918],{},".npmrc",[150,3920,3921],{},"NPM_CONFIG_REGISTRY",").",[1414,3924,3925,3928,3929,3933],{},[2779,3926,3927],{},"The code",", rewritten to the new API by the new core, every change\nlisted: ",[340,3930,3932],{"href":3931},"#the-code","the code",", below.",[1414,3935,3936,3939,3940,3943],{},[2779,3937,3938],{},"The build",", as ",[150,3941,3942],{},"amxts build"," does it.",[1414,3945,3946,1429,3949,3951,3952,3954,3955,3958,3959,3962,3963,3966,3967,3969,3970,3972,3973,3975],{},[2779,3947,3948],{},"The server",[150,3950,812],{},": its module - and the compiler for ",[150,3953,2795],{},"\nwritten on the server, where it has one - from the\n",[340,3956,3957],{"href":24},"GitHub Release"," of the new version, each file checked\nagainst the sha256 the release lists. The file it replaces stays beside\nit with its version: ",[150,3960,3961],{},"amxts_amxx.dll.0.1.0",". A line ",[150,3964,3965],{},"amxts_host.amxx"," in\nAMX Mod X's ",[150,3968,2664],{}," goes: the module loads its host plugin itself.\nWith no ",[150,3971,812],{}," - a ",[340,3974,2424],{"href":28}," - it says\nwhich image to pull.",[1414,3977,3978,3981],{},[2779,3979,3980],{},"A summary",": the versions, the files rewritten, what to check by hand\nand what happened to the server.",[167,3983,3986],{"className":3984,"code":3985,"language":300},[298],"amxts 0.2.0 · upgrade\n◇ Packages: amxts 0.2.0 (latest)\ni @amxts\u002Fcore  ^0.1.0 → ^0.2.0\ni @amxts\u002Fcli  ^0.1.0 → ^0.2.0\ni @amxts\u002Fmenu-core  ^0.1.0 → ^0.2.0\ni @amxts\u002Fconfig-core  ^0.1.0 → ^0.1.1\n◇ Installing with npm\n✔ Installed with npm\n◇ Code\n  plugins\u002Fhello.ts:1  ~\u002Fnatives → @amxts\u002Fcore\u002Fnatives\n  plugins\u002Fhello.ts:9  player.account → player.money\n◇ Build\n  ...\n✔ built hello into dist (11.4s)\n◇ Server: D:\u002Fhlds\u002Fcstrike (windows)\n✔ amxts_amxx.dll 0.1.0 → 0.2.0 (the old one: amxts_amxx.dll.0.1.0)\n✔ Took amxts_host.amxx out of D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxmodx\u002Fconfigs\u002Fplugins.ini: the module loads it itself\n\nUpgraded to amxts 0.2.0\n  @amxts\u002Fcore         0.1.0 → 0.2.0\n  @amxts\u002Fcli          0.1.0 → 0.2.0\n  @amxts\u002Fmenu-core    0.1.0 → 0.2.0\n  @amxts\u002Fconfig-core  0.1.0 → 0.1.1\n  ✔ rewritten: plugins\u002Fhello.ts\n  ▲ to check by hand:\n      plugins\u002Fshop.ts:14  it reads the words after the name: write them in the usage, \"\u002Fgive \u003Camount>\", and take them by name, ({ player, amount })\n  ✔ built\n  ✔ server: amxts_amxx.dll 0.1.0 → 0.2.0 - restart the server to load it\n",[150,3987,3985],{"__ignoreMap":173},[316,3989,3990,3998],{},[319,3991,3992],{},[322,3993,3994,3996],{},[325,3995,715],{},[325,3997,330],{},[332,3999,4000,4010,4020,4030],{},[322,4001,4002,4007],{},[337,4003,4004],{},[150,4005,4006],{},"--to \u003Cversion>",[337,4008,4009],{},"the release to move to, instead of the latest",[322,4011,4012,4017],{},[337,4013,4014],{},[150,4015,4016],{},"--no-server",[337,4018,4019],{},"leave the server as it is",[322,4021,4022,4027],{},[337,4023,4024],{},[150,4025,4026],{},"--server-only",[337,4028,4029],{},"only the server's step - for a server that was running",[322,4031,4032,4037],{},[337,4033,4034],{},[150,4035,4036],{},"--dry-run",[337,4038,4039],{},"print what it would do: nothing is installed or written, and of the release only its list of files is read",[147,4041,4042],{},"A dry run lists the rewrites only when the project has that version of the\ncore already: before the install, the new core is not there to ask.",[147,4044,4045,4046,4048],{},"The command a project runs is the one its core came with. An ",[150,4047,152],{}," of an\nolder release installs the new packages, then hands the rest - the code, the\nbuild, the server - to the project's new one.",[1807,4050,4051],{},[147,4052,4053,4056,4058,4059,4061,4062,4065],{},[2779,4054,4055],{},"A running server",[2783,4057],{},"\nA Windows server holds its module while it runs, and the file cannot be\nreplaced then. ",[150,4060,469],{}," changes nothing on the server, says so, and does\nthe rest: stop the server, then run ",[150,4063,4064],{},"npx amxts upgrade --server-only",". Either\nsystem loads the new module on its next start.",[1394,4067,3927],{"id":4068},"the-code",[147,4070,4071,4072,4074,4075,4078],{},"The new core brings the project's code to its API, and lists every line it\nchanged. An import of the core's API by ",[150,4073,3521],{}," becomes one by the\npackage's name, and one of a module package by its place in the build\n(",[150,4076,4077],{},"~\u002Fmodules\u002Fmenu-core",") one by the module's name:",[167,4080,4082],{"className":913,"code":4081,"language":915,"meta":916,"style":173},"import { hostIndex, handled, floatCell, rounded, cellFloat, ret, publicFor, nativeFn, arg, argText, argc, caller, setArg, setArgText, argString, cellsToString, stringToCells, cells, out, text, arrayOf, cell, putCell, noOrigin, hasModule, readText, playerIds, accessOf, paint, print, cmd, cmdWide, setTimeout, sleep, setInterval, clearTimeout, clearInterval, hook, plugin, defineModule, callingPlugin, onPluginStop, createCellArray, destroyCellArray, cellArrayRows, pushCellArrayRow, cellsText, textCells, menuColors, colorTags, showMenu, Handler, WideHandler, Float, CellArray, CellBuffer, TEXT_MAX, Team, AuthType, WeaponName, ItemName, ModuleName, KillOptions, MoveOptions, Client, Player, CommandOptions, CommandInfo, HudOptions, HudEffect, HudLine, FadeDirection, FadeOptions, ShakeOptions, ProgressBarOptions, StatusIconState, Screen, SoundChannel, SoundOptions, Resource, MessageArgs, ClientMessage, PlayerChangeEvent, ServerListenerOptions, CvarChangeEvent, CvarListener, Cvar, Server, server, Game, GameListenerOptions, UseType, ActionOptions, TouchEvent, RoundWinner, EndRoundOptions, game, Variant, VariantName, Flag, Entity, Weapon, WeaponKind, weaponKindOf, RenderMode, RenderFx, MoveType, Solid, TakeDamage, DeadFlag, WaterLevel, Contents, FixAngle, HitGroup, ArmorType, ObserverMode, JoinState, GameMenu, PlayerModel, IgnoredChat, ThrowDirection, BloodColor, MusicState, Target, swapTeam, lang, cvar, TimerHandler, SleepOptions, Call, Ref, PluginInfo, ModuleOptions, ForwardStop, NoArgument, Forward, Storage, EntityFilter, PawnFunction, PawnCall, MenuColor, MenuOptions, MenuContext, MenuItemOptions, Menu, protocolMessageNames, addServerListener, removeServerListener, PluginInitEvent, PluginPauseEvent, PluginUnpauseEvent, ServerChangelevelEvent, PluginCfgEvent, PluginEndEvent, PluginLogEvent, PluginPrecacheEvent, ClientInfochangedEvent, ClientConnectEvent, ClientConnectexEvent, ClientAuthorizedEvent, ClientDisconnectedEvent, ClientRemoveEvent, ClientCommandEvent, ClientPutinserverEvent, InconsistentFileEvent, PluginModulesEvent, OnConfigsExecutedEvent, OnAutoConfigsBufferedEvent, CS_InternalCommandEvent, CS_OnBuyAttemptEvent, CS_OnBuyEvent, ServerFrameEvent, ClientKillEvent, ClientImpulseEvent, ClientCmdStartEvent, PfnThinkEvent, PfnPlaybackeventEvent, PfnKeyvalueEvent, PfnSpawnEvent, ADStopMessage, AllowSpecMessage, AmmoPickupMessage, AmmoXMessage, ArmorTypeMessage, BarTimeMessage, BatteryMessage, BlinkAcctMessage, BombDropMessage, BombPickupMessage, BotVoiceMessage, BuyCloseMessage, ClCorpseMessage, CrosshairMessage, CurWeaponMessage, DamageMessage, DeathMsgMessage, FlashlightMessage, FlashBatMessage, GeigerMessage, HealthMessage, HideWeaponMessage, HostageKMessage, HostagePosMessage, HudTextMessage, InitHUDMessage, ItemPickupMessage, ItemStatusMessage, LocationMessage, MoneyMessage, MOTDMessage, NVGToggleMessage, RadarMessage, ReqStateMessage, ResetHUDMessage, RoundTimeMessage, SayTextMessage, ScenarioMessage, ScoreAttribMessage, ScoreInfoMessage, ScreenFadeMessage, ScreenShakeMessage, SendAudioMessage, ServerNameMessage, SetFOVMessage, ShowMenuMessage, ShowTimerMessage, SpecHealthMessage, SpectatorMessage, StatusIconMessage, StatusTextMessage, StatusValueMessage, TaskTimeMessage, TeamInfoMessage, TeamScoreMessage, TextMsgMessage, TrainMessage, TutorCloseMessage, VGUIMenuMessage, ViewModeMessage, WeaponListMessage, WeapPickupMessage, ServerEventMap, ServerMessageMap, flagList, FlagFamily, FlagStore, EntvarFlags, MemberFlags, FlagList, HideHud, HIDE_HUD, Button, BUTTON, Effect, EFFECT, EntityFlag, ENTITY_FLAG, Damage, DAMAGE, Access, ACCESS, ScoreStatus, SCORE_STATUS, WeaponState, WEAPON_STATE, PhysicsFlag, PHYSICS_FLAG, addGameListener, removeGameListener, HookEvent, HookEntry, RewardReason, ResourceType, TeamChoice, ItemKind, ItemRestriction, BotEvent, RoundEndReason, DeathMessageFlag, KillRarity, PlayerAnimation, VguiMenu, ActivateEvent, ActivateServerEvent, AddFragsEvent, AddItemEvent, AddMoneyEvent, AddMultiDamageEvent, AddResourceEvent, AddTeamScoreEvent, AddToPlayerEvent, AddWeaponEvent, AirAccelerateEvent, AirMoveEvent, ApplyMultiDamageEvent, AttachToPlayerEvent, AutoaimVectorEvent, BalanceTeamsEvent, BecomeBomberEvent, BecomeDeadEvent, BecomeProneEvent, BecomeVipEvent, BestVisibleEnemyEvent, BlindEvent, BlockedEvent, BloodColorEvent, BodyTargetEvent, BounceGibTouchEvent, BuyAmmoEvent, BuyItemEvent, BuyWeaponEvent, CanDeployEvent, CanDropEvent, CanHaveItemEvent, CanHolsterEvent, CanPlayerHearPlayerEvent, CanRespawnEvent, CanShootThroughEvent, CanSpectateEvent, CanSwitchTeamEvent, CanTakeDamageEvent, CenterEvent, ChangeLevelEvent, ChangeModelEvent, ChangeNameEvent, ChangeYawEvent, ChatMessageEvent, CheckMapConditionsEvent, CheckTimeBasedDamageEvent, CheckUserInfoEvent, CheckWaterJumpEvent, CheckWinConditionsEvent, ChildDeathNoticeEvent, ChooseAppearanceEvent, ChooseTeamEvent, ClassifyEvent, ClearMultiDamageEvent, ClientConnectedEvent, ConnectClientEvent, ConsoleMessageEvent, CreateWeaponBoxEvent, DamageDecalEvent, DeathActivityEvent, DeathNoticeEvent, DeathSoundEvent, DefaultDeployEvent, DefaultReloadEvent, DefaultShotgunReloadEvent, DefuseBombEndEvent, DefuseBombStartEvent, DelayEvent, DeployEvent, DisappearEvent, DisconnectClientEvent, DropEvent, DropIdlePlayerEvent, DropPlayerItemEvent, DropShieldEvent, DropWeaponsOnDeathEvent, DuckEvent, DuckMovementEvent, EarPositionEvent, ExplodeBombEvent, ExplodeFlashbangEvent, ExplodeHeGrenadeEvent, ExplodeSmokeGrenadeEvent, ExtractAmmoEvent, ExtractClipAmmoEvent, EyePositionEvent, FadeMonsterEvent, FallDamageEvent, FireBulletsEvent, GameEventEvent, GameThinkEvent, GetForceCameraEvent, GetIntoGameEvent, GetNextBestWeaponEvent, GibMonsterEvent, GibSpawnEvent, GiveAmmoEvent, GiveBombEvent, GiveDefaultItemsEvent, GiveItemEvent, GiveShieldEvent, GunPositionEvent, HasAlienGibsEvent, HasHumanGibsEvent, HasTargetEvent, HealEvent, HintMessageEvent, HolsterEvent, IlluminationEvent, ImpulseEvent, IntermissionEvent, InViewConeEvent, IsAliveEvent, IsBotEvent, IsBspModelEvent, IsInWorldEvent, IsMovingEvent, IsNetClientEvent, IsPlayerEvent, IsSneakingEvent, IsTriggeredEvent, IsUsableEvent, IsWeaponEvent, ItemPostFrameEvent, ItemPreFrameEvent, ItemRestrictedEvent, ItemSlotEvent, ItemUpdateClientDataEvent, JoiningThinkEvent, JumpEvent, JumpMovementEvent, KillEvent, KilledEvent, LadderMoveEvent, LookEvent, MapResetEvent, MaxSpeedEvent, MonsterInitDeadEvent, MoveEvent, NewRoundEvent, NextTargetEvent, ObserverSetModeEvent, ObserverThinkEvent, PainEvent, PainSoundEvent, PlantBombEvent, PlayEmptySoundEvent, PlayerBlindEvent, PlayerDeathThinkEvent, PlayerGotWeaponEvent, PlayerKilledEvent, PlayerSpawnEvent, PlayStepSoundEvent, PointInViewConeEvent, PointVisibleEvent, PostThinkEvent, PrecacheEvent, PrecacheFileEvent, PrecacheModelEvent, PrecacheSoundEvent, PreThinkEvent, PrimaryAmmoIndexEvent, PrimaryAttackEvent, PrintfEvent, RadioEvent, RecoilEvent, ReflectGaussEvent, RelationshipEvent, ReloadEvent, RemoveAllItemsEvent, RemoveGunsEvent, RemoveItemEvent, RemoveSpawnProtectionEvent, ResetEmptySoundEvent, ResetMaxSpeedEvent, ResetSequenceInfoEvent, RespawnEvent, RestartEvent, RetireWeaponEvent, RoundEndEvent, RoundRespawnEvent, RoundStartEvent, SecondaryAmmoIndexEvent, SecondaryAttackEvent, SelectSpawnPointEvent, SendDeathMessageEvent, SendWeaponAnimEvent, ServerCommandEvent, ServerDeactivateEvent, SetAnimationEvent, SetModelEvent, SetObjectCollisionBoxEvent, SetSpawnProtectionEvent, SetToggleStateEvent, ShootEvent, ShootBuckshotEvent, ShouldFadeOnDeathEvent, ShouldSwitchWeaponEvent, ShouldWeaponIdleEvent, ShowMenuEvent, ShowVguiMenuEvent, SpawnEvent, SpawnEquipEvent, SpawnHeadGibEvent, SpawnRandomGibsEvent, SpawnSpotEvent, SpectateNextEvent, StartDeathCamEvent, StartSneakingEvent, StartSoundEvent, StartSpectatingEvent, StopSneakingEvent, SwitchTeamEvent, TakeDamageEvent, TakeDamageImpulseEvent, TeamFullEvent, TeamIdEvent, TeamStackedEvent, ThinkEvent, ThrowFlashbangEvent, ThrowGrenadeEvent, ThrowHeGrenadeEvent, ThrowSmokeGrenadeEvent, ToggleStateEvent, TouchingWeaponEvent, TraceAttackEvent, TraceBleedEvent, TraceLineEvent, UnDuckEvent, UpdateClientDataEvent, UpdateItemInfoEvent, UpdateStatusBarEvent, UseEvent, UseEmptyEvent, UserInfoChangeEvent, VisibleEvent, WaitTillLandEvent, WaterJumpEvent, WeaponIdleEvent, GameEventMap, GameAnswerMap, Vector, EffectRecipients, PointEffectOptions, SegmentEffectOptions, EntityEffectOptions, PlayerEffectOptions, BeamPointsOptions, BeamEntityPointOptions, BeamEntitiesOptions, BeamCircleOptions, BeamFollowOptions, BeamSpriteOptions, LightningOptions, ExplosionOptions, SmokeOptions, ParticleExplosionOptions, ImplosionOptions, SpriteTrailOptions, SpriteOptions, GlowSpriteOptions, StreakSplashOptions, DynamicLightOptions, EntityLightOptions, LineOptions, BoxOptions, LargeFunnelOptions, BloodOptions, FizzOptions, BounceSound, ModelOptions, ExplodeModelOptions, BreakMaterial, BreakModelOptions, SpriteSprayOptions, ArmorRicochetOptions, BubblesOptions, BloodSpriteOptions, ProjectileOptions, SprayOptions, PlayerSpritesOptions, ParticleBurstOptions, FireRise, FireBlend, FireFieldOptions, PlayerAttachmentOptions, effects, request, fetch, useFetch, URL, URLSearchParams, Headers, TlsOptions, RequestInit, Request, ResponseInit, Response, RequestErrorKind, RequestOptions, RequestResult, UseFetchOptions, FetchResult, FetchError } from \"~\u002Ffacade\";\n\u002F\u002F ---cut---\nimport { user_slap } from \"~\u002Fnatives\";            \u002F\u002F before\nimport { user_slap } from \"@amxts\u002Fcore\u002Fnatives\";  \u002F\u002F after\n",[150,4083,4084,4169],{"__ignoreMap":173},[177,4085,4086,4089,4091,4093,4151,4154,4157,4159,4162,4164,4166],{"class":179,"line":180},[177,4087,4088],{"class":930},"import",[177,4090,979],{"class":191},[177,4092,938],{"class":198},[177,4094,4095],{"class":198},[942,4096,4097,4100],{"class":944,"popper-class":945,"theme":916},[177,4098,4099],{},"user_slap",[950,4101,4102],{"v-slot:popper":952},[177,4103,4104,4146],{"class":955,"v-pre":173},[150,4105,4106,4109,4112,4114,4118,4120,4123,4125,4128,4130,4132,4134,4137,4139,4141,4144],{"class":958},[177,4107,4108],{"style":970},"function",[177,4110,4111],{"style":1129}," user_slap",[177,4113,1133],{"style":978},[177,4115,4117],{"style":4116},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic","index",[177,4119,1113],{"style":978},[177,4121,4122],{"style":974}," number",[177,4124,1156],{"style":978},[177,4126,4127],{"style":4116}," power",[177,4129,1113],{"style":978},[177,4131,4122],{"style":974},[177,4133,1156],{"style":978},[177,4135,4136],{"style":4116}," rnddir",[177,4138,988],{"style":978},[177,4140,4122],{"style":974},[177,4142,4143],{"style":978},"):",[177,4145,4122],{"style":974},[1105,4147,4148],{"class":1107},[147,4149,4150],{},"user_slap(any:index, any:power, any:rnddir)",[177,4152,4153],{"class":191}," }",[177,4155,4156],{"class":930}," from",[177,4158,1045],{"class":191},[177,4160,4161],{"class":187},"~\u002Fnatives",[177,4163,1051],{"class":191},[177,4165,1004],{"class":191},[177,4167,4168],{"class":923},"            \u002F\u002F before\n",[177,4170,4171,4173,4175,4177,4225,4227,4229,4231,4234,4236,4238],{"class":179,"line":927},[177,4172,4088],{"class":930},[177,4174,979],{"class":191},[177,4176,938],{"class":198},[177,4178,4179],{"class":198},[942,4180,4181,4183],{"class":944,"popper-class":945,"theme":916},[177,4182,4099],{},[950,4184,4185],{"v-slot:popper":952},[177,4186,4187,4221],{"class":955,"v-pre":173},[150,4188,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215,4217,4219],{"class":958},[177,4190,4108],{"style":970},[177,4192,4111],{"style":1129},[177,4194,1133],{"style":978},[177,4196,4117],{"style":4116},[177,4198,1113],{"style":978},[177,4200,4122],{"style":974},[177,4202,1156],{"style":978},[177,4204,4127],{"style":4116},[177,4206,1113],{"style":978},[177,4208,4122],{"style":974},[177,4210,1156],{"style":978},[177,4212,4136],{"style":4116},[177,4214,988],{"style":978},[177,4216,4122],{"style":974},[177,4218,4143],{"style":978},[177,4220,4122],{"style":974},[1105,4222,4223],{"class":1107},[147,4224,4150],{},[177,4226,4153],{"class":191},[177,4228,4156],{"class":930},[177,4230,1045],{"class":191},[177,4232,4233],{"class":187},"@amxts\u002Fcore\u002Fnatives",[177,4235,1051],{"class":191},[177,4237,1004],{"class":191},[177,4239,4240],{"class":923},"  \u002F\u002F after\n",[147,4242,4243,4244,4247,4248,4251,4252,4254,4255,4257,4258,566,4260,2236],{},"It reads the code with the TypeScript parser: imports, exports, ",[150,4245,4246],{},"import()","\nand ",[150,4249,4250],{},"declare module"," change; a string or a comment that only looks like an\nimport does not. Your own files under ",[150,4253,3521],{}," stay as they are. A second run\nchanges nothing. It goes through every ",[150,4256,2795],{}," file of the project - the\nplugins, the tests, a module's sources - but not ",[150,4259,272],{},[150,4261,379],{},[147,4263,4264,4265,4268,4269,4272,4273,4276,4277,757,4280,4283,4284,3901,4287,4289,4290,4293],{},"A command's handler gets one object\n(",[340,4266,313],{"href":4267},"\u002Fdocs\u002Fcore\u002Fplugin#commands","): ",[150,4270,4271],{},"(player) =>"," becomes\n",[150,4274,4275],{},"({ player }) =>",", and a function passed by its name and taking the player\nis called from ",[150,4278,4279],{},"({ player }) => name(player)",[150,4281,4282],{},"(player, args) =>"," that\nnever reads ",[150,4285,4286],{},"args",[150,4288,4275],{}," too. A handler that reads the\nwords after the command's name is listed, with its line, to be written by\nhand: the words go into the usage, ",[150,4291,4292],{},"\"\u002Fgive \u003Camount>\"",", and the handler takes\nthem by name.",[147,4295,4296,4297,4268,4301,4272,4304,4307,4308,757,4311,4247,4313,4316,4317,4319,4320,4323,4324,4327,4328,3922],{},"menu-core's code is brought to the menu's context\n(",[340,4298,4300],{"href":4299},"\u002Fmodules\u002Fmenu-core","menus",[150,4302,4303],{},"addItem(\"text\", options)",[150,4305,4306],{},"addItem({ title: \"text\", ... })",", and so does ",[150,4309,4310],{},"addFixedItem",[150,4312,4271],{},[150,4314,4315],{},"(player, target) =>"," become ",[150,4318,4275],{}," and\n",[150,4321,4322],{},"({ player, target }) =>"," - in an item, a menu's options, a filter, a list\nsource and what is registered by name. A function passed by its name and\ndeclared in the file is called from an arrow that hands it what it took.\nListed to change by hand: a function declared in another file, a menu's name\nread as text, a target given as a number, and ",[150,4325,4326],{},"menus.runActions",", which is a\nmenu's method (",[150,4329,4330],{},"menu.runActions",[147,4332,4333,4334,4272,4337,4343,4344,4347,4348,3298,4351,4354,4355,4358,4359,4362,4363,4365,4366,3901,4369,869,4372,4375,869,4378,938,4381,869,4384,4387,4390,4391,938,4394,4397,4398,4401,4402,869,4405,2709,4408,4411,4412,4415,4416,869,4418,1269,4421,4424,4425,4427,4428,1269,4431,4434,4435,4438,4439,4272,4442,2236],{},"The names follow the API: ",[150,4335,4336],{},"Player.all()",[340,4338,4340],{"href":4339},"\u002Fdocs\u002Fgame\u002Fplayers#listing-players",[150,4341,4342],{},"server.players",", and its options\na ",[150,4345,4346],{},"filter"," - ",[150,4349,4350],{},"Player.all({ alive: true, team: \"CT\" })",[150,4352,4353],{},"server.players.filter(player => player.isAlive && player.team === \"CT\")",";\nwhere the code has a ",[150,4356,4357],{},"player"," already, as a command's handler does, the\nfilter names its player ",[150,4360,4361],{},"other"," (or ",[150,4364,147],{},"), so it hides none. A\nfield, a method or a game event named in the engine's words gets the\nplayer's: ",[150,4367,4368],{},"player.account",[150,4370,4371],{},"player.money",[150,4373,4374],{},"player.authid",[150,4376,4377],{},"player.steamId",[150,4379,4380],{},"game.numCtWins",[150,4382,4383],{},"game.ctWins",[150,4385,4386],{},"weapon.inReload",[150,4388,4389],{},"weapon.isReloading",", the event ",[150,4392,4393],{},"restartRound",[150,4395,4396],{},"newRound",", and an event's\nclass follows its name. A value is\ntaken for a player, a weapon or the game where the file says it is one -\n",[150,4399,4400],{},"event.player",", a ",[150,4403,4404],{},"Player",[150,4406,4407],{},"Client",[150,4409,4410],{},"Weapon"," annotation, ",[150,4413,4414],{},"{ player }"," from an\nevent or a command, the first parameter of a command's handler, an element of ",[150,4417,4342],{},[150,4419,4420],{},"player.activeItem",[150,4422,4423],{},"game",". Listed to change by hand: an old name on any other value, options that\nare not written out, and a field or an event the API does not have, which the\nnatives in ",[150,4426,4233],{}," still reach (",[150,4429,4430],{},"get_member",[150,4432,4433],{},"RegisterHookChain","). A test's player joins with ",[150,4436,4437],{},"steamId"," too:\n",[150,4440,4441],{},"server.join(\"Alice\", { authid })",[150,4443,4444],{},"server.join(\"Alice\", { steamId: authid })",[147,4446,4447,4448,4452,4453,4272,4456,869,4459,938,4462,1269,4465,938,4468,4471,4472,4475,4476,4478,4479,4272,4482,4485,4486,1269,4489,847,4492,4495,4496,847,4499,4502,4503,3901,4506,869,4509,4512,869,4515,938,4518,869,4521,4524,4527,4528,3901,4531,4534,4535,4247,4538,4541,4542,869,4545,1269,4548,566,4551,2236],{},"A server event is named in the author's words\n(",[340,4449,4451],{"href":4450},"\u002Fdocs\u002Fcore\u002Fplugin#server-events","server events","):\n",[150,4454,4455],{},"server.addEventListener(\"putinserver\", ...)",[150,4457,4458],{},"server.addEventListener(\"putInServer\", ...)",[150,4460,4461],{},"\"cfg\"",[150,4463,4464],{},"\"pluginsLoaded\"",[150,4466,4467],{},"\"kill\"",[150,4469,4470],{},"\"suicide\"",", and a forward's own name (",[150,4473,4474],{},"\"client_putinserver\"",") the\nevent's. One that is a game event is heard through ",[150,4477,4423],{},":\n",[150,4480,4481],{},"server.addEventListener(\"PreThink\", ...)",[150,4483,4484],{},"game.addEventListener(\"preThink\", ...)",", and so do ",[150,4487,4488],{},"\"PostThink\"",[150,4490,4491],{},"\"pfnTouch\"",[150,4493,4494],{},"\"touch\"",") and ",[150,4497,4498],{},"\"infochanged\"",[150,4500,4501],{},"\"userInfoChange\"","). A field\nof an event named after its Pawn parameter gets the author's word where the\nfile says which event it is - in a listener, or a parameter with the event's\nclass: ",[150,4504,4505],{},"event.weapon_entity",[150,4507,4508],{},"event.weapon",[150,4510,4511],{},"event.authid",[150,4513,4514],{},"event.steamId",[150,4516,4517],{},"event.tracehandle",[150,4519,4520],{},"event.trace",[150,4522,4523],{},"event.infobuffer",[150,4525,4526],{},"event.info",", and ",[150,4529,4530],{},"({ dir })",[150,4532,4533],{},"({ direction: dir })",". Listed to change by hand: cstrike's ",[150,4536,4537],{},"\"CS_OnBuy\"",[150,4539,4540],{},"\"CS_OnBuyAttempt\"",", which are the game events ",[150,4543,4544],{},"buyWeapon",[150,4546,4547],{},"buyItem",[150,4549,4550],{},"buyAmmo",[150,4552,4553],{},"itemRestricted",[147,4555,4556,4557,4452,4560,4272,4563,4527,4566,4569,4572],{},"A game message is heard through its own method, by its name in the player's\nwords (",[340,4558,4559],{"href":89},"messages",[150,4561,4562],{},"server.addEventListener(\"message:DeathMsg\", ...)",[150,4564,4565],{},"server.addMessageListener(\"death\", ...)",[150,4567,4568],{},"removeEventListener",[150,4570,4571],{},"removeMessageListener",". A message name the game does not have is listed.",[147,4574,4575,4576,4452,4579,3901,4582,1269,4585,938,4588,4591,4592,4247,4595,4598,4599,869,4602,2709,4605,4608,4609,4612,4613,4615,4616,4401,4619,4622,4623,1269,4626,4629],{},"A flag's name is lowerCamelCase (",[340,4577,4578],{"href":81},"flags",[150,4580,4581],{},"player.buttons.includes(\"Jump\")",[150,4583,4584],{},"player.buttons.includes(\"jump\")",[150,4586,4587],{},"{ access: \"Kick\" }",[150,4589,4590],{},"{ access: \"kick\" }",". A string is taken for a flag\nwhere the file says it is one: assigned to a flag property or the ",[150,4593,4594],{},"buttons",[150,4596,4597],{},"access"," options, given to ",[150,4600,4601],{},"includes",[150,4603,4604],{},"push",[150,4606,4607],{},"concat"," of one or to\n",[150,4610,4611],{},"player.screen.hideHud",", compared with an element of one - in its ",[150,4614,4346],{},",\na ",[150,4617,4618],{},"for of",[150,4620,4621],{},"switch"," - or held by a name of a flag type (",[150,4624,4625],{},"Button",[150,4627,4628],{},"HideHud[]","). A name given where flags go is followed to the list it was\ndeclared with; one the file does not say - a parameter without a type, an\nimport, a function's result - is listed.",[311,4631,482],{"id":482},[163,4633,4634,4648,4661,4674],{"sync":165},[167,4635,4637],{"className":169,"code":4636,"filename":171,"language":172,"meta":173,"style":173},"npx amxts info\n",[150,4638,4639],{"__ignoreMap":173},[177,4640,4641,4643,4645],{"class":179,"line":180},[177,4642,184],{"class":183},[177,4644,188],{"class":187},[177,4646,4647],{"class":187}," info\n",[167,4649,4651],{"className":169,"code":4650,"filename":206,"language":172,"meta":173,"style":173},"pnpm amxts info\n",[150,4652,4653],{"__ignoreMap":173},[177,4654,4655,4657,4659],{"class":179,"line":180},[177,4656,206],{"class":183},[177,4658,188],{"class":187},[177,4660,4647],{"class":187},[167,4662,4664],{"className":169,"code":4663,"filename":226,"language":172,"meta":173,"style":173},"yarn amxts info\n",[150,4665,4666],{"__ignoreMap":173},[177,4667,4668,4670,4672],{"class":179,"line":180},[177,4669,226],{"class":183},[177,4671,188],{"class":187},[177,4673,4647],{"class":187},[167,4675,4677],{"className":169,"code":4676,"filename":246,"language":172,"meta":173,"style":173},"bunx amxts info\n",[150,4678,4679],{"__ignoreMap":173},[177,4680,4681,4683,4685],{"class":179,"line":180},[177,4682,253],{"class":183},[177,4684,188],{"class":187},[177,4686,4647],{"class":187},[147,4688,4689,4690,4692],{},"What a bug report needs: the operating system, Node, Bun, the package\nmanager, the command, the core and its compilers, the project's modules,\n",[150,4691,812],{}," and the system the plugins are compiled for.",[167,4694,4697],{"className":4695,"code":4696,"language":300},[298],"amxts info - paste this into a bug report\n\n  Operating system  Windows 10.0.19045 (x64)\n  Node.js           24.18.0\n  Bun               1.4.2\n  Package manager   npm 11.16.0\n  @amxts\u002Fcli        0.2.0\n  @amxts\u002Fcore       0.2.0\n  AssemblyScript    0.28.20 + amxts patch\n  WAMR              2.4.5 + amxts patch, wamrc found\n  Project           my-server\n  Modules           @amxts\u002Fmenu-core 0.2.0\n  AMXTS_SERVER      D:\u002Fhlds\u002Fcstrike\u002Faddons\u002Famxts\n  Server system     Windows (hlds.exe)\n  AMXTS_DOCS_LANG   en\n",[150,4698,4696],{"__ignoreMap":173},[4700,4701,4702],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":173,"searchDepth":927,"depth":1208,"links":4704},[4705,4706,4710,4711,4714,4715,4716,4717,4718,4719,4722],{"id":313,"depth":927,"text":314},{"id":283,"depth":927,"text":283,"children":4707},[4708,4709],{"id":1396,"depth":1208,"text":1397},{"id":1835,"depth":1208,"text":1836},{"id":360,"depth":927,"text":360},{"id":373,"depth":927,"text":373,"children":4712},[4713],{"id":2692,"depth":1208,"text":2693},{"id":389,"depth":927,"text":389},{"id":406,"depth":927,"text":406},{"id":419,"depth":927,"text":419},{"id":439,"depth":927,"text":439},{"id":452,"depth":927,"text":452},{"id":469,"depth":927,"text":3574,"children":4720,"since":3578},[4721],{"id":4068,"depth":1208,"text":3927},{"id":482,"depth":927,"text":482},"amxts is the command a project runs: it creates projects and modules, adds\nmodules, builds, deploys, type-checks and tests. It is the package\n@amxts\u002Fcli, which @amxts\u002Fcore depends on, so every project has it and runs\nit through its package manager:","md",{},{"title":19},{"title":142,"description":4723},"tYttVhnlQA-I5IJDqtmqkMOLJ2cRknPoGioQWxPRDcE",[4730,4732],{"title":15,"path":16,"stem":17,"description":4731,"children":-1},"amxts runs Counter-Strike 1.6 plugins written in TypeScript inside AMX Mod X,\nnext to your Pawn plugins. A plugin is an ordinary .ts file: players are\nobjects, events have types, and the editor knows every field the game has.\nThis page shows a project, a first plugin, how to reload it while you work,\nand what is different from the TypeScript you already know.",{"title":23,"path":24,"stem":25,"description":4733,"children":-1},"A game server runs amxts plugins with two things: the amxts_amxx module\nand the addons\u002Famxts folder with the plugins. This page puts them on a\nserver of your own. The other way is the server in Docker,\nwhich has all of it inside.",null,1791273256622]