Looking For Addon That Buys Merit KIS

Language: JP EN DE FR
users online
Forum » Windower » General » Looking for Addon that buys Merit KIS
Looking for Addon that buys Merit KIS
Offline
Posts: 173
By Artsncrafts 2019-08-07 16:16:15
Link | Quote | Reply
 
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?
 Asura.Saphyne
Offline
Server: Asura
Game: FFXI
user: saphy
Posts: 17
By Asura.Saphyne 2019-08-07 17:27:35
Link | Quote | Reply
 
https://github.com/Ivaar/Windower-addons/tree/master/htmb
[+]
 Asura.Holdoor
Online
Server: Asura
Game: FFXI
user: holdoor
Posts: 12
By Asura.Holdoor 2019-08-22 16:37:48
Link | Quote | Reply
 
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)
 Asura.Aeonova
Offline
Server: Asura
Game: FFXI
user: aeonova
Posts: 3,113
By Asura.Aeonova 2019-08-22 17:22:53
Link | Quote | Reply
 
Seems legit.
necroskull Necro Bump Detected! [1440 days between previous and next post]
 
Offline
Posts: 0
By 2023-08-01 12:13:33
 Undelete | Edit  | Link | Quote | Reply
 
Post deleted by User.
 
Offline
Posts: 0
By 2023-08-01 12:23:18
 Undelete | Edit  | Link | Quote | Reply
 
Post deleted by User.
[+]
 
Offline
Posts: 0
By 2023-08-01 12:33:52
 Undelete | Edit  | Link | Quote | Reply
 
Post deleted by User.
necroskull Necro Bump Detected! [529 days between previous and next post]
 Carbuncle.Elvaanmoq
Guildwork Premium
Offline
Server: Carbuncle
Game: FFXI
user: Imoq
Posts: 239
By Carbuncle.Elvaanmoq 2025-01-11 23:17:15
Link | Quote | Reply
 
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?
Offline
Posts: 90
By Genoxd 2025-01-12 01:27:38
Link | Quote | Reply
 
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
 Asura.Lockhartt
Offline
Server: Asura
Game: FFXI
user: Dembe
Posts: 21
By Asura.Lockhartt 2025-01-12 08:13:41
Link | Quote | Reply
 
As stated above, its likely this
Code
[24] = {name = 'Wyrm God phantom gem',         cost = 30},
[25] = {name = 'Orb of Radiance phantom gem',  cost = 30},
 Carbuncle.Elvaanmoq
Guildwork Premium
Offline
Server: Carbuncle
Game: FFXI
user: Imoq
Posts: 239
By Carbuncle.Elvaanmoq 2025-01-12 14:58:27
Link | Quote | Reply
 
It works! Thank you so much you two!
Offline
By K123 2025-01-13 06:50:41
Link | Quote | Reply
 
Why stop there? You can make a bot that farms merits, gets ki and does ve BC for you.
Offline
Posts: 16
By Poundsndrome 2025-01-13 13:14:06
Link | Quote | Reply
 
K123 said: »
Why stop there? You can make a bot that farms merits, gets ki and does ve BC for you.
Who hurt you?
[+]
Log in to post.