Ir para conteúdo

[Encerrado] Script Shop Enviar Item


Xubeiga

Posts Recomendados

fala gente!

então, eu uso um tfs 0.4 rev 3777 e eu uso um script para fazer o shop enviar itens automaticamente, mãs não funciona...

o shop system do site funciona certinho, ele adiciona no database o que o player comprou, que a compra ainda não foi processada, mas o item não é enviado ao player. acho que é algum erro no script, algo como se ele não conseguisse se conectar com a database para pegar os que não foram processador e mandar o item...alguém tem um script de enviar itens que funcione? obs: uso modern aac

Link para o comentário
Compartilhar em outros sites

Quando o shop manda e o item não chega para o player aparece algum error? posta seu script pra mim ver como ta.

 

não! não aparece nada no executável...é como se o script simplesmente não existisse, mas tá tudo certo, a tag pelo menos eu botei certo

 

já usei esses 2 e não deu em nada:

 

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

 

function doPlayerAddDepotItems(cid, items, town)
if (not isPlayer(cid)) then
 error("Player not found")
end
local town = town or getPlayerTown(cid)

local parcel = doCreateItemEx(ITEM_PARCEL)
for item, count in pairs(items) do
 if (type(item) == "number") then
  local attritemid = doAddContainerItem(parcel, item, count)
  doItemSetAttribute(attritemid, "description", "This item belongs to ".. getPlayerName(cid) ..".")
  doItemSetAttribute(attritemid, "aid", getPlayerGUID(cid)+10000)
 elseif (type(item) == "string") then
  doAddContainerItem(parcel, getItemIdByName(item), count)
 else
  error("Undefinied type of item name")
 end
end

return doPlayerSendMailByName(getCreatureName(cid), parcel, town)
end

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 isPlayer(cid) then
	  received = doPlayerAddDepotItems(cid, {[id]=count})
	  if received then
	   doPlayerSendTextMessage(cid,19, "You received "..productn.." in depot of your hometown.")
	   db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
	   doPlayerSave(cid)
	  else
	   doPlayerSendTextMessage(cid,19, "You need a free slot on container to receive "..productn..".")
	  end
	 else
	  doPlayerSendTextMessage(cid,19, "You need a free container to receive "..productn..".")
	 end
    else
	 doPlayerSendTextMessage(cid,19, "You need "..getItemWeightById(id, count).." of free capacity to receive "..productn..".")
    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 = doPlayerAddDepotItems(cid, bag)
	  if received == RETURNVALUE_NOERROR then
	   doPlayerSendTextMessage(cid,19, "You received "..productn.." in depot of your hometown.")
	   db.executeQuery("UPDATE `shop_history` SET `processed`='1' WHERE id = " .. tid .. ";")
	   doPlayerSave(cid)
	  else
	   doPlayerSendTextMessage(cid,19, "You need a free slot on container to receive "..productn..".")
	  end
	 else
	  doPlayerSendTextMessage(cid,19, "You need "..getItemWeightById(id, count).." of free capacity to receive "..productn..".")
	 end
   end
 end
   itemr:free()
   if not(result:next()) then
 break
   end
  end
  result:free()
 end
return true
end

Link para o comentário
Compartilhar em outros sites

Tente esse:

 

 

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(cid, 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='..id)

        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

 

 

 

Veja se funciona.

 

Se não funcionar me avisa.

Link para o comentário
Compartilhar em outros sites

Tente esse:

 

 

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(cid, 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='..id)

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

 

 

 

Veja se funciona.

 

Se não funcionar me avisa.

 

não funcionou.

Link para o comentário
Compartilhar em outros sites

  • 5 years later...
A questão neste tópico de suporte foi encerrada por falta de respostas. Este tópico está fechado e foi movido para Suporte - Tópicos Sem Resposta.

+ Caso a dúvida não tenha sido resolvida você poderá criar outro tópico solicitando ajuda.
* Lembre-se que é permitido dar UP no tópico a cada 24 horas para assim o destacar e manter movimentado.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...