DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ ValidateInventoryCommandServer()

bool ValidateInventoryCommandServer ( ParamsReadContext ctx)
protected

Serializer can be updated and re-written to when we may want to only correct the client instead of denying the inventory command

General purpose serializer change from read to write here if the validation doesn't update it

См. определение в файле DayZPlayerInventory.c строка 3410

3411 {
3412 int type = -1;
3413 if (!ctx.Read(type))
3414 {
3415 return false;
3416 }
3417
3418 InventoryValidation validation = new InventoryValidation();
3419 validation.m_IsJuncture = false;
3420 validation.m_IsRemote = false;
3421 validation.m_Mode = InventoryMode.JUNCTURE;
3422
3424 Serializer serializer = ctx;
3425
3426 switch (type)
3427 {
3428 case InventoryCommandType.USER_RESERVATION_CANCEL:
3429 if (!ValidateUserReservationCancel(serializer, validation))
3430 {
3431 return false;
3432 }
3433 break;
3434 case InventoryCommandType.SYNC_MOVE:
3435 if (!ValidateSyncMoveServer(serializer, validation))
3436 {
3437 return false;
3438 }
3439 break;
3440 case InventoryCommandType.HAND_EVENT:
3441 if (!ValidateHandEventServer(serializer, validation))
3442 {
3443 return false;
3444 }
3445 break;
3446 case InventoryCommandType.SWAP:
3447 if (!ValidateSwapServer(serializer, validation))
3448 {
3449 return false;
3450 }
3451 break;
3452 default:
3453 break;
3454 }
3455
3456
3457 switch (validation.m_Result)
3458 {
3459 case InventoryValidationResult.FAILED:
3460#ifdef ENABLE_LOGGING
3462 {
3463 Debug.InventoryMoveLog("InventoryValidationResult.FAILED STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp(), "SYNC_MOVE" , "n/a", "ValidateInventoryCommandServer", GetDayZPlayerOwner().ToString() );
3464 }
3465#endif
3467 if (!serializer.CanWrite())
3468 {
3469 ScriptInputUserData writeableSerializer();
3470 writeableSerializer.CopyFrom(serializer);
3471 serializer = writeableSerializer;
3472 }
3473 serializer.Write(validation.m_Reason);
3474
3475 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY_FAILURE, serializer);
3476 break;
3477 case InventoryValidationResult.JUNCTURE:
3478#ifdef ENABLE_LOGGING
3480 {
3481 Debug.InventoryMoveLog("InventoryValidationResult.JUNCTURE sended STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp(), "SYNC_MOVE" , "n/a", "ValidateInventoryCommandServer", GetDayZPlayerOwner().ToString() );
3482 }
3483#endif
3484 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY, serializer);
3485 break;
3486 case InventoryValidationResult.SUCCESS:
3487#ifdef ENABLE_LOGGING
3489 {
3490 Debug.InventoryMoveLog("InventoryValidationResult.SUCCESS executed STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp(), "SYNC_MOVE" , "n/a", "ValidateInventoryCommandServer", GetDayZPlayerOwner().ToString() );
3491 }
3492#endif
3493 StoreInputForRemotes(false, false, serializer);
3494 break;
3495 }
3496
3497 return true;
3498
3499
3500 }
InventoryCommandType
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
InventoryValidationResult
bool ValidateSyncMoveServer(ParamsReadContext ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1136
bool ValidateSwapServer(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:2777
bool ValidateHandEventServer(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1840
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:170
bool StoreInputForRemotes(bool handling_juncture, bool remote, ParamsReadContext ctx)
Определения DayZPlayerInventory.c:3710
proto string ToString()
static const int SJ_INVENTORY_FAILURE
Определения DayZPlayerSyncJunctures.c:32
static const int SJ_INVENTORY
Определения DayZPlayerSyncJunctures.c:11
static void InventoryMoveLog(string message=LOG_DEFAULT, string plugin=LOG_DEFAULT, string author=LOG_DEFAULT, string label=LOG_DEFAULT, string entity=LOG_DEFAULT)
Определения 3_Game/DayZ/tools/Debug.c:198
Определения 3_Game/DayZ/tools/Debug.c:2
InventoryValidationResult m_Result
InventoryValidationReason m_Reason
static bool IsInventoryMoveLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:759
Определения gameplay.c:121
proto bool Write(void value_out)
proto bool Read(void value_in)
proto native bool CanWrite()
Serialization general interface. Serializer API works with:
Определения Serializer.c:56

Перекрестные ссылки Serializer::CanWrite(), ScriptInputUserData::CopyFrom(), GetDayZPlayerOwner(), Debug::InventoryMoveLog(), LogManager::IsInventoryMoveLogEnable(), InventoryValidation::m_IsJuncture, InventoryValidation::m_IsRemote, InventoryValidation::m_Mode, InventoryValidation::m_Reason, InventoryValidation::m_Result, Serializer::Read(), DayZPlayerSyncJunctures::SJ_INVENTORY, DayZPlayerSyncJunctures::SJ_INVENTORY_FAILURE, StoreInputForRemotes(), ToString(), ValidateHandEventServer(), ValidateSwapServer(), ValidateSyncMoveServer() и Serializer::Write().

Используется в OnHandleStoredInputUserData().