public override void run()
        {
            L2Player player = getClient().CurrentPlayer;

            SortedList <int, TAcquireSkill> seq = player.ActiveSkillTree;

            if (!seq.ContainsKey(_id))
            {
                player.sendActionFailed();
                return;
            }

            TAcquireSkill skill = seq[_id];

            if (skill.lv != _level)
            {
                player.sendActionFailed();
                return;
            }

            AcquireSkillInfo asi = new AcquireSkillInfo(_id, _level, skill.lv_up_sp, _skillType);

            switch (_skillType)
            {
            case 0:
            case 1:
            {
                if (skill.itemid > 0)
                {
                    asi._reqs.Add(new int[] { 4, skill.itemid, (int)skill.itemcount, 0 });
                }
            }
            break;
            }

            player.sendPacket(asi);
        }
Exemplo n.º 2
0
        public override void run()
        {
            L2Player player = getClient().CurrentPlayer;

            SortedList <int, TAcquireSkill> seq = player.ActiveSkillTree;

            if (seq == null || !seq.ContainsKey(_id))
            {
                player.sendActionFailed();
                return;
            }

            TAcquireSkill e = seq[_id];

            if (e.lv != _level)
            {
                player.sendActionFailed();
                return;
            }

            if (e.lv_up_sp > player.SP)
            {
                player.sendSystemMessage(278); //You do not have enough SP to learn this skill.
                player.sendActionFailed();
                return;
            }

            if (e.itemid > 0)
            {
                if (!player.hasItem(e.itemid, e.itemcount))
                {
                    player.sendSystemMessage(276); //You do not have the necessary materials or prerequisites to learn this skill.
                    player.sendActionFailed();
                    return;
                }
            }

            if (e.lv_up_sp > 0)
            {
                player.SP -= e.lv_up_sp;
                StatusUpdate su = new StatusUpdate(player.ObjID);
                su.add(StatusUpdate.SP, player.SP);
                player.sendPacket(su);
            }

            player.Inventory.destroyItem(e.itemid, e.itemcount, true, true);

            TSkill skill = TSkillTable.getInstance().get(e.id, e.lv);

            if (skill != null)
            {
                player.addSkill(skill, true, true);
            }
            else
            {
                player.sendMessage("failed to learn null skill");
                player.sendActionFailed();
                return;
            }

            if (_level > 1)
            {
                bool upd = false;
                lock (player._shortcuts)
                {
                    foreach (L2Shortcut sc in player._shortcuts)
                    {
                        if (sc.Type == L2Shortcut.TYPE_SKILL && sc.Id == _id)
                        {
                            sc.Level = _level;
                            upd      = true;
                        }
                    }
                }

                if (upd)
                {
                    player.sendPacket(new ShortCutInit(player));
                }
            }

            player.ActiveSkillTree.Remove(_id);
            player.FolkNpc.showAvailRegularSkills(player, true);
        }