1 line
30 KiB
JSON

[{"data":1,"prerenderedAt":1325},["ShallowReactive",2],{"navigation_docs":3,"-server-modules-task":145,"-server-modules-task-surround":1320},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":57,"body":147,"description":157,"extension":1315,"links":1316,"meta":1317,"navigation":609,"path":58,"seo":1318,"stem":59,"__hash__":1319},"docs\u002F3.server-modules\u002F11.task.md",{"type":148,"value":149,"toc":1297},"minimark",[150,154,158,166,169,203,208,211,238,241,312,316,567,571,635,639,671,682,686,732,737,741,769,776,780,783,820,823,846,849,853,860,863,880,883,901,905,914,927,936,940,943,946,1006,1011,1015,1023,1132,1136,1141,1175,1179,1185,1189,1196,1224,1231,1245,1249,1264,1268,1293],[151,152,57],"h1",{"id":153},"task-usage-guide",[155,156,157],"p",{},"The task module stores transient mission task metadata for active server or\nmission lifecycle workflows. SQF still owns Arma-only runtime state such as\nobjects and participants.",[155,159,160,161,165],{},"The server addon at ",[162,163,164],"code",{},"arma\u002Fserver\u002Faddons\u002Ftask"," also owns task execution:\ncreating BIS tasks, registering task entities, tracking participants, binding\ntask ownership, applying player\u002Forg rewards, and clearing task state when a\ntask completes.",[155,167,168],{},"Runtime dependencies:",[170,171,172,178,183,188,193,198],"ul",{},[173,174,175],"li",{},[162,176,177],{},"forge_server_extension",[173,179,180],{},[162,181,182],{},"forge_server_common",[173,184,185],{},[162,186,187],{},"forge_server_actor",[173,189,190],{},[162,191,192],{},"forge_server_bank",[173,194,195],{},[162,196,197],{},"forge_server_org",[173,199,200],{},[162,201,202],{},"forge_client_notifications",[204,205,207],"h2",{"id":206},"data-model","Data Model",[155,209,210],{},"Catalog entries are flexible JSON objects. The service normalizes these fields\nwhen a catalog entry is inserted or ownership changes:",[170,212,213,218,223,228,233],{},[173,214,215],{},[162,216,217],{},"taskId",[173,219,220],{},[162,221,222],{},"taskID",[173,224,225],{},[162,226,227],{},"accepted",[173,229,230],{},[162,231,232],{},"requesterUid",[173,234,235],{},[162,236,237],{},"orgID",[155,239,240],{},"Ownership context:",[242,243,248],"pre",{"className":244,"code":245,"language":246,"meta":247,"style":247},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"requesterUid\": \"76561198000000000\",\n \"orgId\": \"default\"\n}\n","json","",[162,249,250,259,286,306],{"__ignoreMap":247},[251,252,255],"span",{"class":253,"line":254},"line",1,[251,256,258],{"class":257},"sMK4o","{\n",[251,260,262,265,268,271,274,277,281,283],{"class":253,"line":261},2,[251,263,264],{"class":257}," \"",[251,266,232],{"class":267},"spNyl",[251,269,270],{"class":257},"\"",[251,272,273],{"class":257},":",[251,275,276],{"class":257}," \"",[251,278,280],{"class":279},"sfazB","76561198000000000",[251,282,270],{"class":257},[251,284,285],{"class":257},",\n",[251,287,289,291,294,296,298,300,303],{"class":253,"line":288},3,[251,290,264],{"class":257},[251,292,293],{"class":267},"orgId",[251,295,270],{"class":257},[251,297,273],{"class":257},[251,299,276],{"class":257},[251,301,302],{"class":279},"default",[251,304,305],{"class":257},"\"\n",[251,307,309],{"class":253,"line":308},4,[251,310,311],{"class":257},"}\n",[204,313,315],{"id":314},"commands","Commands",[317,318,319,335],"table",{},[320,321,322],"thead",{},[323,324,325,329,332],"tr",{},[326,327,328],"th",{},"Command",[326,330,331],{},"Arguments",[326,333,334],{},"Returns",[336,337,338,355,367,385,403,418,435,448,463,477,495,509,524,538,552],"tbody",{},[323,339,340,346,349],{},[341,342,343],"td",{},[162,344,345],{},"task:reset",[341,347,348],{},"none",[341,350,351,354],{},[162,352,353],{},"true",".",[323,356,357,362,364],{},[341,358,359],{},[162,360,361],{},"task:catalog:active",[341,363,348],{},[341,365,366],{},"Active catalog entry array JSON.",[323,368,369,374,379],{},[341,370,371],{},[162,372,373],{},"task:catalog:get",[341,375,376],{},[162,377,378],{},"task_id",[341,380,381,382,354],{},"Catalog entry JSON or ",[162,383,384],{},"null",[323,386,387,392,400],{},[341,388,389],{},[162,390,391],{},"task:catalog:upsert",[341,393,394,396,397],{},[162,395,378],{},", ",[162,398,399],{},"entry_json",[341,401,402],{},"Stored catalog entry JSON.",[323,404,405,410,414],{},[341,406,407],{},[162,408,409],{},"task:catalog:delete",[341,411,412],{},[162,413,378],{},[341,415,416,354],{},[162,417,353],{},[323,419,420,425,432],{},[341,421,422],{},[162,423,424],{},"task:ownership:bind",[341,426,427,396,429],{},[162,428,378],{},[162,430,431],{},"ownership_json",[341,433,434],{},"Ownership mutation result JSON.",[323,436,437,442,446],{},[341,438,439],{},[162,440,441],{},"task:ownership:release",[341,443,444],{},[162,445,378],{},[341,447,434],{},[323,449,450,455,461],{},[341,451,452],{},[162,453,454],{},"task:ownership:accept",[341,456,457,396,459],{},[162,458,378],{},[162,460,431],{},[341,462,434],{},[323,464,465,470,474],{},[341,466,467],{},[162,468,469],{},"task:ownership:reward_context",[341,471,472],{},[162,473,378],{},[341,475,476],{},"Reward context JSON.",[323,478,479,484,491],{},[341,480,481],{},[162,482,483],{},"task:status:set",[341,485,486,396,488],{},[162,487,378],{},[162,489,490],{},"status",[341,492,493,354],{},[162,494,353],{},[323,496,497,502,506],{},[341,498,499],{},[162,500,501],{},"task:status:get",[341,503,504],{},[162,505,378],{},[341,507,508],{},"Status string JSON.",[323,510,511,516,520],{},[341,512,513],{},[162,514,515],{},"task:status:clear",[341,517,518],{},[162,519,378],{},[341,521,522,354],{},[162,523,353],{},[323,525,526,531,535],{},[341,527,528],{},[162,529,530],{},"task:defuse:increment",[341,532,533],{},[162,534,378],{},[341,536,537],{},"New counter value JSON.",[323,539,540,545,549],{},[341,541,542],{},[162,543,544],{},"task:defuse:get",[341,546,547],{},[162,548,378],{},[341,550,551],{},"Counter value JSON.",[323,553,554,559,563],{},[341,555,556],{},[162,557,558],{},"task:clear",[341,560,561],{},[162,562,378],{},[341,564,565,354],{},[162,566,353],{},[204,568,570],{"id":569},"upsert-a-catalog-entry","Upsert a Catalog Entry",[242,572,576],{"className":573,"code":574,"language":575,"meta":247,"style":247},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _entry = createHashMapFromArray [\n [\"title\", \"Destroy Cache\"],\n [\"description\", \"Destroy the enemy supply cache.\"],\n [\"reward\", 1500]\n];\n\nprivate _result = \"forge_server\" callExtension [\"task:catalog:upsert\", [\n \"task-cache-1\",\n toJSON _entry\n]];\n","sqf",[162,577,578,583,588,593,598,604,611,617,623,629],{"__ignoreMap":247},[251,579,580],{"class":253,"line":254},[251,581,582],{},"private _entry = createHashMapFromArray [\n",[251,584,585],{"class":253,"line":261},[251,586,587],{}," [\"title\", \"Destroy Cache\"],\n",[251,589,590],{"class":253,"line":288},[251,591,592],{}," [\"description\", \"Destroy the enemy supply cache.\"],\n",[251,594,595],{"class":253,"line":308},[251,596,597],{}," [\"reward\", 1500]\n",[251,599,601],{"class":253,"line":600},5,[251,602,603],{},"];\n",[251,605,607],{"class":253,"line":606},6,[251,608,610],{"emptyLinePlaceholder":609},true,"\n",[251,612,614],{"class":253,"line":613},7,[251,615,616],{},"private _result = \"forge_server\" callExtension [\"task:catalog:upsert\", [\n",[251,618,620],{"class":253,"line":619},8,[251,621,622],{}," \"task-cache-1\",\n",[251,624,626],{"class":253,"line":625},9,[251,627,628],{}," toJSON _entry\n",[251,630,632],{"class":253,"line":631},10,[251,633,634],{},"]];\n",[204,636,638],{"id":637},"mark-a-task-active","Mark a Task Active",[242,640,642],{"className":573,"code":641,"language":575,"meta":247,"style":247},"\"forge_server\" callExtension [\"task:status:set\", [\n \"task-cache-1\",\n \"active\"\n]];\n\nprivate _active = \"forge_server\" callExtension [\"task:catalog:active\", []];\n",[162,643,644,649,653,658,662,666],{"__ignoreMap":247},[251,645,646],{"class":253,"line":254},[251,647,648],{},"\"forge_server\" callExtension [\"task:status:set\", [\n",[251,650,651],{"class":253,"line":261},[251,652,622],{},[251,654,655],{"class":253,"line":288},[251,656,657],{}," \"active\"\n",[251,659,660],{"class":253,"line":308},[251,661,634],{},[251,663,664],{"class":253,"line":600},[251,665,610],{"emptyLinePlaceholder":609},[251,667,668],{"class":253,"line":606},[251,669,670],{},"private _active = \"forge_server\" callExtension [\"task:catalog:active\", []];\n",[155,672,673,674,677,678,681],{},"Completed statuses ",[162,675,676],{},"succeeded"," and ",[162,679,680],{},"failed"," are also stored as completed status\nfallbacks. Clearing status removes active and completed state.",[204,683,685],{"id":684},"accept-a-task","Accept a Task",[242,687,689],{"className":573,"code":688,"language":575,"meta":247,"style":247},"private _ownership = createHashMapFromArray [\n [\"requesterUid\", getPlayerUID player],\n [\"orgId\", \"default\"]\n];\n\nprivate _result = \"forge_server\" callExtension [\"task:ownership:accept\", [\n \"task-cache-1\",\n toJSON _ownership\n]];\n",[162,690,691,696,701,706,710,714,719,723,728],{"__ignoreMap":247},[251,692,693],{"class":253,"line":254},[251,694,695],{},"private _ownership = createHashMapFromArray [\n",[251,697,698],{"class":253,"line":261},[251,699,700],{}," [\"requesterUid\", getPlayerUID player],\n",[251,702,703],{"class":253,"line":288},[251,704,705],{}," [\"orgId\", \"default\"]\n",[251,707,708],{"class":253,"line":308},[251,709,603],{},[251,711,712],{"class":253,"line":600},[251,713,610],{"emptyLinePlaceholder":609},[251,715,716],{"class":253,"line":606},[251,717,718],{},"private _result = \"forge_server\" callExtension [\"task:ownership:accept\", [\n",[251,720,721],{"class":253,"line":613},[251,722,622],{},[251,724,725],{"class":253,"line":619},[251,726,727],{}," toJSON _ownership\n",[251,729,730],{"class":253,"line":625},[251,731,634],{},[155,733,734,736],{},[162,735,454],{}," fails if the task is not active or another requester\nalready accepted it.",[204,738,740],{"id":739},"rewards","Rewards",[242,742,744],{"className":573,"code":743,"language":575,"meta":247,"style":247},"private _result = \"forge_server\" callExtension [\"task:ownership:reward_context\", [\n \"task-cache-1\"\n]];\n\nprivate _context = fromJSON (_result select 0);\n",[162,745,746,751,756,760,764],{"__ignoreMap":247},[251,747,748],{"class":253,"line":254},[251,749,750],{},"private _result = \"forge_server\" callExtension [\"task:ownership:reward_context\", [\n",[251,752,753],{"class":253,"line":261},[251,754,755],{}," \"task-cache-1\"\n",[251,757,758],{"class":253,"line":288},[251,759,634],{},[251,761,762],{"class":253,"line":308},[251,763,610],{"emptyLinePlaceholder":609},[251,765,766],{"class":253,"line":600},[251,767,768],{},"private _context = fromJSON (_result select 0);\n",[155,770,771,772,677,774,354],{},"The reward context contains ",[162,773,232],{},[162,775,293],{},[204,777,779],{"id":778},"server-task-flows","Server Task Flows",[155,781,782],{},"The task addon provides these server-owned task flows:",[170,784,785,790,795,800,805,810,815],{},[173,786,787],{},[162,788,789],{},"attack",[173,791,792],{},[162,793,794],{},"defend",[173,796,797],{},[162,798,799],{},"defuse",[173,801,802],{},[162,803,804],{},"delivery",[173,806,807],{},[162,808,809],{},"destroy",[173,811,812],{},[162,813,814],{},"hostage",[173,816,817],{},[162,818,819],{},"hvt",[155,821,822],{},"Mission designers can create tasks in four ways:",[170,824,825,828,834,840],{},[173,826,827],{},"Eden modules for editor-authored tasks.",[173,829,830,833],{},[162,831,832],{},"forge_server_task_fnc_startTask"," for script-authored tasks.",[173,835,836,839],{},[162,837,838],{},"forge_server_task_fnc_handler"," for pre-registered entities with reputation\ngating and ownership binding. This path expects the BIS task and catalog\nentry to already exist if map-task and CAD visibility are required.",[173,841,842,843,845],{},"Direct task function calls for server-owned or mission-authored flows that\nintentionally fall back to the ",[162,844,302],{}," org. This path expects the BIS task\nto already exist if map-task visibility is required.",[155,847,848],{},"The dynamic mission manager can also generate attack tasks from config. That is\nsystem-generated content rather than a hand-authored task creation path.",[204,850,852],{"id":851},"cad-compatibility","CAD Compatibility",[155,854,855,856,859],{},"CAD hydrates assignable tasks from ",[162,857,858],{},"TaskStore.getActiveTaskCatalog",". A task must\nhave a catalog entry and active task status before CAD can show and assign it.",[155,861,862],{},"CAD-compatible creation paths:",[170,864,865,870,875],{},[173,866,867,868,354],{},"Eden modules: compatible because they delegate to\n",[162,869,832],{},[173,871,872,874],{},[162,873,832],{},": compatible because it registers the\ncatalog entry, creates the BIS task, and dispatches through the handler.",[173,876,877,878,354],{},"Dynamic mission manager attack tasks: compatible because the mission manager\nuses ",[162,879,832],{},[155,881,882],{},"Limited or incompatible paths:",[170,884,885,890],{},[173,886,887,889],{},[162,888,838],{},": only compatible if a catalog entry was\nalready registered elsewhere. The handler sets active status and ownership,\nbut it does not create the BIS task shown in the map task tab or upsert the\ncatalog entry.",[173,891,892,893,896,897,900],{},"Direct task function calls: not CAD-compatible by default. They bypass\n",[162,894,895],{},"startTask"," and usually do not register the task catalog entry or active\nstatus that CAD hydrates from. They also only call ",[162,898,899],{},"BIS_fnc_taskSetState"," at\ncompletion\u002Ffailure; they do not create the BIS task first.",[204,902,904],{"id":903},"bis-map-task-prerequisite","BIS Map Task Prerequisite",[155,906,907,908,910,911,354],{},"Only the Eden task modules and ",[162,909,832],{}," create the BIS\ntask automatically through ",[162,912,913],{},"BIS_fnc_taskCreate",[155,915,916,917,919,920,923,924,926],{},"If a mission uses ",[162,918,838],{}," directly or calls a task flow\nfunction such as ",[162,921,922],{},"forge_server_task_fnc_attack",", the mission must create a BIS\ntask with the same task ID before the Forge task completes. Otherwise the\nsuccess\u002Ffailure ",[162,925,899],{}," call has no visible map task to update.",[155,928,929,930,932,933,935],{},"That prerequisite can be satisfied with a vanilla Eden task creation module or\na scripted ",[162,931,913],{}," call. ",[162,934,832],{}," is the\npreferred Forge path because it handles BIS task creation, Forge catalog\nregistration, entity registration, and handler dispatch together.",[204,937,939],{"id":938},"eden-modules","Eden Modules",[155,941,942],{},"Eden task modules are the normal designer-facing path. Place the module,\nconfigure its attributes, and sync it to the relevant entities or grouping\nmodules.",[155,944,945],{},"Available task modules:",[170,947,948,954,960,973,982,994,1000],{},[173,949,950,953],{},[162,951,952],{},"FORGE_Module_Attack",": sync directly to target units or vehicles.",[173,955,956,959],{},[162,957,958],{},"FORGE_Module_Destroy",": sync directly to objects, vehicles, or units.",[173,961,962,965,966,969,970,354],{},[162,963,964],{},"FORGE_Module_Defuse",": sync to ",[162,967,968],{},"FORGE_Module_Explosives"," and optionally\n",[162,971,972],{},"FORGE_Module_Protected",[173,974,975,965,978,981],{},[162,976,977],{},"FORGE_Module_Delivery",[162,979,980],{},"FORGE_Module_Cargo","; the cargo module syncs\nto cargo objects.",[173,983,984,965,987,990,991,354],{},[162,985,986],{},"FORGE_Module_Hostage",[162,988,989],{},"FORGE_Module_Hostages"," and\n",[162,992,993],{},"FORGE_Module_Shooters",[173,995,996,999],{},[162,997,998],{},"FORGE_Module_HVT",": sync directly to HVT units.",[173,1001,1002,1005],{},[162,1003,1004],{},"FORGE_Module_Defend",": configure the defense marker and wave settings.",[155,1007,1008,1009,354],{},"These modules delegate to ",[162,1010,832],{},[204,1012,1014],{"id":1013},"scripted-start-task","Scripted Start Task",[155,1016,1017,1018,1020,1021,354],{},"Use ",[162,1019,832],{}," when creating tasks from modules,\nmission scripts, or generated mission-manager content. It registers task\nentities, creates the BIS task, stores the catalog entry, then dispatches\nthrough ",[162,1022,838],{},[242,1024,1026],{"className":573,"code":1025,"language":575,"meta":247,"style":247},"[\n \"attack\",\n \"compound_attack_01\",\n getPosATL leader1,\n \"Attack: East Compound\",\n \"Eliminate all hostile forces.\",\n createHashMapFromArray [[\"targets\", [unit1, unit2, unit3]]],\n createHashMapFromArray [\n [\"limitFail\", 0],\n [\"limitSuccess\", 3],\n [\"funds\", 50000],\n [\"ratingFail\", -10],\n [\"ratingSuccess\", 20],\n [\"timeLimit\", 900]\n ],\n 0,\n getPlayerUID player,\n \"script\"\n] call forge_server_task_fnc_startTask;\n",[162,1027,1028,1033,1038,1043,1048,1053,1058,1063,1068,1073,1078,1084,1090,1096,1102,1108,1114,1120,1126],{"__ignoreMap":247},[251,1029,1030],{"class":253,"line":254},[251,1031,1032],{},"[\n",[251,1034,1035],{"class":253,"line":261},[251,1036,1037],{}," \"attack\",\n",[251,1039,1040],{"class":253,"line":288},[251,1041,1042],{}," \"compound_attack_01\",\n",[251,1044,1045],{"class":253,"line":308},[251,1046,1047],{}," getPosATL leader1,\n",[251,1049,1050],{"class":253,"line":600},[251,1051,1052],{}," \"Attack: East Compound\",\n",[251,1054,1055],{"class":253,"line":606},[251,1056,1057],{}," \"Eliminate all hostile forces.\",\n",[251,1059,1060],{"class":253,"line":613},[251,1061,1062],{}," createHashMapFromArray [[\"targets\", [unit1, unit2, unit3]]],\n",[251,1064,1065],{"class":253,"line":619},[251,1066,1067],{}," createHashMapFromArray [\n",[251,1069,1070],{"class":253,"line":625},[251,1071,1072],{}," [\"limitFail\", 0],\n",[251,1074,1075],{"class":253,"line":631},[251,1076,1077],{}," [\"limitSuccess\", 3],\n",[251,1079,1081],{"class":253,"line":1080},11,[251,1082,1083],{}," [\"funds\", 50000],\n",[251,1085,1087],{"class":253,"line":1086},12,[251,1088,1089],{}," [\"ratingFail\", -10],\n",[251,1091,1093],{"class":253,"line":1092},13,[251,1094,1095],{}," [\"ratingSuccess\", 20],\n",[251,1097,1099],{"class":253,"line":1098},14,[251,1100,1101],{}," [\"timeLimit\", 900]\n",[251,1103,1105],{"class":253,"line":1104},15,[251,1106,1107],{}," ],\n",[251,1109,1111],{"class":253,"line":1110},16,[251,1112,1113],{}," 0,\n",[251,1115,1117],{"class":253,"line":1116},17,[251,1118,1119],{}," getPlayerUID player,\n",[251,1121,1123],{"class":253,"line":1122},18,[251,1124,1125],{}," \"script\"\n",[251,1127,1129],{"class":253,"line":1128},19,[251,1130,1131],{},"] call forge_server_task_fnc_startTask;\n",[204,1133,1135],{"id":1134},"handler-calls","Handler Calls",[155,1137,1017,1138,1140],{},[162,1139,838],{}," directly when the task entities are already\nregistered and you want reputation gating plus ownership binding. Create the\nBIS task and catalog entry separately if this task should appear in the map\ntask tab or CAD:",[242,1142,1144],{"className":573,"code":1143,"language":575,"meta":247,"style":247},"[\n \"delivery\",\n [\"delivery_1\", 1, 3, \"delivery_zone\", 250000, -75, 300, false, false, 900],\n 250,\n getPlayerUID player\n] call forge_server_task_fnc_handler;\n",[162,1145,1146,1150,1155,1160,1165,1170],{"__ignoreMap":247},[251,1147,1148],{"class":253,"line":254},[251,1149,1032],{},[251,1151,1152],{"class":253,"line":261},[251,1153,1154],{}," \"delivery\",\n",[251,1156,1157],{"class":253,"line":288},[251,1158,1159],{}," [\"delivery_1\", 1, 3, \"delivery_zone\", 250000, -75, 300, false, false, 900],\n",[251,1161,1162],{"class":253,"line":308},[251,1163,1164],{}," 250,\n",[251,1166,1167],{"class":253,"line":600},[251,1168,1169],{}," getPlayerUID player\n",[251,1171,1172],{"class":253,"line":606},[251,1173,1174],{},"] call forge_server_task_fnc_handler;\n",[204,1176,1178],{"id":1177},"direct-task-calls","Direct Task Calls",[155,1180,1181,1182,1184],{},"Direct task function calls still work for mission-authored or server-owned\ntasks, but they do not provide a requester UID. Ownership falls back to the\n",[162,1183,302],{}," org. Create the BIS task separately if this task should appear in the\nmap task tab.",[204,1186,1188],{"id":1187},"timer-semantics","Timer Semantics",[155,1190,1191,1192,1195],{},"Task time limits use ",[162,1193,1194],{},"0"," for no limit:",[170,1197,1198,1204,1209,1214,1219],{},[173,1199,1200,1201],{},"attack ",[162,1202,1203],{},"timeLimit",[173,1205,1206,1207],{},"destroy ",[162,1208,1203],{},[173,1210,1211,1212],{},"delivery ",[162,1213,1203],{},[173,1215,1216,1217],{},"hostage ",[162,1218,1203],{},[173,1220,1221,1222],{},"HVT ",[162,1223,1203],{},[155,1225,1226,1227,1230],{},"Positive values are measured in seconds. Do not pass ",[162,1228,1229],{},"-1"," as a no-limit value;\nthe task runtime treats any non-zero task time limit as active.",[155,1232,1233,1234,1237,1238,1240,1241,1244],{},"Defuse IED timers are different. ",[162,1235,1236],{},"iedTimer"," must be greater than ",[162,1239,1194],{},", because\nIEDs are expected to have an active countdown. The Eden defuse module defaults\nto ",[162,1242,1243],{},"300"," seconds.",[204,1246,1248],{"id":1247},"defuse-counter","Defuse Counter",[242,1250,1252],{"className":573,"code":1251,"language":575,"meta":247,"style":247},"\"forge_server\" callExtension [\"task:defuse:increment\", [\"task-cache-1\"]];\nprivate _count = \"forge_server\" callExtension [\"task:defuse:get\", [\"task-cache-1\"]];\n",[162,1253,1254,1259],{"__ignoreMap":247},[251,1255,1256],{"class":253,"line":254},[251,1257,1258],{},"\"forge_server\" callExtension [\"task:defuse:increment\", [\"task-cache-1\"]];\n",[251,1260,1261],{"class":253,"line":261},[251,1262,1263],{},"private _count = \"forge_server\" callExtension [\"task:defuse:get\", [\"task-cache-1\"]];\n",[204,1265,1267],{"id":1266},"error-handling","Error Handling",[242,1269,1271],{"className":573,"code":1270,"language":575,"meta":247,"style":247},"private _payload = _result select 0;\nif (_payload find \"Error:\" == 0) exitWith {\n systemChat format [\"Task error: %1\", _payload];\n};\n",[162,1272,1273,1278,1283,1288],{"__ignoreMap":247},[251,1274,1275],{"class":253,"line":254},[251,1276,1277],{},"private _payload = _result select 0;\n",[251,1279,1280],{"class":253,"line":261},[251,1281,1282],{},"if (_payload find \"Error:\" == 0) exitWith {\n",[251,1284,1285],{"class":253,"line":288},[251,1286,1287],{}," systemChat format [\"Task error: %1\", _payload];\n",[251,1289,1290],{"class":253,"line":308},[251,1291,1292],{},"};\n",[1294,1295,1296],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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);}",{"title":247,"searchDepth":261,"depth":261,"links":1298},[1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314],{"id":206,"depth":261,"text":207},{"id":314,"depth":261,"text":315},{"id":569,"depth":261,"text":570},{"id":637,"depth":261,"text":638},{"id":684,"depth":261,"text":685},{"id":739,"depth":261,"text":740},{"id":778,"depth":261,"text":779},{"id":851,"depth":261,"text":852},{"id":903,"depth":261,"text":904},{"id":938,"depth":261,"text":939},{"id":1013,"depth":261,"text":1014},{"id":1134,"depth":261,"text":1135},{"id":1177,"depth":261,"text":1178},{"id":1187,"depth":261,"text":1188},{"id":1247,"depth":261,"text":1248},{"id":1266,"depth":261,"text":1267},"md",null,{},{"title":57,"description":157},"KdbrlSiS5YQ3OEJob3r0ceVGYCznKZq-sUb7FfWDctU",[1321,1323],{"title":53,"path":54,"stem":55,"description":1322,"children":-1},"The store module processes checkout requests. It charges a payment source and\ngrants purchased items to the player locker, virtual arsenal locker, and\nvirtual garage unlocks.",{"title":61,"path":62,"stem":63,"description":1324,"children":-1},"The bank module stores player account balances, earnings, PINs, and transaction\nstrings. The hot-state API also owns the active banking workflows used by the\nUI: deposit, withdraw, transfer, checkout charge, and PIN validation.",1776806627742]