Jump to content

_Lance_

Member
  • Posts

    175
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by _Lance_

  1. 1 hour ago, salival said:

    I have resisted for so long to do a step by step fn_selfActions guide, I felt like diffmerging is not terribly difficult

    But conversations like this remind me that maybe for some people it is a little more difficult and could be worded better

    I have some time off work from tomorrow (boss permitting) so i'll try and put some time into the install instructions and see if I can make them easier

    Yeah you devs forgot how good you are with arma code haha. It's good though it forces us admins both new and old to try and get on your level. I think what made this merge tricky for me was having vkc already working beforehand so one of the && and && lines got me where I had to combine two edits in the proper order, I can't remember which line (i think line 9) but it was inside this block of code which has edits for both vkc AND zsc that caused my problem. - definitely one of the trickier merges I've ever had to do, but again I've only been doing this for 9-10 months. You made a custom one for me but I received it about 10 mins after I remerged, I still appreciate you doing that by the way, what a beast.

    Spoiler

        if (_isMan && {!_isAlive} && {!(_cursorTarget isKindOf "Animal")} && {player distance _cursorTarget < 5}) then {
            if (s_player_checkWallet < 0) then {
                s_player_checkWallet = player addAction ["Check Wallet","scripts\zsc\checkWallet.sqf",_cursorTarget,0,false,true];
            };
        } else {
            player removeAction s_player_checkWallet;
            s_player_checkWallet = -1;
        };

        if ((_typeOfCursorTarget in DZE_MoneyStorageClasses || _isVehicle) && {!_isMan} && {!locked _cursorTarget} && {_isAlive} && !(_typeOfCursorTarget in DZE_LockedStorage) && {player distance _cursorTarget < 5}) then {
            if (s_bank_dialog < 0) then {
                s_bank_dialog = player addAction ["Access bank","scripts\zsc\bankDialog.sqf",_cursorTarget,1,true,true];
            };
        } else {
            player removeAction s_bank_dialog;
            s_bank_dialog = -1;
        };

        if (_isAlive && {_typeOfCursorTarget in AllPlayers} && {isPlayer _cursorTarget}) then {
            if (s_givemoney_dialog < 0) then {
                s_givemoney_dialog = player addAction [format ["Trade %1 with %2",CurrencyName,name _cursorTarget],"scripts\zsc\givePlayer.sqf",_cursorTarget,3,true,true];
            };
        } else {
            player removeAction s_givemoney_dialog;
            s_givemoney_dialog = -1;
        };

        if (_isMan && {!(isPlayer _cursorTarget)} && {_typeOfCursorTarget in ZSC_bankTraders} && {!_isPZombie}) then {
            if (s_bank_dialog1 < 0) then {
                s_bank_dialog1 = player addAction ["Bank Teller","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
            };
        } else {
            player removeAction s_bank_dialog1;
            s_bank_dialog1 = -1;
        };

        if (_typeOfCursorTarget in ZSC_bankObjects && {player distance _cursorTarget < 5}) then {
            if (s_bank_dialog2 < 0) then {
                s_bank_dialog2 = player addAction ["Bank ATM","scripts\zsc\atmDialog.sqf",_cursorTarget,3,true,true];
            };
        } else {
            player removeAction s_bank_dialog2;
            s_bank_dialog2 = -1;
        };
        
        if (_isVehicle && {_characterID == "0"} && {_hasKeyKit} && {!_isMan} && {_isAlive}) then {
            if (s_player_claimVehicle < 0) then {
                _totalKeys = call epoch_tempKeys;
                _temp_keys = _totalKeys select 0;
                _temp_keys_names = _totalKeys select 1;
                if (count _temp_keys > 0) then {
                    s_player_claimVehicle = player addAction [format ["<t color=""#0096FF"">Claim %1</t>",_text],"scripts\vkc\vehicleKeyChanger.sqf",[_cursorTarget,_characterID,"claim",_temp_keys,_temp_keys_names],5,true,true];
                };
            };
        } else {
            player removeAction s_player_claimVehicle;
            s_player_claimVehicle = -1;
        };    

     

  2. 5 minutes ago, irok said:

    Yeah i know the thing with looking thru the rifle sight or zooming in on the trader.. Im not extatly sure what you mean when you say "merge" I used the fn_selfActions.sqf from the global banking folder.. So i shouldent have to change anything in it, right??

     

    Thx for good response!

    Ps. all the other trader menus are working.. maybe that dosent mean anything.. but thought i tell you that

    Correct you shouldn't have to modify the global version of the file AS LONG AS - you don't have any other mods that you've had to make changes to fn_selfActions already. If you're running vkc or anything else that requires changes in fn_selfactions you'll need to merge the zsc changes into your existing selfactions file. If you just  use the global banking selfactions it will work but any other mods that need edits in fn_selfactions will stop working (or at least the portion of the mod that relies on the edit in selfactions wills stop working properly)

  3. 14 minutes ago, irok said:

    I have replaced all the files from global banking..

    The only thing i cannot replace is the init and the description.. since im renting my server from survival.. And thier system is.. yeah.. anywho..

    I tryed to add all the lines and need to add in the init and the description.. still no luck :((

     

    Thx for response!

    If you're not getting menus from what your cursor is on, it's related to fn_selfActions.sqf - Be sure you used the global banking one, and if you have VKC you need to check your merge. I had the same problem and had to re-merge, I was using diffmerge and already had vehicle key changer edits already in my selfactions so it was a tricky merge. I ended up having to ask for help, and while waiting for a response I tried winmerge and got it right on the 2nd try (winmerge is just better, try it if you're not using it already)

    recompare your fn_selfactions especially if you're using vehicle key changer and you probably just need to attempt a re-merge. Good luck!

    EDIT: Also it's a known thing that it take a couple seconds for those menus to popup sometimes, especially right after the server starts. Make sure you gave it a few seconds, try looking through your rifle sights at the functionary as well to make sure that's not all it is. If it's fn_selfactions causing your problem you may not get menus from any npc your cursor is on.

  4. What do you do about the warehouses etc on the west end of the default neaf map? Seems like this would overlap with them. I'll add this later tonight and see what I get, thanks for the hard work it looks great, hoping I can use it.

  5. An update for anyone that uses this. And a question - I've been using this:

    {
    	_server_houses = (_x select 0) nearObjects ["HouseBase",_x select 1];
    	{
    		_x addEventHandler ["handleDamage", {false}];
    	} forEach _server_houses;
    } forEach DZE_SafeZonePosArray;
    

    with my DZE_SafeZonePosArray:

    [[[6325.6772,7807.7412,0],150],[[4063.4226,11664.19,0],150],[[11447.472,11364.504,0],150],[[1606.6443,7803.5156,0],150],[[12944.227,12766.889,0],150],[[12062.4,12639.2,0],150]]; 

    to make only the trader zones have invincible buildings. - I noticed when I tried to make the whole balota airstrip invincible that large areas don't seem to work. Like if I set the diameter to be 150m it works but if it's 700m it doesn't work - am I seeing a bug or is that by design once you go over a certain distance? 

  6. 1 minute ago, salival said:

    Well, I'm not a big fan of disabling the time sync, it's there for a reason but in saying that there seems to be a few servers that have it disabled with no ill effects that I have heard. Still, on my server I wouldn't change it.

    Oh I meant I was too chicken to make an exception for !"PVAHR_0_" - I don't know enough to know that would be safe. I won't be turning off time sync. Thanks again guys!

  7. 3 minutes ago, salival said:

    I use these public variable filters for infistar, I found his default ones were not good enough: 

    
    !=PVAH_AdminReq !=PVAH_WriteLogReq !"PVAHR_0_"

    The time issue with infistar is more than epoch synchs every 5 minutes or so, so this needs to be disabled for the time to stick. Infistar can't disable it easily.

    I was too chicken to do that, thank you I will give it a go, that for sure should knock out this issue. And on the time, you nailed it, time changes and then reverts. Weather doesn't change at all. So I told players to just vote for time changes, and enabled it in infistar. They got booted when they voted :D and I had to make exceptions for DAY and NIGHT and reload the scripts mid-game haha - I love this game.

  8. Thanks for that info I didn't know that - I'll have to message infistar about it and wait for a response - It's still a daily annoyance, every day I see a handful of players get kicked, I check and it's all for the same kick, usually first time visitors who pass all checks, so I make an exception in publicvariable.txt and all is good until the next day the same thing happens but slightly different kick data -  today's kick booted out 5 players for this -> "PVAHR_0_f857a580a28521f7822"  after that was something like = [<NULL-object>] or similar.

    I'll have to hope infistar responds, I had to message him once before and never heard back. I'm about ready to ditch this AH anyway if I'm going to have to make exceptions every day over the code. His code isn't "caught up" with 1.0.6.1 in many ways, can't even change the time and weather with it anymore, and for the minimal amount of actual management ability included it's not really worth using until he gets it up to date. If he gets it up to date.

    EDIT: I don't want to sound too harsh or like I'm dogging infistar AH by the way - I just would like for it to be more in tune or up to date with the current version of epoch - but - to be fair, he advertises it as for arma2 which I'm sure all the features still work for. It still does a solid job of logging and booting tier 1 and 2 script kids when none of us are available to watch the server, and there's nothing that will stand up to a pr0 scripter who's good with arma code so I can't complain too much I guess, I've gotten my $30 worth in regular free updates for sure.

  9. 2 minutes ago, LunatikCH said:

    This

    !"SLOG_NP"

    without the '=' because the '=' means the whole kick log must be exactly the same as the exception the "SLOG_NP" just means anything containing SLOG_NP even when its FRGTDHRHSLOG_NPEGEHTE it wont kick you.

    Amazed it did turn out to be short and sweet - thank you very much!

  10. On 7/1/2017 at 5:02 PM, DuMa said:

     

    01.07.2017 18:14:54: CARRASCO (189.4.74.56:24790) 982344dae0f153a8012c72380ae2d2a5 - #0 "PVAHR_0_r8o0e1u5u3g245a7x53" = ["CARRASCO","76561198119665789","SLOG_NP",[New Player: ["3036",[],[],[0,0,0],true,"DayZ Epoch 1.0.6.1","Survivor2_DZ",true,true,0,[],0,0,5000]]]

     

    Thats the meaning of it. Thats only a log why kick for that?(Infistar)

     

    That is triggered by these lines in Infistar AH.sqf about line 4597.

    
    	[] spawn {
    		waitUntil {uiSleep 1;!isNil 'PVCDZ_plr_Login'};
    		waitUntil {uiSleep 1;str PVCDZ_plr_Login != '[]'};
    		if(PVCDZ_plr_Login select 8)then
    		{
    			_log = format['New Player: %1',PVCDZ_plr_Login];
    			_name = 'DEAD';if((alive player)&&(getPlayerUID player != ''))then{_name = name player;};
    			[_name,getPlayerUID player,'SLOG_NP',toArray (_log)] call "+_randvar364637+";
    		};
    	};

     

    And this is a new player log. Add an exception for that in BE Filters. 

     

    Sorry to rehash a month old thread but I started getting this kick about a week ago and I'm weak at making exceptions for complicated kicks. Wondering if you or anyone reading this can help make a filter for this issue. Doesn't seem to happen to all players, but some players on first login get a kick and I get this in the publicvariable log:

    #0 "PVAHR_0_k9f9c3d75554d7d1536" = ["<PLAYER_NAME_HERE>","<PLAYER_ID_HERE>","SLOG_NP",[78,101,119,32,80,108,97,121,101,114,58,32,91,34,53,52,50,51,34,44,91,93,44,91,93,44,91,48,44,48,44,48,93,44,116,114,117,101,44,34,68,97,121,90,32,69,112,111,99,104,32,49,46,48,46,54,46,49,34,44,34,83,117,114,118,105,118,111,114,50,95,68,90,34,44,116,114,117,101,44,116,114,117,101,44,48,44,91,93,44,53,48,48,48,48,48,44,48,44,48,93]]

    For anyone who got booted a 2nd time the quick fix was: !="PVAHR_0_k9f9c3d75554d7d1536" but the variable is different for each player so every time this happens I'd have to add an exception for that user's kick. I considered trying !="SLOG_NP" but haven't tested if that will fix the kick yet, but I'm afraid it's going to be a trickier exception than that... Not sure why infistar is even kicking for this anyway. - Any advice is greatly appreciated, thanks! - ALso I wanted to post this in the BE FILTERS HELP thread which I could have sworn I have seen in this forum before but was unable to find it, so linked it here.

     

     

  11. I bet it's one of two things - either your host can't follow basic instructions to install infistar (most likely from your description of the directory it created in the PBO which is not the right way) OR you had a bad pbo repack. A new version of infistar dropped a couple days ago (1442) - uncheck the infistar box on your server as they don't seem to be one-click-installing it correctly, then extract your pbo and install infistar follwing the instructions and I bet it will work just fine. NOTE: There's a new resec file included with infistar now be sure to add it and make the call for it in your mission init, and disable the builtin resec for full functionality.

    The BE filters with the new version of infistar are as bad as ever though so be prepared to do a lot of filtering with all the server attacks going on right now. On that note: Whoever is helping these scriptkids is very knowlegeable in arma code and scripting and most likely a part of this community so the scriptkids get new info just as fast or faster than we do - so you have to stay on top of your filters and watch for users bypassing them via good ol fashioned logging and make multiple backups a day just in case.

    EDIT: Also if you have a sonicwall you can use app detection and block anyone trying to connect through a vpn or proxy from connecting to your server. Most people who visit your sever to do work aren't going to give up their public IP to you. Helps block most scriptkids. Another good idea is to use as much of the "stock" BE filtering that you can - you REALLY only need the publicvariables and eval from infistar to keep your AH from booting you. Beyond that block the dedicated server interface from being accessed in scripts with a kick & log so you know who it was - then work in filters from the stock scripts.txt and log them until everything is filtered out. YMMV I'm still a noob at this but I'm getting better lol.

  12. Over the last couple days I noticed my server was taking forever to log players in, up to around a 100 count before the hive would even kick in - I tried a few things, got fresh dll's, fresh hive.ext, few other tricks with no luck. Then I remembered that last weekend when I was working on battleye filters i had set notepad++ to be the default handler for .txt files - just for giggles I switched it back to notebad, rebooted for good measure and BAM - server logs in players in less than 15 seconds again. Just thought I'd put this here in case such a strange issue ends up affecting another admin one day. Honestly I don't see why having NP++ be the default would be any different but it is what it is. YMMV.

  13. 1 hour ago, JasonTM said:

    Those kicks are for some other mod. ZSC does not create or delete markers.

    Be careful that you escape double quotes in your scripts.txt with backslashes \. Use the find feature in notepad ++ and mark all double quotes and make sure they are escaped except for the start and end double quotes.

     

    You should be doing this stuff on a test server BTW.

    In my post I said they were from a different mod, they appear to be from the "locate vehicles" script so if I can't get exceptions working for those I'll post in that thread and ask for a hand. Have made a ton of working exceptions this weekend but these last 4 are tricky. - I don't know what you mean about escaping double quotes in the scripts.txt with backslashes - right over my head man - even at the 9 month mark I just haven't learned that far yet. - And trust me after this weekend I'll setup a test server again so I don't stress out my regular visitors while patching up and learning more about security.

  14. Ok will give this a try for the closedisplay kick. When I set that one to log only then I started getting login kicks for createmarker, set that to log only and then got login kicks for deletemarker, set that to log only and got a login kick for createdialog lol - finally after setting that one to log only, players and I were able to login - so it looks like I have 4 kicks total- most due to different community mods I'm using -and some work to do but this is a great start, hopefully the other kicks will be more straightforward to make exceptions for. Beyond filters I'm blocking new steam accounts now and anyone connecting through a vpn or proxy so things are much tighter already than they were on Friday morning. Thanks again!

  15. Hey Salival, I've been trying to tighten up my be filters since I had someone clear my db (luckily I take snapshots heh) and in the process I've been working some important parts from the stock epoch/overpoch scripts file into my "weak" infistar scripts file - and I had most everything worked out I thought but when I re-added the suggested changes for this mod back in - I'm getting a scripts kick now at logon. I tried to patch it up a couple different ways but it seems I'm making the exception incorrectly still. Was wondering if you would look at it and tell me the correct way to make an exception for this?

    Line (line14 in mine) in scripts.txt that is causing the kick:  5 closeDisplay !="((ctrlParent (_this select 0)) closeDisplay 9000);"

    What's showing up in the logs:

    - #14 " 102;
    _valueText = _paramCtrl lbText 1;
    (findDisplay 146) CloseDisplay 2;
    _test = count (toArray _valueText);
    disableUserInput f"

    seems to happen to everyone who logs in, myself included. For now I have it set to log only so players can get logged in. Any help/advice would be greatly appreciated.


     

  16. Makes sense now. So would applying the damagehandler within the init.sqf (if that's what you meant) be any less strain on the server than the way I'm doing it now? For now I've gone back to the mission-side script - I just have a call at the bottom of init.sqf that points to this script in the "custom" folder in my mission root. Here it is:

    Spoiler

    #define CENTER getMarkerPos "center"

    #define RADIUS ((getMarkerSize "center") select 1)*2

    _server_houses = CENTER nearObjects ["HouseBase",RADIUS];
    {
     _x addEventHandler ["handleDamage", {false}];

    } forEach _server_houses;

    and it seems to be working fine but yes I'd like to do whatever will be the least amount of strain on the server if possible. Thanks for posting ebay.

  17. I was hung at "waiting for server to start authentication" for quite a while (maybe 60s) and then it finally kicked through and started the hive/sql part of the logon process. This could be due to my "adaptation" of the skalisty AI mod loading as well though, I may have more to update etc, I'll take a close look at the RPT and update as soon as I have more info.

    UPDATE: I was wrong, Invincible houses isn't working using the server monitor way of doing it, do I still need the other script running mission side? I'd removed it to try this method. Here's the edited server monitor:

    Spoiler

    private ["_date","_year","_month","_day","_hour","_minute","_date1","_key","_objectCount","_dir","_point","_i","_action","_dam","_selection","_wantExplosiveParts","_entity","_worldspace","_damage","_booleans","_rawData","_ObjectID","_class","_CharacterID","_inventory","_hitpoints","_fuel","_id","_objectArray","_script","_result","_outcome","_shutdown","_res"];
    [] execVM "\z\addons\dayz_server\system\s_fps.sqf"; //server monitor FPS (writes each ~181s diag_fps+181s diag_fpsmin*)
    #include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"

    waitUntil {!isNil "BIS_MPF_InitDone" && initialized};
    if (!isNil "sm_done") exitWith {}; // prevent server_monitor be called twice (bug during login of the first player)
    sm_done = false;

    _legacyStreamingMethod = false; //use old object streaming method, more secure but will be slower and subject to the callExtension return size limitation.

    dayz_serverIDMonitor = [];
    _DZE_VehObjects = [];
    dayz_versionNo = getText (configFile >> "CfgMods" >> "DayZ" >> "version");
    dayz_hiveVersionNo = getNumber (configFile >> "CfgMods" >> "DayZ" >> "hiveVersion");
    _hiveLoaded = false;
    _serverVehicleCounter = [];
    _tempMaint = DayZ_WoodenFence + DayZ_WoodenGates;
    diag_log "HIVE: Starting";

    //Set the Time
    _key = "CHILD:307:";
    _result = _key call server_hiveReadWrite;
    _outcome = _result select 0;
    if (_outcome == "PASS") then {
        _date = _result select 1;
        _year = _date select 0;
        _month = _date select 1;
        _day = _date select 2;
        _hour = _date select 3;
        _minute = _date select 4;

        if (dayz_ForcefullmoonNights) then {_date = [2012,8,2,_hour,_minute];};
        diag_log ["TIME SYNC: Local Time set to:", _date, "Fullmoon:",dayz_ForcefullmoonNights,"Date given by HiveExt.dll:",_result select 1];
        setDate _date;
        dayzSetDate = _date;
        publicVariable "dayzSetDate";
    };

    //Stream in objects
    /* STREAM OBJECTS */
    //Send the key
    _timeStart = diag_tickTime;

    for "_i" from 1 to 5 do {
        diag_log "HIVE: trying to get objects";
        _key = format["CHILD:302:%1:%2:",dayZ_instance, _legacyStreamingMethod];
        _result = _key call server_hiveReadWrite;  
        if (typeName _result == "STRING") then {
            _shutdown = format["CHILD:400:%1:",(profileNamespace getVariable "SUPERKEY")];
            _res = _shutdown call server_hiveReadWrite;
            diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res));
        } else {
            diag_log ("HIVE: found "+str(_result select 1)+" objects" );
            _i = 99; // break
        };
    };

    if (typeName _result == "STRING") exitWith {
        diag_log "HIVE: Connection error. Server_monitor.sqf is exiting.";
    };    

    diag_log "HIVE: Request sent";
    _myArray = [];
    _val = 0;
    _status = _result select 0; //Process result
    _val = _result select 1;
    if (_legacyStreamingMethod) then {
        if (_status == "ObjectStreamStart") then {
            profileNamespace setVariable ["SUPERKEY",(_result select 2)];
            _hiveLoaded = true;
            //Stream Objects
            diag_log ("HIVE: Commence Object Streaming...");
            for "_i" from 1 to _val do  {
                _result = _key call server_hiveReadWriteLarge;
                _status = _result select 0;
                _myArray set [count _myArray,_result];
            };
        };
    } else {
        if (_val > 0) then {
            _fileName = _key call server_hiveReadWrite;
            _lastFN = profileNamespace getVariable["lastFN",""];
            profileNamespace setVariable["lastFN",_fileName];
            saveProfileNamespace;
            if (_status == "ObjectStreamStart") then {
                profileNamespace setVariable ["SUPERKEY",(_result select 2)];
                _hiveLoaded = true;
                _myArray = Call Compile PreProcessFile _fileName;
                _key = format["CHILD:302:%1:%2:",_lastFN, _legacyStreamingMethod];
                _result = _key call server_hiveReadWrite; //deletes previous object data dump
            };
        } else {
            if (_status == "ObjectStreamStart") then {
                profileNamespace setVariable ["SUPERKEY",(_result select 2)];
                _hiveLoaded = true;
            };
        };
    };

    diag_log ("HIVE: Streamed " + str(_val) + " objects");

    // Don't spawn objects if no clients are online (createVehicle fails with Ref to nonnetwork object)
    if ((playersNumber west + playersNumber civilian) == 0) exitWith {
        diag_log "All clients disconnected. Server_monitor.sqf is exiting.";
    };

    {
        private ["_object","_posATL"];
        //Parse Array
        _action =         _x select 0; 
        _idKey =         _x select 1;
        _type =            _x select 2;
        _ownerID =         _x select 3;
        _worldspace =     _x select 4;
        _inventory =    _x select 5;
        _hitPoints =    _x select 6;
        _fuel =            _x select 7;
        _damage =         _x select 8;
        _storageMoney = _x select 9;

        //set object to be in maintenance mode
        _maintenanceMode = false;
        _maintenanceModeVars = [];
        
        _dir = 90;
        _pos = [0,0,0];
        _wsDone = false;
        _wsCount = count _worldspace;

        //Vector building
        _vector = [[0,0,0],[0,0,0]];
        _vecExists = false;
        _ownerPUID = "0";

        if (_wsCount >= 2) then {
            _dir = _worldspace select 0;
            _posATL = _worldspace select 1;
            if (count _posATL == 3) then {
                _pos = _posATL;
                _wsDone = true;                    
            };
            if (_wsCount >= 3) then{
                _ws2TN = typename (_worldspace select 2);
                _ws3TN = typename (_worldspace select 3);
                if (_wsCount == 3) then{
                        if (_ws2TN == "STRING") then{
                            _ownerPUID = _worldspace select 2;
                        } else {
                             if (_ws2TN == "ARRAY") then{
                                _vector = _worldspace select 2;
                                _vecExists = true;
                            };                  
                        };
                } else {
                    if (_wsCount == 4) then{
                        if (_ws3TN == "STRING") then{
                            _ownerPUID = _worldspace select 3;
                        } else {
                            if (_ws2TN == "STRING") then{
                                _ownerPUID = _worldspace select 2;
                            };
                        };
                        if (_ws2TN == "ARRAY") then{
                            _vector = _worldspace select 2;
                            _vecExists = true;
                        } else {
                            if (_ws3TN == "ARRAY") then{
                                _vector = _worldspace select 3;
                                _vecExists = true;
                            };
                        };
                    };
                };
            } else {
                _worldspace set [count _worldspace, "0"];
            };
        };

        if (!_wsDone) then {
            if ((count _posATL) >= 2) then {
                _pos = [_posATL select 0,_posATL select 1,0];
                diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: %4",_idKey,_type,_worldspace,_pos];
            } else {
                diag_log format["MOVED OBJ: %1 of class %2 with worldspace array = %3 to pos: [0,0,0]",_idKey,_type,_worldspace];
            };
        };

        //diag_log format["OBJ: %1 - %2,%3,%4,%5,%6,%7,%8", _idKey,_type,_ownerID,_worldspace,_inventory,_hitPoints,_fuel,_damage];
        /*
            if (_type in _tempMaint) then {
                //Use hitpoints for Maintenance system and other systems later.
                //Enable model swap for a damaged model.
                if ("Maintenance" in _hitPoints) then {
                    _maintenanceModeVars = [_type,_pos];
                    _type = _type + "_Damaged";
                };    
                //TODO add remove object and readd old fence (hideobject would be nice to use here :-( )
                //Pending change to new fence models\Layout
            };
        */
            _nonCollide = _type in DayZ_nonCollide;    
            //Create it
            if (_nonCollide) then {
                _object = createVehicle [_type, [0,0,0], [], 0, "NONE"];
            } else {
                _object = _type createVehicle [0,0,0]; //more than 2x faster than createvehicle array
            };
            _object setDir _dir;
            _object setPosATL _pos;
            _object setDamage _damage;
            if (_vecExists) then {
                _object setVectorDirAndUp _vector;
            };
            _object enableSimulation false;

            _doorLocked = _type in DZE_DoorsLocked;
            _isPlot = _type == "Plastic_Pole_EP1_DZ";
            
            // prevent immediate hive write when vehicle parts are set up
            _object setVariable ["lastUpdate",diag_ticktime];
            _object setVariable ["ObjectID", _idKey, true];
            _object setVariable ["OwnerPUID", _ownerPUID, true];
            if (Z_SingleCurrency && {(_type in DZE_MoneyStorageClasses) || (_object isKindOf "AllVehicles")}) then {
                _object setVariable [Z_MoneyVariable, _storageMoney, true];
            };

            dayz_serverIDMonitor set [count dayz_serverIDMonitor,_idKey];
            
            if (!_wsDone) then {[_object,"position",true] call server_updateObject;};
            if (_type == "Base_Fire_DZ") then {_object spawn base_fireMonitor;};
            
            _isDZ_Buildable = _object isKindOf "DZ_buildables";
            _isTrapItem = _object isKindOf "TrapItems";
            _isSafeObject = _type in DayZ_SafeObjects;
            
            //Dont add inventory for traps.
            if (!_isDZ_Buildable && !_isTrapItem) then {
                clearWeaponCargoGlobal _object;
                clearMagazineCargoGlobal _object;
                clearBackpackCargoGlobal _object;
                if( (count _inventory > 0) && !_isPlot && !_doorLocked) then {
                    if (_type in DZE_LockedStorage) then {
                        // Do not send big arrays over network! Only server needs these
                        _object setVariable ["WeaponCargo",(_inventory select 0),false];
                        _object setVariable ["MagazineCargo",(_inventory select 1),false];
                        _object setVariable ["BackpackCargo",(_inventory select 2),false];
                    } else {
                        _weaponcargo = _inventory select 0 select 0;
                        _magcargo = _inventory select 1 select 0;
                        _backpackcargo = _inventory select 2 select 0;
                       _weaponqty = _inventory select 0 select 1;
                        {_object addWeaponCargoGlobal [_x, _weaponqty select _foreachindex];} foreach _weaponcargo;

                        _magqty = _inventory select 1 select 1;
                        {_object addMagazineCargoGlobal [_x, _magqty select _foreachindex];} foreach _magcargo;

                        _backpackqty = _inventory select 2 select 1;
                        {_object addBackpackCargoGlobal [_x, _backpackqty select _foreachindex];} foreach _backpackcargo;
                    };
                } else {
                    if (DZE_permanentPlot && _isPlot) then {
                        _object setVariable ["plotfriends", _inventory, true];
                    };
                    if (DZE_doorManagement && _doorLocked) then {
                        _object setVariable ["doorfriends", _inventory, true];
                    };
                };
            };
            
            if (_object isKindOf "AllVehicles") then {
                _object setVariable ["CharacterID", _ownerID, true];
                _isAir = _object isKindOf "Air";
                {
                    _selection = _x select 0;
                    _dam = if (!_isAir && {_selection in dayZ_explosiveParts}) then {(_x select 1) min 0.8;} else {_x select 1;};
                    _strH = "hit_" + (_selection);
                    _object setHit[_selection,_dam];
                    _object setVariable [_strH,_dam,true];
                } foreach _hitpoints;
                [_object,"damage"] call server_updateObject;

                _object setFuel _fuel;
                if (!_isSafeObject) then {
                    _DZE_VehObjects set [count _DZE_VehObjects,_object]; 
                    _object call fnc_veh_ResetEH;
                    if (_ownerID != "0" && {!(_object isKindOf "Bicycle")}) then {_object setVehicleLock "locked";};
                    _serverVehicleCounter set [count _serverVehicleCounter,_type]; // total each vehicle
                } else {
                    _object enableSimulation true;
                };
            } else {
                // Fix for leading zero issues on safe codes after restart
                _lockable = getNumber (configFile >> "CfgVehicles" >> _type >> "lockable");
                _codeCount = count (toArray _ownerID);
                switch (_lockable) do {
                    case 4: {
                        switch (_codeCount) do {
                            case 3: {_ownerID = format["0%1",_ownerID];};
                            case 2: {_ownerID = format["00%1",_ownerID];};
                            case 1: {_ownerID = format["000%1",_ownerID];};
                        };
                    };
                    case 3: {
                        switch (_codeCount) do {
                            case 2: {_ownerID = format["0%1",_ownerID];};
                            case 1: {_ownerID = format["00%1",_ownerID];};
                        };
                    };
                };
                _object setVariable ["CharacterID", _ownerID, true];
                if (_isDZ_Buildable || {(_isSafeObject && !_isTrapItem)}) then {
                    _object setVariable["memDir",_dir,true];
                    if (DZE_GodModeBase && {!(_type in DZE_GodModeBaseExclude)}) then {
                        _object addEventHandler ["HandleDamage",{false}];
                    } else {
                        _object addMPEventHandler ["MPKilled",{_this call vehicle_handleServerKilled;}];
                    };
                    _object setVariable ["OEMPos",_pos,true]; // used for inplace upgrades and lock/unlock of safe
                } else {
                    _object enableSimulation true;
                };
                if (_isDZ_Buildable || {_isTrapItem}) then {
                    //Use inventory for owner/clan info and traps armed state
                    {
                        _xTypeName = typeName _x;
                        switch (_xTypeName) do {
                            case "ARRAY": {
                                _x1 = _x select 1;
                                switch (_x select 0) do {
                                    case "ownerArray" : { _object setVariable ["ownerArray", _x1, true]; };
                                    case "clanArray" : { _object setVariable ["clanArray", _x1, true]; };
                                    case "armed" : { _object setVariable ["armed", _x1, true]; };
                                    case "padlockCombination" : { _object setVariable ["dayz_padlockCombination", _x1, false]; };
                                    case "BuildLock" : { _object setVariable ["BuildLock", _x1, true]; };
                                };
                            };
                            case "STRING": {_object setVariable ["ownerArray", [_x], true]; };
                            case "BOOLEAN": {_object setVariable ["armed", _x, true]};
                        };
                    } foreach _inventory;
                    
                    if (_maintenanceMode) then { _object setVariable ["Maintenance", true, true]; _object setVariable ["MaintenanceVars", _maintenanceModeVars]; };
                };
            };
            dayz_serverObjectMonitor set [count dayz_serverObjectMonitor,_object]; //Monitor the object
    } forEach _myArray;

    //enable simulation on vehicles after all buildables are spawned
    {
        _x enableSimulation true;
        _x setVelocity [0,0,1];
    } forEach _DZE_VehObjects;

    diag_log format["HIVE: BENCHMARK - Server_monitor.sqf finished streaming %1 objects in %2 seconds (unscheduled)",_val,diag_tickTime - _timeStart];

    // # END OF STREAMING #
    if (dayz_townGenerator) then {
        call compile preprocessFileLineNumbers "\z\addons\dayz_server\compile\server_plantSpawner.sqf"; // Draw the pseudo random seeds
    };
    [] execFSM "\z\addons\dayz_server\system\server_vehicleSync.fsm"; 
    [] execVM "\z\addons\dayz_server\system\scheduler\sched_init.sqf"; // launch the new task scheduler

    createCenter civilian;

    actualSpawnMarkerCount = 0;
    // count valid spawn markers, since different maps have different amounts
    for "_i" from 0 to 10 do {
        if ((getMarkerPos format["spawn%1",_i]) distance [0,0,0] > 0) then {
            actualSpawnMarkerCount = actualSpawnMarkerCount + 1;
        } else {
            _i = 11; // exit since we did not find any further markers 
        };
    };
    diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount];

    //[] call compile preprocessFileLineNumbers "\z\addons\dayz_server\DZAI\init\dzai_initserver.sqf";
    [] ExecVM "\z\addons\dayz_server\WAI\init.sqf";
    [] ExecVM "\z\addons\dayz_server\DZMS\DZMSInit.sqf"; 

    if (isDedicated) then {endLoadingScreen;};
    allowConnection = true;
    sm_done = true;
    publicVariable "sm_done";

    // Trap loop
    [] spawn {
        private ["_array","_array2","_array3","_script","_armed"];
        _array = str dayz_traps;
        _array2 = str dayz_traps_active;
        _array3 = str dayz_traps_trigger;

        while {1 == 1} do {
            if ((str dayz_traps != _array) || (str dayz_traps_active != _array2) || (str dayz_traps_trigger != _array3)) then {
                _array = str dayz_traps;
                _array2 = str dayz_traps_active;
                _array3 = str dayz_traps_trigger;
                //diag_log "DEBUG: traps";
                //diag_log format["dayz_traps (%2) -> %1", dayz_traps, count dayz_traps];
                //diag_log format["dayz_traps_active (%2) -> %1", dayz_traps_active, count dayz_traps_active];
                //diag_log format["dayz_traps_trigger (%2) -> %1", dayz_traps_trigger, count dayz_traps_trigger];
                //diag_log "DEBUG: end traps";
            };

            {
                if (isNull _x) then {
                    dayz_traps = dayz_traps - [_x];
                    _armed = false;
                    _script = {};
                } else {
                    _armed = _x getVariable ["armed", false];
                    _script = call compile getText (configFile >> "CfgVehicles" >> typeOf _x >> "script");
                };
                
                if (_armed) then {
                    if !(_x in dayz_traps_active) then {["arm", _x] call _script;};
                } else {
                    if (_x in dayz_traps_active) then {["disarm", _x] call _script;};
                };
                uiSleep 0.01;
            } forEach dayz_traps;
            uiSleep 1;
        };
    };

    //Points of interest
    //[] execVM "\z\addons\dayz_server\compile\server_spawnInfectedCamps.sqf"; //Adds random spawned camps in the woods with corpses and loot tents (negatively impacts FPS)
    [] execVM "\z\addons\dayz_server\compile\server_spawnCarePackages.sqf";
    [] execVM "\z\addons\dayz_server\compile\server_spawnCrashSites.sqf";

    if (dayz_townGenerator) then {execVM "\z\addons\dayz_server\system\lit_fireplaces.sqf";};

    "PVDZ_sec_atp" addPublicVariableEventHandler {
        _x = _this select 1;
        switch (1==1) do {
            case (typeName (_x select 0) == "SCALAR") : { // just some logs from the client
                diag_log (toString _x);
            };
            case (count _x == 2) : { // wrong side
                diag_log format["P1ayer %1 reports possible 'side' hack. Server may be compromised!",(_x select 1) call fa_plr2Str];
            };
            default { // player hit
                _unit = _x select 0;
                _source = _x select 1;
                if (!isNull _source) then {
                    diag_log format ["P1ayer %1 hit by %2 %3 from %4 meters in %5 for %6 damage",
                        _unit call fa_plr2Str, _source call fa_plr2Str, toString (_x select 2), _x select 3, _x select 4, _x select 5];
                };
            };
        };
    };

    "PVDZ_objgather_Knockdown" addPublicVariableEventHandler {
        _tree = (_this select 1) select 0;
        _player = (_this select 1) select 1;
        _dis = _player distance _tree;
        _name = if (alive _player) then {name _player} else {"DeadPlayer"};
        _uid = getPlayerUID _player;
        _treeModel = _tree call fn_getModelName;

        if ((_dis < 30) && (_treeModel in dayz_trees) && (_uid != "")) then {
            _tree setDamage 1;
            dayz_choppedTrees set [count dayz_choppedTrees,_tree];
            diag_log format["Server setDamage on tree %1 chopped down by %2(%3)",_treeModel,_name,_uid];
        };
    };

    // preload server traders menu data into cache
    if !(DZE_ConfigTrader) then {
        {
            // get tids
            _traderData = call compile format["menu_%1;",_x];
            if (!isNil "_traderData") then {
                {
                    _traderid = _x select 1;
                    _retrader = [];

                    _key = format["CHILD:399:%1:",_traderid];
                    _data = "HiveEXT" callExtension _key;
                    _result = call compile format["%1",_data];
                    _status = _result select 0;
            
                    if (_status == "ObjectStreamStart") then {
                        _val = _result select 1;
                        call compile format["ServerTcache_%1 = [];",_traderid];
                        for "_i" from 1 to _val do {
                            _data = "HiveEXT" callExtension _key;
                            _result = call compile format ["%1",_data];
                            call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result];
                            _retrader set [count _retrader,_result];
                        };
                    };
                } forEach (_traderData select 0);
            };
        } forEach serverTraders;
    };

    if (_hiveLoaded) then {
        _serverVehicleCounter spawn {
            //  spawn_vehicles
            // Get all buildings and roads only once. Very taxing, but only on first startup
            _serverVehicleCounter = _this;
            _vehiclesToUpdate = [];
            _startTime = diag_tickTime;
            _buildingList = [];
            _cfgLootFile = missionConfigFile >> "CfgLoot" >> "Buildings";
            {
                if (isClass (_cfgLootFile >> typeOf _x)) then {
                    _buildingList set [count _buildingList,_x];
                    _x addEventHandler ["handleDamage", {false}];
                 };
            } count (getMarkerPos "center" nearObjects ["building",((getMarkerSize "center") select 1)]);
            _roadList = getMarkerPos "center" nearRoads ((getMarkerSize "center") select 1);
            
            _vehLimit = MaxVehicleLimit - (count _serverVehicleCounter);
            if (_vehLimit > 0) then {
                diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
                for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
            } else {
                diag_log "HIVE: Vehicle Spawn limit reached!";
                _vehLimit = 0;
            };
            
            if (dayz_townGenerator) then {
                // Vanilla town generator spawns debris locally on each client
                MaxDynamicDebris = 0;
            } else {
                // Epoch global dynamic debris
                diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
                for "_x" from 1 to MaxDynamicDebris do {call spawn_roadblocks;};
            };

            diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
            for "_x" from 1 to MaxAmmoBoxes do {call spawn_ammosupply;};

            diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
            for "_x" from 1 to MaxMineVeins do {call spawn_mineveins;};
            
            diag_log format["HIVE: BENCHMARK - Server finished spawning %1 DynamicVehicles, %2 Debris, %3 SupplyCrates and %4 MineVeins in %5 seconds (scheduled)",_vehLimit,MaxDynamicDebris,MaxAmmoBoxes,MaxMineVeins,diag_tickTime - _startTime];
            
            //Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
            {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
        };
    };

    [] spawn server_spawnEvents;

    [] execVM "\z\addons\dayz_server\init\safeZoneRelocate.sqf";

    /* //Causes issues with changing clothes
    _debugMarkerPosition = [(respawn_west_original select 0),(respawn_west_original select 1),1];
    _vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"];
    _vehicle_0 setPos _debugMarkerPosition;
    _vehicle_0 setVariable ["ObjectID","1",true];
    */

     

  18. Ok will try this today - you guys are incredible by the way lol - This would make the server load all buildings/houses as invincible during boot/loading and then be done with it right? - I like! I will try this out today. I'm also attempting to update the skins/items in the "skalisty island AI" (This one) mod today and test-loading that in about an hour so I'll try this out at the same time and report back, thanks again you guys I'm really glad I asked if this was possible, you guys knocked it out of the park.

     

  19. So basically fit this:  _x addEventHandler ["handleDamage", {false}];

     

    Somewhere into this?

    Spoiler

    if (_hiveLoaded) then {
        _serverVehicleCounter spawn {
            //  spawn_vehicles
            // Get all buildings and roads only once. Very taxing, but only on first startup
            _serverVehicleCounter = _this;
            _vehiclesToUpdate = [];
            _startTime = diag_tickTime;
            _buildingList = [];
            _cfgLootFile = missionConfigFile >> "CfgLoot" >> "Buildings";
            {
                if (isClass (_cfgLootFile >> typeOf _x)) then {
                    _buildingList set [count _buildingList,_x];
                };
            } count (getMarkerPos "center" nearObjects ["building",((getMarkerSize "center") select 1)]);
            _roadList = getMarkerPos "center" nearRoads ((getMarkerSize "center") select 1);
            
            _vehLimit = MaxVehicleLimit - (count _serverVehicleCounter);
            if (_vehLimit > 0) then {
                diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit));
                for "_x" from 1 to _vehLimit do {call spawn_vehicles;};
            } else {
                diag_log "HIVE: Vehicle Spawn limit reached!";
                _vehLimit = 0;
            };
            
            if (dayz_townGenerator) then {
                // Vanilla town generator spawns debris locally on each client
                MaxDynamicDebris = 0;
            } else {
                // Epoch global dynamic debris
                diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris));
                for "_x" from 1 to MaxDynamicDebris do {call spawn_roadblocks;};
            };

            diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes));
            for "_x" from 1 to MaxAmmoBoxes do {call spawn_ammosupply;};

            diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins));
            for "_x" from 1 to MaxMineVeins do {call spawn_mineveins;};
            
            diag_log format["HIVE: BENCHMARK - Server finished spawning %1 DynamicVehicles, %2 Debris, %3 SupplyCrates and %4 MineVeins in %5 seconds (scheduled)",_vehLimit,MaxDynamicDebris,MaxAmmoBoxes,MaxMineVeins,diag_tickTime - _startTime];
            
            //Update gear last after all dynamic vehicles are created to save random loot to database (low priority)
            {[_x,"gear"] call server_updateObject} count _vehiclesToUpdate;
        };
    };

  20. Ok both scripts worked 110% - I figured as much but I wanted to make sure Juan's was working as well since the other had already been proven working. It's pretty cool, can't even blow up a shed now which is what I wanted, now the jet guys can go nuts and not ruin loot areas below until a reboot.

    I also want to test something this weekend, it looks like I could take Juan's script and make multiple god mode structure spots pretty much anywhere, so I want to see if I can god mode all the structures at all the trader areas for a test. You guys should post these in the mods section for sure, there's bound to be others with mili servers that want to protect loot buildings - anways thanks again guys you freakin' rock!

  21. 7 minutes ago, salival said:

    Well you don't edit the radius, it does it for you based off the center marker so it's map independent.

    Ok I was kind of thinking that's what I was seeing but couldn't be 100% w/o asking. I'm still learning all this (almost one year since I started messing with dayz servers now) some code I can look at and pretty clearly see what it does, other code not so much. Thanks for clearing that up for me, I'll give it a spin tonight and test it out, thanks to both of you for the assistance I really appreciate it.

  22. I fell asleep before getting to test the initial code - I'll look into this today and I have all weekend to test. Salival I'm looking at that code you provided and having trouble seeing where to edit the radius, do I replace some of that with coordinates and a radius value or is it already set to affect the whole map? I'm not sure what the select 1)*2 does..

×
×
  • Create New...