Advertisement
Guest User

Untitled

a guest
Jun 26th, 2014
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 10.19 KB | None | 0 0
  1. -- [[ INIT START ]] --
  2.     --
  3.     --                       88                                                                
  4.     --                       ""                                                ,d              
  5.     --                                                                         88              
  6.     --            ,adPPYba,  88  8b,dPPYba,  88,dPYba,,adPYba,   ,adPPYYba,  MM88MMM  ,adPPYba,
  7.     --            I8[    ""  88  88P'   "Y8  88P'   "88"    "8a  ""     `Y8    88    a8P_____88
  8.     --             `"Y8ba,   88  88          88      88      88  ,adPPPPP88    88    8PP"""""""
  9.     --            aa    ]8I  88  88          88      88      88  88,    ,88    88,   "8b,   ,aa
  10.     --   Author:  `"YbbdP"'  88  88          88      88      88  `"8bbdP"Y8    "Y888  `"Ybbd8"'
  11.     --  
  12.     --   Monitor My Hunting!
  13.     --
  14.     --   Version: 1.0
  15.     --   Created: 7.09.2012
  16.     --   Last update: 18.09.2012
  17.     --
  18.    
  19.     MONITOR_MY_HUNTING = MONITOR_MY_HUNTING or {
  20.     SCRIPT_NAME = "Monitor My Hunting",
  21.         SCRIPT_VERSION = "1.0",
  22.        
  23.         CLEARED_STATS = false,
  24.         INITIALIZED = false,
  25.     }
  26.  
  27.     MONITOR_MY_HUNTING.SHOW_ALL_ITEMS = true
  28.     MONITOR_MY_HUNTING.ITEMS_LIST = {
  29.     {NAME = "carrot on a stick", VALUE = 100000},
  30. {NAME = "mastermind potion", VALUE = 5000},
  31. {NAME = "bullseye potion", VALUE = 2500},
  32. {NAME = "small emerald", VALUE = 250},
  33. {NAME = "seeds", VALUE = 150},
  34. {NAME = "haunted piece of wood", VALUE = 115},
  35. {NAME = "dwarven ring", VALUE = 100},
  36. {NAME = "strong health potion", VALUE = 100},
  37. {NAME = "life crystal", VALUE = 85},
  38. {NAME = "scale armor", VALUE = 75},
  39. {NAME = "silver amulet", VALUE = 50},
  40. {NAME = "carniphila seeds", VALUE = 50},
  41. {NAME = "mutated flesh", VALUE = 50},
  42. {NAME = "mana potion", VALUE = 50},
  43. {NAME = "health potion", VALUE = 45},
  44. {NAME = "dark mushroom", VALUE = 100},
  45. {NAME = "Orange Mushroom", VALUE = 150},
  46. {NAME = "gold coin", VALUE = 1},
  47.  
  48.     }
  49.  
  50.     MONITOR_MY_HUNTING.SHOW_ALL_SUPPLIES = false
  51.     MONITOR_MY_HUNTING.SUPPLIES_LIST = {
  52.     {NAME = "strong health potion", PRICE = 100},
  53.     {NAME = "health potion", PRICE = 45},
  54.     {NAME = "mana potion", PRICE = 50},
  55.     {NAME = "great health potion", PRICE = 190},
  56.     }
  57.    
  58.     -- [[ DO NOT CHANGE ANYTHING BELOW THIS LINE. ]] --
  59.    
  60.     MONITOR_MY_HUNTING.TEMP_ITEMS_LIST = MONITOR_MY_HUNTING.TEMP_ITEMS_LIST or {}
  61.     MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST = MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST or {}
  62.     MONITOR_MY_HUNTING.COLORS = MONITOR_MY_HUNTING.COLORS or {
  63.         BLACK = rgbcolor(1, 1, 1),
  64.         ORANGE = rgbcolor(255, 165, 0),
  65.         BLUE = rgbcolor(30, 144, 255),
  66.         CORNSILK = rgbcolor(205, 200, 177),
  67.         WHITE = rgbcolor(255, 255, 255),
  68.         GREEN = rgbcolor(107, 142, 35),
  69.         RED = rgbcolor(178, 34, 34),
  70.     }
  71.    
  72.     local function CreateMessageObject(MESSAGE_DATA)
  73.         if (type(MESSAGE_DATA) ~= "userdata") then
  74.             return setmetatable({__data = {TYPE = -1, TIME_STAMP = -1, SENDER_NAME = "", SENDER_LEVEL = -1, CONTENT = ""}}, MessageMetaTable)
  75.         else
  76.             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)
  77.         end
  78.     end
  79.    
  80.     local function addtextshadow(DISPLAY_TEXT, X_OFFSET, Y_OFFSET, FONT_COLOR)
  81.         setfontcolor(MONITOR_MY_HUNTING.COLORS.BLACK)
  82.         addtext(DISPLAY_TEXT, X_OFFSET + 1, Y_OFFSET + 1)
  83.         setfontcolor(FONT_COLOR)
  84.         addtext(DISPLAY_TEXT, X_OFFSET, Y_OFFSET)
  85.     end
  86. -- [[ INIT END ]] --
  87.  
  88. if (not Stats.Update()) then
  89.     local SERVER_LOG_MESSAGES = getnewmessages("Server Log")
  90.     local SERVER_LOG_MESSAGES_COUNT = SERVER_LOG_MESSAGES.count - 1
  91.    
  92.     for INDEX = 0, SERVER_LOG_MESSAGES_COUNT do
  93.         local MESSAGE_OBJECT = CreateMessageObject(SERVER_LOG_MESSAGES[SERVER_LOG_MESSAGES_COUNT - INDEX])
  94.        
  95.         if (MESSAGE_OBJECT:Type() == 20 and MESSAGE_OBJECT:Content():lower():match("^loot of")) then
  96.             local LOOT_INFO = Message.ParseLootMessage(MESSAGE_OBJECT, true)
  97.  
  98.             if (#LOOT_INFO.NAME > 0) then
  99.                 Stats.__data.MONSTERS_KILLED[LOOT_INFO.NAME] = (Stats.__data.MONSTERS_KILLED[LOOT_INFO.NAME] or 0) + 1
  100.                
  101.                 for _, LOOT_ITEM in ipairs(LOOT_INFO.ITEMS) do
  102.                     if (Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID]) then
  103.                         Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID].QUANTITY = Stats.__data.ITEMS_LOOTED[LOOT_ITEM.ID].QUANTITY + LOOT_ITEM.QUANTITY
  104.                     else
  105.                         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)}
  106.                     end
  107.                 end
  108.             end
  109.         end
  110.     end
  111. end
  112.  
  113. 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
  114.  
  115. if (not RESET_ITEMS_AND_SUPPLIES) then
  116.     for INDEX, LOOT_ITEM in ipairs(MONITOR_MY_HUNTING.ITEMS_LIST) do
  117.         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
  118.             RESET_ITEMS_AND_SUPPLIES = true
  119.             break
  120.         end
  121.     end
  122. end
  123.  
  124. if (not RESET_ITEMS_AND_SUPPLIES) then
  125.     for INDEX, SUPPLY_ITEM in ipairs(MONITOR_MY_HUNTING.SUPPLIES_LIST) do
  126.         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
  127.             RESET_ITEMS_AND_SUPPLIES = true
  128.             break
  129.         end
  130.     end
  131. end
  132.  
  133. if (not MONITOR_MY_HUNTING.INITIALIZED or RESET_ITEMS_AND_SUPPLIES) then
  134.     if (not MONITOR_MY_HUNTING.CLEARED_STATS) then
  135.         Stats.Clear(CLEAR_STATS_ALL)
  136.         Stats.Update()
  137.        
  138.         MONITOR_MY_HUNTING.CLEARED_STATS = true
  139.     end
  140.    
  141.     MONITOR_MY_HUNTING.TEMP_ITEMS_LIST, MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST = {}, {}
  142.        
  143.     for _, LOOT_ITEM in ipairs(MONITOR_MY_HUNTING.ITEMS_LIST) do
  144.         local LOOT_ITEM_ID = Item.GetID(type(LOOT_ITEM.NAME) ~= "table" and LOOT_ITEM.NAME or unpack(LOOT_ITEM.NAME))
  145.        
  146.         Stats.AddItemsLooted(LOOT_ITEM_ID, 0, LOOT_ITEM.VALUE)
  147.         table.insert(MONITOR_MY_HUNTING.TEMP_ITEMS_LIST, {ID = LOOT_ITEM_ID, NAME = LOOT_ITEM.NAME, VALUE = LOOT_ITEM.VALUE})
  148.     end
  149.      
  150.     for _, SUPPLY_ITEM in ipairs(MONITOR_MY_HUNTING.SUPPLIES_LIST) do
  151.         local SUPPLY_ITEM_ID = Item.GetID(type(SUPPLY_ITEM.NAME) ~= "table" and SUPPLY_ITEM.NAME or unpack(SUPPLY_ITEM.NAME))
  152.        
  153.         Stats.AddSuppliesUsed(SUPPLY_ITEM_ID, 0, SUPPLY_ITEM.PRICE)
  154.         table.insert(MONITOR_MY_HUNTING.TEMP_SUPPLIES_LIST, {ID = SUPPLY_ITEM_ID, NAME = SUPPLY_ITEM.NAME, PRICE = SUPPLY_ITEM.PRICE})
  155.     end
  156.    
  157.     MONITOR_MY_HUNTING.INITIALIZED = true
  158. end
  159.  
  160. setposition(Client.ClientWindow().right - 434, Client.WorldWindow().top + 5)
  161.  
  162. local Y_POSITION, INDEX, ITEMS_LOOTED_WORTH, SUPPLIES_USED_WORTH = 30, 0, 0, 0
  163.  
  164. 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)
  165.  
  166. Y_POSITION = Y_POSITION + 20
  167.  
  168. addtextshadow("ITEMS LOOTED", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.BLUE)
  169.  
  170. Y_POSITION = Y_POSITION + 20
  171.  
  172. for _, LOOT_ITEM in pairs(Stats.GetItemsLooted()) do
  173.     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
  174.     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)
  175.     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)
  176.  
  177.     INDEX, ITEMS_LOOTED_WORTH = INDEX + 1, ITEMS_LOOTED_WORTH + (LOOT_ITEM.VALUE * LOOT_ITEM.QUANTITY)
  178.     end
  179. end
  180.  
  181. addtextshadow("Total:", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE)
  182. addtextshadow(sprintf("%s GPs", Misc.FormatNumber(ITEMS_LOOTED_WORTH)), 10 + 35, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.ORANGE)
  183.  
  184. Y_POSITION = Y_POSITION + 20
  185.  
  186. addtextshadow("SUPPLIES USED", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.BLUE)
  187.  
  188. Y_POSITION = Y_POSITION + 20
  189.  
  190. for _, SUPPLY_ITEM in pairs(Stats.GetSuppliesUsed()) do
  191.     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
  192.         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)
  193.         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)
  194.  
  195.         INDEX, SUPPLIES_USED_WORTH = INDEX + 1, SUPPLIES_USED_WORTH + (SUPPLY_ITEM.PRICE * SUPPLY_ITEM.QUANTITY)
  196.     end
  197. end
  198.  
  199. addtextshadow("Total:", 10, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.WHITE)
  200. addtextshadow(sprintf("%s GPs", Misc.FormatNumber(SUPPLIES_USED_WORTH)), 10 + 35, Y_POSITION + (INDEX * 16), MONITOR_MY_HUNTING.COLORS.ORANGE)
  201.  
  202. Y_POSITION = Y_POSITION + 20
  203.  
  204. 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)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement