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); }
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); }
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); }
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); }
public override void Reward(Creature creature, Quest quest) { creature.GiveAp(this.Amount); Send.AcquireInfo(creature, "ap", this.Amount); }
public override void Reward(Creature creature, Quest quest) { creature.Inventory.AddGold(this.Amount); Send.AcquireInfo(creature, "gold", this.Amount); }
/// <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 + "'."); } } }