Ir para conteúdo
  • Cadastre-se

Normal [PEDIDO] Mensagem aparecer para o player quando ele upar X level


Posts Recomendados

Eai pessoal. Bom, eu estou querendo um script que quando o player pega X level apareça uma mensagem na tela para ele, igual aquela quando se pega level 8 no global e aparece avisando que você já pode sair de rook.

Agradeço desde já quem puder me ajudar.

Link para o post
Compartilhar em outros sites

tenta ae e me dá um retorno, se funcionou ou não e se supre a sua necessidade:

advanced_msg.lua

function onAdvance(cid, skill, oldlevel, newlevel)
	
	local text = "Parabens voce chegou ao nivel 200.\n\nAgora voce ja tem acesso permitido em:\nDesert Tower\nMagic Plate Armor Quest\n\nContinue sua aventura!"
	local text2 = "Parabens voce chegou ao nivel 300.\n\nAgora voce ja tem acesso permitido em:\nUndead Island\nHell Village\nUnderworld Quest\n\nContinue sua aventura!"
	
	if getPlayerLevel(cid) == 200 then
		doShowTextDialog(cid, 1976, text)
	elseif getPlayerLevel(cid) == 300 then
		doShowTextDialog(cid, 1976, text2)
	end
		doSendMagicEffect(getCreaturePosition(cid), 10)
end

tag em creaturescripts.xml

<event type="advance" name="advancedMSG" event="script" value="advanced_msg.lua"/>

em login.lua

registerCreatureEvent(cid, "advancedMSG")

 

se ajudei rep+.

Link para o post
Compartilhar em outros sites

:p

 

function onAdvance(cid, skill, oldlevel, newlevel)
	if newlevel ~= 8 or getPlayerVocation(cid) ~= 0 then
		return true
	end
	
	doPlayerSendTextMessage(cid, 22, "Congratulations! You are ready to leave this island and choose a vocation now. Go see the Oracle over the academy in Rookgaard before you advance to level 10!")
end

 

Editado por vankk
Ooops! (veja o histórico de edições)

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites
1 hora atrás, vankk disse:

:p

 


function onAdvance(cid, skill, oldlevel, newlevel)
	if newlevel ~= 8 or getPlayerVocation(cid) ~= 0 then
		return true
	end
	
	doPlayerSendTextMessage(cid, 22, "Congratulations! You are ready to leave this island and choose a vocation now. Go see the Oracle over the academy in Rookgaard before you advance to level 10!")
end

 

 

 

 

Não funcionou.

 

 

1 hora atrás, janmix disse:

tenta ae e me dá um retorno, se funcionou ou não e se supre a sua necessidade:

advanced_msg.lua


function onAdvance(cid, skill, oldlevel, newlevel)
	
	local text = "Parabens voce chegou ao nivel 200.\n\nAgora voce ja tem acesso permitido em:\nDesert Tower\nMagic Plate Armor Quest\n\nContinue sua aventura!"
	local text2 = "Parabens voce chegou ao nivel 300.\n\nAgora voce ja tem acesso permitido em:\nUndead Island\nHell Village\nUnderworld Quest\n\nContinue sua aventura!"
	
	if getPlayerLevel(cid) == 200 then
		doShowTextDialog(cid, 1976, text)
	elseif getPlayerLevel(cid) == 300 then
		doShowTextDialog(cid, 1976, text2)
	end
		doSendMagicEffect(getCreaturePosition(cid), 10)
end

tag em creaturescripts.xml


<event type="advance" name="advancedMSG" event="script" value="advanced_msg.lua"/>

em login.lua


registerCreatureEvent(cid, "advancedMSG")

 

se ajudei rep+.


O seu funcionou, porém cada skill que upa no char fica fazendo o efeito. E eu gostaria tambem que a mensagem aparecesse em branco na tela. Está aparecendo uma caixa de um book com a mensagem. 

Editado por dashjoe (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Adicione um return true em cima da linha end, e certifique que está tudo configurado.

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites
6 horas atrás, vankk disse:

Adicione um return true em cima da linha end, e certifique que está tudo configurado.


Funcionou. Obrigado! Mas tem um detalhe, aparece de 3 mensagens de uma vez e as mensagens na tela de quando upa um skill ou level ta demorando demais para sumir. Sabe como eu posso consertar isso?

Editado por dashjoe (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Desculpa é que não entendi bem o que era pra fazer, está ai o script, deixei ele mais configurável para facilitar pra você.

function onAdvance(cid, skill, oldlevel, newlevel)
	
	local config = {
	text = "Parabens voce chegou ao nivel 100. Agora voce esta pronto para enfrentar novos desafios!", -- primeira mensagem
	text2 = "Parabens voce chegou ao nivel 200. Agora voce tem acesso a Death Island.", -- segunda mensagem
	text3 = "Parabens voce chegou ao nivel 300. Voce ja pode fazer a Underworld Quest, boa sorte!", -- terceira mensagem
	efeito = 10, -- numero do efeito
	}
	
	if getPlayerLevel(cid) == 100 then -- so mudar o valor 100 para o level que queira.
		doPlayerSendTextMessage(cid, 22, config.text)
		doSendMagicEffect(getCreaturePosition(cid), config.efeito)
	elseif getPlayerLevel(cid) == 200 then -- so mudar o valor 200 para o level que queira. caso queira só uma mensagem coloca o level bem alto ex: 9999
		doPlayerSendTextMessage(cid, 22, config.text2)
		doSendMagicEffect(getCreaturePosition(cid), config.efeito)
	elseif getPlayerLevel(cid) == 300 then -- so mudar o valor 300 para o level que queira. caso queira só uma mensagem coloca o level bem alto ex: 9999
		doPlayerSendTextMessage(cid, 22, config.text3)
		doSendMagicEffect(getCreaturePosition(cid), config.efeito)
	end
end

tenta ai, se for isso rep+. se não for me cita ai que eu arrumo.

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.


  • Conteúdo Similar

    • Por Imperius
      O propósito é criar uma nova função em creaturescripts que será acionada toda vez que um novo report (CTRL + R) for aberto.
       
      Eu implementei para enviar uma notificação no grupo do Telegram, contendo os dados do report.
       
      Isso garantirá que os GMs tenham acesso aos reports dos jogadores mesmo quando não estiverem logados, e também evitará que algum report seja perdido caso o jogador saia do servidor.
      A parte do Telegram é apenas um exemplo. Você pode ajustar o script para executar outras ações desejadas.
       
      creatureevent.cpp:
      Dentro deste arquivo, localize a função:
       
      uint32_t CreatureEvent::executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap)  
      abaixo dela, adicione:
       
      uint32_t CreatureEvent::executeOpenRuleViolation(Player* player, std::string message) { if (!m_interface->reserveEnv()) { std::clog << "[Error - CreatureEvent::executeOpenRuleViolation] Call stack overflow." << std::endl; return 0; } ScriptEnviroment* env = m_interface->getEnv(); env->setScriptId(m_scriptId, m_interface); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushstring(L, message.c_str()); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; }  
      Após, procure por:
       
      std::string CreatureEvent::getScriptEventName() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "onLeaveChannel";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "onOpenRuleViolation";  
      Agora, procure por:
       
      std::string CreatureEvent::getScriptEventParams() const  
      abaixo de:
       
      case CREATURE_EVENT_CHANNEL_LEAVE: return "cid, channel, users";  
      adicione:
       
      case CREATURE_EVENT_OPEN_RULE_VIOLATION: return "cid, message";  
      Procure por:
       
      bool CreatureEvent::configureEvent(xmlNodePtr p)  
      abaixo de:
       
      else if(tmpStr == "leavechannel") m_type = CREATURE_EVENT_CHANNEL_LEAVE;  
      adicione:
       
      else if(tmpStr == "openruleviolation") m_type = CREATURE_EVENT_OPEN_RULE_VIOLATION;  
       
      creatureevent.h:
      Dentro deste arquivo, localize:
       
      enum CreatureEventType_t  
      adicione "CREATURE_EVENT_OPEN_RULE_VIOLATION" como o último item de enum CreatureEventType_t
       
      Exemplo:
       
      enum CreatureEventType_t { // ... CREATURE_EVENT_OPEN_RULE_VIOLATION };  
      Agora, procure por:
       
      uint32_t executeChannelLeave(Player* player, uint16_t channelId, UsersMap usersMap);  
      abaixo dela, adicione:
       
      uint32_t executeOpenRuleViolation(Player* player, std::string message);  
      game.cpp:
      Dentro deste arquivo, localize:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text)  
      e substitua por:
       
      bool Game::playerReportRuleViolation(Player* player, const std::string& text) { //Do not allow reports on multiclones worlds since reports are name-based if(g_config.getNumber(ConfigManager::ALLOW_CLONES)) { player->sendTextMessage(MSG_INFO_DESCR, "Rule violation reports are disabled."); return false; } cancelRuleViolation(player); boost::shared_ptr<RuleViolation> rvr(new RuleViolation(player, text, time(NULL))); ruleViolations[player->getID()] = rvr; ChatChannel* channel = g_chat.getChannelById(CHANNEL_RVR); if(!channel) return false; for(UsersMap::const_iterator it = channel->getUsers().begin(); it != channel->getUsers().end(); ++it) it->second->sendToChannel(player, SPEAK_RVR_CHANNEL, text, CHANNEL_RVR, rvr->time); CreatureEventList joinEvents = player->getCreatureEvents(CREATURE_EVENT_OPEN_RULE_VIOLATION); for(CreatureEventList::iterator it = joinEvents.begin(); it != joinEvents.end(); ++it) (*it)->executeOpenRuleViolation(player, text); return true; }  
      Agora é só compilar a source.
       
      depois em "data > creaturescripts > creaturescripts.xml", adicione:
       
      <event type="login" name="loginNotifyRuleViolation" script="notifyRuleViolation.lua"/> <event type="openruleviolation" name="openNotifyRuleViolation" script="notifyRuleViolation.lua"/>  
      em "data > creaturescripts > scripts", crie um arquivo notifyRuleViolation.lua e adicione:
       
      function onOpenRuleViolation(cid, message) local config = { token = "", -- Token do seu BOT no Telegram chatId = "" -- ID do chat do Telegram que será enviado a notificação. } local message = "Player: "..getCreatureName(cid).."\n\nReport:\n"..message.."" message = string.gsub(message, "\n", "%%0A") local url = "https://api.telegram.org/bot"..config.token.."/sendMessage" local data = "chat_id="..config.chatId.."&text="..message.."" local curl = io.popen('curl -d "'..data..'" "'..url..'"'):read("*a") return true end function onLogin(cid) registerCreatureEvent(cid, "openNotifyRuleViolation") return true end  
       
      Demonstração:
      1. Jogador abre um novo report (CTRL + R)

      2. notifyRuleViolation.lua, definido em creaturescripts.xml, é acionado para enviar uma notificação ao grupo do Telegram.
       

       
    • Por Jaurez
      .
    • Por Ghaz
      Fala pessoal tudo bem?
       
      Estou com dificuldades em um script e preciso da ajuda dos magos do LUA rs.
       
      Tenho um script que quando o player morre (onDeath), ele faz algumas coisas e depois ele chama uma função que deveria retornar uma table (array) para eu fazer o for com o ipairs certinho. Segue abaixo o código:
       
       
      Segue abaixo a função getPlayersInArea:
       
       
      Acontece que no código de cima (do primeiro spoiler) eu dou um print no retorno da função getPlayersInArea, porém ela não tá me retornando a table, tá me retornando só: 2
       
       
       
      Alguém consegue me ajudar em, como raios eu faço a função retornar a lista de players ao invés da quantidade? Acredito que ta retornando o count da table, e não os itens do array.
       
       
      Agradeço desde já, valeu tchurma!
    • Por FeeTads
      salve rapaziada, estou fazendo uma quest no meu OT que é necessário faze-la durante 10 dias consecutivos, porém caso o player perca um dia, a storage da quest reseta.
      Já tenho esses scripts prontos de 2 formas: global event que checa a storage de todos os player online no momento e caso ja tenha passado 24h ele tira a storage do player que está entre os 10 dias de quest.
      E também tenho um creatureScript de onLogin() que quando o player loga, ele entra num loop de verificação a cada 60s

      minha duvida: globalEvents vai checar todos os players online de uma só vez e fazer as alterações necessarias, isso pode lagar a distro, ou até mesmo crashar?
      o creatureScript vai entrar num loop até o player deslogar, isso numa média de 250 pessoa são diversas verificações em momentos diferentes, pode acabar lagando ou crashando?

      meu OT possui uma media de 300 pessoas online.

      Script globalEvents é esse:

      function onThink(interval, lastExecution)
          local players = {}
          local timer = os.time()
          for _, pid in pairs (getPlayersOnline()) do
              local storage = getPlayerStorageValue(pid, 1231234)
              if getPlayerStorageValue(pid,888251) > 0 and getPlayerStorageValue(pid,888251) <= 9 then
                  if storage - timer <= 1  then
                      table.insert(players, pid)
                  end
              end
          end
          
          if #players > 0 then
              for i = 1, #players do
                  doPlayerSendTextMessage(players[i],22,"seu dano voltou ao normal por vc nao ter feito a quest!")
                  setPlayerStorageValue(players[i],888251,0)
              end
          end
      return true
      end

      Script do Creature é esse:
      local storage = getPlayerStorageValue(cid,1231234)
              function checkStorage(cid) local timer = os.time()
                     if not isPlayer(cid) then return true end
                     if getPlayerStorageValue(cid,888251) > 0 and getPlayerStorageValue(cid, 888251) <= 9 then
                             if storage - timer <= 1 then
                                     setPlayerStorageValue(cid,888251,0)
                             end
                   end
                   addEvent(function()
                              checkStorage(cid)
                    end, 60000)
      end
      function onLogin(cid)
              checkStorage(cid)
      return true
      end
      function onLogout(cid)
             stopEvent(checkStorage[cid])
      return true
      end


      caso os códigos nao estejam legiveis me avisem como arrumar em .lua pf

      se quiserem usar os códigos podem usar a vontade kkkkkkk
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo