Sign in to follow this  
Followers 0
WURSTKETTE

Possible Vehicle Dupe?

8 posts in this topic

Hey there,

just flew over the yesterday activity on our server when i saw something "suspicious" in the tradinglogs - i'm not sure if just farming cars (you could slingload them with O_Heli_Transport_04_F) or some kinda way to duplicate those trucks.

Since it was right after restart, i would say, fresh cars - 1h car farming - 10 cars ok - all good....but it bug the sh*** out of me, it's only about repair and medical and it's on a rotating basis.

Another point are the times there is never more then 10minutes between selling. Like 6:19 sold medical - 6:21 sold hummingbird - 6:24 sold medical - since you have to sell, put money in locker (actually what he did), take off, land, attach rope, take off - sell...damn i might be paranoid but that's a pretty short time, cuz not all those cars spawn in a range of 5km (nedless to say you have to find them too tho).

I also checked the map over the last restarts and i never found more then 5-8 medical/repair at all (running tanoa). I mean, even if there are 11 cars (repair/medical) spawned, you might could find them all but then again on a rotating basis? Repair - Medic - Repair - Medic -Repair - Medic

Since we're running Advanced Slingloading and a wastedump override for attached cargos on the slingload, i thought here might be a loophole or maybe i'm just to paranoid :)

 

If i might need to provide other logs to have a look, give ma a shot.

 

Thanks for taking a look

Tradinglog

Spoiler

[05:22:37:785072 +00:-1] [Thread 2200] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo ["RPG32_F","RPG32_F","Exile_Item_BaseCameraKit","Titan_AT","launch_RPG32_ghex_F","RPG32_F"] FOR 37125 POPTABS AND 5568.75 RESPECT | PLAYER TOTAL MONEY: 37125
[06:03:22:885951 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE PURCHASED VEHICLE O_Heli_Transport_04_F FOR 45000 POPTABS | PLAYER TOTAL MONEY: 0
[06:09:46:229615 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[06:19:09:420977 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_02_medical_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750

[06:21:22:238544 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: Exile_Chopper_Hummingbird_Civillian_Wasp (ID# <null>) with Cargo [] FOR 4950 POPTABS AND 742.5 RESPECT | PLAYER TOTAL MONEY: 4950


[06:24:10:522546 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_02_medical_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 29700
[06:28:50:021115 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[06:35:13:605164 +00:-1] [Thread 8180] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_02_medical_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[06:43:01:111617 +00:-1] [Thread 7288] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[06:48:33:987224 +00:-1] [Thread 7288] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_02_medical_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[06:59:19:475059 +00:-1] [Thread 7288] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[07:07:38:236571 +00:-1] [Thread 7288] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_02_medical_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750
[07:11:48:422649 +00:-1] [Thread 7288] PLAYER: ( UID ) R GROUP:1 (USERNAME) REMOTE SOLD ITEM: O_Truck_03_repair_F (ID# <null>) with Cargo [] FOR 24750 POPTABS AND 3712.5 RESPECT | PLAYER TOTAL MONEY: 24750

Wastedumprequest.sqf

Spoiler

/**
 * ExileServer_system_trading_network_wasteDumpRequest
 *
 * Exile Mod
 * www.exilemod.com
 * © 2015 Exile Mod Team
 *
 * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
 * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
 */
 
private["_sessionID","_parameters","_vehicleNetID","_mode","_vehicleObject","_vehicleDBID","_playerObject","_cargo","_revenue","_playerMoney","_respectGain","_playerRespect","_logging","_traderLog","_responseCode"];
_sessionID = _this select 0;
_parameters = _this select 1;
_vehicleNetID = _parameters select 0;
_mode = _parameters select 1;
try
{
    _vehicleObject = objectFromNetId _vehicleNetID;
    _vehicleDBID = _vehicleObject getVariable "ExileDatabaseID";
    if (isNull _vehicleObject) then
    {
        throw 6;
    };
    if (_vehicleObject getVariable ["ExileMutex", false]) then
    {
        throw 12;
    };
    _vehicleObject setVariable ["ExileMutex", true];
    _playerObject = _sessionID call ExileServer_system_session_getPlayerObject;
    if (isNull _playerObject) then
    {
        throw 1;
    };
    if !(alive _playerObject) then
    {
        throw 2;
    };
    if !((owner _vehicleObject) isEqualTo (owner _playerObject)) then
    {
        throw 6;
    };
    /* deafult
    _cargo = _vehicleObject call ExileClient_util_containerCargo_list;
    _revenue = _cargo call ExileClient_util_gear_calculateTotalSellPrice;
    clearBackpackCargoGlobal _vehicleObject;
    clearItemCargoGlobal _vehicleObject;
    clearMagazineCargoGlobal _vehicleObject;
    clearWeaponCargoGlobal _vehicleObject;
    */
    _cargo = [];
    _revenue = 0;
    
    if(_mode isEqualTo 1) then
    {
        //standard cargo
        _cargo = _vehicleObject call ExileClient_util_containerCargo_list;
        _revenue = _cargo call ExileClient_util_gear_calculateTotalSellPrice;
        clearBackpackCargoGlobal _vehicleObject;
        clearItemCargoGlobal _vehicleObject;
        clearMagazineCargoGlobal _vehicleObject;
        clearWeaponCargoGlobal _vehicleObject;
        _vehicleObject call ExileServer_object_vehicle_database_update;
    };
    if(_mode isEqualTo 2) then
    {
        if (count (_vehicleObject getVariable ["ASL_Cargo", []]) >0) then
        {
            {
                _cargo = _x call ExileClient_util_containerCargo_list;
                _revenue = _revenue + (_cargo call ExileClient_util_gear_calculateTotalSellPrice);
                _revenue = _revenue + ([(typeOf _x)] call ExileClient_util_gear_calculateTotalSellPrice);
                clearBackpackCargoGlobal _x;
                clearItemCargoGlobal _x;
                clearMagazineCargoGlobal _x;
                clearWeaponCargoGlobal _x;
                _x call ExileServer_object_vehicle_remove;
                deleteVehicle _x;
            }forEach (_vehicleObject getVariable ["ASL_Cargo", []]);
        };
        _vehicleObject setVariable ["ASL_Cargo", [], true];
        _vehicleObject call ExileServer_object_vehicle_database_update;
    };
    if (_mode isEqualTo 3) then
    {
            {
                _cargo = _x call ExileClient_util_containerCargo_list;
                _revenue = _revenue + (_cargo call ExileClient_util_gear_calculateTotalSellPrice);
                _revenue = _revenue + ([(typeOf _x)] call ExileClient_util_gear_calculateTotalSellPrice);
                clearBackpackCargoGlobal _x;
                clearItemCargoGlobal _x;
                clearMagazineCargoGlobal _x;
                clearWeaponCargoGlobal _x;
                _x call ExileServer_object_vehicle_remove;
                deleteVehicle _x;
            }forEach (_vehicleObject getVariable ["ASL_Cargo", []]);

        //standard cargo
        _cargo = _vehicleObject call ExileClient_util_containerCargo_list;
        _revenue = _revenue + (_cargo call ExileClient_util_gear_calculateTotalSellPrice);
        clearBackpackCargoGlobal _vehicleObject;
        clearItemCargoGlobal _vehicleObject;
        clearMagazineCargoGlobal _vehicleObject;
        clearWeaponCargoGlobal _vehicleObject;
        
        _revenue = _revenue + ([(typeOf _vehicleObject)] call ExileClient_util_gear_calculateTotalSellPrice);
        _vehicleObject call ExileServer_object_vehicle_remove;
        deleteVehicle _vehicleObject;
    };
    /*
    else
    {
        _vehicleObject call ExileServer_object_vehicle_database_update;
    };
    */
    _playerMoney = _playerObject getVariable ["ExileMoney", 0];
    _playerMoney = _playerMoney + _revenue;
    _playerObject setVariable ["ExileMoney", _playerMoney, true];
    format["setPlayerMoney:%1:%2", _playerMoney, _playerObject getVariable ["ExileDatabaseID", 0]] call ExileServer_system_database_query_fireAndForget;
    _respectGain = _revenue * getNumber (configFile >> "CfgSettings" >> "Respect" >> "tradingRespectFactor");
    _playerRespect = _playerObject getVariable ["ExileScore", 0];
    _playerRespect = floor (_playerRespect + _respectGain);
    _playerObject setVariable ["ExileScore", _playerRespect];
    format["setAccountScore:%1:%2", _playerRespect, (getPlayerUID _playerObject)] call ExileServer_system_database_query_fireAndForget;
    [_sessionID, "wasteDumpResponse", [0, _revenue, str _playerRespect]] call ExileServer_system_network_send_to;
    _logging = getNumber(configFile >> "CfgSettings" >> "Logging" >> "traderLogging");
    if (_logging isEqualTo 1) then
    {
        _traderLog = format ["PLAYER: ( %1 ) %2 SOLD ITEM: %3 (ID# %4) with Cargo %5 FOR %6 POPTABS AND %7 RESPECT | PLAYER TOTAL MONEY: %8",getPlayerUID _playerObject,_playerObject,typeOf _vehicleObject,_vehicleDBID,_cargo,_revenue,_respectGain,_playerMoney];
        "extDB2" callExtension format["1:TRADING:%1",_traderLog];
    };
}
catch
{
    _responseCode = _exception;
    [_sessionID, "wasteDumpResponse", [_responseCode, 0, ""]] call ExileServer_system_network_send_to;
};
if (!isNull _vehicleObject) then
{
    _vehicleObject setVariable ["ExileMutex", false];
};
true

 

Edited by WURSTKETTE

Share this post


Link to post
Share on other sites

On our server, I noticed something "suspicious" too, except I immediately banned the user, and his family.  Because what these people are doing is what I used to do on call of duty on the 360.

It's a lagswitch, or at the very least that's what it looks like.

User has a way of physically bottlenecking his network, digitally he is sound, so isn't kicked by the pingbscript, although their ping reaches over 9000. In doing this they can spam click, or in the case of the pic I'll post below, use a macro click, and they can sell the same Vic, multiple times in a super short window. I counted 120 of these striders, before I got to pissed to be bothered and started slamming digital heads in. Enjoy the pic, if you want more information let me know.

 

Also, pay attention to time stamp, vehicle I'd and money earned.

tmp_8717-benparker11224343678.png

Share this post


Link to post
Share on other sites
Advertisement

I am seeing more and more of this on my server and am able to catch them with logging and some other back end checks that I have custom built into my web based admin panel.  I actually got one of these tools to admit how they did it and I reported it to @infiSTAR.  I think he has a server side fix and asked him if he wouldn't mind posting that so server admins can hotfix.

Share this post


Link to post
Share on other sites

We've had this running a few days and it indeed stops the dupe 

1 person likes this

Share this post


Link to post
Share on other sites

mh I did not test it, must have been an mistake but I re-changed it anyways after getting told by dave that a timeout of 120 seconds is the best (no extra like stopping the timeout when the vehicle is deleted more early) because if they try to pull their cable for that long, they would get kicked for "client not responding"

here the new code:
 

Spoiler

/*
* ExileClient_gui_wasteDumpDialog_event_onSellButtonClick
*
* Exile Mod
* www.exilemod.com
* © 2015 Exile Mod Team
*
* This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 
* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/.

note:
	120 seconds because if they try to do the "lag-out" dupe, BE would kick them for client not responding! :)
*/
if(!isNil'wastedump_button_click')exitWith{closeDialog 0;true};

_fn_block_wasteDumpSellButton = {
	disableSerialization;
	_timer = time + 120;
	_gd = {(findDisplay 24011) displayCtrl _this};
	waitUntil {
		(4000 call _gd) ctrlEnable false;
		(4002 call _gd) ctrlEnable false;
		if(isNull (findDisplay 24011))then
		{
			hintSilent '';
		}
		else
		{
			hintSilent parseText format['<t size=''1.5'' font=''OrbitronLight'' color=''#2784D6''>please wait %1s, anti dupe sell waiting</t>',round(_timer - time)];
		};
		time > _timer
	};
	hintSilent '';
	(4000 call _gd) ctrlEnable true;
	(4002 call _gd) ctrlEnable true;
	wastedump_button_click = nil;
};

disableSerialization;
_display = uiNameSpace getVariable ['RscExileWasteDumpDialog', displayNull];
_lbctrl = _display displayCtrl 4002;
_index = lbCurSel _lbctrl;
_vehicleNetID = _lbctrl lbData _index;
_vehicle = objectFromNetId _vehicleNetID;
_mode = _lbctrl lbValue _index;

if(isNull _vehicle)exitWith{closeDialog 0;true};
wastedump_button_click = [] spawn _fn_block_wasteDumpSellButton;

if(ctrlEnabled _lbctrl)then{
	['wasteDumpRequest', [_vehicleNetID, _mode]] call ExileClient_system_network_send;
};
closeDialog 0;true

 

 

3 people like this

Share this post


Link to post
Share on other sites
25 minutes ago, serveratze said:

Thank you works now well 

that's good to know, thank you too :)

1 person likes this

Share this post


Link to post
Share on other sites
Advertisement

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
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.