Requires 23.3.0+. The client will crash because it does not know which NPC you’re in so it cannot add the item to your inventory.
from phBot import *
import struct
def get_npc(name):
npcs = get_npcs()
for k, v in npcs.items():
if v['name'].strip().lower() == name.strip().lower() or v['servername'].strip().lower() == name.strip().lower():
return (k, v)
return None
def get_npc_item(model, item):
goods = get_npc_goods(model)
if goods:
for p, s in goods.items():
for _s, i in s.items():
if i['name'].strip().lower() == item.strip().lower() or i['servername'].strip().lower() == item.strip().lower():
return (p, _s)
return None
def npc_select(args):
if len(args) == 2:
n = get_npc(args[1])
if n:
inject_joymax(0x7045, struct.pack('I', n[0]), False)
return 2000
return 0
def npc_enter(args):
if len(args) == 2:
n = get_npc(args[1])
if n:
inject_joymax(0x7046, struct.pack('IB', n[0], 1), False)
return 2000
return 0
def npc_buy(args):
if len(args) == 4:
n = get_npc(args[1])
if n:
goods = get_npc_item(n[1]['model'], args[2])
if goods:
packet = struct.pack('B', 8)
packet += struct.pack('B', goods[0]) # page
packet += struct.pack('B', goods[1]) # slot
packet += struct.pack('H', int(args[3])) # quantity
packet += struct.pack('I', n[0]) # npc
inject_joymax(0x7034, packet, False)
return 2000
return 0
def npc_exit(args):
if len(args) == 2:
n = get_npc(args[1])
if n:
inject_joymax(0x704B, struct.pack('I', n[0]), False)
return 2000
return 0
log('[%s] Loaded' % __name__)
Script usage:
npc_select,Potion Merchant Manina
npc_enter,Potion Merchant Manina
npc_buy,Potion Merchant Manina,HP Recovery Potion (Medium),1
npc_exit,Potion Merchant Manina