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); }
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); }