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

◆ ProcessInputData()

bool ProcessInputData ( ParamsReadContext ctx,
bool isJuncture,
bool isRemote )
protected
Возвращает
false on malformed data, true on anything else, including cheats

It should be impossible for juncture to be ran on remote

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

Only inform client about failure

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

Only send juncture back to client

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

3320 {
3321 if (isJuncture && isRemote)
3322 {
3324 return false;
3325 }
3326
3327 int type = -1;
3328 if (!ctx.Read(type))
3329 {
3330 return false;
3331 }
3332
3333 InventoryValidation validation = new InventoryValidation();
3334 validation.m_IsJuncture = isJuncture;
3335 validation.m_IsRemote = isRemote;
3336 validation.m_Mode = InventoryMode.JUNCTURE;
3337
3339 Serializer serializer = ctx;
3340
3341 switch (type)
3342 {
3343 case InventoryCommandType.USER_RESERVATION_CANCEL:
3344 if (!ValidateUserReservationCancel(serializer, validation))
3345 {
3346 return false;
3347 }
3348 break;
3349 case InventoryCommandType.SYNC_MOVE:
3350 if (!ValidateSyncMove(serializer, validation))
3351 {
3352 return false;
3353 }
3354 break;
3355 case InventoryCommandType.HAND_EVENT:
3356 if (!ValidateHandEvent(serializer, validation))
3357 {
3358 return false;
3359 }
3360 break;
3361 case InventoryCommandType.SWAP:
3362 if (!ValidateSwap(serializer, validation))
3363 {
3364 return false;
3365 }
3366 break;
3367 default:
3368 break;
3369 }
3370
3371 bool canSendJuncture = !isJuncture && GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER;
3372
3373 switch (validation.m_Result)
3374 {
3375 case InventoryValidationResult.FAILED:
3376 if (canSendJuncture)
3377 {
3379 if (!serializer.CanWrite())
3380 {
3381 ScriptInputUserData writeableSerializer();
3382 writeableSerializer.CopyFrom(serializer);
3383 serializer = writeableSerializer;
3384 }
3385
3386 serializer.Write(validation.m_Reason);
3387
3388 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY_FAILURE, serializer);
3389 }
3390 break;
3391 case InventoryValidationResult.JUNCTURE:
3392 if (canSendJuncture)
3393 {
3394 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY, serializer);
3395 //StoreInputForRemotes(isJuncture, isRemote, serializer);
3396 }
3397 else
3398 {
3399 Error("InventoryValidationResult.JUNCTURE returned when not possible to send!");
3400 }
3401 break;
3402 case InventoryValidationResult.SUCCESS:
3403 StoreInputForRemotes(isJuncture, isRemote, serializer);
3404 break;
3405 }
3406
3407 return true;
3408 }
InventoryCommandType
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
InventoryValidationResult
bool ValidateSyncMove(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:807
bool ValidateHandEvent(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1519
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:170
bool ValidateSwap(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:2357
bool StoreInputForRemotes(bool handling_juncture, bool remote, ParamsReadContext ctx)
Определения DayZPlayerInventory.c:3710
static const int SJ_INVENTORY_FAILURE
Определения DayZPlayerSyncJunctures.c:32
static const int SJ_INVENTORY
Определения DayZPlayerSyncJunctures.c:11
InventoryValidationResult m_Result
InventoryValidationReason m_Reason
Определения 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
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1084
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90

Перекрестные ссылки Serializer::CanWrite(), ScriptInputUserData::CopyFrom(), Error(), GetDayZPlayerOwner(), 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(), ValidateHandEvent(), ValidateSwap(), ValidateSyncMove() и Serializer::Write().

Используется в OnHandleStoredInputUserData(), OnHandleStoredJunctureData(), OnInputUserDataForRemote() и OnServerInventoryCommand().