• 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 Gesior Shop, won't receive containers from shop [TFS 0.3.6pl1]

hodleo

Formerly cbrm -Crypto enthusiast, Retired scripter
Staff member
Global Moderator
Joined
Jan 6, 2009
Messages
6,598
Solutions
3
Reaction score
955
Location
Caribbean Sea
[FIX] Gesior Shop, won't receive containers from shop [TFS 0.3.6pl1]

Players receive items and other stuff, but not containers
The player gets the message and the container is deleted from DB as if he received the bp.

My error in the GUI:
[07/01/2010 23:36:03] [Error - GlobalEvent Interface]
[07/01/2010 23:36:03] data/globalevents/scripts/shop.lua:eek:nThink
[07/01/2010 23:36:03] Description:
[07/01/2010 23:36:03] (luaDoAddContainerItem) Container not found

Lua:
-- FIXED BY Cybermaster && Kekox © OTLand.net
-- ### 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("param3"))
                    local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
                    local container_id = tonumber(result_plr:getDataInt("param1"))
                    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
                        container_weight = getItemWeightById(container_id, 1)
                        if isItemRune(itemtogive_id) == TRUE then
                            items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                        else
                            items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                        end
                        full_weight = items_weight + container_weight
                    else
                        full_weight = getItemWeightById(container_id, itemtogive_count)
                            if isItemRune(container_id) == TRUE then
                            full_weight = getItemWeightById(container_id, 1)
                        else
                            full_weight = getItemWeightById(container_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(container_id, itemtogive_count)
                            received_item = doPlayerAddItemEx(cid, new_item)
                        end
                        if received_item == RETURNVALUE_NOERROR then
                            doPlayerSave(cid, true)
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from 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 .. ";")
                        else    
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Prison Break 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 ..' << from Spider 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
            if not(result_plr:next()) then
                break
            end
        end
        result_plr:free()
    end
    return TRUE
end
 
Last edited:
Players receive items and other stuff, but not containers
The player gets the message and the container is deleted from DB as if he received the bp

I've followed the Gesior Tutorial from A to Z in Ver. 0.1.4 - Gesior ITEM/PACC Shop (PHP+LUA) for TFS

My error in the GUI:


Lua:
  -- ### 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
                    container_weight = getItemWeightById(container_id, 1)
                    if isItemRune(itemtogive_id) == TRUE then
                        items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                    else
                        items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                    end
                    full_weight = items_weight + container_weight
                else
                    full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
                    if isItemRune(itemtogive_id) == TRUE then
                        full_weight = getItemWeightById(itemtogive_id, 1)
                    else
                        full_weight = getItemWeightById(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 received_item == RETURNVALUE_NOERROR then
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from Prison Break 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 .. ";")
                    else
                        doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Prison Break 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 ..' << from Spider 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
            if not(result_plr:next()) then
                break
            end
        end
        result_plr:free()
    end
    return TRUE
end

Any help:confused:


Need help with this too
 
Use this:

Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "constant.lua")
local SHOP_MSG_TYPE = 19
-- time (in seconds) between connections to SQL database by shop script
local 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
			local id = tonumber(result_plr:getDataInt("id"))
			local action = tostring(result_plr:getDataString("action"))
			local delete = tonumber(result_plr:getDataInt("delete_it"))
			local cid = getCreatureByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) 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 = add_item_type == 'container' and (container_count * getItemWeightById(itemtogive_id, itemtogive_count or 1)) + getItemWeightById(container_id, 1) or getItemWeightById(itemtogive_id, itemtogive_count or 1)
				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
						received_item = doPlayerAddItemEx(cid, doCreateItemEx(itemtogive_id, itemtogive_count))
					end
					if received_item == RETURNVALUE_NOERROR then
						doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from Alofoke-Online 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 .. ";")
					else
						doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << 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 ..' << 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
			if not result_plr:next() then
				break
			end
		end
		result_plr:free()
	end
	return true
end


And be sure to add this!

data\lib\000-constant.lua
Add this at the top.
InitShopComunication = 0

Do the same in
data\lib\constant.lua
InitShopComunication = 0

Hope that helped you. :eek: :$

Rep+ leave your name, ill rep back to you!
 
@up, that has nothing to do with the solution
I solved it with kekox some months ago ^^ it was a bad sql table select stuff
 
Here I post the fix:

Lua:
-- FIXED BY Cybermaster && Kekox © OTLand.net
-- ### 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("param3"))
                    local itemtogive_count = tonumber(result_plr:getDataInt("param2"))
                    local container_id = tonumber(result_plr:getDataInt("param1"))
                    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
                        container_weight = getItemWeightById(container_id, 1)
                        if isItemRune(itemtogive_id) == TRUE then
                            items_weight = container_count * getItemWeightById(itemtogive_id, 1)
                        else
                            items_weight = container_count * getItemWeightById(itemtogive_id, itemtogive_count)
                        end
                        full_weight = items_weight + container_weight
                    else
                        full_weight = getItemWeightById(container_id, itemtogive_count)
                            if isItemRune(container_id) == TRUE then
                            full_weight = getItemWeightById(container_id, 1)
                        else
                            full_weight = getItemWeightById(container_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(container_id, itemtogive_count)
                            received_item = doPlayerAddItemEx(cid, new_item)
                        end
                        if received_item == RETURNVALUE_NOERROR then
                            doPlayerSave(cid, true)
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from 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 .. ";")
                        else    
                            doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from Prison Break 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 ..' << from Spider 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
            if not(result_plr:next()) then
                break
            end
        end
        result_plr:free()
    end
    return TRUE
end
 
Back
Top