DayZ 1.27
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 строка 1520

1521 {
1522 if (isJuncture && isRemote)
1523 {
1525 return false;
1526 }
1527
1528 int type = -1;
1529 if (!ctx.Read(type))
1530 {
1531 return false;
1532 }
1533
1534 InventoryValidation validation();
1535 validation.m_IsJuncture = isJuncture;
1536 validation.m_IsRemote = isRemote;
1537
1539 Serializer serializer = ctx;
1540
1541 switch (type)
1542 {
1543 case InventoryCommandType.USER_RESERVATION_CANCEL:
1544 if (!ValidateUserReservationCancel(serializer, validation))
1545 {
1546 return false;
1547 }
1548 break;
1549 case InventoryCommandType.SYNC_MOVE:
1550 if (!ValidateSyncMove(serializer, validation))
1551 {
1552 return false;
1553 }
1554 break;
1555 case InventoryCommandType.HAND_EVENT:
1556 if (!ValidateHandEvent(serializer, validation))
1557 {
1558 return false;
1559 }
1560 break;
1561 case InventoryCommandType.SWAP:
1562 if (!ValidateSwap(serializer, validation))
1563 {
1564 return false;
1565 }
1566 break;
1567 default:
1568 break;
1569 }
1570
1571 bool canSendJuncture = !isJuncture && GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER;
1572
1573 switch (validation.m_Result)
1574 {
1575 case InventoryValidationResult.FAILED:
1576 if (canSendJuncture)
1577 {
1579 if (!serializer.CanWrite())
1580 {
1581 ScriptInputUserData writeableSerializer();
1582 writeableSerializer.CopyFrom(serializer);
1583 serializer = writeableSerializer;
1584 }
1585
1586 serializer.Write(validation.m_Reason);
1587
1588 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY_FAILURE, serializer);
1589 }
1590 break;
1591 case InventoryValidationResult.JUNCTURE:
1592 if (canSendJuncture)
1593 {
1594 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY, serializer);
1595 //StoreInputForRemotes(isJuncture, isRemote, serializer);
1596 }
1597 else
1598 {
1599 Error("InventoryValidationResult.JUNCTURE returned when not possible to send!");
1600 }
1601 break;
1602 case InventoryValidationResult.SUCCESS:
1603 StoreInputForRemotes(isJuncture, isRemote, serializer);
1604 break;
1605 }
1606
1607 return true;
1608 }
InventoryCommandType
Определения Inventory.c:3
InventoryValidationResult
Определения Inventory.c:30
bool ValidateSyncMove(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:772
bool ValidateHandEvent(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1004
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:168
bool ValidateSwap(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1229
bool StoreInputForRemotes(bool handling_juncture, bool remote, ParamsReadContext ctx)
Определения DayZPlayerInventory.c:1637
static const int SJ_INVENTORY_FAILURE
Определения DayZPlayerSyncJunctures.c:32
static const int SJ_INVENTORY
Определения DayZPlayerSyncJunctures.c:11
Определения Inventory.c:44
Определения 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:1068
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_Reason, InventoryValidation::m_Result, Serializer::Read(), DayZPlayerSyncJunctures::SJ_INVENTORY, DayZPlayerSyncJunctures::SJ_INVENTORY_FAILURE, StoreInputForRemotes(), ValidateHandEvent(), ValidateSwap(), ValidateSyncMove() и Serializer::Write().

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