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

[Help] ! I dont get any items from shop! Not realized yet. Geisor Acc the last one

Dalale

GX
Joined
Jun 13, 2008
Messages
718
Reaction score
2
Location
Sweden
As the title says i need some help, I have been trying to fix it but it dosnt give items ingame :(

Here is a SS of it..






Please Help me!!

I have been trying for a long time now!

/dalale
 
have u gone into ur npcs.lua or w.e. and scripted the npc so when u say "sell bla bla" it will buy it and give u money?
 
This is about shop system of gesior, :p

@Dalale:

Marcinek helped me in my thread, now I can help you.

Go to creturescripts/login.lua

Then search: "GetItemWeight"
Replace it for: "GetItemWeightById"

:D!
 
Last edited:
TFS 0.3:
Code:
SHOP_MSG_TYPE = 17
SQL_interval = 30
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
	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 = getPlayerByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) == TRUE then
				if action == 'give_item' 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 b_head_slot = getPlayerSlotItem(cid, 1)
					local b_necklace_slot = getPlayerSlotItem(cid, 2)
					local b_backpack_slot = getPlayerSlotItem(cid, 3)
					local b_armor_slot = getPlayerSlotItem(cid, 4)
					local b_right_hand = getPlayerSlotItem(cid, 5)
					local b_left_hand = getPlayerSlotItem(cid, 6)
					local b_legs_slot = getPlayerSlotItem(cid, 7)
					local b_feet_slot = getPlayerSlotItem(cid, 8)
					local b_ring_slot = getPlayerSlotItem(cid, 9)
					local b_arrow_slot = getPlayerSlotItem(cid, 10)
					if b_arrow_slot.itemid == 0 or (b_left_hand.itemid == 0 and b_right_hand.itemid == 0) then
						local full_weight = 0
						if add_item_type == 'container' then
							container_weight = getItemWeightById(container_id, 1)
							items_weight = container_count * getItemWeightbyId(itemtogive_id, itemtogive_count)
							full_weight = items_weight + container_weight
						else
							full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
						end
						local free_cap = getPlayerFreeCap(cid)
						if full_weight <= free_cap then
							if add_item_type == 'container' then
								local new_container = doCreateItemEx(container_id)
								local iter = 0
								while iter ~= container_count do
									doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
									iter = iter + 1
								end
								doPlayerAddItemEx(cid, new_container)
								itemtogive_id = container_id
							else
								local addeditem = doPlayerAddItem(cid, itemtogive_id, itemtogive_count)
							end
							local head_slot = getPlayerSlotItem(cid, 1)
							local necklace_slot = getPlayerSlotItem(cid, 2)
							local backpack_slot = getPlayerSlotItem(cid, 3)
							local armor_slot = getPlayerSlotItem(cid, 4)
							local right_hand = getPlayerSlotItem(cid, 5)
							local left_hand = getPlayerSlotItem(cid, 6)
							local legs_slot = getPlayerSlotItem(cid, 7)
							local feet_slot = getPlayerSlotItem(cid, 8)
							local ring_slot = getPlayerSlotItem(cid, 9)
							local arrow_slot = getPlayerSlotItem(cid, 10)
							if ring_slot.itemid == itemtogive_id or feet_slot.itemid == itemtogive_id or legs_slot.itemid == itemtogive_id or armor_slot.itemid == itemtogive_id or necklace_slot.itemid == itemtogive_id or head_slot.itemid == itemtogive_id or arrow_slot.itemid == itemtogive_id or left_hand.itemid == itemtogive_id or right_hand.itemid == itemtogive_id or backpack_slot.itemid == itemtogive_id then
								if b_ring_slot.uid ~= ring_slot.uid or b_feet_slot.uid ~= feet_slot.uid or b_legs_slot.uid ~= legs_slot.uid or b_armor_slot.uid ~= armor_slot.uid or b_necklace_slot.uid ~= necklace_slot.uid or b_head_slot.uid ~= head_slot.uid or b_backpack_slot.uid ~= backpack_slot.uid or b_right_hand.uid ~= right_hand.uid or b_left_hand.uid ~= left_hand.uid or b_arrow_slot.uid ~= arrow_slot.uid then
								doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop. You should re-login now to become sure your new item will not disappear if any error occur.')
								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 OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
								end
							else
								doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
							end
						else
							doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot or give to friend and wait about '.. SQL_interval ..' seconds to get it.')
						end
						
						
					else
						doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please take items from both hands or item from arrow slot and wait about '.. SQL_interval ..' seconds to get it.')
					end
				end
			end
            if not(result_plr:next()) then
				break
			end
		end
		result_plr:free()
    end
	local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end

The one for 0.2 posted by gesior should work on 0.2
 
TFS 0.3:
Code:
SHOP_MSG_TYPE = 17
SQL_interval = 30
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
	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 = getPlayerByName(tostring(result_plr:getDataString("name")))
			if isPlayer(cid) == TRUE then
				if action == 'give_item' 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 b_head_slot = getPlayerSlotItem(cid, 1)
					local b_necklace_slot = getPlayerSlotItem(cid, 2)
					local b_backpack_slot = getPlayerSlotItem(cid, 3)
					local b_armor_slot = getPlayerSlotItem(cid, 4)
					local b_right_hand = getPlayerSlotItem(cid, 5)
					local b_left_hand = getPlayerSlotItem(cid, 6)
					local b_legs_slot = getPlayerSlotItem(cid, 7)
					local b_feet_slot = getPlayerSlotItem(cid, 8)
					local b_ring_slot = getPlayerSlotItem(cid, 9)
					local b_arrow_slot = getPlayerSlotItem(cid, 10)
					if b_arrow_slot.itemid == 0 or (b_left_hand.itemid == 0 and b_right_hand.itemid == 0) then
						local full_weight = 0
						if add_item_type == 'container' then
							container_weight = getItemWeightById(container_id, 1)
							items_weight = container_count * getItemWeightbyId(itemtogive_id, itemtogive_count)
							full_weight = items_weight + container_weight
						else
							full_weight = getItemWeightById(itemtogive_id, itemtogive_count)
						end
						local free_cap = getPlayerFreeCap(cid)
						if full_weight <= free_cap then
							if add_item_type == 'container' then
								local new_container = doCreateItemEx(container_id)
								local iter = 0
								while iter ~= container_count do
									doAddContainerItem(new_container, itemtogive_id, itemtogive_count)
									iter = iter + 1
								end
								doPlayerAddItemEx(cid, new_container)
								itemtogive_id = container_id
							else
								local addeditem = doPlayerAddItem(cid, itemtogive_id, itemtogive_count)
							end
							local head_slot = getPlayerSlotItem(cid, 1)
							local necklace_slot = getPlayerSlotItem(cid, 2)
							local backpack_slot = getPlayerSlotItem(cid, 3)
							local armor_slot = getPlayerSlotItem(cid, 4)
							local right_hand = getPlayerSlotItem(cid, 5)
							local left_hand = getPlayerSlotItem(cid, 6)
							local legs_slot = getPlayerSlotItem(cid, 7)
							local feet_slot = getPlayerSlotItem(cid, 8)
							local ring_slot = getPlayerSlotItem(cid, 9)
							local arrow_slot = getPlayerSlotItem(cid, 10)
							if ring_slot.itemid == itemtogive_id or feet_slot.itemid == itemtogive_id or legs_slot.itemid == itemtogive_id or armor_slot.itemid == itemtogive_id or necklace_slot.itemid == itemtogive_id or head_slot.itemid == itemtogive_id or arrow_slot.itemid == itemtogive_id or left_hand.itemid == itemtogive_id or right_hand.itemid == itemtogive_id or backpack_slot.itemid == itemtogive_id then
								if b_ring_slot.uid ~= ring_slot.uid or b_feet_slot.uid ~= feet_slot.uid or b_legs_slot.uid ~= legs_slot.uid or b_armor_slot.uid ~= armor_slot.uid or b_necklace_slot.uid ~= necklace_slot.uid or b_head_slot.uid ~= head_slot.uid or b_backpack_slot.uid ~= backpack_slot.uid or b_right_hand.uid ~= right_hand.uid or b_left_hand.uid ~= left_hand.uid or b_arrow_slot.uid ~= arrow_slot.uid then
								doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, 'You received >> '.. add_item_name ..' << from OTS shop. You should re-login now to become sure your new item will not disappear if any error occur.')
								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 OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
								end
							else
								doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop not added. Unknown error occured. Wait about '.. SQL_interval ..' seconds. If error will occur again contact with admin. Error item ID is: '.. id ..'')
							end
						else
							doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. It weight is '.. full_weight ..' oz., you have only '.. free_cap ..' oz. free capacity. Put some items in depot or give to friend and wait about '.. SQL_interval ..' seconds to get it.')
						end
						
						
					else
						doPlayerSendTextMessage(cid, SHOP_MSG_TYPE, '>> '.. add_item_name ..' << from OTS shop is waiting for you. Please take items from both hands or item from arrow slot and wait about '.. SQL_interval ..' seconds to get it.')
					end
				end
			end
            if not(result_plr:next()) then
				break
			end
		end
		result_plr:free()
    end
	local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end

The one for 0.2 posted by gesior should work on 0.2

Ok ty gonna test it now, can u post 0.2 also
 
Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 17
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
    dofile("./config.lua")
    env = assert(luasql.mysql())
    con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
    result_plr = assert(con:execute("SELECT * FROM z_ots_comunication WHERE `type` = 'login';"))
    todo = result_plr:fetch({}, "a")
    while todo do
        id = tonumber(todo.id)
        action = tostring(todo.action)
        delete = tonumber(todo.delete_it)
        cid = getPlayerByName(tostring(todo.name))
        if isPlayer(cid) == TRUE then
            local itemtogive_id = tonumber(todo.param1)
            local itemtogive_count = tonumber(todo.param2)
            local container_id = tonumber(todo.param3)
            local container_count = tonumber(todo.param4)
            local add_item_type = tostring(todo.param5)
            local add_item_name = tostring(todo.param6)
            local received_item = 0
            local full_weight = 0
            if add_item_type == 'container' then
                container_weight = getItemWeight(container_id, 1)
                items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
                full_weight = items_weight + container_weight
            else
                full_weight = getItemWeight(itemtogive_id, itemtogive_count)
            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.')
                    delete = assert(con:execute("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";"))
                    assert(con:execute("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 OTS 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 OTS 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
        todo = result_plr:fetch (todo, "a")
    end
    con:close()
    env:close()
    local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end
 
Code:
-- ### CONFIG ###
-- message send to player by script "type" (types you can check in "global.lua")
SHOP_MSG_TYPE = 17
-- time (in seconds) between connections to SQL database by shop script
SQL_interval = 30
-- ### END OF CONFIG ###
SQL_COMUNICATION_INTERVAL = SQL_interval * 1000
function onLogin(cid)
	if(InitShopComunication == 0) then
		local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, {})
		InitShopComunication = eventServ
	end
	registerCreatureEvent(cid, "PlayerDeath")
	return TRUE
end

function sql_communication(parameters)
    dofile("./config.lua")
    env = assert(luasql.mysql())
    con = assert(env:connect(mysqlDatabase, mysqlUser, mysqlPass, mysqlHost, mysqlPort))
    result_plr = assert(con:execute("SELECT * FROM z_ots_comunication WHERE `type` = 'login';"))
    todo = result_plr:fetch({}, "a")
    while todo do
        id = tonumber(todo.id)
        action = tostring(todo.action)
        delete = tonumber(todo.delete_it)
        cid = getPlayerByName(tostring(todo.name))
        if isPlayer(cid) == TRUE then
            local itemtogive_id = tonumber(todo.param1)
            local itemtogive_count = tonumber(todo.param2)
            local container_id = tonumber(todo.param3)
            local container_count = tonumber(todo.param4)
            local add_item_type = tostring(todo.param5)
            local add_item_name = tostring(todo.param6)
            local received_item = 0
            local full_weight = 0
            if add_item_type == 'container' then
                container_weight = getItemWeight(container_id, 1)
                items_weight = container_count * getItemWeight(itemtogive_id, itemtogive_count)
                full_weight = items_weight + container_weight
            else
                full_weight = getItemWeight(itemtogive_id, itemtogive_count)
            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.')
                    delete = assert(con:execute("DELETE FROM `z_ots_comunication` WHERE `id` = " .. id .. ";"))
                    assert(con:execute("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 OTS 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 OTS 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
        todo = result_plr:fetch (todo, "a")
    end
    con:close()
    env:close()
    local eventServ = addEvent(sql_communication, SQL_COMUNICATION_INTERVAL, parameters)
end

Thanks for the fast respond's Please add me on msn
if you have time to help me, if this dosnt work [email protected]
 
It still dosnt work, Please i need some help!

To: From: Offer name Bought on page Received on OTS
Wide Flatron Your account 8 19 October 2008, 01:36:06 Not realized yet.


I just saw this, whats the problem ?
 
Last edited:
Back
Top