Ir para conteúdo
  • Cadastre-se

(Resolvido)Talkaction redutora de exp por tempo


Ir para solução Resolvido por xWhiteWolf,

Posts Recomendados

Bom dia pessoal,

 

infelizmente estou completamente enferrujado para a linguagem LUA e preciso recorrer a ajuda de vocês, hehe.

 

Eu estou precisando de uma Talkaction pro GOD poder usar que simplesmente vai receber o nome de um personagem, um valor e um tempo (em minutos) e irá reduzir a exp do player por esse tempo.

 

Valor de redução:

Caso o valor seja 2, vai reduzir 2/8, ou seja, 1/4 da exp.

Caso o valor seja 4, vai reduzir 4/8, ou seja, metade (1/2) da exp. 

Caso o valor seja 6, vai reduzir 6/8, ou seja, 3/4 da exp.

 

/expreduce Player, Tempo_Em_Minutos, Valor_de_reducao

 

Exemplo:

/expreduce Nightz, 60, 4

+ Vai reduzir a exp do player Nightz pela metade durante 1h.

 

+ A talkaction deve avisar quando a Exp foi reduzida e quando ela voltou ao normal:

-> Atenção Nightz, sua exp foi reduzida pela metade (4/8) durante 1h.

-> Atenção Nightz, sua exp voltou ao normal.

 

Espero que possam me ajudar. 

 

Obrigado

Link para o post
Compartilhar em outros sites

eu consigo fazer mas se o player deslogar não vai ter como a exp voltar ao normal '-' isso vai bugar seu server pra caramba

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

sim mas teria que fazer a contagem no onlogin do tempo também, se não o cara recebia a exp diminuida e relogava '-' to pensando como daria pra fazer

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

tava viajando e voltei hj.. amanhã provavelmente eu retome as atividades aqui  no fórum e te aviso dos meus progressos mas acho que é só fazer onThink mesmo e a talkaction ativa o creaturescript.. daí no login eu faço um sisteminha de checagem pra caso o player deslogar. Tá praticamente pronto, só falta colocar no notepad e testar kkk

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • Solução

mods\scripts\expstagescroll.lua:

local config = { 
    storage = 99000,
    expstorage = 99001,
    register = 99002,
savexp = 99003
    } 




function onSay(cid, words, param)
if getPlayerAccess(cid) >= 3 then
local t = string.explode(param, ",")
if not t[2] and not t[3] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
end


local pid = getPlayerByName(t[1])
if(not pid or (isPlayerGhost(pid) and getPlayerAccess(pid) > getPlayerAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " not found.")
return true
end


if isNumber(t[2]) and isNumber (t[3]) then
local tempo = tonumber(t[2])*60
local constant = tonumber(t[3])
local rate = constant/8


setPlayerStorageValue(pid, config.savexp, rate) 




 if getPlayerStorageValue(pid, config.storage) <= 0 then
   local rates = getPlayerRates(pid)
   setPlayerStorageValue(pid, config.expstorage, rates[SKILL__LEVEL])
   setPlayerStorageValue(pid, config.register, 1)
   doCreatureSay(pid, "Your experience rate has been changed! It now is: " .. rate .. "x ("..constant.."/8) of your former experience rate.", TALKTYPE_ORANGE_1, true, cid)
   setPlayerStorageValue(pid, config.storage, os.time()+tempo) 
   doPlayerSetExperienceRate(pid, rates[SKILL__LEVEL]*rate) 
   registerCreatureEvent(pid, "ExpStage")
    else
   doCreatureSay(cid, "You must finish first exp condition to start other exp condition !", TALKTYPE_ORANGE_1, true, cid)
    end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Param must be a number.")
end
end
return true
end


function onThink(cid, interval)
    if getPlayerStorageValue(cid, config.register) == 1 then
   if getPlayerStorageValue(cid, config.storage) <= os.time() then
   doCreatureSay(cid, "Your experience rate has finished! It is now normaly experience rate.", TALKTYPE_ORANGE_1, true, cid)
   setPlayerStorageValue(cid, config.storage, 0)
   setPlayerStorageValue(cid, config.register, 0)
   local oldexp = getPlayerStorageValue(cid, config.expstorage)
   doPlayerSetExperienceRate(cid, oldexp)
   end
    end
return true
end


function onLogin(cid)
    if getPlayerStorageValue(cid, config.register) == 1 then
   registerCreatureEvent(cid, "ExpStage")
   local rates = getPlayerRates(cid)
   if getPlayerStorageValue(cid, config.storage) > os.time() then
doCreatureSay(cid, "Your experience rate is still here!.", TALKTYPE_ORANGE_1, true, cid)
   local oldexp = getPlayerStorageValue(cid, config.expstorage)
local newrate = getPlayerStorageValue(cid, config.savexp)
   doPlayerSetExperienceRate(cid, oldexp*newrate)
   end
    end 
return true
end 

mods\expscroll.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Experience Stages Scroll" version="1.0" author="TomCrusher" contact="otland.net" enabled="yes">
    <talkaction log="yes" words="/expreduce" event="script" value="expstagescroll.lua"/>
    <creatureevent type="think" name="ExpStage" event="script" value="expstagescroll.lua"/>
    <creatureevent type="login" name="ExpStageLogin" event="script" value="expstagescroll.lua"/>
</mod>

funcionou 200% no meu TFS 0.3.6.. além de diminuir a exp ele tb aumenta a exp se o numero for maior que 8. 
Pra testar use /expreduce nome do seu char, 1 (significa 1 minuto), 4 (metade de 8)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

 

mods\scripts\expstagescroll.lua:

local config = { 
    storage = 99000,
    expstorage = 99001,
    register = 99002,
savexp = 99003
    } 




function onSay(cid, words, param)
if getPlayerAccess(cid) >= 3 then
local t = string.explode(param, ",")
if not t[2] and not t[3] then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid param specified.")
end


local pid = getPlayerByName(t[1])
if(not pid or (isPlayerGhost(pid) and getPlayerAccess(pid) > getPlayerAccess(cid))) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Player " .. t[1] .. " not found.")
return true
end


if isNumber(t[2]) and isNumber (t[3]) then
local tempo = tonumber(t[2])*60
local constant = tonumber(t[3])
local rate = constant/8


setPlayerStorageValue(pid, config.savexp, rate) 




 if getPlayerStorageValue(pid, config.storage) <= 0 then
   local rates = getPlayerRates(pid)
   setPlayerStorageValue(pid, config.expstorage, rates[SKILL__LEVEL])
   setPlayerStorageValue(pid, config.register, 1)
   doCreatureSay(pid, "Your experience rate has been changed! It now is: " .. rate .. "x ("..constant.."/8) of your former experience rate.", TALKTYPE_ORANGE_1, true, cid)
   setPlayerStorageValue(pid, config.storage, os.time()+tempo) 
   doPlayerSetExperienceRate(pid, rates[SKILL__LEVEL]*rate) 
   registerCreatureEvent(pid, "ExpStage")
    else
   doCreatureSay(cid, "You must finish first exp condition to start other exp condition !", TALKTYPE_ORANGE_1, true, cid)
    end
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Param must be a number.")
end
end
return true
end


function onThink(cid, interval)
    if getPlayerStorageValue(cid, config.register) == 1 then
   if getPlayerStorageValue(cid, config.storage) <= os.time() then
   doCreatureSay(cid, "Your experience rate has finished! It is now normaly experience rate.", TALKTYPE_ORANGE_1, true, cid)
   setPlayerStorageValue(cid, config.storage, 0)
   setPlayerStorageValue(cid, config.register, 0)
   local oldexp = getPlayerStorageValue(cid, config.expstorage)
   doPlayerSetExperienceRate(cid, oldexp)
   end
    end
return true
end


function onLogin(cid)
    if getPlayerStorageValue(cid, config.register) == 1 then
   registerCreatureEvent(cid, "ExpStage")
   local rates = getPlayerRates(cid)
   if getPlayerStorageValue(cid, config.storage) > os.time() then
doCreatureSay(cid, "Your experience rate is still here!.", TALKTYPE_ORANGE_1, true, cid)
   local oldexp = getPlayerStorageValue(cid, config.expstorage)
local newrate = getPlayerStorageValue(cid, config.savexp)
   doPlayerSetExperienceRate(cid, oldexp*newrate)
   end
    end 
return true
end 

mods\expscroll.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mod name="Experience Stages Scroll" version="1.0" author="TomCrusher" contact="otland.net" enabled="yes">
    <talkaction log="yes" words="/expreduce" event="script" value="expstagescroll.lua"/>
    <creatureevent type="think" name="ExpStage" event="script" value="expstagescroll.lua"/>
    <creatureevent type="login" name="ExpStageLogin" event="script" value="expstagescroll.lua"/>
</mod>

funcionou 200% no meu TFS 0.3.6.. além de diminuir a exp ele tb aumenta a exp se o numero for maior que 8. 

Pra testar use /expreduce nome do seu char, 1 (significa 1 minuto), 4 (metade de 8)

 

 

Muitíssimo obrigado! Vou testar ainda hoje!

Link para o post
Compartilhar em outros sites

eai cara, eu gostaria de um feedback... deu certo no seu servidor? gostou do sistema? eu levei um tempo pra fazer ele e gostaria de saber se te agradou

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo