DayZ 1.28
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 строка 2237

2238 {
2239 m_dT = pDt;
2240
2241 vector playerPosition = PhysicsGetPositionWS();
2242
2243 GetDayZPlayerInventory().HandleInventory(pDt);
2244 GetHumanInventory().Update(pDt);
2245
2246 if (ModCommandHandlerBefore(pDt, pCurrentCommandID, pCurrentCommandFinished))
2247 {
2248 return;
2249 }
2250
2251 HumanInputController hic = GetInputController();
2252 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2253 GetMovementState(m_MovementState);
2254
2255 bool isRaisedNow = m_MovementState.IsRaised();
2256 bool isWeapon = entityInHands && entityInHands.IsInherited(Weapon);
2257
2258 bool updateAimingMdfr = false;
2259 if (isWeapon != m_IsWeapon)
2260 {
2261 m_IsWeapon = isWeapon;
2262 updateAimingMdfr = true;
2263 }
2264
2265 if (isRaisedNow != m_IsRaised)
2266 {
2267 updateAimingMdfr = true;
2268 m_IsRaised = m_MovementState.IsRaised();
2269 }
2270
2271 if (updateAimingMdfr)
2272 {
2273 if (isRaisedNow && isWeapon)
2274 GetUApi().ActivateModificator("aiming");
2275 else
2276 GetUApi().DeactivateModificator("aiming");
2277 }
2278
2279 // handle ADS ironsights/optics transition logic
2280 HandleADS();
2281
2282 // handle weapons
2283 if (hic)
2284 {
2285 ItemOptics opticInHands = ItemOptics.Cast(entityInHands);
2286 if (isWeapon && (!m_ProcessFirearmMeleeHit || !m_ContinueFirearmMelee))
2287 {
2289 bool exitIronSights = false;
2290 HandleWeapons(pDt, entityInHands, hic, exitIronSights);
2291 }
2292 else if (IsHandheldOpticsInUse() && m_CameraOptics && opticInHands)
2293 {
2294 bool exitOptic = false;
2295 HandleOptic(opticInHands, true, hic, exitOptic);
2296 }
2297 }
2298
2300 HandleView();
2301
2302 if (m_MovementState.m_iMovement != m_MovementState.m_LocalMovement)
2303 {
2305 m_MovementState.m_LocalMovement = m_MovementState.m_iMovement;
2306 }
2307
2309 if (HandleDeath(pCurrentCommandID))
2310 {
2311 return;
2312 }
2313
2316 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE )
2317 {
2318 HumanCommandVehicle cmdVehicle = GetCommand_Vehicle();
2319 if ( cmdVehicle && cmdVehicle.IsGettingOut() )
2320 {
2321 vector waterLevel;
2322 if ( m_Swimming.CheckSwimmingStart( waterLevel ) )
2323 {
2324 // not all the events may have been called as getting out could have occurred while under water
2325 cmdVehicle.ProcessLeaveEvents();
2326
2327 StartCommand_Swim();
2328 return;
2329 }
2330 }
2331 }
2332
2334 if (pCurrentCommandFinished)
2335 {
2336 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
2337 {
2338 if ((m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE) && (m_TransportCache != null))
2339 {
2340 int crew_index = m_TransportCache.CrewMemberIndex(this);
2341 int seat = m_TransportCache.GetSeatAnimationType(crew_index);
2342 StartCommand_Vehicle(m_TransportCache, crew_index, seat, true);
2343 m_TransportCache = null;
2344 return;
2345 }
2346 }
2347 // start moving
2348
2349 // start falling ? (could happen after climbing)
2350 if (PhysicsIsFalling(true))
2351 {
2352 StartCommand_Fall(0);
2353 SetFallYDiff(playerPosition[1]);
2354 return;
2355 }
2356
2358 if (m_Swimming.m_bWasSwimming)
2359 {
2360 StartCommand_Swim();
2361 return;
2362 }
2363
2364 StartCommand_Move();
2365
2366 if (GetHumanInventory().GetEntityInHands())
2367 ForceStandUpForHeavyItems(GetHumanInventory().GetEntityInHands());
2368
2369 return;
2370 }
2371
2372
2373 //--------------------------------------------
2375
2376 if (ModCommandHandlerInside(pDt, pCurrentCommandID, pCurrentCommandFinished))
2377 {
2378 return;
2379 }
2380
2381
2382 //--------------------------------------------
2383 // vehicle handling
2384 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE)
2385 {
2386 HumanCommandVehicle hcv = GetCommand_Vehicle();
2387 if (hcv.WasGearChange())
2388 {
2389 GearChangeActionCallback cb = GearChangeActionCallback.Cast(AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_SHIFTGEAR, GearChangeActionCallback));
2390 cb.SetVehicleCommand(hcv);
2391 }
2392
2393 return;
2394 }
2395
2397 //--------------------------------------------
2398 HumanCommandMove hcm = GetCommand_Move();
2399 if (hcm && hcm.GetCurrentMovementSpeed() > 2.99 && m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
2400 {
2401 m_SprintedTime += pDt;
2403 {
2404 m_SprintFull = true;
2405 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_DEFAULT;
2406 }
2407 else
2408 m_SprintFull = false;
2409 }
2410 else
2411 {
2412 m_SprintedTime = 0.0;
2413 m_SprintFull = false;
2414 }
2415
2416 //--------------------------------------------
2417 // swimming handling
2418 if (m_Swimming.HandleSwimming(pCurrentCommandID, hcm, m_MovementState))
2419 {
2420 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2421 {
2422 return;
2423 }
2424
2425 m_JumpClimb.CheckAndFinishJump();
2426 return;
2427 }
2428
2429 //--------------------------------------------
2430 // ladder handling
2431 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER)
2432 {
2434 return;
2435 }
2436
2437 //--------------------------------------------
2438 // climb handling
2439 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_CLIMB)
2440 {
2441 return;
2442 }
2443
2444 //--------------------------------------------
2445 // fall handling
2446
2447 if (IsAlreadyInFallingCommand(pCurrentCommandID))
2448 {
2449 if (IsLanded(pCurrentCommandID))
2450 {
2452 NoiseParams npar;
2453
2454 FallDamageData fallDamageData = new FallDamageData();
2455 fallDamageData.m_Height = m_FallYDiff - playerPosition[1];
2456
2457 // land
2458 if (fallDamageData.m_Height < 0.5)
2459 {
2460 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2461 OnLand(pCurrentCommandID, fallDamageData);
2462 npar = type.GetNoiseParamsLandLight();
2463 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2464 }
2465 else if (fallDamageData.m_Height < 3.0)
2466 {
2467 if (m_MovementState.IsInProne() || m_MovementState.IsInRaisedProne())
2468 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2469 else
2470 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_LIGHT;
2471
2472 OnLand(pCurrentCommandID, fallDamageData);
2473 npar = type.GetNoiseParamsLandLight();
2474 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2475 }
2476 else if (fallDamageData.m_Height < 5.0)
2477 {
2478 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_MEDIUM;
2479 OnLand(pCurrentCommandID, fallDamageData);
2480 npar = type.GetNoiseParamsLandHeavy();
2481 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2482 }
2483 else
2484 {
2485 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_HEAVY;
2486 OnLand(pCurrentCommandID, fallDamageData);
2487 npar = type.GetNoiseParamsLandHeavy();
2488 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2489 }
2490
2491 if (fallDamageData.m_Height >= DayZPlayerImplementFallDamage.HEALTH_HEIGHT_LOW && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2492 {
2493 OnPlayerRecievedHit();
2494 }
2495
2496 m_FallDamage.HandleFallDamage(fallDamageData);
2497 m_JumpClimb.CheckAndFinishJump(fallDamageData.m_LandType);
2498 }
2499
2501 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
2502 {
2503 return;
2504 }
2505 }
2506 else if (PhysicsIsFalling(false))
2507 {
2508 // Not in a falling command but the controller is falling, start default fall
2509 StartCommand_Fall(0);
2510 SetFallYDiff(playerPosition[1]);
2511 return;
2512 }
2513
2514 //--------------------------------------------
2515 // handle jumping
2516
2517#ifndef NO_GUI
2518#ifdef DEVELOPER
2520
2521 if (DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLEJUMP))
2522 {
2523 SHumanCommandClimbSettings hcls = GetDayZPlayerType().CommandClimbSettingsW();
2524
2525 if (m_MovementState.m_iMovement != DayZPlayerConstants.MOVEMENTIDX_IDLE)
2526 hcls.m_fFwMaxDistance = 3;
2527 else
2528 hcls.m_fFwMaxDistance = 1.2;
2529
2530 SHumanCommandClimbResult ret;
2531
2533 HumanCommandClimb.DoClimbTest(this, ret, 0x3);
2534 }
2535
2536#endif
2537#endif
2538
2539 // start jump
2540 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2541 {
2542 return;
2543 }
2544
2545 HumanCommandAdditives ad = GetCommandModifier_Additives();
2546
2547 bool force = false;
2548#ifndef NO_GUI
2549#ifdef DEVELOPER
2551 force = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLETALKING);
2552#endif
2553#endif
2554 float amplitude = IsPlayerSpeaking();
2555
2556 if (amplitude > 0.1 || force)
2557 {
2558 if (ad)
2559 ad.SetTalking(true);
2560
2561 // add noises on server
2562 if (GetGame().IsServer())
2563 {
2564 int now = GetGame().GetTime();
2565 if (now >= m_NextVoNNoiseTime)
2566 {
2567 m_NextVoNNoiseTime = now + 1000;
2568
2569 int voiceLevel = GetGame().GetVoiceLevel(this);
2571
2572 // add noise every second while talking
2573 NoiseParams vonpar;
2574 switch (voiceLevel)
2575 {
2576 case VoiceLevelWhisper:
2577 vonpar = pt.GetNoiseParamsWhisper();
2578 break;
2579 case VoiceLevelTalk:
2580 vonpar = pt.GetNoiseParamsTalk();
2581 break;
2582 case VoiceLevelShout:
2583 vonpar = pt.GetNoiseParamsShout();
2584 break;
2585 }
2586 AddNoise(vonpar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2587 }
2588 }
2589 }
2590 else
2591 {
2592 if (ad)
2593 ad.SetTalking(false);
2594 }
2595
2596 //--------------------------------------------
2597 // anything whats handled by InputController
2598
2600
2601 if (hic)
2602 {
2604 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
2605 m_Throwing.HandleThrowing(hic, hcw, entityInHands, pDt);
2606
2608 if (m_MeleeFightLogic.CanFight())
2609 {
2610 if (m_MeleeFightLogic.HandleFightLogic(pCurrentCommandID, hic, entityInHands, m_MovementState, m_ContinueFirearmMelee))
2611 {
2613 return;
2614 }
2615 }
2616 }
2617
2618
2620 if (ModCommandHandlerAfter(pDt, pCurrentCommandID, pCurrentCommandFinished))
2621 {
2622 return;
2623 }
2624 }
class LogManager EntityAI
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Определения DayZPlayerImplementFallDamage.c:73
class NoiseSystem NoiseParams()
Определения Noise.c:15
StarlightOptic ItemOptics
proto native UAInputAPI GetUApi()
proto native int GetVoiceLevel(Object player=null)
Get voice level of VoN (on both client and server) (VoiceLevelWhisper = 0, VoiceLevelNormal = 1,...
proto int GetTime()
returns mission time in milliseconds
float m_SprintedTime
Определения DayZPlayerImplement.c:128
int m_NextVoNNoiseTime
Определения DayZPlayerImplement.c:171
ref DayZPlayerImplementJumpClimb m_JumpClimb
Определения DayZPlayerImplement.c:122
void SetFallYDiff(float value)
Определения DayZPlayerImplement.c:367
bool IsLanded(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3746
float m_SprintedTimePerStanceMin
Определения DayZPlayerImplement.c:129
float m_FallYDiff
Определения DayZPlayerImplement.c:127
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2215
void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
Определения DayZPlayerImplement.c:984
ref DayZPlayerMeleeFightLogic_LightHeavy m_MeleeFightLogic
Определения DayZPlayerImplement.c:119
bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
Определения DayZPlayerImplement.c:1724
ref DayZPlayerImplementThrowing m_Throwing
Определения DayZPlayerImplement.c:121
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2225
bool m_ContinueFirearmMelee
Определения DayZPlayerImplement.c:157
bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3777
int m_LastCommandBeforeUnconscious
Определения DayZPlayerImplement.c:152
bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения DayZPlayerImplement.c:3761
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2220
bool m_IsWeapon
Определения DayZPlayerImplement.c:178
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:2910
bool m_CameraOptics
Определения DayZPlayerImplement.c:140
void HandleADS()
Определения DayZPlayerImplement.c:1838
ref HumanMovementState m_MovementState
time step for gradual update of dead screen visibilibty up to full visbility [s]
Определения DayZPlayerImplement.c:116
ref DayZPlayerImplementFallDamage m_FallDamage
Определения DayZPlayerImplement.c:123
bool IsHandheldOpticsInUse()
Определения DayZPlayerImplement.c:3869
DayZPlayerInventory GetDayZPlayerInventory()
Определения DayZPlayerImplement.c:907
bool HandleDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:623
bool m_IsRaised
Определения DayZPlayerImplement.c:131
float m_dT
Определения DayZPlayerImplement.c:188
bool m_ProcessFirearmMeleeHit
Определения DayZPlayerImplement.c:156
void AddNoise(NoiseParams noisePar, float noiseMultiplier=1.0)
Определения DayZPlayerImplement.c:3228
bool m_SprintFull
Определения DayZPlayerImplement.c:130
void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
Определения DayZPlayerImplement.c:1206
ref DayZPlayerImplementSwimming m_Swimming
Определения DayZPlayerImplement.c:120
void HandleView()
Определения DayZPlayerImplement.c:1968
Transport m_TransportCache
Определения DayZPlayerImplement.c:164
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:1353
DayZPlayerInstanceType
defined in C++
Определения dayzplayer.c:1068
proto native DayZPlayerType GetDayZPlayerType()
returns appropriate DayZPlayerType
proto native DayZPlayerInstanceType GetInstanceType()
proto native float IsPlayerSpeaking()
-------------— speaking anim ----------------------—
DayZPlayerConstants
defined in C++
Определения dayzplayer.c:602
proto native CGame GetGame()
void HumanCommandClimb()
Определения human.c:810
class HumanCommandMelee2 HumanCommandFall()
Определения human.c:574
void HumanCommandMove()
Определения human.c:514
void HumanCommandWeapons()
Определения human.c:1126
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1125
class SHumanCommandSwimSettings SHumanCommandClimbSettings()
Определения humansettings.c:74

Перекрестные ссылки UAInputAPI::ActivateModificator(), AddNoise(), DayZPlayerImplementFallDamage(), DayZPlayerType(), UAInputAPI::DeactivateModificator(), HumanCommandClimb::DoClimbTest(), ForceStandUpForHeavyItems(), PlayerConstants::FULL_SPRINT_DELAY_DEFAULT, HumanCommandMove::GetCurrentMovementSpeed(), GetDayZPlayerInventory(), GetDayZPlayerType(), DiagMenu::GetEngineValue(), GetGame(), GetInstanceType(), NoiseAIEvaluate::GetNoiseReduction(), CGame::GetTime(), GetUApi(), CGame::GetVoiceLevel(), 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().