コード例 #1
0
        public bool Update()
        {
            switch (nType)
            {
            case AffectedAreaType.UserSkill:
                foreach (var mob in Field.Mobs)
                {
                    if (!rcArea.PointInRect(mob.Position.CurrentXY))
                    {
                        continue;
                    }

                    mob.TryApplySkillDamageStatus
                        (Field.Users[dwOwnerId], nSkillID, nSLV, 0);
                }
                break;

            case AffectedAreaType.BlessedMist:                     // TODO fix the recovery numbers, its incorrect rn
            {
                var rate = MasterManager.SkillTemplates[nSkillID].X(nSLV) * 0.01;
                foreach (var user in Field.Users)
                {
                    if (!rcArea.PointInRect(user.Position.CurrentXY))
                    {
                        continue;
                    }

                    user.Modify.Heal(0, (int)(user.BasicStats.nMMP * rate));

                    var effect = new UserEffectPacket(UserEffect.SkillAffected)
                    {
                        nSkillID = nSkillID,
                        nSLV     = nSLV,
                    };

                    effect.BroadcastEffect(user);
                }
            }
            break;

            case AffectedAreaType.MobSkill:
                foreach (var user in Field.Users)
                {
                    if (!rcArea.PointInRect(user.Position.CurrentXY))
                    {
                        continue;
                    }

                    var toAdd = new Debuff(nSkillID, nSLV);
                    toAdd.StatType = SecondaryStatFlag.Poison;
                    toAdd.Generate();
                    user.Buffs.Remove(toAdd.nBuffID);
                    user.Buffs.Add(toAdd);
                }
                break;
            }

            return(StartTime.MillisSinceStart() >= Duration);
        }