Esempio n. 1
0
def buy_ticket():
    buy_count = 0
    collide_cash_items()
    time.sleep(0.5)
    total_slots = Inventory.GetItemSlotCount(5)
    empty_slots = Inventory.GetEmptySlotCount(5)
    start_slot = total_slots - empty_slots
    while not GameState.IsInCashShop():
        print("Entering cash shop")
        Terminal.EnterCashShop()
        time.sleep(2)
    while buy_count < buy_tickets:
        time.sleep(3)
        start_slot += 1
        print("Buying ticket number {}".format(buy_count + 1))
        buy_ticket_packet = Packet.COutPacket(buy_ticket_header)
        buy_ticket_packet.EncodeBuffer("54 052F83EE 003567E0")
        Packet.SendPacket(buy_ticket_packet)
        rPacket = Packet.WaitForRecv(0x066F, 100000000)
        rPacket.Skip(1)
        x = rPacket.ReadLong(3)
        time.sleep(1)
        out = hex(x)
        out = '0x' + out[2:].zfill(8)
        first_byte = out[8:10]
        second_byte = out[6:8]
        third_byte = out[4:6]
        fourth_byte = out[2:4]
        take_out = Packet.COutPacket(buy_ticket_header)
        take_out.EncodeBuffer("0F {} {} {} {} 00 00 00 00 05 {} 00".format(
            first_byte, second_byte, third_byte, fourth_byte,
            hex(start_slot).split('x')[1].zfill(2)))
        print("0F {} {} {} {} 00 00 00 00 05 {} 00".format(
            first_byte, second_byte, third_byte, fourth_byte,
            hex(start_slot).split('x')[1].zfill(2)))
        Packet.SendPacket(take_out)
        buy_count += 1

    time.sleep(1)
    print("Leaving cash shop")
    Terminal.LeaveCashShop()
    nCommodityID = iPacket.ReadLong(4)
    nNumber = iPacket.ReadLong(2)
    sBuyCharacterID = iPacket.ReadLong(13)
    ftDateExpire = iPacket.ReadLong(8)  # FileTime(4, 4)
    nPaybackRate = iPacket.ReadLong(4)
    dDiscountRate = iPacket.ReadLong(8)
    dwOrderNo = iPacket.ReadLong(4)
    dwProductNo = iPacket.ReadLong(4)
    bRefundable = iPacket.ReadLong(1)
    nSourceFlag = iPacket.ReadLong(1)
    nStorageBank = iPacket.ReadLong(1)
    # CashItemOption Decode
    liCashItemSN = iPacket.ReadLong(8)
    ftExpireDate = iPacket.ReadLong(8)  # FileTime(4, 4)
    nGrade = iPacket.ReadLong(4)
    iPacket.ReadLong(4)  # aOption[0]
    iPacket.ReadLong(4)  # aOption[1]
    iPacket.ReadLong(4)  # aOption[2]


if GameState.IsInGame():
    if Inventory.GetItemCount(5040004) == 0 and Inventory.GetEmptySlotCount(
            5) > 0 and Character.GetMeso() >= 5200000:
        nEmptySlotPOS = 0
        for i in range(1, Inventory.GetItemSlotCount(5)):
            pItem = Inventory.GetItem(5, i)
            if not pItem.valid:
                nEmptySlotPOS = i
                break
        Terminal.EnterCashShop()
        CashItemResLoadLockerDone()