Ir para conteúdo

grafit

Membro
  • Registro em

  • Última visita

Tudo que grafit postou

  1. Sim, até que o novo IP seja pego por spoofing novamente. O ideal é achar o motivo do spoofing e arrumar, a menos que seja intencional. Vale lembrar que além de mudar o IP da máquina deveria mudar o nome do servidor também e eu não sei se seria viável.
  2. Vá no seu stages.xml e altere para: <?xml version="1.0" encoding="UTF-8"?> <stages> <config enabled="1"/> -- 0 desativa e 1 ativa <stage minlevel="1" maxlevel="8" multiplier="7"/> <stage minlevel="9" maxlevel="20" multiplier="6"/> <stage minlevel="21" maxlevel="50" multiplier="5"/> <stage minlevel="51" maxlevel="100" multiplier="4"/> <stage minlevel="101" multiplier="5"/> </stages> Boa sorte.
  3. O erro acontece na hora de carregar o script system? Você tem certeza que o executável é para 64bit?
  4. Exatamente isso. Se quiser posta uma print que eu vou te auxiliando
  5. Bom dia, 345sat! Você tem que ter em mente que possui uma rede em casa. Cada dispositivo conectado no seu roteador tem um IP diferente. Quem faz isso por você é o servidor de DHCP. Pensa comigo agora, na sua rede interna cada computador tem um IP, mas e quem está fora da sua rede? Como vai saber quem é você? Acho que você já deve ter ouvido falar em Gateway Padrão, certo? O Gateway Padrão é como se fosse a porta de saída da sua rede interna para a internet. Então só pra fixar, Pra alguém se conectar no seu computador precisa saber duas coisas, a sua porta de saída(Gateway Padrão) para se conectar a sua rede, e depois de conectado na sua rede precisa saber em qual computador está o seu servidor de tibia. As portas de acesso dos servidores de tibia são 7171 e 7172. Pensa comigo, como faz para saber qual computador tem qual porta de acesso? A solução pra isso é o redirecionamento de portas, que aponta a porta 7171 para o IP da sua máquina no roteador. Beleza, essa foi a teoria para você entender o funcionamento da sua rede. Recomendo que leia para aprender! Agora vamos para prática: Primeiro de tudo, nessa tela da sua print você tem que anotar o seu Endereço de IP e o seu Gateway Padrão. Note. seu Endereço de IP tem que ser algo parecido com 192.168...... Depois vá na aba rede e procure por redirecionamento de portas. Provávelmente lhe será pedido a porta que quer redirecionar e o seu Endereço de IP. Feito isso acredito que você já vai conseguir.
  6. Olha, dei uma pesquisada na web para ver os principais motivos de ban sem motivos e a grande maioria foi por treiner afk mesmo. Você pode tentar fazer o que o fireelement falou e entrar em contato com a staff do otservlist e explicar o ocorrido e torcer para que removam o ban.
  7. Qual é a versão do seu TFS?
  8. Bom dia, blindado! Esse erro pode ser por vários motivos.. Você já abriu o servidor antes? O erro sempre aparece quando chega em "loading script system"? Já verificou a arquitetura do seu computador, se é 32bit ou 64bit?
  9. Bom dia, glacialot! Acredito que o ban dura 30 dias. Se não me engano na sua conta do site informa o prazo para ser desbanido. Você realmente utilizou o spoofing? Se você é uma vítima recomendo que entre em contato com o suporte deles para tentar se explicar, mas lembre-se que o suporte deles é em inglês. Acesse http://otservlist.org/contactpara entrar em contato. Boa sorte!
  10. Foi testado no TFS 0.4 Para quem quiser usar nas versões mais atuais do TFS é um ótimo exercício de aprendizagem atualizar o código.
  11. Event droploot acontece quando um monstro ou player dropa 1 item. Em creatureevent.cpp procure: bool CreatureEvents::playerLogin(Player* player) { //fire global event if is registered bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if(it->second->getEventType() == CREATURE_EVENT_LOGIN && !it->second->executeLogin(player) && result) result = false; } return result; Adicione abaixo: bool CreatureEvents::dropLoot(Creature* creature, Item* item) { bool result = true; for(CreatureEventList::iterator it = m_creatureEvents.begin(); it != m_creatureEvents.end(); ++it) { if(it->second->getEventType() == CREATURE_EVENT_DROPLOOT && !it->second->executeDropLoot(creature, item)) result = false; } return result; } Ainda em creatureevents.cpp procure: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Adicione abaixo: else if(tmpStr == "droploot") m_type = CREATURE_EVENT_DROPLOOT; Procure: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Adicione abaixo: case CREATURE_EVENT_DROPLOOT: return "onDropLoot"; Procure: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Adicione abaixo: case CREATURE_EVENT_DROPLOOT: return "cid, item"; Procure: uint32_t CreatureEvent::executeLogout(Player* player, bool forceLogout) { //onLogout(cid, forceLogout) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(player->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local forceLogout = " << (forceLogout ? "true" : "false") << std::endl; scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(player->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushboolean(L, forceLogout); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeLogout] Call stack overflow." << std::endl; return 0; } } Adicione abaixo: uint32_t CreatureEvent::executeDropLoot(Creature* creature, Item* item) { //onDropLoot(cid, item) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { env->setRealPos(creature->getPosition()); std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(creature) << std::endl; env->streamThing(scriptstream, "item", item, env->addThing(item)); scriptstream << m_scriptData; bool result = true; if(m_interface->loadBuffer(scriptstream.str())) { lua_State* L = m_interface->getState(); result = m_interface->getGlobalBool(L, "_result", true); } m_interface->releaseEnv(); return result; } else { #ifdef __DEBUG_LUASCRIPTS__ char desc[35]; sprintf(desc, "%s", player->getName().c_str()); env->setEventDesc(desc); #endif env->setScriptId(m_scriptId, m_interface); env->setRealPos(creature->getPosition()); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(creature)); LuaScriptInterface::pushThing(L, item, env->addThing(item)); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeDropLoot] Call stack overflow." << std::endl; return 0; } } Em creatureevent.h procure: CREATURE_EVENT_PREPAREDEATH, Adicione abaixo: CREATURE_EVENT_DROPLOOT Procure: uint32_t executeTarget(Creature* creature, Creature* target); Adicione abaixo: uint32_t executeDropLoot(Creature* creature, Item* item); Agora em player.h procure a função: void Player::dropLoot(Container* corpse) Troque por: void Player::dropLoot(Container* corpse) { if(!corpse || lootDrop != LOOT_DROP_FULL) return; uint32_t start = g_config.getNumber(ConfigManager::BLESS_REDUCTION_BASE), loss = lossPercent[LOSS_CONTAINERS], bless = getBlessings(); while(bless > 0 && loss > 0) { loss -= start; start -= g_config.getNumber(ConfigManager::BLESS_REDUCTION_DECREAMENT); bless--; } uint32_t itemLoss = (uint32_t)std::floor((5. + loss) * lossPercent[LOSS_ITEMS] / 1000.); for(int32_t i = SLOT_FIRST; i < SLOT_LAST; ++i) { Item* item = inventory[i]; if(!item) continue; Creature* creature = NULL; bool deny = false;item creature = g_game.getCreatureByID(getID()); CreatureEventList droploot = getCreatureEvents(CREATURE_EVENT_DROPLOOT); for(CreatureEventList::iterator it = droploot.begin(); it != droploot.end(); ++it) { if(!(*it)->executeDropLoot(this, item)) deny = true; } if(!deny) { uint32_t rand = random_range(1, 100); if(skull > SKULL_WHITE || (item->getContainer() && rand < loss) || (!item->getContainer() && rand < itemLoss)) { g_game.internalMoveItem(NULL, this, corpse, INDEX_WHEREEVER, item, item->getItemCount(), 0); sendRemoveInventoryItem((slots_t)i, inventory[(slots_t)i]); } } } } Em monster.cpp procure: void MonsterType::dropLoot(Container* corpse) { if(corpse && lootDrop == LOOT_DROP_FULL) mType->dropLoot(corpse); } Troque por: void MonsterType::dropLoot(Container* corpse) { Item* tmpItem = NULL; for(LootItems::const_iterator it = lootItems.begin(); it != lootItems.end() && !corpse->full(); ++it) { uint32_t owner = corpse->getCorpseOwner(); Creature* creature = g_game.getCreatureByID(owner); if((tmpItem = createLoot(*it)) && g_creatureEvents->dropLoot(creature, tmpItem)) { if(Container* container = tmpItem->getContainer()) { if(createChildLoot(container, (*it))) corpse->__internalAddThing(tmpItem); else delete container; } else corpse->__internalAddThing(tmpItem); } } corpse->__startDecaying(); uint32_t ownerId = corpse->getCorpseOwner(); if(!ownerId) return; Player* owner = g_game.getPlayerByID(ownerId); if(!owner) return; LootMessage_t message = lootMessage; if(message == LOOTMSG_IGNORE) message = (LootMessage_t)g_config.getNumber(ConfigManager::LOOT_MESSAGE); if(message < LOOTMSG_PLAYER) return; std::stringstream ss; ss << "Loot of " << nameDescription << ": " << corpse->getContentDescription() << "."; if(owner->getParty() && message > LOOTMSG_PLAYER) owner->getParty()->broadcastMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); else if(message == LOOTMSG_PLAYER || message == LOOTMSG_BOTH) owner->sendTextMessage((MessageClasses)g_config.getNumber(ConfigManager::LOOT_MESSAGE_TYPE), ss.str()); } Exemplo de uso da função: function onDropLoot(cid, item) local block = {2221, 1221, 2922} for i=1, #block do if item.itemid == block[i] then return false end end return true end Créditos: Caotic
  12. Bom dia! Há um certo tempo eu tive um servidor de Tibia que possuía um sistema bem interessante de tradevip. Funcionava da seguinte maneira, o player que possuísse premdays(ou VIP) usava o comando !tradevip [DIAS], [Nome do Jogador] e automaticamente gerava uma janela de trade com um item e assim poderiam ser vendidos dias de premium sem o perigo de ninguém ser roubado. Por padrão isso não é possível no Tibia, mas um usuário chamado Oneshot fez modificações nas sources para tornar isso possível. Segue agora as modificações que permitem funcionar esse sistema: Em luascript.h, adicione essa linha, abaixo das linhas parecidas. static int32_t luaDoStartTrade(lua_State* L); Em luascript.cpp, adicione isso perto das linhas parecidas. //doStartTrade(cid, target, item) lua_register(m_luaState, "doStartTrade", LuaInterface::luaDoStartTrade); Ainda em luascript.cpp, adicione isso logo abaixo de alguma estrutura parecida. int32_t LuaInterface::luaDoStartTrade(lua_State* L) { ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* target = env->getPlayerByUID(popNumber(L)); Player* player = env->getPlayerByUID(popNumber(L)); if(!player || !target) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if(g_game.internalStartTrade(player, target, item)) { lua_pushboolean(L, true); return 1; } return 1; } Agora use sua imaginação para criar seus scripts. Créditos: Oneshot
  13. Boa tarde! Gostaria de saber a opnião de você de qual é a melhor distribuição em linux para se hostear um otserv.
  14. A imagem tá bugada, tem como hospedar dnv?
  15. grafit postou uma resposta no tópico em Suporte & Pedidos
    Tu é muito talentoso!! Parabéns pelos seus trabalhos
  16. É provável que a conta não tenha sido criada. Tente criar ela novamente ou em último caso você cria uma conta nova
  17. grafit postou uma resposta no tópico em WindBot
    Vocação: Druid Level: 30 Dificuldade: Fácil Experiência por hora: 45k até 60k Profit/Waste por hora: 2k-5k Task por hora: 60-80 Gargoyles Recompensa: 6 Task Points None Easy Settings Loot Deposit + Refiller Safe Bank Offline Trainer Take Food Takes new Task from Grizzly Adams Script inicia no Depot de Kazordoon. Mana Potion Exura Exura Gran Exori Flam Exori Vis http://speedy.sh/rb7yx/Various-Held-Upper-Spike-1.0.4.xml
  18. Fica tranquilo rapaz. So batendo cabeça que voce vai aprender. Posta uma screen da interface do seu roteador na parte de redirecionamento de portas pra dar uma olhada
  19. grafit postou uma resposta no tópico em Ferramentas OpenTibia
    Bom dia, 001rafa! Sim, o programa só extrai. Ele é bem simples e é usado mais para estudos.
  20. VPS

    grafit postou uma resposta no tópico em Suporte Tibia OTServer
    Eu te recomendaria a usar o linux. Eu acho que em muitos pontos ele é melhor que o windows para se abrir um servidor de Tibia, e te digo mais, acho bem mais fácil! É só dar uma lida por aí que você acha vários tutoriais fáceis. Se for ver o tutorial de compilação do tfs 1.1 no github, em alguns minutos você já compilou. No mais é tudo igual ao windows.
  21. Por ser GVT eu acredito que o serviço de DHCP esteja ativado. Partindo do pressuposto de que ele esteja ativado vamos lá: Acesse a Central de Rede e Compartilhamento do seu PC pelo Painel de Controle. Alí em conexões clique na conexão que estiver lá. Provávelmente estará igual ao da foto. Depois clique em Detalhes... Note que você precisará anotar o Endereço IPv4 que nada mais é do que o IP do seu computador na rede do roteador. Feito isso, você deverá acessar o seu roteador pelo IP no browser. Procure por Redirecionamento de Portas. Veja bem, o seu Endereço IPv4 é o endereço do seu computador na rede do roteador. Mas pensa comigo, quem está acessando o seu roteador externamente, ou seja, os outros players que vão jogar, precisa saber para onde vai. O Redirecionamento de Portas faz o seguinte, aponta a porta 7171 para o IP X(sua máquina), para que o PC de quem está vindo de fora(os outros players) saiba que a porta 7171 está apontada para o seu PC. Conseguiu entender? Talvez a interface do roteador vá te pedir as seguintes informações para criar essa regra: Porta, IP, e Protocolo. Eu não uso esse roteador mas achei uma imagem na internet que talvez possa te guiar na procura do Redirecionamento de Portas Boa sorte!
  22. Boa tarde, kaaiob123. Primeiro você precisa saber se o DHCP tá ativado no seu roteador. Se estiver você precisa reservar um endereço de ip fixo para o seu PC e depois desbloquear as portas pelo roteador. O endereço que eu me refiro é o que o seu PC recebe quando se conecta no roteador.
  23. Primeira pergunta: Qual é a sua internet? Segunda pergunta: Qual é o seu roteador?
  24. grafit postou uma resposta no tópico em Ferramentas OpenTibia
    Adicionado o scan dos dois arquivos para download.
  25. grafit postou uma resposta no tópico em Ferramentas OpenTibia
    SpriteDump SpriteDump é um programa que analisa o arquivo .dat e exporta cada sprite encontrado. O código do programa pode ser encontrado no Pastebin clicando aqui Também é possível já fazer o download do projeto no Visual Studio clicando aqui (scan) Se preferir o programa já encontra-se compilado e o executável pode ser baixado clicando aqui (scan) Créditos: Jo3Bingham

Informação Importante

Confirmação de Termo