Attendance Registration

Originally written by ImSaSuKi on the old forum. I’m not sure if he’s still around, so I’ve been updating it each time Joymax enables the attendance event.

Remember to remove it after the event is over!

from phBot import *
from threading import Timer
from time import gmtime, strftime
import QtBind, struct

YEAR = 23
START_MONTH = 7
END_MONTH = 8

# Initializing GUI
gui = QtBind.init(__name__,"xAutoAttendant")
lblNpcs = QtBind.createLabel(gui,"- Obtain coupon through log-in everyday & Rewards according to how many days you log-in the game",21,11)
btnAttendance = QtBind.createButton(gui,'btnAttendance_clicked',"   Attendance Check   ",600,33)
btnCoupon = QtBind.createButton(gui,'btnCoupon_clicked',"   Subscription Card (Continuity)   ",21,33)
btnTicket = QtBind.createButton(gui,'btnTicket_clicked',"   Chamber of Vicious Shadows Entrance Ticket (Acumulation)   ",21,55)
btnMagicP = QtBind.createButton(gui,'btnMagicP_clicked',"   New Premium Magic POP Card (Acumulation)   ",21,77)
btnRClock = QtBind.createButton(gui,'btnRClock_clicked',"   Revival Clock (7days) (Acumulation)   ",21,99)
btnPGoldt = QtBind.createButton(gui,'btnPGoldt_clicked',"   Premium Gold Time Plus (7days) (Acumulation)   ",21,121)

isConnected = False
log('Plugins: xAutoAttendant Plugin Succesfully loaded ~ by ProjeXNET [Auguest 2016]')

# Called when the bot successfully connects to the game server
def connected():
	global isConnected
	isConnected = False

# Called when the character enters the game world
def joined_game():
	locale = get_locale()
	if locale == 18 or locale == 65 or locale == 52 or locale == 56:
		global isConnected
		isConnected = True
		check_attendance()
	
# All packets received from Silkroad will be passed to this function
# Returning True will keep the packet and False will not forward it to the game server
def handle_joymax(opcode, data):
	if opcode == 0xB4DD:
		if data[0] == 0x02 and data[1] == 0x01:
			log("Event: Attendance check completed ~ xAutoAttendant Plugin")
	if opcode == 0xB034:
		if data[0] == 0x01 and data[1] == 0x0E: #Flag & Event
			#Reading reward
			log("Event: Reward obtained ["+get_item(struct.unpack_from("<i",data,8)[0])['name']+"]")
	return True

# Try to check the Attendance Event
def check_attendance():
	global YEAR, START_MONTH, END_MONTH
	dateNow = gmtime()
	# Checking maxim date of event
	year = int(strftime("%y",dateNow))
	month = int(strftime("%m",dateNow))
	if year == YEAR and (month >= START_MONTH and month <= END_MONTH):
		log("Event: Checking Attendance event ~ xAutoAttendant Plugin")
		Packet = bytearray()
		Packet.append(0x01)
		# Open attendance (return data for assistance check)
		Timer(10.0, inject_joymax,(0x74DD,Packet,False)).start()
		Packet = bytearray()
		Packet.append(0x02)
		# Try to check day
		Timer(15.0, inject_joymax,(0x74DD,Packet,False)).start()
		# Start timer for try to check in 6 hours
		Timer(21600.0,check_attendance).start()

def btnAttendance_clicked():
	if isConnected:
		check_attendance()

def btnCoupon_clicked():
	if isConnected:
		Packet = bytearray()
		Packet.append(0x04) # Selecting
		Packet = Packet + struct.pack('<i', 1) # Add reward ID
		inject_joymax(0x74DD,Packet,False)
		Packet = bytearray()
		Packet.append(0x05) # Getting reward
		Packet = Packet + struct.pack('<i', 1) # Add reward ID
		Packet = Packet + struct.pack('<i', 1) # Maybe is the quantity
		Timer(2.5, inject_joymax,(0x74DD,Packet,False)).start()
	
def btnTicket_clicked():
	if isConnected:
		Packet = bytearray()
		Packet.append(0x04)
		Packet = Packet + struct.pack('<i', 2)
		inject_joymax(0x74DD,Packet,False)
		Packet = bytearray()
		Packet.append(0x05)
		Packet = Packet + struct.pack('<i', 2)
		Packet = Packet + struct.pack('<i', 1)
		Timer(2.5, inject_joymax,(0x74DD,Packet,False)).start()

def btnMagicP_clicked():
	if isConnected:
		Packet = bytearray()
		Packet.append(0x04)
		Packet = Packet + struct.pack('<i', 3)
		inject_joymax(0x74DD,Packet,False)
		Packet = bytearray()
		Packet.append(0x05)
		Packet = Packet + struct.pack('<i', 3)
		Packet = Packet + struct.pack('<i', 1)
		Timer(2.5, inject_joymax,(0x74DD,Packet,False)).start()

def btnRClock_clicked():
	if isConnected:
		Packet = bytearray()
		Packet.append(0x04)
		Packet = Packet + struct.pack('<i', 4)
		inject_joymax(0x74DD,Packet,False)
		Packet = bytearray()
		Packet.append(0x05)
		Packet = Packet + struct.pack('<i', 4)
		Packet = Packet + struct.pack('<i', 1)
		Timer(2.5, inject_joymax,(0x74DD,Packet,False)).start()

def btnPGoldt_clicked():
	if isConnected:
		Packet = bytearray()
		Packet.append(0x04)
		Packet = Packet + struct.pack('<i', 5)
		inject_joymax(0x74DD,Packet,False)
		Packet = bytearray()
		Packet.append(0x05)
		Packet = Packet + struct.pack('<i', 5)
		Packet = Packet + struct.pack('<i', 1)
		Timer(2.5, inject_joymax,(0x74DD,Packet,False)).start()
3 Likes