-- [[ INIT START ]] -- -- -- 88 -- "" ,d -- 88 -- ,adPPYba, 88 8b,dPPYba, 88,dPYba,,adPYba, ,adPPYYba, MM88MMM ,adPPYba, -- I8[ "" 88 88P' "Y8 88P' "88" "8a "" `Y8 88 a8P_____88 -- `"Y8ba, 88 88 88 88 88 ,adPPPPP88 88 8PP""""""" -- aa ]8I 88 88 88 88 88 88, ,88 88, "8b, ,aa -- Author: `"YbbdP"' 88 88 88 88 88 `"8bbdP"Y8 "Y888 `"Ybbd8"' -- -- Monitor My Hunting! -- -- Version: 1.0 -- Created: 7.09.2012 -- Last update: 18.09.2012 -- MONITOR_MY_HUNTING = MONITOR_MY_HUNTING or { SCRIPT_NAME = "[RP] Cemetery -1", SCRIPT_VERSION = "1.3", CLEARED_STATS = false, INITIALIZED = false, } MONITOR_MY_HUNTING.SHOW_ALL_ITEMS = false MONITOR_MY_HUNTING.ITEMS_LIST = { {NAME = "gold coin", VALUE = 1}, {NAME = "platinum coin", VALUE = 100}, {NAME = "batwing hat", VALUE = 9000}, {NAME = "bonelord eye", VALUE = 2500}, {NAME = "blue robe", VALUE = 1000}, {NAME = "haunted blade", VALUE = 8000}, {NAME = "red robe", VALUE = 10000}, {NAME = "bat wing", VALUE = 50}, {NAME = "black pearl", VALUE = 280}, {NAME = "small amethyst", VALUE = 200}, {NAME = "mercenary sword", VALUE = 12000}, {NAME = "black shield", VALUE = 800}, {NAME = "Hair of a Banshee", VALUE = 350}, {NAME = "Petrified Scream", VALUE = 250}, {NAME = "white pearl", VALUE = 280}, {NAME = "ring of healing", VALUE = 500}, {NAME = "strong mana potion", VALUE = 80}, {NAME = "terra mantle", VALUE = 11000}, {NAME = "sweet smelling bait", VALUE = 100000}, {NAME = "life crystal", VALUE = 500}, {NAME = "piece of dead brain", VALUE = 420}, {NAME = "bonelord helmet", VALUE = 7500}, {NAME = "Spiked Squelcher", VALUE = 5000}, {NAME = "Knight Legs", VALUE = 5000}, {NAME = "Terra Hood", VALUE = 2500}, {NAME = "knight armor", VALUE = 5000}, {NAME = "platinum amulet", VALUE = 2500}, {NAME = "spider silk", VALUE = 5000}, {NAME = "bony tail", VALUE = 210}, {NAME = "Bonebeast Trophy", VALUE = 6000}, {NAME = "Castle Shield", VALUE = 6000}, {NAME = "stone skin amulet", VALUE = 500}, {NAME = "mutated bat ear", VALUE = 420}, {NAME = "Maxilla Maximus", VALUE = 200000}, } MONITOR_MY_HUNTING.SHOW_ALL_SUPPLIES = false MONITOR_MY_HUNTING.SUPPLIES_LIST = { {NAME = "strong mana potion", PRICE = 80}, {NAME = "crystalline arrow", PRICE = 20}, {NAME = "prismatic bolt", PRICE = 20}, {NAME = "power bolt", PRICE = 7}, {NAME = "soft boots", PRICE = 10000}, {NAME = "strong mana potion", PRICE = 80}, {NAME = "prismatic bolt", PRICE = 20}, {NAME = "drill bolt", PRICE = 12}, {NAME = "power bolt bolt", PRICE = 7}, {NAME = "Crystalline Arrow", PRICE = 20}, {NAME = "Onyx Arrow", PRICE = 7}, } -- [[ DO NOT CHANGE ANYTHING BELOW THIS LINE. ]] -- MONITOR_MY_HUNTING.TEMP_ITEMS_LIST = MONITOR_MY_HUNTING.TEMP_ITEMS_LIST or {} MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST = MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST or {} MONITOR_MY_HUNTING.COLORS = MONITOR_MY_HUNTING.COLORS or { BLACK = rgbcolor(1, 1, 1), ORANGE = rgbcolor(255, 165, 0), BLUE = rgbcolor(30, 144, 255), CORNSILK = rgbcolor(205, 200, 177), WHITE = rgbcolor(255, 255, 255), GREEN = rgbcolor(107, 142, 35), RED = rgbcolor(178, 34, 34), } local function CreateMessageObject(MESSAGE_DATA) if (type(MESSAGE_DATA) ~= "userdata") then return setmetatable({__data = {TYPE = -1, TIME_STAMP = -1, SENDER_NAME = "", SENDER_LEVEL = -1, CONTENT = ""}}, MessageMetaTable) else return setmetatable({__data = {TYPE = MESSAGE_DATA.type, TIME_STAMP = Misc.ConvertToSeconds(string.sub(MESSAGE_DATA.text, 1, 5)), SENDER_NAME = MESSAGE_DATA.sender, SENDER_LEVEL = tonumber((tostring(string.match(MESSAGE_DATA.text, ".+ (%b[]): .+")):gsub("[^%d]", ""))) or 0, CONTENT = string.sub(MESSAGE_DATA.text, 7)}}, MessageMetaTable) end end local function addtextshadow(DISPLAY_TEXT, X_OFFSET, Y_OFFSET, FONT_COLOR) setfontcolor(MONITOR_MY_HUNTING.COLORS.BLACK) addtext(DISPLAY_TEXT, X_OFFSET + 1, Y_OFFSET + 1) setfontcolor(FONT_COLOR) addtext(DISPLAY_TEXT, X_OFFSET, Y_OFFSET) end -- [[ INIT END ]] -- if (not Stats.Update()) then local SERVER_LOG_MESSAGES = getnewmessages("Server Log") local SERVER_LOG_MESSAGES_COUNT = SERVER_LOG_MESSAGES.count - 1 for INDEX = 0, SERVER_LOG_MESSAGES_COUNT do local MESSAGE_OBJECT = CreateMessageObject(SERVER_LOG_MESSAGES[SERVER_LOG_MESSAGES_COUNT - INDEX]) if (MESSAGE_OBJECT:Type() == 19 and MESSAGE_OBJECT:Content():lower():match("^loot of")) then local LOOT_INFO = Message.ParseLootMessage(MESSAGE_OBJECT, true) if (#LOOT_INFO.NAME > 0) then Stats.__data.MONSTERS_KILLED[LOOT_INFO.NAME] = (Stats.__data.MONSTERS_KILLED[LOOT_INFO.NAME] or 0) + 1 for _, LOOT_ITEM in ipairs(LOOT_INFO.ITEMS) do if (Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID]) then Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID].QUANTITY = Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID].QUANTITY + LOOT_ITEM.QUANTITY else Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID] = {ID = LOOT_ITEM.ID, NAME = LOOT_ITEM.NAME, QUANTITY = LOOT_ITEM.QUANTITY, VALUE = Item.GetValue(LOOT_ITEM.ID)} end end end end end end local RESET_ITEMS_AND_SUPPLIES = #MONITOR_MY_HUNTING.ITEMS_LIST ~= MONITOR_MY_HUNTING.TEMP_ITEMS_LIST or #MONITOR_MY_HUNTING.SUPPLIES_LIST ~= MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST if (not RESET_ITEMS_AND_SUPPLIES) then for INDEX, LOOT_ITEM in ipairs(MONITOR_MY_HUNTING.ITEMS_LIST) do if (LOOT_ITEM.NAME ~= MONITOR_MY_HUNTING.TEMP_ITEMS_LIST[INDEX].NAME or LOOT_ITEM.VALUE ~= MONITOR_MY_HUNTING.TEMP_ITEMS_LIST[INDEX].VALUE) then RESET_ITEMS_AND_SUPPLIES = true break end end end if (not RESET_ITEMS_AND_SUPPLIES) then for INDEX, SUPPLY_ITEM in ipairs(MONITOR_MY_HUNTING.SUPPLIES_LIST) do if (SUPPLY_ITEM.NAME ~= MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST[INDEX].NAME or SUPPLY_ITEM.PRICE ~= MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST[INDEX].PRICE) then RESET_ITEMS_AND_SUPPLIES = true break end end end if (not MONITOR_MY_HUNTING.INITIALIZED or RESET_ITEMS_AND_SUPPLIES) then if (not MONITOR_MY_HUNTING.CLEARED_STATS) then Stats.Clear(CLEAR_STATS_ALL) Stats.Update() MONITOR_MY_HUNTING.CLEARED_STATS = true end MONITOR_MY_HUNTING.TEMP_ITEMS_LIST, MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST = {}, {} for _, LOOT_ITEM in ipairs(MONITOR_MY_HUNTING.ITEMS_LIST) do local LOOT_ITEM_ID = Item.GetID(type(LOOT_ITEM.NAME) ~= "table" and LOOT_ITEM.NAME or unpack(LOOT_ITEM.NAME)) Stats.AddItemsLooted(LOOT_ITEM_ID, 0, LOOT_ITEM.VALUE) table.insert(MONITOR_MY_HUNTING.TEMP_ITEMS_LIST, {ID = LOOT_ITEM_ID, NAME = LOOT_ITEM.NAME, VALUE = LOOT_ITEM.VALUE}) end for _, SUPPLY_ITEM in ipairs(MONITOR_MY_HUNTING.SUPPLIES_LIST) do local SUPPLY_ITEM_ID = Item.GetID(type(SUPPLY_ITEM.NAME) ~= "table" and SUPPLY_ITEM.NAME or unpack(SUPPLY_ITEM.NAME)) Stats.AddSuppliesUsed(SUPPLY_ITEM_ID, 0, SUPPLY_ITEM.PRICE) table.insert(MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST, {ID = SUPPLY_ITEM_ID, NAME = SUPPLY_ITEM.NAME, PRICE = SUPPLY_ITEM.PRICE}) end MONITOR_MY_HUNTING.INITIALIZED = true end setposition(Client.ClientWindow().right - 434, Client.WorldWindow().top + 5) local Y_POSITION, INDEX, ITEMS_LOOTED_WORTH, SUPPLIES_USED_WORTH = 30, 0, 0, 0 addtextshadow(sprintf("%s v%s", MONITOR_MY_HUNTING.SCRIPT_NAME:upper(), MONITOR_MY_HUNTING.SCRIPT_VERSION), 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.ORANGE) Y_POSITION = Y_POSITION + 20 addtextshadow("ITEMS LOOTED", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.BLUE) Y_POSITION = Y_POSITION + 20 for _, LOOT_ITEM in pairs(Stats.GetItemsLooted()) do if ((MONITOR_MY_HUNTING.SHOW_ALL_ITEMS or table.find(MONITOR_MY_HUNTING.TEMP_ITEMS_LIST, LOOT_ITEM.ID, "ID")) and LOOT_ITEM.QUANTITY > 0) then addtextshadow(((#LOOT_ITEM.NAME > 17 and sprintf("%s...", string.match(string.sub(LOOT_ITEM.NAME, 1, 17), "(.-)%s?$"))) or LOOT_ITEM.NAME):ucwords(), 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.CORNSILK) addtextshadow(sprintf("%s (%sK)", Misc.FormatNumber(LOOT_ITEM.QUANTITY), tostring(math.floor(LOOT_ITEM.VALUE * LOOT_ITEM.QUANTITY / 100) / 10)), 140, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE) INDEX, ITEMS_LOOTED_WORTH = INDEX + 1, ITEMS_LOOTED_WORTH + (LOOT_ITEM.VALUE * LOOT_ITEM.QUANTITY) end end addtextshadow("Total:", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE) addtextshadow(sprintf("%s GPs", Misc.FormatNumber(ITEMS_LOOTED_WORTH)), 10 + 35, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.ORANGE) Y_POSITION = Y_POSITION + 20 addtextshadow("SUPPLIES USED", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.BLUE) Y_POSITION = Y_POSITION + 20 for _, SUPPLY_ITEM in pairs(Stats.GetSuppliesUsed()) do if ((MONITOR_MY_HUNTING.SHOW_ALL_SUPPLIES or table.find(MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST, SUPPLY_ITEM.ID, "ID")) and SUPPLY_ITEM.QUANTITY > 0) then addtextshadow(((#SUPPLY_ITEM.NAME > 17 and sprintf("%s...", string.match(string.sub(SUPPLY_ITEM.NAME, 1, 17), "(.-)%s?$"))) or SUPPLY_ITEM.NAME):ucwords(), 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.CORNSILK) addtextshadow(sprintf("%s (%sK)", Misc.FormatNumber(SUPPLY_ITEM.QUANTITY), tostring(math.floor(SUPPLY_ITEM.PRICE * SUPPLY_ITEM.QUANTITY / 100) / 10)), 140, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE) INDEX, SUPPLIES_USED_WORTH = INDEX + 1, SUPPLIES_USED_WORTH + (SUPPLY_ITEM.PRICE * SUPPLY_ITEM.QUANTITY) end end addtextshadow("Total:", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE) addtextshadow(sprintf("%s GPs", Misc.FormatNumber(SUPPLIES_USED_WORTH)), 10 + 35, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.ORANGE) Y_POSITION = Y_POSITION + 20 addtextshadow(sprintf("%s: %s GPs (%s K/H)", ((ITEMS_LOOTED_WORTH >= SUPPLIES_USED_WORTH and ("PROFIT")) or ("WASTE")), Misc.FormatNumber(ITEMS_LOOTED_WORTH - SUPPLIES_USED_WORTH), tostring(math.floor(((ITEMS_LOOTED_WORTH - SUPPLIES_USED_WORTH) * 3600) / (System.HuntingTime() / 1000) / 100) / 10)), 10, Y_POSITION + (INDEX * 16), ITEMS_LOOTED_WORTH >= SUPPLIES_USED_WORTH and MONITOR_MY_HUNTING.COLORS.GREEN or MONITOR_MY_HUNTING.COLORS.RED)