public override void RunImpl()
        {
            L2Player player = _client.CurrentPlayer;

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

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

            AcquireSkill skill = seq[_id];

            if (skill.Lv != _level)
            {
                player.SendActionFailed();
                return;
            }

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

            switch (_skillType)
            {
            case 0:
            case 1:
            {
                if (skill.ItemId > 0)
                {
                    asi.Reqs.Add(new[] { 4, skill.ItemId, skill.ItemCount, 0 });
                }
            }
            break;
            }

            player.SendPacket(asi);
        }
示例#2
0
        public override void RunImpl()
        {
            L2Player player = _client.CurrentPlayer;

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

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

            AcquireSkill e = seq[_id];

            if (e.Lv != _level)
            {
                player.SendActionFailed();
                return;
            }

            if (e.LvUpSp > player.Sp)
            {
                player.SendSystemMessage(SystemMessage.SystemMessageId.NotEnoughSpToLearnSkill);
                player.SendActionFailed();
                return;
            }

            //if (e.itemid > 0)
            //    if (!player.hasItem(e.itemid, e.itemcount))
            //    {
            //        player.sendSystemMessage(SystemMessage.SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL);
            //        player.sendActionFailed();
            //        return;
            //    }

            if (e.LvUpSp > 0)
            {
                player.Sp -= e.LvUpSp;
                StatusUpdate su = new StatusUpdate(player.ObjId);
                su.Add(StatusUpdate.Sp, player.Sp);
                player.SendPacket(su);
            }

            player.DestroyItemById(e.ItemId, e.ItemCount);

            Skill skill = SkillTable.Instance.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.Where(sc => (sc.Type == L2Shortcut.TypeSkill) && (sc.Id == _id)))
                    {
                        sc.Level = _level;
                        upd      = true;
                    }
                }

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

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