From e2ac647e03c6ceac9131e89faa18d76f1e0fa637 Mon Sep 17 00:00:00 2001 From: Kinglykrab Date: Sun, 5 Jul 2015 22:32:59 -0400 Subject: [PATCH] Bot saylinks and command aliases. --- changelog.txt | 6 + common/ruletypes.h | 2 + zone/bot.cpp | 456 ++++++++++++++++------------------------- zone/bot.h | 2 + zone/client_packet.cpp | 2 +- zone/command.cpp | 19 +- zone/command.h | 4 +- zone/corpse.cpp | 2 +- zone/embparser_api.cpp | 20 +- zone/lua_general.cpp | 12 +- zone/questmgr.cpp | 4 +- zone/questmgr.h | 4 +- 12 files changed, 222 insertions(+), 311 deletions(-) diff --git a/changelog.txt b/changelog.txt index 27b3f9de4..227058eba 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,12 @@ mackal: Rewrite NPC combat attack round logic See: http://www.eqemulator.org/forums/showthread.php?t=38708 You can set Combat:UseLiveCombatRounds to false to use the old rules PC Double Attack rates kind of follow the same thing but still needs to be implemented +Kinglykrab: WARNING: summonburriedplayercorpse is now summonburiedplayercorpse, getplayerburriedcorpsecount is now getplayerburiedcorpsecount, summon_burried_player_corpse is now summon_buried_player_corpse, and get_player_burried_corpse_count is now get_player_buried_corpse_count FIX THESE IN YOUR SCRIPTS OR THEY WILL NOT WORK!!!! + Added bot saylinks (thanks Uleat!) + Command aliases for #augmentitem (#aug), #findnpctype (#fn), #findspell (#fs) + Bot command changes: #bot sow -> #bot speed, #bot magepet -> #bot setpet, #bot resurrectme -> #bot resurrect + Changed all occurrences of burried to buried in the code. + client_packet.cpp was referencing old columns in character_corpses, not sure how we didn't already see this before. == 7/4/2015 == mackal: Reworked the activated avoidace skills (riposte, dodge, etc) based on dev quotes diff --git a/common/ruletypes.h b/common/ruletypes.h index 8613eeebe..e1a095724 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -506,6 +506,8 @@ RULE_INT(Bots, BotAAExpansion, 8) // Bots get AAs through this expansion RULE_BOOL(Bots, BotGroupXP, false) // Determines whether client gets xp for bots outside their group. RULE_BOOL(Bots, BotBardUseOutOfCombatSongs, true) // Determines whether bard bots use additional out of combat songs. RULE_BOOL(Bots, BotLevelsWithOwner, false) // Auto-updates spawned bots as owner levels/de-levels (false is original behavior) +RULE_BOOL(Bots, BotCharacterLevelEnabled, false) // Enables required level to spawn bots +RULE_INT(Bots, BotCharacterLevel, 0) // 0 as default (if level > this value you can spawn bots if BotCharacterLevelEnabled is true) RULE_CATEGORY_END() #endif diff --git a/zone/bot.cpp b/zone/bot.cpp index 4bc291e84..6e9a1f2fc 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -8731,52 +8731,53 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { c->Message(0, "#bot create [name] [class (id)] [race (id)] [model (male/female)] - create a permanent bot. See #bot help create."); c->Message(0, "#bot help create - show all the race/class id. (make it easier to create bots)"); c->Message(0, "#bot delete - completely destroy forever the targeted bot and all its items."); - c->Message(0, "#bot list [all/class(1-16)] - list your bots all or by class. Classes: 1(WAR), 2(CLR), 3(PAL), 4(RNG), 5(SHD), 6(DRU), 7(MNK), 8(BRD), 9(ROG), 10(SHM), 11(NEC), 12(WIZ), 13(MAG), 14(ENC), 15(BST), 16(BER)"); + c->Message(0, "#bot list [all/class(1-16)] - list all of your bots or list by class. Classes: 1(WAR), 2(CLR), 3(PAL), 4(RNG), 5(SHD), 6(DRU), 7(MNK), 8(BRD), 9(ROG), 10(SHM), 11(NEC), 12(WIZ), 13(MAG), 14(ENC), 15(BST), 16(BER)"); c->Message(0, "#bot spawn [bot name] - spawn a bot from it's name (use list to see all the bots). "); c->Message(0, "#bot inventory list - show the inventory (and the slots IDs) of the targeted bot."); c->Message(0, "#bot inventory remove [slotid] - remove the item at the given slot in the inventory of the targeted bot."); c->Message(0, "#bot update - you must type that command once you gain a level."); c->Message(0, "#bot summon - It will summon your targeted bot to you."); - c->Message(0, "#bot ai mez - If you're grouped with an Enchanter, he will mez your target."); + c->Message(0, "#bot ai mez - If you're grouped with an Enchanter, he will mesmerize your target."); c->Message(0, "#bot picklock - You must have a targeted Rogue bot in your group and be right on the door."); c->Message(0, "#bot cure [poison|disease|curse|blindness] Cleric has most options"); c->Message(0, "#bot bindme - You must have a Cleric in your group to get Bind Affinity cast on you."); - c->Message(0, "#bot track - look at mobs in the zone (ranger has options)"); + c->Message(0, "#bot track - look at mobs in the zone (Ranger has options)"); c->Message(0, "#bot target calm - attempts to pacify your target mob."); - c->Message(0, "#bot evac - transports your pc group to safe location in the current zone. bots are lost"); - c->Message(0, "#bot resurrectme - Your bot Cleric will rez you."); - c->Message(0, "#bot corpse summon - Necromancers summon corpse."); + c->Message(0, "#bot evac - transports your group to safe location in the current zone (bots are lost)"); + c->Message(0, "#bot resurrect - Your Cleric bot will resurrect your targeted player corpse."); + c->Message(0, "#bot corpse summon - Necromancers summon your targeted player's corpses."); c->Message(0, "#bot lore - cast Identify on the item on your mouse pointer."); - c->Message(0, "#bot sow - Bot sow on you (Druid has options)"); + c->Message(0, "#bot speed - Bots will cast Spirit of Wolf on you (Druid has options)"); c->Message(0, "#bot invis - Bot invisiblity (must have proper class in group)"); c->Message(0, "#bot levitate - Bot levitation (must have proper class in group)"); c->Message(0, "#bot resist - Bot resist buffs (must have proper class in group)"); - c->Message(0, "#bot runeme - Enchanter Bot cast Rune spell on you"); + c->Message(0, "#bot runeme - Enchanter bot casts Rune spell on you"); c->Message(0, "#bot shrink - Shaman or Beastlord will shrink target"); c->Message(0, "#bot endureb - Bot enduring breath (must have proper class in group)"); c->Message(0, "#bot charm - (must have proper class in group)"); c->Message(0, "#bot dire charm - (must have proper class in group)"); c->Message(0, "#bot pet remove - (remove pet before charm)"); - c->Message(0, "#bot gate - you need a Druid or Wizard in your group)"); + c->Message(0, "#bot gate - Druid or Wizard bot will cast gate."); c->Message(0, "#bot archery - Toggle Archery Skilled bots between using a Bow or using Melee weapons."); - c->Message(0, "#bot magepet [earth|water|air|fire|monster] - Select the pet type you want your Mage bot to use."); + c->Message(0, "#bot setpet [earth|water|air|fire|monster] - Select the pet type you want your Magician bot to use."); c->Message(0, "#bot giveitem - Gives your targeted bot the item you have on your cursor."); - c->Message(0, "#bot augmentitem - Allows you to augment items for other classes. You must have the Augmentation Sealer window filled."); + c->Message(0, "#bot augmentitem - Allows you to augment items for other classes. (You MUST have the Augmentation Sealer window filled)"); c->Message(0, "#bot camp - Tells your bot to camp out of the game."); - c->Message(0, "#bot group help - Displays the commands available to manage any BOTs in your group."); - c->Message(0, "#bot botgroup help - Displays the commands available to manage BOT ONLY groups."); + c->Message(0, "#bot group help - Displays the commands available to manage any bots in your group."); + c->Message(0, "#bot botgroup help - Displays the commands available to manage bot ONLY groups."); c->Message(0, "#bot mana [ | all] - Displays a mana report for all your spawned bots."); c->Message(0, "#bot setfollowdistance ### - sets target bots follow distance to ### (ie 30 or 250)."); - c->Message(0, "#bot [hair|haircolor|beard|beardcolor|face|eyes|heritage|tattoo|details ] - Change your BOTs appearance."); + c->Message(0, "#bot [hair|haircolor|beard|beardcolor|face|eyes|heritage|tattoo|details ] - Change your bot's appearance."); c->Message(0, "#bot armorcolor - #bot help armorcolor for info"); - c->Message(0, "#bot taunt [on|off] - Turns taunt on/off for targeted bot"); + c->Message(0, "#bot taunt [on|off] - Determines whether or not your targeted bot will taunt."); c->Message(0, "#bot stance [name] [stance (id)|list] - Sets/lists stance for named bot (Passive = 0, Balanced = 1, Efficient = 2, Reactive = 3, Aggressive = 4, Burn = 5, BurnAE = 6)"); c->Message(0, "#bot groupmessages [on|off] [bot name|all] - Turns group messages on/off for named bot/all bots."); - c->Message(0, "#bot defensive [bot name] - Causes warrior or knight bot to use defensive discipline / buff."); + c->Message(0, "#bot defensive [bot name] - Causes Warrior, Shadow Knight, or Paladin bot to use their defensive discipline or buff."); c->Message(0, "#bot healrotation help - Displays the commands available to manage BOT heal rotations."); - c->Message(0, "#bot pull [] [target] - Bot Pulling Target NPC's"); + c->Message(0, "#bot pull [] [target] - Bot Pulling Target NPCs"); c->Message(0, "#bot setinspectmessage - Copies your inspect message to a targeted bot that you own"); - c->Message(0, "#bot bardoutofcombat [on|off] - Determines wheter bard bots use out of combat songs."); + c->Message(0, "#bot bardoutofcombat [on|off] - Determines whether Bard bots use out of combat songs."); + c->Message(0, "#bot showhelm [on|off] - Determines whether or not your targeted bot's helmet will show. (Requires a respawn to take effect)"); return; } @@ -9083,6 +9084,13 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } if(!strcasecmp(sep->arg[1], "spawn") ) { + if (RuleB(Bots, BotCharacterLevelEnabled)) { + if (c->GetLevel() < RuleI(Bots, BotCharacterLevel)) { + c->Message(0, "You are only level %d, you must be level %d to spawn a bot!", c->GetLevel(), RuleI(Bots, BotCharacterLevel)); + return; + } + } + uint32 botId = GetBotIDByBotName(std::string(sep->arg[2])); if(GetBotOwnerCharacterID(botId, &TempErrorMessage) != c->CharacterID()) { @@ -9588,7 +9596,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Tracking mobs nearby", c->GetName()); entity_list.ShowSpawnWindow(c, RangeD, false); } else - Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "You want to [track all], [track near], or [track rare]?", c->GetName()); + Tracker->CastToBot()->BotGroupSay(Tracker->CastToBot(), "Do you want to %s, %s, or %s?", Tracker->CastToBot()->CreateSayLink(c, "#bot track all", "track all").c_str(), Tracker->CastToBot()->CreateSayLink(c, "#bot track near", "track near").c_str(), Tracker->CastToBot()->CreateSayLink(c, "#bot track rare", "track rare").c_str()); break; case BARD: @@ -9658,7 +9666,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 1)) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]); } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], [cure disease], [cure curse], or [cure blindness]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s, %s, %s, or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure curse", "curse").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure blindness", "blindness").c_str()); break; case SHAMAN: @@ -9678,7 +9686,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 2)) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]); } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], [cure disease], or [cure blindness]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s, %s, or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure blindness", "blindness").c_str()); break; case DRUID: @@ -9696,7 +9704,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 5)) { Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "I don't have the needed level yet", sep->arg[2]) ; } else - Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want [cure poison], or [cure disease]?", c->GetName()); + Curer->CastToBot()->BotGroupSay(Curer->CastToBot(), "Do you want to cure %s or %s?", Curer->CastToBot()->CreateSayLink(c, "#bot cure poison", "poison").c_str(), Curer->CastToBot()->CreateSayLink(c, "#bot cure disease", "disease").c_str()); break; default: c->Message(15, "You must have a Cleric, Shaman, or Druid in your group."); @@ -9780,9 +9788,9 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } //Resurrect - if(!strcasecmp(sep->arg[1], "resurrectme")) { + if(!strcasecmp(sep->arg[1], "resurrect")) { Mob *target = c->GetTarget(); - if(target == nullptr || !target->IsCorpse()) { + if(target == nullptr || !target->IsPlayerCorpse()) { c->Message(15, "You must select a corpse!"); return; } @@ -9808,7 +9816,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { return; } - if(!strcasecmp(sep->arg[1], "magepet")) { + if(!strcasecmp(sep->arg[1], "setpet")) { if(c->GetTarget() && c->GetTarget()->IsBot() && (c->GetTarget()->GetClass() == MAGICIAN)) { if(c->GetTarget()->CastToBot()->GetBotOwnerCharacterID() == c->CharacterID()) { int botlevel = c->GetTarget()->GetLevel(); @@ -10144,7 +10152,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } // Sow - if ((!strcasecmp(sep->arg[1], "sow")) && (c->IsGrouped())) { + if ((!strcasecmp(sep->arg[1], "speed")) && (c->IsGrouped())) { Mob *Sower; uint32 SowerClass = 0; Group *g = c->GetGroup(); @@ -10182,37 +10190,37 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(SowerClass) { case DRUID: if ((!strcasecmp(sep->arg[2], "regular")) && (zone->CanCastOutdoor()) && (c->GetLevel() >= 10)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting sow..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Spirit of Wolf."); Sower->CastSpell(278, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "regular")) && (zone->CanCastOutdoor()) && (c->GetLevel() <= 10)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 10 yet."); else if ((!strcasecmp(sep->arg[2], "wolf")) && zone->CanCastOutdoor() && (c->GetLevel() >= 20)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting group wolf..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting group Spirit of Wolf."); Sower->CastSpell(428, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "wolf")) && (c->GetLevel() <= 20)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 20 yet."); else if ((!strcasecmp(sep->arg[2], "feral")) && (c->GetLevel() >= 50)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Feral Pack..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Feral Pack."); Sower->CastSpell(4058, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "feral")) && (c->GetLevel() <= 50)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 50 yet."); else if ((!strcasecmp(sep->arg[2], "shrew")) && (c->GetLevel() >= 35)) { - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Pack Shrew..."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Casting Pack Shrew."); Sower->CastSpell(4055, c->GetID(), 1, -1, -1); } else if ((!strcasecmp(sep->arg[2], "wolf")) && (c->GetLevel() <= 35)) Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I'm not level 35 yet."); else if ((!zone->CanCastOutdoor()) && (!strcasecmp(sep->arg[2], "regular")) || (!zone->CanCastOutdoor()) && (!strcasecmp(sep->arg[2], "wolf"))) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try %s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral Pack").c_str()); else if (!zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try 5s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral Pack").c_str()); else if (zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Do you want [sow regular] or [sow wolf]?"); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "Do you want %s or %s?", Sower->CastToBot()->CreateSayLink(c, "#bot speed regular", "Spirit of Wolf").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed wolf", "Group Spirit of Wolf").c_str()); else if (!zone->CanCastOutdoor()) - Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try [sow shrew] if you're 35 or higher, or [sow feral] if you're 50 or higher."); + Sower->CastToBot()->BotGroupSay(Sower->CastToBot(), "I can't cast this spell indoors, try %s if you're 35 or higher, or %s if you're 50 or higher.", Sower->CastToBot()->CreateSayLink(c, "#bot speed shrew", "Pack Shrew").c_str(), Sower->CastToBot()->CreateSayLink(c, "#bot speed feral", "Feral").c_str()); break; case SHAMAN: if ((zone->CanCastOutdoor()) && (c->GetLevel() >= 9)) { @@ -10258,7 +10266,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Group *g = c->GetGroup(); Mob *target = c->GetTarget(); if(target == nullptr || (!target->IsClient() && (c->GetTarget()->CastToBot()->GetBotOwner() != c))) - c->Message(15, "You must select a player or bot you own"); + c->Message(15, "You must select a player or bot you own!"); else if(g) { for(int i = 0; i < MAX_GROUP_MEMBERS; i++){ @@ -10305,6 +10313,25 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { // Gate if ((!strcasecmp(sep->arg[1], "gate")) && (c->IsGrouped())) { + const char* druidgate[25][4] = { { "#bot gate karana", "karana", "North Karana", "550" }, { "#bot gate commons", "commons", "West Commonlands", "551" }, + { "#bot gate tox", "tox", "Toxxulia Forest", "552" }, { "#bot gate butcher", "butcher", "Butcherblock Mountains", "553" }, { "#bot gate lava", "lava", "Lavastorm Mountains", "554" }, + { "#bot gate ro", "ro", "South Ro", "555" }, { "#bot gate feerott", "feerrott", "Feerrott", "556" }, { "#bot gate steamfont", "steamfont", "Steamfont Mountains", "557" }, + { "#bot gate misty", "misty", "Misty Thicket", "558" }, { "#bot gate wakening", "wakening", "Wakening Lands", "1398" }, { "#bot gate iceclad", "iceclad", "Ieclad Ocean", "1434" }, + { "#bot gate divide", "divide", "The Great Divide", "1438" }, { "#bot gate cobalt", "cobalt", "Cobalt Scar", "1440" }, { "#bot gate combines", "combines", "The Combines", "1517" }, + { "#bot gate surefall", "surefall", "Surefall Glade", "2020" }, { "#bot gate grimling", "grimling", "Grimling Forest", "2419" }, { "#bot gate twilight", "twilight", "The Twilight Sea", "2424" }, + { "#bot gate dawnshroud", "dawnshroud", "Dawnshroud Peak", "2429" }, { "#bot gate nexus", "nexus", "The Nexus", "2432" }, { "#bot gate pok", "pok", "Plane of Knowledge", "3184" }, + { "#bot gate stonebrunt", "stonebrunt", "Stonebrunt Mountains", "3792" }, { "#bot gate bloodfields", "bloodfields", "Bloodfields", "6184" }, + { "#bot gate emerald", "emerald", "The Emerald Jungle", "1737" }, { "#bot gate skyfire", "skyfire", "Skyfire Mountains", "1736" }, { "#bot gate slaughter", "slaughter", "Wall of Slaughter", "6179" } }; + const char* wizardgate[24][4] = { { "#bot gate commons", "commons", "West Commonlands", "566" }, { "#bot gate fay", "fay", "Greater Faydark", "563" }, + { "#bot gate ro", "ro", "South Ro", "567" }, { "#bot gate tox", "tox", "Toxxulia Forest", "561" }, { "#bot gate nk", "nk", "North Karana", "562" }, + { "#bot gate nek", "nek", "Nektulos Forest", "564" }, { "#bot gate wakening", "wakening", "Wakening Lands", "1399" }, { "#bot gate iceclad", "iceclad", "Iceclad Ocean", "1418" }, + { "#bot gate divide", "divide", "The Great Divide", "1423" }, { "#bot gate cobalt", "cobalt", "Cobaltscar", "1425" }, { "#bot gate dreadlands", "dreadlands", "Dreadlands", "1516" }, + { "#bot gate wk", "wk", "West Karana", "568" }, { "#bot gate twilight", "twilight", "Twilight Sea", "2425" }, { "#bot gate dawnshroud", "dawnshroud", "Dawnshroud Peak", "2430" }, + { "#bot gate nexus", "nexus", "Nexus", "2944" }, { "#bot gate pok", "pok", "Plane of Knowledge", "3180" }, { "#bot gate wos", "wos", "Wall of Slaughter", "6178" }, + { "#bot gate grimling", "grimling", "Grimling Forest", "2420" }, { "#bot gate emerald", "emerald", "Emerald Jungle", "1739" }, { "#bot gate hateplane", "hateplane", "Plane of Hate", "666" }, + { "#bot gate airplane", "airplane", "Plane of Sky", "674" }, { "#bot gate skyfire", "skyfire", "Skyfire Mountains", "1738" }, + { "#bot gate bloodfields", "bloodfields", "Bloodfields", "6183" }, { "#bot gate stonebrunt", "stonebrunt", "Stonebrunt Mountains", "3793" } }; + bool valid = false; Mob *Gater; uint32 GaterClass = 0; Group *g = c->GetGroup(); @@ -10328,212 +10355,36 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { } } switch(GaterClass) { - case DRUID: - if ((!strcasecmp(sep->arg[2], "karana")) && (c->GetLevel() >= 25) ) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Karana."); - Gater->CastSpell(550, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "commons")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Commons."); - Gater->CastSpell(551, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "tox")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Toxxulia."); - Gater->CastSpell(552, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "butcher")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Butcherblock."); - Gater->CastSpell(553, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "lava")) && (c->GetLevel() >= 30)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Lavastorm."); - Gater->CastSpell(554, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "ro")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Ro."); - Gater->CastSpell(555, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "feerrott")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Feerrott."); - Gater->CastSpell(556, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "steamfont")) && (c->GetLevel() >= 31)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Steamfont."); - Gater->CastSpell(557, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "misty")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Misty."); - Gater->CastSpell(558, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wakening")) && (c->GetLevel() >= 40)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Wakening Lands."); - Gater->CastSpell(1398, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "iceclad")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Iceclad Ocean."); - Gater->CastSpell(1434, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "divide")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Great Divide."); - Gater->CastSpell(1438, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "cobalt")) && (c->GetLevel() >= 42)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Cobalt Scar."); - Gater->CastSpell(1440, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "combines")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Combines."); - Gater->CastSpell(1517, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "surefall")) && (c->GetLevel() >= 26)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Surefall Glade."); - Gater->CastSpell(2020, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "grimling")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Grimling Forest."); - Gater->CastSpell(2419, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "twilight")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Twilight."); - Gater->CastSpell(2424, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "dawnshroud")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Dawnshroud."); - Gater->CastSpell(2429, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nexus")) && (c->GetLevel() >= 26)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of The Nexus."); - Gater->CastSpell(2432, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "pok")) && (c->GetLevel() >= 38)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Knowledge."); - Gater->CastSpell(3184, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "stonebrunt")) && (c->GetLevel() >= 28)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Stonebrunt Mountains."); - Gater->CastSpell(3792, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "bloodfields")) && (c->GetLevel() >= 55)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Bloodfields."); - Gater->CastSpell(6184, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "emerald")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wind of the South."); - Gater->CastSpell(1737, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "skyfire")) && (c->GetLevel() >= 44)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wind of the North."); - Gater->CastSpell(1736, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "slaughter")) && (c->GetLevel() >= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Circle of Slaughter."); - Gater->CastSpell(6179, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "karana") - || !strcasecmp(sep->arg[2], "tox") - || !strcasecmp(sep->arg[2], "butcher") && (c->GetLevel() <= 25)) - || !strcasecmp(sep->arg[2], "commons") && (c->GetLevel() <= 27) - || (!strcasecmp(sep->arg[2], "ro") - || !strcasecmp(sep->arg[2], "feerrott") && (c->GetLevel() <= 32)) - || !strcasecmp(sep->arg[2], "steamfont") && (c->GetLevel() <= 31) - || !strcasecmp(sep->arg[2], "misty") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "lava") && (c->GetLevel() <= 30) - || !strcasecmp(sep->arg[2], "wakening") && (c->GetLevel() <= 40) - || !strcasecmp(sep->arg[2], "iceclad") && (c->GetLevel() <= 32) - || !strcasecmp(sep->arg[2], "divide") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "cobalt") && (c->GetLevel() <= 42) - || !strcasecmp(sep->arg[2], "combines") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "surefall") && (c->GetLevel() <= 26) - || !strcasecmp(sep->arg[2], "grimling") && (c->GetLevel() <= 29) - || !strcasecmp(sep->arg[2], "twilight") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "dawnshroud") && (c->GetLevel() <= 37) - || !strcasecmp(sep->arg[2], "nexus") && (c->GetLevel() <= 26) - || !strcasecmp(sep->arg[2], "pok") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "stonebrunt") && (c->GetLevel() <= 28) - || !strcasecmp(sep->arg[2], "bloodfields") && (c->GetLevel() <= 55) - || !strcasecmp(sep->arg[2], "emerald") && (c->GetLevel() <= 38) - || !strcasecmp(sep->arg[2], "skyfire") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "wos") && (c->GetLevel() <= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "I don't have the needed level yet."); - } else - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can [gate] to [karana], [commons], [tox], [butcher], [lava], [ro], [feerrott], [steamfont], [misty], [wakening], [iceclad], [divide], [cobalt], [combines], [surefall], [grimling], [twilight], [dawnshroud], [nexus], [pok], [stonebrunt], [bloodfields], [emerald], [skyfire] or [wos]."); + case DRUID: { + for (int i = 0; i < 25; i++) { + if (!strcasecmp(sep->arg[2], druidgate[i][1])) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Gating to %s!", druidgate[i][2]); + Gater->CastSpell(atoi(druidgate[i][3]), c->GetID(), 1, -1, -1); + valid = true; + } + } + if (!valid) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can gate you to all of the following zones:"); + for (int i = 0; i < 25; i++) + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "%s", Gater->CastToBot()->CreateSayLink(c, druidgate[i][0], druidgate[i][2]).c_str()); + } break; - case WIZARD: - if ((!strcasecmp(sep->arg[2], "commons")) && (c->GetLevel() >= 35) ) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Common Portal."); - Gater->CastSpell(566, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "fay")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Fay Portal."); - Gater->CastSpell(563, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "ro")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Ro Portal."); - Gater->CastSpell(567, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "tox")) && (c->GetLevel() >= 25)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Toxxulia Portal."); - Gater->CastSpell(561, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nk")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting North Karana Portal."); - Gater->CastSpell(562, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nek")) && (c->GetLevel() >= 32)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Nektulos Portal."); - Gater->CastSpell(564, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wakening")) && (c->GetLevel() >= 43)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wakening Lands Portal."); - Gater->CastSpell(1399, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "iceclad")) && (c->GetLevel() >= 33)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Iceclad Ocean Portal."); - Gater->CastSpell(1418, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "divide")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Great Divide Portal."); - Gater->CastSpell(1423, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "cobalt")) && (c->GetLevel() >= 43)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Cobalt Scar Portal."); - Gater->CastSpell(1425, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "combines")) && (c->GetLevel() >= 34)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Combines Portal."); - Gater->CastSpell(1516, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wk")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting West Karana Portal."); - Gater->CastSpell(568, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "twilight")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Twilight Portal."); - Gater->CastSpell(2425, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "dawnshroud")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Dawnshroud Portal."); - Gater->CastSpell(2430, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "nexus")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Nexus Portal."); - Gater->CastSpell(2944, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "pok")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Plane of Knowledge Portal."); - Gater->CastSpell(3180, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "wos")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Wall of Slaughter Portal."); - Gater->CastSpell(6178, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "grimling")) && (c->GetLevel() >= 29)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Fay Portal."); - Gater->CastSpell(2420, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "emerald")) && (c->GetLevel() >= 37)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Emerald Jungle."); - Gater->CastSpell(1739, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "hateplane")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Hate Plane."); - Gater->CastSpell(666, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "airplane")) && (c->GetLevel() >= 39)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Airplane."); - Gater->CastSpell(674, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "skyfire")) && (c->GetLevel() >= 36)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Porting to Skyfire."); - Gater->CastSpell(1738, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "bloodfields")) && (c->GetLevel() >= 55)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Bloodfields Portal."); - Gater->CastSpell(6183, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "stonebrunt")) && (c->GetLevel() >= 27)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Casting Stonebrunt Portal."); - Gater->CastSpell(3793, c->GetID(), 1, -1, -1); - } else if ((!strcasecmp(sep->arg[2], "commons") && (c->GetLevel() <= 35)) - || !strcasecmp(sep->arg[2], "fay") && (c->GetLevel() <= 27) - || (!strcasecmp(sep->arg[2], "ro") && (c->GetLevel() <= 37)) - || !strcasecmp(sep->arg[2], "tox") && (c->GetLevel() <= 25) - || !strcasecmp(sep->arg[2], "nk") && (c->GetLevel() <= 25) - || !strcasecmp(sep->arg[2], "nek") && (c->GetLevel() <= 32) - || !strcasecmp(sep->arg[2], "wakening") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "iceclad") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "divide") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "cobalt") && (c->GetLevel() <= 43) - || !strcasecmp(sep->arg[2], "combines") && (c->GetLevel() <= 34) - || !strcasecmp(sep->arg[2], "wk") && (c->GetLevel() <= 37) - || !strcasecmp(sep->arg[2], "twilight") && (c->GetLevel() <= 33) - || !strcasecmp(sep->arg[2], "dawnshroud") && (c->GetLevel() <= 39) - || !strcasecmp(sep->arg[2], "nexus") && (c->GetLevel() <= 29) - || (!strcasecmp(sep->arg[2], "pok") - || !strcasecmp(sep->arg[2], "hateplane") - || !strcasecmp(sep->arg[2], "airplane") && (c->GetLevel() <= 38)) - || !strcasecmp(sep->arg[2], "grimling") && (c->GetLevel() <= 29) - || !strcasecmp(sep->arg[2], "bloodfields") && (c->GetLevel() <= 55) - || !strcasecmp(sep->arg[2], "stonebrunt") && (c->GetLevel() <= 27) - || !strcasecmp(sep->arg[2], "emerald") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "skyfire") && (c->GetLevel() <= 36) - || !strcasecmp(sep->arg[2], "wos") && (c->GetLevel() <= 64)) { - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "I don't have the needed level yet."); - } else - Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can [gate] to [commons], [fay], [ro], [tox], [nk], [wakening], [iceclad], [divide], [cobalt], [combines], [wk], [grimling], [twilight], [dawnshroud], [nexus], [pok], [stonebrunt], [bloodfields], [emerald], [skyfire], [hateplane], [airplane] or [wos].", c->GetName()); + } + case WIZARD: { + for (int i = 0; i < 24; i++) { + if (!strcasecmp(sep->arg[2], wizardgate[i][1])) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "Gating to %s!", wizardgate[i][2]); + Gater->CastSpell(atoi(wizardgate[i][3]), c->GetID(), 1, -1, -1); + valid = true; + } + } + if (!valid) { + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "With the proper level I can gate you to all of the following zones:"); + for (int i = 0; i < 24; i++) + Gater->CastToBot()->BotGroupSay(Gater->CastToBot(), "%s", Gater->CastToBot()->CreateSayLink(c, wizardgate[i][0], wizardgate[i][2]).c_str()); + } break; + } default: c->Message(15, "You must have a Druid or Wizard in your group."); break; @@ -10680,25 +10531,25 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if ((c->GetLevel() <= 14) && (!strcasecmp(sep->arg[2], "undead"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 14 yet."); else if ((!c->IsInvisible(c)) && (!c->invisible_undead) && (c->GetLevel() >= 14) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 4) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 4 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 6) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 6 yet."); else if ((c->GetLevel() >= 6) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis undead], [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s, %s, or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; case MAGICIAN: if (!strcasecmp(sep->arg[2], "undead")) @@ -10706,47 +10557,47 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->GetLevel() <= 8) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 8 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 8) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 16) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 16 yet."); else if ((c->GetLevel() >= 16) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "see Invisibility").c_str()); break; case WIZARD: if ((c->GetLevel() <= 39) && (!strcasecmp(sep->arg[2], "undead"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 39 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 39) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 16) && (!strcasecmp(sep->arg[2], "live"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 16 yet."); else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 16) && (!strcasecmp(sep->arg[2], "live"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invisibilty."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibilty."); Inviser->CastSpell(42, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() <= 4) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 6 yet."); else if ((c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis undead], [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s, %s, or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; case NECROMANCER: if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (!strcasecmp(sep->arg[2], "undead"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting invis undead."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Invisibility vs. Undead."); Inviser->CastSpell(235, c->GetID(), 1, -1, -1); } else if (!strcasecmp(sep->arg[2], "see")) @@ -10756,7 +10607,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->IsInvisible(c))|| (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I only have [invis undead]"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I only have %s.", Inviser->CastToBot()->CreateSayLink(c, "#bot invis undead", "Invisibility vs. Undead").c_str()); break; case DRUID: if (!strcasecmp(sep->arg[2], "undead")) @@ -10767,7 +10618,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Superior Camouflage."); Inviser->CastSpell(34, c->GetID(), 1, -1, -1); } else if ((!c->IsInvisible(c))&& (!c->invisible_undead) && (c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live")) && (zone->CanCastOutdoor())) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Camouflage..."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting Camouflage."); Inviser->CastSpell(247, c->GetID(), 1, -1, -1); } else if ((c->GetLevel() >= 4) && (!strcasecmp(sep->arg[2], "live")) && (!zone->CanCastOutdoor())) @@ -10775,13 +10626,13 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { else if ((c->GetLevel() <= 13) && (!strcasecmp(sep->arg[2], "see"))) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I'm not level 13 yet."); else if ((c->GetLevel() >= 13) && (!strcasecmp(sep->arg[2], "see"))) { - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting see invisible."); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Casting See Invisibility."); Inviser->CastSpell(80, c->GetID(), 1, -1, -1); } else if ((c->IsInvisible(c)) || (c->invisible_undead)) Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "I can't cast this if you're already invis-buffed."); else - Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want [invis live] or [invis see]?"); + Inviser->CastToBot()->BotGroupSay(Inviser->CastToBot(), "Do you want %s or %s?", Inviser->CastToBot()->CreateSayLink(c, "#bot invis live", "Invisibility").c_str(), Inviser->CastToBot()->CreateSayLink(c, "#bot invis see", "See Invisibility").c_str()); break; default: c->Message(15, "You must have a Enchanter, Magician, Wizard, Druid, or Necromancer in your group."); @@ -10908,19 +10759,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { switch(ResisterClass) { case CLERIC: if(!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 6)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(1, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 11)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(2, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire") && (c->GetLevel() >= 8)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(3, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 13)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(4, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 16)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(5, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 16) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 13) @@ -10929,24 +10780,24 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 6)) { Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the required level yet."); } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; case SHAMAN: if(!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 20)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(12, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 8)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(13, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire") && (c->GetLevel() >= 5)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(14, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 1)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(15, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(16, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 19) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 1) @@ -10955,24 +10806,24 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 20)) { Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the needed level yet."); } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; case DRUID: if (!strcasecmp(sep->arg[2], "poison") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting poison protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Poison protection."); Resister->CastToBot()->Bot_Command_Resist(7, Resister->GetLevel()); } else if (!strcasecmp(sep->arg[2], "disease") && (c->GetLevel() >= 19)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting disease protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Disease protection."); Resister->CastToBot()->Bot_Command_Resist(8, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "fire")) { // Fire level 1 - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting fire protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Fire protection."); Resister->CastToBot()->Bot_Command_Resist(9, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "cold") && (c->GetLevel() >= 13)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting cold protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Cold protection."); Resister->CastToBot()->Bot_Command_Resist(10, Resister->GetLevel()); } else if(!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() >= 16)) { - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting magic protection."); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Casting Magic protection."); Resister->CastToBot()->Bot_Command_Resist(11, Resister->GetLevel()); } else if (!strcasecmp(sep->arg[2], "magic") && (c->GetLevel() <= 16) || !strcasecmp(sep->arg[2], "cold") && (c->GetLevel() <= 9) @@ -10980,7 +10831,7 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { || !strcasecmp(sep->arg[2], "poison") && (c->GetLevel() <= 19)) { Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "I don't have the required level yet.") ; } else - Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want [resist poison], [resist disease], [resist fire], [resist cold], or [resist magic]?"); + Resister->CastToBot()->BotGroupSay(Resister->CastToBot(), "Do you want %s, %s, %s, %s, or %s?", Resister->CastToBot()->CreateSayLink(c, "#bot resist poison", "Resist Poison").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot resist disease", "Resist Disease").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis fire", "Resist Fire").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis cold", "Resist Cold").c_str(), Resister->CastToBot()->CreateSayLink(c, "#bot invis magic", "Resist Magic").c_str()); break; default: c->Message(15, "You must have a Cleric, Shaman, or Druid in your group."); @@ -11053,7 +10904,8 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { botGroupLeader->BotGroupSay(botGroupLeader, "I am prepared to lead."); else botGroupLeader->BotGroupSay(botGroupLeader, "I cannot lead."); - } else + } + else c->Message(13, "You must target a spawned bot first."); return; @@ -11108,16 +10960,19 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { if(Bot::AddBotToGroup(botGroupMember, g)) { database.SetGroupID(botGroupMember->GetName(), g->GetID(), botGroupMember->GetBotID()); botGroupMember->BotGroupSay(botGroupMember, "I have joined %s\'s group.", botGroupLeader->GetName()); - } else + } + else botGroupMember->BotGroupSay(botGroupMember, "I can not join %s\'s group.", botGroupLeader->GetName()); } else { Group* tempGroup = botGroupMember->GetGroup(); if(tempGroup) botGroupMember->BotGroupSay(botGroupMember, "I can not join %s\'s group. I am already a member in %s\'s group.", botGroupLeader->GetName(), tempGroup->GetLeaderName()); } - } else + } + else c->Message(13, "You must target a spawned bot first."); - } else + } + else botGroupLeader->BotGroupSay(botGroupMember, "I have no more openings in my group, %s.", c->GetName()); } else { Group* tempGroup = botGroupLeader->GetGroup(); @@ -11148,9 +11003,11 @@ void Bot::ProcessBotCommands(Client *c, const Seperator *sep) { botGroupMember->BotGroupSay(botGroupMember, "I am no longer in a group."); else botGroupMember->BotGroupSay(botGroupMember, "I can not leave %s\'s group.", g->GetLeaderName()); - } else + } + else botGroupMember->BotGroupSay(botGroupMember, "I am not in a group."); - } else + } + else c->Message(13, "You must target a spawned bot first."); return; @@ -13350,4 +13207,45 @@ void Bot::BotHealRotationsClear(Client* c) { } } +std::string Bot::CreateSayLink(Client* c, const char* message, const char* name) { + int sayid = 0; + int sz = strlen(message); + char *escaped_string = new char[sz * 2]; + database.DoEscapeString(escaped_string, message, sz); + std::string query = StringFormat("SELECT `id` FROM `saylink` WHERE `phrase` = '%s'", escaped_string); + auto results = database.QueryDatabase(query); + if (results.Success()) { + if (results.RowCount() >= 1) { + for (auto row = results.begin();row != results.end(); ++row) + sayid = atoi(row[0]); + } else { + std::string insert_query = StringFormat("INSERT INTO `saylink` (`phrase`) VALUES ('%s')", escaped_string); + results = database.QueryDatabase(insert_query); + if (!results.Success()) { + Log.Out(Logs::General, Logs::Error, "Error in saylink phrase queries", results.ErrorMessage().c_str()); + } else { + results = database.QueryDatabase(query); + if (results.Success()) { + if (results.RowCount() >= 1) + for(auto row = results.begin(); row != results.end(); ++row) + sayid = atoi(row[0]); + } + else + Log.Out(Logs::General, Logs::Error, "Error in saylink phrase queries", results.ErrorMessage().c_str()); + } + } + } + safe_delete_array(escaped_string); + + sayid += 500000; + + Client::TextLink linker; + linker.SetLinkType(linker.linkItemData); + linker.SetProxyItemID(sayid); + linker.SetProxyText(name); + + auto say_link = linker.GenerateLink(); + return say_link; +} + #endif diff --git a/zone/bot.h b/zone/bot.h index 7f2652498..2c5e30644 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -549,6 +549,8 @@ public: void SetNumHealRotationMembers( uint8 numMembers ) { _numHealRotationMembers = numMembers; } void SetBardUseOutOfCombatSongs(bool useOutOfCombatSongs) { _bardUseOutOfCombatSongs = useOutOfCombatSongs;} void SetShowHelm(bool showhelm) { _showhelm = showhelm; } + + std::string CreateSayLink(Client* botOwner, const char* message, const char* name); // Class Destructors virtual ~Bot(); diff --git a/zone/client_packet.cpp b/zone/client_packet.cpp index 0e2f0da08..ce63610da 100644 --- a/zone/client_packet.cpp +++ b/zone/client_packet.cpp @@ -6008,7 +6008,7 @@ void Client::Handle_OP_GMSearchCorpse(const EQApplicationPacket *app) char *escSearchString = new char[129]; database.DoEscapeString(escSearchString, gmscs->Name, strlen(gmscs->Name)); - std::string query = StringFormat("SELECT charname, zoneid, x, y, z, time_of_death, rezzed, IsBurried " + std::string query = StringFormat("SELECT charname, zoneid, x, y, z, time_of_death, is_rezzed, is_buried " "FROM character_corpses WheRE charname LIKE '%%%s%%' ORDER BY charname LIMIT %i", escSearchString, maxResults); safe_delete_array(escSearchString); diff --git a/zone/command.cpp b/zone/command.cpp index ac419043f..7a846898b 100644 --- a/zone/command.cpp +++ b/zone/command.cpp @@ -170,6 +170,7 @@ int command_init(void) { command_add("appearance", "[type] [value] - Send an appearance packet for you or your target", 150, command_appearance) || command_add("attack", "[targetname] - Make your NPC target attack targetname", 150, command_attack) || command_add("augmentitem", "Force augments an item. Must have the augment item window open.", 250, command_augmentitem) || + command_add("aug", nullptr, 250, command_augmentitem) || command_add("ban", "[name] [reason]- Ban by character name", 150, command_ban) || command_add("beard", "- Change the beard of your target", 80, command_beard) || command_add("beardcolor", "- Change the beard color of your target", 80, command_beardcolor) || @@ -216,12 +217,14 @@ int command_init(void) { command_add("flagedit", "- Edit zone flags on your target", 100, command_flagedit) || command_add("flags", "- displays the flags of you or your target", 0, command_flags) || command_add("flymode", "[0/1/2] - Set your or your player target's flymode to off/on/levitate", 50, command_flymode) || + command_add("fn", nullptr, 100, command_findnpctype) || command_add("fov", "- Check wether you're behind or in your target's field of view", 80, command_fov) || command_add("freeze", "- Freeze your target", 80, command_freeze) || - command_add("fz", nullptr, 10, command_findzone) || + command_add("fs", nullptr, 50, command_findspell) || + command_add("fz", nullptr, 100, command_findzone) || command_add("gassign", "[id] - Assign targetted NPC to predefined wandering grid id", 100, command_gassign) || command_add("gender", "[0/1/2] - Change your or your target's gender to male/female/neuter", 50, command_gender) || - command_add("getplayerburriedcorpsecount", "- Get the target's total number of burried player corpses.", 100, command_getplayerburriedcorpsecount) || + command_add("getplayerburiedcorpsecount", "- Get the target's total number of buried player corpses.", 100, command_getplayerburiedcorpsecount) || command_add("getvariable", "[varname] - Get the value of a variable from the database", 200, command_getvariable) || command_add("gi", nullptr,200, command_giveitem) || command_add("ginfo", "- get group info on target.", 20, command_ginfo) || @@ -386,7 +389,7 @@ int command_init(void) { command_add("spon", "- Sends OP_MemorizeSpell", 80, command_spon) || command_add("stun", "[duration] - Stuns you or your target for duration", 100, command_stun) || command_add("summon", "[charname] - Summons your player/npc/corpse target, or charname if specified", 80, command_summon) || - command_add("summonburriedplayercorpse", "- Summons the target's oldest burried corpse, if any exist.", 100, command_summonburriedplayercorpse) || + command_add("summonburiedplayercorpse", "- Summons the target's oldest buried corpse, if any exist.", 100, command_summonburiedplayercorpse) || command_add("summonitem", "[itemid] [charges] - Summon an item onto your cursor. Charges are optional.", 200, command_summonitem) || command_add("suspend", "[name] [days] [reason] - Suspend by character name and for specificed number of days", 150, command_suspend) || command_add("task", "(subcommand) - Task system commands", 150, command_task) || @@ -7801,7 +7804,7 @@ void command_deletegraveyard(Client *c, const Seperator *sep) return; } -void command_summonburriedplayercorpse(Client *c, const Seperator *sep) +void command_summonburiedplayercorpse(Client *c, const Seperator *sep) { Client *t=c; @@ -7815,12 +7818,12 @@ void command_summonburriedplayercorpse(Client *c, const Seperator *sep) Corpse* PlayerCorpse = database.SummonBuriedCharacterCorpses(t->CharacterID(), t->GetZoneID(), zone->GetInstanceID(), t->GetPosition()); if(!PlayerCorpse) - c->Message(0, "Your target doesn't have any burried corpses."); + c->Message(0, "Your target doesn't have any buried corpses."); return; } -void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep) +void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep) { Client *t=c; @@ -7834,9 +7837,9 @@ void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep) uint32 CorpseCount = database.GetCharacterBuriedCorpseCount(t->CharacterID()); if(CorpseCount > 0) - c->Message(0, "Your target has a total of %u burried corpses.", CorpseCount); + c->Message(0, "Your target has a total of %u buried corpses.", CorpseCount); else - c->Message(0, "Your target doesn't have any burried corpses."); + c->Message(0, "Your target doesn't have any buried corpses."); return; } diff --git a/zone/command.h b/zone/command.h index 795f75919..bf20d46d2 100644 --- a/zone/command.h +++ b/zone/command.h @@ -279,8 +279,8 @@ void command_refundaa(Client *c, const Seperator *sep); void command_traindisc(Client *c, const Seperator *sep); void command_deletegraveyard(Client *c, const Seperator *sep); void command_setgraveyard(Client *c, const Seperator *sep); -void command_getplayerburriedcorpsecount(Client *c, const Seperator *sep); -void command_summonburriedplayercorpse(Client *c, const Seperator *sep); +void command_getplayerburiedcorpsecount(Client *c, const Seperator *sep); +void command_summonburiedplayercorpse(Client *c, const Seperator *sep); void command_unscribespell(Client *c, const Seperator *sep); void command_scribespell(Client *c, const Seperator *sep); void command_refreshgroup(Client *c, const Seperator *sep); diff --git a/zone/corpse.cpp b/zone/corpse.cpp index fad65aa3a..af937e41b 100644 --- a/zone/corpse.cpp +++ b/zone/corpse.cpp @@ -835,7 +835,7 @@ bool Corpse::Process() { Save(); player_corpse_depop = true; corpse_db_id = 0; - Log.Out(Logs::General, Logs::None, "Tagged %s player corpse has burried.", this->GetName()); + Log.Out(Logs::General, Logs::None, "Tagged %s player corpse has buried.", this->GetName()); } else { Log.Out(Logs::General, Logs::Error, "Unable to bury %s player corpse.", this->GetName()); diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 6db7777ac..871d47074 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -1748,18 +1748,18 @@ XS(XS__clear_zone_flag) XSRETURN_EMPTY; } -XS(XS__summonburriedplayercorpse); -XS(XS__summonburriedplayercorpse) +XS(XS__summonburiedplayercorpse); +XS(XS__summonburiedplayercorpse) { dXSARGS; if (items != 5) - Perl_croak(aTHX_ "Usage: summonburriedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); + Perl_croak(aTHX_ "Usage: summonburiedplayercorpse(char_id,dest_x,dest_y,dest_z,dest_heading)"); bool RETVAL; uint32 char_id = (int)SvIV(ST(0)); auto position = glm::vec4((float)SvIV(ST(1)), (float)SvIV(ST(2)), (float)SvIV(ST(3)),(float)SvIV(ST(4))); - RETVAL = quest_manager.summonburriedplayercorpse(char_id, position); + RETVAL = quest_manager.summonburiedplayercorpse(char_id, position); ST(0) = boolSV(RETVAL); sv_2mortal(ST(0)); @@ -1784,19 +1784,19 @@ XS(XS__summonallplayercorpses) XSRETURN(1); } -XS(XS__getplayerburriedcorpsecount); -XS(XS__getplayerburriedcorpsecount) +XS(XS__getplayerburiedcorpsecount); +XS(XS__getplayerburiedcorpsecount) { dXSARGS; if (items != 1) - Perl_croak(aTHX_ "Usage: getplayerburriedcorpsecount(char_id)"); + Perl_croak(aTHX_ "Usage: getplayerburiedcorpsecount(char_id)"); uint32 RETVAL; dXSTARG; uint32 char_id = (int)SvIV(ST(0)); - RETVAL = quest_manager.getplayerburriedcorpsecount(char_id); + RETVAL = quest_manager.getplayerburiedcorpsecount(char_id); XSprePUSH; PUSHu((IV)RETVAL); XSRETURN(1); @@ -3712,7 +3712,7 @@ EXTERN_C XS(boot_quest) newXS(strcpy(buf, "get_spawn_condition"), XS__get_spawn_condition, file); newXS(strcpy(buf, "getguildnamebyid"), XS__getguildnamebyid, file); newXS(strcpy(buf, "getlevel"), XS__getlevel, file); - newXS(strcpy(buf, "getplayerburriedcorpsecount"), XS__getplayerburriedcorpsecount, file); + newXS(strcpy(buf, "getplayerburiedcorpsecount"), XS__getplayerburiedcorpsecount, file); newXS(strcpy(buf, "gettaskactivitydonecount"), XS__gettaskactivitydonecount, file); newXS(strcpy(buf, "givecash"), XS__givecash, file); newXS(strcpy(buf, "gmmove"), XS__gmmove, file); @@ -3802,7 +3802,7 @@ EXTERN_C XS(boot_quest) newXS(strcpy(buf, "stopalltimers"), XS__stopalltimers, file); newXS(strcpy(buf, "stoptimer"), XS__stoptimer, file); newXS(strcpy(buf, "summonallplayercorpses"), XS__summonallplayercorpses, file); - newXS(strcpy(buf, "summonburriedplayercorpse"), XS__summonburriedplayercorpse, file); + newXS(strcpy(buf, "summonburiedplayercorpse"), XS__summonburiedplayercorpse, file); newXS(strcpy(buf, "summonitem"), XS__summonitem, file); newXS(strcpy(buf, "surname"), XS__surname, file); newXS(strcpy(buf, "targlobal"), XS__targlobal, file); diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index bf65fea7c..483426b2e 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -513,16 +513,16 @@ void lua_toggle_spawn_event(int event_id, bool enable, bool strict, bool reset) quest_manager.toggle_spawn_event(event_id, enable, strict, reset); } -void lua_summon_burried_player_corpse(uint32 char_id, float x, float y, float z, float h) { - quest_manager.summonburriedplayercorpse(char_id, glm::vec4(x, y, z, h)); +void lua_summon_buried_player_corpse(uint32 char_id, float x, float y, float z, float h) { + quest_manager.summonburiedplayercorpse(char_id, glm::vec4(x, y, z, h)); } void lua_summon_all_player_corpses(uint32 char_id, float x, float y, float z, float h) { quest_manager.summonallplayercorpses(char_id, glm::vec4(x, y, z, h)); } -int lua_get_player_burried_corpse_count(uint32 char_id) { - return quest_manager.getplayerburriedcorpsecount(char_id); +int lua_get_player_buried_corpse_count(uint32 char_id) { + return quest_manager.getplayerburiedcorpsecount(char_id); } bool lua_bury_player_corpse(uint32 char_id) { @@ -1524,9 +1524,9 @@ luabind::scope lua_register_general() { luabind::def("spawn_condition", &lua_spawn_condition), luabind::def("get_spawn_condition", &lua_get_spawn_condition), luabind::def("toggle_spawn_event", &lua_toggle_spawn_event), - luabind::def("summon_burried_player_corpse", &lua_summon_burried_player_corpse), + luabind::def("summon_buried_player_corpse", &lua_summon_buried_player_corpse), luabind::def("summon_all_player_corpses", &lua_summon_all_player_corpses), - luabind::def("get_player_burried_corpse_count", &lua_get_player_burried_corpse_count), + luabind::def("get_player_buried_corpse_count", &lua_get_player_buried_corpse_count), luabind::def("bury_player_corpse", &lua_bury_player_corpse), luabind::def("task_selector", &lua_task_selector), luabind::def("task_set_selector", &lua_task_set_selector), diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index 71f0de917..b6243091f 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -1774,7 +1774,7 @@ void QuestManager::sethp(int hpperc) { owner->Damage(owner, newhp, SPELL_UNKNOWN, SkillHandtoHand, false, 0, false); } -bool QuestManager::summonburriedplayercorpse(uint32 char_id, const glm::vec4& position) { +bool QuestManager::summonburiedplayercorpse(uint32 char_id, const glm::vec4& position) { bool Result = false; if(char_id <= 0) @@ -1798,7 +1798,7 @@ bool QuestManager::summonallplayercorpses(uint32 char_id, const glm::vec4& posit return true; } -uint32 QuestManager::getplayerburriedcorpsecount(uint32 char_id) { +uint32 QuestManager::getplayerburiedcorpsecount(uint32 char_id) { uint32 Result = 0; if(char_id > 0) { diff --git a/zone/questmgr.h b/zone/questmgr.h index 879407dc6..960a8f1f4 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -159,9 +159,9 @@ public: void set_zone_flag(int zone_id); void clear_zone_flag(int zone_id); void sethp(int hpperc); - bool summonburriedplayercorpse(uint32 char_id, const glm::vec4& position); + bool summonburiedplayercorpse(uint32 char_id, const glm::vec4& position); bool summonallplayercorpses(uint32 char_id, const glm::vec4& position); - uint32 getplayerburriedcorpsecount(uint32 char_id); + uint32 getplayerburiedcorpsecount(uint32 char_id); bool buryplayercorpse(uint32 char_id); void forcedooropen(uint32 doorid, bool altmode); void forcedoorclose(uint32 doorid, bool altmode);