Woodpeckersam
Member-
Content Count
230 -
Joined
-
Last visited
-
Medals
-
Well if you check my feedback ticket, you can see that my idea will eliminate most if not all problems with AI inside buildings (and out of buildings of course). My idea is not a NEW idea, but it (i hope) is new for ArmA 3. http://feedback.arma3.com/view.php?id=12962
- 5179 replies
-
- branch
- development
-
(and 1 more)
Tagged with:
-
Optimizing Scripts for Multiplayer
Woodpeckersam replied to Woodpeckersam's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Thanks so much for the response guys. I did a lot of fiddling with the scripts just before you posted on here. You have most certainly opened my eyes a lot more. Firstly if I have a fnc_respawn set up for any units who respawn, I would require 3 major variables. The first is the WaveCount, the second is the Multiplier and the third is the Curr_Wavecount. This will run in the unit's init at start... nul = this addMPEventHandler ["MPRespawn", {nul = _this execVM "fnc_respawn.sqf";}]; Running a script outside the init.sqf, and requiring the use of some variables would mean that the variables would have to be global am I right? I need that code running in every playable unit's init field in order to check when they have respawned. But in the fnc_respawn.sqf I can have the code running locally as it already runs on the client, the player who has respawned. fnc_respawn.sqf private ["_unit"]; _unit = _this select 0; if (Current_Wave <= WaveCount - (round (WaveCount / Multiplier) )) then { _unit synchronizeObjectsAdd ["SupplyDrop"]; nul = _unit addMPEventHandler ["MPRespawn", {nul = _this execVM "fnc_respawn.sqf";}]; }; if (Current_Wave > WaveCount - (round (WaveCount / Multiplier) )) then { _unit synchronizeObjectsAdd ["Artillery"]; _unit synchronizeObjectsAdd ["SupplyDrop"]; nul = _unit addMPEventHandler ["MPRespawn", {nul = _this execVM "fnc_respawn.sqf";}]; }; if (Current_Wave >= WaveCount - (round (WaveCount / Multiplier / Multiplier) ))then { _unit synchronizeObjectsAdd ["Helicopter"]; _unit synchronizeObjectsAdd ["Artillery"]; _unit synchronizeObjectsAdd ["SupplyDrop"]; nul = _unit addMPEventHandler ["MPRespawn", {nul = _this execVM "fnc_respawn.sqf";}]; }; if (true) exitWith {}; Am I doing it right? Please check the spoiler for updated scripts, i used the spoiler to reduce the size of my post. ---------- Post added at 11:47 ---------- Previous post was at 11:43 ---------- Also forgot to ask what is the purpose of #Define? Is that for use with Params? -
Optimizing Scripts for Multiplayer
Woodpeckersam replied to Woodpeckersam's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Can someone help me understand when to use isServer? Because whenever I use it (its commented out in my init.sqf) none of code inside it runs. At least myself, the player wont see anything.. ---------- Post added at 21:43 ---------- Previous post was at 21:30 ---------- Can someone help me understand how to use synchronizeObjectAdd on respawn? I swear i remember reading somewhere something about "onRespawn" but I cannot seem to find it. Basically i need to check that if a player/unit has respawned, re-sync them to the modules I have. I dont have any right now, but I will need to, as I need support modules to be included in the mission. -
Visual ArmA 3 Class Name Library (WIP)
Woodpeckersam replied to Alex Dyre's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Well if you have Photoshop you can batch resize every image that you want. You sort of create a Macro by doing your resizing on an image then save the Macro, then use the Batch Tool, choose your Macro and select all the images you want to resize and it will do it one by one. At least that is what I remember from a couple of years ago. Here you go, this is if you have the older version of Photoshop: http://graphicssoft.about.com/od/digitalphotography/l/blps_batch.htm - There is a link at the top of the article for the later versions of Photoshop. I am sure it is possible to do in other graphics software. This method will save you a lot of time. May I suggest this application: Greenshot - http://getgreenshot.org/ this is the best ever screenshot program I have ever used. If I take screenshots of ArmA 3, I tend to do it in Window Mode, press Print Screen, Greenshot will overlay then you press Spacebar, choose the ArmA 3 game window and it will take a screenshot. Then you can choose to save it to computer, upload to facebook, upload to dropbox etc. That is if you dont have any Screenshot apps. But please please forgive me if you already know this stuff, I really like what you are doing so far as it will improve the speed of creativity in using these objects in game. -
Visual ArmA 3 Class Name Library (WIP)
Woodpeckersam replied to Alex Dyre's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Have a look at this: https://www.google.co.uk/search?q=360+image+spin+upload&rlz=1C1PRFB_enGB501GB506&oq=360+image+spin+&aqs=chrome.0.69i59j69i57j69i60.4105j0&sourceid=chrome&ie=UTF-8 and this: Just an idea =) -
Optimizing Scripts for Multiplayer
Woodpeckersam posted a topic in ARMA 3 - MISSION EDITING & SCRIPTING
Hello there, its not often I do this, but this time round it's different. Now.... I have a teeny tiny little bit of knowledge regarding scripting for multiplayer and making sure it is optimized. This mission however can get a little laggy, especially at the moment a unit/group spawns. It's not major, not hugely noticeable.. unless you are tired and concentrated on it, like me lol. Now I was wondering if some of you can have a read through my scripts, give me some tips on optimization and ways to improve it. Basically my mission is very much going along the lines of the Defend the Town missions. The only differences are that I have not taken any code from the Official Missions (well I hope not as I've used code inspirations from various sources on the forums and outside the forums), and that I am not using any of the modules in the game. I am really building a mission, maybe to release. It wont be great, wont be a 5 star mission, but i'm doing it to help improve my knowledge of Multiplayer mission editing. The current state of it took my five hours to make. Complete with spawning and respawning markers, playable units, AI units defending the town and a trigger than when no Opfor are found (after spawning them), activate the Deactivate init field to say that Opfor_Present is false. Ok, so far I have been using publicVariable everywhere as, if I read correctly, needs to be used EVERY time a variable change. I also really want this to work with JIP, but I havent seen my friend online today to test it out. But some of you will probably know if it will work with JIP just by looking at it. Init.sqf // Initialization //waitUntil {!(isNil "BIS_MPF_initDone") AND !(isNil "BIS_fnc_init") AND !(isNull player)};//DOESNT WORK waitUntil {BIS_fnc_init}; if (isNil "Timer") then {Timer = 30;}; publicVariable "Timer"; if (isNil "Multiplier") then {Multiplier = 1.7;}; publicVariable "Multiplier"; if (isNil "WaveTypeMultiplier") then {WaveTypeMultiplier = 2;}; publicVariable "WaveTypeMultiplier"; if (isNil "WaveCount") then {WaveCount = 30;}; publicVariable "WaveCount"; if (isNil "WaveSpawnDelay") then {WaveSpawnDelay = 5;}; publicVariable "WaveSpawnDelay"; if (isNil "TimerDone") then {TimerDone = false;}; publicVariable "TimerDone"; //if (isServer) then { FNC_Timer = compile preprocessFile "Scripts\Timer.sqf"; FNC_Groups = compile preprocessFile "Scripts\Groups.sqf"; [] execVM "Waves.sqf"; setViewDistance 1500; setTerrainGrid 40; 0 setFog [1,0.019,100]; //Allow players the ability to choose a class/loadout before respawn [west, "WEST1"] call BIS_fnc_addRespawnInventory; [west, "WEST2"] call BIS_fnc_addRespawnInventory; [west, "WEST3"] call BIS_fnc_addRespawnInventory; [west, "WEST4"] call BIS_fnc_addRespawnInventory; //Set spawn positions [west, getMarkerPos "Respawn1"] call BIS_fnc_addRespawnPosition; [west, getMarkerPos "Respawn2"] call BIS_fnc_addRespawnPosition; [west, getMarkerPos "Respawn3"] call BIS_fnc_addRespawnPosition; //}; Description.ext Author = "Woodpeckersam"; OnLoadMission = "Defend Oreokastro!"; Respawn = "BASE"; RespawnDelay = 10; DisabledAI = false; joinUnassigned = true; // auto assign class Header { gameType=Defend; minPlayers=1; maxPlayers=10; }; respawnTemplatesWest[] = {"MenuInventory","MenuPosition"}; class CfgRespawnInventory //Borrowed from FighterD1, thanks! { class WEST1 { displayName = "Grenadier"; // Name visible in the menu icon = "\A3\ui_f\data\igui\cfg\weaponicons\GL_ca.paa"; // Icon displayed next to the name // Condition must return true in order for the loadout to be displayed in the menu. // Evaluated when the menu is opened. show = "side group _this == west"; // Loadout definition, uses same entries as CfgVehicles classes weapons[] = { "arifle_MX_GL_F", "hgun_P07_F", "Rangefinder" }; magazines[] = { "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "SmokeShell", "SmokeShell", "SmokeShell", "HandGrenade", "HandGrenade", "HandGrenade", "1Rnd_HE_Grenade_shell", "1Rnd_HE_Grenade_shell", "1Rnd_HE_Grenade_shell", "1Rnd_HE_Grenade_shell", "1Rnd_HE_Grenade_shell", "1Rnd_HE_Grenade_shell", "1Rnd_Smoke_Grenade_shell", "1Rnd_Smoke_Grenade_shell", "1Rnd_Smoke_Grenade_shell", "1Rnd_Smoke_Grenade_shell", "16Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; items[] = { "FirstAidKit", "FirstAidKit", "FirstAidKit", "FirstAidKit" }; linkedItems[] = { "V_Chestrig_khk", "H_HelmetB", "optic_aco", "acc_flashlight", "ItemGPS", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio" }; uniformClass = "U_B_CombatUniform_mcam_tshirt"; backpack = "B_AssaultPack_mcamo"; }; class WEST2 { displayName = "Automatic Rifleman"; // Name visible in the menu icon = "\A3\ui_f\data\igui\cfg\weaponicons\MG_ca.paa"; // Icon displayed next to the name // Condition must return true in order for the loadout to be displayed in the menu. // Evaluated when the menu is opened. show = "side group _this == west"; // Loadout definition, uses same entries as CfgVehicles classes weapons[] = { "LMG_Zafir_F", "hgun_P07_F", "Rangefinder" }; magazines[] = { "150Rnd_762x51_Box", "150Rnd_762x51_Box", "150Rnd_762x51_Box", "150Rnd_762x51_Box", "150Rnd_762x51_Box", "SmokeShell", "SmokeShell", "SmokeShell", "HandGrenade", "HandGrenade", "16Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; items[] = { "FirstAidKit", "FirstAidKit", "FirstAidKit", "FirstAidKit" }; linkedItems[] = { "V_PlateCarrier2_rgr", "H_HelmetB", "optic_mrco", "acc_flashlight", "ItemGPS", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio" }; uniformClass = "U_B_CombatUniform_mcam_tshirt"; backpack = "B_AssaultPack_mcamo"; }; class WEST3 { displayName = "Explosive Specialist"; // Name visible in the menu icon = "\A3\ui_f\data\igui\cfg\weaponicons\AT_ca.paa"; // Icon displayed next to the name // Condition must return true in order for the loadout to be displayed in the menu. // Evaluated when the menu is opened. show = "side group _this == west"; // Loadout definition, uses same entries as CfgVehicles classes weapons[] = { "arifle_MXC_F", "hgun_P07_F", "Rangefinder" }; magazines[] = { "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "SmokeShell", "SmokeShell", "HandGrenade", "HandGrenade", "APERSBoundingMine_Range_Ammo", "APERSBoundingMine_Range_Ammo", "16Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; items[] = { "FirstAidKit", "FirstAidKit", "FirstAidKit", "FirstAidKit" }; linkedItems[] = { "V_PlateCarrier2_rgr", "H_Cap_headphones", "optic_aco", "acc_flashlight", "ItemGPS", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio" }; uniformClass = "U_B_CombatUniform_mcam"; backpack = "B_Kitbag_cbr"; }; class WEST4 { displayName = "Marksman"; // Name visible in the menu icon = "\A3\ui_f\data\igui\cfg\weaponicons\srifle_ca.paa"; // Icon displayed next to the name // Condition must return true in order for the loadout to be displayed in the menu. // Evaluated when the menu is opened. show = "side group _this == west"; // Loadout definition, uses same entries as CfgVehicles classes weapons[] = { "arifle_MXM_F", "hgun_P07_F", "Laserdesignator" }; magazines[] = { "Laserbatteries", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "30Rnd_65x39_caseless_mag", "SmokeShell", "SmokeShell", "HandGrenade", "HandGrenade", "ClaymoreDirectionalMine_Remote_Mag", "ClaymoreDirectionalMine_Remote_Mag", "16Rnd_9x21_Mag", "16Rnd_9x21_Mag" }; items[] = { "FirstAidKit", "FirstAidKit", "FirstAidKit", "FirstAidKit" }; linkedItems[] = { "V_Chestrig_khk", "H_Watchcap_blk", "optic_Hamr", "acc_flashlight", "ItemGPS", "ItemMap", "ItemCompass", "ItemWatch", "ItemRadio" }; uniformClass = "U_B_CombatUniform_mcam"; }; }; Waves.sqf private ["_spawnMultiplier","_spawnType","_randomSquad","_type","_RoadSpawns","_grpMot","_Spawns","_grpInf"]; _spawnMultiplier = 1.7; publicVariable "_spawnMultiplier"; For "_i" from 1 to WaveCount do { Curr_WaveCount = _i; publicVariable "Curr_WaveCount"; [] spawn FNC_Timer; waitUntil {TimerDone}; Hint Format ["Wave %1 Commencing",_i]; sleep 5; _spawnMultiplier = round ( _spawnMultiplier * Multiplier); publicVariable "_spawnMultiplier"; for "_i" from 1 to _spawnMultiplier do { _spawnType = if (count _this > 2) then {_this select 2} else {"inf"}; _type = ""; _randomSquad = ""; publicVariable _spawnType; publicVariable _randomSquad; publicVariable _type; if (Curr_WaveCount < round (Wavecount / WaveTypeMultiplier + (Multiplier)) then {_spawnType = ["inf"] call BIS_fnc_selectRandom;}; if (Curr_WaveCount > round (Wavecount / WaveTypeMultiplier + (Multiplier / 0.5))) then {_spawnType = ["inf","sup"] call BIS_fnc_selectRandom;}; if (Curr_WaveCount > round (Wavecount / WaveTypeMultiplier + (Multiplier / 0.4))) then {_spawnType = ["inf","sup","mot"] call BIS_fnc_selectRandom;}; publicVariable _spawnType; switch (_spawnType) do6 { case "inf": { // configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Infantry" >> _randomInfSquad _randomSquad = ["OIA_InfSquad", "OIA_InfSquad_Weapons", "OIA_InfTeam", "OIA_InfTeam_AT"] call BIS_fnc_selectRandom; _type = "Infantry"; }; case "mot": { // configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Motorized_MTP" >> _randomMotorizedSquad _randomSquad = ["OIA_MotInf_AT", "OIA_MotInf_Team"] call BIS_fnc_selectRandom; }; case "sup": { // configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Support" >> _randomSupportSquad _randomSquad = ["OI_support_CLS", "OI_support_ENG", "OI_support_EOD"] call BIS_fnc_selectRandom; _type = "Support"; }; }; publicVariable _randomSquad; publicVariable _type; if (_spawnType == "mot") then { _RoadSpawns = ["RoadSpawn1","RoadSpawn2","RoadSpawn3"] call BIS_fnc_selectRandom; publicVariable "_RoadSpawns"; _grpMot = [getMarkerPos _RoadSpawns, EAST, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> "Motorized_MTP" >> _randomSquad)] call BIS_fnc_spawnGroup; publicVariable "_grpMot"; [_grpMot, getMarkerPos "Defend", 150] call CBA_fnc_taskAttack; _grpMot allowFleeing false; } else { _Spawns = ["Spawn1","Spawn2","Spawn3","Spawn4","Spawn5","Spawn6","Spawn7","Spawn8"] call BIS_fnc_selectRandom; publicVariable "_Spawns"; _grpInf = [getMarkerPos _Spawns, EAST, (configfile >> "CfgGroups" >> "East" >> "OPF_F" >> _type >> _randomSquad)] call BIS_fnc_spawnGroup; publicVariable "_grpInf"; [_grpInf, getMarkerPos "Defend", 150] call CBA_fnc_taskAttack; _grpInf allowFleeing false; }; sleep WaveSpawnDelay; }; waitUntil {!Opfor_Present}; }; Scripts\Timer.sqf private ["_Cur_Time"]; _Cur_Time = Timer; publicVariable "_Cur_Time"; For "_i" from Timer to 0 step -1 do { Hint Format ["%1 Seconds left until next Wave",_Cur_Time]; sleep 1; _Cur_Time = _Cur_Time - 1; publicVariable "Cur_Time"; }; TimerDone = true; publicVariable "TimerDone"; sleep 5; TimerDone = false; publicVariable "TimerDone"; exit; Any help will be appreciate, as it will help boost my learning skills and maybe hopefully teach other people on the forums =) ---------- Post added at 23:09 ---------- Previous post was at 23:04 ---------- Major Troubles/Questions: 1. I have no idea how to create an effective Multiplier (<- MULT I PLIER NOT MULTI PLAYER. That word plays a trick on the eyes hence the reason I made it bold lol) that works universally. My maths are not great so MY logic behind a multiplier wont be lol :P 2. WEST4 is not being found in Description.ext when starting a mission. WEST4 is related to the Respawn Inventory. 3. When the timer counts down on the hints dialog, it makes that horrible beeping sound. Is there any way to set your own beeping sound? 4. Multiplayer parameters. I've looked into it, but the page on the BIKI doesnt seem to be available, at least for titleParams%. -
TPW FOG: foggy breath for Arma 3
Woodpeckersam replied to tpw's topic in ARMA 3 - ADDONS & MODS: COMPLETE
Ah fantastic! Well done TPW, I kinda expected you to make this mod pretty quickly after figuring out how cold it can get on Lemnos lol :P Have you ever thought to maybe change the colour tint of the screen's postprocess depending on the seasons? Obviously a slight greyer tint (without removing the colours obviously) would show to the user that it is colder and darker, and a brighter tint shows summer and hot weather. Combined with this foggy breath and the colder postprocess for winter will really make the user feel they are in a colder environment. Maybe not tie in with this mod, maybe a seperate one but it would be great :D Why cant we Upvote++ on the forums lol :P -
VTS 4.0 - Live Multiplayer Mission Creating Tool for A3
Woodpeckersam replied to l etranger's topic in ARMA 3 - USER MISSIONS
Brilliant stuff. Is there a possibility in the future of being able to select and object to place whilst in the 3d placement mode? It would be unique if somehow in a small window when selecting an object, the actual 3d object appears rotating so you know what you are selecting. Probably a long shot, just thought I'd add the idea :D Loving this mission creation tool! Edit: Is it possible you can lock the object in place and still be able to change its position? I find it difficult to place big objects down because I cannot see it from all angles, so locking it in place, being able to freely move around the object whilst still being able to move it about would help brilliantly :D -
Visual ArmA 3 Class Name Library (WIP)
Woodpeckersam replied to Alex Dyre's topic in ARMA 3 - MISSION EDITING & SCRIPTING
This is a great idea! A visual config library. I dont know what coding format you use, but if you could find a way to implement images that can be rotated by the user so we can actually see the objects from all angles. Im ArmA 3 it is really simple, create a script to rotate any objects/vehicles and screen shot from different angles etc. Then have the image move to the next image or previous image depending on which way the user wants to turn the object around. You would need at least 8 images. Front, Front Left, Left, Back Left, Back, Back Right, Right, Front Right. If you think you can do this, we can help out to get images for you and name them appropriately. But if not, it's still a great idea =) I didnt realise the Bobcat has some sort of crane on the front of it... I wonder if it works.... -
Lol thanks for voting up the ticket, i hope you can all spread the word :D I typed Navmesh on the forum search to see if there has been any mention of this in the past, and I came across this post. My Navmesh idea will solve AI problems big time.
-
TPW CIVS: ambient civilians and traffic for Arma 3
Woodpeckersam replied to tpw's topic in ARMA 3 - ADDONS & MODS: COMPLETE
@TPW Well if you are living in a hot country ever since you were born, you will notice the difference in temperatures when it is summer vs winter, hence why you sometimes, as tourists in a hot country see people wearing jackets around the winter time, whilst they wear t-shirts and shorts. I live in the UK, so the summers here can get very hot and the winters very cold. Big differences and we obviously feel that. I went to egypt around August time a few years back, and boy it was 30degrees! Compared to the UK's 15-20degrees. And that was hot! But the egyptian people were wearing jackets saying how cold it is lol, cos they are used to the 40+degrees mark. So I do wonder myself how cold it gets in the "Altis" part of the Med... when i get time i'll have a quick look online =) edit: Well i did have 5 minutes, and I found this VERY quickly :P http://weatherspark.com/averages/32194/Lemnos-Limnos-North-Aegean-Islands-Greece that helps =) -
TPW CIVS: ambient civilians and traffic for Arma 3
Woodpeckersam replied to tpw's topic in ARMA 3 - ADDONS & MODS: COMPLETE
@TPW No problems at all mate. Sorry I havent been replying regarding the headgear, the only way I can seem to get it to work now is basically the same way i did it with the clothes except have empty parts in the array such as ["hat","","strawhat",""] etc. I dont know why the command i use isnt working... but i havent had a great deal of time to do a proper check, lots of things going on in RL right now. I wonder if there are Topless clothing with shorts. If so then it could be possible to tie clothing in with the weather, if it is hot/humid then allow the topless clothing to be used, if it is wet/cold then wear the normal clothes. http://community.bistudio.com/wiki/humidity Anyways great stuff, you have changed ArmA 3 forever lol! -
TPW CIVS: ambient civilians and traffic for Arma 3
Woodpeckersam replied to tpw's topic in ARMA 3 - ADDONS & MODS: COMPLETE
TPW: Apologies for getting back so late. I cannot figure out why it has stopped working all of a sudden... Its not throwing out any errors :/ (The headgear that is) But it worked in a mock up mission I made about a month ago... Forgive me, i'll try and figure it out. Glad the changing of clothes work though. -
How do I create dynamic patrols now?
Woodpeckersam replied to redpiano's topic in ARMA 3 - MISSION EDITING & SCRIPTING
Saying you dont want to learn scripting, but you want to use the editor... well mate you will learn scripting no matter lol! Its how we all started. I started in OFP I refused to learn scripting, but in the end I picked things up. Kylania though, knows his stuff. Best of luck mate. Need anything just ask :) -
Trigger all OPFOR dead not working?
Woodpeckersam replied to Alcatraz968's topic in ARMA 3 - MISSION EDITING & SCRIPTING
As long as the trigger covers the whole area. Name: OPFOR_All_Dead (You dont need to name it) Text: Triggers when all OPFOR are dead (Again you dont need to write anything here) Type: None Activation: OPFOR Not present Condition: This This will activate when the trigger does not detect any OPFOR inside it. Having "This" as the condition is basically telling the game to activate the trigger when ALL the trigger conditions are met, hence the "Not Present" and "Activation: OPFOR". Having "True" as the condition will force the trigger to activate regardless of the condition. So firstly show us what is in your condition box.