Jump to content

[Release] Wicked AI 2.2.0


f3cuk

Recommended Posts

Update on progress

We Jossy has been making great progress on 2.1.0. Almost all milestones we have set for 2.1.0+ have been incorporated which is something I would never have expected to happen so soon. Once we get the initial testing done and reasonably bugfree we will release a public beta 2.1.0 for everyone to test. This will help us counter having to release a lot of small patches after release.

Upcoming in 2.1.0

  • Bandit, hero and special missions
  • More missions overall
  • Multi mission support
  • Enhanced markers
  • A lot of other stuff

 

Still looking for help on extra missions

 

We've talked about this before, but feel like this is something we can't stress enough. It's lovely to have a good working mission system but.. like a lot of things, content is key. Right now we have about 10 bandit and hero missions. All of which are based on already existing ones with little new stuff for players to experience. To prevent players from getting bored with the missions, our goal is to have 30+ different quality missions for both the bandit and hero type and at least 5 special missions that should be completely different from what you have seen so far.

For our 2.1.0. release we have tried to further simplify the mission files which should allow more people to have a go at it. In fact, with the help of the new mission template file i'm convinced my grandma could make a kick-ass mission so there's no real reason why you should not.

So here's the mission template

(once again, we have Jossy to thank for this, remember to hit the like button on the next post he makes)

if(isServer) then {
	 
	private 		["_baserunover","_mission","_directions","_position","_crate","_num"];

	// Get a safe position 80 meters from the nearest object
	_position		= [80] call init_mission;
	
	// Initialise the mission variable with the following options, [position, difficulty, mission name, mission type (MainHero/MainBandit), minefield (true or false)] call init_mission;
	_mission 		= [_position,"Hard","Test Mission","MainHero",true] call init_mission;
	diag_log 		format["WAI: Mission Test Mission started at %1",_position];

	// Spawn a Gun Box
	_crate 			= createVehicle ["RUVehicleBox",[(_position select 0),(_position select 1),0], [], 0, "CAN_COLLIDE"];
	[_crate] 		call Extra_Large_Gun_Box;
	 
	// Create some Buildings
	_baserunover0 	= createVehicle ["land_fortified_nest_big",[(_position select 0) - 40, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover1 	= createVehicle ["land_fortified_nest_big",[(_position select 0) + 40, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover2 	= createVehicle ["land_fortified_nest_big",[(_position select 0), (_position select 1) - 40,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover3 	= createVehicle ["land_fortified_nest_big",[(_position select 0), (_position select 1) + 40,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover4 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0) - 10, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover5 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0) + 10, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover6 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0), (_position select 1) - 10,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover7 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0), (_position select 1) + 10,-0.2],[], 0, "CAN_COLLIDE"];
	
	// Adding buildings to one variable just for tidiness
	_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7];
	
	// Set some directions for our buildings
	_directions = [90,270,0,180,0,180,270,90];
	{ _x setDir (_directions select _forEachIndex) } forEach _baserunover;

	// Make buildings flat on terrain surface
	{ _x setVectorUp surfaceNormal position _x; } count _baserunover;

	// Group Spawn Examples
	// Parameters:	0: Position
	//				1: Unit Count
	//				2: Unit Skill ("easy","medium","hard","extreme" or "random")
	//				3: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random")
	//				4: Magazine Count
	//				5: Backpack ("Random" or "classname")
	//				6: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				7: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random")
	//				8: AI Type ("Bandit","Hero","Special" or ["type", #] format to overwrite default gain amount) ***Used to determine humanity gain or loss***
	//				9: Mission variable from line 9 (_mission)
	_num = round (random 3) + 4;
	[[_position select 0, _position select 1, 0],_num,"Extreme","Random",4,"Random","Bandit","Random",["Bandit",150],_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Hard","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;


	// Humvee Patrol Example
	// Parameters:	0: Patrol position
	//				1: Starting position
	//				2: Patrol radius
	//				3: Number of Waypoints
	//				4: Vehicle classname
	//				5: Unit Skill ("easy","medium","hard","extreme" or "random")
	//				6: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				7: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				8: Mission variable from line 9 (_mission)
	[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Random","Bandit","Bandit",_mission] call vehicle_patrol;
	 
	// Static Turret Examples
	// Parameters:	0: Spawn position
	//				1: Classname ("classname" or "Random" to pick from ai_static_weapons)
	//				2: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;***
	//				3: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				4: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				5: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random") ***NO effect if ai_static_useweapon = false;***
	//				6: Magazine Count ***NO effect if ai_static_useweapon = false;***
	//				7: Backpack ("Random" or "classname") ***NO effect if ai_static_useweapon = false;***
	//				8: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random") ***NO effect if ai_static_useweapon = false;***
	//				9: Mission variable from line 9 (_mission)
	};
	[[[(_position select 0) - 10, (_position select 1) + 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) + 10, (_position select 1) - 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) + 10, (_position select 1) + 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) - 10, (_position select 1) - 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;

	// Heli Paradrop Example
	// Parameters:	0: Paradrop position
	//				1: Spawn position
	//				2: Trigger radius
	//				3: Vehicle classname
	//				4: Amount of paratroopers
	//				5: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;***
	//				6: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random")
	//				7: Magazine Count
	//				8: Backpack ("Random" or "classname")
	//				9: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				10: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random")
	//				11: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				12: Heli stay and fight after troop deployment? (true or false)
	//				13: Mission variable from line 9 (_mission)
	[[(_position select 0), (_position select 1), 0],[0,0,0],400,"UH1H_DZ",10,"Random","Random",4,"Random","Bandit","Random","Bandit",true,_mission] spawn heli_para;

	// Assassination target example
	// This is the same as normal group spawns but we assign it to a variable instead for use in the trigger below (if there are multiple units in this group you'll need to kill them all)
	_assassinate = [[_position select 0, _position select 1, 0],1,"Hard","Random",4,"Random","Special","Random","Bandit",_mission] call spawn_group;

	// Mission objective options and messages
	[
		[_mission,_crate],	// mission variable (from line 9) and crate
		["crate"], 			// Mission objective type (["crate"], or ["kill",wai_kill_percent], or ["assassinate", _assassinate])
		[_baserunover], 	// buildings to cleanup after mission is complete, does not include the crate
		"A Mission has spawned, hurry up to claim the loot!",	// mission announcement
		"The mission was complete/objective reached",			// mission success
		"The mission timed out and nobody was in the vicinity"	// mission fail
	] call mission_winorfail;

	// End of mission
	diag_log format["WAI: Mission bandit base ended at %1 ended",_position];
	h_missionrunning = false; // h_missionrunning = false; => Hero mission | b_missionrunning = false; => Bandit mission
};

Link to comment
Share on other sites

Update on progress

We Jossy has been making great progress on 2.1.0. Almost all milestones we have set for 2.1.0+ have been incorporated which is something I would never have expected to happen so soon. Once we get the initial testing done and reasonably bugfree we will release a public beta 2.1.0 for everyone to test. This will help us counter having to release a lot of small patches after release.

Upcoming in 2.1.0

  • Bandit, hero and special missions
  • More missions overall
  • Multi mission support
  • Enhanced markers
  • A lot of other stuff

 

Still looking for help on extra missions

 

We've talked about this before, but feel like this is something we can't stress enough. It's lovely to have a good working mission system but.. like a lot of things, content is key. Right now we have about 10 bandit and hero missions. All of which are based on already existing ones with little new stuff for players to experience. To prevent players from getting bored with the missions, our goal is to have 30+ different quality missions for both the bandit and hero type and at least 5 special missions that should be completely different from what you have seen so far.

For our 2.1.0. release we have tried to further simplify the mission files which should allow more people to have a go at it. In fact, with the help of the new mission template file i'm convinced my grandma could make a kick-ass mission so there's no real reason why you should not.

So here's the mission template

(once again, we have Jossy to thank for this, remember to hit the like button on the next post he makes)

if(isServer) then {
	 
	private 		["_baserunover","_mission","_directions","_position","_crate","_num"];

	// Get a safe position 80 meters from the nearest object
	_position		= [80] call init_mission;
	
	// Initialise the mission variable with the following options, [position, difficulty, mission name, mission type (MainHero/MainBandit), minefield (true or false)] call init_mission;
	_mission 		= [_position,"Hard","Test Mission","MainHero",true] call init_mission;
	diag_log 		format["WAI: Mission Test Mission started at %1",_position];

	// Spawn a Gun Box
	_crate 			= createVehicle ["RUVehicleBox",[(_position select 0),(_position select 1),0], [], 0, "CAN_COLLIDE"];
	[_crate] 		call Extra_Large_Gun_Box;
	 
	// Create some Buildings
	_baserunover0 	= createVehicle ["land_fortified_nest_big",[(_position select 0) - 40, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover1 	= createVehicle ["land_fortified_nest_big",[(_position select 0) + 40, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover2 	= createVehicle ["land_fortified_nest_big",[(_position select 0), (_position select 1) - 40,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover3 	= createVehicle ["land_fortified_nest_big",[(_position select 0), (_position select 1) + 40,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover4 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0) - 10, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover5 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0) + 10, (_position select 1),-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover6 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0), (_position select 1) - 10,-0.2],[], 0, "CAN_COLLIDE"];
	_baserunover7 	= createVehicle ["Land_Fort_Watchtower",[(_position select 0), (_position select 1) + 10,-0.2],[], 0, "CAN_COLLIDE"];
	
	// Adding buildings to one variable just for tidiness
	_baserunover = [_baserunover0,_baserunover1,_baserunover2,_baserunover3,_baserunover4,_baserunover5,_baserunover6,_baserunover7];
	
	// Set some directions for our buildings
	_directions = [90,270,0,180,0,180,270,90];
	{ _x setDir (_directions select _forEachIndex) } forEach _baserunover;

	// Make buildings flat on terrain surface
	{ _x setVectorUp surfaceNormal position _x; } count _baserunover;

	// Group Spawn Examples
	// Parameters:	0: Position
	//				1: Unit Count
	//				2: Unit Skill ("easy","medium","hard","extreme" or "random")
	//				3: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random")
	//				4: Magazine Count
	//				5: Backpack ("Random" or "classname")
	//				6: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				7: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random")
	//				8: AI Type ("Bandit","Hero","Special" or ["type", #] format to overwrite default gain amount) ***Used to determine humanity gain or loss***
	//				9: Mission variable from line 9 (_mission)
	_num = round (random 3) + 4;
	[[_position select 0, _position select 1, 0],_num,"Extreme","Random",4,"Random","Bandit","Random",["Bandit",150],_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Hard","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;
	[[_position select 0, _position select 1, 0],4,"Random","Random",4,"Random","Bandit","Random","Bandit",_mission] call spawn_group;


	// Humvee Patrol Example
	// Parameters:	0: Patrol position
	//				1: Starting position
	//				2: Patrol radius
	//				3: Number of Waypoints
	//				4: Vehicle classname
	//				5: Unit Skill ("easy","medium","hard","extreme" or "random")
	//				6: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				7: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				8: Mission variable from line 9 (_mission)
	[[(_position select 0) + 100, _position select 1, 0],[(_position select 0) + 100, _position select 1, 0],50,2,"HMMWV_Armored","Random","Bandit","Bandit",_mission] call vehicle_patrol;
	 
	// Static Turret Examples
	// Parameters:	0: Spawn position
	//				1: Classname ("classname" or "Random" to pick from ai_static_weapons)
	//				2: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;***
	//				3: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				4: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				5: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random") ***NO effect if ai_static_useweapon = false;***
	//				6: Magazine Count ***NO effect if ai_static_useweapon = false;***
	//				7: Backpack ("Random" or "classname") ***NO effect if ai_static_useweapon = false;***
	//				8: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random") ***NO effect if ai_static_useweapon = false;***
	//				9: Mission variable from line 9 (_mission)
	};
	[[[(_position select 0) - 10, (_position select 1) + 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) + 10, (_position select 1) - 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) + 10, (_position select 1) + 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;
	[[[(_position select 0) - 10, (_position select 1) - 10, 0]],"M2StaticMG","Easy","Bandit","Bandit",0,2,"Random","Random",_mission] call spawn_static;

	// Heli Paradrop Example
	// Parameters:	0: Paradrop position
	//				1: Spawn position
	//				2: Trigger radius
	//				3: Vehicle classname
	//				4: Amount of paratroopers
	//				5: Unit Skill ("easy","medium","hard","extreme" or "random") ***NO effect if ai_static_skills = true;***
	//				6: Gun (0:ai_wep_assault 1:ai_wep_machine 2:ai_wep_sniper or "Random")
	//				7: Magazine Count
	//				8: Backpack ("Random" or "classname")
	//				9: Skin ("Hero","Bandit","Random","Special" or "classname")
	//				10: Gear (0:ai_gear0, 1:ai_gear1, 2:ai_gear2, 3:ai_gear3, 4:ai_gear4 or "Random")
	//				11: AI Type ("Bandit","Hero" or "Special") ***Used to determine humanity gain or loss***
	//				12: Heli stay and fight after troop deployment? (true or false)
	//				13: Mission variable from line 9 (_mission)
	[[(_position select 0), (_position select 1), 0],[0,0,0],400,"UH1H_DZ",10,"Random","Random",4,"Random","Bandit","Random","Bandit",true,_mission] spawn heli_para;

	// Assassination target example
	// This is the same as normal group spawns but we assign it to a variable instead for use in the trigger below (if there are multiple units in this group you'll need to kill them all)
	_assassinate = [[_position select 0, _position select 1, 0],1,"Hard","Random",4,"Random","Special","Random","Bandit",_mission] call spawn_group;

	// Mission objective options and messages
	[
		[_mission,_crate],	// mission variable (from line 9) and crate
		["crate"], 			// Mission objective type (["crate"], or ["kill",wai_kill_percent], or ["assassinate", _assassinate])
		[_baserunover], 	// buildings to cleanup after mission is complete, does not include the crate
		"A Mission has spawned, hurry up to claim the loot!",	// mission announcement
		"The mission was complete/objective reached",			// mission success
		"The mission timed out and nobody was in the vicinity"	// mission fail
	] call mission_winorfail;

	// End of mission
	diag_log format["WAI: Mission bandit base ended at %1 ended",_position];
	h_missionrunning = false; // h_missionrunning = false; => Hero mission | b_missionrunning = false; => Bandit mission
};

 

I am 100% gunna make a mission that gets added to 2.1.0 or higher :P

Link to comment
Share on other sites

In no way that's the weird part im asking GTX gaming now if they don't give a good answer time to go dedicated 

 

Shame there so expensive :/

 

I stopped hosting with GTX due to 

1) Spammed emails

2) server started lagging (never added anything new during the time frame)

3) "Ghost" restarts (even when it was disabled) 

4) Slow ticket responses (3 days in one case and another ticket NEVER got answered, that was my final straw)

 

I'm now on dedicated. It's worth it

Link to comment
Share on other sites

I stopped hosting with GTX due to 

1) Spammed emails

2) server started lagging (never added anything new during the time frame)

3) "Ghost" restarts (even when it was disabled) 

4) Slow ticket responses (3 days in one case and another ticket NEVER got answered, that was my final straw)

 

I'm now on dedicated. It's worth it

 

 

Strange they answer me within 1 hour of sending ticket

 

Doesn't seem to be lagging with 20 players on

 

And restarts work fine 

Link to comment
Share on other sites

Keep up the good work.

 

I have 2 suggestions to make.

 

1) Could you make it so the crates dont spawn, or fill until the mission objective is complete.

 

2) Could we seperate the weapon arrays into skill levels. e.g.

 

ai_wep_sniper_extreme = [["SVD_CAMO","10Rnd_762x54_SVD"],["VSS_Vintorez","20Rnd_9x39_SP5_VSS"],["DMR","20Rnd_762x51_DMR"],["M40A3","5Rnd_762x51_M24"]]; // Sniper rifles extreme

 

ai_wep_sniper_hard = [["M14_EP1","20Rnd_762x51_DMR"],["SCAR_H_LNG_Sniper_SD","20Rnd_762x51_SB_SCAR"],["M110_NVG_EP1","20rnd_762x51_B_SCAR"]]; // Sniper rifles hard

 

etc. That way the boxes could be filled dynamically with weapons akin to the difficulty of the mission.

 

Thanks for reading

Link to comment
Share on other sites

I have noticed the missions just wont start when there is more then 5 players i guess this is because of lag ?

There is a way of monitoring server fps, must be a guide here somewhere.

 

If not try setting wai_server_fps to 0 to see if that makes them spawn, I assume this will in effect turn the check off.

Link to comment
Share on other sites

@f3cuk

 

Having a lot of fun with this script so far, but ran into a few things with static AI.

 

I have been adding Static AI to several areas on my map, and have some bugs/input to report:

-AI Seem to just patrol right through castle walls like they aren't there.

-Some groups aren't spawning at the exact locations (they seems to be off my 10-15 meters in some cases)

-With only 1-2 people on our test server even the extreme AI don't see you for 10-20 seconds (you can literally run circles around them till they notice)

 

Input:

-We would love to have control over the behavior of each group. Right now its either they all communicate or they don't, or they all patrol the same radius with the same way points. If we could control each group it would really allow us to customize how they AI get pulled, alerted, etc.

Link to comment
Share on other sites

It's not really an issue guys, at least its not something they can easily fix. This is simply what shared hosting is. The box they got you on probably has a sick CPU in it, but you have to share that with 20 other servers so there's not much left. Also seeing as ARMA 2 is really badly optimized for multiple CPU usage, you are probably better off building your own, invest in a CPU with high Single Core Performance and you should be good to go. Maybe use the money you save each month on a higher internet plan with the possibility of a fixed IP (this is something you really want).

 

If you'd like i could point you in the right direction, depending on your budget i could together a (fairly - i do love Intel cause of their epic SCP lol) unbiased list of parts.

Link to comment
Share on other sites

Is it still possible to use the "Bunny Ranch" mission?

 

The files are different in this version so I'm not sure how to install...

 

If you want to point me towards this I can correctly format it to include in 2.1.0

Keep up the good work.

 

I have 2 suggestions to make.

 

1) Could you make it so the crates dont spawn, or fill until the mission objective is complete.

 

2) Could we seperate the weapon arrays into skill levels. e.g.

 

ai_wep_sniper_extreme = [["SVD_CAMO","10Rnd_762x54_SVD"],["VSS_Vintorez","20Rnd_9x39_SP5_VSS"],["DMR","20Rnd_762x51_DMR"],["M40A3","5Rnd_762x51_M24"]]; // Sniper rifles extreme

 

ai_wep_sniper_hard = [["M14_EP1","20Rnd_762x51_DMR"],["SCAR_H_LNG_Sniper_SD","20Rnd_762x51_SB_SCAR"],["M110_NVG_EP1","20rnd_762x51_B_SCAR"]]; // Sniper rifles hard

 

etc. That way the boxes could be filled dynamically with weapons akin to the difficulty of the mission.

 

Thanks for reading

Yeah we could do this

Link to comment
Share on other sites

It's not really an issue guys, at least its not something they can easily fix. This is simply what shared hosting is. The box they got you on probably has a sick CPU in it, but you have to share that with 20 other servers so there's not much left. Also seeing as ARMA 2 is really badly optimized for multiple CPU usage, you are probably better off building your own, invest in a CPU with high Single Core Performance and you should be good to go. Maybe use the money you save each month on a higher internet plan with the possibility of a fixed IP (this is something you really want).

 

If you'd like i could point you in the right direction, depending on your budget i could together a (fairly - i do love Intel cause of their epic SCP lol) unbiased list of parts.

 

Please point pe the way i have a budget atm of £25 or £30 max for a better server it cant even handle WAI mission on GTX

 

The best part is that he said there is 32 cores and only 4 servers on that machine that's what gets me 

Link to comment
Share on other sites

I've got a Dedibox Classic from Online.net, 35 EUR/month although you have to provide your own licenses for OS and whatnot. Gives me a server FPS of 50 on Epoch Namalsk.

 

On-topic though, why the hell don't Tank Traps disappear properly? Starting to bug the hell out of me :P

 

Also, here's an update to spawn_group.sqf to enable the addition of unarmed NPCs, for Bunny Ranch and other similar missions.

if (isServer) then {

	private ["_mission","_aipack","_aicskill","_position","_unitnumber","_skill","_gun","_mags","_backpack","_skin","_gear","_aiweapon","_aigear","_aiskin","_skillarray","_unitGroup","_weapon","_magazine","_weaponandmag","_gearmagazines","_geartools","_unit","_unarmed"];

	_position 			= _this select 0;
	_unitnumber 		= _this select 1;
	_skill 				= _this select 2;
	_gun 				= _this select 3;
	_mags 				= _this select 4;
	_backpack 			= _this select 5;
	_skin 				= _this select 6;
	_gear 				= _this select 7;

	if (count _this > 8) then {
		_mission = _this select 8;
	} else {
		_mission = false;
	};

	_unarmed 			= false;
	_aiweapon 			= [];
	_aigear 			= [];
	_aiskin 			= "";
	_aicskill 			= [];
	_aipack 			= "";
	_skillarray 		= ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];
	_unitGroup 			= createGroup east;
	_current_time		= time;

	for "_x" from 1 to _unitnumber do {

		switch (_gun) do {
			case 0 : {_aiweapon = ai_wep_assault;};
			case 1 : {_aiweapon = ai_wep_machine;};
			case 2 : {_aiweapon = ai_wep_sniper;};
			case "Unarmed" : {_unarmed = true;};
			case "Random" : {_aiweapon = ai_wep_random call BIS_fnc_selectRandom;};
		};

		if (!_unarmed) then {
			_weaponandmag 	= _aiweapon call BIS_fnc_selectRandom;
			_weapon 		= _weaponandmag select 0;
			_magazine 		= _weaponandmag select 1;
		};

		switch (_gear) do {
			case 0 : {_aigear = ai_gear0;};
			case 1 : {_aigear = ai_gear1;};
			case 2 : {_aigear = ai_gear2;};
			case 3 : {_aigear = ai_gear3;};
			case 4 : {_aigear = ai_gear4;};
			case "Random" : {_aigear = ai_gear_random call BIS_fnc_selectRandom;};
		};
		
		_gearmagazines = _aigear select 0;
		_geartools = _aigear select 1;

		if (_skin == "Random") then {
			_aiskin = ai_skin call BIS_fnc_selectRandom;
		} else {
			_aiskin = _skin;
		};

		_unit = _unitGroup createUnit [_aiskin, [(_position select 0),(_position select 1),(_position select 2)], [], 10, "PRIVATE"];
		[_unit] joinSilent _unitGroup;

		if (_backpack == "Random") then {
			_aipack = ai_packs call BIS_fnc_selectRandom;
		} else {
			_aipack = _backpack;
		};
		
		_unit enableAI "TARGET";
		_unit enableAI "AUTOTARGET";
		_unit enableAI "MOVE";
		_unit enableAI "ANIM";
		_unit enableAI "FSM";
		_unit setCombatMode ai_combatmode;
		_unit setBehaviour ai_behaviour;
		removeAllWeapons _unit;
		removeAllItems _unit;

		if (!_unarmed) then {
			_unit addweapon _weapon;
		};
		
		if (sunOrMoon != 1) then {
			_unit addweapon "NVGoggles";
		};

		if (!_unarmed) then {
			for "_i" from 1 to _mags do {
				_unit addMagazine _magazine;
			};
		};
		
		_unit addBackpack _aipack;

		{
			_unit addMagazine _x
		} foreach _gearmagazines;

		{
			_unit addweapon _x
		} foreach _geartools;
		
		switch (_skill) do {
			case "easy"		: { _aicskill = ai_skill_easy; };
			case "medium" 	: { _aicskill = ai_skill_medium; };
			case "hard" 	: { _aicskill = ai_skill_hard; };
			case "extreme" 	: { _aicskill = ai_skill_extreme; };
			case "Random" 	: { _aicskill = ai_skill_random call BIS_fnc_selectRandom; };
			default { _aicskill = ai_skill_random call BIS_fnc_selectRandom; };
		};

		{
			_unit setSkill [(_x select 0),(_x select 1)]
		} foreach _aicskill;
		
		ai_ground_units = (ai_ground_units + 1);

		_unit addEventHandler ["Killed",{[_this select 0, _this select 1, "ground"] call on_kill;}];

		if (_mission) then {
			_unit setVariable ["missionclean", "ground"];
		};

	};
	// Stops them from killing eachother when they fire..
	_unitGroup setFormation "ECH LEFT";

	_unitGroup selectLeader ((units _unitGroup) select 0);

	[_unitGroup, _position, _mission] call group_waypoints;

	diag_log format ["WAI: Spawned a group of %1 bandits at %2", _unitnumber, _position];
};
Link to comment
Share on other sites

@f3cuk

 

Having a lot of fun with this script so far, but ran into a few things with static AI.

 

I have been adding Static AI to several areas on my map, and have some bugs/input to report:

-AI Seem to just patrol right through castle walls like they aren't there.

-Some groups aren't spawning at the exact locations (they seems to be off my 10-15 meters in some cases)

-With only 1-2 people on our test server even the extreme AI don't see you for 10-20 seconds (you can literally run circles around them till they notice)

 

Input:

-We would love to have control over the behavior of each group. Right now its either they all communicate or they don't, or they all patrol the same radius with the same way points. If we could control each group it would really allow us to customize how they AI get pulled, alerted, etc.

 

you can do this now with the 2.1.0 update from the mission file if you know what you were doing, but it is definitely something I wouldn't mind adding an optional array to allow easy configuration of groups.

 

for now (after the 2.1.0 release) if you want you can set the behaviour of the AI using a return variable _group example:

_group = [[_position select 0, _position select 1, 0],4,"Extreme","Random",4,"Random","Hero","Random","Hero",_mission,] call spawn_group;
_group setBehaviour "SAFE";
Link to comment
Share on other sites

I've got a Dedibox Classic from Online.net, 35 EUR/month although you have to provide your own licenses for OS and whatnot. Gives me a server FPS of 50 on Epoch Namalsk.

 

On-topic though, why the hell don't Tank Traps disappear properly? Starting to bug the hell out of me :P

 

Also, here's an update to spawn_group.sqf to enable the addition of unarmed NPCs, for Bunny Ranch and other similar missions.

 

Thanks! I've never actually seen the bunny ranch mission, but I do have a few idea's for non-combat missions I wanted to try and implement so this will help with that ;)

 

Oh also the tank traps are removed in 2.1.0, minefields will be enough to deter people from driving up to the mission before it's complete :P

Edited by Jossy
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Advertisement
×
×
  • Create New...