• 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 [Modern ACC] Shop GlobalEvents

russogracie

New Member
Joined
Sep 9, 2010
Messages
205
Reaction score
2
Everything works normal but the items sent from the shop does not reach the players and gives the following error in executable on free function:

2duyssm.png


Help plx =)
 
This is my script have return TRUE:

Code:
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("player")))
				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:
LUA:
function onThink()
	local r = db.getResult('SELECT * FROM shop_history WHERE processed=0')
	if r:getID() ~= -1 then
		repeat
			local cid = getPlayerByName(r:getDataString('player'))
			if isPlayer(cid) then
				local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK).uid
				if bp ~= 0 then
					local j = db.getResult('SELECT * FROM shop_offer WHERE id='..r:getDataInt('product'))
					if j:getID() ~= -1 then
						local id = tonumber(j:getDataInt('item'))
						local tid = tonumber(r:getDataInt('id'))
						local count = tonumber(j:getDataInt('count'))
						local tipe = tonumber(j:getDataInt('type'))
						local name = j:getDataString('name')
						if tipe == 5 or tipe == 8 then
							local w = getItemInfo(id).weight * count
							if getPlayerFreeCap(cid) >= w then
								if doAddContainerItemEx(bp, doCreateItemEx(id, count)) == 1 then
									doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have received >> '..name..' << from our shop system')
									db.executeQuery('UPDATE shop_history SET processed=1 WHERE id = ' .. tid)
								else
									doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You don\'t have enough space in backpack to receive >> '..name..' <<')
								end
							else
								doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'Sorry, you don\'t have enough capacity to receive >> '..name..' << (You need: '..getItemInfo(id).weight * count..' Capacity)')
							end
						elseif tipe == 6 or tipe == 7 then
							local bid, bcap =
								tipe == 6 and 1987 or 1988,
								tipe == 6 and 8 or 20
							local w = getItemInfo(bid).weight + (getItemInfo(id).weight * count * bcap)
							if getPlayerFreeCap(cid) >= w then
								local c = doCreateItemEx(bid)
								for i = 1, bcap do
									doAddContainerItem(c, id, count)
								end
								if doPlayerAddItemEx(getPlayerSlotItem(cid, 3).uid, c) == RETURNVALUE_NOERROR then
									doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You have received >> '..name..' << from our shop system')
									db.executeQuery('UPDATE shop_history SET processed=1 WHERE id='..tid)
								else
									doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'Sorry, you don\'t have enough space to receive >> '..name..' <<')
								end
							else
								doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'Sorry, you don\'t have enough capacity to receive >> '..name..' << (You need: '..w..' Capacity)')
							end
						end
						j:free()
					end
				else
					doPlayerSendTextMessage(cid, MESSAGE_EVENT_ORANGE, 'You don\'t have a container in your backpack slot.')
				end
			end
		until not r:next()
		r:free()
	end
	return true
end
 
Back
Top