public virtual void OnTransformStart(L2Player player) { player.TransformId = Id; player.MountType = MoveMode; //player.MountedTemplate = NpcTable.Instance.GetNpcTemplate(npcId); player.BroadcastUserInfo(); if ((Skills == null) || (Skills.Count <= 0)) { return; } foreach (Skill sk in Skills.Select(s => SkillTable.Instance.Get(s[0], s[1])).Where(sk => sk != null)) { player.AddSkill(sk, false, false); } player.UpdateSkillList(); }
protected internal override void Use(L2Player admin, string alias) { if (!(admin.Target is L2Player)) { admin.SendMessage("target is not a player."); return; } L2Player target = (L2Player)admin.Target; AcquireSkillsEntry skills = SkillTable.Instance.GetAllRegularSkills(target.ActiveClass.ClassId.Id); SortedList <int, AcquireSkill> avail = new SortedList <int, AcquireSkill>(); Dictionary <int, int> updDel = new Dictionary <int, int>(); int nextLvl = 800; foreach (AcquireSkill e in skills.Skills) { if (e.GetLv > target.Level) { if (nextLvl > e.GetLv) { nextLvl = e.GetLv; } continue; } if (avail.ContainsKey(e.Id)) { continue; } if (target.Skills.ContainsKey(e.Id)) { Skill skill = target.Skills[e.Id]; if (skill.Level >= e.Lv) { continue; } if (avail.ContainsKey(e.Id)) { continue; } avail.Add(e.Id, e); updDel.Add(e.Id, e.Lv); break; } avail.Add(e.Id, e); } //foreach (int a in updDel.Keys) // target.removeSkill(a, true, false); //updDel.Clear(); foreach (AcquireSkill sk in avail.Values) { Skill skill = SkillTable.Instance.Get(sk.Id, sk.Lv); if (skill != null) { target.AddSkill(skill, false, false); } else { target.SendMessage($"no skill #{sk.Id}-{sk.Lv}"); } } target.ActiveSkillTree = avail; target.SendPacket(new AcquireSkillList(AcquireSkillList.SkillType.Usual)); target.UpdateSkillList(); target.SendMessage($"gor all skills [{skills.Skills.Count}][{avail.Count}] for lvl {target.Level}, class @{target.ActiveClass.ClassId.Id}"); }
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); }