• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Gesior - Buying mount in the store

Auriaotbr

New Member
Joined
Feb 15, 2017
Messages
61
Reaction score
1
Good night my mall delivers the items and mounts normally but inside the game the mount does not arrive and it is giving an error. One guy said that I need to modify my shop.lua to accept the mount but I have no idea where to do this, my shop.lua is below HELP ME PLEASE






PHP:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
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 received_item = 0
                local full_weight = 0
               
                -- Script para addons e montaria full pelo Gesior --
                if(add_item_type == 'mounts') then
                local player = Player(cid)
                if (getPlayerStorageValue(cid,itemtogive_id) == -1) then
                doPlayerAddMount(cid, itemtogive_id)
                setPlayerStorageValue(cid,itemtogive_id,1)
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE)
                doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Th3 Insanity Shop.')
                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               
                -- fim do script --
                -- Script para addons e montaria full pelo Gesior --
                if(add_item_type == 'addons') then
                local player = Player(cid)
                if (getPlayerStorageValue(cid,itemtogive_id) == -1) then
                doPlayerAddOutfit(cid, itemtogive_id, 3)
                doPlayerAddOutfit(cid, container_id, 3)
                setPlayerStorageValue(cid,itemtogive_id,1)
                doSendMagicEffect(getCreaturePosition(cid), CONST_ME_HOLYDAMAGE)
                doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received '.. add_item_name ..' from Th3 Insanity Shop.')
                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               
                -- fim do script --
               
               
               
                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 Th3 Insanity Shop.')
                        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 Th3 Insanity 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 ..' Th3 Insanity 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

Imgur: The most awesome images on the Internet

PRINT MENSAGE IN SERVER
 
Last edited by a moderator:
That looks good I guess, you removed the check if the players has enough cap etc to avoid dropping items on the floor, but regarding the outfits and mounts it looks OK.
One way you can improve it is to check if the player already has the mount or outfit, if s/he does then give the points back to the account and remove it from z_ots_communication.
My PrintScreen is our code NOW, that have an error, cuz it send the mount as an item... I guess it reads like "mount" as "item". If u read the full code the only message of "item on depot" is for container and for item, mounts dont have this message

Oh okay I see what you're saying.
Then change the `offer_type` to 'mount' in your `z_shop_offer` table.

L9s3L0k.png


P.S.

Mount Ids are found in data/XML/mounts.xml
Good Evening, i guess our problem is that the script read the 'mount" that the player bought in the site, the script read as an "item" cuz if u read the complete script the only wich has the "depot" message is in "item" and "container" . This print u sent , we already changed, but nothing happened. Do you have other ideas?? :/
 
Last edited by a moderator:
Good evening here I am again trying to explain in more detail what happens to my server in the quest that someone really can help me. THE PROBLEM: - The player buys a mount from the website and receives it in the game, but the message arrives ... The mount "X" was delivered from the webshop in his depot. Instead of going directly to the character she is going to the depot and obviously disappears. I tried to replace the script from my MOUNT with another but the error persists, showing that the error is not necessarily in the part of MOUNT but elsewhere.



Code:
-- <globalevent name="shop" interval="30000" script="others/shop.lua"/>

function onThink(interval, lastExecution)
   
    local queryShop = db.storeQuery('SELECT * FROM `z_ots_comunication`')
    if queryShop ~= false then
        repeat
            local id, player = result.getNumber(queryShop, 'id'), Player(result.getString(queryShop, 'name'))
            if player then
                local item_id, item_count = result.getNumber(queryShop, 'param1'), result.getNumber(queryShop, 'param2')
                local container_id, container_count = result.getNumber(queryShop, 'param3'), result.getNumber(queryShop, 'param4')
                local offer_type = result.getString(queryShop, 'param5')
                local item_name = result.getString(queryShop, 'param6')

                -- ITEM
                if offer_type == 'item' then
                    player:getInbox():addItem(item_id, item_count, INDEX_WHEREEVER, FLAG_NOLIMIT)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..' << do WebShop em seu depot.')
               
                -- ITEM NEWS
               
                elseif offer_type == 'novos' then
                    player:getInbox():addItem(item_id, item_count, INDEX_WHEREEVER, FLAG_NOLIMIT)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..' << do WebShop em seu depot.')
                   
                    -- ITEM UMBRAL
               
                elseif offer_type == 'umbral' then
                    player:getInbox():addItem(item_id, item_count, INDEX_WHEREEVER, FLAG_NOLIMIT)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..' << do WebShop em seu depot.')
                   
                   
                    -- ITEM CUSTOM
               
                elseif offer_type == 'custom' then
                    player:getInbox():addItem(item_id, item_count, INDEX_WHEREEVER, FLAG_NOLIMIT)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..' << do WebShop em seu depot.')
                   
                -- CONTAINER
                elseif offer_type == 'container' then
                    local container_id, container_count = result.getNumber(queryShop, 'param3'), result.getNumber(queryShop, 'param4')
                    local i, new_container = 0, player:getInbox():addItem(container_id, 1, INDEX_WHEREEVER, FLAG_NOLIMIT)
                    while i ~= container_count do
                        new_container:addItem(item_id, item_count, INDEX_WHEREEVER, FLAG_NOLIMIT)
                        i = i + 1
                    end
               
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..' << do WebShop em seu depot.')
               
                -- ADDON
                elseif offer_type == 'addon' then
                    player:addOutfitAddon(item_id, 3)
                    player:addOutfitAddon(item_count, 3)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..'.')
                   
                -- MOUNT
                elseif offer_type == 'mount' then
                    player:addMount(item_id)
                    player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, 'Voce recebeu >> '.. item_name ..'.')
                end

                db.asyncQuery('DELETE FROM `z_ots_comunication` WHERE `id` = ' .. id)
                db.asyncQuery('UPDATE `z_shop_history_item` SET `trans_state` = \'realized\', `trans_real` = ' .. os.time() .. ' WHERE id = ' .. id)
            end
       
        until not result.next(queryShop)
        result.free(queryShop)
    end

    return true
end
 
My PrintScreen is our code NOW, that have an error, cuz it send the mount as an item... I guess it reads like "mount" as "item". If u read the full code the only message of "item on depot" is for container and for item, mounts dont have this message

You have to modify shopsystem.php and your database, take a look in it and serach for item ~
 
Then it's possible that your shop PHP file is not placing the `shop_offer`.`offer_type` as "mount" when it sends the information to `z_ots_communication`.

Search for $buy_offer['type'] == 'item', look at how it's implemented and make another for "mount".
 
Then it's possible that your shop PHP file is not placing the `shop_offer`.`offer_type` as "mount" when it sends the information to `z_ots_communication`.

Search for $buy_offer['type'] == 'item', look at how it's implemented and make another for "mount".

NO HAVE THIS LINE


$buy_offer['type'] == 'item',
 
Last edited by a moderator:
Line #1126
Try by changing this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote('item') . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';

To this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote($buy_offer['type']) . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';
 
I have merged all the Gesior mounts threads and posts.
Please do NOT post 20 threads about the same thing, you won't get helped any faster, you are insted breaking the rules.
Use this thread till the problem is fixed.
 
UP

Line #1126
Try by changing this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote('item') . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';

To this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote($buy_offer['type']) . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';



Good morning, IMK! Changing the line 1126 helped me to fix the bug of the mounts but now the normal items like armor, boots, etc do not buy in any way, the points do not discount on the site and there the item does not come.

Line #1126
Try by changing this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote('item') . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';

To this:
PHP:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote($buy_offer['type']) . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';

Help please?
 
Last edited by a moderator:

Have not tried it yet. What's the procedure?




With this items they buy and the mounts do not.

Lua:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote('item') . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';




With this the mounts buy and the items do not.

Lua:
$sql = 'INSERT INTO ' . $SQL->tableName('z_ots_comunication') . ' (' . $SQL->fieldName('id') . ',' . $SQL->fieldName('name') . ',' . $SQL->fieldName('type') . ',' . $SQL->fieldName('action') . ',' . $SQL->fieldName('param1') . ',' . $SQL->fieldName('param2') . ',' . $SQL->fieldName('param3') . ',' . $SQL->fieldName('param4') . ',' . $SQL->fieldName('param5') . ',' . $SQL->fieldName('param6') . ',' . $SQL->fieldName('param7') . ',' . $SQL->fieldName('delete_it') . ') VALUES (NULL, ' . $SQL->quote($buy_player->getName()) . ', ' . $SQL->quote('login') . ', ' . $SQL->quote($buy_type) . ', ' . $SQL->quote($buy_offer['item_id']) . ', ' . $SQL->quote($totalQ) . ', ' . $SQL->quote('') . ', ' . $SQL->quote('') . ', ' . $SQL->quote($buy_offer['type']) . ', ' . $SQL->quote($buy_offer['name']) . ', ' . $SQL->quote('') . ', ' . $SQL->quote(1) . ');';
 
Last edited by a moderator:
Replace your shop php file with the file I linked. It has edits inside near the same line.

Error occured!
Error ID: #E-7
More info: Cannot load class OTS_Player, file ./classes/class.ots_player.php doesn't exist

File: /var/www/html/system/load.init.php Line: 14
File: Unknown Line: Unknown
File: /var/www/html/pages/shopsystem.php Line: 1101
File: /var/www/html/system/load.page.php Line: 7
File: /var/www/html/index.php Line: 37

Replace your shop php file with the file I linked. It has edits inside near the same line.



Okay the item arrives and the mount too! But the error is now as follows. For the mount the points are debited from the account for normal items not
 
Last edited by a moderator:
Replace your shop php file with the file I linked. It has edits inside near the same line.
Good Afternoon Imki , we're now having the problem that shopsystem dont debit the value when you buy an "item". could u please help us?
As u can see here in the printscreen it costs 20TP, but it debits 0TP.

Try to change:
Code:
$buy_player = new OTS_Player();
to:
Code:
$buy_player = new Player();
Hello Imking.
We're now having the problem that shopsystem dont debit the value when you buy an "item". could u please help us?
As u can see here in the printscreen it costs 20TP, but it debits 0TP.
debit-png.29376
 

Attachments

Last edited by a moderator:
Error occured!
Error ID: #E-7
More info: Cannot load class OTS_Player, file ./classes/class.ots_player.php doesn't exist

File: /var/www/html/system/load.init.php Line: 14
File: Unknown Line: Unknown
File: /var/www/html/pages/shopsystem.php Line: 1101
File: /var/www/html/system/load.page.php Line: 7
File: /var/www/html/index.php Line: 37

Try to change:
Code:
$buy_player = new OTS_Player();
to:
Code:
$buy_player = new Player();
 
Try to change:
Code:
$buy_player = new OTS_Player();
to:
Code:
$buy_player = new Player();


Good night correct correct late good mistakes and with the system of stores you sent me the items are delivered. However, the problem is that the points are not debited in items. If the item costs 30 points at the time of ending a purchase, it exits at 0 and does not debit anything from the account, but the item still arrives. Like mounts are ok.
 
Hello Imking.
We're now having the problem that shopsystem dont debit the value when you buy an "item". could u please help us?
As u can see here in the printscreen it costs 20TP, but it debits 0TP.
debit-png.29376

What is the `offer_type` for that item?
 
Back
Top Bottom