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

2272 {
2273 m_dT = pDt;
2274
2275 vector playerPosition = PhysicsGetPositionWS();
2276
2277 GetDayZPlayerInventory().HandleInventory(pDt);
2278 GetHumanInventory().Update(pDt);
2279
2280 if (ModCommandHandlerBefore(pDt, pCurrentCommandID, pCurrentCommandFinished))
2281 {
2282 return;
2283 }
2284
2285 HumanInputController hic = GetInputController();
2286 EntityAI entityInHands = GetEntityInHands();
2287 GetMovementState(m_MovementState);
2288
2289 bool isRaisedNow = m_MovementState.IsRaised();
2290 bool isWeapon = entityInHands && entityInHands.IsInherited(Weapon);
2291
2292 bool updateAimingMdfr = false;
2293 if (isWeapon != m_IsWeapon)
2294 {
2295 m_IsWeapon = isWeapon;
2296 updateAimingMdfr = true;
2297 }
2298
2299 if (isRaisedNow != m_IsRaised)
2300 {
2301 updateAimingMdfr = true;
2302 m_IsRaised = m_MovementState.IsRaised();
2303 }
2304
2305 if (updateAimingMdfr)
2306 {
2307 if (isRaisedNow && isWeapon)
2308 GetUApi().ActivateModificator("aiming");
2309 else
2310 GetUApi().DeactivateModificator("aiming");
2311 }
2312
2313 // handle ADS ironsights/optics transition logic
2314 HandleADS();
2315
2316 // handle weapons
2317 if (hic)
2318 {
2319 ItemOptics opticInHands = ItemOptics.Cast(entityInHands);
2320 if (isWeapon && (!m_ProcessFirearmMeleeHit || !m_ContinueFirearmMelee))
2321 {
2323 bool exitIronSights = false;
2324 HandleWeapons(pDt, entityInHands, hic, exitIronSights);
2325 }
2326 else if (IsHandheldOpticsInUse() && m_CameraOptics && opticInHands)
2327 {
2328 bool exitOptic = false;
2329 HandleOptic(opticInHands, true, hic, exitOptic);
2330 }
2331 }
2332
2334 HandleView();
2335
2336 if (m_MovementState.m_iMovement != m_MovementState.m_LocalMovement)
2337 {
2339 m_MovementState.m_LocalMovement = m_MovementState.m_iMovement;
2340 }
2341
2343 if (HandleDeath(pCurrentCommandID))
2344 {
2345 return;
2346 }
2347
2350 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE )
2351 {
2352 HumanCommandVehicle cmdVehicle = GetCommand_Vehicle();
2353 if ( cmdVehicle && cmdVehicle.IsGettingOut() )
2354 {
2355 vector waterLevel;
2356 if ( m_Swimming.CheckSwimmingStart( waterLevel ) )
2357 {
2358 // not all the events may have been called as getting out could have occurred while under water
2359 cmdVehicle.ProcessLeaveEvents();
2360
2361 StartCommand_Swim();
2362 return;
2363 }
2364 }
2365 }
2366
2368 if (pCurrentCommandFinished)
2369 {
2370 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
2371 {
2372 if ((m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE) && (m_TransportCache != null))
2373 {
2374 int crew_index = m_TransportCache.CrewMemberIndex(this);
2375 int seat = m_TransportCache.GetSeatAnimationType(crew_index);
2376 StartCommand_Vehicle(m_TransportCache, crew_index, seat, true);
2377 m_TransportCache = null;
2378 return;
2379 }
2380 }
2381 // start moving
2382
2383 // start falling ? (could happen after climbing)
2384 if (PhysicsIsFalling(true))
2385 {
2386 StartCommand_Fall(0);
2387 SetFallYDiff(playerPosition[1]);
2388 return;
2389 }
2390
2392 if (m_Swimming.m_bWasSwimming)
2393 {
2394 StartCommand_Swim();
2395 return;
2396 }
2397
2398 StartCommand_Move();
2399
2400 if (entityInHands)
2401 ForceStandUpForHeavyItems(entityInHands);
2402
2403 return;
2404 }
2405
2406
2407 //--------------------------------------------
2409
2410 if (ModCommandHandlerInside(pDt, pCurrentCommandID, pCurrentCommandFinished))
2411 {
2412 return;
2413 }
2414
2415
2416 //--------------------------------------------
2417 // vehicle handling
2418 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE)
2419 {
2420 HumanCommandVehicle hcv = GetCommand_Vehicle();
2421 if (hcv.WasGearChange())
2422 {
2423 GearChangeActionCallback cb = GearChangeActionCallback.Cast(AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_SHIFTGEAR, GearChangeActionCallback));
2424 cb.SetVehicleCommand(hcv);
2425 }
2426
2427 return;
2428 }
2429
2431 //--------------------------------------------
2432 HumanCommandMove hcm = GetCommand_Move();
2433 if (hcm && m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT && hcm.GetCurrentMovementSpeed() > 2.99)
2434 {
2435 m_SprintedTime += pDt;
2437 {
2438 m_SprintFull = true;
2439 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_DEFAULT;
2440 }
2441 else
2442 m_SprintFull = false;
2443 }
2444 else
2445 {
2446 m_SprintedTime = 0.0;
2447 m_SprintFull = false;
2448 }
2449
2450 //--------------------------------------------
2451 // swimming handling
2452 if (m_Swimming.HandleSwimming(pCurrentCommandID, hcm, m_MovementState))
2453 {
2454 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2455 {
2456 return;
2457 }
2458
2459 m_JumpClimb.CheckAndFinishJump();
2460 return;
2461 }
2462
2463 //--------------------------------------------
2464 // ladder handling
2465 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER)
2466 {
2468 return;
2469 }
2470
2471 //--------------------------------------------
2472 // climb handling
2473 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_CLIMB)
2474 {
2475 return;
2476 }
2477
2478 //--------------------------------------------
2479 // fall handling
2480
2481 if (IsAlreadyInFallingCommand(pCurrentCommandID))
2482 {
2483 if (IsLanded(pCurrentCommandID))
2484 {
2486 NoiseParams npar;
2487
2488 FallDamageData fallDamageData = new FallDamageData();
2489 fallDamageData.m_Height = m_FallYDiff - playerPosition[1];
2490
2491 // land
2492 if (fallDamageData.m_Height < 0.5)
2493 {
2494 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2495 OnLand(pCurrentCommandID, fallDamageData);
2496 npar = type.GetNoiseParamsLandLight();
2497 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(g_Game.GetWeather()));
2498 }
2499 else if (fallDamageData.m_Height < 3.0)
2500 {
2501 if (m_MovementState.IsInProne() || m_MovementState.IsInRaisedProne())
2502 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2503 else
2504 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_LIGHT;
2505
2506 OnLand(pCurrentCommandID, fallDamageData);
2507 npar = type.GetNoiseParamsLandLight();
2508 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(g_Game.GetWeather()));
2509 }
2510 else if (fallDamageData.m_Height < 5.0)
2511 {
2512 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_MEDIUM;
2513 OnLand(pCurrentCommandID, fallDamageData);
2514 npar = type.GetNoiseParamsLandHeavy();
2515 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(g_Game.GetWeather()));
2516 }
2517 else
2518 {
2519 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_HEAVY;
2520 OnLand(pCurrentCommandID, fallDamageData);
2521 npar = type.GetNoiseParamsLandHeavy();
2522 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(g_Game.GetWeather()));
2523 }
2524
2525 if (fallDamageData.m_Height >= DayZPlayerImplementFallDamage.HEALTH_HEIGHT_LOW && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2526 {
2527 OnPlayerRecievedHit();
2528 }
2529
2530 m_FallDamage.HandleFallDamage(fallDamageData);
2531 m_JumpClimb.CheckAndFinishJump(fallDamageData.m_LandType);
2532 }
2533
2535 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
2536 {
2537 return;
2538 }
2539 }
2540 else if (PhysicsIsFalling(false))
2541 {
2542 // Not in a falling command but the controller is falling, start default fall
2543 StartCommand_Fall(0);
2544 SetFallYDiff(playerPosition[1]);
2545 return;
2546 }
2547
2548 //--------------------------------------------
2549 // handle jumping
2550
2551#ifndef NO_GUI
2552#ifdef DEVELOPER
2554
2555 if (DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLEJUMP))
2556 {
2557 SHumanCommandClimbSettings hcls = GetDayZPlayerType().CommandClimbSettingsW();
2558
2559 if (m_MovementState.m_iMovement != DayZPlayerConstants.MOVEMENTIDX_IDLE)
2560 hcls.m_fFwMaxDistance = 3;
2561 else
2562 hcls.m_fFwMaxDistance = 1.2;
2563
2564 SHumanCommandClimbResult ret;
2565
2567 HumanCommandClimb.DoClimbTest(this, ret, 0x3);
2568 }
2569
2570#endif
2571#endif
2572
2573 // start jump
2574 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2575 {
2576 return;
2577 }
2578
2579 HumanCommandAdditives ad = GetCommandModifier_Additives();
2580
2581 bool force = false;
2582#ifndef NO_GUI
2583#ifdef DEVELOPER
2585 force = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLETALKING);
2586#endif
2587#endif
2588 float amplitude = IsPlayerSpeaking();
2589
2590 if (amplitude > 0.1 || force)
2591 {
2592 if (ad)
2593 ad.SetTalking(true);
2594
2595 // add noises on server
2596 if (g_Game.IsServer())
2597 {
2598 int now = g_Game.GetTime();
2599 if (now >= m_NextVoNNoiseTime)
2600 {
2601 m_NextVoNNoiseTime = now + 1000;
2602
2603 int voiceLevel = g_Game.GetVoiceLevel(this);
2605
2606 // add noise every second while talking
2607 NoiseParams vonpar;
2608 switch (voiceLevel)
2609 {
2610 case VoiceLevelWhisper:
2611 vonpar = pt.GetNoiseParamsWhisper();
2612 break;
2613 case VoiceLevelTalk:
2614 vonpar = pt.GetNoiseParamsTalk();
2615 break;
2616 case VoiceLevelShout:
2617 vonpar = pt.GetNoiseParamsShout();
2618 break;
2619 }
2620 AddNoise(vonpar, NoiseAIEvaluate.GetNoiseReduction(g_Game.GetWeather()));
2621 }
2622 }
2623 }
2624 else
2625 {
2626 if (ad)
2627 ad.SetTalking(false);
2628 }
2629
2630 //--------------------------------------------
2631 // anything whats handled by InputController
2632
2634
2635 if (hic)
2636 {
2638 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
2639 m_Throwing.HandleThrowing(hic, hcw, entityInHands, pDt);
2640
2642 if (m_MeleeFightLogic.CanFight())
2643 {
2644 if (m_MeleeFightLogic.HandleFightLogic(pCurrentCommandID, hic, entityInHands, m_MovementState, m_ContinueFirearmMelee))
2645 {
2647 return;
2648 }
2649 }
2650 }
2651
2652
2654 if (ModCommandHandlerAfter(pDt, pCurrentCommandID, pCurrentCommandFinished))
2655 {
2656 return;
2657 }
2658 }
class LogManager EntityAI
DayZGame g_Game
Определения DayZGame.c:3942
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Определения DayZPlayerImplementFallDamage.c:73
class NoiseSystem NoiseParams()
Определения Noise.c:15
StarlightOptic ItemOptics
proto native UAInputAPI GetUApi()
float m_SprintedTime
Определения DayZPlayerImplement.c:104
int m_NextVoNNoiseTime
Определения DayZPlayerImplement.c:147
ref DayZPlayerImplementJumpClimb m_JumpClimb
Определения DayZPlayerImplement.c:98
void SetFallYDiff(float value)
Определения DayZPlayerImplement.c:345
bool IsLanded(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3729
float m_SprintedTimePerStanceMin
Определения DayZPlayerImplement.c:105
float m_FallYDiff
Определения DayZPlayerImplement.c:103
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2249
void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
Определения DayZPlayerImplement.c:1009
ref DayZPlayerMeleeFightLogic_LightHeavy m_MeleeFightLogic
Определения DayZPlayerImplement.c:95
bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
Определения DayZPlayerImplement.c:1750
ref DayZPlayerImplementThrowing m_Throwing
Определения DayZPlayerImplement.c:97
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2259
bool m_ContinueFirearmMelee
Определения DayZPlayerImplement.c:133
bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3760
int m_LastCommandBeforeUnconscious
Определения DayZPlayerImplement.c:128
bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения DayZPlayerImplement.c:3744
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2254
bool m_IsWeapon
Определения DayZPlayerImplement.c:154
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:2944
bool m_CameraOptics
Определения DayZPlayerImplement.c:116
void HandleADS()
Определения DayZPlayerImplement.c:1870
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:3852
DayZPlayerInventory GetDayZPlayerInventory()
Определения DayZPlayerImplement.c:931
bool HandleDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:647
bool m_IsRaised
Определения DayZPlayerImplement.c:107
float m_dT
Определения DayZPlayerImplement.c:164
bool m_ProcessFirearmMeleeHit
Определения DayZPlayerImplement.c:132
void AddNoise(NoiseParams noisePar, float noiseMultiplier=1.0)
Определения DayZPlayerImplement.c:3204
bool m_SprintFull
Определения DayZPlayerImplement.c:106
void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
Определения DayZPlayerImplement.c:1231
ref DayZPlayerImplementSwimming m_Swimming
Определения DayZPlayerImplement.c:96
void HandleView()
Определения DayZPlayerImplement.c:2002
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 void ProcessLeaveEvents()
proto native bool WasGearChange()
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:1356
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1071
proto native DayZPlayerType GetDayZPlayerType()
returns appropriate DayZPlayerType
proto native DayZPlayerInstanceType GetInstanceType()
proto native float IsPlayerSpeaking()
-------------— speaking anim ----------------------—
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
void HumanCommandClimb()
Определения human.c:810
class HumanCommandMelee2 HumanCommandFall()
Определения human.c:574
void HumanCommandMove()
Определения human.c:514
void HumanCommandWeapons()
Определения human.c:1128
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1127
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(), GetInstanceType(), NoiseAIEvaluate::GetNoiseReduction(), GetUApi(), 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(), NoiseParams(), OnLadder(), OnLand(), OnMovementChanged(), ProcessJumpOrClimb(), HumanCommandVehicle::ProcessLeaveEvents(), SetFallYDiff(), GearChangeActionCallback::SetVehicleCommand(), SHumanCommandClimbSettings() и HumanCommandVehicle::WasGearChange().