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

Lua Shop.lua

Uzzio

New Member
Joined
Jan 3, 2009
Messages
27
Reaction score
0
Hello guys!!

I have a big problem. When I buy item from sms shop (via www) I still get this item.

14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2
14:10 >> The item Demonic Sword << that you just bought on the website couldnt be added. Han error has ocurred, please wait 30 seconds.. Shop ID: 2

And also in my console it its this problem:
[9:7:41.081] [Error - GlobalEvent Interface]
[9:7:41.081] data/globalevents/scripts/shop.lua:eek:nThink
[9:7:41.081] Description:
[9:7:41.081] data/globalevents/scripts/shop.lua:43: attempt to call field 'executeQuery' (a nil value)
[9:7:41.081] stack traceback:
[9:7:41.081] data/globalevents/scripts/shop.lua:43: in function <data/globalevents/scripts/shop.lua:7>
[9:7:41.081] [Error - GlobalEvents::think] Couldn't execute event: shop

Anyone help? This is my shop.lua
Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 19
-- 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.getResult("SELECT * FROM z_ots_comunication WHERE `type` = 'login';")
    if(result_plr:getID() ~= -1) then
        while(true) do
            id = tonumber(result_plr:getDataInt("id"))
            action = tostring(result_plr:getDataString("action"))
            delete = tonumber(result_plr:getDataInt("delete_it"))
            cid = getCreatureByName(tostring(result_plr:getDataString("name")))
            if isPlayer(cid) == TRUE then
                local itemtogive_id = tonumber(result_plr:getDataInt("param1"))
                local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
                local container_id = tonumber(result_plr:getDataInt("param3"))
                local container_count = tonumber(result_plr:getDataInt("param4"))
                local add_item_type = tostring(result_plr:getDataString("param5"))
                local add_item_name = tostring(result_plr:getDataString("param6"))
                local received_item = 0
                local full_weight = 0
                if add_item_type == 'container' then
                    full_weight = getItemWeightById(itemtogive_id, 1)
                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 received_item == RETURNVALUE_NOERROR then
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop.')
                        db.executeQuery("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";")
                        db.executeQuery("UPDATE `z_shop_history_item` SET `trans_state`='realized', `trans_real`=" .. os.time() .. " WHERE id = " .. id .. ";")
                        doPlayerSave(cid)
                    else
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> The item '.. add_item_name ..' << that you just bought on the website couldnt be added. Han error has ocurred, please wait '.. SQL_interval ..' seconds.. Shop ID: '.. id ..'')
                    end
                else
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> The item '.. add_item_name ..' << that you just bought on the website couldnt be added. Han error has ocurred, please wait '.. SQL_interval ..' seconds.. Shop ID: '.. id ..'')
                end
            end
            if not(result_plr:next()) then
                break
            end
        end
        result_plr:free()
    end
    return TRUE
end
 
Last edited by a moderator:
This query is the cause of your error:
"DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";"
You could try going into something like phpmyadmin or mysql cli and execute the same query with the right parameters to find out what error message mysql gives or whether it executes at all. It could be that the query is wrong or that the parameters are wrong, in which case you might need to debug the parameters in the lua code. And adjust where nessecary.

Now I'm no lua expert, but this message:
attempt to call field 'executeQuery' (a nil value)
could mean that it's unable to call the executeQuery function from the db object? Is the db configured correctly? Does the db object have this function available?
Where exactly is the db object setup in lua, or perhaps c++?
This could also be an issue with server and client sided functions, that db only exists from the server side and you're calling it from the client but I have too little knowledge of this object to truely know what's going on.

I suppose I've given enough questions you should ask yourself in order to figure things out.
 
Last edited:
Back
Top