public void Buff(MobConstants.MobStatus buff, short value, Skill skill) { using (Packet oPacket = new Packet(ServerOperationCode.MobStatSet)) { oPacket .WriteInt(ObjectID) .WriteLong() .WriteInt() .WriteInt((int)buff) .WriteShort(value) .WriteShort((short)skill.MapleID) .WriteShort(skill.CurrentLevel) .WriteShort(-1) .WriteShort(0) // Delay .WriteInt(); Map.Broadcast(oPacket); } Delay.Execute(() => { using (Packet Packet = new Packet(ServerOperationCode.MobStatReset)) { Packet .WriteInt(ObjectID) .WriteLong() .WriteInt() .WriteInt((int)buff) .WriteInt(); Map.Broadcast(Packet); } Buffs.Remove(buff); }, skill.BuffTime * 1000); }
public void Cast(Mob caster) { MobConstants.MobStatus status = MobConstants.MobStatus.None; CharacterConstants.CharacterDisease disease = CharacterConstants.CharacterDisease.None; bool heal = false; //bool banish = false; bool dispel = false; switch ((MobConstants.MobSkillName)MapleID) { case MobConstants.MobSkillName.WeaponAttackUp: case MobConstants.MobSkillName.WeaponAttackUpAreaOfEffect: case MobConstants.MobSkillName.WeaponAttackUpMonsterCarnival: status = MobConstants.MobStatus.WeaponAttackUp; break; case MobConstants.MobSkillName.MagicAttackUp: case MobConstants.MobSkillName.MagicAttackUpAreaOfEffect: case MobConstants.MobSkillName.MagicAttackUpMonsterCarnival: status = MobConstants.MobStatus.MagicAttackUp; break; case MobConstants.MobSkillName.WeaponDefenseUp: case MobConstants.MobSkillName.WeaponDefenseUpAreaOfEffect: case MobConstants.MobSkillName.WeaponDefenseUpMonsterCarnival: status = MobConstants.MobStatus.WeaponDefenseUp; break; case MobConstants.MobSkillName.MagicDefenseUp: case MobConstants.MobSkillName.MagicDefenseUpAreaOfEffect: case MobConstants.MobSkillName.MagicDefenseUpMonsterCarnival: status = MobConstants.MobStatus.MagicDefenseUp; break; case MobConstants.MobSkillName.HealAreaOfEffect: heal = true; break; case MobConstants.MobSkillName.Seal: disease = CharacterConstants.CharacterDisease.Sealed; break; case MobConstants.MobSkillName.Darkness: disease = CharacterConstants.CharacterDisease.Darkness; break; case MobConstants.MobSkillName.Weakness: disease = CharacterConstants.CharacterDisease.Weaken; break; case MobConstants.MobSkillName.Stun: disease = CharacterConstants.CharacterDisease.Stun; break; case MobConstants.MobSkillName.Curse: disease = CharacterConstants.CharacterDisease.Curse; break; case MobConstants.MobSkillName.Poison: disease = CharacterConstants.CharacterDisease.Poison; break; case MobConstants.MobSkillName.Slow: disease = CharacterConstants.CharacterDisease.Slow; break; case MobConstants.MobSkillName.Dispel: dispel = true; break; case MobConstants.MobSkillName.Seduce: disease = CharacterConstants.CharacterDisease.Seduce; break; case MobConstants.MobSkillName.SendToTown: // TODO: Send to town. break; case MobConstants.MobSkillName.PoisonMist: // TODO: Spawn poison mist. break; case MobConstants.MobSkillName.Confuse: disease = CharacterConstants.CharacterDisease.Confuse; break; case MobConstants.MobSkillName.Zombify: // TODO: Zombify. break; case MobConstants.MobSkillName.WeaponImmunity: status = MobConstants.MobStatus.WeaponImmunity; break; case MobConstants.MobSkillName.MagicImmunity: status = MobConstants.MobStatus.MagicImmunity; break; case MobConstants.MobSkillName.WeaponDamageReflect: case MobConstants.MobSkillName.MagicDamageReflect: case MobConstants.MobSkillName.AnyDamageReflect: // TODO: Reflect. break; case MobConstants.MobSkillName.AccuracyUpMonsterCarnival: case MobConstants.MobSkillName.AvoidabilityUpMonsterCarnival: case MobConstants.MobSkillName.SpeedUpMonsterCarnival: // TODO: Monster carnival buffs. break; case MobConstants.MobSkillName.Summon: foreach (int mobId in Summons[Level]) { Mob summon = new Mob(mobId) { Position = caster.Position, SpawnEffect = SummonEffect }; caster.Map.Mobs.Add(summon); } break; case MobConstants.MobSkillName.SpeedUpAreaOfEffect: break; case MobConstants.MobSkillName.ArmorSkill: break; case MobConstants.MobSkillName.SealMonsterCarnival: break; default: throw new ArgumentOutOfRangeException(); } foreach (Mob affectedMob in GetAffectedMobs(caster)) { if (heal) { affectedMob.Heal((uint)ParameterA, ParameterB); } if (status != MobConstants.MobStatus.None && !affectedMob.Buffs.Contains(status)) { affectedMob.Buff(status, (short)ParameterA, this); } } foreach (Character affectedCharacter in GetAffectedCharacters(caster)) { if (dispel) { //affectedCharacter.Dispel(); } /* * if (banish) * { * affectedCharacter.ChangeMap(affectedCharacter.Map.ReturnMapID); * } */ if (disease != CharacterConstants.CharacterDisease.None) { using (Packet oPacket = new Packet(ServerOperationCode.TemporaryStatSet)) { oPacket .WriteLong() .WriteLong((long)disease); oPacket .WriteShort((short)ParameterA) .WriteShort(MapleID) .WriteShort(Level) .WriteInt(Duration); oPacket .WriteShort() .WriteShort(900) .WriteByte(1); affectedCharacter.Client.Send(oPacket); } //map packet. } } caster.Mana -= (uint)MpCost; if (caster.Cooldowns.ContainsKey(this)) { caster.Cooldowns[this] = DateTime.Now; } else { caster.Cooldowns.Add(this, DateTime.Now); } }