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

◆ CommandHandler()

override void DayZPlayer::CommandHandler ( float pDt,
int pCurrentCommandID,
bool pCurrentCommandFinished )
inlineprotected

This is main command logic

handle all Camera changes, switch + zoom

handle death with high priority

check for water depth while getting out and start swimming if necessary this also handles the last frame of the vehicle command hence it doens't need separate check on pCurrentCommandFinished

handle finished commands

default behaviour after finish is to start move

debug test script command !PSOVIS

Sprint attack limiting - player has to be in full sprint for at least 0.5s

If we are not in fall command then something else is currently running and we can safely continue here, otherwise terminate here

throwing handling

melee

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

2289 {
2290 m_dT = pDt;
2291
2292 vector playerPosition = PhysicsGetPositionWS();
2293
2294 GetDayZPlayerInventory().HandleInventory(pDt);
2295 GetHumanInventory().Update(pDt);
2296
2297 if (ModCommandHandlerBefore(pDt, pCurrentCommandID, pCurrentCommandFinished))
2298 {
2299 return;
2300 }
2301
2302 HumanCommandVehicle hcv;
2303
2304 HumanInputController hic = GetInputController();
2305 EntityAI entityInHands = GetEntityInHands();
2306 GetMovementState(m_MovementState);
2307
2308 bool isRaisedNow = m_MovementState.IsRaised();
2309 bool isWeapon = entityInHands && entityInHands.IsInherited(Weapon);
2310
2311 bool updateAimingMdfr = false;
2312 if (isWeapon != m_IsWeapon)
2313 {
2314 m_IsWeapon = isWeapon;
2315 updateAimingMdfr = true;
2316 }
2317
2318 if (isRaisedNow != m_IsRaised)
2319 {
2320 updateAimingMdfr = true;
2321 m_IsRaised = m_MovementState.IsRaised();
2322 }
2323
2324 if (updateAimingMdfr)
2325 {
2326 if (isRaisedNow && isWeapon)
2327 GetUApi().ActivateModificator("aiming");
2328 else
2329 GetUApi().DeactivateModificator("aiming");
2330 }
2331
2332 // handle ADS ironsights/optics transition logic
2333 HandleADS();
2334
2335 // handle weapons
2336 if (hic)
2337 {
2338 ItemOptics opticInHands = ItemOptics.Cast(entityInHands);
2339 if (isWeapon && (!m_ProcessFirearmMeleeHit || !m_ContinueFirearmMelee))
2340 {
2342 bool exitIronSights = false;
2343 HandleWeapons(pDt, entityInHands, hic, exitIronSights);
2344 }
2345 else if (IsHandheldOpticsInUse() && m_CameraOptics && opticInHands)
2346 {
2347 bool exitOptic = false;
2348 HandleOptic(opticInHands, true, hic, exitOptic);
2349 }
2350 }
2351
2353 HandleView();
2354
2355 if (m_MovementState.m_iMovement != m_MovementState.m_LocalMovement)
2356 {
2358 m_MovementState.m_LocalMovement = m_MovementState.m_iMovement;
2359 }
2360
2362 if (HandleDeath(pCurrentCommandID))
2363 {
2364 return;
2365 }
2366
2369 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE )
2370 {
2371 HumanCommandVehicle cmdVehicle = GetCommand_Vehicle();
2372 if ( cmdVehicle && cmdVehicle.IsGettingOut() )
2373 {
2374 vector waterLevel;
2375 if ( m_Swimming.CheckSwimmingStart( waterLevel ) )
2376 {
2377 // not all the events may have been called as getting out could have occurred while under water
2378 cmdVehicle.ProcessLeaveEvents();
2379
2380 StartCommand_Swim();
2381 return;
2382 }
2383 }
2384 }
2385
2387 if (pCurrentCommandFinished)
2388 {
2389 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
2390 {
2391 if ((m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE) && (m_TransportCache != null))
2392 {
2393 int crew_index = m_TransportCache.CrewMemberIndex(this);
2394 int seat = m_TransportCache.GetSeatAnimationType(crew_index);
2395 StartCommand_Vehicle(m_TransportCache, crew_index, seat, true);
2396 m_TransportCache = null;
2397 return;
2398 }
2399 }
2400
2401 // start moving
2402
2403 // start falling ? (could happen after climbing)
2404 if (PhysicsIsFalling(true))
2405 {
2406 StartCommand_Fall(0);
2407 SetFallYDiff(playerPosition[1]);
2408 return;
2409 }
2410
2412 if (m_Swimming.m_bWasSwimming)
2413 {
2414 StartCommand_Swim();
2415 return;
2416 }
2417
2418 StartCommand_Move();
2419
2420 if (entityInHands)
2421 ForceStandUpForHeavyItems(entityInHands);
2422
2423 return;
2424 }
2425
2426
2427 //--------------------------------------------
2429
2430 if (ModCommandHandlerInside(pDt, pCurrentCommandID, pCurrentCommandFinished))
2431 {
2432 return;
2433 }
2434
2435
2436 //--------------------------------------------
2437 // vehicle handling
2438 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE)
2439 {
2440 hcv = GetCommand_Vehicle();
2441 if (hcv.WasGearChange())
2442 {
2443 GearChangeActionCallback cb = GearChangeActionCallback.Cast(AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_SHIFTGEAR, GearChangeActionCallback));
2444 cb.SetVehicleCommand(hcv);
2445 }
2446
2447 Transport transport;
2448 int seatPos;
2449
2450 transport = hcv.GetTransport();
2451 seatPos = hcv.GetVehicleSeat();
2452 if (IsAlive() && IsAuthority() && transport && transport.CrewShouldEject(seatPos))
2453 {
2454 // TODO(kumarjac): Temporary code until we have a ragdoll command to activate instead
2455 // Due to lack of time, we opted to re-use unconsciousness here instead
2456 ModifiersManager mdfMan;
2457 GetGame().GetMission().MissionScript.CallFunction(this, "GetModifiersManager", mdfMan, null);
2458 mdfMan.ActivateModifier(eModifiers.MDF_UNCONSCIOUSNESS);
2459 }
2460
2461 return;
2462 }
2463
2465 //--------------------------------------------
2466 HumanCommandMove hcm = GetCommand_Move();
2467 if (hcm && m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT && hcm.GetCurrentMovementSpeed() > 2.99)
2468 {
2469 m_SprintedTime += pDt;
2471 {
2472 m_SprintFull = true;
2473 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_DEFAULT;
2474 }
2475 else
2476 m_SprintFull = false;
2477 }
2478 else
2479 {
2480 m_SprintedTime = 0.0;
2481 m_SprintFull = false;
2482 }
2483
2484 //--------------------------------------------
2485 // swimming handling
2486 if (m_Swimming.HandleSwimming(pCurrentCommandID, hcm, m_MovementState))
2487 {
2488 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2489 {
2490 return;
2491 }
2492
2493 m_JumpClimb.CheckAndFinishJump();
2494 return;
2495 }
2496
2497 //--------------------------------------------
2498 // ladder handling
2499 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER)
2500 {
2502 return;
2503 }
2504
2505 //--------------------------------------------
2506 // climb handling
2507 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_CLIMB)
2508 {
2509 return;
2510 }
2511
2512 //--------------------------------------------
2513 // fall handling
2514
2515 if (IsAlreadyInFallingCommand(pCurrentCommandID))
2516 {
2517 if (IsLanded(pCurrentCommandID))
2518 {
2520 NoiseParams npar;
2521
2522 FallDamageData fallDamageData = new FallDamageData();
2523 fallDamageData.m_Height = m_FallYDiff - playerPosition[1];
2524
2525 // land
2526 if (fallDamageData.m_Height < 0.5)
2527 {
2528 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2529 OnLand(pCurrentCommandID, fallDamageData);
2530 npar = type.GetNoiseParamsLandLight();
2531 AddNoise(npar);
2532 }
2533 else if (fallDamageData.m_Height < 3.0)
2534 {
2535 if (m_MovementState.IsInProne() || m_MovementState.IsInRaisedProne())
2536 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2537 else
2538 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_LIGHT;
2539
2540 OnLand(pCurrentCommandID, fallDamageData);
2541 npar = type.GetNoiseParamsLandLight();
2542 AddNoise(npar);
2543 }
2544 else if (fallDamageData.m_Height < 5.0)
2545 {
2546 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_MEDIUM;
2547 OnLand(pCurrentCommandID, fallDamageData);
2548 npar = type.GetNoiseParamsLandHeavy();
2549 AddNoise(npar);
2550 }
2551 else
2552 {
2553 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_HEAVY;
2554 OnLand(pCurrentCommandID, fallDamageData);
2555 npar = type.GetNoiseParamsLandHeavy();
2556 AddNoise(npar);
2557 }
2558
2559 if (fallDamageData.m_Height >= DayZPlayerImplementFallDamage.HEALTH_HEIGHT_LOW && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2560 {
2561 OnPlayerRecievedHit();
2562 }
2563
2564 m_FallDamage.HandleFallDamage(fallDamageData);
2565 m_JumpClimb.CheckAndFinishJump(fallDamageData.m_LandType);
2566 }
2567
2569 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
2570 {
2571 return;
2572 }
2573 }
2574 else if (PhysicsIsFalling(false))
2575 {
2576 // Not in a falling command but the controller is falling, start default fall
2577 StartCommand_Fall(0);
2578 SetFallYDiff(playerPosition[1]);
2579 return;
2580 }
2581
2582 //--------------------------------------------
2583 // handle jumping
2584
2585#ifndef NO_GUI
2586#ifdef DEVELOPER
2588
2589 if (DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLEJUMP))
2590 {
2591 SHumanCommandClimbSettings hcls = GetDayZPlayerType().CommandClimbSettingsW();
2592
2593 if (m_MovementState.m_iMovement != DayZPlayerConstants.MOVEMENTIDX_IDLE)
2594 hcls.m_fFwMaxDistance = 3;
2595 else
2596 hcls.m_fFwMaxDistance = 1.2;
2597
2598 SHumanCommandClimbResult ret;
2599
2601 HumanCommandClimb.DoClimbTest(this, ret, 0x3);
2602 }
2603
2604#endif
2605#endif
2606
2607 // start jump
2608 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2609 {
2610 return;
2611 }
2612
2613 HumanCommandAdditives ad = GetCommandModifier_Additives();
2614
2615 bool force = false;
2616#ifndef NO_GUI
2617#ifdef DEVELOPER
2619 force = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLETALKING);
2620#endif
2621#endif
2622 float amplitude = IsPlayerSpeaking();
2623
2624 if (amplitude > 0.1 || force)
2625 {
2626 if (ad)
2627 ad.SetTalking(true);
2628
2629 // add noises on server
2630 if (g_Game.IsServer())
2631 {
2632 int now = g_Game.GetTime();
2633 if (now >= m_NextVoNNoiseTime)
2634 {
2635 m_NextVoNNoiseTime = now + 1000;
2636
2637 int voiceLevel = g_Game.GetVoiceLevel(this);
2639
2640 // add noise every second while talking
2641 NoiseParams vonpar;
2642 switch (voiceLevel)
2643 {
2644 case VoiceLevelWhisper:
2645 vonpar = pt.GetNoiseParamsWhisper();
2646 break;
2647 case VoiceLevelTalk:
2648 vonpar = pt.GetNoiseParamsTalk();
2649 break;
2650 case VoiceLevelShout:
2651 vonpar = pt.GetNoiseParamsShout();
2652 break;
2653 }
2654 AddNoise(vonpar);
2655 }
2656 }
2657 }
2658 else
2659 {
2660 if (ad)
2661 ad.SetTalking(false);
2662 }
2663
2664 //--------------------------------------------
2665 // anything whats handled by InputController
2666
2668
2669 if (hic)
2670 {
2672 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
2673 m_Throwing.HandleThrowing(hic, hcw, entityInHands, pDt);
2674
2676 if (m_MeleeFightLogic.CanFight())
2677 {
2678 if (m_MeleeFightLogic.HandleFightLogic(pCurrentCommandID, hic, entityInHands, m_MovementState, m_ContinueFirearmMelee))
2679 {
2681 return;
2682 }
2683 }
2684 }
2685
2686
2688 if (ModCommandHandlerAfter(pDt, pCurrentCommandID, pCurrentCommandFinished))
2689 {
2690 return;
2691 }
2692 }
class LogManager EntityAI
DayZGame g_Game
Определения DayZGame.c:4074
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Определения DayZPlayerImplementFallDamage.c:73
void ModifiersManager(PlayerBase player)
Определения ModifiersManager.c:80
class NoiseSystem NoiseParams()
Определения Noise.c:18
StarlightOptic ItemOptics
proto native UAInputAPI GetUApi()
float m_SprintedTime
Определения DayZPlayerImplement.c:104
int m_NextVoNNoiseTime
Определения DayZPlayerImplement.c:148
ref DayZPlayerImplementJumpClimb m_JumpClimb
Определения DayZPlayerImplement.c:98
void SetFallYDiff(float value)
Определения DayZPlayerImplement.c:348
bool IsLanded(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3873
float m_SprintedTimePerStanceMin
Определения DayZPlayerImplement.c:105
float m_FallYDiff
Определения DayZPlayerImplement.c:103
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2266
void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
Определения DayZPlayerImplement.c:1023
ref DayZPlayerMeleeFightLogic_LightHeavy m_MeleeFightLogic
Определения DayZPlayerImplement.c:95
bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
Определения DayZPlayerImplement.c:1766
ref DayZPlayerImplementThrowing m_Throwing
Определения DayZPlayerImplement.c:97
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2276
bool m_ContinueFirearmMelee
Определения DayZPlayerImplement.c:133
bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3904
int m_LastCommandBeforeUnconscious
Определения DayZPlayerImplement.c:128
bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения DayZPlayerImplement.c:3888
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2271
bool m_IsWeapon
Определения DayZPlayerImplement.c:155
void OnLadder(float delta_time, HumanMovementState pState)
called every command handler tick when player is on ladder
void OnMovementChanged()
Event, called when HumanMovementState.m_iMovement changes...walk, run, sprint, etc....
Определения DayZPlayerImplement.c:3000
bool m_CameraOptics
Определения DayZPlayerImplement.c:116
void HandleADS()
Определения DayZPlayerImplement.c:1886
ref HumanMovementState m_MovementState
time step for gradual update of dead screen visibilibty up to full visbility [s]
Определения DayZPlayerImplement.c:92
ref DayZPlayerImplementFallDamage m_FallDamage
Определения DayZPlayerImplement.c:99
bool IsHandheldOpticsInUse()
Определения DayZPlayerImplement.c:3996
DayZPlayerInventory GetDayZPlayerInventory()
Определения DayZPlayerImplement.c:940
bool HandleDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:650
bool m_IsRaised
Определения DayZPlayerImplement.c:107
float m_dT
Определения DayZPlayerImplement.c:165
bool m_ProcessFirearmMeleeHit
Определения DayZPlayerImplement.c:132
void AddNoise(NoiseParams noisePar, float noiseMultiplier=1.0)
Определения DayZPlayerImplement.c:3258
bool m_SprintFull
Определения DayZPlayerImplement.c:106
void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
Определения DayZPlayerImplement.c:1245
ref DayZPlayerImplementSwimming m_Swimming
Определения DayZPlayerImplement.c:96
void HandleView()
Определения DayZPlayerImplement.c:2018
Transport m_TransportCache
Определения DayZPlayerImplement.c:140
void SetVehicleCommand(HumanCommandVehicle hcv)
Определения DayZPlayerImplementVehicle.c:6
proto native float GetCurrentMovementSpeed()
0,1,2..3 idle, walk, run, sprint
proto native Transport GetTransport()
proto native void ProcessLeaveEvents()
proto native bool WasGearChange()
proto native int GetVehicleSeat()
proto native bool IsGettingOut()
proto native bool IsMeleeWeaponAttack()
return weapon melee attack modifier
proto native void ActivateModificator(string sModName)
proto native void DeactivateModificator(string sModName)
void DayZPlayerType()
Определения dayzplayer.c:512
void ForceStandUpForHeavyItems(notnull EntityAI item)
-------------— Forces player to stand up when swapping to heavy item ----------------------—
Определения dayzplayer.c:1378
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1084
proto native DayZPlayerType GetDayZPlayerType()
returns appropriate DayZPlayerType
proto native DayZPlayerInstanceType GetInstanceType()
proto native float IsPlayerSpeaking()
-------------— speaking anim ----------------------—
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
eModifiers
Определения eModifiers.c:2
DayZGame GetGame()
Определения gameplay.c:636
void HumanCommandClimb()
Определения human.c:837
class HumanCommandMelee2 HumanCommandFall()
Определения human.c:594
void HumanCommandMove()
Определения human.c:534
void HumanCommandWeapons()
Определения human.c:1155
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1154
class SHumanCommandSwimSettings SHumanCommandClimbSettings()
Определения humansettings.c:74

Перекрестные ссылки UAInputAPI::ActivateModificator(), AddNoise(), DayZPlayerImplementFallDamage(), DayZPlayerType(), UAInputAPI::DeactivateModificator(), HumanCommandClimb::DoClimbTest(), ForceStandUpForHeavyItems(), PlayerConstants::FULL_SPRINT_DELAY_DEFAULT, g_Game, HumanCommandMove::GetCurrentMovementSpeed(), GetDayZPlayerInventory(), GetDayZPlayerType(), DiagMenu::GetEngineValue(), GetGame(), GetInstanceType(), HumanCommandVehicle::GetTransport(), GetUApi(), HumanCommandVehicle::GetVehicleSeat(), HandleADS(), HandleDeath(), HandleOptic(), HandleView(), HandleWeapons(), HumanCommandAdditives(), HumanCommandFall(), IsAlreadyInFallingCommand(), HumanCommandVehicle::IsGettingOut(), IsHandheldOpticsInUse(), IsLanded(), HumanInputController::IsMeleeWeaponAttack(), IsPlayerSpeaking(), m_CameraOptics, m_ContinueFirearmMelee, m_dT, m_FallDamage, m_FallYDiff, FallDamageData::m_Height, m_IsRaised, m_IsWeapon, m_JumpClimb, FallDamageData::m_LandType, m_LastCommandBeforeUnconscious, m_MeleeFightLogic, m_MovementState, m_NextVoNNoiseTime, m_ProcessFirearmMeleeHit, m_SprintedTime, m_SprintedTimePerStanceMin, m_SprintFull, m_Swimming, m_Throwing, m_TransportCache, ModCommandHandlerAfter(), ModCommandHandlerBefore(), ModCommandHandlerInside(), ModifiersManager(), NoiseParams(), OnLadder(), OnLand(), OnMovementChanged(), ProcessJumpOrClimb(), HumanCommandVehicle::ProcessLeaveEvents(), SetFallYDiff(), GearChangeActionCallback::SetVehicleCommand(), SHumanCommandClimbSettings() и HumanCommandVehicle::WasGearChange().