DayZ 1.28
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 строка 1530

1531 {
1532 if (isJuncture && isRemote)
1533 {
1535 return false;
1536 }
1537
1538 int type = -1;
1539 if (!ctx.Read(type))
1540 {
1541 return false;
1542 }
1543
1544 InventoryValidation validation = new InventoryValidation();
1545 validation.m_IsJuncture = isJuncture;
1546 validation.m_IsRemote = isRemote;
1547
1549 Serializer serializer = ctx;
1550
1551 switch (type)
1552 {
1553 case InventoryCommandType.USER_RESERVATION_CANCEL:
1554 if (!ValidateUserReservationCancel(serializer, validation))
1555 {
1556 return false;
1557 }
1558 break;
1559 case InventoryCommandType.SYNC_MOVE:
1560 if (!ValidateSyncMove(serializer, validation))
1561 {
1562 return false;
1563 }
1564 break;
1565 case InventoryCommandType.HAND_EVENT:
1566 if (!ValidateHandEvent(serializer, validation))
1567 {
1568 return false;
1569 }
1570 break;
1571 case InventoryCommandType.SWAP:
1572 if (!ValidateSwap(serializer, validation))
1573 {
1574 return false;
1575 }
1576 break;
1577 default:
1578 break;
1579 }
1580
1581 bool canSendJuncture = !isJuncture && GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER;
1582
1583 switch (validation.m_Result)
1584 {
1585 case InventoryValidationResult.FAILED:
1586 if (canSendJuncture)
1587 {
1589 if (!serializer.CanWrite())
1590 {
1591 ScriptInputUserData writeableSerializer();
1592 writeableSerializer.CopyFrom(serializer);
1593 serializer = writeableSerializer;
1594 }
1595
1596 serializer.Write(validation.m_Reason);
1597
1598 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY_FAILURE, serializer);
1599 }
1600 break;
1601 case InventoryValidationResult.JUNCTURE:
1602 if (canSendJuncture)
1603 {
1604 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY, serializer);
1605 //StoreInputForRemotes(isJuncture, isRemote, serializer);
1606 }
1607 else
1608 {
1609 Error("InventoryValidationResult.JUNCTURE returned when not possible to send!");
1610 }
1611 break;
1612 case InventoryValidationResult.SUCCESS:
1613 StoreInputForRemotes(isJuncture, isRemote, serializer);
1614 break;
1615 }
1616
1617 return true;
1618 }
InventoryCommandType
InventoryValidationResult
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:1239
bool StoreInputForRemotes(bool handling_juncture, bool remote, ParamsReadContext ctx)
Определения DayZPlayerInventory.c:1647
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: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().