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

◆ HandleHandEvent()

void HandleHandEvent ( DeferredEvent deferred_event)
protected

Default structure suffices

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

2657 {
2659 InventoryValidation validation = new InventoryValidation();
2660
2661 DeferredHandEvent deferred_hand_event = DeferredHandEvent.Cast(deferred_event);
2662 if (deferred_hand_event)
2663 {
2664 #ifdef ENABLE_LOGGING
2666 {
2667 Debug.InventoryHFSMLog("STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp(), "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
2668 }
2669 #endif
2670
2672 {
2673 hndDebugPrint("[inv] HumanInventory::HandEvent(" + typename.EnumToString(InventoryMode, deferred_hand_event.m_mode) + ") ev=" + deferred_hand_event.m_event.DumpToString());
2674 }
2675
2676 validation.m_Mode = deferred_hand_event.m_mode;
2677
2678 switch (deferred_hand_event.m_mode)
2679 {
2680 case InventoryMode.PREDICTIVE:
2681 #ifdef ENABLE_LOGGING
2683 {
2684 Debug.InventoryHFSMLog("PREDICTIVE", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
2685 }
2686 #endif
2687
2688 deferred_hand_event.ClearInventoryReservation(this);
2689 if (deferred_hand_event.m_event.CanPerformEventEx(validation))
2690 {
2691 #ifdef DIAG_DEVELOPER
2692 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsLocalOnlyMoveEnable())
2693 {
2694 ProcessHandEvent(deferred_hand_event.m_event);
2695 }
2696 else
2697 {
2698 #endif
2700 ProcessHandEvent(deferred_hand_event.m_event);
2701 #ifdef DIAG_DEVELOPER
2702 }
2703 #endif
2704 }
2705 break;
2706
2707 case InventoryMode.JUNCTURE:
2708 #ifdef ENABLE_LOGGING
2710 {
2711 Debug.InventoryHFSMLog("JUNCTURE", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
2712 }
2713 #endif
2714
2715 deferred_hand_event.ClearInventoryReservation(this);
2716 if (deferred_hand_event.m_event.CanPerformEventEx(validation))
2717 {
2718 #ifdef DIAG_DEVELOPER
2719 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsLocalOnlyMoveEnable())
2720 {
2721 ProcessHandEvent(deferred_hand_event.m_event);
2722 }
2723 else
2724 {
2725 #endif
2726 deferred_hand_event.ReserveInventory(this);
2728
2729 //Functionality to prevent desync when two players perform interfering action at the same time
2730 EntityAI itemSrc = deferred_hand_event.m_event.GetSrcEntity();
2731 EntityAI itemDst = null;
2732 if (deferred_hand_event.m_event.GetDst())
2733 itemDst = deferred_hand_event.m_event.GetDst().GetItem();
2734 if (itemSrc)
2735 EnableMovableOverride(itemSrc);
2736 if (itemDst)
2737 EnableMovableOverride(itemDst);
2738 #ifdef DIAG_DEVELOPER
2739 }
2740 #endif
2741 }
2742 break;
2743
2744 case InventoryMode.LOCAL:
2745 #ifdef ENABLE_LOGGING
2747 {
2748 Debug.InventoryHFSMLog("LOCAL", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
2749 }
2750 #endif
2751
2752 deferred_hand_event.ClearInventoryReservation(this);
2753 ProcessHandEvent(deferred_hand_event.m_event);
2754 //PostHandEvent(deferred_hand_event.m_event);
2755 break;
2756
2757 case InventoryMode.SERVER:
2758 #ifdef ENABLE_LOGGING
2760 {
2761 Debug.InventoryHFSMLog("SERVER", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
2762 }
2763
2765 {
2766 hndDebugPrint("[inv] DZPI::HandEvent(" + typename.EnumToString(InventoryMode, deferred_hand_event.m_mode) + ")");
2767 }
2768 #endif
2769
2770 if (!deferred_hand_event.m_event.IsServerSideOnly())
2771 {
2772 if (GetDayZPlayerOwner().IsAlive())
2773 {
2775 }
2776 else
2777 {
2779 }
2780 }
2781 else
2782 {
2783 ProcessHandEvent(deferred_hand_event.m_event);
2784 }
2785 break;
2786
2787 default:
2788 Error("HumanInventory::HandEvent - Invalid mode");
2789 }
2790 }
2791 }
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
void EnableMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:1860
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:167
static void SendServerHandEventViaJuncture(notnull DayZPlayer player, HandEventBase e)
Определения DayZPlayerInventory.c:2376
proto string ToString()
void hndDebugPrint(string s)
Определения HandFSM.c:1
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:325
static void InventoryHFSMLog(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:207
Определения 3_Game/DayZ/tools/Debug.c:2
InventoryMode m_mode
Определения DayZPlayerInventory.c:4
override bool ReserveInventory(HumanInventory inventory)
Определения DayZPlayerInventory.c:133
ref HandEventBase m_event
Определения DayZPlayerInventory.c:126
override void ClearInventoryReservation(HumanInventory inventory)
Определения DayZPlayerInventory.c:138
override InventoryLocation GetDst()
Определения Hand_Events.c:215
override bool IsServerSideOnly()
Определения Hand_Events.c:771
override string DumpToString()
Определения Hand_Events.c:338
override bool CanPerformEventEx(InventoryValidation validation)
Определения Hand_Events.c:238
static void SendInputUserDataHandEvent(HandEventBase e)
Определения InventoryInputUserData.c:112
static void SendServerHandEventViaInventoryCommand(notnull Man player, HandEventBase e)
Определения InventoryInputUserData.c:123
proto native EntityAI GetItem()
returns item of current inventory location
static bool IsInventoryHFSMLogEnable()
Определения 3_Game/DayZ/tools/Debug.c:766
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90

Перекрестные ссылки HandEventBase::CanPerformEventEx(), DeferredHandEvent::ClearInventoryReservation(), HandEventBase::DumpToString(), EnableMovableOverride(), Error(), GetDayZPlayerOwner(), HandEventBase::GetDst(), InventoryLocation::GetItem(), GetPlugin(), hndDebugPrint(), Debug::InventoryHFSMLog(), LogManager::IsInventoryHFSMLogEnable(), HandEventBase::IsServerSideOnly(), DeferredHandEvent::m_event, InventoryValidation::m_Mode, DeferredEvent::m_mode, DeferredHandEvent::ReserveInventory(), InventoryInputUserData::SendInputUserDataHandEvent(), InventoryInputUserData::SendServerHandEventViaInventoryCommand(), SendServerHandEventViaJuncture() и ToString().

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