コード例 #1
0
        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);
        }
コード例 #2
0
ファイル: MobSkill.cs プロジェクト: Bia10/DestinyFork
        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);
            }
        }