Jump to content

[Issue] Banking_data not saving for new players? (FIXED)


Recommended Posts

we do truncate it because this trigger only works on insert in player_data not and not on update, (it would be possible to create a trigger for update too!)

 

so if you would have a player where banking_Data did not get created and he is already in the player_Data table, my trigger would not help fix it ....

 

it doesnt really hurt to truncate the player_Data table because nothing gets lost. No character gets wiped or anything

 

its only a table with playername and playerUID which simply gets created new if its missing ...

gotcha

Link to comment
Share on other sites

You can find it over at Soul's Github: https://github.com/UK431-Soul/DayZ-Epoch_SCHiveExt/tree/master/dayz_server/bankzones.

If you've downloaded that file, make sure you update your server_functions.sqf as well.

 

Note that this fix is for people who use Soul's DLL. If you don't have it installed I don't think this works for you. If you DO have it installed, you should already have those files.

Link to comment
Share on other sites

  • 3 weeks later...

For some reason none of fixes actually worked for me on dedi, but did work on local test machine by default. Weird..

 

 

Anyway, since I am not running as root, I changed definer. Also AFTER UPDATE ON didn't work, since fields are not updated, just created when a new player joins (right?)... it's a fresh server

However making a trigger for AFTER INSERT ON works. 

CREATE DEFINER=`dayz`@`localhost` TRIGGER `banking` AFTER INSERT ON `player_data` FOR EACH ROW INSERT INTO banking_data
( PlayerUID, PlayerName, BankSaldo,  LastUpdated)
VALUES
(NEW.PlayerUID, NEW.PlayerName, 0, NOW())
Link to comment
Share on other sites

 

For some reason none of fixes actually worked for me on dedi, but did work on local test machine by default. Weird..

 

 

Anyway, since I am not running as root, I changed definer. Also AFTER UPDATE ON didn't work, since fields are not updated, just created when a new player joins (right?)... it's a fresh server

However making a trigger for AFTER INSERT ON works. 

CREATE DEFINER=`dayz`@`localhost` TRIGGER `banking` AFTER INSERT ON `player_data` FOR EACH ROW INSERT INTO banking_data
( PlayerUID, PlayerName, BankSaldo,  LastUpdated)
VALUES
(NEW.PlayerUID, NEW.PlayerName, 0, NOW())

 

You have a point. The event should run with AFTER INSERT instead of UPDATE, indeed. I'll update the first post.

Link to comment
Share on other sites

i could do with some help on this, i have applied the fixes in this thread but no coins are being sent to database and lose when relogging or server restart.

 

i can alter the coin amount in the database and when the player relogs, the new amount will show on him but not the other way around.

the amount on the players person stays after relogging/restarts just noth the bank amount

 

i have gone over the installation and everything looks fine.

 

any help is appreciated

Link to comment
Share on other sites

i could do with some help on this, i have applied the fixes in this thread but no coins are being sent to database and lose when relogging or server restart.

 

i can alter the coin amount in the database and when the player relogs, the new amount will show on him but not the other way around.

the amount on the players person stays after relogging/restarts just noth the bank amount

 

i have gone over the installation and everything looks fine.

 

any help is appreciated

make sure to run code from #6 as a query, that way game will be allowed to change fields in banking_data

Link to comment
Share on other sites

Hey All I am trying to execute the following code on my "mySql" database since none of my new users banking data is saved, I have all the fixes that are at the beginning of this thread installed. when I try to execute this code

CREATE TRIGGER banking
AFTER UPDATE ON player_Data
FOR EACH ROW
INSERT INTO banking_Data

( PlayerUID, PlayerName, BankSaldo, LastUpdated)
VALUES
(NEW.PlayerUID, NEW.PlayerName, 0, NOW());

 

I get the following error    [Err] 1235 - This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'.

 

I am having to manually enter my players data in the banking field and this is getting to be way more work than should be needed.

 

Does anyone have a working solution for this?

 

I am using Souls files

 

thanks.

Link to comment
Share on other sites

 

do i just simply add that into the query box and press submit?

 

i assume you mean this code

ALTER TABLE  `banking_data` CHANGE  `BankSaldo`  `BankSaldo` BIGINT( 24 ) NULL DEFAULT  '0'

Yup, that's all there is to it, copy > paste into query and run it. If using heidiSQL, check Data tab before and after doing this, you will see that a new tick will be added

Link to comment
Share on other sites

Hello, does anyone have any info on this? I am still having issues with banking data not saving for new players yet, I have patched with the info at the beginning of this thread and I can not run the sql command

 

Why can't you run the command? What error does it give you?

Link to comment
Share on other sites

Hi Rocu, thanks for your response, please see my previous messages in this thread. I listed the error, I am not a sql guru annd could use some assistance in getting the command to run properly.

 

Ah yes sorry, my bad. In that case, do as suggested - remove the existing event first. As recommended previously, you should try and use HeidiSQL for that.

Link to comment
Share on other sites

Banking_data not saving Can anyone tell me why 
Thanks for your help

 

dayz_server\bankzones\banks.sqf

/*************************************************************************************************/
/*																								 */
/*		Author: Soul																			 */
/*		Filename: bankinit.sqf																	 */
/*		Description: Initiates all server side used functions/EH/Map edits used in SC Mod		 */
/*																								 */
/*		Credits: To be filled in on final release												 */
/*																								 */
/*************************************************************************************************/

execVM "\z\addons\dayz_server\bankzones\banks.sqf";

"PVDZE_bank_Save" addPublicVariableEventHandler {
	_playerObj = ((_this select 1) select 0);
	_playerID = getPlayerUID _playerObj;
	_bankMoney = _playerObj getVariable ["bankMoney",0];
	
	if(_playerID != "") then {
		_key = format["CHILD:299:%1:%2:",_playerID,_bankMoney];
		_key call server_hiveReadWrite;
	};
};
 



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; 

More detailed files (BattlEye,missioni-server.pbo): https://github.com/HaYToKoRaZ/no-save-bank/

 

mysq banking_data 

 

q2d3D3.png

 

 

mysq Character_DATA

 

Lol26J.png

 

Link to comment
Share on other sites

but how do I remove the existing event? I do not see where I have an existing one

 

If you can't find the existing events with HeidiSQL then just insert this query: 

SHOW EVENTS

And that should list all of the events you have. Look for the event name that you want deleted and then just insert this query:

DROP EVENT IF EXISTS yourEventName;
Link to comment
Share on other sites

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...