
Tudo que xWhiteWolf postou
-
[ PEDIDOS ] DODGE e CRITICAL SYSTEMS
dá algum erro ou só não funciona? que versões que vcs tão usando?
-
(Resolvido)[Pedido] Globalevents e storage Global
eu sempre uso onLogin, por isso te aconselhei. O onLogout dá pra burlar, o onLogin não
-
(Resolvido)[Pedido] Globalevents e storage Global
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.
-
(Resolvido)[PEDIDO] MiniGame ~ Acerte o Alvo
usar mais de uma vez oque?
-
(Resolvido)[Pedido] Globalevents e storage Global
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?
-
(Resolvido)[Pedido] Globalevents e storage Global
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...
-
Gran Castle Event (8.54+)
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...
-
(Resolvido)Globalevents executando 2x seguidas
salva numa variável se ele ja foi executado kk, é bem simples até.
-
como colocar % do condition funcionar
fica assim @Luccan Medeiros
-
como colocar % do condition funcionar
^ 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)
-
Ajuda Aperfeiçoar script pls
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.
-
Glacier Set dando conditions em área
troca if canEffect (cPos) and mob ~= 0 and isMonster(mob) then por if canEffect (cPos) and mob ~= 0 and isCreature(mob) then
-
Quest Log
data/xml/quests.xml. Lá você configura as missions pelo storage
-
Ajuda Aperfeiçoar script pls
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'
-
(Resolvido)Globalevents executando 2x seguidas
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.
-
Pedido: spell ou talkaction com a mesma função do exiva!
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
-
Pedido: spell ou talkaction com a mesma função do exiva!
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
-
Pedido: spell ou talkaction com a mesma função do exiva!
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.
-
(Resolvido)[PEDIDO] Nascer respawn com player na tela
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.
-
Evento de Record Players
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
-
Evento de Record Players
é 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
- Magnus Challenger
-
(Resolvido)Globalevent com problemas
ele disse q o evento onThink não foi encontrado.. vc tá usando function onTime() troca por function onThink()
-
Comando p/ monstros andarem até determinada posição (wave)
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.
- Dodge System 8.54+