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

1763 {
1764 if (isJuncture && isRemote)
1765 {
1767 return false;
1768 }
1769
1770 int type = -1;
1771 if (!ctx.Read(type))
1772 {
1773 return false;
1774 }
1775
1776 InventoryValidation validation = new InventoryValidation();
1777 validation.m_IsJuncture = isJuncture;
1778 validation.m_IsRemote = isRemote;
1779 validation.m_Mode = InventoryMode.JUNCTURE;
1780
1782 Serializer serializer = ctx;
1783
1784 switch (type)
1785 {
1786 case InventoryCommandType.USER_RESERVATION_CANCEL:
1787 if (!ValidateUserReservationCancel(serializer, validation))
1788 {
1789 return false;
1790 }
1791 break;
1792 case InventoryCommandType.SYNC_MOVE:
1793 if (!ValidateSyncMove(serializer, validation))
1794 {
1795 return false;
1796 }
1797 break;
1798 case InventoryCommandType.HAND_EVENT:
1799 if (!ValidateHandEvent(serializer, validation))
1800 {
1801 return false;
1802 }
1803 break;
1804 case InventoryCommandType.SWAP:
1805 if (!ValidateSwap(serializer, validation))
1806 {
1807 return false;
1808 }
1809 break;
1810 default:
1811 break;
1812 }
1813
1814 bool canSendJuncture = !isJuncture && GetDayZPlayerOwner().GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_SERVER;
1815
1816 switch (validation.m_Result)
1817 {
1818 case InventoryValidationResult.FAILED:
1819 if (canSendJuncture)
1820 {
1822 if (!serializer.CanWrite())
1823 {
1824 ScriptInputUserData writeableSerializer();
1825 writeableSerializer.CopyFrom(serializer);
1826 serializer = writeableSerializer;
1827 }
1828
1829 serializer.Write(validation.m_Reason);
1830
1831 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY_FAILURE, serializer);
1832 }
1833 break;
1834 case InventoryValidationResult.JUNCTURE:
1835 if (canSendJuncture)
1836 {
1837 GetDayZPlayerOwner().SendSyncJuncture(DayZPlayerSyncJunctures.SJ_INVENTORY, serializer);
1838 //StoreInputForRemotes(isJuncture, isRemote, serializer);
1839 }
1840 else
1841 {
1842 Error("InventoryValidationResult.JUNCTURE returned when not possible to send!");
1843 }
1844 break;
1845 case InventoryValidationResult.SUCCESS:
1846 StoreInputForRemotes(isJuncture, isRemote, serializer);
1847 break;
1848 }
1849
1850 return true;
1851 }
InventoryCommandType
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
InventoryValidationResult
bool ValidateSyncMove(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:747
bool ValidateHandEvent(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1048
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:167
bool ValidateSwap(inout Serializer ctx, InventoryValidation validation)
Определения DayZPlayerInventory.c:1344
bool StoreInputForRemotes(bool handling_juncture, bool remote, ParamsReadContext ctx)
Определения DayZPlayerInventory.c:1880
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:1071
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().