Ir para conteúdo
  • 0

Comando Adicionar Quant. Item Ao Player


piratadoidao

Pergunta

Bom galera to com um probleminha nesse Script,

que adiciona A quantidade de Item desejada ao Player

E no caso do Player estar OFFLINE, o item é mandado para o DP!

Porem estou com um erro..

 

Aqui esta o Script:

 

 

function isValidName(name)

return db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name) .. ";"):getID() ~= -1

end

 

function onSay(cid, words, param, channel)

 

if param == "" then

doPlayerSendTextMessage(cid, 27, "Params missing! [name], [item], [qnt]")

return true

end

 

local t = string.explode(param, ",")

local depot = false

 

if type(t) ~= "table" then

doPlayerSendTextMessage(cid, 27, "Params missing! [name], [item], [qnt]")

return true

end

 

local player = getPlayerByName(tostring(t[1]))

if not isPlayer(player) then

player = tostring(t[1])

depot = true

if not isValidName(t[1]) then

doPlayerSendTextMessage(cid, 27, "Player with that name doesn't exist!")

return true

end

end

 

local id = tonumber(t[2])

local qnt = tonumber(t[3]) or 1

if not id then

id = getItemIdByName(t[2], false)

if not id then

doPlayerSendTextMessage(cid, 27, "Item wich such name does not exists.")

return true

end

end

 

local itemtoadd = getItemIdByName(t[2])

if isPlayer(player) and getItemWeightById(itemtoadd) > getPlayerFreeCap(player) then

depot = true

end

 

if isPlayer(player) then

if depot then

doPlayerSendMailByName(t[1], t[2], t[3])

else

doPlayerAddItem(getPlayerByName(t[1]), t[2], t[3])

end

doPlayerSendTextMessage(cid, 20, "Item delivered to the player: "..t[1]..".")

else

doPlayerSendMailByName(t[1], t[2], t[3])

doPlayerSendTextMessage(cid, 20, "Item delivered to the player: "..t[1]..".")

end

return true

end

 

 

 

E este é o ERRO que está dando...

 

Quando mando

/additem ...

Tudo certinho com os parametros...

Ele diz que enviou... mas no distro aparece:

 

" [error - Talkaction interface]

data/talkactions/scripts/additem.lua: onSay;

Description:

<luaDoPlayerSendMailByName> Item not Found. "

 

Se alguém puder ajudar... to precisando muito desse sisteminha! hehe

Obrigado.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
function isValidName(name)
   return db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. db.escapeString(name) ..";"):getID() ~= -1
end

function onSay(cid, words, param, channel)
   if param == "" then
       doPlayerSendCancel(cid, "Parameters missing. ".. words .." [name], [id], [amount].")
       return true
   end

   local t = string.explode(param, ",")
   local depot = false

   local pid = getPlayerByNameWilcard(t[1])
   if not pid then
       pid = t[1]
       depot = true
       if not isValidName(t[1]) then
           doPlayerSendCancel("A player with this name doesn't exists.")
           return true
       end
   end

   local itemid = getItemIdByName(t[2], false)
   if not itemid then
       doPlayerSendCancel(cid, "A item with this name doesn't exists.")
       return true
   end

   local amount = tonumber(t[3]) or 1
   if depot == true then
       local item = doCreateItemEx(itemid, amount)
       doPlayerSendMailByName(pid, item)
   else
       doPlayerAddItem(pid, itemid, amount)
   end
   doPlayerSendTextMessage(cid, 20, "Item delivered to the player: ".. t[1] ..".")
   return true
end

Link para o comentário
Compartilhar em outros sites

  • 0

/additem.. nao esta indo ainda

agora nem o comando entra...

ja da erro antes...

olha... ta aparecendo:

 

[error - talkaction interface]

description:

data/talkaction/additem.lua:15 : attempt to call global 'getPlayerByNameWilcard' <a nil value>

stack traceback:

data/talkaction/additem.lua:15 :in function <data/talkaction/additem.lua:6 >

 

Mas Obrigado! :D

Link para o comentário
Compartilhar em outros sites

  • 0

mano como q tu ta usando o comando? --'

o certo eh /additem nome do player, itemid, qntdade

 

Eu estou usando assim mesmo....

Aii da akilo la... ;s

Tentei no lugar do ITEM...

Primeiro coloquei com o ID do item...

Depois coloquei pelo NOME do item..

Deu na mesma .... :/

Link para o comentário
Compartilhar em outros sites

  • 0
function isValidName(name)
   return db.getResult("SELECT `id` FROM `players` WHERE `name` = ".. db.escapeString(name) ..";"):getID() ~= -1
end

function onSay(cid, words, param, channel)
   if param == "" then
       doPlayerSendCancel(cid, "Parameters missing. ".. words .." [name], [item_name], [amount].")
       return true
   end

   local t = string.explode(param, ",")
   local depot = false

   local pid = getPlayerByName(t[1])
   if not pid then
       pid = t[1]
       depot = true
       if not isValidName(t[1]) then
           doPlayerSendCancel("A player with this name doesn't exists.")
           return true
       end
   end

   local itemid = getItemIdByName(t[2], false)
   if not itemid then
       doPlayerSendCancel(cid, "A item with this name doesn't exists.")
       return true
   end

   local amount = tonumber(t[3]) or 1
   if depot == true then
       local item = doCreateItemEx(itemid, amount)
       doPlayerSendMailByName(pid, item)
   else
       doPlayerAddItem(pid, itemid, amount)
   end
   doPlayerSendTextMessage(cid, 20, "Item delivered to the player: ".. t[1] ..".")
   return true
end

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

Opa! Vlws ae :D

Só que ta com esse probleminha...

Quando coloca os Parametros do /additem sem a virgula ele da PLAYER NOT FOUND!

E se colocar pelo ID do item, ele não acha...

E se colocar pelo Nome do item tudo certinho..

Da erro no distro e fexa sozinho ;s

Ta tenso.. kk' Será que é pela versão? TFS 0.4

Link para o comentário
Compartilhar em outros sites

  • 0

Seu servidor não é The Forgotten Server 0.4, uma vez que essa versão não possui a função doSendMailByName, e possui a função getPlayerByNameWildcard, que achei estranho o seu servidor não ter.

 

E quem disse que é para digitar os parâmetros sem vírgula?

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

Seu servidor não é The Forgotten Server 0.4, uma vez que essa versão não possui a função doSendMailByName, e possui a função getPlayerByNameWildcard, que achei estranho o seu servidor não ter.

 

E quem disse que é para digitar os parâmetros sem vírgula?

 

É sim... The Forgotten Server 0.4.0.0

Sim, eu sei que precisa das Virgulas, apenas estava testando todos os Meios

Porem é como eu disse... Assim que digito no caso: /additem PLAYER,sword,1

O server fexa... ;s

:(

Link para o comentário
Compartilhar em outros sites

  • 0

@Slicer

Existe sim um item com o nome "Sword"

@Topic


function isValidName(name)
return db.getResult("SELECT `id` FROM `players` WHERE `name` = " .. db.escapeString(name) .. ";"):getID() ~= -1
end

function onSay(cid, words, param, channel)

if param == "" then
doPlayerSendTextMessage(cid, 27, "Params missing! [name], [item], [qnt]")
return true
end

local t = string.explode(param, ",")
local depot = false

if type(t) ~= "table" then
doPlayerSendTextMessage(cid, 27, "Params missing! [name], [item], [qnt]")
return true
end

local player = getPlayerByName(tostring(t[1]))
if not isPlayer(player) then
player = tostring(t[1])
depot = true
if not isValidName(t[1]) then
doPlayerSendTextMessage(cid, 27, "Player with that name doesn't exist!")
return true
end
end

local id = tonumber(t[2])
local qnt = tonumber(t[3]) or 1
if not id then
id = getItemIdByName(t[2], false)
if not id then
doPlayerSendTextMessage(cid, 27, "Item wich such name does not exists.")
return true
end
end

local itemtoadd = getItemIdByName(t[2])
if isPlayer(player) and getItemWeightById(itemtoadd) > getPlayerFreeCap(player) then
depot = true
end

if isPlayer(player) then
if depot then
doPlayerSendMailByName(t[1], itemtoadd, t[3])
else
doPlayerAddItem(getPlayerByName(t[1]), itemtoadd, t[3])
end
doPlayerSendTextMessage(cid, 20, "Item delivered to the player: "..t[1]..".")
else
doPlayerSendMailByName(t[1], itemtoadd, t[3])
doPlayerSendTextMessage(cid, 20, "Item delivered to the player: "..t[1]..".")
end
return true
end

Editado por SmiX
Link para o comentário
Compartilhar em outros sites

  • 0

Então... Aqui o Distro abre sem Erro algum!

Só acontece isso quando coloco mesmo..

Se vou pelo ID, ele da ITEM NOT FOUND!

Se coloco pelo NOME do ITEM, ele da erro e fexa... ;s

 

 

@Edit

 

Depois que eu abri denovo o server, entrei no char que eu estava testando, e tinha os 2 itens no DP!

Conclusão: Ele entrega, mas entrega um item completamente diferente do que eu mandei... e ainda da erro e cai o server...

Editado por piratadoidao
Link para o comentário
Compartilhar em outros sites

  • 0

se ta usando o doo oneShot deve ser por causa disso..

local item = doCreateItemEx(itemid, amount) 

n sei muito sobre essa funçao.. mas se n me engano ela cria um item com itemid-1.. algu do genero ;x

Link para o comentário
Compartilhar em outros sites

  • 0

@Slicer

 

Não, não tem nada a ver com o que você disse. A função que eu usei é justamente o que o script estava precisando, se você usar a função desse jeito:

 

doPlayerSendMailByName(cid, 2160, 1)

 

Isso não vai funcionar, pois a função não use IDs de itens como parâmetros, mas sim UIDs. Pois seus parâmetros nas sources são esses.

 

doPlayerSendMailByName(cid, item[, town])

 

Ou seja o certo é criar um UID com a função doCreateItemEx e então usar ele no doPlayerSendMailByName.

 

No mais, deixo claro que testei o script no The Forgotten Server 0.4.0 rev4394 e ele funcionou perfeitamente.

 

Abraços.

Link para o comentário
Compartilhar em outros sites

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