piratadoidao 1 Postado Dezembro 13, 2012 Share Postado Dezembro 13, 2012 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 More sharing options...
0 Oneshot 732 Postado Dezembro 13, 2012 Share Postado Dezembro 13, 2012 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 More sharing options...
0 piratadoidao 1 Postado Dezembro 13, 2012 Autor Share Postado Dezembro 13, 2012 /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! Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 13, 2012 Share Postado Dezembro 13, 2012 (editado) mano como q tu ta usando o comando? --' o certo eh /additem nome do player, itemid, qntdade Editado Dezembro 13, 2012 por Slicer Link para o comentário Compartilhar em outros sites More sharing options...
0 piratadoidao 1 Postado Dezembro 13, 2012 Autor Share Postado Dezembro 13, 2012 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 More sharing options...
0 Oneshot 732 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 (editado) 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 14, 2012 por Oneshot Link para o comentário Compartilhar em outros sites More sharing options...
0 piratadoidao 1 Postado Dezembro 14, 2012 Autor Share Postado Dezembro 14, 2012 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 Link para o comentário Compartilhar em outros sites More sharing options...
0 Oneshot 732 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 (editado) 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, 2012 por Oneshot Link para o comentário Compartilhar em outros sites More sharing options...
0 piratadoidao 1 Postado Dezembro 14, 2012 Autor Share Postado Dezembro 14, 2012 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 More sharing options...
0 Oneshot 732 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 (editado) Vou testar o script aqui e ver qual o erro. Abraços. @Edit Aqui funcionou perfeitamente Editado Dezembro 14, 2012 por Oneshot Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 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... Link para o comentário Compartilhar em outros sites More sharing options...
0 SmiX 265 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 (editado) @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, 2012 por SmiX Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 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 ;/ Link para o comentário Compartilhar em outros sites More sharing options...
0 piratadoidao 1 Postado Dezembro 14, 2012 Autor Share Postado Dezembro 14, 2012 (editado) 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, 2012 por piratadoidao Link para o comentário Compartilhar em outros sites More sharing options...
0 Slicer 1070 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 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 More sharing options...
0 Oneshot 732 Postado Dezembro 14, 2012 Share Postado Dezembro 14, 2012 @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 More sharing options...
Pergunta
piratadoidao 1
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
17 respostass a esta questão
Posts Recomendados