Exemplo n.º 1
0
 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));
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 4
0
        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));
                }
            }
        }
Exemplo n.º 6
0
 public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj,
                            Skill skill, DateTime time)
 {
     _log.Debug("PhysicalExplosionEffect");
 }
Exemplo n.º 7
0
        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();
            }
        }
Exemplo n.º 8
0
 public abstract void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj,
                            Skill skill, SkillObject skillObject, DateTime time);
Exemplo n.º 9
0
 public abstract void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj,
                            Skill skill, DateTime time);
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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;
        }
Exemplo n.º 12
0
 public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj,
                            Skill skill, SkillObject skillObject, DateTime time)
 {
     _log.Debug("SkillControllerTemplate");
 }
Exemplo n.º 13
0
 public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj,
                            Skill skill, DateTime time)
 {
     _log.Debug("AcceptQuestEffect");
 }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 15
0
 public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj,
                            Skill skill, DateTime time)
 {
     _log.Debug("PutDownBackpackEffect");
 }
Exemplo n.º 16
0
        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");
        }
Exemplo n.º 17
0
 public override void Apply(Unit caster, SkillCaster casterObj, BaseUnit target, SkillCastTarget targetObj, CastAction castObj,
                            Skill skill, SkillObject skillObject, DateTime time)
 {
     _log.Debug("RepairSlaveEffect");
 }
Exemplo n.º 18
0
 public override void Apply(Unit caster, SkillAction casterObj, BaseUnit target, SkillAction targetObj, CastAction castObj,
                            Skill skill, DateTime time)
 {
     _log.Debug("FlyingStateChangeEffect");
 }
Exemplo n.º 19
0
 public void sendCastAction(CastAction a)
 {
     sendAction(a);
 }
Exemplo n.º 20
0
        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);
        }