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

◆ HandleHandEvent()

void HandleHandEvent ( DeferredEvent deferred_event)
protected

Default structure suffices

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

4487 {
4489 InventoryValidation validation = new InventoryValidation();
4490
4491 DeferredHandEvent deferred_hand_event = DeferredHandEvent.Cast(deferred_event);
4492 if (deferred_hand_event)
4493 {
4494 #ifdef ENABLE_LOGGING
4496 {
4497 Debug.InventoryHFSMLog("STS = " + GetDayZPlayerOwner().GetSimulationTimeStamp(), "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
4498 }
4499 #endif
4500
4502 {
4503 hndDebugPrint("[inv] HumanInventory::HandEvent(" + typename.EnumToString(InventoryMode, deferred_hand_event.m_mode) + ") ev=" + deferred_hand_event.m_event.DumpToString());
4504 }
4505
4506 validation.m_Mode = deferred_hand_event.m_mode;
4507
4508 switch (deferred_hand_event.m_mode)
4509 {
4510 case InventoryMode.PREDICTIVE:
4511 #ifdef ENABLE_LOGGING
4513 {
4514 Debug.InventoryHFSMLog("PREDICTIVE", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
4515 }
4516 #endif
4517
4518 deferred_hand_event.ClearInventoryReservation(this);
4519 if (deferred_hand_event.m_event.CanPerformEventEx(validation))
4520 {
4521 #ifdef DIAG_DEVELOPER
4522 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsLocalOnlyMoveEnable())
4523 {
4524 ProcessHandEvent(deferred_hand_event.m_event);
4525 }
4526 else
4527 {
4528 #endif
4530 ProcessHandEvent(deferred_hand_event.m_event);
4531 #ifdef DIAG_DEVELOPER
4532 }
4533 #endif
4534 }
4535 break;
4536
4537 case InventoryMode.JUNCTURE:
4538 #ifdef ENABLE_LOGGING
4540 {
4541 Debug.InventoryHFSMLog("JUNCTURE", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
4542 }
4543 #endif
4544
4545 deferred_hand_event.ClearInventoryReservation(this);
4546 if (deferred_hand_event.m_event.CanPerformEventEx(validation))
4547 {
4548 #ifdef DIAG_DEVELOPER
4549 if (PluginInventoryDebug.Cast(GetPlugin(PluginInventoryDebug)).IsLocalOnlyMoveEnable())
4550 {
4551 ProcessHandEvent(deferred_hand_event.m_event);
4552 }
4553 else
4554 {
4555 #endif
4556 deferred_hand_event.ReserveInventory(this);
4558
4559 //Functionality to prevent desync when two players perform interfering action at the same time
4560 EntityAI itemSrc = deferred_hand_event.m_event.GetSrcEntity();
4561 EntityAI itemDst = null;
4562 if (deferred_hand_event.m_event.GetDst())
4563 itemDst = deferred_hand_event.m_event.GetDst().GetItem();
4564 if (itemSrc)
4565 EnableMovableOverride(itemSrc);
4566 if (itemDst)
4567 EnableMovableOverride(itemDst);
4568 #ifdef DIAG_DEVELOPER
4569 }
4570 #endif
4571 }
4572 break;
4573
4574 case InventoryMode.LOCAL:
4575 #ifdef ENABLE_LOGGING
4577 {
4578 Debug.InventoryHFSMLog("LOCAL", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
4579 }
4580 #endif
4581
4582 deferred_hand_event.ClearInventoryReservation(this);
4583 ProcessHandEvent(deferred_hand_event.m_event);
4584 //PostHandEvent(deferred_hand_event.m_event);
4585 break;
4586
4587 case InventoryMode.SERVER:
4588 #ifdef ENABLE_LOGGING
4590 {
4591 Debug.InventoryHFSMLog("SERVER", "n/a" , "n/a", "HandleHandEvent", GetDayZPlayerOwner().ToString());
4592 }
4593
4595 {
4596 hndDebugPrint("[inv] DZPI::HandEvent(" + typename.EnumToString(InventoryMode, deferred_hand_event.m_mode) + ")");
4597 }
4598 #endif
4599
4600 if (!deferred_hand_event.m_event.IsServerSideOnly())
4601 {
4602 if (GetDayZPlayerOwner().IsAlive())
4603 {
4605 }
4606 else
4607 {
4609 }
4610 }
4611 else
4612 {
4613 ProcessHandEvent(deferred_hand_event.m_event);
4614 }
4615 break;
4616
4617 default:
4618 Error("HumanInventory::HandEvent - Invalid mode");
4619 }
4620 }
4621 }
InventoryMode
NOTE: PREDICTIVE is not to be used at all in multiplayer.
void EnableMovableOverride(EntityAI item)
Определения DayZPlayerInventory.c:3690
DayZPlayer GetDayZPlayerOwner()
Определения DayZPlayerInventory.c:170
static void SendServerHandEventViaJuncture(notnull DayZPlayer player, HandEventBase e)
Определения DayZPlayerInventory.c:4206
proto string ToString()
void hndDebugPrint(string s)
Определения HandFSM.c:1
PluginBase GetPlugin(typename plugin_type)
Определения PluginManager.c:326
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:208
Определения 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:777
override string DumpToString()
Определения Hand_Events.c:333
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:779
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().