Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 01/14/16 em todas áreas
-
Mapa Completo Centro Pokemon: Cinnabar Island Fuchsia City Entrada para o Saffari Explorando o Saffari Quest do Crystal Onix Rota 5 Rota 1 Acompanhe o projeto! https://www.facebook.com/RealPokeOT5 pontos
-
Hoje eu vim ensinar como aumenta a "tela" de jogo do OTCLIENT (Desculpe o merchant, era a unica imagem que eu tinha salvo) Testado em : 0.3.6pl1, Pode funcionar em 1.0 com alterações pequenas. Em protocolgame.cpp ache: return ((x >= myPos.x - 8 + offsetz) && (x <= myPos.x + 9 + offsetz) && (y >= myPos.y - 6 + offsetz) && (y <= myPos.gety + 7 + offsetz)); e troque por: return ((x >= myPos.x - Map::maxClientViewportX + offsetz) && (x <= myPos.x + (Map::maxClientViewportX+1) + offsetz) && (y >= myPos.y - Map::maxClientViewportY + offsetz) && (y <= myPos.y + (Map::maxClientViewportY+1) + offsetz)); Agora, continuando em protocolgame.cpp ache: GetMapDescription(pos.x - 8, pos.y - 6, pos.z, 18, 14, msg); E troque por: GetMapDescription(pos.x - Map::maxClientViewportX, pos.y - Map::maxClientViewportY, pos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, msg); Continuando em protocolgame.cpp ache a função: void ProtocolGame::sendMoveCreature(const Creature* creature, const Tile* newTile, const Position& newPos, uint32_t newStackpos, const Tile* oldTile, const Position& oldPos, uint32_t oldStackpos, bool teleport) Dentro da função encontre: A parte que começa em if (oldPos.y > newPos.y) { e Termina em GetMapDescription(newPos.x - 8, newPos.y - 6, newPos.z, 1, 14, msg); } e troque por: if (oldPos.y > newPos.y) { // north, for old x msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } else if (oldPos.y < newPos.y) { // south, for old x msg->AddByte(0x67); GetMapDescription(oldPos.x - Map::maxClientViewportX, newPos.y + (Map::maxClientViewportY+1), newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); } if (oldPos.x < newPos.x) { // east, [with new y] msg->AddByte(0x66); GetMapDescription(newPos.x + (Map::maxClientViewportX+1), newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); } else if (oldPos.x > newPos.x) { // west, [with new y] msg->AddByte(0x68); GetMapDescription(newPos.x - Map::maxClientViewportX, newPos.y - Map::maxClientViewportY, newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); Agora ache: if(newPos.z == 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 5, 18, 14, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 4, 18, 14, 4, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 3, 18, 14, 5, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 2, 18, 14, 6, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 1, 18, 14, 7, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, 0, 18, 14, 8, skip); Depedendo da Source, a parte será assim: Por: if(newPos.z == 7) //going to surface { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 5, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 3, skip); //(floor 7 and 6 already set) GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 4, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 4, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 3, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 5, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 6, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 7, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, 0, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, 8, skip); Agora ache: else if(newPos.z > 7) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, oldPos.getZ() - 3, 18, 14, 3, skip); Depedendo da source será assim: Por: else if(newPos.z > 7) //underground, going one floor up (still underground) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, oldPos.z - 3, (Map::maxClientViewportX+1), (Map::maxClientViewportY+1)*2, 3, skip); Agora ache: //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - 8, oldPos.y - 5, newPos.z, 1, 14, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 1, msg); E troque por: //moving up a floor up makes us out of sync //west msg->AddByte(0x68); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - (Map::maxClientViewportY-1), newPos.z, 1, (Map::maxClientViewportY+1)*2, msg); //north msg->AddByte(0x65); GetMapDescription(oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, 1, msg); Agora ache: if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z, 18, 14, -1, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 1, 18, 14, -2, skip); GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Dependendo da source poderá ser: e troque por: if(newPos.z == 8) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -1, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 1, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -2, skip); GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora ache: else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - 8, oldPos.y - 6, newPos.z + 2, 18, 14, -3, skip); Depedendo da source pode ser assim: E troque por: else if(newPos.z > oldPos.z && newPos.z > 8 && newPos.z < 14) { int32_t skip = -1; GetFloorDescription(msg, oldPos.x - Map::maxClientViewportX, oldPos.y - Map::maxClientViewportY, newPos.z + 2, (Map::maxClientViewportX+1)*2, (Map::maxClientViewportY+1)*2, -3, skip); Agora em map.h edite essa parte como quiser: static const int32_t maxViewportX = 11; //min: maxClientViewportX + 1 static const int32_t maxViewportY = 11; //min value: maxClientViewportY + 1 static const int32_t maxClientViewportX = 8; static const int32_t maxClientViewportY = 6; O modo de Edição é assim: Agora em map.cpp do OTCLIENT Ache: void Map::resetAwareRange() { AwareRange range; range.left = 8; range.top = 6; range.bottom = 7; range.right = 9; setAwareRange(range); } Troque por: { AwareRange range; range.left = 8; //Valor que colocou em maxClientViewportX range.top = 6; //Valor que colocou em maxClientViewportY range.bottom = range.top+1; range.right = range.left+1; setAwareRange(range); } Créditos: Flatlander - OTLAND - Criação Ceetros - Tradução Agora vamos deixar o OTCLIENT lindão. Troque tudo de modules/game_interface/interface.lua (na pasta do OTCLIENT) por: http://pastebin.com/tH7qyreW (para o tutorial não ficar muito grande botei no pastebin, já que o spoiler tá bugando) Creditos dessa parte: Edubart (Criador do OTCLIENT) Ceetros Caso tenha ajudado, dê um rep+2 pontos
-
@edun eu não sei resolver isso, me desculpem. Se quiser usar a source que eu vou postar aqui.. @will eu uso este gesior: Gesior TFS 1.x.rar forgottenserver-master.rar2 pontos
-
Global Full [CLIENTS COMPATÍVEIS] 10 e 11.5. [BUGS E DOWNLOAD] BAIXEM E REPORTEM EM: OTXGlobal Full [FEATURES] NEW DEPOT, NEW SPAWN, NEW CAST SYSTEM, NEW NPC SYSTEM VIA BANK BALANCE, NEW CRITICAL BOOST SYSTEM, NEW POTIONS, REWARD SYSTEM, PREY ... [MAPA] FULL GLOBAL MAP WITH FEYRIST TODAS CIDADES E NOVAS AREAS TODAS QUESTS FUNCIONANDO! [EVENTS] WAR-ANTIENTROSA [CONTATO] SKYPE: onjogos WHATSAPP: (66) 998427-4493 [Créditos]Tfs 1.2 Developers -Zbizu - Pitis91 - MatheusMkalo - Gesior - Lundrial - M4G0 - Fish04k - Printer - Djarek - Ninjalulz - Slavidodo - Thexamx - Socket2810 - Ciroc -Absolute - Gordonbay - Mitsuig - Alissonfgp - Gunz - Bruno Minervino - Comedinha -Hirako - Maya - Mattyx14 – Darkjav - Viking Tibia1 ponto
-
POKExMOSTYER
PokemexStaff reagiu a MuriloCavalcantti por um tópico no fórum
Para os ativos, na minha opinião o PDA mais completo, pra vocês, feito pelo Wend (AnnaFeh). Sistemas e Atualizações Screenshots Downloads: Server + Site Client OTC Scan: Server + Site Client OTC Creditos: Wend Eu1 ponto -
mapa Informações: Dados criatura: Cidade de dados / House: Screenshots: _______________________________ _____________ Alguns problemas Download + Scan Créditos:1 ponto
-
Olá Xtibia.com, Estou aqui para-lhes disponibilizar em torno de 120 Sprites BEM desejadas por todos da autoria do Pokexgames,Motivo da liberação? R:Sou uns (Se não o unico) que traz Sprites da Pokexgames,então resolvi traze-las para vocês. Créditos:Kaleudd(Eu): pela descompilação e liberação. Pokexgames:Pela Criação de todas Spr presente dentro desse pacote. Caso postar em algum outro lugar,postar os créditos a min e a pxg,Obg =) O que contém nesse pacote? R:Corpos,Looktypes e alguns Itens do Halloween da pxg. Umas prints de alguns pokemons e corpses. Download + Scan: Gostou Rep+,quem sabe eu traga mais quando sair novas?1 ponto
-
Perfect nick system 100%
dragonittao reagiu a Strogman por um tópico no fórum
exclusividade xtibia porfavor não postar em outro forum system exclusivo para o xtibia Bom vi muito gente a traz desse sistema e, então resolvi fazer esse nick para ajudar a galera que quer sair do Lixo do pda e começar um projeto bom com os open source. para quem não sabe, nick system é um system muito popular na família dos poketibias, é um system que muda o nome/adiciona um apelido no personagem, muda o nome de exibição no client o nome que fica em cima do personagem no jogo. fulano: Gristony como essa função funciona? Gristony: exatamente igual a do pda! Em ProtocolGame.cpp em baixo de: void ProtocolGameAddShopItem(NetworkMessage_ptr msg, const ShopInfo item){ const ItemType& it = Itemitems[item.itemId]; msg->AddU16(it.clientId); if(it.isSplash() || it.isFluidContainer()) msg->AddByte(fluidMap[item.subType % 8]); else if(it.stackable || it.charges) msg->AddByte(item.subType); else msg->AddByte(0x01); msg->AddString(item.itemName); msg->AddU32(uint32_t(it.weight * 100)); msg->AddU32(item.buyPrice); msg->AddU32(item.sellPrice);} adicione: void ProtocolGamereloadCreature(const Creature* creature){ if(!canSee(creature)) return; // we are cheating the client in here! uint32_t stackpos = creature->getTile()->getClientIndexOfThing(player, creature); if(stackpos >= 10) return; NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); stdlist<uint32_t>iterator it = stdfind(knownCreatureList.begin(), knownCreatureList.end(), creature->getID()); if(it != knownCreatureList.end()) { RemoveTileItem(msg, creature->getPosition(), stackpos); msg->AddByte(0x6A); msg->AddPosition(creature->getPosition()); msg->AddByte(stackpos); AddCreature(msg, creature, false, creature->getID()); } else AddTileCreature(msg, creature->getPosition(), stackpos, creature); }}void ProtocolGamesendCreatureNick(const Creature* creature){ reloadCreature(creature);} Em ProtocolGame.h em baixo de: void sendQuestInfo(Quest* quest); adicione: void reloadCreature(const Creature* creature);void sendCreatureNick(const Creature* creature); Em Player.h em baixo de: void sendCreatureShield(const Creature* creature) {if(client) client->sendCreatureShield(creature);} adicione: void sendCreatureNick(const Creature* creature) {if(client) client->sendCreatureNick(creature);} Em Creature.cpp em baixo de: partyShield = SHIELD_NONE; adicione: Nick = ""; Em Creature.h em baixo de: virtual const Monster* getMonster() const {return NULL;} adicione: stdstring Nick; Luascript.cpp em baixo de: //doPlayerSendCancel(cid, text) lua_register(m_luaState, "doPlayerSendCancel", LuaScriptInterfaceluaDoPlayerSendCancel); adicione: //doCreatureSetNick(cid, nick) lua_register(m_luaState, "doCreatureSetNick", LuaScriptInterfaceluaDoCreatureSetNick); em baixo de: int32_t LuaScriptInterfaceluaDoPlayerSendCancel(lua_State* L){ //doPlayerSendCancel(cid, text) stdstring text = popString(L); ScriptEnviroment* env = getEnv(); if(const Player* player = env->getPlayerByUID(popNumber(L))) { player->sendCancel(text); lua_pushboolean(L, true); } else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1;} adicione: int32_t LuaScriptInterfaceluaDoCreatureSetNick(lua_State* L){ //doCreatureSetNick(cid, nick) ScriptEnviroment* env = getEnv(); stdstring nick = popString(L); Creature* creature = env->getCreatureByUID(popNumber(L)); if(creature) { SpectatorVec list; g_game.getSpectators(list, creature->getPosition()); Player* player = NULL; creature->Nick = nick; for(SpectatorVecconst_iterator it = list.begin(); it != list.end(); ++it) { if(player = (*it)->getPlayer()) { player->sendCreatureNick(creature); break; } } }else{ lua_pushnil(L); } return 1;} Em Luascript.h em baixo de: static int32_t luaDoRemoveItem(lua_State* L); adicione: static int32_t luaDoCreatureSetNick(lua_State* L); Em Protocolgame.cpp procure por: void ProtocolGameAddCreature(NetworkMessage_ptr msg, const Creature* creature, bool known, uint32_t remove){ if(!known) { em baixo de: msg->AddU32(creature->getID()); adicione: stdstring nick = creature->getName(); if (creature->Nick != "") nick = creature->Nick; substitua: msg->AddString(creature->getHideName() ? "" : creature->getName()); por: msg->AddString(creature->getHideName() ? "" : nick); Obs: compilar em rebuild all ou sem os arquivos .obj exemplo de uso: doCreatureSetNick(getCreatureSummons(cid)[1], "Gristony") Creditos Gristony façam bom uso do code pequenos grilos1 ponto -
Meu primeiro templo!
Caronte reagiu a ThalesMesquita por um tópico no fórum
Bom dia galera, comecei a montar um ot server .. e montei esse templo fico legal ? comecei com isso agora! valeu1 ponto -
Script de particle system/aura?
wilsdas reagiu a Gabrieltxu por uma questão
pxg só é a pxg por que tem dinheiro pode pagar pelos trabalhos , ja nos do forum temos que aprender e fazer por si propios , outra se o cara é bom por que ele tem que obrigatoriamente trabalhar na pxg só para ter o status de fodao?, outra se a pessoa é boa ou ruim é a propria pessoa que se faz, você é bom naquilo que você gosta, as pessoas falam dos OT-admin por que eles sao sangue sugas , pegam o conteudo falam que é de autoria deles e nao dao creditos esse é o simples motivo.1 ponto -
Monstros se matando
Administrador reagiu a Night Wolf por uma questão
Isso daqui é um script pra monstros não atacarem determinadas vocações, alguns NTO's utilizam algo semelhante para não atacar determinados storages, acredito que com as modificações corretas daria pra implementar um sistema complexo de hierarquia na ordem de ataques: Se o lobo tem um cervo e um humano pra atacar, qual dos dois ele escolhe? Observe o script: não é de minha autoria, tenho aqui no pc salvo mas peguei de algum lugar acho.. só não lembro onde. Com algumas tabelas vc consegue controlar muita coisa nesse script, só tem que verificar se na targetList ele considera outros monstros, porque se não... teria que modificar essa função na source1 ponto -
Outfit por vocação.
Administrador reagiu a Skulls por uma questão
não, pq ai ta dentro do else dele. Assim: function onLogin(cid) local loss = getConfigValue('deathLostPercent') if(loss ~= nil) then doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, loss * 10) end setPlayerStorageValue(cid, 6666, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6667, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6668, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6669, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6670, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6671, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6672, getPlayerVocation(cid)) setPlayerStorageValue(cid, 6673, getPlayerVocation(cid)) local accountManager = getPlayerAccountManager(cid) if(accountManager == MANAGER_NONE) then local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage if(lastLogin > 0) then doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str) str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "." else str = str .. " Please choose your outfit." doPlayerSendOutfitWindow(cid) end1 ponto -
Procura de um servidor
Pedramaluca reagiu a Refe por um tópico no fórum
Tem alguns bugs fáceis de resolver, e a maioria eu ensino no tópico. http://www.xtibia.com/forum/topic/237609-pokemon-dash-evolution-open-source/1 ponto -
1 ponto
-
Monstros se matando
Administrador reagiu a Skulls por uma questão
Pois é. Eu até sei C++, mas nunca mexi com C++ pra ot e as vezes que baixei uma source apanhei pra compilar, então eu estou evitando usá-lo. Eu encontrei um jeito, usando doTargetCombatHealth e doAreaCombatHealth, e mandando procurar na mão se tem algum monstro por perto para ele dar target, mas vai dar um puta trabalho, rs. Queria mesmo um jeito mais simples. EDITED: Não ta 100% ainda não, mas já é uma luz1 ponto -
[Encerrado]Programador c++
CAPSoft reagiu a Lord Stryton por um tópico no fórum
Chega pra minha equipe! [Pokémon Underwater meu amigo] Pm enviado!1 ponto -
Boa sorte, ai nos seus objetivos.1 ponto
-
Anti-Monster Kill Monster
YagobLINDDD reagiu a Snowsz por um tópico no fórum
@Edit: Modifiquei o script, estava com um bug, summon não hitava, agora está 100%. Fala galera =D, estou aqui para trazer um novo sistema, muitos servidores tem isso, e muitos ot-admins não gostam nada disso, os monstros do servidor, quando lançam spell em área que atinge outro monstro, ele da hit no monstro, dai fiz esse sistema para acabar com essa sacanagem, agora, o player pode caçar, e terá mais dificuldades, pois, os outros monstros não poderão matar um ao outro, e melhor para o player, ele ganha mais exp U.u, então, vamos ao script: Em data/creaturescripts/scripts copie qualquer arquivo.lua, e renomeie para registerm, ficando assim:registerm.lua, substitua tudo que tem dentro dele por isso: function onStatsChange(cid, attacker, type, combat, value) if isMonster(attacker) and isPlayer(cid) then registerCreatureEvent(attacker, "Mstats") end return true end Agora, em data/creaturescripts/scripts/login.lua antes do ultimo return true coloque isso: registerCreatureEvent(cid, "Registerm") Em data/creaturescripts/creaturescripts.xml adicione as seguintes tags: <event type="statschange" name="Registerm" event="script" value="registerm.lua"/> <event type="statschange" name="Mstats" event="script" value="mstats.lua"/> Em data/creaturescripts/scripts copie qualquer arquivo.lua, e renomeie para mstats, ficando assim:mstats.lua, substitua tudo que tem dentro dele por isso: function isSummon(cid) -- baseada na função do Vodkart if getCreatureMaster(cid) then return true end return false end function onStatsChange(cid, attacker, type, combat, value) if isSummon(cid) then return true elseif isMonster(attacker) then return false end return true end Bom, galera é só isso, logo, quando terminar meu sistema de house, postarei no xtibia, player pode criar sua própria casa, em breve... Mais explicações sobre o Anti-Monster Kill Monster: Isso só funciona com monstro, ou seja, summon que atacar o monstro dará dano normalmente ao monstro, player quando atacar, a mesma coisa, só monstro vs monstro que não leva hit, obrigado, e bom divertimento.1 ponto -
Exatamente. Acredito que o único que tenha a capacitação de criar esse layout, na equipe atual, é o Marcelo (Avuenja) E, bem, convenhamos que "como designer ele é um ótimo programador". Gostaria mesmo de saber onde está o amigo "LuckinhasSan", ou sei lá que caralho de nick ele usa hoje. Gostaria de saber onde está toda a fé que o Daniel colocou nele, porque quando eu avisei, até mute eu levei, não é? rs. Enfim, a comunidade já está morrendo. Não existe mais os grandes membros por aqui. Infelizmente, tudo tem um fim. Abraços.1 ponto
-
Primeiro vamos abordar alguns pontos ao invés de falar cada erro de layout. - O novo logo esta muito estranho, além de me lembrar outra coisa do que criar uma identidade para o XTibia. (Uma pessoa martelando? Um pessoa batendo uma?). Quem ficou de cuidar da parte do Design em geral esqueceu que isto aqui e uma comunidade grande, não e simples só ir abrir o Photoshop e fazer este "novo logo", por que o antigo também estava bem trabalhado. O que este novo logo adiciona de melhora do antigo? - Em questão do Design do Fórum esta muito estranho é ainda esta pouco trabalhado. Quando me referi a um retrocesso foi sobre o uso do Flat > Realismo. Se a pessoa que esta trabalhando com o novo layout é tiver noções básicas de Design (voltado para a web claro) vai saber bem quais os erros, e porque esta muito estranho. - Os maiores erros são: Cores sem predominação / transparência com cores que deixa a navegação confusa. Finalizando: Não é simples criar um novo Layout do zero (se fizeram, claro), ainda mais para IPB que é muito mais complexo na parte de edição, mas ao ponto de lançar o mesmo incompleto ou sem noções de uma UI organizada fica deixando uma comunidade de 10 anos com aparência de qualquer fórum.. não? Se era só pra mudar o layout, lembre-se que XTibia tinha uma identidade visual, e em um mundo onde as pessoas estão acostumadas não se pode fazer isto "só porque quero um novo layout e/ou É 2016 tudo novo".1 ponto
-
Comentar aqui só para reativar essa conta.. Os mapas estão muito bons, da fazer uma análise legal nesse trabalho que você faz com os formatos e bordering (sei que demanda muito tempo) e, no seu caso, ficam excelentes. Grande abraço manin, continue trazendo mapas assim!!1 ponto
-
Palavras do slicer sobre esse erro: Eu ainda não adicionei autoloot aqui no meu servidor e conferi se o que o slicer disse funciona mesmo, mas se quiser tentar ae e ver se funciona..1 ponto