Ir para conteúdo
  • 0

Script Ganhando xp por tempo online


Cell18

Pergunta

9 respostass a esta questão

Posts Recomendados

  • 0

Abra o creaturescripts.xml e coloque essas tags:

 

<event type="login" name="ExpPorHoraLogin" event="script" value="expporhora.lua"/>
<event type="logout" name="ExpPorHoraLogout" event="script" value="expporhora.lua"/>

 

agora crie um arquivo chamado expporhora.lua em data/creaturescripts/scripts e cole isso dentro:

 

expTable = {} -- não modifique
interval = 60 * 60 * 1000
expGain = 10000

function execLogin(cid, lastLogin)
   registerCreatureEvent(cid, "ExpPorHoraLogout")
   if not expTable[getPlayerGUID(cid)] then
       expTable[getPlayerGUID(cid)] = {timeOnline = 0}
   end
   expTable[getPlayerGUID(cid)].lastLogin = os.clock()
   expTable[getPlayerGUID(cid)].event = addEvent(addExp, interval - 1000 * expTable[getPlayerGUID(cid)].timeOnline, cid)
end
function addExp(cid)
   if not isCreature(cid) then return end
   expTable[getPlayerGUID(cid)].timeOnline = 0
   doPlayerAddExperience(cid, expGain)
   doSendAnimatedText(getThingPos(cid), expGain, 215)
   doPlayerSendTextMessage(cid, 27, "Você recebeu "..expGain.." xp por ficar 1 hora online!")
   execLogin(cid, os.clock())
end

function onLogout(cid)
   if not expTable[getPlayerGUID(cid)] then return true end
   expTable[getPlayerGUID(cid)].timeOnline = expTable[getPlayerGUID(cid)].timeOnline +
       os.clock() - expTable[getPlayerGUID(cid)].lastLogin
   stopEvent(expTable[getPlayerGUID(cid)].event) 
return true
end

function onLogin(cid)
   if getCreatureName(cid) == "Account Manager" then return true end
   execLogin(cid)
return true 
end

 

o tempo salva, significa que se o player fica 30 min online e fizer logout, quando ele entrar de novo só vai precisar esperar mais 30 min pra ganhar o xp. o tempo só é resetado se o servidor fechar

Link para o comentário
Compartilhar em outros sites

  • 0

Muito Obrigado Bru123 (y) rep+

 

OK... irei testar, mas antes gostaria de saber....

 

Tem como eu editar aí pra n salvar esse tempo? pq só quero recompenssar se ficar uma hora direto mesmo, e que seja a cada hora online, se ele ficar 2 hroas ganha novamente, o mesmo xp...

 

e...

 

if getCreatureName(cid) == "Account Manager" then return true end

 

Eu não uso acc manager no meu server, teve até um cara que criou char com esse nome, no caso ele n receberá o xp, é isso?

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

  • 0

sim, se o cara tiver o nome de Account Manager ele não iria ganhar, ta aqui sem salvar tempo:

 

local interval = 60 * 60 * 1000
local expGain = 10000

local function addExp(cid)
   if not isCreature(cid) then return end
   doPlayerAddExperience(cid, expGain)
   doSendAnimatedText(getThingPos(cid), expGain, 215)
   doPlayerSendTextMessage(cid, 27, "Você recebeu "..expGain.." xp por ficar 1 hora online!")
   addEvent(addExp, interval, cid)
end

function onLogin(cid)
   addEvent(addExp, interval, cid)
return true 
end

Link para o comentário
Compartilhar em outros sites

  • 0

Muito Obrigad Brun123!

 

Me ajudou muito...

 

Talvez eu até use o 1º mesmo com tempo, fiquei pensando que não seria justo tipo, o player morre mas ele n parou de jogar, ele continua...

 

Só fico pensando se isso irá pesar por salvar tempo online, meu server já ta um pouco pesadinho...

 

Valeu, abraço! (Y)

Link para o comentário
Compartilhar em outros sites

  • 0

bom amigo, em questão de processamento nem precisa se preocupar, esse scripts são executados quase que instantaneamente

agora em relação a uso de memória, com uns 500 players online seu servidor deve ocupar mais ou menos uns 8 kb de memória a mais, que sinceramente, não é nada...

Link para o comentário
Compartilhar em outros sites

  • 0

Muitissimo Obrigado pelo script e pelas informações. Já estou usando no meu server.

 

Como eu disse anteriormente me ajudou bastante. abraço!

 

 

 

Pedido entregue. moderação pode fechar o tópico.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...