Ir para conteúdo

Featured Replies

Postado
Em 04/10/2011 19:53:20, AgaSsI disse:

 

 

 

 

 

P Points System

 

 

 

 

 

 

divisor.png

 

 

 

 

 

 

 

 

 

 

 
Nome do script :
P Points system v1

 

 
Versão testada :
TFS 0.4 (8.70 Funciona em versões anteriores)

 

 
Creditos :
LsM

 

 

DedoDireita.png

 
Como funciona :

 

 

 

 
O
sistema funciona como uma recompensa ao player por ficar
por um certo tempo. O player, ao ficar online por um certo intervalo de tempo programado no código, receberá uma quantidade de pontos "P" a qual também se pode alterar.

 

 

 

 
O
objetivo foi fazer com que os
se sintam incentivados a ficar online por um maior período de tempo para que recebam tais moedas. Essa é, definitivamente, uma forma fácil de se alcançar um número maior de players online, já que a ideia foi retirada de um
MMORPG
online de grande sucesso.

 

 

 

 

 

 

DedoDireita.png

 
Como utilizar :

 

 

 

 
C
omo o sistema tem como foco dar uma recompensa ao player, no caso
pontos P
, estes, podem ser utilizados no comercio, em npcs, ou até mesmo na entrada de locais. Sua sintaxe é muito maleável e se encaixa em quaquer requisito desejado.

 

 

 

 

 

 

DedoDireita.png

 
Instalação :

 

 

 

 
Primeiramente, execute a seguinte
QUERY
em seu banco de dados :

 

 

 

Código:

 

 
 


 
ALTER TABLE `accounts` ADD `p_points` INTEGER NOT NULL DEFAULT 0
 
Em seguida, crie um arquivo com a extensão
.lua
chamado "
points.lua
" em "
data/creaturescripts/scripts
" e adicione o código abaixo :
Código:
 


 
--[[ P Points System by LsM. OTServ Brasil © 2011 Version : v1.0 ]]-- function onLogin(cid) doCreatureSetStorage(cid, 1219, os.time()) return true end function onLogout(cid) doCreatureSetStorage(cid, 1219, 0) return true end
 
Ainda em creaturescripts, abra o arquivo "
creaturescripts.xml
" e adicione a seguinte
TAG
:
Código:
 


 
<event type="login" name="PlayerAddPointsTimer" event="script" value="points.lua"/> <event type="logout" name="PlayerResetPointsTimer" event="script" value="points.lua"/>
 
Agora, em "
data/globalevents/script
" crie um arquivo com a extensão
.lua
também chamado "
points.lua
" e cole o seguinte código :
Código:
 


 
--[[ P Points System by LsM. OTServ Brasil &#169; 2011 Version : v1.0 ]]-- local config = { p_time = 3600, -- Tempo em segundos para receber os pontos( 3600 = 1hora ) p_points = 1 -- Quantidade de pontos recebida a cada "p_time" }local function givePoints(cid, quant) if os.time() - getCreatureStorage(cid, 1219) >= config.p_time then doPlayerSendTextMessage(cid, 19, "Congratulations, you recieved ".. config.p_points .." p points. Now you have ".. config.p_points + getPoints(cid) .." p points in your account. Your timer was reseted.") doPlayerAddPoints(cid, quant) doCreatureSetStorage(cid, 1219, 0) doCreatureSetStorage(cid, 1219, os.time()) end return true end function onThink(interval) for i, v in pairs(getPlayersOnline()) do givePoints(v, config.p_points) end return true end
 
E em "
globalevents.xml
" cole a seguinte
TAG
:
Código:
 


 
<globalevent name="points" interval="60" event="script" value="points.lua"/>
 
Em seguida vá em "
data/talkactions/scripts
", crie um arquivo com extensão
.lua
chamado "
points.lua
" e adicione o seguinte código :
Código:
 


 
function onSay(cid, words, param, channel) local getP = getPoints(cid) doPlayerPopupFYI(cid, "You have ".. getP .." P points.") return true end
 
E em "
talkactions.xml
" adicione a
TAG
:
Código:
 


 
<talkaction words="!ppoints;/ppoints" event="script" value="points.lua"/>
 
Para finalizar, vá em "
data/lib/050-function.lua
" e na última linha, adicione as funções abaixo :
Código:
 


 
function getPoints(cid) local res = db.getResult('select `p_points` from accounts where name = \''..getPlayerAccount(cid)..'\'') if(res:getID() == -1) then return false end local ret = res:getDataInt("p_points") res:free() return tonumber(ret) end function doPlayerAddPoints(cid, quant) return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) + quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'") end function doPlayerRemovePoints(cid, quant) return db.executeQuery("UPDATE `accounts` SET `p_points` = '".. getPoints(cid) - quant .."' WHERE `name` ='"..getPlayerAccount(cid).."'") end
 
Fim, o sistema está instalado.
 

DedoDireita.png

 
Como configurar :
 
A
parte da configuração é a mais fácil, apenas edite :
 
Código:
 
 


 
local config = { p_time = 3600, -- Tempo em segundos para receber os pontos( 3600 = 1hora ) p_points = 1 -- Quantidade de pontos recebida a cada "p_time" }

 

 

 

 

 

 

 
Quer utilizar o sistema em um npc, ou action, ou algum outro sistema e não sabe como? Simples, apenas use as seguintes funções :

 

 

 

 
getPoints(cid)
A função retorna a quantidade de pontos do player.

 

 

 

 
doPlayerAddPoints(cid, quant)
A função adiciona a quantidade(quant) de pontos ao player.

 

 

 

 
doPlayerRemovePoints(cid, quant)
A função remove a quantidade(quant) de pontos do player.

 

 

 

 

DedoDireita.png

 
Ilustração :

 

 

 

 

 

 

 

 

Funcionamento do script

 

 

 

219b993.png

 

 

 

 
Ilustração de !ppoints

 

 

10z9y7p.png

 

 

 

 

 

Creditos:
LsM

 

 

 

 
A
í está galera, espero que gostem, e, para os preguiçosos, disponibilizei o download do sistema completo:

 

 

 

 

 

 

 

 

 

Ótimo tutorial, ainda colocou as funções pra usar em um npc ^^  

Eu queria em vez do player receber esse "point", receber outra coisa, exemplo: possuo uma moeda no meu ot chamada event point, adquirida em eventos,quests etc, existe npcs que vendem itens por event points e tal, pode me dizer onde altero para o player receber em vez desses pontos, o event point?  OBS: event point é um iten, creio que os pontos do seu script não aparecem na mochila hehe

  • 9 months later...
  • Respostas 31
  • Visualizações 14k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • Eu sei que este topico é antigo mas eu queria usar esse script em um npc e como intendo muito pouco sobre scripts consegui fazer um npc com base em outro de meu server, enfim vai que alguem queira o n

  • /\ Isso voce coloca no sql. para por isso e só abrir a database do seu servidor e colocar sql editor, colcar isso e executar

  • Ótimo tutorial, ainda colocou as funções pra usar em um npc    Eu queria em vez do player receber esse "point", receber outra coisa, exemplo: possuo uma moeda no meu ot chamada event point, adqui

Posted Images

Postado

Eu sei que este topico é antigo mas eu queria usar esse script em um npc e como intendo muito pouco sobre scripts consegui fazer um npc com base em outro de meu server, enfim vai que alguem queira o npc e não saiba criar vou posta-lo aqui.

 

Em npc cria um arquivo com nome P trader.xml e adicione isso dentro:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Points Trader" script="P trader.lua" walkinterval="2000">
    <health now="100" max="100"/>
    <look type="453"/>
    <parameters>
        <parameter key="message_greet" value="Olá, |PLAYERNAME|! Eu vendo itens por P Points (Horas Online). Diga {Trade}."/>
    </parameters>
</npc>

 

Agora em npc/scripts crie um arquivo .lua com nome P trader.lua e adicione isso dentro:

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 = {
          [5957] = 240, -- [id do item] = quantos pontos vai custar
          [2159] = 25,
          [2396] = 5,
          [2397] = 5,
          [2398] = 5,
          [2493] = 5,
          [2494] = 5,
          [2495] = 5,
          [2496] = 5,
          [2331] = 1
          }
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if t[item] and getPoints(cid) < t[item] then
selfSay("Você precisa de "..t[item].." P points para comprar este item.", cid)
else
doPlayerRemovePoints(cid, t[item])
doPlayerAddItem(cid, item)
selfSay("Aqui esta 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, 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())

Acho que nem preciso explicar como configurar.

  • 1 month later...
Postado

@poko360 Testa esse aqui.

 

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 itemid = 2157 -- Novos points
local shopWindow = {}
local t = {
 [8850] = {price = 400}, -- [ID do item] e o preço que ele irá custar em points.
 [8929] = {price = 400},
 [8932] = {price = 400},
 [8926] = {price = 400},
 [2424] = {price = 400},
 [11296] = {price = 200},
 [11295] = {price = 200},
 [11298] = {price = 200},
 [11297] = {price = 200},
 [2527] = {price = 200},
 [2108] = {price = 900},
 [9019] = {price = 900},
 [3955] = {price = 900}
 }
local onBuy = function(cid, item, subType, amount, ignoreCap, inBackpacks)
if  t[item] and getPlayerItemCount(cid, itemid) < t[item].price then
selfSay("you do not have "..t[item].price.." Nugget Coins.", cid)
else
doPlayerAddItem(cid, item)
doPlayerRemoveItem(cid, itemid, (t[item].price))
selfSay("Here you 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())

 

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo