예제 #1
0
        public override void onAction(L2Player player)
        {
            player.sendMessage(asString());
            //    TimeSpan ts = dtstart - DateTime.Now;
            //    player.sendMessage("timems "+(ts.TotalMilliseconds));
            bool newtarget = false;

            if (player.CurrentTarget == null)
            {
                player.CurrentTarget = this;
                newtarget            = true;
            }
            else
            {
                if (player.CurrentTarget.ObjID != this.ObjID)
                {
                    player.CurrentTarget = this;
                    newtarget            = true;
                }
            }

            if (newtarget)
            {
                player.sendPacket(new MyTargetSelected(ObjID, player.Level - Template.Level));

                StatusUpdate su = new StatusUpdate(ObjID);
                su.add(StatusUpdate.CUR_HP, (int)CurHP);
                su.add(StatusUpdate.MAX_HP, (int)CharacterStat.getStat(TEffectType.b_max_hp));
                player.sendPacket(su);
            }
            else
            {
                player.AICharacter.Attack(this);
            }
        }
예제 #2
0
        public override void OnStopMoving(L2Player player)
        {
            player.CharacterStat.SpecBonusEvasion -= value;

            StatusUpdate su = new StatusUpdate(player.ObjID);

            su.add(StatusUpdate.EVASION, (int)player.CharacterStat.getStat(TEffectType.b_evasion));
            player.sendPacket(su);
        }
예제 #3
0
        protected internal override void use(L2Player admin, string alias)
        {
            //healthy -- восстанавливает выбранному чару хп\мп

            L2Player target;

            if (admin.CurrentTarget != null && admin.CurrentTarget is L2Player)
            {
                target = (L2Player)admin.CurrentTarget;
            }
            else
            {
                target = admin;
            }

            double hpval = target.CharacterStat.getStat(TEffectType.b_max_hp) - target.CurHP;
            double mpval = target.CharacterStat.getStat(TEffectType.b_max_mp) - target.CurMP;

            target.CurHP += hpval;
            target.CurMP += mpval;

            StatusUpdate su = new StatusUpdate(target.ObjID);

            su.add(StatusUpdate.CUR_HP, (int)target.CurHP);
            su.add(StatusUpdate.CUR_MP, (int)target.CurMP);
            target.sendPacket(su);

            SystemMessage sm = new SystemMessage(1067); //$s2 HP has been restored by $s1.

            sm.addPlayerName(admin.Name);
            sm.addNumber((int)hpval);
            target.sendPacket(sm);

            sm = new SystemMessage(1069); //$s2 MP has been restored by $s1.
            sm.addPlayerName(admin.Name);
            sm.addNumber((int)mpval);
            target.sendPacket(sm);
        }
        public override void run()
        {
            L2Player player = Client.CurrentPlayer;

            if (player._recipeBook == null)
            {
                //The recipe is incorrect.
                player.sendSystemMessage(852);
                player.sendActionFailed();
                return;
            }

            L2Recipe rec = null;

            foreach (L2Recipe r in player._recipeBook)
            {
                if (r.RecipeID == _id)
                {
                    rec = r;
                    break;
                }
            }

            if (rec == null)
            {
                //The recipe is incorrect.
                player.sendSystemMessage(852);
                player.sendActionFailed();
                return;
            }

            if (player.CurMP < rec._mp_consume)
            {
                player.sendSystemMessage(24); //Not enough MP.
                player.sendActionFailed();
                return;
            }

            bool next = true;

            if (rec._iscommonrecipe == 0)
            {
                next = player.p_create_item >= rec._level;
            }
            else
            {
                next = player.p_create_common_item >= rec._level;
            }

            if (!next)
            {
                player.sendSystemMessage(404); //Your Create Item level is too low to register this recipe.
                player.sendActionFailed();
                return;
            }

            foreach (recipe_item_entry material in rec._materials)
            {
                long count = player.Inventory.getItemCount(material.item.ItemID);
                if (count < material.count)
                {
                    //You are missing $s2 $s1 required to create that.
                    SystemMessage sm = new SystemMessage(854);
                    sm.addItemName(material.item.ItemID);
                    sm.addItemCount(material.count - count);
                    player.sendPacket(sm);
                    player.sendActionFailed();
                    return;
                }
            }

            player.CurMP -= rec._mp_consume;
            StatusUpdate su = new StatusUpdate(player.ObjID);

            su.add(StatusUpdate.CUR_MP, (int)player.CurMP);
            player.sendPacket(su);

            foreach (recipe_item_entry material in rec._materials)
            {
                player.Inventory.destroyItem(material.item.ItemID, material.count, true, true);
            }

            if (rec._success_rate < 100)
            {
                if (new Random().Next(0, 100) > rec._success_rate)
                {
                    player.sendPacket(new RecipeItemMakeInfo(player, rec, 0));
                    player.sendActionFailed();
                    return;
                }
            }

            foreach (recipe_item_entry prod in rec._products)
            {
                // if(prod.rate == 100)
                player.Inventory.addItem(prod.item, prod.count, 0, true, true);
                // else
            }

            player.sendPacket(new RecipeItemMakeInfo(player, rec, 1));
        }
예제 #5
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);
        }