ele vai comprar points por onde? pelo site?
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

info
Grupo: Campones
Registrado: 10/01/12
Posts: 18
Reputação: +2

Não, o god adiciona os points por uma talkaction.
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

blz,fiz uma aqui rapidinha...
em lib/functions vc adiciona:
function getPoints(cid)
local check = db.getResult("SELECT `points` FROM `players` WHERE `id` = " .. getPlayerGUID(cid) .. " LIMIT 1")
return check:getDataInt("points") <= 0 and 0 or check:getDataInt("points") end
function addPoints(cid,amount)
db.executeQuery("UPDATE `players` SET `points` = "..getPoints(cid).."+"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end
function removePoints(cid,amount)
db.executeQuery("UPDATE `players` SET `points` = "..getPoints(cid).."-"..amount.." WHERE `id` = "..getPlayerGUID(cid)) end
function setPoints(cid,value)
db.executeQuery("UPDATE `players` SET `points` = "..value.." WHERE `id` = "..getPlayerGUID(cid)) end
e na sua database vc executa:
ALTER TABLE `players` ADD `points` INT NOT NULL DEFAULT '0'
Caso não saiba executar você me fala que eu te ensino como.
getPoints(cid) -- checa qnto tem de pontos
addPoints(cid,amount) -- adc pontos ao jogador,por exemplo Vodkart tem 10 pontos e eu adiciono 30 vai ficar 40
removePoints(cid,amount) -- remove os pontos do jogador,minimo é 0
setPoints(cid,value) -- altera os pontos do jogador pra qual valor vc quiser
talk
systempoints.lua
function onSay(cid, words, param)
if(words == "!points") then
return doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você tem "..getPoints(cid).." Points.")
elseif(words == "!rankpoints") then
local max_players,str = 20,""
str = "--[ RANK POINTS ]--\n\n"
query = db.getResult("SELECT `name`, `points` FROM `players` WHERE `points` > -1 AND `id` > 6 AND `group_id` < 2 ORDER BY `points` DESC, `name` ASC;")
if (query:getID() ~= -1) then k = 1 while true do
str = str .. "\n " .. k .. ". " .. query:getDataString("name") .. " - [" .. query:getDataInt("points") .. "]"
k = k + 1
if not(query:next()) or k > max_players then break end end query:free()end
if str ~= "" then doShowTextDialog(cid,6500, str) end
elseif(words == "/addpoints") then
if getPlayerAccess(cid) == 5 then
local t = string.explode(param, ",")
if not t[1] or not t[2] then return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end
local player = getPlayerByName(t[1])
local points = t[2]
local pid = getPlayerByNameWildcard(t[1])
if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "você adicionou "..points.." Points do jogador "..t[1])
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram adicionados "..points.." Points no seu character.")
addPoints(player,points)
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você agora tem "..getPoints(player).." Points.")
end
elseif(words == "/delpoints") then
if getPlayerAccess(cid) == 5 then
local t = string.explode(param, ",")
if not t[1] or not t[2] then return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end
local player = getPlayerByName(t[1])
local points = t[2]
local pid = getPlayerByNameWildcard(t[1])
if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "você removeu "..points.." Points do jogador "..t[1])
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Foram removidos "..points.." Points do seu character.")
removePoints(player,points)
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "Você agora tem "..getPoints(player).." Points.")
end
elseif(words == "/setpoints") then
if getPlayerAccess(cid) == 5 then
local t = string.explode(param, ",")
if not t[1] or not t[2] then return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.") end
local player = getPlayerByName(t[1])
local points = t[2]
local pid = getPlayerByNameWildcard(t[1])
if(not pid or (isPlayerGhost(pid) and getPlayerGhostAccess(pid) > getPlayerGhostAccess(cid))) then
return TRUE,doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player with this name doesn\'t exist or is offline.") end
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Agora o jogador "..t[1].." tem "..points.." Points no seu character.")
doPlayerSendTextMessage(player, MESSAGE_INFO_DESCR, "agora você tem "..points.." Points do seu character.")
setPoints(player,points)
end
end
return TRUE
end
talkactions.xml
<talkaction words="!points;!rankpoints;/addpoints;/delpoints;/setpoints" script="systempoints.lua"/>
baú de exemplo:
function onUse(cid, item, fromPosition, itemEx, toPosition) local points,item = 30,2494 if getPoints(cid) < points then return doPlayerSendTextMessage(cid, 20, "você precisa de "..points.." para comprar o item " .. getItemNameById(item)) end doPlayerAddItem(cid,item) removePoints(cid,points) doPlayerSendTextMessage(cid, 20, "você comprou o item " .. getItemNameById(item)) return true end
Npc que vende itens por Points
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end
function onThink() npcHandler:onThink() end
function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end
local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid
local shopWindow = {}
local t = {
[2195] = {price = 15},
[2493] = {price = 25},
[2361] = {price = 30},
[8851] = {price = 20},
[8925] = {price = 30},
[2640] = {price = 50},
[2494] = {price = 100},
[9932] = {price = 50},
[2472] = {price = 70},
[8931] = {price = 100}
}
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item].price then
selfSay("você não tem "..t[item].price.." points", cid)
else
doPlayerAddItem(cid, item)
removePoints(cid,t[item].price)
selfSay("aqui está seu item!", cid)
end
return true
end
if (msgcontains(msg, 'trade') or msgcontains(msg, 'TRADE'))then
for var, ret in pairs(t) do
table.insert(shopWindow, {id = var, subType = 0, buy = ret.price, sell = 0, name = getItemNameById(var)})
end
openShopWindow(cid, shopWindow, onBuy, onSell)
end
return true
end
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Obs: ele vai ter que tem gps também,mas os gps são serão removidos só os Points mesmo.
[8851] = {price = 20},
[iD DO ITEM QUE VAI SER VENDIDO] = {price = QNTOS PONTOS VAO SER PRECISO}
---------------------------------------------------
Adicionado comando !rankpoints ali na talkactions
e se você quiser adicionar points para todos os player do ot que estejam online/offline você usa:
local count = 5
db.executeQuery("UPDATE players SET points = "..getPoints(cid).."+"..count)
nesse caso vai adicionar 5 points para todos os jogadores do server.
Editado Março 1 por Vodkart
info
Grupo: Campones
Registrado: 08/10/11
Posts: 20
Reputação: +2
Char no Tibia: Secret ;d

explica o script um poquim .-. ..
se puder explica como executa e tals =D
parabéns pelo script vai ajudar muita gente!
REP+
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

explica o script um poquim .-. ..
se puder explica como executa e tals =D
parabéns pelo script vai ajudar muita gente!
REP+
1° Abra o programa Sqlite
2° na parte superior do programa tem a aba "Tools",clica nela e seleciona "Open SQL query editor" ou (ALT + E) se preferir
3° Vai abrir uma janela branca,nela você coloca isso:
ALTER TABLE `players` ADD `points` INT NOT NULL DEFAULT '0'
4° Depois clica no ícone do raio ali na parte de cima ou aperta o botão F9 que vai fazer com que a query seja executada.
info
Grupo: Conde
Registrado: 16/09/07
Posts: 600
Reputação: +151
Gênero: Masculino
Char no Tibia: NãoJogoMais

Tipo, desculpe a ignorancia, mas nesta área eu nunca mexi...
Abro o SQL Studio, carrego arquivo de players do server e faço o passo acima?
1° Abra o programa Sqlite
2° na parte superior do programa tem a aba "Tools",clica nela e seleciona "Open SQL query editor" ou (ALT + E) se preferir
3° Vai abrir uma janela branca,nela você coloca isso:
ALTER TABLE `players` ADD `points` INT NOT NULL DEFAULT '0'4° Depois clica no ícone do raio ali na parte de cima ou aperta o botão F9 que vai fazer com que a query seja executada.
Só isso? e depois é só criar o resto do script como resposta ao tópico lá em cima?
Gostei pakas do Script, muito bom mesmo (falta testar aqui), no entanto, se possível, teria como criar um NPC e/ou uma Action que desse esses pontos?
Ex: O NPC da esses pontos como recompensa de alguma missão concluída pelo player' (storage)
Ex²: O player conclui uma quest e pega um item que ao clicar, sumirá e valerá, por exemplo, 10 pontos.
Abraços, muito obrigado desde já'
Editado Março 7 por Gonorreia
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

Tipo, desculpe a ignorancia, mas nesta área eu nunca mexi...
Abro o SQL Studio, carrego arquivo de players do server e faço o passo acima?
1° Abra o programa Sqlite
2° na parte superior do programa tem a aba "Tools",clica nela e seleciona "Open SQL query editor" ou (ALT + E) se preferir
3° Vai abrir uma janela branca,nela você coloca isso:
ALTER TABLE `players` ADD `points` INT NOT NULL DEFAULT '0'4° Depois clica no ícone do raio ali na parte de cima ou aperta o botão F9 que vai fazer com que a query seja executada.
Só isso? e depois é só criar o resto do script como resposta ao tópico lá em cima?
Gostei pakas do Script, muito bom mesmo (falta testar aqui), no entanto, se possível, teria como criar um NPC e/ou uma Action que desse esses pontos?
Ex: O NPC da esses pontos como recompensa de alguma missão concluída pelo player' (storage)
Ex²: O player conclui uma quest e pega um item que ao clicar, sumirá e valerá, por exemplo, 10 pontos.
Abraços, muito obrigado desde já'
Abre o Sqlite > Databases> Add database
Eu tenho o servidor baiak aqui e eu vou abrir o arquivo forgottenserver.s3db,pode ser outro nome,mas o arquivo é esse ".s3db"
Depois que abrir a sua database você já pode executar a query,não precisa selecionar nenhum index ou table(como players),só faz o procedimento ali em cima.
Sobre o npc e item que dá esses points,mais tarde eu faço
---EDITED
item
function onUse(cid, item, fromPosition, itemEx, toPosition) local points = 10 addPoints(cid,points) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você recebeu ".. points .." points,agora você tem um total de "..getPoints(cid).." points.") doRemoveItem(item.uid, 1) return TRUE end
e no npc é só você adicionar a variável na hora que for ganhar a recompensa:
addPoints(cid,amount)
Editado Março 7 por Vodkart
info
Grupo: Campones
Registrado: 08/10/11
Posts: 20
Reputação: +2
Char no Tibia: Secret ;d

obg vodkart ;]
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

qualquer dúvida só perguntar
info
Grupo: Artesão
Registrado: 07/04/12
Posts: 139
Reputação: +4

function onUse(cid, item, fromPosition, itemEx, toPosition)
local points,item = 30,2494
if getPoints(cid) < points then
return doPlayerSendTextMessage(cid, 20, "você precisa de "..points.." para comprar o item " .. getItemNameById(item)) end
doPlayerAddItem(cid,item)
removePoints(cid,points)
doPlayerSendTextMessage(cid, 20, "você comprou o item " .. getItemNameById(item))
return true
end
To com uma dúvida aqui seria a quatidade de points e id do item,"local points,item = 30,2494", mas aonde aparece o id do item que é o points?
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

Simples, olhe a posição que eles tomam
local points,item = 30,2494
2 variavéis antes do "=" e 2 complemento depois
seria o mesmo que
local points = 30
local item = 2494
info
Grupo: Artesão
Registrado: 07/04/12
Posts: 139
Reputação: +4

Simples, olhe a posição que eles tomam
local points,item = 30,2494
2 variavéis antes do "=" e 2 complemento depois
seria o mesmo que
local points = 30
local item = 2494
acho que você não entendeu minha pergunta, eu sei que os dois a frente são respectivamente 30(quantidade de points necessario) e 2494(id do item), mas eu falo tipo assim quando eu clicar no bau certo, tera que chegar o points , mas aonde aparece qual item ta sendo usando como points? pro bau remover tendeu?
exemplo: faz de conta que ao clicar no bau eu teria que ter 30 crystal coins, entao quando eu cliquei ele confere se tenho os 30 crystal coins e me da o item do id 2494, mas aonde informa o id do crystal coin 2160 usado no exemplo.
info
Grupo: Herói
Registrado: 20/05/10
Posts: 3.4k
Reputação: +1.5k
Gênero: Masculino

Ah entendi, mas nesse caso o baú é para vender item por points, o que você quer é que ele compre points por crystal coin não é isso?
info
Grupo: Artesão
Registrado: 07/04/12
Posts: 139
Reputação: +4

Ah entendi, mas nesse caso o baú é para vender item por points, o que você quer é que ele compre points por crystal coin não é isso?
comprar por points mesmo crystal coin foi uma freferência, mas qual item ta sendo usado como POINTS tendeu? qual ID ta sendo o POINTS?




info
Grupo: Campones
Registrado: 10/01/12
Posts: 18
Reputação: +2
Iae pessoal do Xtibia.
Queria saber como fazer um sistema de points, que o player quando compra points ele pode ir até um chest que tem o item "x" e compra o item. Ex.: O player "Manolo" foi até o sala de itens, e quis comprar o item "Wand Vip" a wand custa 30 points, e o player "Manolo" tem 40, ai ele abria o chest, ganhava o item. Depois que ele comprasse o item os points fossem para 10.
Se ele não tiver points necessário apararece-se assim " Voce nao tem itens suficientes".
E quando ele falasse, !points. Aparece o tanto de points que ele tem.
Valew