Ejemplo n.º 1
0
        public override void Reward(Creature creature, Quest quest)
        {
            var amount = this.Amount;

            // Friday: Increase in rewards for completing part-time jobs.
            // (20% increase in EXP and Gold rewards)
            if (quest.Data.Type == QuestType.Deliver && ErinnTime.Now.Month == ErinnMonth.AlbanElved)
            {
                amount = (int)(amount * 1.2f);
            }

            creature.GiveExp(amount);
            Send.AcquireInfo(creature, "exp", amount);
        }
Ejemplo n.º 2
0
        public void SkillAdvance(ChannelClient client, Packet packet)
        {
            var skillId = (SkillId)packet.GetUShort();

            var creature = client.GetCreatureSafe(packet.Id);

            // Check skill
            var skill = creature.Skills.GetSafe(skillId);

            if (!skill.IsRankable)
            {
                goto L_Fail;
            }

            // Check rank
            var nextRank = skill.Info.Rank + 1;

            if (nextRank > skill.Data.MaxRank)
            {
                Log.Warning("SkillAdvance: Player '{0:X16}' tried to advance skill '{1}' to unknown rank '{2}'.", creature.EntityId, skill.Info.Id, nextRank);
                goto L_Fail;
            }

            // Get rank data
            var nextRankData = skill.Data.GetRankData(nextRank, creature.RaceId);
            var ap           = nextRankData.AP;

            // Check AP
            if (creature.AbilityPoints < ap)
            {
                Send.MsgBox(creature, Localization.Get("You don't have enough AP."));
                goto L_Fail;
            }

            // Exp bonus
            var exp = skill.GetExpBonus();

            creature.GiveExp(exp);
            Send.AcquireInfo(creature, "exp", exp);

            // Advance
            creature.GiveAp(-ap);
            creature.Skills.Give(skill.Info.Id, nextRank);

            return;

L_Fail:
            Send.SkillAdvance_Fail(creature);
        }
Ejemplo n.º 3
0
    public override void OnUse(Creature creature, Item item, string parameter)
    {
        var ap = item.MetaData1.GetShort("AP");

        if (ap <= 0)
        {
            Send.MsgBox(creature, L("Invalid potion."));
            return;
        }

        creature.AbilityPoints += ap;

        Send.StatUpdate(creature, StatUpdateType.Private, Stat.AbilityPoints);
        Send.AcquireInfo(creature, "ap", ap);
    }
Ejemplo n.º 4
0
        public override void Reward(Creature creature, Quest quest)
        {
            var amount = this.Amount;

            // Add global bonus
            float  bonusMultiplier;
            string bonuses;

            if (ChannelServer.Instance.GameEventManager.GlobalBonuses.GetBonusMultiplier(GlobalBonusStat.QuestExp, out bonusMultiplier, out bonuses))
            {
                amount = (int)(amount * bonusMultiplier);
            }

            // Friday: Increase in rewards for completing part-time jobs.
            // (20% increase in EXP and Gold rewards)
            if (quest.Data.Type == QuestType.Deliver && ErinnTime.Now.Month == ErinnMonth.AlbanElved)
            {
                amount = (int)(amount * 1.2f);
            }

            creature.GiveExp(amount);
            Send.AcquireInfo(creature, "exp", amount);
        }
Ejemplo n.º 5
0
 public override void Reward(Creature creature, Quest quest)
 {
     creature.GiveAp(this.Amount);
     Send.AcquireInfo(creature, "ap", this.Amount);
 }
Ejemplo n.º 6
0
 public override void Reward(Creature creature, Quest quest)
 {
     creature.Inventory.AddGold(this.Amount);
     Send.AcquireInfo(creature, "gold", this.Amount);
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Runs script
        /// </summary>
        /// <param name="creature"></param>
        /// <param name="item"></param>
        public void Run(Creature creature, Item item)
        {
            foreach (var function in _calls)
            {
                switch (function.Name)
                {
                // trainskill(x,y)
                // Trains skill x's last condition on rank y.
                // Most skills only require reading a book to advance,
                // but Cooking has more conditions, and the book that can be
                // used on each rank is always the last trainable condition.
                case "trainskill":
                {
                    var skillid = (SkillId)function.GetArgument <ushort>(0);
                    var rank    = (SkillRank)function.GetArgument <byte>(1);

                    // Cancel if creature doesn't have the skill with
                    // the correct rank.
                    var skill = creature.Skills.Get(skillid);
                    if (skill == null || skill.Info.Rank != rank)
                    {
                        break;
                    }

                    // Find the last trainable condition
                    var found = false;
                    for (int i = 8; i >= 0; --i)
                    {
                        if (skill.RankData.Conditions[i].Count > 0)
                        {
                            skill.Train(i + 1);
                            found = true;
                            break;
                        }
                    }

                    if (!found)
                    {
                        throw new Exception("No trainable condition found for " + skillid + " @ " + rank + ".");
                    }

                    break;
                }

                // knowskill(x)
                // Gives skill x on novice rank?
                case "knowskill":
                {
                    var skillid = (SkillId)function.GetArgument <ushort>(0);

                    if (!creature.Skills.Has(skillid))
                    {
                        creature.Skills.Give(skillid, SkillRank.Novice);
                    }
                    break;
                }

                // openskill(x)
                // "Opens" the skill x for actual use, aka training the
                // first condition on novice rank?
                // Or maybe it grants rank F instantly?
                case "openskill":
                {
                    var skillid = (SkillId)function.GetArgument <ushort>(0);

                    if (creature.Skills.Is(skillid, SkillRank.Novice))
                    {
                        creature.Skills.Train(skillid, 1);
                    }
                    break;
                }

                // addskill(x,y)
                // Give skill x with rank y?
                case "addskill":
                {
                    var skillid = (SkillId)function.GetArgument <ushort>(0);
                    var rank    = (SkillRank)function.GetArgument <byte>(1);

                    if (!creature.Skills.Has(skillid, rank))
                    {
                        creature.Skills.Give(skillid, rank);
                    }
                    break;
                }

                // addkeyword(x)
                // Adds keyword.
                case "addkeyword":
                {
                    creature.Keywords.Give(function.GetArgument <string>(0));
                    break;
                }

                // erasekeyword(x)
                // deletekeyword(x)
                // Removes keyword? Maybe one "disables" it somehow?
                case "erasekeyword":
                case "deletekeyword":
                {
                    creature.Keywords.Remove(function.GetArgument <string>(0));
                    break;
                }

                // modify(x,y)
                // Modifies given stat.
                case "modify":
                {
                    // Only allow this once per item id
                    if (creature.Vars.Perm["StatModify_" + item.Info.Id] != null)
                    {
                        break;
                    }

                    var stat     = function.GetArgument <string>(0);
                    var modifier = function.GetArgument <int>(1);
                    switch (stat)
                    {
                    case "str": creature.StrBonus += modifier; break;

                    case "int": creature.IntBonus += modifier; break;

                    case "dex": creature.DexBonus += modifier; break;

                    case "will": creature.WillBonus += modifier; break;

                    case "luck": creature.LuckBonus += modifier; break;

                    default: Log.Warning("MagicWordsScript: Unknown modify stat '{0}'.", stat); continue;
                    }

                    creature.Vars.Perm["StatModify_" + item.Info.Id] = true;

                    Send.StatUpdateDefault(creature);
                    if (modifier > 0)
                    {
                        Send.AcquireInfo(creature, stat, modifier);
                    }
                    break;
                }

                // domint(x)
                // Executes given mint script on server.
                case "domint":
                {
                    var scriptName = function.GetArgument <string>(0);
                    Log.Unimplemented("MagicWordsScript: domint call for '{0}'.", scriptName);
                    break;
                }

                default:
                    throw new MissingMethodException("MagicWordsScript.Run: Unknown function '" + function.Name + "'.");
                }
            }
        }