

MechSlayer
Member-
Content Count
90 -
Joined
-
Last visited
-
Medals
Community Reputation
18 GoodAbout MechSlayer
-
Rank
Corporal
Profile Information
-
Gender
Male
-
Location
Spain
Recent Profile Visitors
-
Flash-Ranger started following MechSlayer
-
rest Http requests extension
MechSlayer replied to MechSlayer's topic in ARMA 3 - COMMUNITY MADE UTILITIES
I tried it first, but the game or c#, converts the parameters to strings even if they already are. Making "string" to """string""" -
rest Http requests extension
MechSlayer replied to MechSlayer's topic in ARMA 3 - COMMUNITY MADE UTILITIES
Okey, no more freezing, also the json responses are parsed to arrays (The downside is that only works with numbers, strings, booleans and null values). It looks like the output max size is set by the engine so i can't get rid of it. -
rest Http requests extension
MechSlayer replied to MechSlayer's topic in ARMA 3 - COMMUNITY MADE UTILITIES
Strange, when I try sending more characters than the output size it throws me buffer overrun -
rest Http requests extension
MechSlayer replied to MechSlayer's topic in ARMA 3 - COMMUNITY MADE UTILITIES
Now I feel stupid for not thinking about callbacks, the problem is that I have no idea about changing the output size limit -
MechSlayer started following Can't save a .sqf file, Http requests extension, Make agent attack players and and 4 others
-
Extension to make http requests, currently supporting: GET POST PATCH DELETE PUT First parameter is the mode. Second is the method. Third is the url. Fourth is the authorization, if no authorization needed just pass null Fifth is the request body, only used by POST, PATCH and PUT, if no body needed just pass {} GET request example: "ArmaRequests" callExtension "0|GET|http://headers.jsontest.com/|null"; waitUntil {sleep 1; "ArmaRequests" callExtension "2" == "OK"}; _response = "ArmaRequests" callExtension "1"; _parsedResponse = parseSimpleArray _response; _code = _parsedResponse select 0; _data = _parsedResponse select 1; //Response => [["X-Cloud-Trace-Context","47e3637379c2b3d638285b973e0e4f96/4228286279360018440"],["Host","headers.jsontest.com"]] POST request example: "ArmaRequests" callExtension '0|POST|url|Bot ksZc83aS|{"Number": 4, "String": "String"}'; waitUntil {sleep 1; "ArmaRequests" callExtension "2" == "OK"}; _response = "ArmaRequests" callExtension "1"; _parsedResponse = parseSimpleArray _response; _code = _parsedResponse select 0; _data = _parsedResponse select 1; Every response comes with a status code 0: All data received 1: There's still data to receive 9: Error The codes you can use are 0: New request 1: Receive data 2: Get extension status 3: Parse JSON //Example: "ArmaRequests" callExtensions '3|{"age": 80}'; Due to string length limitations, if the response exceeds that limit it will be sent in chunks with status code 1, to receive the chunk use _fullResponse = ""; // _chunkResponse = "ArmaRequests" callExtension "1"; _parsedChunkResponse = parseSimpleArray _chunkResponse; _code = _chunkResponse select 0; _data = _chunkResponse select 1; _fullResponse = _fullResponse + _data; //You must repeat the receiving process until it responds with a code 0 When there's no more data left, it will respond with a code 0. JSON responses are automatically parsed into arrays, all common variables type are supported. Example code _fullResponse = ""; "ArmaRequests" callExtension "0|GET|http://headers.jsontest.com/|null"; //Send request waitUntil {sleep 1; "ArmaRequests" callExtension "2" == "OK"}; _response = "ArmaRequests" callExtension "1"; _parsedResponse = parseSimpleArray _response; //Parse response _code = _parsedResponse select 0; //Save code and data _data = _parsedResponse select 1; if (_code != 9) then { //Check if is a error _fullResponse = _data; //Assign the data in the full response while {_code == 1} do { //if there's more data receive it _chunkResponse = "ArmaRequests" callExtension "1"; //Receive next chunk data _parsedChunkResponse = parseSimpleArray _chunkResponse; //Parse the chunk data _code = _parsedChunkResponse select 0; //Update the status code _data = _parsedChunkResponse select 1; //Save the data if (_code == 9) exitWith {hint "Error : " + _data;}; //Check if is a error _fullResponse = _fullResponse + _data; //Append the chunk to the full response }; hint str _fullResponse; } else { hint "Error during request " + _data; }; There's also a callback version "ArmaRequestsCallback" callExtension "callbackFunction|Method|url|authorization?|body?"; Example using callback version and normal version TAG_fnc_DiscordMessageSent = { params["_data"]; //[["id","651314298001424405"],["type",0],["content","Hello"],["channel_id","649607925760786442"],["author",[["id","629121190182780929"],["username","Fantasia"],["avatar",null],["discriminator","2964"],["bot",true]]],["attachments",[]],["embeds",[]],["mentions",[]],["mention_roles",[]],["pinned",false],["mention_everyone",false],["tts",false],["timestamp","2019-12-03T06:50:29.478000+00:00"],["edited_timestamp",null],["flags",0],["nonce",null]] _content = (_data select 2) select 1; _username = (((_data select 4) select 1) select 1) select 1; _channelId = (_data select 3) select 1; "ArmaRequests" callExtension format["0|GET|https://discordapp.com/api/v6/channels/%1|Bot TOKEN|{}", _channelId]; waitUntil {sleep 1; "ArmaRequests" callExtension "2" == "OK"}; _channelData = (parseSimpleArray ("ArmaRequests" callExtension "1")) select 1; _channelName = (_channelData select 3) select 1; _guildId = (_channelData select 7) select 1; "ArmaRequests" callExtension format["0|GET|https://discordapp.com/api/v6/guilds/%1|Bot TOKEN|{}", _guildId]; waitUntil {sleep 1; "ArmaRequests" callExtension "2" == "OK"}; _guildData = (parseSimpleArray ("ArmaRequests" callExtension "1")) select 1; _guildName = (_guildData select 1) select 1; hint format["Sent %1 as %2 in the channel %3 of the guild %4", _content, _username, _channelName, _guildName]; }; addMissionEventHandler ["ExtensionCallback", { params["_name", "_function", "_data"]; if (_name == "ArmaRequestsCallback_JSON") then { [parseSimpleArray _data] spawn (missionNamespace getVariable [_function, { diag_log format["ArmaRequestsCallback: Tried to call %1, but isn't defined", _function]; }]); }; if (_name == "ArmaRequestsCallback_Error") then { hint "Request error: " + _data; }; if (_name == "ArmaRequestsCallback_TEXT") then { systemChat _data; }; }]; "ArmaRequestsCallback" callExtension "TAG_fnc_DiscordMessageSent|POST|https://discordapp.com/api/v6/channels/649607925760786442/messages|Bot BOT|{""content"": ""Hello"", ""tts"": false}"; Download link: https://drive.google.com/file/d/1-9oW3PhArHbs15AS4c6R5UQuuk6usInC/view
-
I have a zombie agent, how can I make it attack players? (By attack I mean only hitting)
-
interaction menu [RELEASE] Editable interaction menu
MechSlayer replied to MechSlayer's topic in ARMA 3 - MISSION EDITING & SCRIPTING
You need at least one interaction created inside "fn_initInteracciones.sqf". That errors happens if the script doesn't loop through the "Interacciones_Interacciones" variable. -
I need to spawn around 700 units, does anyone know a fast method to do this? Tried a for loop but after hitting 100 units it starts to spawn way too slow. I'm spawning them serverside. Thanks.
-
Change player roles/classes and traits on respawn
MechSlayer replied to Ambross's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Try changing player to _unit inside onplayerRespawn.sqf Also you need to pass _unit and _corpse parameters from the event handler. -
WeaponHolderSimulated spawns as ObjNull
MechSlayer replied to MechSlayer's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Thanks it worked. -
WeaponHolderSimulated spawns as ObjNull
MechSlayer posted a topic in ARMA 3 - MISSION EDITING & SCRIPTING
I'm trying to spawn weapons inside each building in the map, but for some reason more than half spawns as ObjNull Here's the code: _buildings = nearestObjects[_worldCenter, ["building"], (worldName call BIS_fnc_mapSize)]; //Get all buildings. { _buildingPositions = _x buildingPos -1; //Get all positions inside the building. _localPos = selectRandom _buildingPositions; //Select a random one. _spawnPos = [(_localPos select 0), (_localPos select 1), ((_localPos select 2) + 1)]; //Elevate the position 1 meter. _holder = createVehicle ["WeaponHolderSimulated", _spawnPos, [], 0, "CAN_COLLIDE"]; //Spawn the weapon holder. _weapon = selectRandom _weaponsArray; //Select a random weapon. _holder addItemCargoGlobal [_weapon, 1]; //Add the weapon to the holder. } forEach _buildings; -
Spawn ai behind selected player
MechSlayer replied to Robustcolor's topic in ARMA 3 - MISSION EDITING & SCRIPTING
To get the players you can use _playercount = playableUnits select {_x distance getMarkerPos "Marker1" < 200 && isPlayer _x} For a random unit just use _unit = selectRandom _playercount To spawn the unit behind just change _unit getpos [250,random 50] to _unit getpos [-250,random 50] Or if you want a random distance: _unit getPos [random[-40, -100, -250], random 50] (-40 is the minimum distance, -100 the mid distance and -250 the maximum distance) If you ONLY need to wait, remove the sleep from waitUntil. -
Change player side with a AddAction
MechSlayer replied to loopdk's topic in ARMA 3 - MISSION EDITING & SCRIPTING
_group = createGroup west; {if (side _x == civilian) then {[_x] joinSilent _group;}} forEach allPlayers; Or if you want every player to join blufor _group = createGroup west; allPlayers joinSilent _group; -
Can't save a .sqf file
MechSlayer replied to Jubal Savid's topic in ARMA 3 - MISSION EDITING & SCRIPTING
If execVM doesn't work you can also try call compile preprocessFileLineNumbers "rem.sqf"; -
Get the editor preview image of a classname
MechSlayer replied to MechSlayer's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Thanks