DayZ 1.29
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 строка 1344

1345 {
1346 DayZPlayer playerOwner = GetDayZPlayerOwner();
1348 if (!swapValidation)
1349 return false;
1350
1351 array<EntityAI> itemsToRepair;
1352 InventoryLocation repairIl;
1353
1354 #ifdef ENABLE_LOGGING
1356 {
1357 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() );
1358 }
1359 #endif
1360
1361 if (validation.m_IsRemote && (!swapValidation.m_SrcItem1 || !swapValidation.m_SrcItem2))
1362 {
1363 if (!swapValidation.m_SrcItem2 && swapValidation.m_SrcItem1)
1364 {
1365 // Treat as a simple move of srcItem1 to dst1 on remote clients
1366 LocationSyncMoveEntity(swapValidation.m_Src1, swapValidation.m_Dst1);
1367 validation.m_Result = InventoryValidationResult.SUCCESS;
1368 return true;
1369 }
1370 else if (!swapValidation.m_SrcItem1 && swapValidation.m_SrcItem2)
1371 {
1372 // Treat as a simple move of srcItem2 to dst2 on remote clients
1373 LocationSyncMoveEntity(swapValidation.m_Src2, swapValidation.m_Dst2);
1374 validation.m_Result = InventoryValidationResult.SUCCESS;
1375 return true;
1376 }
1377 else
1378 {
1379 if (swapValidation.m_SkippedSwap)
1380 {
1381 #ifdef ENABLE_LOGGING
1383 {
1384 Debug.InventoryMoveLog("Remote - skipped", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
1385 }
1386 #endif
1387 }
1388 else
1389 {
1391 #ifdef ENABLE_LOGGING
1393 {
1394 Debug.InventoryMoveLog("Failed - item1 or item2 not exist", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
1395 }
1396 #endif
1397
1398 Error("[syncinv] HandleInputData remote input (cmd=SWAP) dropped, item not in bubble");
1399 }
1400 }
1401
1402 return true;
1403 }
1404
1405 EnableMovableOverride(swapValidation.m_SrcItem1);
1406 EnableMovableOverride(swapValidation.m_SrcItem2);
1407
1408 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && (swapValidation.m_SrcItem1 != swapValidation.m_DstItem1 || swapValidation.m_SrcItem2 != swapValidation.m_DstItem2) )
1409 {
1410 #ifdef ENABLE_LOGGING
1412 {
1413 if(swapValidation.m_SrcItem1 != swapValidation.m_DstItem1)
1414 Debug.InventoryMoveLog("Failed - src and dst are for different for first item", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
1415 if(swapValidation.m_SrcItem2 != swapValidation.m_DstItem2)
1416 Debug.InventoryMoveLog("Failed - src and dst are for different for second item", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
1417 }
1418
1420 {
1421 if(swapValidation.m_SrcItem1 != swapValidation.m_DstItem1)
1422 syncDebugPrint("[syncinv] HandleInputData Failed - first src and dst are for different items src item =" + swapValidation.m_SrcItem1 + " dst item =" + swapValidation.m_DstItem1);
1423 if(swapValidation.m_SrcItem2 != swapValidation.m_DstItem2)
1424 syncDebugPrint("[syncinv] HandleInputData Failed - second src and dst are for different items src item =" + swapValidation.m_SrcItem1 + " dst item =" + swapValidation.m_DstItem1);
1425 }
1426 #endif
1427
1428 if (GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1429 {
1430 swapValidation.m_Success = false;
1431 }
1432 else
1433 {
1434 return true;
1435 }
1436 }
1437
1441 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !PlayerCheckRequestSrc(swapValidation.m_Src1, GameInventory.c_MaxItemDistanceRadius))
1442 {
1443 #ifdef ENABLE_LOGGING
1445 {
1446 Debug.InventoryMoveLog("Failed - CheckRequestSrc1", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
1447 }
1448
1450 {
1451 syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " failed src1 check with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src1=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src1));
1452 }
1453 #endif
1454
1455 RemoveMovableOverride(swapValidation.m_SrcItem1);
1456 RemoveMovableOverride(swapValidation.m_SrcItem2);
1457
1458 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1459 {
1460 swapValidation.m_Success = false;
1461 #ifdef DIAG_DEVELOPER
1462 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsDesyncRepairEnable())
1463 {
1464 #endif
1465 itemsToRepair = new array<EntityAI>;
1466 repairIl = new InventoryLocation;
1467
1468 swapValidation.m_SrcItem1.GetInventory().GetCurrentInventoryLocation(repairIl);
1469
1470 if(swapValidation.m_Src1 != repairIl)
1471 {
1472 itemsToRepair.Insert(swapValidation.m_SrcItem1);
1473 }
1474
1475 swapValidation.m_SrcItem2.GetInventory().GetCurrentInventoryLocation(repairIl);
1476 if(swapValidation.m_Src2 != repairIl)
1477 {
1478 itemsToRepair.Insert(swapValidation.m_SrcItem2);
1479 }
1480
1481 if (itemsToRepair.Count())
1482 {
1484 }
1485 #ifdef DIAG_DEVELOPER
1486 }
1487 #endif
1488 }
1489 else
1490 {
1491 return true;
1492 }
1493 }
1494
1498 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !PlayerCheckRequestSrc(swapValidation.m_Src2, GameInventory.c_MaxItemDistanceRadius))
1499 {
1500 #ifdef ENABLE_LOGGING
1502 {
1503 Debug.InventoryMoveLog("Failed - CheckRequestSrc2", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
1504 }
1505
1507 {
1508 syncDebugPrint("[cheat] HandleInputData man=" + Object.GetDebugName(GetManOwner()) + " failed src2 check with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.SWAP) + " src2=" + InventoryLocation.DumpToStringNullSafe(swapValidation.m_Src2));
1509 }
1510 #endif
1511
1512 RemoveMovableOverride(swapValidation.m_SrcItem1);
1513 RemoveMovableOverride(swapValidation.m_SrcItem2);
1514
1515 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1516 {
1517 swapValidation.m_Success = false;
1518 #ifdef DIAG_DEVELOPER
1519 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsDesyncRepairEnable())
1520 {
1521 #endif
1522 itemsToRepair = new array<EntityAI>;
1523 repairIl = new InventoryLocation;
1524
1525 swapValidation.m_SrcItem2.GetInventory().GetCurrentInventoryLocation(repairIl);
1526 if(swapValidation.m_Src2 != repairIl)
1527 {
1528 itemsToRepair.Insert(swapValidation.m_SrcItem2);
1529 }
1530
1531 if (itemsToRepair.Count())
1532 {
1534 }
1535 #ifdef DIAG_DEVELOPER
1536 }
1537 #endif
1538 }
1539 else
1540 {
1541 return true;
1542 }
1543 }
1544
1548 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))
1549 {
1550 #ifdef ENABLE_LOGGING
1552 {
1553 Debug.InventoryMoveLog("Failed - CheckSwapItemsRequest", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString());
1554 }
1555
1557 {
1558 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));
1559 }
1560 #endif
1561
1562 RemoveMovableOverride(swapValidation.m_SrcItem1);
1563 RemoveMovableOverride(swapValidation.m_SrcItem2);
1564
1565 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1566 {
1567 swapValidation.m_Success = false;
1568 }
1569 else
1570 {
1571 return true;
1572 }
1573 }
1574
1575 RemoveMovableOverride(swapValidation.m_SrcItem1);
1576 RemoveMovableOverride(swapValidation.m_SrcItem2);
1577
1578 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
1579 {
1580 ClearInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1);
1581 ClearInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2);
1582 }
1583
1587 if (swapValidation.m_Success && !validation.m_IsRemote && !validation.m_IsJuncture && !GameInventory.CanForceSwapEntitiesEx(swapValidation.m_SrcItem1, swapValidation.m_Dst1, swapValidation.m_SrcItem2, swapValidation.m_Dst2))
1588 {
1589 #ifdef ENABLE_LOGGING
1590 #ifdef DEVELOPER
1591 DumpInventoryDebug();
1592 #endif
1593
1595 {
1596 Debug.InventoryMoveLog("Failed - CanForceSwapEntitiesEx", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString());
1597 }
1598 #endif
1599
1600 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1601 {
1602 if (swapValidation.m_Dst1)
1603 SendRepairToClientDst(swapValidation.m_Dst1);
1604
1605 if (swapValidation.m_Dst2)
1606 SendRepairToClientDst(swapValidation.m_Dst2);
1607 swapValidation.m_Success = false;
1608 }
1609 else
1610 {
1611 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));
1612 return true;
1613 }
1614 }
1615
1616 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
1617 {
1618 AddInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1, GameInventory.c_InventoryReservationTimeoutShortMS);
1619 AddInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2, GameInventory.c_InventoryReservationTimeoutShortMS);
1620 }
1621
1622 if (!(swapValidation.m_Src1.IsValid() && swapValidation.m_Src2.IsValid() && swapValidation.m_Dst1.IsValid() && swapValidation.m_Dst2.IsValid()))
1623 {
1624 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));
1625 return true;
1626 }
1627
1628 if (playerOwner.GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER)
1629 {
1631 if (!validation.m_IsJuncture)
1632 {
1633 JunctureRequestResult resultSwap = TryAcquireTwoInventoryJuncturesFromServer(playerOwner, swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2);
1634 if (resultSwap == JunctureRequestResult.JUNCTURE_NOT_REQUIRED)
1635 {
1636 #ifdef ENABLE_LOGGING
1638 {
1639 Debug.InventoryMoveLog("Juncture not required", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString());
1640 }
1641 #endif
1642
1644 }
1645 else if (swapValidation.m_Success && resultSwap == JunctureRequestResult.JUNCTURE_ACQUIRED)
1646 {
1647 #ifdef ENABLE_LOGGING
1649 {
1650 Debug.InventoryMoveLog("Juncture sended", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
1651 }
1652 #endif
1653
1654 validation.m_Result = InventoryValidationResult.JUNCTURE;
1655 EnableMovableOverride(swapValidation.m_SrcItem1);
1656 EnableMovableOverride(swapValidation.m_SrcItem2);
1657 return true;
1658 }
1659 else
1660 {
1661 #ifdef ENABLE_LOGGING
1663 {
1664 Debug.InventoryMoveLog("Juncture denied", "SWAP" , "n/a", "ProcessInputData", GetDayZPlayerOwner().ToString() );
1665 }
1666 #endif
1667
1668 validation.m_Result = InventoryValidationResult.FAILED;
1669 validation.m_Reason = InventoryValidationReason.JUNCTURE_DENIED;
1670 return true;
1671 }
1672 }
1674 else if (validation.m_IsJuncture)
1675 {
1676 bool hasJuncture = false;
1677 int nonNullCount = 0;
1678 bool failed = false;
1679
1680 if (swapValidation.m_SrcItem1 != null)
1681 {
1682 nonNullCount++;
1683 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_SrcItem1))
1684 failed = true;
1685 }
1686
1687 if (!failed && swapValidation.m_SrcItem2 != null)
1688 {
1689 nonNullCount++;
1690 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_SrcItem2))
1691 failed = true;
1692 }
1693
1694 if (!failed && swapValidation.m_DstItem1 != null)
1695 {
1696 nonNullCount++;
1697 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_DstItem1))
1698 failed = true;
1699 }
1700
1701 if (!failed && swapValidation.m_DstItem2 != null)
1702 {
1703 nonNullCount++;
1704 if (!g_Game.HasInventoryJuncture(playerOwner, swapValidation.m_DstItem2))
1705 failed = true;
1706 }
1707
1708 hasJuncture = (nonNullCount > 0 && !failed);
1709
1710 if (!hasJuncture)
1711 {
1712 swapValidation.m_Success = false;
1713 }
1714 }
1715 }
1716
1717 if (GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
1718 {
1719 ClearInventoryReservationEx(swapValidation.m_DstItem1, swapValidation.m_Dst1);
1720 ClearInventoryReservationEx(swapValidation.m_DstItem2, swapValidation.m_Dst2);
1721 }
1722 else
1723 {
1724 g_Game.ClearJunctureEx(playerOwner, swapValidation.m_DstItem1);
1725 g_Game.ClearJunctureEx(playerOwner, swapValidation.m_DstItem2);
1726 }
1727
1728 //TODO: hotfix solution
1729 if (!validation.m_IsRemote && validation.m_IsJuncture && !SwapCheckExclusionMaskLocal(swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2))
1730 {
1731 #ifdef ENABLE_LOGGING
1733 {
1734 Debug.InventoryMoveLog("Failed - !SwapCheckExclusionMaskLocal - condition failed locally", "SYNC_MOVE" , "n/a", "ProcessInputData", playerOwner.ToString() );
1735 }
1736 #endif
1737 return false;
1738 }
1739
1740 #ifdef ENABLE_LOGGING
1742 {
1743 Debug.InventoryMoveLog("Success - item swap", "SWAP" , "n/a", "ProcessInputData", playerOwner.ToString() );
1744 }
1745 #endif
1746
1747 if (swapValidation.m_Success)
1748 {
1749 bool isNotSkipped = LocationSwap(swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2);
1750 ctx = new ScriptInputUserData();
1751 InventoryInputUserData.SerializeSwap(ctx, swapValidation.m_Src1, swapValidation.m_Src2, swapValidation.m_Dst1, swapValidation.m_Dst2, !isNotSkipped);
1752 validation.m_Result = InventoryValidationResult.SUCCESS;
1753 }
1754
1755 return true;
1756 }
void syncDebugPrint(string s)
InventoryCommandType
InventoryValidationResult
InventoryValidationReason
DayZGame g_Game
Определения DayZGame.c:3942
void EnableMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:1860
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:3062
bool PlayerCheckRequestSrc(notnull InventoryLocation src, float radius)
Определения DayZPlayerInventory.c:2814
void RemoveMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:1853
void SendRepairToClientDst(notnull InventoryLocation dst)
Определения DayZPlayerInventory.c:2896
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:167
bool PlayerCheckSwapItemsRequest(notnull InventoryLocation src1, notnull InventoryLocation src2, notnull InventoryLocation dst1, notnull InventoryLocation dst2, float radius)
Определения DayZPlayerInventory.c:2947
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:35
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:325
Определения 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:197
Определения 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:776
static bool IsInventoryMoveLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:746
Определения ObjectTyped.c:2
Определения gameplay.c:121
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1071
proto native DayZPlayerInstanceType GetInstanceType()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90

Перекрестные ссылки GameInventory::c_InventoryReservationTimeoutShortMS, GameInventory::c_MaxItemDistanceRadius, GameInventory::CanForceSwapEntitiesEx(), 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().