Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 04/30/15 em todas áreas

  1. Fala galera do xtibia beleza? Hoje estou trazendo aqui um servidor que eu e o Matheus Pacheco fez é um dbo misturado com nto e bleach bom não é um servidor perfeito pois se fosse não estaria compartilhando com vocês, mais o servidor é bacana pra caramba pra quem curte misturas de servidores. Bom galera não entrarei muito em detalhes pois estou meio compresa, mais dentro da pasta do servidor tera um arquivo LEIAME!!!.txt vocês pode ler as informações la... Imagens: Templo TELEPORTES: SITE: Proibido postar esse servidor em outros fórum/sites sem minha permissão. DOWNLOAD DO SERVIDOR: DOWNLOAD SCAN --------------------------------------------------------- DOWNLOAD DO SITE: DOWNLOAD SCAN --------------------------------------------------------- DOWNLOAD DO CLIENT DOWNLOAD SCAN Créditos: Yan Liima Matheus Pacheco
    2 pontos
  2. Mudrock

    Plágio é CRIME! Proteja seu Site!

    Eae pessoal bom eu aqui mais uma vez vou ensinar Protejer seu site seja o qual for contra listagem das suas pasta do Diretório, é uma coisa muito simples mas nem todos sabem só os mais avançados em Web Designer já devem saber, agora é sua vez de aprender! [Resumo] Sabe quando você digita www.seusite.com/index.php/templates ou outra pasta sem proteção ? no caso vai listar todo seus arquivos da quela pasta e acessível para qualquer pessoa baixar correto ? Aqui vou ensinar como se prevenir disso para ninguém pegar seus arquivos de seu site. *Primeiramente vamos criar um arquivo index.php dentro de uma pasta eu vou criar em Templates "c:/xampp/htdocs/templates" se quiser você também pode criar assim, copia um Arquivo Index.PHP ou index.HTM o que chama o seu site na página inicial, dentro da cópia Index.PHP ou Index.HTM coloca o seguinte HTML. Pronto agora vamos acessar a pasta template www.seusite.com/index.php/templates se o erro foi igual da imagem abaixo está correto ai é só por nas d+ pasta do seu site, as que contém a Index você pode pular! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR...l1-strict.dtd"> <text><strong><h1><center> Error 404 </center></h1><strong></text> <br> <title>Error by Alexy brocanello e Quilante Otserv</title> <script type="text/javascript"> function click() { if (event.button==2||event.button==3) { oncontextmenu='return false'; } } document.onmousedown=click document.oncontextmenu = new Function("return false;") </script> <script language='JavaScript'> function clique() {if (event.button==2||event.button==3) {oncontextmenu='return false';}} document.onmousedown=clique document.oncontextmenu = new Function("return false;") </script> <html xmlns="http://www.w3.org/1999/xhtml"xml:lang="en" lang="en"> <head> <meta name="Description" content="PokemonDBR o maior MMORPG de pokemon online do Brasil, chame seus amigos e venha nessa aventura." /> <meta name="Keywords" content="pokemon, pokemonbr, pokemon dbr, tibia, naruto, naruto online, otpokemon, pxg, pokemon online, poketibia, pokepro, pokemon rpg, poke on, otserv, tibia king, xtibia, facebook, jogos online, nintendo, rpg, mmorpg, jogar pokemon" /> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <meta name="Distribution" content="Global" /> <meta name="author" content="Error by Alexy brocanello amd Quilante Otserv" /> <meta name="Robots" content="index,follow" /> </head> <center><a href="http://www.planalto....leis/l9610.htm"target="_blank"><img src="http://hpobrasil.com/pokemondbr/error.png"/></a></center><center>Você está tentando acessar um lugar proibido, isso é plágio isso é crime!</center><center><br><a href="http://www.planalto.gov.br/ccivil_03/leis/l9610.htm" target="_blank"> lei 9.610 de 19 de fevereiro de 1998</center> </body> </html> Todos que acessar seu diretório não atorizado www.seusite.com/index.php/templates um aviso será mostrado e serve pra todos os site! até a próxima Créditos : Alex
    2 pontos
  3. Piabeta Kun

    Gesior outfiter 10.76

    Bem é apenas um pack com os novos outfits complementando o que eu ja postei no topico abaixo! http://www.xtibia.com/forum/topic/221545-gesior-outfiter-986/ Download http://outfit-images.ots.me/outfit-images.zip Créditos: Gesior.pl
    2 pontos
  4. Muito interessante o servidor. Scans chegados. Aprovado =)
    2 pontos
  5. comedinhasss

    The Forgotten Server 1.1

    Olá amigos, venho aqui trazer as compilações oficiais do TFS 1.1 Isso é disponibilizado pelo próprio Mark para os usuários de windows... Link de versões já compiladas para o windows http://nightlies.otland.net/ Source https://github.com/otland/forgottenserver Tutorial de como compilar https://github.com/otland/forgottenserver/wiki/Compiling-on-Windows Para ver se ele é o mais atual você deve comparar o numero da commit com o do publicado, e é só baixar o executável de acordo com sua preferencia (recomendo sempre o mais recente e compilado em Release).
    1 ponto
  6. Mudrock

    [TFS 1.0 / 0.4] xGesior 1.0.0

    Sobre o xGesior O xGesior, veio com a tarefa de ser um Gesior sem bugs e com uma aparência diferenciada, esse gesior conta com 3 versões, 2 ainda estão em desenvolvimento, esse conteúdo não deve ser de qualquer maneira comercializado! https://github.com/xtibia/xgesior VERSÕES Versão 1.0.0 [ DISPONIVEL ] Versão 1.1.1 [ IDISPONIVEL ] Versão 1.2.2 [ IDISPONIVEL ] COMPATIBILIDADES TFS 1.1 [NÃO TESTADO] TFS 1.0 [FUNCIONAL] TFS 0.4 [NÃO TESTADO] TFS 0.2 [NÃO TESTADO] Imagens XGesior DOWNLOAD E SCAN Senha para descompactar: www.xtibia.com WebSite : http://www.mediafire.com/download/xq87wnpno9wdoa5/xGesior+1.0.0+ByMudrocK.rar Xampp : http://sourceforge.net/projects/xampp/files/XAMPP%20Windows/1.7.3/ SCAN : https://www.virustotal.com/pt/file/803c43116009f63c38c589a5f3c49d90caf80d066c0cd95fb58eab9203b080c7/analysis/1430007560/ Database : [ JA NA PASTA DO GESIOR ] GitHub: https://github.com/xtibia/xgesior Créditos Mudrock Daniel
    1 ponto
  7. caotic

    TV System by caotic

    Eae galeerrra xtibiana. Venho disponibilizar o famoso sistema de televisão poketibiano completo o sistema foi feito para ambos os clients tibianos. O sistema permite você assistir outro players jogando assim você fica sem usar itens,falar(so pm), se movimentar e etc... Vamos la: Vá em luascript.cpp e procure: int32_t LuaScriptInterface::luaGetTopCreature(lua_State* L) { //getTopCreature(pos) PositionEx pos; popPosition(L, pos); ScriptEnviroment* env = getEnv(); Tile* tile = g_game.getTile(pos); if(!tile) { pushThing(L, NULL, 0); return 1; } Thing* thing = tile->getTopCreature(); if(!thing || !thing->getCreature()) { pushThing(L, NULL, 0); return 1; } pushThing(L, thing, env->addThing(thing)); return 1; } E coloque embaixo: int32_t LuaScriptInterface::luaGetAllsTvs(lua_State* L) { //getAllsTvs(cid) ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Tvlist::iterator it; it = player->tv.begin(); lua_newtable(L); uint32_t tableplayers = 1; for(uint32_t i = 1; it != player->tv.end(); ++it, ++i) { Player* players = env->getPlayerByUID(*it); if (players) { lua_pushnumber(L, tableplayers); lua_pushnumber(L, env->addThing(players)); pushTable(L); tableplayers = tableplayers+1; } } return 1; } int32_t LuaScriptInterface::luaSetPlayerTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player_tv = env->getPlayerByUID(popNumber(L)); Creature* creature = env->getCreatureByUID(popNumber(L)); if (!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } Player* player = creature->getPlayer(); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } if (!player_tv) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } player_tv->tv.push_back(player->getID()); SpectatorVec::iterator it; SpectatorVec list = g_game.getSpectators(player->getPosition()); Player* tmpPlayer = NULL; Condition* condition = NULL; if((condition = Condition::createCondition(CONDITIONID_DEFAULT, CONDITION_GAMEMASTER, -1, 0, false, GAMEMASTER_INVISIBLE))) { creature->setHideName(false); player->addCondition(condition); g_game.internalCreatureChangeVisible(creature, VISIBLE_GHOST_DISAPPEAR); for(it = list.begin(); it != list.end(); ++it) { if((tmpPlayer = (*it)->getPlayer()) && !tmpPlayer->canSeeCreature(player)) tmpPlayer->sendMagicEffect(player->getPosition(), MAGIC_EFFECT_POFF); } for(AutoList<Player>::iterator pit = Player::autoList.begin(); pit != Player::autoList.end(); ++pit) { if(!pit->second->canSeeCreature(player)) pit->second->notifyLogOut(player); } IOLoginData::getInstance()->updateOnlineStatus(player->getGUID(), false); if(player->isTrading()) g_game.internalCloseTrade(player); player->clearPartyInvitations(); if(player->getParty()) player->getParty()->leave(player); g_game.internalTeleport(player, player_tv->getPosition(), true); } lua_pushboolean(L, true); } int32_t LuaScriptInterface::luaDoSendChannelsTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } player->sendChannelsDialog(true); lua_pushboolean(L, true); return 1; } int32_t LuaScriptInterface::luaDoRemovePlayerTv(lua_State* L) { ScriptEnviroment* env = getEnv(); Player* player = env->getPlayerByUID(popNumber(L)); Player* creature = env->getPlayerByUID(popNumber(L)); if (!player) { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); return 1; } for(std::list<uint32_t>::iterator it = player->tv.begin(); it != player->tv.end(); ++it) { if ((*it) == creature->getID()) { Tvlist tv = player->tv; if (!creature) { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); return 1; } Player* player_tv = creature->getPlayer(); if (!player) { return 1; } SpectatorVec::iterator its; SpectatorVec list = g_game.getSpectators(player_tv->getPosition()); Player* tmpPlayer = NULL; Condition* condition = NULL; creature->setHideName(false); if((condition = player_tv->getCondition(CONDITION_GAMEMASTER, CONDITIONID_DEFAULT, GAMEMASTER_INVISIBLE))) { IOLoginData::getInstance()->updateOnlineStatus(player_tv->getGUID(), true); for(AutoList<Player>::iterator pit = Player::autoList.begin(); pit != Player::autoList.end(); ++pit) { if(!pit->second->canSeeCreature(player_tv)) pit->second->notifyLogIn(player_tv); } for(its = list.begin(); its != list.end(); ++its) { if((tmpPlayer = (*its)->getPlayer()) && !tmpPlayer->canSeeCreature(player_tv)) tmpPlayer->sendMagicEffect(player_tv->getPosition(), MAGIC_EFFECT_TELEPORT); } player_tv->removeCondition(condition); g_game.internalCreatureChangeVisible(creature, VISIBLE_GHOST_APPEAR); *it = NULL; } } } lua_pushboolean(L, true); } Continuando em luascript.cpp procure: //doCreatureSay(uid, text[, type = SPEAK_SAY[, ghost = false[, cid = 0[, pos]]]]) lua_register(m_luaState, "doCreatureSay", LuaScriptInterface::luaDoCreatureSay); Coloque embaixo: //doRemovePlayerTv(cid, id) lua_register(m_luaState, "removePlayerTv", LuaScriptInterface::luaDoRemovePlayerTv); //getAllsTv() lua_register(m_luaState, "getTvs", LuaScriptInterface::luaGetAllsTvs); //setPlayerTv(cid, player) lua_register(m_luaState, "setPlayerTv", LuaScriptInterface::luaSetPlayerTv); //doSendChannelstTv(cid) lua_register(m_luaState, "doSendChannelsTv", LuaScriptInterface::luaDoSendChannelsTv); Em luascript.h procure: static int32_t luaGetPlayerParty(lua_State* L); Coloque embaixo: static int32_t luaGetAllsTvs(lua_State* L); static int32_t luaSetPlayerTv(lua_State* L); static int32_t luaDoSendChannelsTv(lua_State* L); static int32_t luaDoRemovePlayerTv(lua_State* L); Vamos agora em game.cpp: Procure: bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text) E substitua função por esta nova função: bool Game::playerSay(uint32_t playerId, uint16_t channelId, SpeakClasses type, const std::string& receiver, const std::string& text) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; std::string str; if (player->getStorage(34421, str) && str == "true") { if (type == SPEAK_SAY) { player->getStorage(292924, str); player->sendTextMessage(MSG_STATUS_SMALL, str.c_str()); return false; } switch(type) { case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); case SPEAK_PRIVATE: case SPEAK_PRIVATE_RED: case SPEAK_RVR_ANSWER: return playerSpeakTo(player, type, receiver, text); case SPEAK_CHANNEL_O: case SPEAK_CHANNEL_Y: case SPEAK_CHANNEL_RN: case SPEAK_CHANNEL_RA: case SPEAK_CHANNEL_W: { if(playerTalkToChannel(player, type, text, channelId)) return true; return playerSay(playerId, 0, SPEAK_SAY, receiver, text); } case SPEAK_BROADCAST: return playerBroadcastMessage(player, SPEAK_BROADCAST, text); case SPEAK_RVR_CHANNEL: return playerReportRuleViolation(player, text); case SPEAK_RVR_CONTINUE: return playerContinueReport(player, text); default: break; } internalCreatureSay(player, SPEAK_SAY, text, false); return false; } uint32_t muteTime = 0; bool muted = player->isMuted(channelId, type, muteTime); if(muted) { char buffer[75]; sprintf(buffer, "You are still muted for %d seconds.", muteTime); player->sendTextMessage(MSG_STATUS_SMALL, buffer); return false; } if(player->isAccountManager()) { player->removeMessageBuffer(); return internalCreatureSay(player, SPEAK_SAY, text, false); } if(g_talkActions->onPlayerSay(player, type == SPEAK_SAY ? CHANNEL_DEFAULT : channelId, text, false)) return true; if(!muted) { ReturnValue ret = RET_NOERROR; if(!muteTime) { ret = g_spells->onPlayerSay(player, text); if(ret == RET_NOERROR || (ret == RET_NEEDEXCHANGE && !g_config.getBool(ConfigManager::BUFFER_SPELL_FAILURE))) return true; } player->removeMessageBuffer(); if(ret == RET_NEEDEXCHANGE) return true; } switch(type) { case SPEAK_SAY: return internalCreatureSay(player, SPEAK_SAY, text, false); case SPEAK_WHISPER: return playerWhisper(player, text); case SPEAK_YELL: return playerYell(player, text); case SPEAK_PRIVATE: case SPEAK_PRIVATE_RED: case SPEAK_RVR_ANSWER: return playerSpeakTo(player, type, receiver, text); case SPEAK_CHANNEL_O: case SPEAK_CHANNEL_Y: case SPEAK_CHANNEL_RN: case SPEAK_CHANNEL_RA: case SPEAK_CHANNEL_W: { if(playerTalkToChannel(player, type, text, channelId)) return true; return playerSay(playerId, 0, SPEAK_SAY, receiver, text); } case SPEAK_PRIVATE_PN: return playerSpeakToNpc(player, text); case SPEAK_BROADCAST: return playerBroadcastMessage(player, SPEAK_BROADCAST, text); case SPEAK_RVR_CHANNEL: return playerReportRuleViolation(player, text); case SPEAK_RVR_CONTINUE: return playerContinueReport(player, text); default: break; } return false; } Continuando em game.cpp procure a função: ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) E substitua por esta função: ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) { const Position& currentPos = creature->getPosition(); Cylinder* fromTile = creature->getTile(); Cylinder* toTile = NULL; Position destPos = getNextPosition(direction, currentPos); if(direction < SOUTHWEST && creature->getPlayer()) { Tile* tmpTile = NULL; if(currentPos.z != 8 && creature->getTile()->hasHeight(3)) //try go up { if((!(tmpTile = map->getTile(Position(currentPos.x, currentPos.y, currentPos.z - 1))) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position(destPos.x, destPos.y, destPos.z - 1))) && tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID)) { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z--; } } else if(currentPos.z != 7 && (!(tmpTile = map->getTile(destPos)) || (!tmpTile->ground && !tmpTile->hasProperty(BLOCKSOLID))) && (tmpTile = map->getTile(Position( destPos.x, destPos.y, destPos.z + 1))) && tmpTile->hasHeight(3)) //try go down { flags = flags | FLAG_IGNOREBLOCKITEM | FLAG_IGNOREBLOCKCREATURE; destPos.z++; } } ReturnValue ret = RET_NOTPOSSIBLE; if((toTile = map->getTile(destPos))) ret = internalMoveCreature(NULL, creature, fromTile, toTile, flags); if(ret != RET_NOERROR) { if(Player* player = creature->getPlayer()) { player->sendCancelMessage(ret); player->sendCancelWalk(); } } Player* player = creature->getPlayer(); if (player) { Tvlist::iterator it; it = player->tv.begin(); for(uint32_t i = 1; it != player->tv.end(); ++it, ++i) { Player* players = getPlayerByID(*it); if (players) { internalTeleport(players, player->getPosition(), true, 0); } } } return ret; } Procure a função: bool Game::playerRequestChannels(uint32_t playerId) Substitua a função por: bool Game::playerRequestChannels(uint32_t playerId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; player->sendChannelsDialog(false); return true; } Agora vamos a protocolgame.cpp e procure a função; void ProtocolGame::sendChannelsDialog(bool tv) E substitua por esta função: void ProtocolGame::sendChannelsDialog(bool tv) { NetworkMessage_ptr msg = getOutputBuffer(); std::string str; if(msg) { if (tv) { uint16_t bytes = 0; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { it->second->getStorage(22120, str); if (str == "true") { bytes = bytes+1; } } if (bytes < 1) { player->sendCancel("Não há nenhuma tv online"); return; } TRACK_MESSAGE(msg); msg->AddByte(0xAB); msg->AddByte(bytes); uint16_t id = 200; for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it) { it->second->getStorage(22120, str); if (str == "true") { id = id+1; it->second->getStorage(12121, str); msg->AddU16(id); msg->AddString(str); } } return; } TRACK_MESSAGE(msg); msg->AddByte(0xAB); ChannelList list = g_chat.getChannelList(player); msg->AddByte(list.size()); for(ChannelList::iterator it = list.begin(); it != list.end(); ++it) { if(ChatChannel* channel = (*it)) { msg->AddU16(channel->getId()); msg->AddString(channel->getName()); } } } } Procure em protocolgame.h a seguinta declaração: void sendChannelsDialog(); Substitua por: void sendChannelsDialog(bool tv); Agora vamos em player.h e procure: void sendChannelsDialog() {if(client) client->sendChannelsDialog();} E substitua por: void sendChannelsDialog(bool tv) {if(client) client->sendChannelsDialog(tv);} Procure denovo em player.h: typedef std::list<Party*> PartyList; E adicione embaixo: typedef std::list<uint32_t> Tvlist; Continuando em player.h procure: AttackedSet attackedSet; Coloque embaixo: Tvlist tv; Vamos denovo a protocolgame.cpp e procure: if(player->isAccountManager()) { switch(recvbyte) { case 0x14: parseLogout(msg); break; case 0x96: parseSay(msg); break; default: sendCancelWalk(); break; } } Coloque embaixo: std::string str; if (player->getStorage(34421, str) && str == "true") { player->getStorage(292924, str); switch(recvbyte) { case 0x14: parseLogout(msg); break; case 0x96: parseSay(msg); break; case 0x97: // request channels parseGetChannels(msg); break; case 0x98: // open channel parseOpenChannel(msg); break; case 0x99: // close channel parseCloseChannel(msg); break; case 0x9A: // open priv parseOpenPriv(msg); break; case 0x1E: // keep alive / ping response parseReceivePing(msg); break; default: player->sendTextMessage(MSG_INFO_DESCR, str); break; } Seguidamente vá em creatureevent.cpp e procure: else if(tmpStr == "preparedeath") m_type = CREATURE_EVENT_PREPAREDEATH; Coloque embaixo: else if(tmpStr == "selecttv") m_type = CREATURE_EVENT_SELECTTV; Procure depois: case CREATURE_EVENT_PREPAREDEATH: return "onPrepareDeath"; Coloque embaixo: case CREATURE_EVENT_SELECTTV: return "onSelectTv"; Procure: case CREATURE_EVENT_PREPAREDEATH: return "cid, deathList"; Coloque embaixo: case CREATURE_EVENT_SELECTTV: return "cid, id"; Procure: uint32_t CreatureEvent::executeChannelJoin(Player* player, uint16_t channelId, UsersMap usersMap) { //onJoinChannel(cid, channel, users) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local channel = " << channelId << std::endl; scriptstream << "local users = {}" << std::endl; for(UsersMap::iterator it = usersMap.begin(); it != usersMap.end(); ++it) scriptstream << "users:insert(" << env->addThing(it->second) << ")" << 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); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, channelId); UsersMap::iterator it = usersMap.begin(); lua_newtable(L); for(int32_t i = 1; it != usersMap.end(); ++it, ++i) { lua_pushnumber(L, i); lua_pushnumber(L, env->addThing(it->second)); lua_settable(L, -3); } bool result = m_interface->callFunction(3); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeChannelJoin] Call stack overflow." << std::endl; return 0; } } Coloque embaixo: uint32_t CreatureEvent::executeSelectTv(Player* player, uint16_t id) { //onSelectTv(cid, id) if(m_interface->reserveEnv()) { ScriptEnviroment* env = m_interface->getEnv(); if(m_scripted == EVENT_SCRIPT_BUFFER) { std::stringstream scriptstream; scriptstream << "local cid = " << env->addThing(player) << std::endl; scriptstream << "local id = " << id << 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); lua_State* L = m_interface->getState(); m_interface->pushFunction(m_scriptId); lua_pushnumber(L, env->addThing(player)); lua_pushnumber(L, id); bool result = m_interface->callFunction(2); m_interface->releaseEnv(); return result; } } else { std::cout << "[Error - CreatureEvent::executeChannelJoin] Call stack overflow." << std::endl; return 0; } } Vá em creatureevent.h e procure: CREATURE_EVENT_ATTACK, Coloque embaixo: CREATURE_EVENT_SELECTTV Procure continuando em creatureevent.h: uint32_t executeCombat(Creature* creature, Creature* target); Coloque embaixo: uint32_t executeSelectTv(Player* player, uint16_t id); Vá agora em game.cpp denovo e procure a função: bool Game::playerOpenChannel(uint32_t playerId, uint16_t channelId) Substitua a função por: bool Game::playerOpenChannel(uint32_t playerId, uint16_t channelId) { Player* player = getPlayerByID(playerId); if(!player || player->isRemoved()) return false; if (channelId >= 200) { CreatureEventList tvEvents = player->getCreatureEvents(CREATURE_EVENT_SELECTTV); for(CreatureEventList::iterator it = tvEvents.begin(); it != tvEvents.end(); ++it) (*it)->executeSelectTv(player, channelId); return true; } ChatChannel* channel = g_chat.addUserToChannel(player, channelId); if(!channel) { #ifdef __DEBUG_CHAT__ std::cout << "Game::playerOpenChannel - failed adding user to channel." << std::endl; #endif return false; } if(channel->getId() != CHANNEL_RVR) player->sendChannel(channel->getId(), channel->getName()); else player->sendRuleViolationsChannel(channel->getId()); return true; } Vá em data/lib e crie um novo arquivo lua chamado tv system: names = {} storage_hastv = 22120 storage_watchtv = 34421 storage_nametv = 12121 storage_idwatchtv = 21213 storage_msgwatch = 292924 storage_namewatchtv = 21923 storage_save_group_id = 63732 smallerros = false ERROR_ID_NOT_FOUND = "ERROR\nPLAYER NOT FOUND\nSet Storage FALSE ON LOGIN" MSG_TV_SYSTEM = "Esta ação não e possivel você esta assistindo" MSG_CREATE_TV = "Parabéns, você criou sua TV " MSG_LOGOUT_TV = "Você saiu da tv " MSG_LOGOUT_TV_TOWN = "Você retornou a sua cidade " ID_ITEM_TV = 1949 ---- IMPORTANTE ID DA SUA CAM(CAMERA) MSG_WATCH_TV = "Você esta assitindo a uma tv" MSG_HAS_TV = "Você ja tem tv" MSG_NO_HAS_TV = "Você não tem tv" MSG_ENTER_PLAYER = "Um novo player entrou - " MININUM_STRING_CARACTER = 4 HAS_TV = "Você ja tem uma tv" MSG_DELETE_TV = "Você deletou sua channel com sucesso" MSG_WATCH_TV_ENTER_TV = "Você entrou na channel " NAME_WRONG = "Nome incorreto" MSG_HAS_NAME_TV = "Desculpe, ja existe uma tv com este nome escolha outro por favor" function setBooleanStorage(cid, storage, bool) if not bool then setPlayerStorageValue(cid, storage, -1) return true end setPlayerStorageValue(cid, storage, "true") return true end function checkFindStrings(str, array) for i=1, #array do if string.find(str, array[i]) then return true end end return false end function playerHasTv(cid) return getPlayerStorageValue(cid, storage_hastv) == "true" and true end function playerWatchTv(cid) return getPlayerStorageValue(cid, storage_watchtv) == "true" and true end function getTvOnlines() local t = {} local online = getPlayersOnline() for i=1, #online do if playerHasTv(online[i]) then table.insert(t, online[i]) end end return t end function getNamesTv(sep) local tvs = getTvOnlines() str = "" for i=1, #tvs do str = str..sep..getTvName(tvs[i]) end return str end function getIdByTvName(name) local tvs = getTvOnlines() for i=1, #tvs do if tvs[i] == name then return name end end return false end function stopWatchAllsPlayerTv(id) local onlines = getTvs(id) for i=1, #onlines do playerStopWatchTv(onlines[i]) end return true end function getNameTv(id) if not isPlayer(id) then print(ERROR_ID_NOT_FOUND) return false end local storage = getPlayerStorageValue(id, storage_nametv) if storage ~= -1 then return storage end return "" end function createNewTv(cid, name) if #name < MININUM_STRING_CARACTER or checkFindStrings(name, names) then doPlayerSendCancel(cid, NAME_WRONG) return false end local tvs = getTvOnlines() for i=1, #tvs do if getNameTv(tvs[i]) == name then doPlayerSendCancel(cid, MSG_HAS_NAME_TV) return false end end if playerHasTv(cid) then doPlayerSendCancel(cid, MSG_HAS_TV) return false end if playerWatchTv(cid) then doPlayerSendCancel(cid, MSG_WATCH_TV) return false end setBooleanStorage(cid, storage_hastv, true) setPlayerStorageValue(cid, storage_nametv, name) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_CREATE_TV..name) return true end function getTvNameById(id) if not isPlayer(id) then print(ERROR_ID_NOT_FOUND) return false end return getPlayerStorageValue(id, storage_nametv) end function playerWatchTv(cid, id) if not isPlayer(id) then if smallerros then print(ERROR_ID_NOT_FOUND) end return false end if playerHasTv(cid) then doPlayerSendCancel(cid, MSG_HAS_TV) return false end if playerWatchTv(cid) then doPlayerSendCancel(cid, MSG_WATCH_TV) return false end local name = getTvNameById(id) setBooleanStorage(cid, storage_watchtv, true) setPlayerStorageValue(cid, storage_msgwatch, MSG_TV_SYSTEM) setPlayerStorageValue(cid, storage_idwatchtv, id) setPlayerStorageValue(cid, storage_namewatchtv, name) setPlayerStorageValue(cid, storage_save_group_id, getPlayerGroupId(cid)) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_WATCH_TV_ENTER_TV) doPlayerSendTextMessage(id, MESSAGE_STATUS_CONSOLE_BLUE, MSG_ENTER_PLAYER..getCreatureName(cid)) setPlayerTv(cid, id) return true end function playerStopWatchTv(cid) local id = getPlayerStorageValue(cid, storage_idwatchtv) local name = getPlayerStorageValue(cid, storage_namewatchtv) local town = getPlayerTown(cid) local namet = getTownName(town) local post = getTownTemplePosition(town) if getPlayerStorageValue(cid, storage_watchtv) ~= "true" then return true end removePlayerTv(cid, id) setBooleanStorage(cid, storage_watchtv, false) setPlayerStorageValue(cid, storage_idwatchtv, -1) setPlayerStorageValue(cid, storage_namewatchtv, -1) setPlayerGroupId(cid, getPlayerStorageValue(cid, storage_save_group_id)) doTeleportThing(cid, post) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_LOGOUT_TV..name) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_LOGOUT_TV_TOWN..namet) return true end function deleteTv(cid) if getPlayerStorageValue(cid, 22120) ~= "true" then return false end stopWatchAllsPlayerTv(cid) setBooleanStorage(cid, storage_hastv) setPlayerStorageValue(cid, storage_nametv, -1) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, MSG_DELETE_TV) return true end Agora vamos em actions e crie um arquivo lua chamado tv e coloque: function onUse(cid, item, fromPosition, itemEx, toPosition) doSendChannelsTv(cid) end Vá em actions.xml e coloque a seguinte configurando com o id da sua tv: Agora vamos em talkactions e crie um novo arquivo lua chamado delete e coloque isto: function onSay(cid, words, param, channel) deleteTv(cid) return true end Agora vamos em talkactions.xml e coloque a seguinte tag: <talkaction words="/delete" event="script" value="delete.lua"/> Agora vamos a creaturescripts e crie um arquivo lua chamado createTv e coloque: function onTextEdit(cid, it:em, newText) if item.itemid == ID_ITEM_TV then createNewTv(cid, newText) return true end return true end Crie outro chamado de tv e coloque: function onSelectTv(cid, id) local tv = getTvOnlines() local idstarter = 200 for i=1, #tv do local tv = tv[i] local sub_id = i+idstarter if sub_id == id then playerWatchTv(cid, tv) end end return true end Crie outro chamado de tvlogout : function onLogout(cid) if isPlayer(cid) then deleteTv(cid) playerStopWatchTv(cid) end return true end Vá em creaturescripts.xml e coloque as seguintes as tags: <event type="textedit" name="newTv" event="script" value="createTv.lua"/> <event type="selecttv" name="selecttv" event="script" value="tv.lua"/> <event type="logout" name="tvlogout" event="script" value="tvlogout.lua"/> Vá em data/xml/group.xml e abra o arquivo e coloque o novo group: <group id="8" name="Tv" flags="3845069447162" customFlags="2097151" access="1" violationReasons="4" nameViolationFlags="2"/> Video do sistema em execução: E recomendavel NUNCA modificar as storages porques estão ligados aos codigos. Para mudar o id da camera e so mudar a variavel ID_ITEM_TV Para deletar uma tv diga o comand /delete
    1 ponto
  8. Wind-Global é um servidor real map, serio e de qualidade, aonde você jogador pode investir seu tempo sem se preocupar com resets, um servidor que respeita o jogador, além dessa caracteristica, temos como objetivo principal trazer muita diversão há vocês, então nao perca tempo, você acabou de achar um servidor sério, com uma equipe séria e dedicada, que estará trabalhando dia após dia para transformar deste, um dos maiores servidor de Open Tibia Server. As rates do Wind-Global foram bem ajustadas para que os jogadores tenha uma experiencia em nivel superior a qualquer outro servidor, com elementos desafiadores para alcançar novos niveis e completarem quest, outfits e montarias que foram mantidas. Wind-Global e um servidor real map global, O Objetivo e funcionar como um servidor de Tibia alternativo para aqueles jogadores que estão a procura de um jogo mais casual independente do tempo de jogo. IP - wind-global.net Client - 10.82 Port - 7171 Location - Canada RAM - 32GB Internet Connection - 250 Mbps Bandwidth Uptime - 24/7 (Com uma exceção para o server save e atualizações) 100% Dedicado Proteção DDoS Warzones I,II e III Reward Chest System Roshamuul (Prison, Dark Grounds, Ancient Dream Mine, Deep Cistern) 100% Oramond (Glooth Factory, Seacrest Grounds, Hero of Rathlton Quest) 100% Grimvale and ALL new 10.8 respawns Todas as Raids do global de forma automática Equipe Ativa e Profissional Loot com base em estatisticas do Tibia Wiki Sistema Cast System (!cast on / !cast off) Questlogs em 95% das quests Eventos frequentes feitos pela equipe Raids Automaticas Runas Finitas Hot Cuisine (Jean Pierre Segunda e Sexta) Sistema de Achievements Umbral Creation Nenhum tratamento VIP / Shop Offer Sistema de Atendimento via Ticket HelpDesk Vocations balanceadas Recompense Level Taming System 100% RL Experience Shared (bonus) 2 players = 30% 3 players = 60% +4 players = 100% Independente de vocation. E muito mais novidades! Entre em nosso site e comprove que aqui é seu lugar! Estamos ansiosos para conhecer os jogadores que vão jogar no Wind-Global - se voce quiser entrar em contato conosco fora do servidor, voce pode faze-lo atraves do Forum, HelpDesk Tickets, Facebook. Bem vindos ao Wind-Global! Team Wind-Global.net
    1 ponto
  9. oque é ? você possue dois servidores? um de experiencia alta e outro baixa ? ou até mesmo dois servidores diferentes que sejam de qualquer maneira, emfim, essa pagina inicial é para você que tem mais de um servidor e quer criar um pagina com a função de o player entrar em um unico site e escolher seu Servidor Exemplo DOWNLOAD http://www.4shared.com/rar/J9MkN8Ln/entrada_dois_server.html http://www.4shared.com/rar/J9MkN8Ln/entrada_dois_server.html Scan https://www.virustotal.com/pt/file/95364b3d786e67462bbce6c4fd68111973303d1dcc0cacd8be4eb230148fe342/analysis/1430353427/ https://www.virustotal.com/pt/file/95364b3d786e67462bbce6c4fd68111973303d1dcc0cacd8be4eb230148fe342/analysis/1430353427/ Créditos Krolero ( Gringo Fórum )
    1 ponto
  10. Administrador

    Servidor Pokémon Paraiso V2

    Edições Adicionado novos pokémons,Gothorita,Hydreigon e outros,alguns pokémons não foram adicionados mais as sprites estão no cliente. Editado um pouco Saffron City e entre outras,lembrando que o mapa é igual do ot pokémon. Erros do Servidor Bom,o Poison Gas esta dando lag(delay) no jogo. o Shiny Metagross,quando usa mount o mount fica com a outfit de Shiny Metang. o Shiny Salamence,esta com a outfit de Shiny Shelgon. Créditos PXG. Pobro. Ot Pokémon. Gabrieltxu. Eu(por editar o servidor,desenhar algumas sprites,editar o mapa e etc. Downloads Ot Client:http://www.mediafire.com/download/94m1j4trytjy3u7/Ot+Client+PKP.zip Servidor:http://www.mediafire.com/download/dvmg0xpttv5p534/Servidor+Paraiso.zip
    1 ponto
  11. ip: cartolabaiak.servegame.com site: CartolaBaiak - Latest News CartolaBaiak é um projeto meu iniciado a pouco tempo, a algum tempo atrás resolvi que ia criar um otserver e fazer dele o melhor do Brasil. Eu vi todas as opções e eu me interessei por esse mapa da print acima, tinha alguns erros e bugs mas já foram corrigidos, deixei ele aberto por algum tempo para testa-lo e consegui bons resultados. Como o server é sério e não pretendo reseta-lo nunca, as rates do server estão baixas, principalmente pra baiak, mas o attack e healing está bom, knight e paladinos foram melhorados, uma das primeiras coisas que eu fiz. Knight e Paladinos são classes jogáveis e não estão nerfados (normalmente em baiak mages são as melhores classes) Acho que eu consegui balancear isso mas só o tempo dirá. Enfim, mais informações vocês encontram fácilmente no site, tem um tópico explicando algumas coisas e outras informações no serverinfo. O server foi aberto dia 29.04 às 18hrs e está online até agora, sem lag, sem kicks e com uma staff dedicada afim de aumentar a diversão de vocês. crie já sua conta.
    1 ponto
  12. Alayen

    Plágio é CRIME! Proteja seu Site!

    Errado, tudo muito errado! Esse é certamente o pior jeito possível de se fazer uma página de erros, por n motivos: Não retorna um código de erro, ou seja, pra todos os efeitos é como se tivesse chegado na página desejada! Em nenhum momento está sendo explicitamente dito para não listar mais os arquivos, ou seja, NÃO faz o que diz Você precisa copiar e colar esse arquivo várias vezes, pra todos os diretórios que devem ser protegidos E tem mais, mas não precisa. O jeito CERTO de se fazer isso é DESABILITAR o directory listing/autoindex e, se quiser uma página custom, configurar o seu servidor web pra enviar uma página 404 diferente. 1. Desabilitar directory listing/autoindex No Apache, basta incluir a seguinte linha no seu .htaccess na raiz do site ou então na configuração do virtual host: Options -Indexes Se já tiver uma linha de Options, basta colocar a flag -Indexes no final (e remover caso ela esteja lá sem o -) No Nginx, basta incluir a seguinte linha na configuração do site, preferencialmente no bloco mais externo possível (geralmente o bloco server, que abrange o site todo): autoindex off; 2. Alterar a página de 404 No Apache, colocar a seguinte linha no .htaccess ou vhost: ErrorDocument 403 /403.html Mude o 404.html pra onde tiver seu HTML de erro. No Nginx: error_page 403 = /403.html; Em ambos os casos, / é a raiz do site, e não do sistema de arquivos. Do jeito CERTO, seu servidor vai responder de um jeito que o browser sabe que aquela página não existe, ainda vai ter a página personalizada, mas permite você controlar muito melhor o erro (você pode, por exemplo, fazer logs dos 403 e ver se alguém tá tentando invadir algo) e desabilita de verdade a listagem.
    1 ponto
  13. Yan Liima

    Newstory Dbo+Nto+Bleach misturado!

    Obrigado, so avisando em alguns PCS pode dar erro na hora de liga, mais é so fica tentando que uma hora funciona, em VPS/DEDICADOS não acontece esses tipos de erros. SERVER 8.0 É ASSIM MESMO LOGO VOCÊS SE ACOSTUMA
    1 ponto
  14. heviton2

    Newstory Dbo+Nto+Bleach misturado!

    o matheus ..e nosso projeto digimon ta de pe ainda ...legal parabens
    1 ponto
  15. Gokussj5

    Newstory Dbo+Nto+Bleach misturado!

    [ADM] Night gostei muito do server wodbo newstory dois Le do mais um REP+
    1 ponto
  16. 1 ponto
  17. Mudrock

    Instalador RME

    https://mega.co.nz/#!PtdlVKQZ!GJsxOza35IbmVrcF9V6XGcihQqxTNdkT2jkDs9Rs2GY
    1 ponto
  18. Jaleke

    The Last Pokémon Online

    Obrigado pela crítica, são elas que nos faz fortalecer e melhorar
    1 ponto
  19. Deadpools

    The Last Pokémon Online

    Pode até parecer, mas não leve a mal.. A diferença entre a gente e politico é que nós da equipe prometemos e fazemos kkkkkkkkkkkkkkkkkkkkk
    1 ponto
  20. Deadpools

    The Last Pokémon Online

    O servidor não é PDA, temos as sources.. Tem sistema de torneio, sistema de duel (80% falta colocar por party), Party por channel, está online no VPS, passive e agressive (sources), icon system igual a pxg, e todos os sistemas existentes em um serve normal. Por enquanto sem prints, mas brevemete irei criar topico oficial divulgando o servidor ^^
    1 ponto
  21. Fala Pessoal hoje trarei uma pequena ajuda sobre msg do servidor aquelas mensagem quando ápareçe no server ex:Servidor Póke Páraiso v2 que ápareçe na tela do jogo quando voçe esta jogando siga as instruçoes 1° Entre Na pasta do seu servidor 2° Va em data 3° Logo em seguida va em globalevents e Depois em Scripts 4° E Ultimo Procure por mensagem ou msg ou ate mesmo noticia o meu esta mensagem mais o seu podera estar de outro jeito 5° Edite os textos que estao dentro do ex:"ot serv" e bote o que voce quer Ajudei da um gostei ae embaixo para ajudar na divulgaçao obrigado e tchau deichairei um projeto de poketibia eu da um curtir la duvidas skype: teuslut2014 Facebook do meu projeto:https://www.facebook.com/pages/PokemonP/897745896958158
    1 ponto
  22. Mudrock

    [NOVO] Shop Gesior ACC/Znote

    Introdução Bom galera estava navegando pelos foruns da vida e achei este tópico para ZnoteAcc. Após procurar mais um poco achei para Gesior e Vim disponibilizar para Vocês TESTADO COM SERVIDOR TFS 0.3.6 Vamos Lá.... Execute este codigo no seu Mysql CREATE TABLE IF NOT EXISTS `znote_shop_orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `account_id` int(11) NOT NULL, `type` int(11) NOT NULL, `itemid` int(11) NOT NULL, `count` int(11) NOT NULL, `time` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; Não Pera.... `znote_shop_orders`?? Mais eu utilizo Gesior acc... Não se esqueça que esse sistema é Znote e foi feito uma maneira de ser Compatível. Faça Download dos Arquivos Coloque o arquivo config-shop.php na pasta Config shopsystem.php em system/pages/ As imagens jah está com o Diretorio correto (só extrair) Download (Arquivos Php) Downlaod (Imagens (nescessario)) Scan (arquivos) Scan (imagens) Creditos: Nevix (por fazer a compatibilidade)
    1 ponto
  23. Administrador

    Daniel Sprites (free)

    uma pedra:
    1 ponto
  24. id: 459 (stairs) Basta criar um moveevent onde ao pisar é removida a HP do player function onStepIn(cid, item, position) doPlayerAddHealth(cid, -1) return TRUE end
    1 ponto
  25. Lucasbaragatti

    [Beta] Duel System V1.1

    TUTORIAL DUEL SYSTEM PARA POKEMON Passos: (São 6) 1 - Recursos Necessários 2 - Instalar as funções na source 3 - Adicionar os controles na source 4 - Compilar a source 5 - Instalar o controle no servidor 6 - Configurando duelconfig.xml RECURSOS NECESSÁRIOS (DOWNLOADS) StiansDevCppRepack v2 - Clique para baixar KronoX Duel Repack v1.1 - Clique para baixar Ter sua source(distro) em mãos - Download Versão 8.54 - Versões Versão v1.0 : Versão Inicial do sistema Versão v1.1 : Tentativa de correção de bugs no Party.cpp INSTALANDO AS FUNÇÕES NECESSÁRIAS NA SOURCE   ADICIONANDO OS CONTROLES NA SOURCE   COMPILANDO SUA SOURCE   INSTALANDO CONTROLE NO SERVIDOR   CONFIGURANDO SEU DUELCONFIG.XML (BETA) vá na pasta data/creaturescripts/scripts e abra o arquivo duelconfig.xml com o bloco de notas. Atenção: Este arquivo não pode ser editado, com excessão da função usablePokes. O Erro da versão BETA é que ainda não se pode escolher o número de pokemons na batalha, pois esse número é editado no arquivo duelconfig.xml. Para escolher o tanto de pokes que irá usar por duelo , nesse arquivo, basta mudar a opção usablePokes=3 para usablePokes=NumeroDePokes Lembrando que não pode ser mais que 6 e que o carry system do server deve ser por cap.     Como usar: Apenas Clique com ctrl e lado direito no adversário e clique em "Invite to party" (Que pode ser modificado no client). Como sair do duelo: Apenas Clique com ctrl e lado direito em VOCÊ e clique em "Leave Party" (Que pode ser modificado no client).     É isso aí, não tá perfeito mas jajá a gente chega lá! Créditos: Stians pelo stians devcpp repack (DevC++ pra tibia) e Lucasbaragatti (eu) por fazer o sistema e postar aqui no XTibia. ;D Gostou? Dê REP+ , não cai o dedo =P Qualquer erro no sistema favor postar aqui! Obrigado!
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...