Ir para conteúdo
Banner com Efeitos

Featured Replies

Postado

tenho um script de exp potion, que da +50% de exp pra todos os players do rank 2 abaixo, e 25% pro top level


script completo da exp potion:

Spoiler

function onUse(cid, item, frompos, item2, topos)
    local pausa = 10*60*1000 -- (1000 = 1 segundos) Tempo que o script durará
    local texto = "Você adicionou +50% da sua Experiencia \n \n Joadores TopLevel tem -50% do efeito total da expfood" -- Texto que irá receber ao usar a potion.
    local textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar.
    local exp = getPlayerRates(cid)[SKILL__LEVEL] + 0.5 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server.
    local exp2 = getPlayerRates(cid)[SKILL__LEVEL] + 0.25 -- O quanto que você quer que dobre sua experiencia, por exemplo 2 é 2x as rates do seu server.
    local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal.
    local limitedeuso = 49015
    local tempo = 10*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos
    local textofinal1 = "Você já esta sob efeito da potion, se nao estiver, teste relogar!"
    local seuitem = 6541 -- seu item que dará double exp
    local efeito1 = 19 -- efeito que ficara com o char por meia hora
    local efeito2 = 14 -- efeito que acontecera no momento que usar a pot
    --fim da parte configuravel não mecha se nao tiver conhecimento de scripting
    local timeEffect = 61 -- tempo em segundos que o efeito vai apareceer no player, 31 = 30 segundos. sempre coloque 1 segundo a mais. 
    local function effect(cid, seconds)
        if not isCreature(cid) then return LUA_ERROR end
        local t, pos = convertTime(0, seconds), getCreaturePosition(cid)
        doSendMagicEffect(pos, 19)
        doSendAnimatedText(pos, t.minutes > 0 and t.minutes..":"..t.seconds or t.seconds, math.random(150,150))
        if seconds ~= 1 then addEvent(effect, 1000, cid,seconds-1) end
    end
    function getNameTopServer()
    local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1"), ""
    if (query:getID() ~= -1) then
        name = query:getDataString("name")
    end
    return name
end
    local function potion(cid)
    doPlayerSetExperienceRate(cid,expfinal)
    end
    if getPlayerLevel(cid) <= 129999 then
doCreatureSay(cid, "[ERROR] Apenas players com lv. 120k mais, podem usar este item.", TALKTYPE_ORANGE_1)
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
return true
end
    if getTileInfo(getThingPos(cid)).optional or getTileInfo(getThingPos(cid)).protection then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce nao pode usar exp foods em area Protection Zone", TALKTYPE_ORANGE_1)
    end
    if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce ja esta sob efeito da potion, se nao estiver tente relogar!", TALKTYPE_ORANGE_1)
    end
    if getNameTopServer() == getPlayerName(cid) and item.itemid == seuitem then
    doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp2)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 420)
        doPlayerSendTextMessage(cid,22,texto)
        return true
    end
    if item.itemid == seuitem and getPlayerStorageValue(cid, 2311) <= 0 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 420)
        doPlayerSendTextMessage(cid,22,texto)
    elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 1 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 480)
        doPlayerSendTextMessage(cid,22,texto)
    elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 2 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 540)
        doPlayerSendTextMessage(cid,22,texto)
    elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 3 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 600)
        doPlayerSendTextMessage(cid,22,texto)
    elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) == 4 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 660)
        doPlayerSendTextMessage(cid,22,texto)
    elseif item.itemid == seuitem and getPlayerStorageValue(cid, 2311) >= 5 then
        doRemoveItem(item.uid,1)
        doPlayerSetExperienceRate(cid,exp)
        doSendMagicEffect(frompos,efeito2)
        setPlayerStorageValue(cid, limitedeuso, os.time() + 720)
        doPlayerSendTextMessage(cid,22,texto)
    end
    return true
end


("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1")
a partir dessa linha, alguem sabe me dizer, como eu seleciono um player especifico, tipo TOP 2? ... TOP 3... do rank?


essa function, puxa o player top level 

Spoiler

function getNameTopServer()
    local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 1"), ""
    if (query:getID() ~= -1) then
        name = query:getDataString("name")
    end
    return name
end

 

Editado por poko360 (veja o histórico de edições)

Resolvido por FeeTads

Ir para solução
  • Respostas 10
  • Visualizações 776
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • tenta trocar a função do top pra essa:   function getNameTopServer() -- eu alteraria pra getNameTopCinco local i = 1 local query, name = db.getResult("SELECT `name`, `level` FROM `pla

  • tira o break desse segundo kkkkkk coloca assim: if NaoEstaCinco == 0 then if item.itemid == seuitem then doRemoveItem(item.uid,1) doPlayerSetExperienceRate(cid, expOutros) doSe

  • funcionou perfeitamente, mt obrigado man, Rep++

Posted Images

Postado
Em 22/08/2022 em 15:52, poko360 disse:

a partir dessa linha, alguem sabe me dizer, como eu seleciono um player especifico, tipo TOP 2? ... TOP 3... do rank?

 

transforma em table

function getNameTopServer()  -- eu alteraria pra getNameTopCinco
    local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {}
    if (query:getID() ~= -1) then
    	for i=1, 5 do
        	name[i] = query:getDataString("name")
      	end
    end
    return name
end


ai faz um script pra ler os names de 1 a 5
tipo
 

local name = getNameTopServer()
local exp = {0.5, 0.25, 0.20, 0.15, 0.10}
for j=1, 5 do
  if name[j] == getPlayerName(cid) and item.itemid == seuitem then
      doRemoveItem(item.uid,1)
      doPlayerSetExperienceRate(cid, exp[j])
      doSendMagicEffect(frompos,efeito2)
      setPlayerStorageValue(cid, limitedeuso, os.time() + 420)
      doPlayerSendTextMessage(cid,22,texto)
      return true
  end
end

 

Postado
  • Autor

eu botei assim:
 

Spoiler

function onUse(cid, item, frompos, item2, topos)
    local pausa = 10*60*1000 -- (1000 = 1 segundos) Tempo que o script durará
    local texto = "Você adicionou +100% da sua Experiencia \n \n Joadores TopLevel tem -50% do efeito total da expfood " -- Texto que irá receber ao usar a potion.
    local textofinal = "Acabou o potion de Experiencia." -- Texto que irá receber quando o efeito da potion acabar.
    local expfinal = 1 --Não mude, isso é para a experiencia voltar ao normal.
    local limitedeuso = 49015
    local tempo = 10*60*1000 -- 1000 = 1s então 1000 vezes 60 vezes 30 = 30 minutos
    local textofinal1 = "Você já esta sob efeito da potion, se nao estiver, teste relogar!"
    local seuitem = 2695 -- seu item que dará double exp
    local efeito1 = 19 -- efeito que ficara com o char por meia hora
    local efeito2 = 14 -- efeito que acontecera no momento que usar a pot
    --fim da parte configuravel não mecha se nao tiver conhecimento de scripting
    local timeEffect = 61 -- tempo em segundos que o efeito vai apareceer no player, 31 = 30 segundos. sempre coloque 1 segundo a mais. 
    local function effect(cid, seconds)
        if not isCreature(cid) then return LUA_ERROR end
        local t, pos = convertTime(0, seconds), getCreaturePosition(cid)
        doSendMagicEffect(pos, 19)
        doSendAnimatedText(pos, t.minutes > 0 and t.minutes..":"..t.seconds or t.seconds, math.random(150,150))
        if seconds ~= 1 then addEvent(effect, 1000, cid,seconds-1) end
    end
    function getNameTopServer()  -- eu alteraria pra getNameTopCinco
    local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {}
    if (query:getID() ~= -1) then
        for i=1, 5 do
            name[i] = query:getDataString("name")
          end
    end
    return name
end

    local function potion(cid)
    doPlayerSetExperienceRate(cid,expfinal)
    end
      if getPlayerLevel(cid) <= 219999 then
doCreatureSay(cid, "[ERROR] Apenas players com lv. 220k mais, podem usar este item.", TALKTYPE_ORANGE_1)
doSendMagicEffect(getThingPos(cid), CONST_ME_POFF)
return true
end
    if getTileInfo(getThingPos(cid)).optional or getTileInfo(getThingPos(cid)).protection then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce nao pode usar exp foods em area Protection Zone", TALKTYPE_ORANGE_1)
    end
    if item.itemid == seuitem and (getPlayerStorageValue(cid, limitedeuso) - os.time() > 0) then
    doSendMagicEffect(getPlayerPosition(cid), 2)
    return doCreatureSay(cid, "[Error] Voce ja esta sob efeito da potion, se nao estiver tente relogar!", TALKTYPE_ORANGE_1)
    end
    local name = getNameTopServer()
    local exp = {5, 4, 3, 2, 1}
    for j=1, 5 do
  if name[j] == getPlayerName(cid) and item.itemid == seuitem then
      doRemoveItem(item.uid,1)
      doPlayerSetExperienceRate(cid, exp[j])
      doSendMagicEffect(frompos,efeito2)
      setPlayerStorageValue(cid, limitedeuso, os.time() + 600)
      doPlayerSendTextMessage(cid,22,texto)
      return true
  end
end
    return true
end



funcionou apenas pro TOP Level, quando fui botar o char no top 2,3... nao funfou

Editado por poko360 (veja o histórico de edições)

Postado
  • Solução

tenta trocar a função do top pra essa:

 

function getNameTopServer()  -- eu alteraria pra getNameTopCinco
  	local i = 1
    local query, name = db.getResult("SELECT `name`, `level` FROM `players` WHERE `group_id` < 2 ORDER BY `level` DESC LIMIT 5"), {}
    if (query:getID() ~= -1) then
    	while(true) do
      		name[i] = query:getDataString("name")
      		i = i + 1
      		if not(query:next()) then
        		break
        	end
      	end
    end
    return name
end


e troca a outra por essa, vou colocar pra printar, me manda o que aparece no console quando tenta usar

local name = getNameTopServer()
local exp = {5, 4, 3, 2, 1}
local NaoEstaCinco = 0
local expOutros = 1
for j=1, 5 do
  if name[j] == getPlayerName(cid) and item.itemid == seuitem then
      doRemoveItem(item.uid,1)
      doPlayerSetExperienceRate(cid, exp[j])
      doSendMagicEffect(frompos,efeito2)
      setPlayerStorageValue(cid, limitedeuso, os.time() + 420)
      doPlayerSendTextMessage(cid,22,texto)
      NaoEstaCinco = 1
      break
      return true
  end
end
if NaoEstaCinco == 0 then
  if item.itemid == seuitem then
      doRemoveItem(item.uid,1)
      doPlayerSetExperienceRate(cid, expOutros)
      doSendMagicEffect(frompos,efeito2)
      setPlayerStorageValue(cid, limitedeuso, os.time() + 420)
      doPlayerSendTextMessage(cid,22,texto)
  end
end

 

Postado
  • Autor

man funcionou perfeitamente, se eu colocar, so que vi um "problema", ele nao é em tempo real, tem que esperar o server salvar (ou o rank atualizar) pra ele jogar a xp correta:
ai te pergunto:
se eu colocar um doPlayerSave(cid) no script ao executar a potion, da bom? (n da lag etc...?) ou tens uma ideia melhor?

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

Informação Importante

Confirmação de Termo