Hey I saw this posted on ffxiah awhile back but i cant seem to find it.
It was an addon that allowed people to buy merit KIs with a command. Anyone know the name?
Looking For Addon That Buys Merit KIS |
||
|
Looking for Addon that buys Merit KIS
Hey I saw this posted on ffxiah awhile back but i cant seem to find it.
It was an addon that allowed people to buy merit KIs with a command. Anyone know the name? i got other htmb but i dont know how it set and start
ki id = 2619 zone id=201 and npc=231 Code _addon.author = 'Lygre + Colway' _addon.version = '2.0.1' _addon.commands = {'HTMB'} require('tables') require('strings') require('luau') require('pack') require('lists') require('logger') require('sets') files = require('files') packets = require('packets') require('chat') res = require('resources') require 'Packet_Injection' require 'Commad_Generation' require 'Iterator_functions' -- packets to track -- pv t i 0x032|0x034|0x055|0x065 o 0x016|0x05b|0x05c -- pv l f both 0x032 0x034 0x055 0x065 0x016 0x05b 0x05c function load_zones() local f = io.open(windower.addon_path..'data/zone_info.lua','r') local t = f:read("*all") t = assert(loadstring(t))() f:close() return t end function load_KIs() local f = io.open(windower.addon_path..'data/ki_info.lua','r') local t = f:read("*all") t = assert(loadstring(t))() f:close() return t end function load_NPCs() local f = io.open(windower.addon_path..'data/npc_info.lua','r') local t = f:read("*all") t = assert(loadstring(t))() f:close() return t end function load_HPs() local f = io.open(windower.addon_path..'data/HP_info.lua','r') local t = f:read("*all") t = assert(loadstring(t))() f:close() return t end zones = load_zones() key_items = load_KIs() npcs = load_NPCs() HPs = load_HPs() player = windower.ffxi.get_player() number_of_merits = 0 current_zone = windower.ffxi.get_info().zone current_HP_number = 0 pkt = {} first_poke = false number_of_attempt = 1 activate_by_addon = false activate_by_addon_npc = false activate_by_addon_HP = false usable_commands = {} ki_commands = {} current_ki_id = 0 forced_update = false windower.register_event('addon command', function(...) local args = T{...} local cmd = args[1] local lcmd = cmd:lower() if table.length(usable_commands) > 0 then for k,v in pairs(usable_commands) do if v['command_name']:contains(lcmd) and v['command_name']:contains(args[2]) then player = windower.ffxi.get_player() current_zone = windower.ffxi.get_info().zone pkt = validate() log('Checking data for BCNM in zone!') number_of_attempt = 1 activate_by_addon = true current_ki_id = v['KI ID'] poke_warp(current_zone,v['KI ID']) end end end if table.length(ki_commands) > 0 then local found = false for k,v in pairs(ki_commands) do if (v['command_name']:contains(args[1]) and v['command_name']:contains(args[2])) or (v['command_name_nickname']:contains(args[1]) and v['command_name_nickname']:contains(args[2])) then player = windower.ffxi.get_player() current_zone = windower.ffxi.get_info().zone pkt = validate() log('Checking data for KI NPC in zone!') activate_by_addon_npc = true current_ki_id = v['KI ID'] poke_npc(current_zone,v['KI ID']) found = true end end if found == false then error('You have entred an incorrect command!') end end if lcmd == 'force' then warning('Force checking ki count AND battlefields in zone') current_zone = windower.ffxi.get_info().zone forced_update = true check_zone_for_battlefield(current_zone) local packet = packets.new('outgoing', 0x061, {}) packets.inject(packet) coroutine.sleep(1.5) find_missing_kis(current_zone) end if lcmd == 'crystal' then player = windower.ffxi.get_player() current_zone = windower.ffxi.get_info().zone pkt = validate() activate_by_addon_HP = true poke_warp_HP(current_zone) if args[2] == 'all' then coroutine.sleep(1) windower.send_command('send @others htmb crystal') end end end) function validate() local me local result = {} for i,v in pairs(windower.ffxi.get_mob_array()) do if v['name'] == player.name then result['me'] = i end end return result end -- parsing of relevant incoming packets to perform actions windower.register_event('incoming chunk',function(id,data,modified,injected,blocked) if id == 0x034 or id == 0x032 then -- original poke i.e. opening entry menu if activate_by_addon == true then log('packet 0x034 received (menu entry packet)') local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) --if first time poking the door send the assosiated junk 0x016 packets if first_poke then inject_anomylus_packets(current_zone) first_poke = false end -- send menu choice for VD log('Sending first 0x05B packet (menu choice)') create_0x05B(current_zone,1,true) -- send entry request for BCNM room 1 log('Sending 0x05C packet (Entry request for BCNM room 1)') create_0x05C(zones[current_zone][current_ki_id]['0x05C'][number_of_attempt]) number_of_attempt = number_of_attempt + 1 return true elseif activate_by_addon_npc == true then log('packet 0x034 received (menu entry packet for ki buying)') local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) -- itterate through ki id's for the option index associated for k, v in pairs(key_items[current_ki_id]) do if k == "Option Index" then if v[2] then log('Sending first 0x05B packet (switch page in menu)') create_0x05B_ki(current_zone,2,true,current_ki_id) log('Sending second 0x05B packet (menu choice)') create_0x05B_ki(current_zone,2,false,current_ki_id) return true else log('Sending first 0x05B packet (menu choice)') create_0x05B_ki(current_zone,1,false,current_ki_id) return true end end end elseif activate_by_addon_HP == true and current_HP_number > 0 then -- create_0x05B_HP(zone_number,option_index,message,HP_number,unknown_number) log('Sending 1st 0x05B packet') create_0x05B_HP(current_zone,1,true,current_HP_number,1) log('Sending 2nd 0x05B packet') create_0x05B_HP(current_zone,2,true,current_HP_number,2) log('Sending 3rd 0x05B packet') create_0x05B_HP(current_zone,3,false,current_HP_number,3) local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) pkt = {} activate_by_addon_HP = false current_HP_number = 0 return true end elseif id == 0x065 then -- confirmation packet of available BCNM room if activate_by_addon == true then log('packet 0x065 received (Entry confirmation packet)') -- parse the packet for its data local packet = packets.parse('incoming', data) -- if unknow = 1 then room 1 is free, for farvour confirmation we check co-ordinates against ones we sent if packet['_unknown1'] == 1 then log('Confirmed BCNM room '.. (number_of_attempt - 1) ..' is open, waiting for 0x055 packet') else -- failed to entre room 1 so we cycle to room 2 then room 3 log('BCNM Room ' .. (number_of_attempt - 1) .. ' is full. Attempting next BCNM room!') if number_of_attempt < 4 then create_0x05C(zones[current_zone][current_ki_id]['0x05C'][number_of_attempt]) number_of_attempt = number_of_attempt + 1 else error('All Rooms are full, sending 0x05B to exit.') create_0x05B(current_zone,3,false) local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) number_of_attempt = 1 return true end end return true end elseif id == 0x055 then -- change in player KI data confirming entry if activate_by_addon == true then notice('Confirmed entry to BCNM room ' .. (number_of_attempt - 1) .. ' !') create_0x05B(current_zone,2,false) local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) activate_by_addon = false delete_commands() number_of_attempt = 1 pkt = {} return true elseif activate_by_addon_npc == true then local packet = packets.new('outgoing', 0x016, { ["Target Index"]=pkt['me'], }) packets.inject(packet) pkt = {} activate_by_addon_npc = false notice('KI \"' .. (key_items[current_ki_id]['KI Name']):color(215) .. '\" has been baught!' ) delete_ki_commands() coroutine.sleep(3) windower.send_command('htmb force') return true end elseif id == 0x63 and data:byte(5) == 2 and forced_update == true then number_of_merits = data:byte(11)%128 log('Total merit update. Total: ' .. number_of_merits) forced_update = false end end) -- event to track zone change and reset first time poke windower.register_event('zone change',function(new_id,old_id) if first_poke and current_zone ~= new_id then first_poke = false activate_by_addon = false log('You have left the BCNM Entry area!') delete_commands() end if zones[new_id] then log('You have zoned into a BCNM Entry area. Waiting for player data...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') check_zone_for_battlefield(new_id) elseif npcs[new_id] then log('You have zoned into an area with a KI npc. Waiting for player data...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') coroutine.sleep(2) log('...') forced_update = true local packet = packets.new('outgoing', 0x061, {}) packets.inject(packet) coroutine.sleep(1.5) notice("Checking for missing KI's!") find_missing_kis(new_id) else delete_commands() end end) ![]() ![]() Holy necro bump (I know). I've never used something like this. Do these things work? I tried to use https://github.com/Ivaar/Windower-addons/tree/master/htmb adding the line
Code [24] = {name = 'Orb of Radiance phantom gem', cost = 30}, for Orb of Radiance but it doesn't seem to work. Is there any alternative addon or a fix for buying in bulk? Just guessing here since I've never used this either. The list is also missing Shinryu. You should add that too since Orb of Radiance should be 25 not 24
As stated above, its likely this
Code [24] = {name = 'Wyrm God phantom gem', cost = 30}, [25] = {name = 'Orb of Radiance phantom gem', cost = 30}, It works! Thank you so much you two!
Why stop there? You can make a bot that farms merits, gets ki and does ve BC for you.
K123 said: » Why stop there? You can make a bot that farms merits, gets ki and does ve BC for you. |
|
All FFXI content and images © 2002-2025 SQUARE ENIX CO., LTD. FINAL
FANTASY is a registered trademark of Square Enix Co., Ltd.
|