Example #1
0
def buyItem(storeID, itemID, quantity, price):
    print "Buying {2} of {1} from {0}".format(storeID, itemID, quantity)
    try:
        m = MallItemPurchaseRequest(s, storeID, itemID, price, quantity)
        m.doRequest()
        print "Brought {2} of {1} from {0}".format(storeID, itemID, quantity)
    except:
        print "Oh no!"
Example #2
0
def buyFromMall(session, itemId, quantity=1, maxPrice=0, logFunc=None):
    if logFunc is None:
        logFunc = _empty
    s = tryRequest(StatusRequest(session))
    canBuy = ((int(s.get('hardcore', "1")) == 0
               and int(s.get('roninleft', "1")) == 0)
              or int(s.get('casual', "0")) == 1
              or int(s.get('freedralph', "0")) == 1)
    if not canBuy:
        raise kol.Error.Error("Can't buy from mall in Ronin/Hardcore",
                              kol.Error.USER_IN_HARDCORE_RONIN)

    with InventoryLock.lock:
        item = getItemFromId(itemId)
        itemName = item.get('name', str(itemId))
        numTries = 0
        numBought = 0
        numResults = 10
        logFunc("Trying to buy {}x {} from mall...".format(quantity, itemName))
        while numTries < 10:
            r1 = MallItemSearchRequest(session,
                                       itemName,
                                       maxPrice=maxPrice,
                                       numResults=numResults)
            d1 = tryRequest(r1, numTries=1)
            itemList = [
                item for item in d1['results'] if item.get('id', -1) == itemId
            ]
            listFull = (len(itemList) == numResults)
            availableList = [
                item for item in itemList if not item.get('hitLimit', False)
            ]
            if not itemList:
                return numBought
            if not availableList and listFull:
                numResults *= 2
            while availableList and numBought < quantity:
                item = availableList[0]
                limitedMode = False
                qty = min(quantity, item['quantity'])
                if 'limit' in item:
                    qty = 1
                    limitedMode = True
                price = item['price']
                storeId = item['storeId']

                logFunc("Buying {}x {} @ {} meat from store {}".format(
                    qty, itemName, price, storeId))
                r2 = MallItemPurchaseRequest(session, storeId, itemId, price,
                                             qty)
                try:
                    d2 = tryRequest(r2, numTries=1)
                    numBought += d2['items'][0]['quantity']
                    logFunc("Spent {} meat and got {}x {}.".format(
                        d2['meatSpent'], d2['items'][0]['quantity'], itemName))
                    if not limitedMode:
                        availableList.pop(0)
                except kol.Error.Error as e:
                    if e.code == kol.Error.ITEM_NOT_FOUND:
                        logFunc("Could not buy item. Refreshing...")
                        # refresh search
                        availableList = []
                        continue
                    else:
                        logFunc("Error buying from this store. Moving on...")
                        availableList.pop(0)
                        continue
            numTries += 1
            if numBought >= quantity:
                break
        return numBought
Example #3
0
def mainloop():
    global s
    global chatMgr
    while True:
        event = droid.eventWait().result
        if event["name"] == "key" and event["data"]["key"] == "4":
            return

        id = event["name"]
        if id == "makeToast":
            droid.makeToast(event["data"])
        elif id == "charData":
            droid.dialogCreateSpinnerProgress("Loading", "Loading...")
            droid.dialogShow()
            c = CharpaneRequest(s)
            response = None
            try:
                response = c.doRequest()
            except Error as e:
                alertNotLoggedIn(True)
            message = ""
            title = "Character Data"
            for key in response.keys():
                if key != "effects":
                    message += "%s: %s\n" % (key, response[key])
                else:
                    message += "-------\nEFFECTS:\n"
                    for effect in response["effects"]:
                        message += " - " + effect["name"] + ": " + str(
                            effect["turns"]) + "\n"
            droid.dialogDismiss()
            droid.dialogCreateAlert(title, message)
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogShow()
            # objectPost("charDataInfo", response)
        elif id == "inventory":
            droid.dialogCreateSpinnerProgress("Loading", "Loading...")
            droid.dialogShow()
            i = InventoryRequest(s)
            response = None
            try:
                response = i.doRequest()
            except Error as e:
                alertNotLoggedIn(True)
            title = "Inventory"
            message = ""
            for key in response["items"]:
                message += "%s: %s\n" % (key["name"], key["quantity"])
            droid.dialogDismiss()
            droid.dialogCreateAlert(title, message)
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogShow()
            # objectPost("inventoryInfo", response)
        elif id == "findInventory":
            droid.dialogCreateInput(
                "Item to find:",
                "Enter the name (or partial name) of the item to find")
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogSetNegativeButtonText("Cancel")
            droid.dialogShow()
            response = droid.dialogGetResponse().result
            if response.has_key("which") and response[
                    "which"] == "positive" and response.has_key(
                        "value") and response["value"] != "":
                droid.dialogCreateSpinnerProgress("Searching...",
                                                  "Finding items...")
                droid.dialogShow()
                i = InventoryRequest(s)
                inventory = None
                try:
                    inventory = i.doRequest()
                except Error as e:
                    alertNotLoggedIn(True)
                title = "Search results"
                message = ""
                for item in inventory["items"]:
                    if item.has_key("name") and response["value"].lower(
                    ) in item["name"].lower():
                        message += "%s: %s\n" % (item["name"],
                                                 item["quantity"])
                if message == "":
                    message = "No item matching %s was found" % response[
                        "value"]
                droid.dialogDismiss()
                droid.dialogCreateAlert(title, message)
                droid.dialogSetPositiveButtonText("OK")
                droid.dialogShow()
        elif id == "getNewChat":
            try:
                objectPost("getNewChatResult", chatMgr.getNewChatMessages())
            except Error as e:
                alertNotLoggedIn(True)
        elif id == "sendChat":
            try:
                data = json.loads(event["data"])
                chatMgr.sendChatMessage("/" + data["channel"] + " " +
                                        data["message"])
                droid.eventPost("sendChatResult", "success")
            except Error as e:
                droid.eventPost("sendChatResult", "fail")
        elif id == "getChannels":
            try:
                pass
            except Error as e:
                alertNotLoggedIn(True)
        elif id == "searchMall":
            try:
                m = MallItemSearchRequest(s, event["data"], numResults=10)
                droid.dialogCreateSpinnerProgress(
                    "Searching...", "Searching for \"%s\"" % event["data"])
                droid.dialogShow()
                objectPost("searchMallResult", m.doRequest())
                droid.dialogDismiss()
            except Error as e:
                alertNotLoggedIn(True)
        elif id == "buyMall":
            droid.dialogCreateInput("Purchase mall item",
                                    "Enter quantity to purchase", "0",
                                    "number")
            droid.dialogSetPositiveButtonText("OK")
            droid.dialogSetNegativeButtonText("Cancel")
            droid.dialogShow()
            resp = droid.dialogGetResponse().result
            evtdata = None
            try:
                evtdata = json.loads(event["data"])
                droid.log("evtdata loaded from string")
                droid.log("evtdata = %s" % event["data"])
                buy = MallItemPurchaseRequest(s, evtdata["storeId"],
                                              evtdata["id"], evtdata["price"],
                                              resp["value"])
                droid.log("MIPR created")
                droid.dialogCreateSpinnerProgress("Buying...",
                                                  "Buying item(s)...")
                droid.dialogShow()
                buyResponse = buy.doRequest()
                droid.dialogDismiss()
                droid.dialogCreateAlert(
                    "Results", "Brought %s for %d" %
                    (resp["value"], buyResponse["meatSpent"]))
                droid.dialogSetPositiveButtonText("OK")
                droid.dialogShow()
            except Error as e:
                droid.dialogCreateAlert("Results", e.msg)
                droid.dialogSetPositiveButtonText("OK")
                droid.dialogShow()
            except:
                droid.dialogCreateAlert("WTF", "WTF?")
                droid.dialogSetPositiveButtonText("OK")
                droid.dialogShow()
        elif id == "exit":
            s.logout()
            sys.exit()
            return