} case 6001://toxicfog { if (CanUseSpell(spell, attacker.Owner)) { PrepareSpell(spell, attacker.Owner); SpellUse suse = new SpellUse(true); suse.Attacker = attacker.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; suse.X = X; suse.Y = Y; if (Kernel.GetDistance(attacker.X, attacker.Y, X, Y) <= spell.Distance) { foreach (Interfaces.IMapObject _obj in attacker.Owner.Screen.Objects) { if (_obj.MapObjType == MapObjectType.Player || _obj.MapObjType == MapObjectType.Monster) { attacked = _obj as Entity; if (attacked.MapObjType == MapObjectType.Monster) if (attacked.MonsterInfo.Boss) continue; if (Kernel.GetDistance(X, Y, attacked.X, attacked.Y) <= spell.Range) { if (CanAttack(attacker, attacked, spell, attack.AttackType == Attack.Melee)) { int potDifference = attacker.BattlePower - attacked.BattlePower; int rate = spell.Percent + potDifference - 20; if (Kernel.Rate(rate)) { attacked.ToxicFogStamp = Time64.Now; attacked.ToxicFogLeft = 7; attacked.ToxicFogPercent = spell.PowerPercent; attacked.AddFlag(Update.Flags.Poisoned); suse.AddTarget(attacked.UID, 1, null); } else { suse.AddTarget(attacked.UID, 0, null); suse.Targets[attacked.UID].Hit = false; } } } } } } else { attacker.AttackPacket = null; } attacker.Owner.SendScreen(suse, true); } break; }
case Enums.ItemEffect.Poison:
case Enums.ItemEffect.Poison: { if (attacked != null) { if (Constants.PKForbiddenMaps.Contains(client.Entity.MapID)) return; if (client.Map.BaseID == 700) return; if (attacked.UID == client.Entity.UID) return; if (attacked.ToxicFogLeft > 0) return; SpellUse spellUse = new SpellUse(true); spellUse.SpellID = 5040; spellUse.Attacker = attacked.UID; spellUse.SpellLevel = 9; spellUse.X = attacked.X; spellUse.Y = attacked.Y; spellUse.AddTarget(attacked, 0, null); spellUse.Targets[attacked.UID].Hit = true; attacked.ToxicFogStamp = Time32.Now; attacked.ToxicFogLeft = 10; attacked.ToxicFogPercent = 0.05F; client.SendScreen(spellUse, true); } break; } } } } } }
#region ManiacDance case 12700: { if (attacker.ContainsFlag(Update.Flags.XPList)) { attacker.RemoveFlag(Update.Flags.XPList); SpellUse suse = new SpellUse(true); suse.Attacker = attacker.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; suse.X = X; suse.Y = Y; attacker.ManiacDanceStamp = Time32.Now; attacker.AddFlag3(Update.Flags3.WaniacDance); attacker.Owner.SendScreen(suse, true); } break; } #endregion
#region ThunderCloud[Chaser] case 12840: { if (CanUseSpell(spell, attacker.Owner)) { attacker.GreenEffect = 10; PrepareSpell(spell, attacker.Owner); SpellUse suse = new SpellUse(true); suse.Attacker = attacker.UID; suse.Attacker1 = attacker.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; var cl = new WindWalker.ThunderCloud(attacker.Owner, attack.X, attack.Y); suse.AddTarget(cl.UID, 0, null); attacker.Owner.SendScreen(suse, true); } break; } #endregion
#region ScurvyBomb case 11040: { if (Time32.Now < attacker.SpellStamp.AddMilliseconds(200))//1000 { attacker.AttackPacket = null; return; } else if (CanUseSpell(spell, attacker.Owner)) { PrepareSpell(spell, attacker.Owner); SpellUse suse = new SpellUse(true); suse.Attacker = attacker.UID; suse.SpellID = spell.ID; suse.SpellLevel = spell.Level; suse.X = X; suse.Y = Y; KhaledMohamed.Network.GamePackets.SpellUse.DamageClass tar = new SpellUse.DamageClass(); foreach (var t in attacker.Owner.Screen.Objects) { if (t == null) continue; if (t.MapObjType == MapObjectType.Entity || t.MapObjType == MapObjectType.Monster) { var target = t as Entity; int rate = 20; if (attacker.BattlePower == target.BattlePower) rate = 50; if (attacker.BattlePower > target.BattlePower) rate = 80; else rate = 100 - ((target.BattlePower - attacker.BattlePower) * 2); rate = Math.Max(20, rate); if (Kernel.GetDistance(X, Y, target.X, target.Y) <= spell.Range && MyMath.Success((double)rate)) { if (CanAttack(attacker, target, spell, false)) { tar.Damage = Calculate.Ranged(attacker, target, spell, ref attack); if (t.MapObjType == MapObjectType.Monster) tar.Damage = tar.Damage * 10; if (t.MapObjType == MapObjectType.Entity) tar.Damage = tar.Damage / 100; ReceiveAttack(attacker, target, attack, ref tar.Damage, spell); target.AddFlag2(KhaledMohamed.Network.GamePackets.Update.Flags2.DefensiveStance); attacker.SpellStamp = Time32.Now; target.FatigueStamp = Time32.Now; target.FatigueSecs = spell.Time; suse.AddTarget(target, tar, attack); } } } } if (attacker.EntityFlag == EntityFlag.Entity) attacker.Owner.SendScreen(suse, true); } break; } #endregion