protected override void OnDetachFrom(EntityLogic parentEntity, object userData)
protected internal override void OnDetachFrom(EntityLogic parentEntity, object userData) #endif { base.OnDetachFrom(parentEntity, userData); }
protected override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData)
protected internal override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData) #endif { base.OnAttachTo(parentEntity, parentTransform, userData); }
private static void MapShow(Player player, ref MsgAction packet) { player.ForceSend(MapShowPacket(player), (ushort)sizeof(MsgAction)); player.ForceSend(MsgStatus.Create(player.MapId, 0), (ushort)sizeof(MsgStatus)); if (player.Inventory.Items == null) { player.Inventory = new Inventory(player); } else { player.Inventory.SetOwner(player); } if (player.Equipment.Items == null) { player.Equipment = new Equipment(player); } else { player.Equipment.SetOwner(player); } foreach (var kvp in player.Equipment) { player.Send(new MsgItemInformation(kvp.Value, kvp.Key)); } foreach (var kvp in player.Inventory) { player.Send(new MsgItemInformation(kvp.Value, MsgItemPosition.Inventory)); } foreach (var kvp in player.Profs) { player.Send(MsgProf.Create(kvp.Value)); } foreach (var kvp in player.Skills) { player.Send(MsgSkill.Create(kvp.Value)); } EntityLogic.Recalculate(player); if (player.Online) { return; } player.AddStatusEffect(StatusEffect.Frozen); player.CurrentNpcId = 1337; player.Send(LegacyPackets.NpcSay("Select Char.")); player.Send(LegacyPackets.NpcLink("Next", 1)); player.Send(LegacyPackets.NpcLink("Select", 10)); player.Send(LegacyPackets.NpcLink("New", 100)); player.Send(LegacyPackets.NpcFace(10)); player.Send(LegacyPackets.NpcFinish()); ScreenSystem.Create(player); ScreenSystem.Update(player); ScreenSystem.Send(player, Create(player, player.UniqueId, MsgActionType.SpawnEffect), true); }
protected internal override void OnDetached(EntityLogic childEntity, object userData) #endif { base.OnDetached(childEntity, userData); }
/// <summary> /// 实体解除子实体。 /// </summary> /// <param name="parentEntity">被解除的父实体。</param> /// <param name="userData">用户自定义数据。</param> protected override void OnDetachFrom(EntityLogic parentEntity, object userData) { base.OnDetachFrom(parentEntity, userData); BaseEntityAction?.OnDetachFrom?.Invoke(parentEntity, userData); }
public RoutesController() { _context = new ApplicationDbContext(); _entityLogic = new EntityLogic <Route>(); }
/// <summary> /// 实体解除子实体。 /// </summary> /// <param name="childEntity">解除的子实体。</param> /// <param name="userData">用户自定义数据。</param> protected override void OnDetached(EntityLogic childEntity, object userData) { base.OnDetached(childEntity, userData); BaseEntityAction?.OnDetached?.Invoke(childEntity, userData); }
/// <summary> /// 实体附加子实体。 /// </summary> /// <param name="parentEntity">被附加的父实体。</param> /// <param name="parentTransform">被附加父实体的位置。</param> /// <param name="userData">用户自定义数据。</param> protected override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData) { base.OnAttachTo(parentEntity, parentTransform, userData); BaseEntityAction?.OnAttachTo?.Invoke(parentEntity, parentTransform, userData); }
public override IEnumerator StartMyActivationCoroutine() { Ability move = mySpellBook.GetAbilityByName("Move"); Ability strike = mySpellBook.GetAbilityByName("Strike"); Ability goblinWarCry = mySpellBook.GetAbilityByName("Goblin War Cry"); Ability invigorate = mySpellBook.GetAbilityByName("Invigorate"); ActionStart: SetTargetDefender(EntityLogic.GetBestTarget(this, true)); while (EventManager.Instance.gameOverEventStarted) { yield return(null); } if (EntityLogic.IsAbleToTakeActions(this) == false) { LivingEntityManager.Instance.EndEntityActivation(this); } // Goblin War Cry else if (EntityLogic.IsAbilityUseable(this, goblinWarCry)) { Action action = AbilityLogic.Instance.PerformGoblinWarCry(this); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Strike else if (EntityLogic.IsAbilityUseable(this, strike, myCurrentTarget) && EntityLogic.IsTargetInRange(this, myCurrentTarget, currentMeleeRange)) { Action action = AbilityLogic.Instance.PerformStrike(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Invigorate else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestInvigorateTarget(this), invigorate.abilityRange) && EntityLogic.IsAbilityUseable(this, invigorate, EntityLogic.GetBestInvigorateTarget(this))) { Action action = AbilityLogic.Instance.PerformInvigorate(this, EntityLogic.GetBestInvigorateTarget(this)); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Move else if (EntityLogic.IsTargetInRange(this, myCurrentTarget, currentMeleeRange) == false && EntityLogic.IsAbleToMove(this) && EntityLogic.IsAbilityUseable(this, move) && EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, myCurrentTarget, currentMeleeRange, EntityLogic.GetTotalMobility(this)) != null ) { Tile destination = EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, myCurrentTarget, currentMeleeRange, EntityLogic.GetTotalMobility(this)); Action movementAction = AbilityLogic.Instance.PerformMove(this, destination); yield return(new WaitUntil(() => movementAction.ActionResolved() == true)); // small delay here in order to seperate the two actions a bit. yield return(new WaitForSeconds(1f)); goto ActionStart; } // Can't do anything more, end activation else { LivingEntityManager.Instance.EndEntityActivation(this); } }
private static void Process(int npcIdoverride = 0) { if (Control == 255 && Player.Online) { Player.CurrentNpcId = 0; } if (Player.CurrentNpcId == 0) { return; } var id = Player.CurrentNpcId; if (npcIdoverride != 0) { id = npcIdoverride; } switch (id) { case 1337: { switch (Control) { case 255: Player.CurrentNpcId = 1337; using (var packet = new NpcDialog(10)) { packet .Text("Select Char") .Link("Next", 1) .Link("Select", 10) .Link("New", 100) .Finish(); Player.Send(packet); } break; case 1: var players = SelectorSystem.GetPlayersFor(Player.AccountId).ToList(); var index = players.IndexOf(Player); if (index + 1 > players.Count - 1) { index = 0; } else { index++; } Player = SelectorSystem.SwapCharacter(Player, players[index]); Player.Send(LegacyPackets.CharacterInformation(Player)); Player.Send(MsgAction.MapShowPacket(Player)); Player.AddStatusEffect(StatusEffect.Frozen); ScreenSystem.Create(Player); ScreenSystem.Update(Player); break; case 10: Player.RemoveStatusEffect(StatusEffect.Frozen); ScreenSystem.Create(Player); Player.AddSpawnProtection(); Player.IncrementXp(); foreach (var kvp in Player.Skills) { Player.Send(MsgSkill.Create(kvp.Value)); } foreach (var prof in Player.Profs) { Player.Send(MsgProf.Create(prof.Value)); } EntityLogic.Recalculate(Player); Player.CurrentHp = Player.MaximumHp; Player.CurrentMp = Player.MaximumMp; GameWorld.Maps[Player.MapId].Enter(Player); Player.Send(MsgAction.Create(Player, (int)Player.PkMode, MsgActionType.ChangePkMode)); Player.Send(MsgUpdate.Create(Player, Player.Stamina, MsgUpdateType.Stamina)); Player.Send(MsgUpdate.Create(Player, Player.Class, MsgUpdateType.Class)); Player.Online = true; if (Player.HasFlag(StatusEffect.SuperMan)) { BuffSystem.Create(Player); BuffSystem.AddBuff(Player, new Buff(Player, SkillId.Superman, TimeSpan.FromSeconds(10))); } if (Player.HasFlag(StatusEffect.Cyclone)) { BuffSystem.Create(Player); BuffSystem.AddBuff(Player, new Buff(Player, SkillId.Cyclone, TimeSpan.FromSeconds(10))); } if (Player.PkPoints > 1) { Player.PkPJob = new Job(TimeSpan.FromSeconds(15), () => Player.PkPoints--); YiScheduler.Instance.Do(Player.PkPJob); } ScreenSystem.Send(Player, MsgAction.Create(Player, Player.UniqueId, MsgActionType.EntityRemove)); ScreenSystem.Send(Player, MsgSpawn.Create(Player)); break; case 100: SelectorSystem.CreateNewCharacterFor(Player.AccountId); Player.Disconnect(); break; } break; } default: { if (ScriptEngine.Scripts.TryGetValue(ScriptType.NpcDialog, out var sc) && !sc.Execute(Player, id, Control)) { Message.SendTo(Player, $"[{Player.CurrentNpcId}] Npc has no script.", MsgTextType.Talk); } break; } } }
public override IEnumerator StartMyActivationCoroutine() { Ability twinStrike = mySpellBook.GetAbilityByName("Twin Strike"); Ability move = mySpellBook.GetAbilityByName("Move"); Ability dash = mySpellBook.GetAbilityByName("Dash"); Ability shank = mySpellBook.GetAbilityByName("Shank"); ActionStart: SetTargetDefender(EntityLogic.GetBestTarget(this, false, true)); while (EventManager.Instance.gameOverEventStarted) { yield return(null); } if (EntityLogic.IsAbleToTakeActions(this) == false) { LivingEntityManager.Instance.EndEntityActivation(this); } // Shank best target else if (EntityLogic.IsTargetInRange(this, myCurrentTarget, currentMeleeRange) && EntityLogic.IsAbilityUseable(this, shank)) { Action action = AbilityLogic.Instance.PerformShank(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Twin Strike best target else if (EntityLogic.IsTargetInRange(this, myCurrentTarget, currentMeleeRange) && EntityLogic.IsAbilityUseable(this, twinStrike, myCurrentTarget)) { Action action = AbilityLogic.Instance.PerformTwinStrike(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Shank closest target else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, true), currentMeleeRange) && EntityLogic.IsAbilityUseable(this, shank, EntityLogic.GetBestTarget(this, true))) { SetTargetDefender(EntityLogic.GetBestTarget(this, true)); Action action = AbilityLogic.Instance.PerformShank(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Strike closest target else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, true), currentMeleeRange) && EntityLogic.IsAbilityUseable(this, twinStrike, EntityLogic.GetBestTarget(this, true))) { SetTargetDefender(EntityLogic.GetBestTarget(this, true)); Action action = AbilityLogic.Instance.PerformTwinStrike(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Dash else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, false, true), currentMeleeRange) == false && EntityLogic.IsAbleToMove(this) && // dont dash if already in melee (this would trigger a free strike) EntityLogic.GetAllEnemiesWithinRange(this, currentMeleeRange).Count == 0 && EntityLogic.IsAbilityUseable(this, dash) && EntityLogic.CanPerformAbilityTwoAfterAbilityOne(dash, twinStrike, this) && EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, EntityLogic.GetBestTarget(this, false, true), currentMeleeRange, dash.abilityPrimaryValue + EntityLogic.GetTotalMobility(this)) != null ) { SetTargetDefender(EntityLogic.GetBestTarget(this, false, true)); Tile destination = EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, myCurrentTarget, currentMeleeRange, dash.abilityPrimaryValue + EntityLogic.GetTotalMobility(this)); Action movementAction = AbilityLogic.Instance.PerformDash(this, destination); yield return(new WaitUntil(() => movementAction.ActionResolved() == true)); // small delay here in order to seperate the two actions a bit. yield return(new WaitForSeconds(1f)); goto ActionStart; } // Move else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, false, true), currentMeleeRange) == false && EntityLogic.IsAbleToMove(this) && EntityLogic.IsAbilityUseable(this, move) && EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, myCurrentTarget, currentMeleeRange, EntityLogic.GetTotalMobility(this)) != null && EntityLogic.CanPerformAbilityTwoAfterAbilityOne(move, twinStrike, this) ) { SetTargetDefender(EntityLogic.GetBestTarget(this, false, true)); Tile destination = EntityLogic.GetBestValidMoveLocationBetweenMeAndTarget(this, myCurrentTarget, currentMeleeRange, EntityLogic.GetTotalMobility(this)); Action movementAction = AbilityLogic.Instance.PerformMove(this, destination); yield return(new WaitUntil(() => movementAction.ActionResolved() == true)); // small delay here in order to seperate the two actions a bit. yield return(new WaitForSeconds(1f)); goto ActionStart; } // If, for whatever reason, we cant attack or move towards the weakest enemy, attack the nearest enemy // Shank closest target else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, true), currentMeleeRange) && EntityLogic.IsAbilityUseable(this, shank, EntityLogic.GetBestTarget(this, true))) { SetTargetDefender(EntityLogic.GetBestTarget(this, true)); Action action = AbilityLogic.Instance.PerformShank(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Twin Strike else if (EntityLogic.IsTargetInRange(this, EntityLogic.GetBestTarget(this, true), currentMeleeRange) && EntityLogic.IsAbilityUseable(this, twinStrike, EntityLogic.GetBestTarget(this, true))) { SetTargetDefender(EntityLogic.GetBestTarget(this, true)); Action action = AbilityLogic.Instance.PerformTwinStrike(this, myCurrentTarget); yield return(new WaitUntil(() => action.ActionResolved() == true)); yield return(new WaitForSeconds(1f)); goto ActionStart; } // Can't do anything more, end activation else { LivingEntityManager.Instance.EndEntityActivation(this); } }
protected override void OnAttached(EntityLogic childEntity, Transform parentTransform, object userData) { base.OnAttached(childEntity, parentTransform, userData); }
private static void EndTransform(Player player, ref MsgAction packet) { player.DelTransform(); EntityLogic.Recalculate(player); player.Send(packet); }
protected override void OnDetached(EntityLogic childEntity, object userData) { base.OnDetached(childEntity, userData); }
protected override void OnAttachTo(EntityLogic parentEntity, Transform parentTransform, object userData) { base.OnAttachTo(parentEntity, parentTransform, userData); transform.localPosition = entityDataRadiusVisualiser.Position + new Vector3(0, radiusVisualizerHeight, 0); }