[Plugin] Clock of Reincarnation

from phBot import *
from threading import Timer
from time import sleep
import struct

# Search an item by name or servername through lambda expression and return his information
def GetItemByExpression(_lambda,start=0,end=0):
	inventory = get_inventory()
	items = inventory['items']
	if end == 0:
		end = inventory['size']
	# check items between intervals
	for slot, item in enumerate(items):
		if start <= slot and slot <= end:
			if item:
				# Search by lambda
				if _lambda(item['name'],item['servername'],item['model']):
					# Save slot location
					item['slot'] = slot
					return item
	return None

# Check and use all clocks on inventory
def CheckClocks():
	while True:
		# Find clock
		itemClock = GetItemByExpression(lambda n,s,m: n.startswith('Clock of Reincarnation'),13) 
		if itemClock:
			itemPetPick = GetItemByExpression(lambda n,s,m: '_COS_P_' in s and get_item(m)['tid3'] == 2,13)
			if itemPetPick:
				# Build packet
				p = struct.pack('B',itemClock['slot'])
				p+= b'\xED\x66' # usage type
				p+= b'\x6C' # Pick pet slot set to last slot of page 3
				p+=struct.pack('B',itemPetPick['slot'])
				# Inject it
				log('Plugin: Using "'+itemClock['name']+'" on "'+itemPetPick['name']+'"...')
				inject_joymax(0x704C,p,True)
				# Some delay before trying to look another one
				sleep(2.0)
			else:
				log('Plugin: Pet not found on inventory to use clock!')
				break
		else:
			break
    
# All packets received from game server will be passed to this function
# Returning True will keep the packet and False will not forward it to the game client
def handle_joymax(opcode,data):
	# SERVER_NPC_TALK_EXIT_RESPONSE
	if opcode == 0xB04B:
		if data[0] == 1:
			Timer(0.001,CheckClocks).start()
	return True

log('Plugin: Clock of Reincarnation is operational.')

NOTE 5555 days is the limit for pick pet time after that u will be getting disconnected everytime once plugin uses clock on pet

Plugins is not mine just something that was passed to me ages ago

3 Likes