• 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:
Appears the message that I received the mount, but the same does not appear. Help me


00:46 You received >> War Bear << from WebShop in your depot.
aeraer.jpg
 
Good night, my site and server are functional but when I buy a mount she should come straight to the character being delivered to the depot. But the depot is empty! And nothing appears, I've tried everything to solve the problem, help me.




PRINT ERROR: Imgur: The most awesome images on the Internet

SHOP.LUA GLOBAL EVENTS
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
 
Last edited by a moderator:
Do you have correct mount ID in your `z_shop_offer` table under itemid1?


I did not understand, can you explain it to me again?


I added the mounts as follows ID = 1 Widow Quenn



I did not find the ids of the mounts in my items.xml so I added them by the numbering that was in the items folder in your images, if it was 1 put 1
 
Seems like you are using Gesior, correct?
In that case you need to set another item_type? value in your shopsystem.php, so when the player buys a mount, the website writes that to the database and the globalevent script shop.lua checks if it's an item / container or in this case a mount, and uses Player:addMount(id) insted of Player:addItem(id).
It's not that hard, open the files and you should be able to pick it up pretty quickly.

Lua:
received_item = doPlayerAddOutfit(cid, itemtogive_id, 3)

That value has to be RETURNVALUE_NOERROR, so if that dosn't work just set it to RETURNVALUE_NOERROR when you give the outfit.
And there is no need to use the storage values, you can use this to check if the player already has the outfit, if s/he does give the points back.
Lua:
canPlayerWearOutfit(cid, looktype, addon)

Also remove all the code that you pasted there, the you got your item text and the queries, since they are executed below and as of right now they are all executed 2 times.
 
Last edited:
I'm getting the mount by depot and not straight into the character. I think this is what is wrong

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
 
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


Code:
<mount id="1" clientid="368" name="Widow Queen" speed="20" premium="no" />
    <mount id="2" clientid="369" name="Racing Bird" speed="20" premium="no" />
    <mount id="3" clientid="370" name="War Bear" speed="20" premium="no" />
    <mount id="4" clientid="371" name="Black Sheep" speed="20" premium="no" />
    <mount id="5" clientid="372" name="Midnight Panther" speed="20" premium="no" />
    <mount id="6" clientid="373" name="Draptor" speed="20" premium="no" />
    <mount id="7" clientid="374" name="Titanica" speed="20" premium="no" />
    <mount id="8" clientid="375" name="Tin Lizzard" speed="20" premium="no" />
    <mount id="9" clientid="376" name="Blazebringer" speed="20" premium="no" />
    <mount id="10" clientid="377" name="Rapid Boar" speed="20" premium="no" />
    <mount id="11" clientid="378" name="Stampor" speed="20" premium="no" />
    <mount id="12" clientid="379" name="Undead Cavebear" speed="20" premium="no" />
    <mount id="13" clientid="387" name="Donkey" speed="20" premium="no" />
    <mount id="14" clientid="388" name="Tiger Slug" speed="20" premium="no" />
    <mount id="15" clientid="389" name="Uniwheel" speed="20" premium="no" />
    <mount id="16" clientid="390" name="Crystal Wolf" speed="20" premium="no" />
    <mount id="17" clientid="392" name="War Horse" speed="20" premium="no" />
    <mount id="18" clientid="401" name="Kingly Deer" speed="20" premium="no" />


ALL MOUNTS CORRECT ID, AND OFFER_TYPE IS A MOUNT,
However the mounts are coming to depot as item and not to char.

Lua:
received_item = doPlayerAddOutfit(cid, itemtogive_id, 3)

That value has to be RETURNVALUE_NOERROR, so if that dosn't work just set it to RETURNVALUE_NOERROR when you give the outfit.
And there is no need to use the storage values, you can use this to check if the player already has the outfit, if s/he does give the points back.
Lua:
canPlayerWearOutfit(cid, looktype, addon)

Also remove all the code that you pasted there, the you got your item text and the queries, since they are executed below and as of right now they are all executed 2 times.


Now another problem! My site sends the mount to the depot and obviously goes blank! How do I get her straight to the character? Remembering that offer_type is ok, id too
 
Last edited by a moderator:
Now another problem! My site sends the mount to the depot and obviously goes blank! How do I get her straight to the character? Remembering that offer_type is ok, id too

Do what I posted above, that will fix that issue.
Right now it's treated like an item insted of a mount.
 
Seems like you are using Gesior, correct?
In that case you need to set another item_type? value in your shopsystem.php, so when the player buys a mount, the website writes that to the database and the globalevent script shop.lua checks if it's an item / container or in this case a mount, and uses Player:addMount(id) insted of Player:addItem(id).
It's not that hard, open the files and you should be able to pick it up pretty quickly.
WibbenZ our script skills isn't the best, could u please print us how to do that, or could u send de text and where to insert this. Thank You.
 
Where should I stick those lines?

In your shop.lua, serach for received_item.

WibbenZ our script skills isn't the best, could u please print us how to do that, or could u send de text and where to insert this. Thank You.

Open your shop.lua, look for
Lua:
if add_item_type == 'container' then

Then below it, a couple of lines you should see an "else"
Above the else add this;
Lua:
elseif add_item_type == 'mount' then
     player:addMount(itemtogive_id)
     received_item = RETURNVALUE_NOERROR
 
Last edited:
Open your shop.lua, look for
Lua:
if add_item_type == 'container' then

Then below it, a couple of lines you should see an "else"
Above the else add this;
Lua:
elseif add_item_type == 'mount' then
     player:addMount(itemtogive_id)
     received_item = RETURNVALUE_NOERROR

I need to replace this code u sent above "container?"
Or i replace it in my "mount" code?
17199938_1841909956065221_1076534398_o.png
 
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.
 
Back
Top