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

◆ ValidateHandEventServer()

bool ValidateHandEventServer ( inout Serializer ctx,
InventoryValidation validation )
protected

TODO(kumarjac): Is this one correct to be 'RemoveMovableOverride' or are the other Validate methdos wrong with 'EnableMovableOverride'?

Juncture locks guarentee the item is safe to interact with and the server has validated the command at this point.

'HandEventBase.CheckRequestEx' updates failure reason

'HandEventBase.CanPerformEventEx' updates failure reason

Continuing on with execution of rest of the function

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

1841 {
1842 bool success = true;
1843
1844 HandEventBase e = HandEventBase.CreateHandEventFromContext(ctx);
1845 if (e.m_Player != GetManOwner())
1846 {
1847 Error("[syncinv] Inventory owner " + GetManOwner() + " and event sender " + e.m_Player + " not match.");
1848 return true;
1849 }
1850
1851 e.m_IsJuncture = false;
1852 e.m_IsRemote = false;
1853
1854 EntityAI itemSrc = e.GetSrcEntity();
1855 EntityAI itemDst = e.GetSecondSrcEntity();
1856
1857#ifdef ENABLE_LOGGING
1859 {
1860 Debug.InventoryMoveLog("STS = " + e.m_Player.GetSimulationTimeStamp() + " event= " + e.DumpToString(), "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
1861 }
1862#endif
1863
1864 if (e.IsServerSideOnly())
1865 {
1866 Error("[syncinv] ValidateHandEvent This event " + e.GetDebugName() + " should not be use for synchronization.");
1867 return true;
1868 }
1869
1871 if (itemSrc)
1872 {
1873 RemoveMovableOverride(itemSrc);
1874 }
1875 if (itemDst)
1876 {
1877 RemoveMovableOverride(itemDst);
1878 }
1879
1881 if (success && !e.CheckRequestSrc())
1882 {
1883#ifdef ENABLE_LOGGING
1885 {
1886 Debug.InventoryMoveLog("Failed - CheckRequestSrc", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
1887 }
1888#endif
1889
1890 ctx = new ScriptInputUserData();
1892
1893 success = false;
1894#ifdef DIAG_DEVELOPER
1895 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsDesyncRepairEnable())
1896 {
1897#endif
1898 array<EntityAI> itemsToRepair = new array<EntityAI>();
1899 InventoryLocation repairIl = new InventoryLocation();
1900 if(itemSrc)
1901 {
1902 itemSrc.GetInventory().GetCurrentInventoryLocation(repairIl);
1903
1904 if(e.GetSrc() != repairIl)
1905 {
1906 itemsToRepair.Insert(itemSrc);
1907 }
1908
1909 if(itemDst && itemSrc != itemDst )
1910 {
1911 itemDst.GetInventory().GetCurrentInventoryLocation(repairIl);
1912 if(e.GetSecondSrc() != repairIl)
1913 {
1914 itemsToRepair.Insert(itemDst);
1915 }
1916 }
1917
1918 if (itemsToRepair.Count())
1919 {
1921 }
1922 }
1923#ifdef DIAG_DEVELOPER
1924 }
1925#endif
1926 }
1927
1928 if (success && !e.CheckRequestEx(validation))
1929 {
1930#ifdef ENABLE_LOGGING
1932 {
1933 Debug.InventoryMoveLog("Failed - CheckRequest", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
1934 }
1935#endif
1936
1938
1939 ctx = new ScriptInputUserData();
1941
1942#ifdef ENABLE_LOGGING
1944 {
1945 syncDebugPrint("[cheat] ValidateHandEventServer man=" + Object.GetDebugName(GetManOwner()) + " STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp() + " is cheating with cmd=" + typename.EnumToString(InventoryCommandType, InventoryCommandType.HAND_EVENT) + " event=" + e.DumpToString());
1946 }
1947#endif
1948
1949 success = false;
1950 }
1951
1952 if (success && !e.CanPerformEventEx(validation))
1953 {
1954#ifdef ENABLE_LOGGING
1956 {
1957 Debug.InventoryMoveLog("Failed - CanPerformEvent", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
1958 }
1959#endif
1960
1962
1963 ctx = new ScriptInputUserData();
1965
1966#ifdef ENABLE_LOGGING
1968 {
1969 syncDebugPrint("[desync] ValidateHandEventServer man=" + Object.GetDebugName(GetManOwner()) + " CANNOT do cmd=HAND_EVENT e=" + e.DumpToString());
1970 }
1971#endif
1972
1973 InventoryLocation ilDst = e.GetDst();
1974 if (ilDst)
1975 {
1976 SendRepairToClientDst(ilDst);
1977 }
1978
1979 ilDst = e.GetSecondDst();
1980 if (ilDst)
1981 {
1982 SendRepairToClientDst(ilDst);
1983 }
1984
1985 success = false;
1986 }
1987
1989 if (result_ev == JunctureRequestResult.JUNCTURE_NOT_REQUIRED)
1990 {
1991#ifdef ENABLE_LOGGING
1993 {
1994 Debug.InventoryMoveLog("Juncture not required", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
1995 }
1996#endif
1997 CheckForRope(e.GetSrc(), e.GetDst());
1998#ifdef ENABLE_LOGGING
2000 {
2001 Debug.InventoryMoveLog("Success - ProcessHandEvent", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
2002 }
2003#endif
2004 validation.m_Result = InventoryValidationResult.SUCCESS;
2005 return e.m_Player.GetHumanInventory().ProcessHandEvent(e);
2007 }
2008 else if (success && result_ev == JunctureRequestResult.JUNCTURE_ACQUIRED)
2009 {
2010#ifdef ENABLE_LOGGING
2012 {
2013 Debug.InventoryMoveLog("Juncture sended", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
2014 }
2015#endif
2016
2017 ctx = new ScriptInputUserData();
2019
2020 validation.m_Result = InventoryValidationResult.JUNCTURE;
2021
2022 if (itemSrc)
2023 {
2024 EnableMovableOverride(itemSrc);
2025 }
2026 if (itemDst)
2027 {
2028 EnableMovableOverride(itemDst);
2029 }
2030 return true;
2031 }
2032 else
2033 {
2034#ifdef ENABLE_LOGGING
2036 {
2037 Debug.InventoryMoveLog("Juncture denied", "HAND_EVENT" , "n/a", "ValidateHandEventServer", e.m_Player.ToString() );
2038 }
2039#endif
2040
2041 validation.m_Result = InventoryValidationResult.FAILED;
2042 validation.m_Reason = InventoryValidationReason.JUNCTURE_DENIED;
2043 return true;
2044 }
2045 }
void syncDebugPrint(string s)
InventoryCommandType
InventoryValidationResult
InventoryValidationReason
void EnableMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:3690
void CheckForRope(InventoryLocation src, InventoryLocation dst)
Определения DayZPlayerInventory.c:3698
void RemoveMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:3683
void SendRepairToClientDst(notnull InventoryLocation dst)
Определения DayZPlayerInventory.c:4726
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:170
JunctureRequestResult
Определения Hand_Events.c:28
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
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
override InventoryLocation GetSecondDst()
Определения Hand_Events.c:605
override InventoryLocation GetDst()
Определения Hand_Events.c:215
override bool AcquireInventoryJunctureFromServer(notnull Man player)
Определения Hand_Events.c:255
override EntityAI GetSecondSrcEntity()
Определения Hand_Events.c:610
override bool IsServerSideOnly()
Определения Hand_Events.c:777
override string DumpToString()
Определения Hand_Events.c:333
override bool CheckRequestSrc()
Определения Hand_Events.c:222
override bool CanPerformEventEx(InventoryValidation validation)
Определения Hand_Events.c:238
override InventoryLocation GetSecondSrc()
Определения Hand_Events.c:600
Abstracted event, not to be used, only inherited.
Определения Hand_Events.c:212
static void SendServerInventoryCheck(array< EntityAI > items, DayZPlayer player)
Определения InventoryInputUserData.c:44
static void SerializeHandEvent(ParamsWriteContext ctx, HandEventBase e)
hand
Определения InventoryInputUserData.c:105
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.
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90

Перекрестные ссылки HandEventBase::AcquireInventoryJunctureFromServer(), HandEventBase::CanPerformEventEx(), CheckForRope(), HandEventBase::CheckRequestSrc(), HandEventBase::DumpToString(), EnableMovableOverride(), Error(), GetDayZPlayerOwner(), HandEventBase::GetDst(), GetPlugin(), HandEventBase::GetSecondDst(), HandEventBase::GetSecondSrc(), HandEventBase::GetSecondSrcEntity(), Debug::InventoryMoveLog(), LogManager::IsInventoryMoveLogEnable(), HandEventBase::IsServerSideOnly(), LogManager::IsSyncLogEnable(), InventoryValidation::m_Reason, InventoryValidation::m_Result, RemoveMovableOverride(), SendRepairToClientDst(), InventoryInputUserData::SendServerInventoryCheck(), InventoryInputUserData::SerializeHandEvent() и syncDebugPrint().

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