Jump to content

[HowTo] add Chernarus-Spawnselection


jOoPs

Recommended Posts

  • 2 weeks later...

While we're tossing around the dayz_server/compile/server_playersetup.sqf.

 

I've got the zupa coin script running, and would like to merge the spawn selection into it.  Any help is greatly appreciated.  Excellent work on this and thank you so much for making it public!

http://pastebin.com/NhBk1FQc

 

I'm on 1.0.5.1

 

**update**

I believe I have a good server_playersetup.sqf but I am getting this error

ErrorMessage: File mpmissions\DayZ_Epoch_11.Chernarus\dayz_code\config\RscDisplaySpawnSelecter.hpp, line 40: .RscStructuredText: Member already defined.

Link to comment
Share on other sites

For soul version server_playersetup.sqf

private ["_characterID","_playerObj","_playerID","_dummy","_worldspace","_state","_doLoop","_key","_primary","_medical","_stats","_humanity","_lastinstance","_friendlies","_randomSpot","_position","_debug","_distance","_hit","_fractures","_score","_findSpot","_pos","_isIsland","_w","_clientID","_spawnMC","_namespace"];

//diag_log ("SETUP: attempted with " + str(_this));

_characterID = _this select 0;
_playerObj = _this select 1;
_playerID = getPlayerUID _playerObj;
_playerName = name _playerObj;

if (isNull _playerObj) exitWith {
	diag_log ("SETUP INIT FAILED: Exiting, player object null: " + str(_playerObj));
};

//Add MPHit event handler
// diag_log("Adding MPHit EH for " + str(_playerObj));
_playerObj addMPEventHandler ["MPHit", {_this spawn fnc_plyrHit;}];

if (_playerID == "") then {
	_playerID = getPlayerUID _playerObj;
};

if (_playerID == "") exitWith {
	diag_log ("SETUP INIT FAILED: Exiting, no player ID: " + str(_playerObj));
};

private["_dummy"];
_dummy = getPlayerUID _playerObj;
if ( _playerID != _dummy ) then { 
	diag_log format["DEBUG: _playerID miscompare with UID! _playerID:%1",_playerID]; 
	_playerID = _dummy;
};

//Variables
_worldspace = 	[];

_state = 		[];
//Soul start: SC Edit >>> initialize variables in main scope (helps avoiding scope issues within the file and avoids undeclared variable errors in rpt, aswell they server as default values if anything goes wrong)
_cashMoney = 0;
_bankMoney = 0;
//Soul end: SC Edit

//Do Connection Attempt
_doLoop = 0;
while {_doLoop < 5} do {
	_key = format["CHILD:102:%1:",_characterID];
	_primary = _key call server_hiveReadWrite;
	if (count _primary > 0) then {
		if ((_primary select 0) != "ERROR") then {
			_doLoop = 9;
		};
	};
	_doLoop = _doLoop + 1;
};

if (isNull _playerObj || !isPlayer _playerObj) exitWith {
	diag_log ("SETUP RESULT: Exiting, player object null: " + str(_playerObj));
};

//Wait for HIVE to be free
//diag_log ("SETUP: RESULT: Successful with " + str(_primary));

_medical =		_primary select 1;
_stats =		_primary select 2;
_state =		_primary select 3;
_worldspace = 	_primary select 4;
_humanity =		_primary select 5;
_lastinstance =	_primary select 6;
//Soul start: SC Edit >>> loading player cash into variable / overwriting default 0 value with returned value.
_cashMoney = 	_primary select 7;
//Soul end: SC Edit

//Set position
_randomSpot = false;

if (count _worldspace > 0) then {

	_position = 	_worldspace select 1;
	if (count _position < 3) then {
		//prevent debug world!
		_randomSpot = true;
	};
	_debug = getMarkerpos "respawn_west";
	_distance = _debug distance _position;
	if (_distance < 2000) then {
		_randomSpot = true;
	};
	
	_distance = [0,0,0] distance _position;
	if (_distance < 500) then {
		_randomSpot = true;
	};
	
	// Came from another server force random spawn
	if (_lastinstance != dayZ_instance) then {
		_randomSpot = true;
	};

	//_playerObj setPosATL _position;
} else {
	_randomSpot = true;
};

//diag_log ("LOGIN: Location: " + str(_worldspace) + " doRnd?: " + str(_randomSpot));

//set medical values
if (count _medical > 0) then {
	_playerObj setVariable["USEC_isDead",(_medical select 0),true];
	_playerObj setVariable["NORRN_unconscious", (_medical select 1), true];
	_playerObj setVariable["USEC_infected",(_medical select 2),true];
	_playerObj setVariable["USEC_injured",(_medical select 3),true];
	_playerObj setVariable["USEC_inPain",(_medical select 4),true];
	_playerObj setVariable["USEC_isCardiac",(_medical select 5),true];
	_playerObj setVariable["USEC_lowBlood",(_medical select 6),true];
	_playerObj setVariable["USEC_BloodQty",(_medical select 7),true];
	_playerObj setVariable["unconsciousTime",(_medical select 10),true];
		
	//Add Wounds
	{
		_playerObj setVariable[_x,true,true];
		//["usecBleed",[_playerObj,_x,_hit]] call broadcastRpcCallAll;
		usecBleed = [_playerObj,_x,_hit];
		publicVariable "usecBleed";
	} count (_medical select 8);
	
	//Add fractures
	_fractures = (_medical select 9);
	_playerObj setVariable ["hit_legs",(_fractures select 0),true];
	_playerObj setVariable ["hit_hands",(_fractures select 1),true];
	
	if (count _medical > 11) then {
		//Additional medical stats
		_playerObj setVariable ["messing",(_medical select 11),true];
	};
	
} else {
	//Reset Fractures
	_playerObj setVariable ["hit_legs",0,true];
	_playerObj setVariable ["hit_hands",0,true];
	_playerObj setVariable ["USEC_injured",false,true];
	_playerObj setVariable ["USEC_inPain",false,true];
	_playerObj setVariable ["messing",[0,0],true];
};
	
if (count _stats > 0) then {	
	//register stats
	_playerObj setVariable["zombieKills",(_stats select 0),true];
	_playerObj setVariable["headShots",(_stats select 1),true];
	_playerObj setVariable["humanKills",(_stats select 2),true];
	_playerObj setVariable["banditKills",(_stats select 3),true];
	_playerObj addScore (_stats select 1);
	_playerObj setVariable ["moneychanged",0,true];	
	_playerObj setVariable ["bankchanged",0,true];	
	_playerObj setVariable["AsReMixhud", true,true];

	
	//Save Score
	_score = score _playerObj;
	_playerObj addScore ((_stats select 0) - _score);
	
	//record for Server JIP checks
	_playerObj setVariable["zombieKills_CHK",(_stats select 0)];
	_playerObj setVariable["headShots_CHK",(_stats select 1)];
	_playerObj setVariable["humanKills_CHK",(_stats select 2)];
	_playerObj setVariable["banditKills_CHK",(_stats select 3)];
	if (count _stats > 4) then {
		if (!(_stats select 3)) then {
			_playerObj setVariable["selectSex",true,true];
		};
	} else {
		_playerObj setVariable["selectSex",true,true];
	};
} else {
	//Save initial loadout
	//register stats
	_playerObj setVariable["zombieKills",0,true];
	_playerObj setVariable["humanKills",0,true];
	_playerObj setVariable["banditKills",0,true];
	_playerObj setVariable["headShots",0,true];
	_playerObj setVariable ["friendlies",[],true];
	_playerObj setVariable["AsReMixhud", true,true];
	
	//record for Server JIP checks
	_playerObj setVariable["zombieKills_CHK",0,true];
	_playerObj setVariable["humanKills_CHK",0,true];
	_playerObj setVariable["banditKills_CHK",0,true];
	_playerObj setVariable["headShots_CHK",0,true];
};

if (_randomSpot) then {
	private["_counter","_position","_isNear","_isZero","_mkr"];
	if (!isDedicated) then {
		endLoadingScreen;
	};
	
	//Spawn modify via mission init.sqf
	if(isnil "spawnArea") then {
		spawnArea = 1500;
	};
	if(isnil "spawnShoremode") then {
		spawnShoremode = 1;
	};
	
	// 
	_spawnMC = actualSpawnMarkerCount;

	//spawn into random
	_findSpot = true;
	_mkr = "";
	while {_findSpot} do {
		_counter = 0;
		while {_counter < 20 && _findSpot} do {
			// switched to floor
			_mkr = "spawn" + str(floor(random _spawnMC));
			_position = ([(getMarkerPos _mkr),0,spawnArea,10,0,2000,spawnShoremode] call BIS_fnc_findSafePos);
			_isNear = count (_position nearEntities ["Man",100]) == 0;
			_isZero = ((_position select 0) == 0) && ((_position select 1) == 0);
			//Island Check		//TeeChange
			_pos 		= _position;
			_isIsland	= false;		//Can be set to true during the Check
			for [{_w=0},{_w<=150},{_w=_w+2}] do {
				_pos = [(_pos select 0),((_pos select 1) + _w),(_pos select 2)];
				if(surfaceisWater _pos) exitWith {
					_isIsland = true;
				};
			};
			
			if ((_isNear && !_isZero) || _isIsland) then {_findSpot = false};
			_counter = _counter + 1;
		};
	};
	_isZero = ((_position select 0) == 0) && ((_position select 1) == 0);
	_position = [_position select 0,_position select 1,0];
	if (!_isZero) then {
		//_playerObj setPosATL _position;
		_worldspace = [0,_position];
	};
};

//Record player for management
dayz_players set [count dayz_players,_playerObj];

//record player pos locally for server checking
_playerObj setVariable["CharacterID",_characterID,true];
_playerObj setVariable["humanity",_humanity,true];
_playerObj setVariable["humanity_CHK",_humanity];
//_playerObj setVariable["worldspace",_worldspace,true];
//_playerObj setVariable["state",_state,true];
_playerObj setVariable["lastPos",getPosATL _playerObj];
//Soul start: SC Edit >>> assigning player new variable for cashmoney and bankMoney
_playerObj setVariable ["cashMoney",_cashMoney,true];
_playerObj setVariable ["cashMoney_CHK",_cashMoney];
//Soul end: SC Edit
dayzPlayerLogin2 = [_worldspace,_state];

// PVDZE_obj_Debris = DZE_LocalRoadBlocks;
_clientID = owner _playerObj;
if (!isNull _playerObj) then {
	_clientID publicVariableClient "dayzPlayerLogin2";
	
	if (isNil "PVDZE_plr_SetDate") then {
		call server_timeSync;
	};
	_clientID publicVariableClient "PVDZE_plr_SetDate";
};
//record time started
_playerObj setVariable ["lastTime",time];
//_playerObj setVariable ["model_CHK",typeOf _playerObj];

// ------------ SOUL - Single Currency - Get Bank Value ----------------
_key2 = format["CHILD:298:%1:",_playerID];
_primary2 = _key2 call server_hiveReadWrite;
if(count _primary2 > 0) then {
	if((_primary2 select 0) != "ERROR") then {
		_bankMoney = _primary2 select 1;
		_playerObj setVariable["bankMoney",_bankMoney,true];
		_playerObj setVariable["bankMoney_CHK",_bankMoney];
	} else {
		_playerObj setVariable["bankMoney",0,true];
		_playerObj setVariable["bankMoney_CHK",0];
	};
} else {
	_playerObj setVariable["bankMoney",0,true];
	_playerObj setVariable["bankMoney_CHK",0];
};

//diag_log ("LOGIN PUBLISHING: " + str(_playerObj) + " Type: " + (typeOf _playerObj));

PVDZE_plr_Login = nil;
PVDZE_plr_Login2 = nil;

Link to comment
Share on other sites

  • 1 month later...
  • 3 weeks later...
  • 2 weeks later...
  • 2 months later...

Hello,

 

Is anyone still actively working on this script or no? I've added it to my server but the spawns do not work, doesn't matter what you select the game uses the old spawning system (random position). I've installed the mod correctly, pretty damn sure i did ;).

 

If anyone knows how to resolve this issue, please let me know.

 

Kind Regards,

Dutchy

Link to comment
Share on other sites

Hello,

 

Is anyone still actively working on this script or no? I've added it to my server but the spawns do not work, doesn't matter what you select the game uses the old spawning system (random position). I've installed the mod correctly, pretty damn sure i did ;).

 

If anyone knows how to resolve this issue, please let me know.

 

Kind Regards,

Dutchy

 

1. if the spawnselection-dialog doesnt appears, you missed to call the patched player_monitor.sqf/fsm files

2. if you spawn after selection on an "default" randomspawn, then you missed to update your serverfiles (server_playerSetup.sqf)

3. to avoid empty worldcoords make sure you have bugfixed your compiles.sqf (endLoadingScreen; >>>> endMission "END1";) and dont miss to add _spawnSelection = 9; to your varibales.sqf

 

cheers

Link to comment
Share on other sites

  • 2 weeks later...

Hello, 

 

I've done every thing by this confusing instruction but  at loading character data i got message that my DayZ Epoch is outdated and i need the correct version.

Any suggestions?

 

(using 1.0.5 version)

 

This is what i get at arma2oaserver.rpt

"DISCONNECT: Shurick (76561198022886800) Object: B 1-1-A:1 (Shurick) REMOTE, _characterID: 0 at loc [-7244.94,19534.5,1.10648]"
 2:06:33 "ERROR: Cannot Sync Character Shurick as no characterID"
 
I've tried removing character data from mysql data as suggested, didnt help.

 

Thank you

Link to comment
Share on other sites

  • 4 weeks later...

hi all,
 
after reading all 9 pages i still cant get it run also: 
 
RPT Error: ErrorMessage: File mpmissions\DayZ_Epoch_11.Chernarus\scripts\RscDisplaySpawnSelecter.hpp, line 36: .RscPictureGUI: Member already defined.
 
And i dont have the zupa´s coin system.. but i like to install it tomorrow. maybe the custom gui ATD.hud conflicts, or what?
installation guide is confusing me too.
 
 
i dont have any - dayz_code/config/  nor - dayz_code/system/  folders
where should they be?
 
i only have an dayz_server.pbo  which i have unzipped and inserted the server_playerSetup.sqf  .file
 
the - RscDisplaySpawnSelecter.hpp file i put in my /MPMissions/DayZ_Epoch_11.Chernarus/scripts folder
 
then i´ve added a new folder called system also in my /MPMissions/DayZ_Epoch_11.Chernarus/ folder
 
is that the right way, or not?
 
 
Thanks
 
cheers

 

got another script^^
 
p.s. i run overpoch chernarus 1.63.125548 / 1.0.5.1
 
Edit: forget it.
sorry, but i found an easier and more comfortable  script where i only needed 15mins to install...not 3hrs confusing around here.... -->http://www.dayzpatriots.com/ess-enhanced-spawn-selection-t318.html

Link to comment
Share on other sites

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Advertisement
×
×
  • Create New...