Ir para conteúdo

xWhiteWolf

Héroi
  • Registro em

  • Última visita

Tudo que xWhiteWolf postou

  1. dá algum erro ou só não funciona? que versões que vcs tão usando?
  2. eu sempre uso onLogin, por isso te aconselhei. O onLogout dá pra burlar, o onLogin não
  3. mesmo sendo ao deslogar, vc pode usar onLogin.. dessa forma se ele logar e tiver com o storage ele é enviado pro templo. O efeito é o mesmo.
  4. 1- vc tá usando um valor muito grande pro storage.. tenta algo no máximo com 5 digitos. 2- faltou um return true antes do ultimo end 3- Por que fazer onLogout e não onLogin?
  5. rapaz, edita seu tópico e refaz ele sem falar coisa que vc não sabe. Faz o pedido do jeito que vc quer.. se vc ficar usando termos como global storage, player storage fica muito confuso. Eu li duas vezes e ainda não entendi oque vc quer...
  6. eu corrigi, na linha 18 tá GRANTOWER.GRANTOWER.SAVEWINNERGUILD, era pra ser só GRANTOWER.SAVEWINNERGUILD, saiu duas vezes o GRANTOWER., desatenção minha. Agora essa mudança q vc pediu, bem. Não parece algo muito complicado só q eu to a muito tempo sem mexer nele e eu não sei que tipos de consequencias essa mudança teria. Não me leve a mal mas é muito coisa pra testar e eu não tenho um servidor com players pra me ajudar nisso, então acho melhor mantermos assim do que eu tentar fazer qlqer besteira aí e acabar bugando tudo no seu servidor...
  7. salva numa variável se ele ja foi executado kk, é bem simples até.
  8. fica assim @Luccan Medeiros
  9. ^ isso vai dar errado porque a função math.random está fora do callback (function onCastSpell), logo, ela será chamada uma única vez ao abrir o servidor e isso implica q ela será sempre o valor até que seja dado reload ou que o servidor feche e abra novamente. O jeito de fazer isso é criar dois combats iguais e controlar dentro do escopo do callback qual dos dois combats vc irá utilizar na spell, se a chance for <= X então usa o segundo (que estará vinculado com a condition)
  10. eu não faço idéia de onde configura isso, mas te garanto q não é nesse script aí. Provavelmente no xml, config.lua ou alguma lib do npchandler.. desculpa não poder te ajudar mais.
  11. troca if canEffect (cPos) and mob ~= 0 and isMonster(mob) then por if canEffect (cPos) and mob ~= 0 and isCreature(mob) then
  12. xWhiteWolf postou uma resposta no tópico em Suporte Tibia OTServer
    data/xml/quests.xml. Lá você configura as missions pelo storage
  13. só duplicar essa parte aqui e editar o texto, a posição e o valor local travelNode = keywordHandler:addKeyword({'premmy'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Voce quer mesmo viajar?'})travelNode:addChildKeyword({'yes'}, StdModule.travel, {npcHandler = npcHandler, premium = true, level = 0, cost = 2200, destination = {x=1058, y=1046, z=5} })travelNode:addChildKeyword({'no'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, reset = true, text = 'Too expensive, eh?'}) a frase 'premmy' tb tem que ser diferente pra não conflitar. aí nessa parte aqui: keywordHandler:addKeyword({'travel'}, StdModule.say, {npcHandler = npcHandler, onlyFocus = true, text = 'Eu posso te teleportar. Fale \'premmy\'.'}) vc tem que modificar o texto pra quando vc dizer travel ele te falar a outra opção também além de 'premmy'
  14. global events é onThink, ou seja, a cada 500 milisegundos ele vai checar se X condições são satisfeitas e executar. Se vc tá usando um horário programado (12:00:00) por ex, ele vai virar 12:00:00 e executar a primeira vez, dps de 500 milisegundos ele vai olhar pro 12:00:00 e perguntar, é 12:00:00? e executar de novo. Muito provavelmente seja isso, vc tem que fazer ele ignorar a outra execução via código ou mexendo nas tags.
  15. no github oficial do theforgotten server existe um pull request pra transformar exiva pra spell.. vai ser dificil de adaptar pra 0.4.. mas é um começo https://github.com/otland/forgottenserver/pull/1505/commits/3268de1dc0aa5e2d40b2c4810615a02dae58623b
  16. tenho quase certeza q vc deletou o campo custom flags/flags de players, aí ele não consegue saber se o player é gm e mostra o exiva como não online
  17. Isso é o exiva na source do tfs 1.2, como vc não especificou.. espero q ajude. bool InstantSpell::SearchPlayer(const InstantSpell*, Creature* creature, const std::string& param) { //a. From 1 to 4 sq's [Person] is standing next to you. //b. From 5 to 100 sq's [Person] is to the south, north, east, west. //c. From 101 to 274 sq's [Person] is far to the south, north, east, west. //d. From 275 to infinite sq's [Person] is very far to the south, north, east, west. //e. South-west, s-e, n-w, n-e (corner coordinates): this phrase appears if the player you're looking for has moved five squares in any direction from the south, north, east or west. //f. Lower level to the (direction): this phrase applies if the person you're looking for is from 1-25 squares up/down the actual floor you're in. //g. Higher level to the (direction): this phrase applies if the person you're looking for is from 1-25 squares up/down the actual floor you're in. Player* player = creature->getPlayer(); if (!player) { return false; } enum distance_t { DISTANCE_BESIDE, DISTANCE_CLOSE, DISTANCE_FAR, DISTANCE_VERYFAR, }; enum direction_t { DIR_N, DIR_S, DIR_E, DIR_W, DIR_NE, DIR_NW, DIR_SE, DIR_SW, }; enum level_t { LEVEL_HIGHER, LEVEL_LOWER, LEVEL_SAME, }; Player* playerExiva = g_game.getPlayerByName(param); if (!playerExiva) { return false; } if (playerExiva->isAccessPlayer() && !player->isAccessPlayer()) { player->sendCancelMessage(RETURNVALUE_PLAYERWITHTHISNAMEISNOTONLINE); g_game.addMagicEffect(player->getPosition(), CONST_ME_POFF); return false; } const Position& lookPos = player->getPosition(); const Position& searchPos = playerExiva->getPosition(); int32_t dx = Position::getOffsetX(lookPos, searchPos); int32_t dy = Position::getOffsetY(lookPos, searchPos); int32_t dz = Position::getOffsetZ(lookPos, searchPos); distance_t distance; direction_t direction; level_t level; //getting floor if (dz > 0) { level = LEVEL_HIGHER; } else if (dz < 0) { level = LEVEL_LOWER; } else { level = LEVEL_SAME; } //getting distance if (std::abs(dx) < 4 && std::abs(dy) < 4) { distance = DISTANCE_BESIDE; } else { int32_t distance2 = dx * dx + dy * dy; if (distance2 < 10000) { distance = DISTANCE_CLOSE; } else if (distance2 < 75076) { distance = DISTANCE_FAR; } else { distance = DISTANCE_VERYFAR; } } //getting direction float tan; if (dx != 0) { tan = static_cast<float>(dy) / dx; } else { tan = 10.; } if (std::abs(tan) < 0.4142) { if (dx > 0) { direction = DIR_W; } else { direction = DIR_E; } } else if (std::abs(tan) < 2.4142) { if (tan > 0) { if (dy > 0) { direction = DIR_NW; } else { direction = DIR_SE; } } else { if (dx > 0) { direction = DIR_SW; } else { direction = DIR_NE; } } } else { if (dy > 0) { direction = DIR_N; } else { direction = DIR_S; } } std::ostringstream ss; ss << playerExiva->getName(); if (distance == DISTANCE_BESIDE) { if (level == LEVEL_SAME) { ss << " is standing next to you."; } else if (level == LEVEL_HIGHER) { ss << " is above you."; } else if (level == LEVEL_LOWER) { ss << " is below you."; } } else { switch (distance) { case DISTANCE_CLOSE: if (level == LEVEL_SAME) { ss << " is to the "; } else if (level == LEVEL_HIGHER) { ss << " is on a higher level to the "; } else if (level == LEVEL_LOWER) { ss << " is on a lower level to the "; } break; case DISTANCE_FAR: ss << " is far to the "; break; case DISTANCE_VERYFAR: ss << " is very far to the "; break; default: break; } switch (direction) { case DIR_N: ss << "north."; break; case DIR_S: ss << "south."; break; case DIR_E: ss << "east."; break; case DIR_W: ss << "west."; break; case DIR_NE: ss << "north-east."; break; case DIR_NW: ss << "north-west."; break; case DIR_SE: ss << "south-east."; break; case DIR_SW: ss << "south-west."; break; } } player->sendTextMessage(MESSAGE_INFO_DESCR, ss.str()); g_game.addMagicEffect(player->getPosition(), CONST_ME_MAGIC_BLUE); return true; } ele da a mensagem de player não online caso o player tenha acesso de admin, então vê ai na source em spells.cpp se seu exiva tá parecido com esse e quais as condições pra retornar a mensagem de não está online, aí quando vc entender a causa do problema você vai ter um norte pra solução do problema. exiva "solução.
  18. dificilmente eu defendo alguém nesse fórum mas você foi o único aqui que demonstrou não saber nada de programação. Pedindo pra comentar função? que coisa absurda.. essa função é chamada em vários lugares da source, só comentar iria crashar seu server. Sem falar que o caronte modificou o return true para return false. Não sei se vc notou.. e isso realmente resolve.
  19. faltou só dizer a versão.. function onLogin() -- pega numero de players online -- se o numero for maior que X e o numero for maior que um globalstorage q salva o record: -- pra todos os players online, dar item correspondente ao index de X fim
  20. é uma boa idéia, mas por que manter por talkactions se vc pode automatizar pra funcionar pra quantidades pré definidas: 50, 60, 80, 100, 120, 150? aí vc nao tem q estar online pra dar !record
  21. xWhiteWolf postou uma resposta no tópico em Monsters, NPC, Raids & Mounts
    poxa, valeu amigo kk
  22. ele disse q o evento onThink não foi encontrado.. vc tá usando function onTime() troca por function onThink()
  23. Usa a função getCreaturePath do Elwyn, ela é a melhor solução (via source) q vc pode encontrar pra esse tipo de situação. Rola conversar também com o Skulls do xtibia, ele tá desenvolvendo um servidor de tibia MOBA e ele usa esse sistema pros minions. A função q eu desenvolvi foi apenas uma gambiarra, tentei melhorar ela mas não rolou, ficava muito pesado analisar a árvore de possibilidades.

Informação Importante

Confirmação de Termo