public override void Open() { if (Opened) { return; } player = ScriptClient.Client.Character; if (player == null || player.IsDead || player.IsInFightMode || player.ModelInst.IsInAnimation()) { return; } var env = player.Environment; if (env.InAir || env.WaterLevel > 0.4f) { return; } player.SetMovement(NPCMovement.Stand); player.Inventory.OnItemAmountChange += UpdateAmountEventMethod; player.Inventory.OnAddItem += UpdateInventory; player.Inventory.OnRemoveItem += UpdateInventory; player.OnEquip += Player_OnEquip; player.OnUnequip += Player_OnUnequip; base.Open(); inv.SetContents(player.Inventory); inv.Show(); inv.Enabled = true; }
void PlayerUpdate() { if (ArenaClient.DetectSchinken) { fwdTelHelper.Update(GameTime.Ticks); upTelHelper.Update(GameTime.Ticks); } NPCInst hero = ScriptClient.Client.Character; var gAI = hero.BaseInst.gAI; if (hero.IsDead || hero.IsUnconscious) { LookAround(hero); return; } zCAICamera.CurrentCam.BestAzimuth = 0; if (freeAim) { FreeAiming(hero); return; } DoTurning(hero); if (KeyBind.Action.IsPressed() && hero.IsInFightMode) { var enemy = PlayerFocus.GetFocusNPC(); if (enemy == null || !enemy.IsSpawned || enemy.IsDead) { PlayerFocus.SetLockedTarget(null); // updates for new target } PlayerFocus.SetLockedTarget(PlayerFocus.GetFocusNPC()); } else { PlayerFocus.SetLockedTarget(null); } NPCMovement state = NPCMovement.Stand; if (!KeyBind.Action.IsPressed() || hero.Movement != NPCMovement.Stand) { if (KeyBind.MoveForward.IsPressed()) // move forward { state = NPCMovement.Forward; } else if (KeyBind.MoveBack.IsPressed()) // move backward { var drawnWeapon = hero.GetDrawnWeapon(); if (hero.IsInFightMode && (drawnWeapon == null || drawnWeapon.IsWepMelee)) { if (dodgeLock.IsReady) // don't spam { if (IsWarmup()) { return; } NPCInst.Requests.Attack(hero, FightMoves.Dodge); } return; } else { state = NPCMovement.Backward; } } else if (KeyBind.MoveLeft.IsPressed()) // strafe left { state = NPCMovement.Left; } else if (KeyBind.MoveRight.IsPressed()) // strafe right { state = NPCMovement.Right; } else { state = NPCMovement.Stand; } } if (nextStrafeChange > GameTime.Ticks) { state = hero.Movement; } if (state == NPCMovement.Forward) { // FIXME: use only a better CheckEnoughSpaceMoveForward if (hero.Movement == NPCMovement.Stand && !gAI.CheckEnoughSpaceMoveForward(true)) { state = NPCMovement.Stand; } else { gAI.CalcForceModelHalt(); if ((gAI.Bitfield0 & zCAIPlayer.Flags.ForceModelHalt) != 0) { gAI.Bitfield0 &= ~zCAIPlayer.Flags.ForceModelHalt; state = NPCMovement.Stand; } } } else if (state == NPCMovement.Backward) { if (!gAI.CheckEnoughSpaceMoveBackward(true)) { state = NPCMovement.Stand; } } else if (state == NPCMovement.Left) { if (!gAI.CheckEnoughSpaceMoveLeft(true)) { state = NPCMovement.Stand; } } else if (state == NPCMovement.Right) { if (!gAI.CheckEnoughSpaceMoveRight(true)) { state = NPCMovement.Stand; } } if (state != NPCMovement.Stand && IsWarmup()) { state = NPCMovement.Stand; } if (state == NPCMovement.Left || state == NPCMovement.Right || (state == NPCMovement.Forward && hero.IsInFightMode)) { if (hero.Movement != state) { nextStrafeChange = GameTime.Ticks + StrafeInterval; } } else { nextStrafeChange = 0; } hero.SetMovement(state); }