CE
pedido

Script Ganhando xp por tempo online

Por Cell18, 18 de mai. de 2013 em Scripts

scrpt xp pot tempo online.
resolvido
script
10
2.1k
Cell18C
18 de maio de 2013 às 07:26

Um script que dê 10000 de xp a cada hora online do char...

 

(y)

brun123B
18 de maio de 2013 às 12:21

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

Cell18C
19 de maio de 2013 às 13:57

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 Maio 19 por Cell18

brun123B
19 de maio de 2013 às 14:14

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

Cell18C
19 de maio de 2013 às 21:46

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)

brun123B
19 de maio de 2013 às 22:32

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...

Cell18C
21 de maio de 2013 às 13:52

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.

BhorisB
23 de maio de 2013 às 09:21

Duvida senada.

Topico Reportado.

RoksasR
23 de maio de 2013 às 12:38

Tópico movido para a seção de dúvidas e pedidos resolvidos.

RoksasR
23 de maio de 2013 às 12:38

Tópico movido para a seção de dúvidas e pedidos resolvidos.