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
Comando Adicionar Quant. Item Ao Player
Por piratadoidao, 13 de dez. de 2012 em Scripts
info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta

/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! ![]()
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

mano como q tu ta usando o comando? --'
o certo eh /additem nome do player, itemid, qntdade
Editado Dezembro 13 por Slicer
info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta

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 .... ![]()
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 Dezembro 13 por Oneshot
info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta

Opa! Vlws ae ![]()
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
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 Dezembro 14 por Oneshot
info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta

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
![]()
Vou testar o script aqui e ver qual o erro.
Abraços.
@Edit
Aqui funcionou perfeitamente ![]()
Editado Dezembro 14 por Oneshot
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

sword n eh um id e nem um nome de item valido u,U
tens q por ou o id do item ou o nome CERTINHU do item...
@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 Dezembro 14 por SmiX
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

existe? kk eh melhor eu fica quieto.. sei nd sobre tibia... ms assim eh estranhu a talk n funcionar.. eu tb testei e tava funcionando ;/
info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta

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 Dezembro 14 por piratadoidao
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

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





info
Grupo: Campones
Registrado: 20/01/12
Posts: 69
Reputação: +1
Gênero: Masculino
Char no Tibia: Piiratta
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.