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

SOLVED Sms shop spamming items, how to fix ?

dstyle

New Member
Joined
Feb 23, 2009
Messages
88
Reaction score
2
Location
Zaragoza,Spain
WEB : Modern AAC
REV : r3884

Just get a problem when trying to buy ONE item, but server sends me a LOT of the same item ... i dont know how to fix it ...
its my shop.lua
Lua:
function onThink(interval, lastExecution, thinkInterval)

local result = db.getResult("SELECT * FROM shop_history WHERE `processed` = 0;")

if(result:getID() ~= -1) then
while(true) do
cid = getCreatureByName(tostring(result:getDataString("p layer")))
product = tonumber(result:getDataInt("product"))
itemr = db.getResult("SELECT * FROM shop_offer WHERE `id` = "..product..";")
if isPlayer(cid) then
local id = tonumber(itemr:getDataInt("item"))
local tid = tonumber(result:getDataInt("id"))
local count = tonumber(itemr:getDataInt("count"))
local tipe = tonumber(itemr:getDataInt("type"))
local productn = tostring(itemr:getDataString("name"))
if isInArray({5,8},tipe) then
if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then
if isContainer(getPlayerSlotItem(cid, 3).uid) then
received = doAddContainerItem(getPlayerSlotItem(cid, 3).uid, id,count)
if received then
doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
end
elseif isInArray({6,7},tipe) then
if tipe == 6 then
bcap = 8
bid = 1987
elseif tipe == 7 then
bcap = 20
bid = 1988
end
if isItemRune(id) then
count = 1
end
if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then
local bag = doCreateItemEx(bid, 1)
for i = 1,bcap do
doAddContainerItem(bag, id, count)
end
received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag)
if received == RETURNVALUE_NOERROR then
doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<")
end
else
doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
end
end
end
itemr:free()
if not(result:next()) then
break
end
end
result:free()
end
return true
end
 
Last edited by a moderator:
db.executeQuery for db.query

all script..

and this one will fix it ? :OOOOOO


Tested, and its still spamming :

23:39 Sorry, you don't have enough capacity to receive >> Yalahari Mask << (You need: 35 Capacity)
23:39 Sorry, you don't have enough capacity to receive >> Yalahari Mask << (You need: 35 Capacity)

i think my shop.lua cant change "processed" value in DB from "0" to "1" when recived
 
Last edited:
Use tags, when you want show scripts.
Could you show a your shop admin (list with premium items)?
 
hmmmm what if you try this?

Lua:
function onThink(interval, lastExecution, thinkInterval)
 
local result = db.getResult("SELECT * FROM `shop_history` WHERE `processed` = 0;")
 
if(result:getID() ~= -1) then
 while(true) do
 cid = getCreatureByName(tostring(result:getDataString("p layer")))
 product = tonumber(result:getDataInt("product"))
 itemr = db.getResult("SELECT * FROM `shop_offer` WHERE `id` = "..product..";")
 if isPlayer(cid) then
 local id = tonumber(itemr:getDataInt("item"))
 local tid = tonumber(result:getDataInt("id"))
 local count = tonumber(itemr:getDataInt("count"))
 local tipe = tonumber(itemr:getDataInt("type"))
 local productn = tostring(itemr:getDataString("name"))
 if isInArray({5,8},tipe) then
 if getPlayerFreeCap(cid) >= getItemWeightById(id, count) then
 if isContainer(getPlayerSlotItem(cid, 3).uid) then
 received = doAddContainerItem(getPlayerSlotItem(cid, 3).uid, id,count)
 if received then
 doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
 db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
 else
 doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space on container to receive >> "..productn.." <<")
 end
 else
 doPlayerSendTextMessage(cid,19, "Sorry, you don't have a container to receive >> "..productn.." <<")
 end
 else
 doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
 end
 elseif isInArray({6,7},tipe) then
 if tipe == 6 then
 bcap = 8
 bid = 1987
 elseif tipe == 7 then
 bcap = 20
 bid = 1988
 end
 if isItemRune(id) then
 count = 1
 end
 if getPlayerFreeCap(cid) >= (getItemWeightById(1987, 1) + getItemWeightById(id,count * bcap)) then
 local bag = doCreateItemEx(bid, 1)
 for i = 1,bcap do
 doAddContainerItem(bag, id, count)
 end
 received = doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, bag)
 if received == RETURNVALUE_NOERROR then
 doPlayerSendTextMessage(cid,19, "You have received >> "..productn.." << from our shop system")
 db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
 else
 doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough space to receive >> "..productn.." <<")
 end
 else
 doPlayerSendTextMessage(cid,19, "Sorry, you don't have enough capacity to receive >> "..productn.." << (You need: "..getItemWeightById(id, count).." Capacity)")
 end
 end
 end
 itemr:free()
 if not(result:next()) then
 break
 end
 end
 result:free()
 end
 return true
 end

There is a few ``` missing on sql commands, try this and post results.
 
infinity XD i have tried with both db.query and db.executeQuery and get errors with both !!!

[14/12/2011 18:55:17] [Error - GlobalEvent Interface]
[14/12/2011 18:55:17] data/globalevents/scripts/shop.lua:eek:nThink
[14/12/2011 18:55:17] Description:
[14/12/2011 18:55:17] data/globalevents/scripts/shop.lua:21: attempt to call field 'executeQuery' (a nil value)
[14/12/2011 18:55:17] stack traceback:
[14/12/2011 18:55:17] data/globalevents/scripts/shop.lua:21: in function <data/globalevents/scripts/shop.lua:1>
[14/12/2011 18:55:17] [Error - GlobalEvents::think] Couldn't execute event: shop

AND WITH QUERY


[14/12/2011 18:54:21] [Error - GlobalEvent Interface]
[14/12/2011 18:54:21] data/globalevents/scripts/shop.lua:eek:nThink
[14/12/2011 18:54:21] Description:
[14/12/2011 18:54:21] data/globalevents/scripts/shop.lua:21: attempt to call field 'query' (a nil value)
[14/12/2011 18:54:21] stack traceback:
[14/12/2011 18:54:21] data/globalevents/scripts/shop.lua:21: in function <data/globalevents/scripts/shop.lua:1>
[14/12/2011 18:54:21] [Error - GlobalEvents::think] Couldn't execute event: shop


SOME IDEA ?
 
Last edited:
Back
Top