Exemple #1
0
        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}");
        }
Exemple #3
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);
        }