GlobalEvent Shop System delivery for TFS 1.1+ with Store Inbox

Discussion in 'GlobalEvents, Spells & CreatureEvents' started by Gesior.pl, Sep 3, 2016.

  1. Gesior.pl

    Gesior.pl Mega Noob&LOL 2012

    Joined:
    Sep 18, 2007
    Messages:
    1,794
    If you use one of TFS 1.1+ based engines that got Store Inbox, you can use new LUA script for delivery from website shop.
    New code delivers items and containers with items to Store Inbox of players.
    There is also full error reporting. If anything is wrong with shop offer on website or server config, it will show error with description in server console and send message to player about problem with item delivery.

    Code tested on 'OTX 3 10.97':
    Code:
    -- ### CONFIG ###
    -- message to player "type", if delivery of item debugs client, it can be because of undefinied type (type that does not exist in your server LUA)
    SHOP_MSG_TYPE = MESSAGE_EVENT_ADVANCE
    -- ### END OF CONFIG ###
    
    function onThink(interval)
       local resultId = db.storeQuery("SELECT * FROM z_ots_comunication")
        if resultId ~= false then
            repeat
                local transactionId = tonumber(result.getDataInt(resultId, "id"))
                local player = Player(result.getDataString(resultId, "name"))
    
                if player then
                    local itemId = result.getDataInt(resultId, "param1")
                    local itemCount = result.getDataInt(resultId, "param2")
                    local containerId = result.getDataInt(resultId, "param3")
                    local containerItemsInsideCount = result.getDataInt(resultId, "param4")
                    local shopOfferType = result.getDataString(resultId, "param5")
                    local shopOfferName = result.getDataString(resultId, "param6")
    
    -- DELIVER ITEM
                    if shopOfferType == 'item' then
                        local newItemUID = doCreateItemEx(itemId, itemCount)
                        --  item does not exist, wrong id OR count
                        if not newItemUID then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                            return true
                        end
                        -- change item UniqueID to object of class Item
                        local newItem = Item(newItemUID)
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newItem)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                        end
    
    -- DELIVER CONTAINER
                    elseif shopOfferType == 'container' then
                        -- create empty container
                        local newContainerUID = doCreateItemEx(containerId, 1)
                        -- container item does not exist OR item is not Container
                        if not newContainerUID or not Container(newContainerUID) then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create container - invalid container ID - CONTAINER ID:' .. containerId)
                            return true
                        end
                        -- change container UniqueID to object of class Container
                        local newContainer = Container(newContainerUID)
    
                        -- add items to container
                        for i = 1, containerItemsInsideCount do
                            -- create new item
                            local newItemUID = doCreateItemEx(itemId, itemCount)
                            --  item does not exist, wrong id OR count
                            if not newItemUID then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                            -- change item UniqueID to object of class Item
                            local newItem = Item(newItemUID)
    
                            -- add item to container
                            local addItemToContainerResult = newContainer:addItemEx(newItem)
                            -- report error if it's not possible to add item to container
                            if type(addItemToContainerResult) ~= "number" or addItemToContainerResult ~= RETURNVALUE_NOERROR then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to container - item is not pickable OR variable "RETURNVALUE_NOERROR" is not definied in LUA - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                        end
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newContainer)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add container with items to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount .. ', CONTAINER ID:' .. containerId .. ', ITEMS IN CONTAINER COUNT:' .. containerItemsInsideCount)
                        end
    
    -- DELIVER YOUR CUSTOM THINGS
                    elseif shopOfferType == 'mything' then -- addon, mount etc.
                        -- HERE YOUR CODE
                    end
                end
            until not result.next(resultId)
            result.free(resultId)
        end
    
        return true
    end
    
    GIST:
    https://gist.github.com/gesior/10ce453d85d0f3f3eab00c039e5ca2e1

    It's written in pure LUA object-oriented programming (TFS 1.1+) and uses 'asyncQueries' to increase execution speed when it's possible, so you can use it as example of 'new code'.
     
    Last edited: Sep 3, 2016
    danio4don, Raggaer, MartyX and 4 others like this.
  2. Fencore Team

    Fencore Team Member

    Joined:
    Sep 2, 2016
    Messages:
    37
    first one that tested on the server with gesior ^^ Brilliant System!
     
  3. malucooo

    malucooo Member

    Joined:
    Sep 5, 2007
    Messages:
    60
    i include mounts and Addons! enjoy it =]~

    Code:
    -- ### CONFIG ###
    -- message to player "type", if delivery of item debugs client, it can be because of undefinied type (type that does not exist in your server LUA)
    SHOP_MSG_TYPE = MESSAGE_EVENT_ADVANCE
    -- ### END OF CONFIG ###
    
    function onThink(interval)
        local resultId = db.storeQuery("SELECT * FROM z_ots_comunication")
        if resultId ~= false then
            repeat
                local transactionId = tonumber(result.getDataInt(resultId, "id"))
                local player = Player(result.getDataString(resultId, "name"))
    
                if player then
                    local itemId = result.getDataInt(resultId, "param1")
                    local itemCount = result.getDataInt(resultId, "param2")
                    local containerId = result.getDataInt(resultId, "param3")
                    local containerItemsInsideCount = result.getDataInt(resultId, "param4")
                    local shopOfferType = result.getDataString(resultId, "param5")
                    local shopOfferName = result.getDataString(resultId, "param6")
    
    -- DELIVER ITEM
                    if shopOfferType == 'item' then
                        local newItemUID = doCreateItemEx(itemId, itemCount)
                        --  item does not exist, wrong id OR count
                        if not newItemUID then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                            return true
                        end
                        -- change item UniqueID to object of class Item
                        local newItem = Item(newItemUID)
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newItem)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                        end
    
    -- DELIVER CONTAINER
                    elseif shopOfferType == 'container' then
                        -- create empty container
                        local newContainerUID = doCreateItemEx(containerId, 1)
                        -- container item does not exist OR item is not Container
                        if not newContainerUID or not Container(newContainerUID) then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create container - invalid container ID - CONTAINER ID:' .. containerId)
                            return true
                        end
                        -- change container UniqueID to object of class Container
                        local newContainer = Container(newContainerUID)
    
                        -- add items to container
                        for i = 1, containerItemsInsideCount do
                            -- create new item
                            local newItemUID = doCreateItemEx(itemId, itemCount)
                            --  item does not exist, wrong id OR count
                            if not newItemUID then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                            -- change item UniqueID to object of class Item
                            local newItem = Item(newItemUID)
    
                            -- add item to container
                            local addItemToContainerResult = newContainer:addItemEx(newItem)
                            -- report error if it's not possible to add item to container
                            if type(addItemToContainerResult) ~= "number" or addItemToContainerResult ~= RETURNVALUE_NOERROR then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to container - item is not pickable OR variable "RETURNVALUE_NOERROR" is not definied in LUA - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                        end
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newContainer)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add container with items to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount .. ', CONTAINER ID:' .. containerId .. ', ITEMS IN CONTAINER COUNT:' .. containerItemsInsideCount)
                        end
    
    -- DELIVER YOUR CUSTOM THINGS
                    elseif shopOfferType == 'mount' then -- addon, mount etc.
                    local player = Player(cid)
                    if (getPlayerStorageValue(cid,itemId) == -1) then
                    doPlayerAddMount(cid, itemId)
                    setPlayerStorageValue(cid,itemId,1)
                    doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE)
                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. Please desconnect and re-connect you character!')
                    db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                    db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                    else
                    doPlayerSendTextMessage(cid,25,"You Already have this Mount.")
                    end
                    return TRUE
                    end               
    
                    elseif shopOfferType == 'addon' then                 local player = Player(cid)
                    if (getPlayerStorageValue(cid,itemId) == -1) then
                    doPlayerAddOutfit(cid, itemId, 3)
                    setPlayerStorageValue(cid,itemId,1)
                    doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE)
                    doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. Please desconnect and re-connect you character!')
                    db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                    db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                    else
                    doPlayerSendTextMessage(cid,25,"You Already have this Outfit.")
                    end
                    return TRUE
                    end               
                end
            until not result.next(resultId)
            result.free(resultId)
        end
    
        return true
    end
     
  4. darkjav

    darkjav Senior Developer

    Joined:
    Apr 29, 2008
    Messages:
    179
    @malucooo I get this error:

    Code:
    [Warning - Event::checkScript] Can not load script: scripts/others/shop.lua
    data/globalevents/scripts/others/shop.lua:138: 'until' expected (to close 'repeat' at line 9) near 'end'
    
    EDIT:
    I already fix, thanks alot @Gesior.pl :D
     
    Last edited: Sep 3, 2016
  5. Gesior.pl

    Gesior.pl Mega Noob&LOL 2012

    Joined:
    Sep 18, 2007
    Messages:
    1,794
    I changed variable names and there is no 'cid' anymore, so your old mount and addon scripts will not work, but I will fix it on evening and post here.

    EDIT:
    Script with popular addon and mount system (these types are not available in normal Gesior 2012, you need to create shopsystem.php page by yourself or find it somewhere):
    Code:
    -- ### CONFIG ###
    -- message to player "type", if delivery of item debugs client, it can be because of undefinied type (type that does not exist in your server LUA)
    SHOP_MSG_TYPE = MESSAGE_EVENT_ADVANCE
    -- ### END OF CONFIG ###
    
    function onThink(interval)
        local resultId = db.storeQuery("SELECT * FROM z_ots_comunication")
        if resultId ~= false then
            repeat
                local transactionId = tonumber(result.getDataInt(resultId, "id"))
                local player = Player(result.getDataString(resultId, "name"))
    
                if player then
                    local itemId = result.getDataInt(resultId, "param1")
                    local itemCount = result.getDataInt(resultId, "param2")
                    local containerId = result.getDataInt(resultId, "param3")
                    local containerItemsInsideCount = result.getDataInt(resultId, "param4")
                    local shopOfferType = result.getDataString(resultId, "param5")
                    local shopOfferName = result.getDataString(resultId, "param6")
    
    -- DELIVER ITEM
                    if shopOfferType == 'item' then
                        local newItemUID = doCreateItemEx(itemId, itemCount)
                        --  item does not exist, wrong id OR count
                        if not newItemUID then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                            return true
                        end
                        -- change item UniqueID to object of class Item
                        local newItem = Item(newItemUID)
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newItem)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                        end
    
    -- DELIVER CONTAINER
                    elseif shopOfferType == 'container' then
                        -- create empty container
                        local newContainerUID = doCreateItemEx(containerId, 1)
                        -- container item does not exist OR item is not Container
                        if not newContainerUID or not Container(newContainerUID) then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create container - invalid container ID - CONTAINER ID:' .. containerId)
                            return true
                        end
                        -- change container UniqueID to object of class Container
                        local newContainer = Container(newContainerUID)
    
                        -- add items to container
                        for i = 1, containerItemsInsideCount do
                            -- create new item
                            local newItemUID = doCreateItemEx(itemId, itemCount)
                            --  item does not exist, wrong id OR count
                            if not newItemUID then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot create item - invalid item ID OR count - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                            -- change item UniqueID to object of class Item
                            local newItem = Item(newItemUID)
    
                            -- add item to container
                            local addItemToContainerResult = newContainer:addItemEx(newItem)
                            -- report error if it's not possible to add item to container
                            if type(addItemToContainerResult) ~= "number" or addItemToContainerResult ~= RETURNVALUE_NOERROR then
                                player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                                print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add item to container - item is not pickable OR variable "RETURNVALUE_NOERROR" is not definied in LUA - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount)
                                return true
                            end
                        end
    
                        -- get player store inbox as container, so we can add item to it
                        local playerStoreInbox = player:getSlotItem(CONST_SLOT_STORE_INBOX)
                        -- cannot open Store Inbox, report problem
                        if not playerStoreInbox then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot open player "Store Inbox" - it is not supported in your server OR variable "CONST_SLOT_STORE_INBOX" is not definied in LUA')
                            return true
                        end
                        -- add container with items to Store Inbox
                        receivedItemStatus = playerStoreInbox:addItemEx(newContainer)
    
                        if type(receivedItemStatus) == "number" and receivedItemStatus == RETURNVALUE_NOERROR then
                            player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop. You can find your item in STORE INBOX (under EQ).')
                            db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                            db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                        else
                            player:sendTextMessage(SHOP_MSG_TYPE, 'Website Shop bugged. Contact with administrator! Error is visible in server console.')
                            print('ERROR! Website Shop (' .. player:getName() .. ') - cannot add container with items to STORE INBOX - unknown reason, is it\'s size limited and it is full? - ITEM ID: ' .. itemId .. ', ITEM COUNT: ' .. itemCount .. ', CONTAINER ID:' .. containerId .. ', ITEMS IN CONTAINER COUNT:' .. containerItemsInsideCount)
                        end
    
    -- DELIVER YOUR CUSTOM THINGS
                    elseif shopOfferType == 'mount' then -- addon, mount etc.
                        player:addMount(itemId)
                        player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
                        player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop.')
                        db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                        db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)    
    
                    elseif shopOfferType == 'addon' then
                        player:addOutfit(itemId)
                        player:addOutfitAddon(itemId, 3)
                        player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
                        player:sendTextMessage(SHOP_MSG_TYPE, 'You received ' .. shopOfferName .. ' from Website Shop.')
                        db.asyncQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. transactionId)
                        db.asyncQuery("UPDATE `z_shop_history_item` SET `trans_state`= 'realized', `trans_real`=" .. os.time() .. " WHERE `id` = " .. transactionId)
                    end
                end
            until not result.next(resultId)
            result.free(resultId)
        end
    
        return true
    end
    GIST:
    https://gist.github.com/gesior/0de6fa34a7dfe5c5269f1765e8f6a9d4
     
    Last edited: Sep 4, 2016
  6. Majster12

    Majster12 Member

    Joined:
    Feb 20, 2009
    Messages:
    128
    Everything working fine but when player never opened Store Inbox before there are a lot of errors.
    [​IMG]
     
  7. Gesior.pl

    Gesior.pl Mega Noob&LOL 2012

    Joined:
    Sep 18, 2007
    Messages:
    1,794
    Report it to your distro authors. It's bug in server sources.
    You can add to message to player information that, he needs to open STORE INBOX to get his items.
    Thank you for report!
     
  8. Romenes Hasvu

    Romenes Hasvu Banned User

    Joined:
    Nov 20, 2015
    Messages:
    300
    Hey @Gesior.pl help!!
    My dont receiving addons/mounts, only receive the items
    can you help me?
     
  9. StreamSide

    StreamSide Joseluis Gonzalez

    Joined:
    Aug 31, 2007
    Messages:
    2,517
    cus there is not addons or mounts in the gesior script
     
  10. Romenes Hasvu

    Romenes Hasvu Banned User

    Joined:
    Nov 20, 2015
    Messages:
    300
    My shop script (working) > but I need to go in store inbox...

    @StreamSide you can give me one good??

    My code working (without store inbox) look:

    Code:
    SHOP_MSG_TYPE = 18
    -- time (in seconds) between connections to SQL database by shop script
    SQL_interval = 30
    -- ### END OF CONFIG ###
    function onThink(interval, lastExecution)
        local result_plr = db.storeQuery("SELECT * FROM z_ots_comunication")
        if(result_plr ~= false) then
            repeat
                local id = tonumber(result.getDataInt(result_plr, "id"))
                local action = tostring(result.getDataString(result_plr, "action"))
                local delete = tonumber(result.getDataInt(result_plr, "delete_it"))
                local cid = getPlayerByName(tostring(result.getDataString(result_plr, "name")))
                if(cid) then
                    local itemtogive_id = tonumber(result.getDataInt(result_plr, "param1"))
                    local itemtogive_count = tonumber(result.getDataInt(result_plr, "param2"))
                    local container_id = tonumber(result.getDataInt(result_plr, "param3"))
                    local container_count = tonumber(result.getDataInt(result_plr, "param4"))
                    local add_item_type = tostring(result.getDataString(result_plr, "param5"))
                    local add_item_name = tostring(result.getDataString(result_plr, "param6"))
                    local storage = tostring(result.getDataString(result_plr, "param7"))
                    local received_item = 0
                    local full_weight = 0
                    if(add_item_type == 'container') then
                        container_weight = getItemWeight(container_id, 1)
                        if(isItemRune(itemtogive_id)) then
                            items_weight = container_count * getItemWeight(itemtogive_id, 1)
                        else
                            items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
                        end
                        full_weight = items_weight + container_weight
                    else
                        full_weight = getItemWeight(itemtogive_id, itemtogive_count)
                        if(isItemRune(itemtogive_id)) then
                            full_weight = getItemWeight(itemtogive_id, 1)
                        else
                            full_weight = getItemWeight(itemtogive_id, itemtogive_count)
                        end
                    end
                    local free_cap = getPlayerFreeCap(cid)
                    if(full_weight <= free_cap) then
                        if(add_item_type == 'container') then
                            local new_container = doCreateItemEx(container_id, 1)
                            local iter = 0
                            while(iter ~= container_count) do
                                doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
                                iter = iter + 1
                            end
                            received_item = doPlayerAddItemEx(cid, new_container)
                        else
                            local new_item = doCreateItemEx(itemtogive_id, itemtogive_count)
                            received_item = doPlayerAddItemEx(cid, new_item)
                        end
                        if(type(received_item) == "number" and received_item == RETURNVALUE_NOERROR) then
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Tibia Shop.')
                            setPlayerStorageValue(cid,storage+555884621212,1)
                            db.query("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                            db.query("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                        else
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, ' '.. add_item_name ..' from Tibia Shop is waiting for you. Please make place for this item in your backpack/hands and wait about '.. SQL_interval ..' seconds to get it.')
                        end
                    else
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, ' '.. add_item_name ..' Tibia Shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot and wait about '.. SQL_interval ..' seconds to get it.')
                    end
                end
            until not result.next(result_plr)
            result.free(result_plr)
        end
        return true
    end
     
  11. StreamSide

    StreamSide Joseluis Gonzalez

    Joined:
    Aug 31, 2007
    Messages:
    2,517
    https://gist.github.com/gesior/0de6fa34a7dfe5c5269f1765e8f6a9d4 this should work
     
  12. Romenes Hasvu

    Romenes Hasvu Banned User

    Joined:
    Nov 20, 2015
    Messages:
    300
    Last edited: Sep 23, 2016
  13. StreamSide

    StreamSide Joseluis Gonzalez

    Joined:
    Aug 31, 2007
    Messages:
    2,517
    tfs 1.2? errors?
     
  14. ayakuss

    ayakuss New Member

    Joined:
    Nov 7, 2016
    Messages:
    2
    Em meu inbox LOJA NO TEM LIMITE PAC, PLAYER pode colocar SET IN STORE INBOX, WHAT I DO FOR BLOCK STORE INBOX FOR NO ENTER OR MOVE ITENS;
     
  15. adrianootavares

    adrianootavares Member

    Joined:
    Jul 23, 2012
    Messages:
    38
  16. adrianootavares

    adrianootavares Member

    Joined:
    Jul 23, 2012
    Messages:
    38

Share This Page