GetSkill() публичный статический Метод

public static GetSkill ( uint skillid ) : Skill
skillid uint
Результат Skill
Пример #1
0
        /// <summary>
        /// Check if the player has enough sp to cast skill, and decrease SP by the required amount
        /// </summary>
        /// <param name="pc">Player</param>
        /// <param name="skillid">Skill ID</param>
        /// <returns></returns>
        public static bool CheckSkillSP(ActorPC pc, SkillIDs skillid)
        {
            ActorEventHandlers.PC_EventHandler eh = (ActorEventHandlers.PC_EventHandler)pc.e;
            Skill skill = SkillFactory.GetSkill((uint)skillid);

            if (pc.SP < skill.sp)
            {
                return(false);
            }
            pc.SP -= (ushort)skill.sp;
            eh.C.SendCharStatus(0);
            return(true);
        }
Пример #2
0
 /// <summary>
 /// Increase Players LP
 /// </summary>
 /// <param name="pc">Player</param>
 /// <param name="skillID">ID of the skill that caused the increasement of LP</param>
 /// <param name="point">Amount</param>
 public static void GainLP(ActorPC pc, SkillIDs skillID, byte point)
 {
     ActorEventHandlers.PC_EventHandler eh = (ActorEventHandlers.PC_EventHandler)pc.e;
     pc.LP += point;
     if (pc.LP > 5)
     {
         pc.LP = 5;
     }
     else
     {
         eh.C.SendSkillEffect(SkillFactory.GetSkill((uint)skillID).addition, SkillEffects.LP, point);
     }
     eh.C.SendCharStatus(0);
 }
Пример #3
0
 /// <summary>
 /// Add EXP to a skill of a player
 /// </summary>
 /// <param name="pc">Player</param>
 /// <param name="skillid">Skill ID</param>
 /// <param name="exp">Maximum of exp to add</param>
 public static void AddSkillEXP(ref ActorPC pc, uint skillid, uint exp)
 {
     if (pc.BattleSkills.ContainsKey(skillid))
     {
         SkillInfo info = pc.BattleSkills[skillid];
         info.exp += (uint)Global.Random.Next(0, (int)exp);
         if (info.exp > SkillFactory.GetSkill(skillid).maxsxp)
         {
             info.exp = (uint)SkillFactory.GetSkill(skillid).maxsxp;
         }
         MapServer.charDB.UpdateSkill(pc, SkillType.Battle, info);
         ActorEventHandlers.PC_EventHandler eh = (ActorEventHandlers.PC_EventHandler)pc.e;
         eh.C.UpdateSkillEXP(skillid, info.exp);
     }
 }
Пример #4
0
        public static void CastPassivSkill(ref ActorPC pc)
        {
            SkillCommand command;
            byte         skilltype;
            Actor        target = (Actor)pc;

            CalcBattleStatus(ref target);
            foreach (uint id in pc.BattleSkills.Keys)
            {
                skilltype = SkillFactory.GetSkill(id).skilltype;
                if (skilltype != 2)
                {
                    continue;
                }

                if (SkillCommands.ContainsKey((SkillIDs)id) == true)
                {
                    Map.SkillArgs args = new Map.SkillArgs(skilltype, 0, id, 0, 0);
                    command = SkillCommands[(SkillIDs)id];
                    command.Invoke(ref target, ref target, ref args);
                }
            }
        }
Пример #5
0
        /// <summary>
        /// Reset skills of a PC on job change.
        /// Move all skills into Inactive Skill table and get all skills in inactive skill table for current job
        /// </summary>
        /// <param name="pc">target PC</param>
        public static void SkillResetOnJobChange(ActorPC pc)
        {
            List <uint> tmptable = new List <uint>();
            byte        job      = (byte)(pc.job - 1);

            foreach (uint i in pc.BattleSkills.Keys)
            {
                if (SkillFactory.GetSkill(i).reqjob[job] == 255 || SkillFactory.GetSkill(i).reqjob[job] == 0)
                {
                    tmptable.Add(i);
                }
            }
            foreach (uint i in tmptable)
            {
                if (!pc.InactiveSkills.ContainsKey(i))
                {
                    pc.InactiveSkills.Add(i, pc.BattleSkills[i]);
                }
                MapServer.charDB.UpdateSkill(pc, SkillType.Inactive, pc.BattleSkills[i]);
                SendDeleteSkill(pc, i);
                pc.BattleSkills.Remove(i);
            }
            tmptable.Clear();
            foreach (uint i in pc.SpecialSkills.Keys)
            {
                tmptable.Add(i);
            }
            foreach (uint i in tmptable)
            {
                if (!pc.InactiveSkills.ContainsKey(i))
                {
                    pc.InactiveSkills.Add(i, pc.SpecialSkills[i]);
                }
                MapServer.charDB.UpdateSkill(pc, SkillType.Inactive, pc.SpecialSkills[i]);
                SendDeleteSpecial(pc, i);
                SendDeleteSkill(pc, i);
                pc.SpecialSkills.Remove(i);
            }
            tmptable.Clear();
            foreach (uint i in pc.InactiveSkills.Keys)
            {
                if (SkillFactory.GetSkill(i).reqjob[job] != 255 && SkillFactory.GetSkill(i).reqjob[job] != 0)
                {
                    tmptable.Add(i);
                }
            }
            foreach (uint i in tmptable)
            {
                if (!pc.BattleSkills.ContainsKey(i))
                {
                    pc.BattleSkills.Add(i, pc.InactiveSkills[i]);
                }
                MapServer.charDB.UpdateSkill(pc, SkillType.Battle, pc.InactiveSkills[i]);
                SendAddSkill(pc, i, 0);
                pc.InactiveSkills.Remove(i);
            }
            SkillInfo info = new SkillInfo();

            switch (pc.job)
            {
            case JobType.NOVICE:
                if (!CheckSkill(pc, 1406901, 11))
                {
                    info.ID = 1406901;
                    pc.BattleSkills.Add(1406901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1406901, 0);
                }
                break;

            case JobType.SWORDMAN:
                if (!CheckSkill(pc, 1416901, 11))
                {
                    info.ID = 1416901;
                    pc.BattleSkills.Add(1416901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1416901, 0);
                }
                break;

            case JobType.RECRUIT:
                if (!CheckSkill(pc, 1426901, 11))
                {
                    info.ID = 1426901;
                    pc.BattleSkills.Add(1426901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1426901, 0);
                }
                break;

            case JobType.THIEF:
                if (!CheckSkill(pc, 1406901, 11))
                {
                    info.ID = 1406901;
                    pc.BattleSkills.Add(1406901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1406901, 0);
                }
                break;

            case JobType.ENCHANTER:
                if (!CheckSkill(pc, 1446901, 11))
                {
                    info.ID = 1446901;
                    pc.BattleSkills.Add(1446901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1446901, 0);
                }
                break;

            case JobType.CLOWN:
                if (!CheckSkill(pc, 1406901, 11))
                {
                    info.ID = 1406901;
                    pc.BattleSkills.Add(1406901, info);
                    MapServer.charDB.NewSkill(pc, SkillType.Battle, info);
                    SendAddSkill(pc, 1406901, 0);
                }
                break;
            }
            CastPassivSkill(ref pc);
        }