EpochModTeam / DayZ-Epoch

Experimental DayZ Mod for Arma 2
http://epochmodteam.github.io/DayZ-Epoch
225 stars 400 forks source link

Epoch 1.0.7.1 Bugs #2187

Open AirwavesMan opened 1 year ago

AirwavesMan commented 1 year ago

Currently reported bugs:

We will prepare a hotfix file soon for the missionfiles.

ZzBombardierzZ commented 1 year ago

The default Battleye files also seem to kick players for placing the Server_Rack object.

ZzBombardierzZ commented 1 year ago

Also it seems https://github.com/EpochModTeam/DayZ-Epoch/pull/2162 didn't fix building over water in my testing. It seems like the distance calculation when placing an object over the water is still funky.

11:46:45 "Server_PublishObj error: Verification failed, player is too far from object. Distance: 46m/40m limit PV ARRAY: ["0",50c90f00# 1086282: sign_one_leg_h.p3d REMOTE,[193.144,[1032.23,447.776,55.2396],"76561198068668XXX",[[-0.2274,-0.973801,0],[0,0,1]]],[["76561198068668XXX",[66,111,109,98]]],B 1-1-B:1 (Bomb) REMOTE,"ıēŏĹĺĕŁłħŭŔńĈ"]" <- when placing a plot right next to myself over the water. Images: https://imgur.com/a/4gDmehv

Victor-the-Cleaner commented 1 year ago

Hi @ZzBombardierzZ, this is definitely a weird one. When I click through to your image, it looks like you are standing in the sea (maybe from a teleport?) but not swimming. The modular_build script prevents building while swimming anyway. One thing you could try is using the editor, place a few large metal floors at that location, allowing for about +1.8m at high tide, then add that to your custom map file. Fly out there, then start building, and eventually remove the original floors from the map file? Then you can go crazy and build the ultimate Bond villain seabase and take over the world.

All the testing for building on/over water was done the way a regular player would have to do it, so first building a pier out over the water and going from there. Also bear in mind that certain objects that are flagged as not allowed below ground mean they are not allowed below the water, including the plot pole. But it will tell you when the time comes. Are you able to try this and let us know if that works? Thanks.

ZzBombardierzZ commented 1 year ago

@Victor-the-Cleaner I didn’t swim or teleport out there. I spawned a bridge out there and flew out there. The other way (the classic way) people build in the middle of the ocean is by having two boats next to each other and getting out of one to be placed on top of the other. I tested it a couple times after a player told me their base decayed after a restart, so I checked the logs and it never published their base to the database, so I simply made the bridge out there so you guys could see an example. If you did the editor example you gave, you would have the same results as soon as you place the plot pole, as it wouldn’t save to the database.

the issue is simply the distance calculation. In verifySender, the position for the base part is using getPosATL while the position for the player is either using getPos or getPosASL. So when the distance calculation is done, the player is basically at the bottom of the ocean 120ish below the sea level

AirwavesMan commented 1 year ago

@ZzBombardierzZ The problem is not that simple. I am able to build a base in the ocean which stays without any problems. Im not able to reproduce your problem. Also please checke the code. We are getting the ATL position or the ASL position if it is on water not only the position. The new problem could be that we save the ASL to ATL @Victor-the-Cleaner ? But just switching to ATL makes also problems in verifySender. Ive tested that before. Basically all functions which use verifySender have to use the same calculation of the positions. Im also not sure if the calculation is different from map to map.

Victor-the-Cleaner commented 1 year ago

This line is where the error message originates: https://github.com/EpochModTeam/DayZ-Epoch/blob/9c116dd72f0bbfbeee5e9faae95f05ca7a63d3d4/SQF/dayz_server/compile/server_verifySender.sqf#L22 The _objPos variable is in ATL format because that's the format the database needs to recreate objects after a restart. But where it calculates _playerPos using fnc_getPos, it will be in ASL format at sea. So there's one potential problem. But also, the distance command when using positions requires AGL format, so weirdly it looks like it would never work properly. I've never had this problem though, and never seen that error until now, so I can't explain why it's happening now.

AirwavesMan commented 1 year ago

The other problem is that we only get in this specific example the ATL position from the object but not from all the other server_verifySender calls. Some of them can use ASL too.

Victor-the-Cleaner commented 1 year ago

It may be the sea depth that's causing it. If that location is 50m or so, it might have gone over a threshold.

ZzBombardierzZ commented 1 year ago

Yeah I noticed that as well. When I changed the verifySender player fnc_getPos to use ATL it lets you place the object fine but then removing using ASL and you can dupe parts. My current solution is to up the distance check to 150 if you are over the ocean.

Victor-the-Cleaner commented 1 year ago

It's odd that it even uses that global variable here. if (_objPos distance _playerPos > (Z_VehicleDistance + 10)) exitwith {

Z_VehicleDistance = 40; // Max distance a vehicle can be sold or accessed from at a trader.

TheFirstNoob commented 1 year ago

EVR hit player in SafeZones. AdminTools didnt affected for this. With SafeZone from AT/AH. W/O AT/AH player loss blood and knocked out in SafeZone.

ZzBombardierzZ commented 1 year ago

EVR hit player in SafeZones. AdminTools didnt affected for this. With SafeZone from AT/AH. W/O AT/AH player loss blood and knocked out in SafeZone.

Safezones don't give godmode so I think this would be more of an issue for admin tools or whichever safezone script you are using.

TheFirstNoob commented 1 year ago

I think it will be easier to add a DZE_SafeZonePosArray check inside EVR files. Or we have Set/GetVariable for check EVR?

ZzBombardierzZ commented 1 year ago

I think it will be easier to add a DZE_SafeZonePosArray check inside EVR files. Or we have Set/GetVariable for check EVR?

For the time being, whether AirwavesMan decides to add a fix later or BigEgg builds it into his Epoch Antihack/Admin Tools, here is the easiest solution for you or anyone who may want it.

In your custom compiles.sqf file, add this in the if (!isDedicated) then .... section: fnc_evr1 = fnc_evr; fnc_evr = { if (({player distance (_x select 0) < _x select 1} count DZE_SafeZonePosArray) > 0) exitWith {}; _this call fnc_evr1; }; It should work, but I haven't fully tested it.

This is will skip the entire script, including the ASPI warnings you see on the screen. If you wish to still have the warnings and flashes but not the damage, you can do this instead: fnc_evr1 = fnc_evr; fnc_evr = { if (({player distance (_x select 0) < _x select 1} count DZE_SafeZonePosArray) > 0 && _this == "Stage7") exitWith {}; _this call fnc_evr1; };

TheFirstNoob commented 1 year ago

image land_mbg_ger_rhus_1 have wrong coordinates for spawn loot

TheFirstNoob commented 1 year ago

@ZzBombardierzZ well script work but not correctly. If use second code players inside SZ after EVR always on have "state 7" or nothing happen. I try use other DZE_SafeZonePosArray check inside Client_EVR.sqf. After test answer.

ZzBombardierzZ commented 1 year ago

@TheFirstNoob Like I said, I didn't test it much. I'm not sure if I fully understand what the issue is that you're saying but if I understand correctly, something like this may be better: fnc_evr1 = fnc_evr; fnc_evr = { if (({player distance (_x select 0) < _x select 1} count DZE_SafeZonePosArray) > 0 && _this == "Stage7") exitWith {DZE_EVRStormRunning = false; player setVariable["combatNoTimeout", 0];}; _this call fnc_evr1; };

I try use other DZE_SafeZonePosArray check inside Client_EVR.sqf.

You could also do this, but just adds more mission space where I don't see it necessary.

TheFirstNoob commented 1 year ago

Not CombatTime. Think combatNoTimeout need change APSIState variable. Players cant exit cause Cannot Exit in EVR (But EVR is finish).