DayZ 1.27
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 строка 2174

2175 {
2176 m_dT = pDt;
2177
2178 vector playerPosition = PhysicsGetPositionWS();
2179
2180 if (ModCommandHandlerBefore(pDt, pCurrentCommandID, pCurrentCommandFinished))
2181 {
2182 return;
2183 }
2184
2185 HumanInputController hic = GetInputController();
2186 EntityAI entityInHands = GetHumanInventory().GetEntityInHands();
2187 GetMovementState(m_MovementState);
2188
2189 bool isRaisedNow = m_MovementState.IsRaised();
2190 bool isWeapon = entityInHands && entityInHands.IsInherited(Weapon);
2191
2192 bool updateAimingMdfr = false;
2193 if (isWeapon != m_IsWeapon)
2194 {
2195 m_IsWeapon = isWeapon;
2196 updateAimingMdfr = true;
2197 }
2198
2199 if (isRaisedNow != m_IsRaised)
2200 {
2201 updateAimingMdfr = true;
2202 m_IsRaised = m_MovementState.IsRaised();
2203 }
2204
2205 if (updateAimingMdfr)
2206 {
2207 if (isRaisedNow && isWeapon)
2208 GetUApi().ActivateModificator("aiming");
2209 else
2210 GetUApi().DeactivateModificator("aiming");
2211 }
2212
2213 // handle ADS ironsights/optics transition logic
2214 HandleADS();
2215
2216 // handle weapons
2217 if (hic)
2218 {
2219 ItemOptics opticInHands = ItemOptics.Cast(entityInHands);
2220 if (isWeapon && (!m_ProcessFirearmMeleeHit || !m_ContinueFirearmMelee))
2221 {
2223 bool exitIronSights = false;
2224 HandleWeapons(pDt, entityInHands, hic, exitIronSights);
2225 }
2226 else if (IsHandheldOpticsInUse() && m_CameraOptics && opticInHands)
2227 {
2228 bool exitOptic = false;
2229 HandleOptic(opticInHands, true, hic, exitOptic);
2230 }
2231 }
2232
2234 HandleView();
2235
2236 if (m_MovementState.m_iMovement != m_MovementState.m_LocalMovement)
2237 {
2239 m_MovementState.m_LocalMovement = m_MovementState.m_iMovement;
2240 }
2241
2243 if (HandleDeath(pCurrentCommandID))
2244 {
2245 return;
2246 }
2247
2250 if ( pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE )
2251 {
2252 HumanCommandVehicle cmdVehicle = GetCommand_Vehicle();
2253 if ( cmdVehicle && cmdVehicle.IsGettingOut() )
2254 {
2255 vector waterLevel;
2256 if ( m_Swimming.CheckSwimmingStart( waterLevel ) )
2257 {
2258 // not all the events may have been called as getting out could have occurred while under water
2259 cmdVehicle.ProcessLeaveEvents();
2260
2261 StartCommand_Swim();
2262 return;
2263 }
2264 }
2265 }
2266
2268 if (pCurrentCommandFinished)
2269 {
2270 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_UNCONSCIOUS)
2271 {
2272 if ((m_LastCommandBeforeUnconscious == DayZPlayerConstants.COMMANDID_VEHICLE) && (m_TransportCache != null))
2273 {
2274 int crew_index = m_TransportCache.CrewMemberIndex(this);
2275 int seat = m_TransportCache.GetSeatAnimationType(crew_index);
2276 StartCommand_Vehicle(m_TransportCache, crew_index, seat, true);
2277 m_TransportCache = null;
2278 return;
2279 }
2280 }
2281 // start moving
2282
2283 // start falling ? (could happen after climbing)
2284 if (PhysicsIsFalling(true))
2285 {
2286 StartCommand_Fall(0);
2287 SetFallYDiff(playerPosition[1]);
2288 return;
2289 }
2290
2292 if (m_Swimming.m_bWasSwimming)
2293 {
2294 StartCommand_Swim();
2295 return;
2296 }
2297
2298 StartCommand_Move();
2299
2300 if (GetHumanInventory().GetEntityInHands())
2301 ForceStandUpForHeavyItems(GetHumanInventory().GetEntityInHands());
2302
2303 return;
2304 }
2305
2306
2307 //--------------------------------------------
2309
2310 if (ModCommandHandlerInside(pDt, pCurrentCommandID, pCurrentCommandFinished))
2311 {
2312 return;
2313 }
2314
2315
2316 //--------------------------------------------
2317 // vehicle handling
2318 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_VEHICLE)
2319 {
2320 HumanCommandVehicle hcv = GetCommand_Vehicle();
2321 if (hcv.WasGearChange())
2322 {
2323 GearChangeActionCallback cb = GearChangeActionCallback.Cast(AddCommandModifier_Action(DayZPlayerConstants.CMD_ACTIONMOD_SHIFTGEAR, GearChangeActionCallback));
2324 cb.SetVehicleCommand(hcv);
2325 }
2326
2327 return;
2328 }
2329
2331 //--------------------------------------------
2332 HumanCommandMove hcm = GetCommand_Move();
2333 if (hcm && hcm.GetCurrentMovementSpeed() > 2.99 && m_MovementState.m_iMovement == DayZPlayerConstants.MOVEMENTIDX_SPRINT)
2334 {
2335 m_SprintedTime += pDt;
2337 {
2338 m_SprintFull = true;
2339 m_SprintedTimePerStanceMin = PlayerConstants.FULL_SPRINT_DELAY_DEFAULT;
2340 }
2341 else
2342 m_SprintFull = false;
2343 }
2344 else
2345 {
2346 m_SprintedTime = 0.0;
2347 m_SprintFull = false;
2348 }
2349
2350 //--------------------------------------------
2351 // swimming handling
2352 if (m_Swimming.HandleSwimming(pCurrentCommandID, hcm, m_MovementState))
2353 {
2354 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2355 {
2356 return;
2357 }
2358
2359 m_JumpClimb.CheckAndFinishJump();
2360 return;
2361 }
2362
2363 //--------------------------------------------
2364 // ladder handling
2365 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_LADDER)
2366 {
2368 return;
2369 }
2370
2371 //--------------------------------------------
2372 // climb handling
2373 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_CLIMB)
2374 {
2375 return;
2376 }
2377
2378 //--------------------------------------------
2379 // fall handling
2380
2381 if (IsAlreadyInFallingCommand(pCurrentCommandID))
2382 {
2383 if (IsLanded(pCurrentCommandID))
2384 {
2386 NoiseParams npar;
2387
2388 FallDamageData fallDamageData = new FallDamageData();
2389 fallDamageData.m_Height = m_FallYDiff - playerPosition[1];
2390
2391 // land
2392 if (fallDamageData.m_Height < 0.5)
2393 {
2394 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2395 OnLand(pCurrentCommandID, fallDamageData);
2396 npar = type.GetNoiseParamsLandLight();
2397 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2398 }
2399 else if (fallDamageData.m_Height < 3.0)
2400 {
2401 if (m_MovementState.IsInProne() || m_MovementState.IsInRaisedProne())
2402 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_NONE;
2403 else
2404 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_LIGHT;
2405
2406 OnLand(pCurrentCommandID, fallDamageData);
2407 npar = type.GetNoiseParamsLandLight();
2408 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2409 }
2410 else if (fallDamageData.m_Height < 5.0)
2411 {
2412 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_MEDIUM;
2413 OnLand(pCurrentCommandID, fallDamageData);
2414 npar = type.GetNoiseParamsLandHeavy();
2415 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2416 }
2417 else
2418 {
2419 fallDamageData.m_LandType = HumanCommandFall.LANDTYPE_HEAVY;
2420 OnLand(pCurrentCommandID, fallDamageData);
2421 npar = type.GetNoiseParamsLandHeavy();
2422 AddNoise(npar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2423 }
2424
2425 if (fallDamageData.m_Height >= DayZPlayerImplementFallDamage.HEALTH_HEIGHT_LOW && GetInstanceType() == DayZPlayerInstanceType.INSTANCETYPE_CLIENT)
2426 {
2427 OnPlayerRecievedHit();
2428 }
2429
2430 m_FallDamage.HandleFallDamage(fallDamageData);
2431 m_JumpClimb.CheckAndFinishJump(fallDamageData.m_LandType);
2432 }
2433
2435 if (pCurrentCommandID == DayZPlayerConstants.COMMANDID_FALL)
2436 {
2437 return;
2438 }
2439 }
2440 else if (PhysicsIsFalling(false))
2441 {
2442 // Not in a falling command but the controller is falling, start default fall
2443 StartCommand_Fall(0);
2444 SetFallYDiff(playerPosition[1]);
2445 return;
2446 }
2447
2448 //--------------------------------------------
2449 // handle jumping
2450
2451#ifndef NO_GUI
2452#ifdef DEVELOPER
2454
2455 if (DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLEJUMP))
2456 {
2457 SHumanCommandClimbSettings hcls = GetDayZPlayerType().CommandClimbSettingsW();
2458
2459 if (m_MovementState.m_iMovement != DayZPlayerConstants.MOVEMENTIDX_IDLE)
2460 hcls.m_fFwMaxDistance = 3;
2461 else
2462 hcls.m_fFwMaxDistance = 1.2;
2463
2464 SHumanCommandClimbResult ret;
2465
2467 HumanCommandClimb.DoClimbTest(this, ret, 0x3);
2468 }
2469
2470#endif
2471#endif
2472
2473 // start jump
2474 if (ProcessJumpOrClimb(pDt, pCurrentCommandID))
2475 {
2476 return;
2477 }
2478
2479 HumanCommandAdditives ad = GetCommandModifier_Additives();
2480
2481 bool force = false;
2482#ifndef NO_GUI
2483#ifdef DEVELOPER
2485 force = DiagMenu.GetEngineValue(DayZPlayerConstants.DEBUG_ENABLETALKING);
2486#endif
2487#endif
2488 float amplitude = IsPlayerSpeaking();
2489
2490 if (amplitude > 0.1 || force)
2491 {
2492 if (ad)
2493 ad.SetTalking(true);
2494
2495 // add noises on server
2496 if (GetGame().IsServer())
2497 {
2498 int now = GetGame().GetTime();
2499 if (now >= m_NextVoNNoiseTime)
2500 {
2501 m_NextVoNNoiseTime = now + 1000;
2502
2503 int voiceLevel = GetGame().GetVoiceLevel(this);
2505
2506 // add noise every second while talking
2507 NoiseParams vonpar;
2508 switch (voiceLevel)
2509 {
2510 case VoiceLevelWhisper:
2511 vonpar = pt.GetNoiseParamsWhisper();
2512 break;
2513 case VoiceLevelTalk:
2514 vonpar = pt.GetNoiseParamsTalk();
2515 break;
2516 case VoiceLevelShout:
2517 vonpar = pt.GetNoiseParamsShout();
2518 break;
2519 }
2520 AddNoise(vonpar, NoiseAIEvaluate.GetNoiseReduction(GetGame().GetWeather()));
2521 }
2522 }
2523 }
2524 else
2525 {
2526 if (ad)
2527 ad.SetTalking(false);
2528 }
2529
2530 //--------------------------------------------
2531 // anything whats handled by InputController
2532
2534
2535 if (hic)
2536 {
2538 HumanCommandWeapons hcw = GetCommandModifier_Weapons();
2539 m_Throwing.HandleThrowing(hic, hcw, entityInHands, pDt);
2540
2542 if (m_MeleeFightLogic.CanFight())
2543 {
2544 if (m_MeleeFightLogic.HandleFightLogic(pCurrentCommandID, hic, entityInHands, m_MovementState, m_ContinueFirearmMelee))
2545 {
2547 return;
2548 }
2549 }
2550 }
2551
2552
2554 if (ModCommandHandlerAfter(pDt, pCurrentCommandID, pCurrentCommandFinished))
2555 {
2556 return;
2557 }
2558 }
class LogManager EntityAI
void DayZPlayerImplementFallDamage(DayZPlayer pPlayer)
Определения DayZPlayerImplementFallDamage.c:73
class NoiseSystem NoiseParams()
Определения Noise.c:15
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:169
ref DayZPlayerImplementJumpClimb m_JumpClimb
Определения DayZPlayerImplement.c:122
void SetFallYDiff(float value)
Определения DayZPlayerImplement.c:360
bool IsLanded(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3680
float m_SprintedTimePerStanceMin
Определения DayZPlayerImplement.c:129
float m_FallYDiff
Определения DayZPlayerImplement.c:127
bool ModCommandHandlerBefore(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2152
void HandleWeapons(float pDt, Entity pInHands, HumanInputController pInputs, out bool pExitIronSights)
Определения DayZPlayerImplement.c:976
ref DayZPlayerMeleeFightLogic_LightHeavy m_MeleeFightLogic
Определения DayZPlayerImplement.c:119
bool ProcessJumpOrClimb(float pDt, int pCurrentCommandID)
Определения DayZPlayerImplement.c:1661
ref DayZPlayerImplementThrowing m_Throwing
Определения DayZPlayerImplement.c:121
bool ModCommandHandlerAfter(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2162
bool m_ContinueFirearmMelee
Определения DayZPlayerImplement.c:157
bool IsAlreadyInFallingCommand(int pCurrentCommandID)
Определения DayZPlayerImplement.c:3711
int m_LastCommandBeforeUnconscious
Определения DayZPlayerImplement.c:152
bool OnLand(int pCurrentCommandID, FallDamageData fallDamageData)
Определения DayZPlayerImplement.c:3695
bool ModCommandHandlerInside(float pDt, int pCurrentCommandID, bool pCurrentCommandFinished)
Определения DayZPlayerImplement.c:2157
bool m_IsWeapon
Определения DayZPlayerImplement.c:176
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:2844
bool m_CameraOptics
Определения DayZPlayerImplement.c:140
void HandleADS()
Определения DayZPlayerImplement.c:1775
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:3803
bool HandleDeath(int pCurrentCommandID)
Определения DayZPlayerImplement.c:615
bool m_IsRaised
Определения DayZPlayerImplement.c:131
float m_dT
Определения DayZPlayerImplement.c:186
bool m_ProcessFirearmMeleeHit
Определения DayZPlayerImplement.c:156
void AddNoise(NoiseParams noisePar, float noiseMultiplier=1.0)
Определения DayZPlayerImplement.c:3162
bool m_SprintFull
Определения DayZPlayerImplement.c:130
void HandleOptic(notnull ItemOptics optic, bool inHands, HumanInputController pInputs, out bool pExitOptics)
Определения DayZPlayerImplement.c:1143
ref DayZPlayerImplementSwimming m_Swimming
Определения DayZPlayerImplement.c:120
void HandleView()
Определения DayZPlayerImplement.c:1905
Transport m_TransportCache
Определения DayZPlayerImplement.c:162
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:1113
class HumanCommandWeapons HumanCommandAdditives()
Определения human.c:1112
class SHumanCommandSwimSettings SHumanCommandClimbSettings()
Определения humansettings.c:74

Перекрестные ссылки UAInputAPI::ActivateModificator(), AddNoise(), DayZPlayerImplementFallDamage(), DayZPlayerType(), UAInputAPI::DeactivateModificator(), HumanCommandClimb::DoClimbTest(), ForceStandUpForHeavyItems(), PlayerConstants::FULL_SPRINT_DELAY_DEFAULT, HumanCommandMove::GetCurrentMovementSpeed(), 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().