--[[ HunterPetSkills: Search an in-game database to find where the pet skill and rank you need is located. Type << /petskills >> for a list of commands. copyright 2005 by Jake Bolton (ninmonkey) ninmonkeys@gmail.com Author: Jake Bolton (ninmonkey) email: ninmonkeys@gmail.com (if you have any problems, or features you want added, email me) Usage: Type << /sk >> or << /petskills >> or << /hunterpetskills >> for a list of commands Examples: see the "HunterPetSkills_readme.txt" for examples and more details on the mod usage LastUpdate: 6/28/2005 (this isn't that accurate :P ) Thanks To: -John Ruben (Tulas), for helping improve the pet skill descriptions, and ideas for the mod in general. -I started with base info from The Good Intentions Guild ( http://www.goodintentionsguild.info ), then updated my database with current info from hunters (ie: tulas) You can view the guilds pet page at: http://www.goodintentionsguild.info/hunters.html Version 0.2.1 (not made yet) -(todo) see todo for a list of what to do (ie: focus amount) -(todo) find levels for (?) beasts -(todo) change error when bad input for /sk -if zone does not match, output zone not found -allow partial zone name match Version 0.2.0 (Current Version) -updated TOC to version 1500 for blizzard patch -added skill sprint -added skill dive -"skill" is optional, meaning you can type "/sk bite 1" or "/sk skill bite 1" -added ingame help to show sprint/dive are availible skills -updated readme -help output shows "skill" is optional by using brackets: "[skill]", as well as in the readme Version 0.1.3 -updated for new blizz patch was 4216 for 1300 Version 0.1.2: -updated interface number for blizzard's patch -colored help -cleaned up and shortened skill output -skill output is colored Version 0.1.1: -new command shortcut /sk (/hunterpetskills, /petskills, or /sk all work) -strings changed in bite, claw, and cower (for full changelog, view readme) todo: -append to skill description focus etc? Or a special command that lists all skills with the tooltips? -skill list to append: -bite: 35 focus, instant, 10 seconds cooldown, range 5 yards -claw: 25 focus, instant, 5 yard range -dash: 20 focus, instant, 30 seconds cooldown -dive: 20 focus, instant, 30 seconds cooldown -growl:15 focus, instant, 5 seconds cooldown, 5 yard range -append who can learn what: -bite: cannot be learned by: -crabs, scorpids, or owls -claw: cannot be learned by: -bats, boars, crocolisks, gorillas, hyenas, spiders, tall striders, turtles, wind serpents, or wolves/worgs -cower: can be learned by all -growl: can be learned by all -dash: cannot be learned by: -bears, crabs, crocolisks, gorillas, raptors, scorpids, spiders, turtles, or any flying beast -dive: cannot be learned by: -any land-based beast -fix /sk -pet families -petFamilyArray -1 = claw, 2 = bite, 3 = both -show which families can/cannot learn claw/bite/sprint/dive -possible search, else output families -example: -cat: skill1, skill2, skill3 -turtle: skill1, skill2 -raptor: skill1, skill2, skill3, skill4 -if search without zone name, first do a search with current zone name, if no results, then search all zones (save user time and typing) -disable if not hunter -- set pet arrays to nil? -- don't register events? -- do anything else? notes: -ToQuit -- local playerClass = UnitClass("player"); -- mage, warrior, etc.. -for pet stats -- curXP, nextXP = GetPetExperience(); -- creatureFamily = UnitCreatureFamily(unit); -- returns creature family, eg: bear, cat, crab, etc... Coming soon: -View pet families -View pet families that can only learn claw -View pet families that can only learn bite -View pet families that can learn all skills ]] ----------------------------------- -- variables ----------------------------------- -- mod version HUNTERPETSKILLS_MOD_VERSION = "0.2.0"; HUNTERPETSKILLS_MOD_NAME = "|cffffff00HunterPetSkills "..HUNTERPETSKILLS_MOD_VERSION.."|r"; -- console command list HUNTERPETSKILLS_COMMANDS = { help="help", skill="skill" }; HUNTERPETSKILLS_COLOR = { zone="447cbf", help="447cbf", helpheader="099779" }; -- displayed at /sk help -- "HunterPetSkills Help:", HUNTERPETSKILLS_HELP_TEXT = { HUNTERPETSKILLS_MOD_NAME.." Help:", HUNTERPETSKILLS_COMMANDS["help"]..": Shows this help file.", "["..HUNTERPETSKILLS_COMMANDS["skill"].."] []: Lists beasts that have (bite|claw|growl|cower|dash|dive) with rank (0-8). Optionally can try to search a zone.", }; -- skill arrays -- bite: rank = description, pet level, locations {zone_name=beast_list, -- zone_name2=beast_list2,..} local HUNTERPETSKILLS_DATA_BITE = { [1] = {"Bite the enemy, causing 9 to 11 damage", 1, locations = { DunMorogh="Snow Tracker Wolf (5-7), Winter Wolf (6-8)", Durotar="Dreadmaw Crocolisk (9-11)", Mulgore="Prairie Wolf (5-6)", Teldrassil="Webwood Venomfang (7-8)" }}, [2] = {"Bite the enemy, causing 16 to 18 damage", 8, locations = { Barrens="Echeyakee (16), Savannah Huntress(12-13), Savannah Prowler(14-15), Oasis Snapjaw (15-16)", DunMorogh="Starving Winter Wolf (8-9), Timber (10)", ElwynnForest="Mother Fang (10), Prowler (9-10)", LochModan="Forest Lurker (13-14), Loch Crocolisk (14-15)", Mulgore="Prairie Wolf Alpha (9-10)", RedridgeMountains="Tarantula (15-16)", Teldrassil="Giant Webwood Spider (10-11), Lady Sathrah (12), Webwood Silkspinner (8-9)", TirisfalGlades="Worg (10-11)", Westfall="Coyote Packleader (11-12)" }}, [3] = {"Bite the enemy, causing 24 to 28 damage", 16, locations = { Ashenvale="Ghost Paw Runner (19-20)", Duskwood="Green Recluse (21)", HillsbradFoothills="Forest Moss Creeper (20-21)", LochModan="Wood Lurker (17-18)", Redridge="Greater Tarantula (19-20)", SilverpineForest="Bloodsnout Worg (16-17)", StonetalonMountains="Besseleth (21+)", WailingCaverns="Deviate Crocolisk (18+-19+)" }}, [4] = {"Bite the enemy, causing 31 to 37 damage", 24, locations = { Ashenvale="Ghostpaw Alpha (27-28)", BlackfathomDeep="Ghamoo-Ra(25+)", Duskwood="Black Mastiff (25-26), Black Ravager (24-25), Naraxis(27)", HillsbradFoothills="Giant Moss Creeper (24), Elder Moss Creeper (27), Snapjaw (30)", Wetlands="Giant Wetlands Crocolisk(25-26)" }}, [5] = {"Bite the enemy, causing 40 to 48 damage", 32, locations = { ArathiHighlands="Giant Plains Creeper(35-36), Plains Creeper (32-33)", Badlands="Crag Coyote (35-36)", DustwallowMarsh="Darkfang Lurker (36-37), Drywallow Crocolisk (35-36), Mudrock Tortoise (36-37)", ThousandNeedles="Sparkleshell Snapper (34-35)" }}, [6] = {"Bite the enemy, causing 49 to 59 damage", 40, locations = { Felwood="Felpaw Wolf (47-48)", Feralas="Longtooth Runner (40-41), Snarler (42), Wolves (41, 47)", Hinterlands="Witherbark Broodguard (44-45)", SwampOfSorrows="Deathstrike Tarantula (40-41)" }}, [7] = {"Bite the enemy, causing 66 to 80 damage", 48, locations = { Felwood="Felpaw Ravager (51-52)", Hinterlands="Saltwater Snapjaw (49-50), Vilebranch Raiding Wolf (51+-52+)", Stormwind="Sewer Beast (50+)", WesternPlagueland="Diseased Wolf(53-54), Plague Lurker (54-55)" }}, [8] = {"Bite the enemy, causing 81 to 99 damage", 56, locations = { BlackrockSpires="Bloodaxe Warg (56-57) - spawns near Halycon" }}, }; -- claw: rank = description, pet level, locations {zone_name=beast_list, -- zone_name2=beast_list2,..} local HUNTERPETSKILLS_DATA_CLAW = { [1] = {"Claw the enemy, causing 4 to 6 damage", 1, locations = { DunMorogh="Ice Claw Bear (7-8)", Durotar="Pygmy Surf Crawler (5-6), Scorpid Workers (3)", Teldrassil="Strigid Owl (5-6)" }}, [2] = {"Claw the enemy, causing 8 to 12 damage", 8, locations = { Darkshore="Thistle Bear (11-12)", DunMorogh="Bjarn (12), Mangeclaw (11)", Durotar="Death Flayer (11), Encrusted Surf Crawler (9-10), Venomtail Scorpid (9-10)", ElwynnForest="Young Forest Bear (8-9)", SilverpineForest="Giant Grizzled Bear (12-13)", Teldrassil="Strigid Hunter (8-9)" }}, [3] = {"Claw the enemy, causing 12 to 16 damage", 16, locations = { Ashenvale="Ashenvale Bear (21-22), Clattering Crawler (19-20)", Darkshore="Den Mother (19)", HillsbradFoothills="Gray Bear (21-22)", LochModan="Black Bear Patriarch (16-17), Ol' Sooty (20+)", Westfall="Shore Crawler (17-18)" }}, [4] = {"Claw the enemy, causing 16 to 22 damage", 24, locations = { Ashenvale="Elder Ashenvale Bear (25-26)", Desolace="Scorpashi Snapper (30-31)", ThousandNeedles="Scorpid Reaver(31-32)" }}, [5] = {"Claw the enemy, causing 21 to 29 damage", 32, locations = { Desolace="Scorpashi Lasher (34-35)" }}, [6] = {"Claw the enemy, causing 26 to 36 damage", 40, locations = { Feralas="Ironfur Bear (41-42)", SwampOfSorrows="Silt Crawler (40-41)", Tanaris="Scorpid Hunter (40-41)" }}, [7] = {"Claw the enemy, causing 35 to 49 damage", 48, locations = { BurningSteppes="Deathlash Scorpid (54-55)", Felwood="Angerclaw Mauler (49-50), Ironbeak Hunter (50-51)", Feralas="Ironfur Patriarch (48-49)", Winterspring="Shardtooth Bear (53-55), Winterspring Owl (54-56)" }}, [8] = {"Claw the enemy, causing 43 to 59 damage", 56, locations = { WesternPlaguelands="Diseased Grizzly (55-56)", Winterspring="Elder Shardtooth (57-58), Winterspring Screecher (57-59)" }} }; -- cower: rank = pet level, locations {zone_name=beast_list, -- zone_name2=beast_list2,..} local HUNTERPETSKILLS_DATA_COWER = { [1] = {5, locations = { Barrens="Elder Plainstrider (8-9), Fleeting Plainstrider (12-13)", Darkshore="Foreststrider Fledging (11-13), Moonstalker Runt (10-11)", DunMorogh="Juvenile Snow Leopard (5-6)", Durotar="Durotar Tiger (7-8)", Mulgore="Elder Plainstrider (8-9), Flatland Cougar (7-8), Mazzranache (9)", Teldrassil="Mangy Nightsaber (2), Nightsaber (5-6)", TirisfalGlades="Greater Duskbat (6-7)" }}, [2] = {15, locations = { Barrens="Ornery Plainstrider (16-17), Savannah Patriarch (15-16)", Darkshore="Giant Foreststrider (17-19), Moonstalker Sire (17-18)", HillsbradFoothills="Starving Mountain Lion (23-24)", StonetalonMountains="Panther, Twilight Runner (23-24)" }}, [3] = {25, locations = { ArathiHighlands="Highland Strider (30-31)", HillsbradFoothills="Feral Mountain Lion (27-28)", RazorfenKraul="Blind Hunter (32), Kraul Bat (30+-31+)", StranglethornVale="Stranglethorn Tiger (32-33), Young Stranglethorn Panther (30-31), Young Stranglethorn Tiger (30-31)", ThousandNeedles="Crag Stalker (25-26)" }}, [4] = {35, locations = { Badlands="Ridge Huntress (38-39), Ridge Stalker (36-37)" }}, [5] = {45, locations = { EasternPlaguelands="Noxious Plaguebat (54-56)", StranglethornVale="Jaguero Stalker (50)" }}, [6] = {55, locations = { EasternPlaguelands="Monstrous Plaguebat (57-58)", Winterspring="Frostsaber Cub (55-56)" }}, }; -- dash: rank = description, pet level, locations {zone_name=beast_list, -- zone_name2=beast_list2,..} local HUNTERPETSKILLS_DATA_DASH = { [1] = {"Increases movement speed by 40 for 15 seconds", 30, locations = { Badlands="Crag Coyote (36), Elder Crag Wolf (?)", Desolace="Magram Bonepaw (37-38)", StranglethornVale="Stranglethorn Tigers (32-33)", SwampOfSorrows="Swamp Jaguar (37)" }}, [2] = {"Increases movement speed by 60 for 15 seconds", 40, locations = { Badlands="Broken Tooth (37), Ridge Stalker Patriarch (?)", BlastedLands="Ashmane Boar (48)", Feralas="Longtooth Runner (40-41)", Hinterlands="Old Cliff Jumper (42), Silvermane Stalker (48)", StranglethornVale="BhagTera (elite 43), Elder Shadowmaw Panther (41-43)", Tanaris="Blisterpaw Hyena (41-42), Starving Blisterpaw (42)" }}, [3] = {"Increases movement speed by 80 for 15 seconds", 50, locations = { BlackrockSpires="Bloodaxe Worg (56-57)", BlastedLands="Grunter (50), Hyena Ravage (elite (?))", BlackrockSpires="Blackrock Worg (54-55)", Hinterlands="Vilebranch Raiding Wolf (50-51)", Winterspring="Frostsaber Huntress (58-59), Frostsaber Stalker (60), RakShiri (rare blue frostsaber (?))" }}, }; -- dive: rank = description, pet level, locations {zone_name=beast_list, -- zone_name2=beast_list2,..} local HUNTERPETSKILLS_DATA_DIVE = { [1] = {"Increases movement speed by 40 for 15 seconds", 30, locations = { ArathiHighlands="Mesa Buzzard (35), Young Mesa Buzzard (31)", RazorfenKraul="Razorfen Kraul Bat (31)", Desolace="Dread Flyer (36-37)" }}, [2] = {"Increases movement speed by 60 for 15 seconds", 40, locations = { Felwood="Ironbeak Owls (48-49)", Feralas="Rogue Vale Screecher (46), Wind Serpent (44)", Tanaris="Roc (42-43)" }}, [3] = {"Increases movement speed by 80 for 15 seconds", 50, locations = { Badlands="Zaricotl (55)", BlastedLands="Spiteflayer (elite 52)", EasternPlaguelands="Plaguebat (54)", Felwood="Ironbeak Hunter (51), Ironbeak Screecher (53)", Winterspring="Winterspring Owl (55), Winterspring Screecher (59)" }}, }; -- growl: rank = pet level, learned from (and requirements), cost to buy local HUNTERPETSKILLS_DATA_GROWL = { [1] = { 1, learn="Innate knowledge", cost="free" }, [2] = { 10, learn="Innate knowledge", cost="free" }, [3] = { 20, learn="Learned fom Pet Trainers, requires level 20", cost="30sp" }, [4] = { 30, learn="Learned fom Pet Trainers, requires level 30, Growl 3", cost="1gp" }, [5] = { 40, learn="Learned fom Pet Trainers, requires level 40, Growl 4", cost="2gp" }, [6] = { 50, learn="Learned fom Pet Trainers, requires level 50, Growl 5", cost="4gp 70sp" }, [7] = { 60, learn="Learned fom Pet Trainers, requires level 60, Growl 6", cost="5gp 90sp" } }; -- const strings local HUNTERPETSKILLS_DESC_COWER = "Cower, causing no damage but lowering your threat, making the enemy less likey to attack you"; local HUNTERPETSKILLS_DESC_GROWL = "Taunt the target, increasing the likelihood the creature will focus atacks on you"; ----------------------------------- -- local functions ----------------------------------- local function print_error(msg) DEFAULT_CHAT_FRAME:AddMessage(msg.." Type /petskills or /sk help for a list of commands."); end local function print_msg(msg) DEFAULT_CHAT_FRAME:AddMessage(msg); end local function print_debug(msg) DEFAULT_CHAT_FRAME:AddMessage("Debug: "..msg); end local function HelpColor() -- version: v0.2 -- last update: 2005 --== notes ==-- -- changed: regex is now "^(.-):(.*)$" (using non-greedy mode for first capture) -- output colorized help (keeps help strings clean of color codes) -- if first line, either color, or leave plain -- all other lines, start with color blue, end before character ":" -- color start: |cff, color end: |r local index; local value; for index, value in HUNTERPETSKILLS_HELP_TEXT do local sText; if(index == 1) then -- header sText = "|cff"..HUNTERPETSKILLS_COLOR["helpheader"]..value.."|r"; print_msg(sText); else --color normally local sStart, sEnd, sCmd, sDesc = string.find(value, "^(.-):(.*)$"); sText = "|cff"..HUNTERPETSKILLS_COLOR["help"]..sCmd.."|r:"..sDesc; if( (sCmd == nil) or (sDesc == nil) ) then -- if error in search, print non-colored string print_msg(value); end -- print colored string print_msg(sText); end end end ----------------------------------- -- local command line functions ----------------------------------- local function HunterPetSkills_PrintSkillList(ZoneName, BeastList) --output skill list so print code only needs to be changed in one place -- in color print: print_msg("<"..ZoneName.."> "..BeastList); print_msg("|cff"..HUNTERPETSKILLS_COLOR["zone"].."<"..ZoneName..">|r "..BeastList); end local function HunterPetSkills_Skill(SkillName, SkillRank, SkillZone) -- Search for the skill, format: -- description, pet level, locations {zone_name=beast_list, zone_name2=beast_list2,..} local index; local value; local bFilter = false; -- if not nil if( (SkillRank == nil) or (SkillName == nil) ) then print_error("Error: Skill Name and Rank required!"); return; end -- make SkillName case-insensitive for compare SkillName = string.lower(SkillName); -- convert rank to number SkillRank = tonumber(SkillRank); -- output skill name, rank, and zone if( SkillZone and (SkillZone ~= "" )) then -- lower and print SkillZone = string.lower(SkillZone); print_msg(string.format("Skill: %s (Rank %i) Zone: %s", SkillName, SkillRank, SkillZone)); -- get ready for filter, remove spaces bFilter = true; SkillZone = string.gsub(SkillZone, "%s+", ""); else -- no zone given, print none print_msg(string.format("Skill: %s (Rank %i) Zone: All", SkillName, SkillRank)); end if( SkillName == "bite" ) then -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_BITE) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DATA_BITE[SkillRank][1]); print_msg("Requires pet level: "..HUNTERPETSKILLS_DATA_BITE[SkillRank][2]); -- print locations {zone_name=beast_list, zone_name2=beast_list2,..} local ZoneName; local BeastList; for ZoneName, BeastList in HUNTERPETSKILLS_DATA_BITE[SkillRank]["locations"] do -- if filter, else regular if(bFilter) then if(string.lower(ZoneName) == SkillZone) then -- filtering, so make sure it matches -- (SkillZone was string.lower()'ed above) -- print filtered zone and beast list HunterPetSkills_PrintSkillList(ZoneName, BeastList); end else -- no filter, print all zones HunterPetSkills_PrintSkillList(ZoneName, BeastList); end end else print_error("Error, invalid rank!"); end elseif( SkillName == "dash" ) then -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_DASH) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DATA_DASH[SkillRank][1]); print_msg("Requires Pet Level: "..HUNTERPETSKILLS_DATA_DASH[SkillRank][2]); -- print locations {zone_name=beast_list, zone_name2=beast_list2, ...} local ZoneName; local BeastList; -- for each zone, print beast list and color zone name for ZoneName, BeastList in HUNTERPETSKILLS_DATA_DASH[SkillRank]["locations"] do -- if filter, else regular if(bFilter) then if(string.lower(ZoneName) == SkillZone) then -- filtered, and made a match -- SkillZone was string.lower()'ed above HunterPetSkills_PrintSkillList(ZoneName, BeastList); end else -- no filter, print all zones HunterPetSkills_PrintSkillList(ZoneName, BeastList); end end else -- first if failed print_error("Error, invalid rank!"); end elseif( SkillName == "dive" ) then -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_DIVE) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DATA_DIVE[SkillRank][1]); print_msg("Requires Pet Level: "..HUNTERPETSKILLS_DATA_DIVE[SkillRank][2]); -- print locations {zone_name=beast_list, zone_name2=beast_list2, ...} local ZoneName; local BeastList; -- for each zone, print beast list and color zone name for ZoneName, BeastList in HUNTERPETSKILLS_DATA_DIVE[SkillRank]["locations"] do -- if filter, else regular if(bFilter) then if(string.lower(ZoneName) == SkillZone) then -- filtered, and made a match -- SkillZone was string.lower()'ed above HunterPetSkills_PrintSkillList(ZoneName, BeastList); end else -- no filter, print all zones HunterPetSkills_PrintSkillList(ZoneName, BeastList); end end else -- first if failed print_error("Error, invalid rank!"); end elseif( SkillName == "claw" ) then -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_CLAW) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DATA_CLAW[SkillRank][1]); print_msg("Requires pet level: "..HUNTERPETSKILLS_DATA_CLAW[SkillRank][2]); -- print locations {zone_name=beast_list, zone_name2=beast_list2,..} local ZoneName; local BeastList; for ZoneName, BeastList in HUNTERPETSKILLS_DATA_CLAW[SkillRank]["locations"] do -- if filter, else regular if(bFilter) then if(string.lower(ZoneName) == SkillZone) then -- filtering, so make sure it matches -- (SkillZone was string.lower()'ed above) -- print filtered zone and beast list HunterPetSkills_PrintSkillList(ZoneName, BeastList); end else -- no filter, print all zones HunterPetSkills_PrintSkillList(ZoneName, BeastList); end end else print_error("Error, invalid rank!"); end elseif( SkillName == "cower" ) then -- cower: pet level, locations {zone_name=beast_list, zone_name2=beast_list2,..} -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_COWER) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DESC_COWER); print_msg("Requires pet level: "..HUNTERPETSKILLS_DATA_COWER[SkillRank][1]); -- print locations {zone_name=beast_list, zone_name2=beast_list2,..} local ZoneName; local BeastList; for ZoneName, BeastList in HUNTERPETSKILLS_DATA_COWER[SkillRank]["locations"] do -- if filter, else regular if(bFilter) then if(string.lower(ZoneName) == SkillZone) then -- filtering, so make sure it matches -- (SkillZone was string.lower()'ed above) -- print filtered zone and beast list HunterPetSkills_PrintSkillList(ZoneName, BeastList); end else -- no filter, print all zones HunterPetSkills_PrintSkillList(ZoneName, BeastList); end end else print_error("Error, invalid rank!"); end elseif( SkillName == "growl" ) then -- growl: pet level, learned from (and requires), cost -- check if inbounds if( tonumber(SkillRank) <= table.getn(HUNTERPETSKILLS_DATA_GROWL) ) then -- print desc, pet level print_msg("Description: "..HUNTERPETSKILLS_DESC_GROWL); print_msg("Requires pet level: "..HUNTERPETSKILLS_DATA_GROWL[SkillRank][1]); -- print learned from, requires rank X, cost print_msg("Trained: "..HUNTERPETSKILLS_DATA_GROWL[SkillRank]["learn"]); print_msg("Cost: "..HUNTERPETSKILLS_DATA_GROWL[SkillRank]["cost"]); else print_error("Error, invalid rank!"); end else -- invalid skill name print_error("Error: Invalid skill name!"); end end ----------------------------------- -- slash commands ----------------------------------- function HunterPetSkills_SlashCommandHandler(msg) if( msg ) then local command = string.lower(msg); if( command == "" or command == HUNTERPETSKILLS_COMMANDS["help"] ) then -- print out help HelpColor(); --[[ -- old way that failed elseif( string.find(command, "^growl ") ) then -- find a skill name not prefixed by skill local sStart, sEnd, sRank, sZone = string.find(command, "^growl%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("growl", sRank, sZone); ]] -- growl elseif( string.find(command, "^growl%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found growl without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^growl%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("growl", sRank, sZone); -- claw elseif( string.find(command, "^claw%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found claw without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^claw%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("claw", sRank, sZone); -- bite elseif( string.find(command, "^bite%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found bite without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^bite%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("bite", sRank, sZone); -- dash elseif( string.find(command, "^dash%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found dash without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^dash%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("dash", sRank, sZone); -- dive elseif( string.find(command, "^dive%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found dive without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^dive%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("dive", sRank, sZone); -- cower elseif( string.find(command, "^cower%s+(%d+)%s*([%a%d%s%p]*)%s*$") ) then -- found cower without "skill" in the command local sStart, sEnd, sRank, sZone = string.find(command, "^cower%s+(%d+)%s*([%a%d%s%p]*)%s*$"); HunterPetSkills_Skill("cower", sRank, sZone); -- else they used "/sk skill [] elseif( string.find(command, "^"..HUNTERPETSKILLS_COMMANDS["skill"].." ") ) then -- search for a skill -- does %d equal [0-9], and does [%a%d] equal [%w] ? -- %a = all letters -- %d = all digits -- %p = all punctuation -- %s = all space -- %w = alphanumeric local sStart, sEnd, sSkill, sRank, sZone = string.find(command, "^"..HUNTERPETSKILLS_COMMANDS["skill"].."%s+(%a+)%s+(%d+)%s*([%a%d%s%p]*)%s*$"); -- print_debug(string.format("Skill: %s (Rank %s), [%s]", sSkill, sRank, sZone)); HunterPetSkills_Skill(sSkill, sRank, sZone); else -- invalid flag/command print_error("CommandHandler: "..msg..": command not found!"); end else -- no msg print_error("HunterPetSkills: CommandHandler: No command given!"); end end ------------------------------------ -- OnFoo functions ------------------------------------ function HunterPetSkills_OnEvent() if( event == "VARIABLES_LOADED" ) then -- check if variables exist, if not create/set them end end function HunterPetSkills_OnLoad() -- Register events this:RegisterEvent("VARIABLES_LOADED"); -- Register slash command SLASH_HUNTERPETSKILLS1 = "/hunterpetskills"; SLASH_HUNTERPETSKILLS2 = "/petskills"; SLASH_HUNTERPETSKILLS3 = "/sk"; SlashCmdList["HUNTERPETSKILLS"] = function(msg) HunterPetSkills_SlashCommandHandler(msg); end -- loaded okay so show loaded text -- show on defualt chat window if( DEFAULT_CHAT_FRAME ) then DEFAULT_CHAT_FRAME:AddMessage("ninmonkey's "..HUNTERPETSKILLS_MOD_NAME.." loaded!"); end -- show pop-up text like an error UIErrorsFrame:AddMessage("ninmonkey's "..HUNTERPETSKILLS_MOD_NAME.." loaded!", 1.0, 1.0, 1.0, 1.0, UIERRORS_HOLD_TIME); end