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

◆ ValidateSwap()

bool ValidateSwap ( inout Serializer ctx,
InventoryValidation validation )
protected

kumarjac: This indicates a failure in replication relationships as player full inventory should be synchronized always if player exists on the remote

Do not check for action validity on remotes or when performing through juncture. Juncture locks guarentee the item is safe to interact with and the server has validated the command at this point. Checking at this point is both wasteful and can result in a failure which leads to desync

Do not check for action validity on remotes or when performing through juncture. Juncture locks guarentee the item is safe to interact with and the server has validated the command at this point. Checking at this point is both wasteful and can result in a failure which leads to desync

Do not check for action validity on remotes or when performing through juncture. Juncture locks guarentee the item is safe to interact with and the server has validated the command at this point. Checking at this point is both wasteful and can result in a failure which leads to desync

Do not check for action validity on remotes or when performing through juncture. Juncture locks guarentee the item is safe to interact with and the server has validated the command at this point. Checking at this point is both wasteful and can result in a failure which leads to desync

Check if this this is being executed on the server and not by a juncture or AI

Continuing on with execution of rest of the function

Check whether the juncture for the related player and items has been acquired.

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

2358 {
2359 DayZPlayer playerOwner = GetDayZPlayerOwner();
2361 if (!swapValidation)
2362 return false;
2363
2364 array<EntityAI> itemsToRepair;
2365 InventoryLocation repairIl;
2366
2367 #ifdef ENABLE_LOGGING
2369 {
2370 Debug.InventoryMoveLog("STS = " + playerOwner.GetSimulationTimeStamp() + " src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1) + " dst1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst1) + " src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2) + " dst2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst2), "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2371 }
2372 #endif
2373
2374 if (validation.m_IsRemote && (!swapValidation.m_SrcItem1 || !swapValidation.m_SrcItem2))
2375 {
2376 if (!swapValidation.m_SrcItem2 && swapValidation.m_SrcItem1)
2377 {
2378 // Treat as a simple move of srcItem1 to dst1 on remote clients
2379 LocationSyncMoveEntity(swapValidation.m_Src1, swapValidation.m_Dst1);
2380 validation.m_Result = InventoryValidationResult.SUCCESS;
2381 return true;
2382 }
2383 else if (!swapValidation.m_SrcItem1 && swapValidation.m_SrcItem2)
2384 {
2385 // Treat as a simple move of srcItem2 to dst2 on remote clients
2386 LocationSyncMoveEntity(swapValidation.m_Src2, swapValidation.m_Dst2);
2387 validation.m_Result = InventoryValidationResult.SUCCESS;
2388 return true;
2389 }
2390 else
2391 {
2392 if (swapValidation.m_SkippedSwap)
2393 {
2394 #ifdef ENABLE_LOGGING
2396 {
2397 Debug.InventoryMoveLog("Remote - skipped", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2398 }
2399 #endif
2400 }
2401 else
2402 {
2404 #ifdef ENABLE_LOGGING
2406 {
2407 Debug.InventoryMoveLog("Failed - item1 or item2 not exist", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2408 }
2409 #endif
2410
2411 Error("[syncinv] HandleInputData remote input (cmd=SWAP) dropped, item not in bubble");
2412 }
2413 }
2414
2415 return true;
2416 }
2417
2418 EnableMovableOverride(swapValidation.m_SrcItem1);
2419 EnableMovableOverride(swapValidation.m_SrcItem2);
2420
2421 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && (swapValidation.m_SrcItem1 != swapValidation.m_DstItem1 || swapValidation.m_SrcItem2 != swapValidation.m_DstItem2) )
2422 {
2423 #ifdef ENABLE_LOGGING
2425 {
2426 if(swapValidation.m_SrcItem1 != swapValidation.m_DstItem1)
2427 Debug.InventoryMoveLog("Failed - src and dst are for different for first item", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
2428 if(swapValidation.m_SrcItem2 != swapValidation.m_DstItem2)
2429 Debug.InventoryMoveLog("Failed - src and dst are for different for second item", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
2430 }
2431
2433 {
2434 if(swapValidation.m_SrcItem1 != swapValidation.m_DstItem1)
2435 syncDebugPrint("[syncinv] HandleInputData Failed - first src and dst are for different items src item =" + swapValidation.m_SrcItem1 + " dst item =" + swapValidation.m_DstItem1);
2436 if(swapValidation.m_SrcItem2 != swapValidation.m_DstItem2)
2437 syncDebugPrint("[syncinv] HandleInputData Failed - second src and dst are for different items src item =" + swapValidation.m_SrcItem1 + " dst item =" + swapValidation.m_DstItem1);
2438 }
2439 #endif
2440
2441 if (GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2442 {
2443 swapValidation.m_Success = false;
2444 }
2445 else
2446 {
2447 return true;
2448 }
2449 }
2450
2454 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !PlayerCheckRequestSrc(swapValidation.m_Src1, GameInventory.c_MaxItemDistanceRadius))
2455 {
2456 #ifdef ENABLE_LOGGING
2458 {
2459 Debug.InventoryMoveLog("Failed - CheckRequestSrc1", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2460 }
2461
2463 {
2464 syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " failed src1 check with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1));
2465 }
2466 #endif
2467
2468 RemoveMovableOverride(swapValidation.m_SrcItem1);
2469 RemoveMovableOverride(swapValidation.m_SrcItem2);
2470
2471 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2472 {
2473 swapValidation.m_Success = false;
2474 #ifdef DIAG_DEVELOPER
2475 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsDesyncRepairEnable())
2476 {
2477 #endif
2478 itemsToRepair = new array<EntityAI>;
2479 repairIl = new InventoryLocation;
2480
2481 swapValidation.m_SrcItem1.GetInventory().GetCurrentInventoryLocation(repairIl);
2482
2483 if(swapValidation.m_Src1 != repairIl)
2484 {
2485 itemsToRepair.Insert(swapValidation.m_SrcItem1);
2486 }
2487
2488 swapValidation.m_SrcItem2.GetInventory().GetCurrentInventoryLocation(repairIl);
2489 if(swapValidation.m_Src2 != repairIl)
2490 {
2491 itemsToRepair.Insert(swapValidation.m_SrcItem2);
2492 }
2493
2494 if (itemsToRepair.Count())
2495 {
2497 }
2498 #ifdef DIAG_DEVELOPER
2499 }
2500 #endif
2501 }
2502 else
2503 {
2504 return true;
2505 }
2506 }
2507
2511 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !PlayerCheckRequestSrc(swapValidation.m_Src2, GameInventory.c_MaxItemDistanceRadius))
2512 {
2513 #ifdef ENABLE_LOGGING
2515 {
2516 Debug.InventoryMoveLog("Failed - CheckRequestSrc2", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2517 }
2518
2520 {
2521 syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " failed src2 check with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2));
2522 }
2523 #endif
2524
2525 RemoveMovableOverride(swapValidation.m_SrcItem1);
2526 RemoveMovableOverride(swapValidation.m_SrcItem2);
2527
2528 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2529 {
2530 swapValidation.m_Success = false;
2531 #ifdef DIAG_DEVELOPER
2532 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsDesyncRepairEnable())
2533 {
2534 #endif
2535 itemsToRepair = new array<EntityAI>;
2536 repairIl = new InventoryLocation;
2537
2538 swapValidation.m_SrcItem2.GetInventory().GetCurrentInventoryLocation(repairIl);
2539 if(swapValidation.m_Src2 != repairIl)
2540 {
2541 itemsToRepair.Insert(swapValidation.m_SrcItem2);
2542 }
2543
2544 if (itemsToRepair.Count())
2545 {
2547 }
2548 #ifdef DIAG_DEVELOPER
2549 }
2550 #endif
2551 }
2552 else
2553 {
2554 return true;
2555 }
2556 }
2557
2561 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !PlayerCheckSwapItemsRequest(swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2, GameInventory.c_MaxItemDistanceRadius))
2562 {
2563 #ifdef ENABLE_LOGGING
2565 {
2566 Debug.InventoryMoveLog("Failed - CheckSwapItemsRequest", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString());
2567 }
2568
2570 {
2571 syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " is cheating with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1) + " src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2) + " dst1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst1) + " dst2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst2));
2572 }
2573 #endif
2574
2575 RemoveMovableOverride(swapValidation.m_SrcItem1);
2576 RemoveMovableOverride(swapValidation.m_SrcItem2);
2577
2578 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2579 {
2580 swapValidation.m_Success = false;
2581 }
2582 else
2583 {
2584 return true;
2585 }
2586 }
2587
2588 RemoveMovableOverride(swapValidation.m_SrcItem1);
2589 RemoveMovableOverride(swapValidation.m_SrcItem2);
2590
2591 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2592 {
2593 ClearInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1);
2594 ClearInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2);
2595 }
2596
2600 if (swapValidation.m_Success && !validation.m_IsRemote && !GameInventory.CanForceSwapEntitiesEx(swapValidation.m_SrcItem1, swapValidation.m_Dst1, swapValidation.m_SrcItem2, swapValidation.m_Dst2))
2601 {
2602 #ifdef ENABLE_LOGGING
2603 #ifdef DEVELOPER
2604 DumpInventoryDebug();
2605 #endif
2606
2608 {
2609 Debug.InventoryMoveLog("Failed - CanForceSwapEntitiesEx", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString());
2610 }
2611 #endif
2612
2613 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2614 {
2615 if (swapValidation.m_Dst1)
2616 SendRepairToClientDst(swapValidation.m_Dst1);
2617
2618 if (swapValidation.m_Dst2)
2619 SendRepairToClientDst(swapValidation.m_Dst2);
2620 swapValidation.m_Success = false;
2621 }
2622 else
2623 {
2624 Error("[desync] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " CANNOT swap cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1) + " dst1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst1) +" | src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2) + " dst2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst2));
2625 return true;
2626 }
2627 }
2628
2629 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2630 {
2631 AddInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1, GameInventory.c_InventoryReservationTimeoutShortMS);
2632 AddInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2, GameInventory.c_InventoryReservationTimeoutShortMS);
2633 }
2634
2635 if (!(swapValidation.m_Src1.IsValid() && swapValidation.m_Src2.IsValid() && swapValidation.m_Dst1.IsValid() && swapValidation.m_Dst2.IsValid()))
2636 {
2637 Error("HandleInputData: cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " invalid input(s): src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1) + " src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2) + " dst1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst1) + " dst2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Dst2));
2638 return true;
2639 }
2640
2641 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
2642 {
2644 if (!validation.m_IsJuncture)
2645 {
2646 JunctureRequestResult resultSwap = TryAcquireTwoInventoryJuncturesFromServer(playerOwner, swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2);
2647 if (resultSwap == JunctureRequestResult.JUNCTURE_NOT_REQUIRED)
2648 {
2649 #ifdef ENABLE_LOGGING
2651 {
2652 Debug.InventoryMoveLog("Juncture not required", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString());
2653 }
2654 #endif
2655
2657 }
2658 else if (swapValidation.m_Success && resultSwap == JunctureRequestResult.JUNCTURE_ACQUIRED)
2659 {
2660 #ifdef ENABLE_LOGGING
2662 {
2663 Debug.InventoryMoveLog("Juncture sended", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
2664 }
2665 #endif
2666
2667 validation.m_Result = InventoryValidationResult.JUNCTURE;
2668 EnableMovableOverride(swapValidation.m_SrcItem1);
2669 EnableMovableOverride(swapValidation.m_SrcItem2);
2670 return true;
2671 }
2672 else
2673 {
2674 #ifdef ENABLE_LOGGING
2676 {
2677 Debug.InventoryMoveLog("Juncture denied", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
2678 }
2679 #endif
2680
2681 validation.m_Result = InventoryValidationResult.FAILED;
2682 validation.m_Reason = InventoryValidationReason.JUNCTURE_DENIED;
2683 return true;
2684 }
2685 }
2687 else if (validation.m_IsJuncture)
2688 {
2689 bool hasJuncture = false;
2690 int nonNullCount = 0;
2691 bool failed = false;
2692
2693 if (swapValidation.m_SrcItem1 != null)
2694 {
2695 nonNullCount++;
2696 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_SrcItem1))
2697 failed = true;
2698 }
2699
2700 if (!failed && swapValidation.m_SrcItem2 != null)
2701 {
2702 nonNullCount++;
2703 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_SrcItem2))
2704 failed = true;
2705 }
2706
2707 if (!failed && swapValidation.m_DstItem1 != null)
2708 {
2709 nonNullCount++;
2710 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_DstItem1))
2711 failed = true;
2712 }
2713
2714 if (!failed && swapValidation.m_DstItem2 != null)
2715 {
2716 nonNullCount++;
2717 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_DstItem2))
2718 failed = true;
2719 }
2720
2721 hasJuncture = (nonNullCount > 0 && !failed);
2722
2723 if (!hasJuncture)
2724 {
2725#ifdef ENABLE_LOGGING
2727 {
2728 Debug.InventoryMoveLog("Failed - missing juncture", "SWAP", "n/a", "ValidateSwap", GetDayZPlayerOwner().ToString() );
2729 }
2730#endif
2731 swapValidation.m_Success = false;
2732 }
2733 }
2734 }
2735
2736 if (GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2737 {
2738 ClearInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1);
2739 ClearInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2);
2740 }
2741 else
2742 {
2743 g_Game.ClearJunctureEx(playerOwner, swapValidation.m_DstItem1);
2744 g_Game.ClearJunctureEx(playerOwner, swapValidation.m_DstItem2);
2745 }
2746
2747 //TODO: hotfix solution
2748 if (!validation.m_IsRemote && validation.m_IsJuncture && !SwapCheckExclusionMaskLocal(swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2))
2749 {
2750 #ifdef ENABLE_LOGGING
2752 {
2753 Debug.InventoryMoveLog("Failed - !SwapCheckExclusionMaskLocal - condition failed locally", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2754 }
2755 #endif
2756 return false;
2757 }
2758
2759 #ifdef ENABLE_LOGGING
2761 {
2762 Debug.InventoryMoveLog("Success - item swap", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
2763 }
2764 #endif
2765
2766 if (swapValidation.m_Success)
2767 {
2768 bool isNotSkipped = LocationSwap(swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2);
2769 ctx = new ScriptInputUserData();
2770 InventoryInputUserData.SerializeSwap(ctx, swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2, !isNotSkipped);
2771 validation.m_Result = InventoryValidationResult.SUCCESS;
2772 }
2773
2774 return true;
2775 }
void syncDebugPrint(string s)
InventoryCommandType
InventoryValidationResult
InventoryValidationReason
void ClearInventoryReservationEx(ActionData action_data)
Определения ActionBase.c:1120
DayZGame g_Game
Определения DayZGame.c:4074
void EnableMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:3690
bool SwapCheckExclusionMaskLocal(notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2)
Local, checks only stuff that is in guaranteed sync.
Определения DayZPlayerInventory.c:4892
bool PlayerCheckRequestSrc(notnull InventoryLocation src, float radius)
Определения DayZPlayerInventory.c:4644
void RemoveMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:3683
void SendRepairToClientDst(notnull InventoryLocation dst)
Определения DayZPlayerInventory.c:4726
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:170
bool PlayerCheckSwapItemsRequest(notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2, float radius)
Определения DayZPlayerInventory.c:4777
proto string ToString()
JunctureRequestResult
Определения Hand_Events.c:28
bool TryAcquireTwoInventoryJuncturesFromServer(notnull Man player, notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2)
Определения Junctures.c:48
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
Определения DayZPlayerImplement.c:87
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
const int c_InventoryReservationTimeoutShortMS
static bool CanForceSwapEntitiesEx(notnull EntityAI item1, InventoryLocation item1_dst, notnull EntityAI item2, out InventoryLocation item2_dst)
const float c_MaxItemDistanceRadius
anti-cheats
script counterpart to engine's class Inventory
static void SerializeSwap(ParamsWriteContext ctx, notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2, bool skippedSwap)
swap
Определения InventoryInputUserData.c:70
static void SendServerInventoryCheck(array< EntityAI > items, DayZPlayer player)
Определения InventoryInputUserData.c:44
ref InventoryLocation m_Src2
ref InventoryLocation m_Src1
ref InventoryLocation m_Dst1
ref InventoryLocation m_Dst2
proto native bool IsValid()
verify current set inventory location
static string DumpToStringNullSafe(InventoryLocation loc)
Определения InventoryLocation.c:233
InventoryLocation.
Определения InventoryLocation.c:30
InventoryValidationResult m_Result
InventoryValidationReason m_Reason
static bool IsSyncLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:789
static bool IsInventoryMoveLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:759
Определения ObjectTyped.c:2
Определения gameplay.c:121
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1084
proto native DayZPlayerInstanceType GetInstanceType()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90

Перекрестные ссылки GameInventory::c_InventoryReservationTimeoutShortMS, GameInventory::c_MaxItemDistanceRadius, GameInventory::CanForceSwapEntitiesEx(), ClearInventoryReservationEx(), InventoryLocation::DumpToStringNullSafe(), EnableMovableOverride(), Error(), g_Game, GetDayZPlayerOwner(), GetInstanceType(), GetPlugin(), Debug::InventoryMoveLog(), LogManager::IsInventoryMoveLogEnable(), LogManager::IsSyncLogEnable(), InventoryLocation::IsValid(), InventoryJunctureSwapValidation::m_Dst1, InventoryJunctureSwapValidation::m_Dst2, InventoryJunctureSwapValidation::m_DstItem1, InventoryJunctureSwapValidation::m_DstItem2, InventoryValidation::m_IsJuncture, InventoryValidation::m_IsRemote, InventoryValidation::m_Reason, InventoryValidation::m_Result, InventoryJunctureSwapValidation::m_SkippedSwap, InventoryJunctureSwapValidation::m_Src1, InventoryJunctureSwapValidation::m_Src2, InventoryJunctureSwapValidation::m_SrcItem1, InventoryJunctureSwapValidation::m_SrcItem2, InventoryJunctureSwapValidation::m_Success, PlayerCheckRequestSrc(), PlayerCheckSwapItemsRequest(), RemoveMovableOverride(), SendRepairToClientDst(), InventoryInputUserData::SendServerInventoryCheck(), InventoryInputUserData::SerializeSwap(), SwapCheckExclusionMaskLocal(), syncDebugPrint(), ToString() и TryAcquireTwoInventoryJuncturesFromServer().

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