Tudo que grafit postou
-
otservlist.org - Spoofing
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.
-
(Resolvido)adicionando stages
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.
-
(Resolvido)Erro quando carrega Scripts
O erro acontece na hora de carregar o script system? Você tem certeza que o executável é para 64bit?
-
Como liberar portas no roteador
Exatamente isso. Se quiser posta uma print que eu vou te auxiliando
-
Como liberar portas no roteador
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.
-
otservlist.org - Spoofing
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.
-
(Resolvido)adicionando stages
Qual é a versão do seu TFS?
-
(Resolvido)Erro quando carrega Scripts
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?
-
otservlist.org - Spoofing
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!
-
[C++] doStartTrade(cid, target, item)
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.
-
[C++] onDropLoot(cid, item)
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
-
[C++] doStartTrade(cid, target, item)
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
-
Melhor Distribuição em Linux
Boa tarde! Gostaria de saber a opnião de você de qual é a melhor distribuição em linux para se hostear um otserv.
-
Freeza,Vegeta,Goku Filme Ressureição,Kagome,e um Bills meio Diferente do DboUltimate
A imagem tá bugada, tem como hospedar dnv?
- Rascunhos Luan
-
Invalid Password
É provável que a conta não tenha sido criada. Tente criar ela novamente ou em último caso você cria uma conta nova
-
[ED] 40+ Upper Spike
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
-
Abri todas as portas de moldem e de firewall e nao consigo jogar
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
-
SpriteDump
Bom dia, 001rafa! Sim, o programa só extrai. Ele é bem simples e é usado mais para estudos.
-
VPS
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.
-
Abri todas as portas de moldem e de firewall e nao consigo jogar
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!
-
LIBERAR AS PORTAS DO ROTIADOR
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.
-
Abri todas as portas de moldem e de firewall e nao consigo jogar
Primeira pergunta: Qual é a sua internet? Segunda pergunta: Qual é o seu roteador?
-
SpriteDump
Adicionado o scan dos dois arquivos para download.
-
SpriteDump
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