public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time) { if (Buff.RequireBuffId > 0 && !target.Effects.CheckBuff(Buff.RequireBuffId)) { return; // TODO send error? } if (target.Effects.CheckBuffImmune(Buff.Id)) { return; // TODO send error of immune? } target.Effects.AddEffect(new Effect(target, caster, casterObj, this, skill, time)); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("PutDownBackpackEffect"); Character character = (Character)caster; if (character == null) { return; } SkillItem packItem = (SkillItem)casterObj; if (packItem == null) { return; } Item item = character.Inventory.GetItem(packItem.ItemId); if (item == null) { return; } InventoryHelper.RemoveItemAndUpdateClient(character, item, 1); // Spawn doodad var doodadSpawner = new DoodadSpawner(); doodadSpawner.Id = 0; doodadSpawner.UnitId = BackpackDoodadId; doodadSpawner.Position = character.Position.Clone(); doodadSpawner.Spawn(0); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("DispelEffect"); if (BuffTagId > 0 && !target.Effects.CheckBuffs(SkillManager.Instance.GetBuffsByTagId(BuffTagId))) { return; } if (DispelCount > 0) { target.Effects.RemoveBuffs(BuffKind.Good, DispelCount); //TODO .... } if (CureCount > 0) { target.Effects.RemoveBuffs(BuffKind.Bad, CureCount); } }
public void Execute(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time, int Value1, int Value2, int Value3, int Value4) { Character character = (Character)caster; if (character == null) { return; } SkillItem scroll = (SkillItem)casterObj; if (scroll == null) { return; } SkillCastUnk3Target itemTarget = (SkillCastUnk3Target)targetObj; if (itemTarget == null) { return; } var useCharm = false; SkillObjectItemGradeEnchantingSupport charm = (SkillObjectItemGradeEnchantingSupport)skillObject; if (charm != null && charm.SupportItemId != 0) { useCharm = true; } bool isLucky = Value1 != 0; Item item = character.Inventory.GetItem(itemTarget.Id); var initialGrade = item.Grade; var gradeTemplate = ItemManager.Instance.GetGradeTemplate(item.Grade); var tasks = new List <ItemTask>(); int cost = GoldCost(gradeTemplate, item, Value3); if (cost == -1) { return; } if (character.Money < cost) { return; } character.Money -= cost; tasks.Add(new MoneyChange(-cost)); if (!character.Inventory.CheckItems(scroll.ItemTemplateId, 1)) { return; } Item scrollItem = character.Inventory.GetItem(scroll.ItemId); tasks.Add(InventoryHelper.GetTaskAndRemoveItem(character, scrollItem, 1)); ItemGradeEnchantingSupport charmInfo = null; if (useCharm) { Item charmItem = character.Inventory.GetItem(charm.SupportItemId); if (charmItem == null) { return; } charmInfo = ItemManager.Instance.GetItemGradEnchantingSupportByItemId(charmItem.TemplateId); if (charmInfo.RequireGradeMin != -1 && item.Grade < charmInfo.RequireGradeMin) { return; } if (charmInfo.RequireGradeMax != -1 && item.Grade > charmInfo.RequireGradeMax) { return; } tasks.Add(InventoryHelper.GetTaskAndRemoveItem(character, charmItem, 1)); } var result = RollRegrade(gradeTemplate, item, isLucky, useCharm, charmInfo); if (result == GradeEnchantResult.Break) { tasks.Add(InventoryHelper.GetTaskAndRemoveItem(character, item, 1)); } else { // TODO : make sure grade updates with itemupdate tasks.Add(new ItemGradeChange(item, item.Grade)); } character.SendPacket(new SCGradeEnchantResultPacket((byte)result, item, initialGrade, item.Grade)); character.SendPacket(new SCItemTaskSuccessPacket(ItemTaskType.GradeEnchant, tasks, new List <ulong>())); if (item.Grade >= 8 && (result == GradeEnchantResult.Success || result == GradeEnchantResult.GreatSuccess)) { WorldManager.Instance.BroadcastPacketToServer(new SCGradeEnchantBroadcastPacket(character.Name, (byte)result, item, initialGrade, item.Grade)); } }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("DamageEffect"); //if (!(target is Unit)) //{ // return; //} var trg = (Unit)target; var min = 0; var max = 0; if (UseFixedDamage) { min += FixedMin; max += FixedMax; } var unk = 0f; var unk2 = 1f; var skillLevel = 1; if (skill != null) { skillLevel = (skill.Level - 1) * skill.Template.LevelStep + skill.Template.AbilityLevel; if (skillLevel >= skill.Template.AbilityLevel) { unk = 0.015f * (skillLevel - skill.Template.AbilityLevel + 1); } unk2 = (1 + unk) * 1.3f; } if (UseLevelDamage) { var levelMd = (unk + 1) * LevelMd; min += (int)(caster.LevelDps * levelMd + 0.5f); max += (int)((((skillLevel - 1) * 0.020408163f * (LevelVaEnd - LevelVaStart) + LevelVaStart) * 0.0099999998f + 1f) * caster.LevelDps * levelMd + 0.5f); } var dpsInc = 0f; if (DamageType == DamageType.Melee) { dpsInc = caster.DpsInc; } else if (DamageType == DamageType.Magic) { dpsInc = caster.MDps + caster.MDpsInc; } else if (DamageType == DamageType.Ranged) { dpsInc = caster.RangedDpsInc; } var dps = 0f; if (UseMainhandWeapon) { dps += caster.Dps; } else if (UseOffhandWeapon) { dps += caster.OffhandDps; } else if (UseRangedWeapon) { dps += caster.RangedDps; } min += (int)((DpsMultiplier * dps * 0.001f + DpsIncMultiplier * dpsInc * 0.001f) * unk2 + 0.5f); max += (int)((DpsMultiplier * dps * 0.001f + DpsIncMultiplier * dpsInc * 0.001f) * unk2 + 0.5f); min = (int)(min * Multiplier); max = (int)(max * Multiplier); var value = Rand.Next(min, max); trg.ReduceCurrentHp(caster, value); trg.BroadcastPacket(new SCUnitDamagedPacket(castObj, casterObj, caster.ObjId, target.ObjId, value), true); if (trg is Npc npc && npc.CurrentTarget != caster) { npc.BroadcastPacket(new SCAiAggroPacket(npc.ObjId, 1, caster.ObjId), true); if (npc.Patrol == null || npc.Patrol.PauseAuto(npc)) { npc.CurrentTarget = caster; npc.BroadcastPacket(new SCCombatEngagedPacket(caster.ObjId), true); // caster npc.BroadcastPacket(new SCCombatEngagedPacket(npc.ObjId), true); // target npc.BroadcastPacket(new SCCombatFirstHitPacket(npc.ObjId, caster.ObjId, 0), true); npc.BroadcastPacket(new SCAggroTargetChangedPacket(npc.ObjId, caster.ObjId), true); npc.BroadcastPacket(new SCTargetChangedPacket(npc.ObjId, caster.ObjId), true); TaskManager.Instance.Schedule(new UnitMove(new Track(), npc), TimeSpan.FromMilliseconds(100)); } } }
public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time) { _log.Debug("PhysicalExplosionEffect"); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("KillNpcWithoutCorpseEffect"); var npcs = WorldManager.Instance.GetAround <Npc>(target, Radius); foreach (var npc in npcs) { if (npc.TemplateId != NpcId) { continue; } npc.Effects.RemoveAllEffects(); npc.Delete(); } }
public abstract void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time);
public abstract void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time);
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("InteractionEffect, {0}", WorldInteraction); var classType = Type.GetType("AAEmu.Game.Models.Game.World.Interactions." + WorldInteraction); if (classType == null) { _log.Error("Unknown world interaction: {0}", WorldInteraction); return; } var action = (IWorldInteraction)Activator.CreateInstance(classType); action.Execute(caster, casterObj, target, targetObj, skill.Template.Id); }
private CastAction getCastAction(bool actingPlayer) { CastAction action; if (actingPlayer) { if (autoPass) { action = new CastAction(); } else { gameInterface.setContext("Your turn to act.", Choice.Pass); action = gainPriority(); gameInterface.clearContext(); } gameInterface.sendCastAction(action); } else { gameInterface.setContext("Opponents turn to act"); action = gameInterface.demandCastAction(); gameInterface.clearContext(); } return action; }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("SkillControllerTemplate"); }
public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time) { _log.Debug("AcceptQuestEffect"); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("RestoreManaEffect"); if (!(target is Unit)) { return; } var trg = (Unit)target; var min = 0; var max = 0; if (UseFixedValue) { min += FixedMin; max += FixedMax; } var unk = 0f; var unk2 = 1f; var skillLevel = 1; if (skill != null) { skillLevel = (skill.Level - 1) * skill.Template.LevelStep + skill.Template.AbilityLevel; if (skillLevel >= skill.Template.AbilityLevel) { unk = 0.15f * (skillLevel - skill.Template.AbilityLevel + 1); } unk2 = (1 + unk) * 1.3f; } if (UseLevelValue) { var levelMd = (unk + 1) * LevelMd; min += (int)(caster.LevelDps * levelMd + 0.5f); max += (int)((((skillLevel - 1) * 0.020408163f * (LevelVaEnd - LevelVaStart) + LevelVaStart) * 0.0099999998f + 1f) * caster.LevelDps * levelMd + 0.5f); } // TODO ... // min += (int)((caster.MDps + caster.MDpsInc) * 0.001f * unk2 + 0.5f); // max += (int)((caster.MDps + caster.MDpsInc) * 0.001f * unk2 + 0.5f); var value = Rand.Next(min, max); trg.BroadcastPacket(new SCUnitHealedPacket(castObj, casterObj, trg.ObjId, 1, value), true); trg.Mp += value; trg.Mp = Math.Min(trg.Mp, trg.MaxMp); trg.BroadcastPacket(new SCUnitPointsPacket(trg.ObjId, trg.Hp, trg.Mp), true); }
public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time) { _log.Debug("PutDownBackpackEffect"); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { Character character = (Character)caster; character.Craft.EndCraft(); _log.Debug("CraftEffect"); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("RepairSlaveEffect"); }
public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj, Skill skill, DateTime time) { _log.Debug("FlyingStateChangeEffect"); }
public void sendCastAction(CastAction a) { sendAction(a); }
public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj, Skill skill, SkillObject skillObject, DateTime time) { _log.Debug("DamageEffect"); if (!(target is Unit)) { return; } var trg = (Unit)target; var min = 0; var max = 0; if (UseFixedDamage) { min += FixedMin; max += FixedMax; } var unk = 0f; var unk2 = 1f; var skillLevel = 1; if (skill != null) { skillLevel = (skill.Level - 1) * skill.Template.LevelStep + skill.Template.AbilityLevel; if (skillLevel >= skill.Template.AbilityLevel) { unk = 0.015f * (skillLevel - skill.Template.AbilityLevel + 1); } unk2 = (1 + unk) * 1.3f; } if (UseLevelDamage) { var levelMd = (unk + 1) * LevelMd; min += (int)(caster.LevelDps * levelMd + 0.5f); max += (int)((((skillLevel - 1) * 0.020408163f * (LevelVaEnd - LevelVaStart) + LevelVaStart) * 0.0099999998f + 1f) * caster.LevelDps * levelMd + 0.5f); } var dpsInc = 0f; if (DamageType == DamageType.Melee) { dpsInc = caster.DpsInc; } else if (DamageType == DamageType.Magic) { dpsInc = caster.MDps + caster.MDpsInc; } else if (DamageType == DamageType.Ranged) { dpsInc = caster.RangedDpsInc; } var dps = 0f; if (UseMainhandWeapon) { dps += caster.Dps; } else if (UseOffhandWeapon) { dps += caster.OffhandDps; } else if (UseRangedWeapon) { dps += caster.RangedDps; } min += (int)((DpsMultiplier * dps * 0.001f + DpsIncMultiplier * dpsInc * 0.001f) * unk2 + 0.5f); max += (int)((DpsMultiplier * dps * 0.001f + DpsIncMultiplier * dpsInc * 0.001f) * unk2 + 0.5f); min = (int)(min * Multiplier); max = (int)(max * Multiplier); var value = Rand.Next(min, max); trg.ReduceCurrentHp(caster, value); trg.BroadcastPacket(new SCUnitDamagedPacket(castObj, casterObj, caster.ObjId, target.ObjId, value), true); }