Jump to content

whiztler

Member
  • Content Count

    551
  • Joined

  • Last visited

  • Medals

Everything posted by whiztler

  1. SPB | Server Performance Benchmark updated to 1.10 Added: Headless Client (autodetect) Updated: Slots, 49 Client slots + 1 HC slot http://forums.bistudio.com/showthread.php?177487-MP-CO25-SPB-Server-Performance-Benchmark
  2. CHANGELOG Current version VERSION 1.10 Added: Headless Client (autodetect) Updated: Slots, 49 Client slots + 1 HC slot Previous versions DOWNLOAD Mega.co.nz: http://goo.gl/PvZCkf [version: 1.10] Armaholic: http://www.armaholic.com/page.php?id=25649 [version: 1.10] ABOUT SPB The Server Performance Benchmark (SPB) mission was put together to benchmark dedicated server performance (Server FPS). SPB offers a fully an autopilot function, fully automated test scripts that can be configured in the mission parameters (at mission start/slot selection). If the tester does not wish to use the autopilot function, one can test manually. SPB can spawn up to 500 AI Bluefor units and up to 10 Opfor squads to simulate combat situations. After each Bluefor group spawn a report is generated: * Displayed on screen (hint) * Copied to the clipboard (comma delimited) * Inserted into the Server RPT file Screenshots http://i62.tinypic.com/245iowh.jpg (113 kB) http://i59.tinypic.com/5lwe3m.jpg (108 kB) Sample RPT log Author Concept & development by whiztler (www.nopryl.no) VANILLA & CBA/A.C.R.E. There are two versions of SPB available: ARMA III Vanilla The SPB Vanilla version requires no addon's and runs with ARMA III Vanilla. Make sure that the server admin configures the server as Vanilla and instruct the clients to join the SPB mission with a Vanilla profile (no addon's). Filename: SPB_Vanilla_v100.Altis.pbo CBA / A.C.R.E. The SPB CBA/A.C.R.E. version is dependent on CBA A3/A.C.R.E. (and Jay's ArmaLib A3). Other than the required addon's, the SPB CBA/A.C.R.E. is the same as SPB Vanilla. Filename: SPB_CBA-ACRE_v100.Altis.pbo SPB MISSION PARAMETERS You can configure several mission parameters: * Day or Night. When selecting 'Day', time is set to 12:00 hrs (noon). When selecting night, time is set to 00:00 hrs (midnight). * Expert Mode. Disables the instructions screens at the beginning of the mission. You'll jump right into the benchmarking feature. * SPB Autopilot config (see 'Automated Benchmarking using the Autopilot test scripts' for more information) BENCHMARKING PREPARATIONS For reliable testing please use the same 'mod-line' each time you run SPB (both server and clients). SPB was designed to test using up to 50 connected clients of which one is the 'tester' client. Only the tester client can access the SPB action menu and spawn up to 10 AI Bluefor groups of 50 units each group. Read the 'Server bandwidth & Optimisation' tutorial by Terox for information about getting the most out of your ARMA III server. Server It is recommended that you start with the default ARMA III server profile to create a baseline. Start testing with the SPB Vanilla version and benchmark various server profiles until you are satisfied with the performance. Once you have a satisfactory SPB Vanilla benchmark you can proceed with the SPB CBA/A.C.R.E version or add mods to your server modline to test performance impact of certain addon's. Make sure that before you start, you have several server profiles ready that you want to test. With 'Tophe's Arma Dedicated Server Tool' (TADST - http://www.armaholic.com/page.php?id=11655) you can create and save various profiles that you want to test at a later stage. Simply load the profile, start the server and Bob is your uncle. For real-time server performance monitoring I suggest you install the 'Arma Server Monitor' (ASM: http://www.armaholic.com/page.php?id=21436 -or- https://github.com/fred41). ASM is an external application that runs on your server. It can be used alongside SPB for additional reporting. Benchmarking can be a lengthy process. But when done right, you'll end up with a server profile that is able to run a smooth ARMA III server. People that play on your server(s) will thank you for it! Client Participating clients (incl. the tester) should run a similar modline as the server. Please make sure that clients do not have enabled any client-side addon's such as ST-Hud, Blastcore, SpeedofSound, JSRS2, etc., etc. The tester should brief people that will join as a client re which profile they should use before joining the server. For SPB Vanilla, clients can start ARMA III without any mods activated. When testing Benchmark reports are generated after each Bluefor group spawn (manual and Autopilot) and after spawning Opfor squads (Autopilot only). AUTOMATED BENCHMARKING USING THE AUTOPILOT TEST SCRIPTS SPB offers fully automated benchmarking using the SPB Autopilot feature. The SPB Autopilot needs to be configured at mission start-up. Using mission parameters you can setup SPB Autopilot to spawn 50, 100, 150 ... 500 units. The script will take care of the reporting in between the group spawns and during spawning of Opfor squads. The SPB Autopilot cycle is concluded with spawning 10 Opfor squads. You can initialize the SPB Autopilot, after the SPB Baseline has initialized, using the SPB Action Menu. Warning Do not configure the SPB Autopilot to spawn 10 groups of Bluefor AI's if you do not know if your server can handle it. Start with 3 groups and increase from there on. I cannot be held accountable for any damage done to your server! MANUAL BENCHMARKING If you prefer to have more control over the benchmarking process, you can manually spawn Bluefor groups using the SPB Action Menu. You can decide if you wish to spawn 1, 5 or 10 Opfor squads after or during the Bluefor group spawning. A Bluefor group spawn report is created 60 seconds after each groups has spawned. If you wish to monitor server performance during combat you can start the 'server stats' feature with Radio Juliet [0-0-0] and disable it again with Radio Alpha [0-0-1]. You can display the last test result with Radio Bravo [0-0-2]. Recommended manual benchmarking method: 1. Spawn the first 3 Bluefor groups. Wait for the report to appear before spawning the next group (60 secs). 2. Spawn 5 Opfor Squads. Wait until all Opfor units have been killed. 3. Check Server Stats with [0-0-0] during combat and disable with [0-0-1] 4. Spawn the fourth and the fifth Bluefor groups. 5. Spawn 5 Opfor Squads. 6. Check Server Stats with [0-0-0] during combat and disable with [0-0-1] 7. Spawn the sixth and seventh Bluefor groups. 8. Spawn 5 Opfor Squads. 9. Check Server Stats with [0-0-0] during combat and disable with [0-0-1] 10. Spawn the remaining three0 Bluefor groups. 11. Spawn 10 Opfor Squads. 12. Check Server Stats with [0-0-0] during combat and disable with [0-0-1] If you decide only to spawn a few Bluefor groups, then conclude your cycle with step 11 and 12. TESTER & CLIENTS The tester slot controls the testing process. All clients (including Tester) cannot be harmed or killed. For optimal testing results it is important that clients remain still and move as little as possible.
  3. SPB updated to 1.10 See OP for change log and download links.
  4. Is there any way to query the respawn delay time as set in description.exe? description.ext respawnDelay = 30;
  5. Yep, does the trick very well. Something new learned today. Thanks lads!
  6. Thanks mate, I'll look into that one
  7. This one does the trick for me: /* ..... ... .. ... .. .H8888888h. ~-. .=*8888x <"?88h. .=*8888x <"?88h. 888888888888x `> X> '8888H> '8888 X> '8888H> '8888 X~ `?888888hx~ '88h. `8888 8888 '88h. `8888 8888 ' x8.^"*88*" '8888 '8888 "88> '8888 '8888 "88> `-:- X8888x `888 '8888.xH888x. `888 '8888.xH888x. 488888> X" :88*~ `*8888> X" :88*~ `*8888> .. `"88* ~" !"` "888> ~" !"` "888> x88888nX" . .H8888h. ?88 .H8888h. ?88 !"*8888888n.. : :"^"88888h. '! :"^"88888h. '! ' "*88888888* ^ "88888hx.+" ^ "88888hx.+" ^"***"` ^"**"" ^"**"" | TheButcherBay | ARMA 3 ALPHA | ANJAN DELETE ALL | */ if (!isServer) exitWith {}; TBB_Included = []; TBB_Excluded = ["B_soldier_AR_F","B_soldier_exp_F","B_Soldier_GL_F", "B_Helipilot_F","B_soldier_M_F","B_medic_F","B_Soldier_F", "B_soldier_repair_F","B_soldier_LAT_F","B_Soldier_SL_F", "B_Soldier_lite_F","B_Soldier_TL_F","B_Lifeboat", "B_Assaultboat","B_SpeedBoat","B_Quadbike_F", "B_Hunter_F","B_Hunter_HMG_F","B_Hunter_RCWS_F", "B_MH9_F","B_AH9_F","O_Ka60_Unarmed_F","O_Ka60_F","B_Mk6"]; // true/false = on/off. _canMove = true; // if vehicles should be deleted when they are to damaged to move and empty, NOTE empty fuel also means it cannot move. _abandoned = false; // if vehicles should be deleted after being x time un manned, if 1 unit enters in the time period, time is reset, and vehicle is processed again when empty or destroyed. _groupDel = true; // if empty groups should be deleted, to avoid reaching 144 group limit in long missions. _viewDist = 0; // min distance in meter from a player unit to allow delete, if you dont care if player sees the delete, set it to 0. _manTimer = 30; // x seconds until delete of dead man units. _vehTimer = 30; // x seconds until delete of dead vehicles, for destroyed and heavy damaged vehicles. _abaTimer = 30; // x seconds a vehicle must be unmanned to be deleted, for _abandoned option. _incTimer = 30; // x seconds any object put inside the TBB_Included will be deleted no matter condition. // DO NOT EDIT PAST THIS LINE // // delete function. _delete = { _del = _this select 0; _dis = _this select 1; _tim = _this select 2; _aba = _this select 3; _abt = _this select 4; _cnm = _this select 5; if (isPlayer _del) exitWith {}; _abort = true; if ("veh" in _this AND (_aba OR _cnm)) then { _sec = _abt; while {_sec != 0} do { sleep 1; if (_aba AND (getDammage _del) < 1 AND ({alive _x} count (crew _del)) == 0) then {_sec = _sec - 1}; if (_aba AND _sec == 0) then {_abort = false}; if (((_cnm AND canMove _del) OR _aba) AND ({alive _x} count (crew _del)) != 0) then { _sec = 0; _abort = true; _del setVariable ["TBB_delete_readd", true, true]; }; if ((getDammage _del) >= 1) then { _sec = 0; _abort = false; sleep _tim; }; if (isNull _del) then {_sec = 0; _abort = true}; }; } else { _abort = false; sleep _tim; }; // fail safe for excluded and included. if (isNull _del OR _abort OR _del in TBB_Excluded) exitWith {}; { _arr = _x; _obj = ""; _timer = _tim; _dist = _dis; if ((typeName _arr) == "ARRAY") then { _obj = _arr select 0; _timer = _arr select 1; if ((count _arr) == 3) then {_dist = _arr select 2} else {_dist = _viewDist}; } else { _obj = _arr; _timer = _tim; _dist = _dis; }; if (_del == _obj) then { _del = _obj; _dis = _dist; if ((_timer - _tim) > 0) then {sleep (_timer - _tim)}; // clean up the TBB_Included array of deleted objects. TBB_Included = TBB_Included - [_x]; }; } foreach TBB_Included; if (!isNull _del) then { _arr = []; waitUntil {sleep 1; ({isPlayer _x AND (_del distance (vehicle _x)) < _dis} count playableUnits) == 0}; waitUntil {sleep 1; ({isPlayer _x AND (_del distance (vehicle _x)) < _dis} count switchableUnits) == 0}; if ("veh" in _this OR "incVeh" in _this) then {{_arr = _arr + [_x]; _x setPos (getPos _del); deleteVehicle _x} foreach crew _del} else { if (_del isKindOf "man") then {hideBody _del; sleep 10}; }; _arr = _arr + [_del]; deleteVehicle _del; //{_x = objNull; waitUntil {sleep 1; isNull _x}; _x = nil} foreach _arr; {if (_x in TBB_delete_respawned) then {_arr = _arr - [_x]}} foreach _arr; TBB_delete_respawned = TBB_delete_respawned + _arr; }; }; _processed = []; _todo = []; _types = []; _included = []; TBB_delete_respawned = []; while {true} do { // check TBB_Excluded array for changes. {if ((typeName _x) == "STRING" AND !(_x in _types)) then {_types = _types + [_x]}} foreach TBB_Excluded; // update types/classnames if changed. {if (!(_x in TBB_Excluded)) then {_types = _types - [_x]}} foreach _types; // clean the processed list of all objects that have been deleted. {if (isNull _x) then {_processed = _processed - [_x]}} foreach _processed; // clean the included list of all objects that have been deleted. {if (isNull _x) then {_included = _included - [_x]}} foreach _included; // process TBB_Included array. { _arr = _x; _obj = ""; _timer = 0; _dist = 0; if ((typeName _arr) == "ARRAY") then { _obj = _arr select 0; _timer = _arr select 1; if ((count _arr) == 3) then {_dist = _arr select 2} else {_dist = _viewDist}; } else { _obj = _arr; _timer = _incTimer; _dist = _viewDist; }; if (_x in _included) exitWith {}; _included = _included + [_obj]; if (_obj isKindOf "AllVehicles" AND !(_obj isKindOf "Man")) then { _null = [_obj,_dist,_timer,false,0,false,"incVeh"] spawn _delete; } else { _null = [_obj,_dist,_timer,false,0,false,"inc"] spawn _delete; }; } foreach TBB_Included; // gather all dead. _allD = allDead; {if (_x in TBB_delete_respawned AND _x in _processed) then {_processed = _processed - [_x]}} foreach _allD; { _unit = _x; if (_x in _included) exitWith {}; if ((vehicle _x) == _x AND !(_x in _processed) AND ({_unit isKindOf _x} count _types) == 0 AND !(_x in TBB_Excluded)) then { if (!(_x in _todo)) then {_todo = _todo + [_x]}; }; } foreach _allD; // gather all vehicles and process depending on options used. _allV = vehicles; {if (_x in TBB_delete_respawned AND _x in _processed) then {_processed = _processed - [_x]}} foreach _allV; { _veh = _x; if (_x in _included) exitWith {}; if (_x getVariable ["TBB_delete_readd", false]) then { _processed = _processed - [_x]; _x setVariable ["TBB_delete_readd", false, true]; }; if (!(_x in _processed) AND ({_veh isKindOf _x} count _types) == 0 AND !(_x in TBB_Excluded)) then { if ((getDammage _x) >= 1 OR (_canMove AND !canMove _x AND ({alive _x} count (crew _x)) == 0) OR (_abandoned AND ({alive _x} count (crew _x)) == 0)) then { if (!(_x in _todo)) then {_todo = _todo + [_x]}; }; }; } foreach _allV; // run the delete script for todo list. { if (!(_x in _processed)) then { if (_x isKindOf "Man") then { _null = [_x,_viewDist,_manTimer,_abandoned,_abaTimer,_canMove] spawn _delete; } else { _null = [_x,_viewDist,_vehTimer,_abandoned,_abaTimer,_canMove,"veh"] spawn _delete; }; _todo = _todo - [_x]; _processed = _processed + [_x]; }; } foreach _todo; // delete empty groups. if (_groupDel) then {{if ((count (units _x)) == 0) then {deleteGroup _x; _x = grpNull; _x = nil}} foreach allGroups}; // sleep 10 seconds, then check if there are any changes to dead or vehicles that are not processed. sleep 10; };
  8. Try without the "": re22 setMarkerColor "ColorBlack";
  9. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Updated to v1.22. See OP for more info
  10. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Good to know. Thanks! Have you lads had time to test Day 3 v1.22 yet?
  11. Have a peek here: http://www.openstreetmap.org/#map=12/39.9034/25.1405 OWM offers various options to download your map. Recommended License info: http://www.openstreetmap.org/copyright
  12. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Just like I do with ACRE, I can then add spare radio's to the crates. I noticed that TFAR actually replaced backpacks (on officers/FTL's ?) Anyway, I'll look into it. if it add's value to gameplay/usability I'll add TFAR. I did a quick test on my DS and all seemed fine. But with DS it's always better to test with at least 2 clients. Vol. 2 coming around nicely. Release soonish :)
  13. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    I am looking into adding TFAR to the mission params. Never worked with it so be patient. I'll drop you a PM later today with a new Day 3 version for you guys to test. If it works as it should, I'll release the updated pack.
  14. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Sorry mate, this is due to how are framework works. Gear can only be applied when not in a vehicle. Found the bug, I'll post an update later on Friday.
  15. CBA_fnc_searchNearby does nothing. So replace just with "", e.g.: [_grp1, _markerpos, 200, 7, "MOVE", "AWARE", "YELLOW", "LIMITED", "STAG COLUMN", "", [2,3,4]] call CBA_fnc_taskPatrol; Note that in your example you have used the same local var for both the group and the spawn position More info: http://dev.withsix.com/docs/cba/files/ai/fnc_taskPatrol-sqf.html
  16. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Updated to 1.21 CHANGELOG Version 1.21 - Added: Basic & Advanced Wolfpack training missions - Fixed: Detection script error - Updated: Wolfpack Readme Document See OP for download information
  17. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Updated to 1.20 CHANGELOG Version 1.20 - Updated: Arma v1.20 - Updated: LAF3 v1.02 - Fixed: cTab didn't load - Fixed: Opfor balancing See OP for download information
  18. whiztler

    Arma 3 Headless Client

    Does the physical location of the HC unit on the map need to be near the AO (like in Arma2) or can we tuck him away safely on on of the offshore islands?
  19. whiztler

    [WIP] Band of Brothers

    Basically everything you're looking for: http://www.armaholic.com/page.php?id=23684 http://alivemod.com/
  20. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Excellent. Have fun guys. Looking forward to see any feedback. Sorry mate but have other plans on Sunday. Have fun tho! If anyone happens to record the session on video, please feel free to post here!
  21. whiztler

    [MP CO15 Campaign] Wolfpack Vol. 1

    Updated to version 1.10 CHANGELOG: Version 1.10 - Fixed: exfil features in all 5 ops - Fixed: Fire missions in Day 2 and 3 - Fixed: 'Endmission' triggers - Added: vehicle pool from 1.18 update Version 1.00 - Initial public release Thanks everyone for your feedback & bug reports!
  22. Below case is a script that runs at the beginning of a mission: if (!isServer) exitWith {}; trueVar = false; waitUntil {trueVar}; After 1+ hour into the mission: trueVar = true; publicVariableServer "trueVar"; When the trueVar init is broadcasted to the server, the server will be dealing with lots of AI's, combat, etc. FPS drops but no lower than 17. Is it possible that due to server lag or the fact that the game is already been at it for over an hour that the waitUntil {tueVar}; is no longer working? Anyone experienced this before?
  23. whiztler

    Tasks JIP friendly ?

    If you decide to go the scripting way (more flexibility) than have a look here: http://forums.bistudio.com/showthread.php?151680-FHQ-TaskTracker
  24. whiztler

    WaitUntil {trueVar}

    Thanks guys. Always keen to learn new things about scripting for Arma.
  25. whiztler

    Fighter jet Combat Fundamentals Manual

    Top notch mate! Congrats with the release
×