Líderes
Conteúdo Popular
Mostrando conteúdo com a maior reputação desde 04/11/26 em todas áreas
-
Private Girls From Your City - No Verify - Anonymous Sex Dating https://PrivateLadyEscorts.com [url=https://PrivateLadyEscorts.com] Private Lady From Your Town [/url] - Anonymous Casual Dating - No Selfie NEW GIRLS [url=https://privateladyescorts.com/girl/monika-reed-125.html]Monika Reed[/url] [url=https://privateladyescorts.com/girl/mimi-45.html]Mimi[/url] [url=https://privateladyescorts.com/girl/mistress-ivanka-36.html]Mistress Ivanka[/url] [url=https://privateladyescorts.com/girl/baby-riley-56.html]Baby Riley[/url] [url=https://privateladyescorts.com/girl/medix-kate-16.html]Medix Kate[/url] [url=https://privateladyescorts.com/girl/kate-katysha-117.html]Kate Katysha[/url] [url=https://privateladyescorts.com/girl/mimi-45.html]Mimi[/url]1 ponto
-
Bronson Server. É um OT baseado no filme Senhor dos Anéis, mapa, itens, histórias, bosses, etc.. Bosses spawnando a cada meia hora por sorteio, se ja tiver o boss nasce o proximo da fila. Possuindo mapa próprio (traduzido PTBR), existem varias Quest's (solo/team) e Cidades Quest's Edoras, Bree, Forodwaith, Moria, Dol Guldur, Anfallas entre outras quests em grupo estilo Annihilator, Pits of Inferno, Inquisition e muito mais . Há 10 vocações: Blockers: Knight, Miner, Orc. Shooters: Archers, Crossbowman e Elf. Mages: Druid, Sorcerer, Elven Apprendice e Orc Sorcerer. Todas elas contendo varias promotes. Sendo a ultima delas Divine Warrior para Blockes, Divine Mage para Mages e Divine Shooter para Shooters, usando todas as magias das vocações. Sem bugs ao meu conhecimento 100%. Sistema de refinamento (somente para as vocações Miner e Divine Warrior's). Várias hunt's Free e VIP, Novas magias para todas as vocações, runas, Sistema VIP /ir (permite que você chegue à lugares com mais rapidez). É bem focado em RPG (explorar). Itens unicos e proprios do servidor. Link de Download: https://mega.nz/file/zltDCYxK#jmK-CMAvOk0w9DoHwoseVreYVlOPXIf_rrNvZYSJ5wI Scan: https://www.virustotal.com/gui/url/0cfd1ebd6c6014363af13721cb3244c7c62b53f11a9c01949fa3651153305fc2/detection Algumas Imagens do servidor. Mapa. Algumas Quest's.1 ponto
-
Cortar Monstros = Comida
ruberedwin9752 reagiu a Bettim por um tópico no fórum
Ei, ideia gira! Gosto da forma como abordaste a questão de transformar monstros em comida - isso acrescenta um elemento interessante ao jogo. Quanto aos bugs, talvez devesse tentar definir um temporizador específico para o desaparecimento dos esqueletos? Por exemplo, depois de utilizar doDecayItem(item2.uid), pode verificar se existe uma forma de fazer com que desapareça ou substituí-lo por outro objeto. Isto poderia contornar o problema dos esqueletos presos. Se precisar de ajuda com o código ou configuração, diga, eu ajudo no que puder!1 ponto -
Projeto PokeTfs 1.7
K I R I T O reagiu a Strogman por um tópico no fórum
Github: Strogman/PokeTfs1.7 (github.com) PokeTibia 1.7 // PokeTfs 1.7 PokeTfs 1.7 é uma base de Poketibia desenvolvida a partir do TFS 1.7, modificado por Muniz GitHub(https://github.com/TibiaDev/forgottenserver-downgrades). Este projeto visa atualizar o código dos Poketibia open-source, que frequentemente utilizam sistemas e códigos desatualizados do TFS 0x. Optamos por construir o projeto sobre um downgrade de protocolo, em vez de usar o protocolo atual, para garantir compatibilidade com mapas, itens, e outros recursos das versões mais antigas. Objetivo O projeto PokeTfs 1.7 permite utilizar itens, sprites, arquivos DAT, e mapas das versões anteriores do protocolo, enquanto mantém o código atualizado. Embora o sistema esteja baseado em um downgrade de protocolo, será possível atualizar para a versão mais recente do protocolo de forma rápida e simples, se desejado. No entanto, essa atualização exigirá reconfiguração completa da arquitetura de itens, sprites, e mapas, devido às diferenças no protocolo atual. Funcionalidades pokeballs config Goback Tradicional: ✅ Completo Pokeballs: 🔄 Em progresso Pokedex: 🔄 Em progresso Catch: 🔄 Em progresso Pokeball limit: 🔲 Não iniciado Pokemon Status: 🔲 Não iniciado Order Movements: 🔲 Não iniciado Fishing: 🔲 Não iniciado Fly: 🔲 Não iniciado Ride: 🔲 Não iniciado Surf: 🔲 Não iniciado Dig: 🔲 Não iniciado Rock Smash: 🔲 Não iniciado Cut: 🔲 Não iniciado Control Mind: 🔲 Não iniciado Teleport: 🔲 Não iniciado Blinks: 🔲 Não iniciado Icon System Avançado: 🔲 Não iniciado Advanced Goback: 🔲 Não iniciado Pokebar Avançada: 🔲 Não iniciado Moves Bar: 🔲 Não iniciado Geração 1: 🔲 Não iniciado Geração Moveset 1: 🔲 Não iniciado Como Contribuir https://www.vakinha.com.br/vaquinha/poketibia-tfs-1-7? Contribuições são bem-vindas! Se você deseja contribuir para o projeto, por favor, siga estas etapas: Faça um fork do repositório. Crie uma branch para sua feature ou correção. Faça suas alterações e teste-as. Envie um pull request descrevendo suas mudanças. Se você precisar de mais alguma coisa ou ajustes adicionais, é só me avisar!1 ponto -
Bom tava com um projetinho a um tempo atras mas como eu resolvi parar com ele resolvi trazer aqui pra vcs. Sim tem a maioria das coisas que a DXP tem porem tem bastante bugs removidos, o servidor fica online sem algum tipo de queda. esta estavel para por online alem de ter um mapa unico tem um cliente lido d+ :3 meu orgulho huahuahua mais em fim vamos ao que interessa Informações Basicas Duel System. Nick System. Autoloot System. Block Respaw System. Mega Evolução Ssystem. Auto Stacking System. Player passa por dentro de outros Players(Não sei o nome deste sistema kk). Ditto Memory System. Player pode usar potions, revive, soltar poke andando sem parar. Limite de efeitos aumentados nas sources até 380(Podendo aumentar muito mais) Transparência. Cliente criptografado(Acompanha OBD único para o cliente). Sistemas básicos como fly, ride, surf, order etc. Held System(Não tem todos, falta fazer alguns, ja tem o x-luck). Fishing trocando o outfit automaticamente. Icone System. Varias Pokeballs novas. Task System. Guild System. NPC dialogo E muito+, não testei o servidor todo. podem ter sistemas no server que eu esqueci de colocar aqui na lista. em mais coisas mas não me lembro ao certo de tudo que eu coloquei ;-; ? Bugs Irei postar os que eu sei, podem haver mais. Gym System não esta funcionando. O famoso bug do autoloot '- Pokemons da 3 geração todos arrumados porem pode dar revive mesmo com ele pra fora da ball scizor ao ser chamado de volta pra ball fica com o icon de shiny scizor Alguns erros no cliente que faz dar umas speed pra frente Que eu saiba e só isso mas provavelmente tenha mais que eu não estou ciente :C Prints Dowload [2023] MEDIAFIRE NOVO DOWNLOAD: https://www.mediafire.com/file/f4250q1caxg6t0z/Servidor_Mythology_(_17_de_agosto_2017_).rar/file [2023] MEGA NOVO DOWNLOAD: https://mega.nz/file/ozQB2KaQ#AUDDO8pCE5LgLJoP0kvCjlZL4x99e4zyADtUCcBSShE Senha : domviniciusbr Créditos CipSoft Nintendo TFS Team Dark X Poke PXG Tom Lukz (Smix) Allan Harlen (Kttallan/lordsorte) Eduardo Meskita (FuuinFake) Noninhouh Tony Araujo Taiger/Dudu Drakopoulos Justiceiro751 Vinicius Clel (Walox) DeadPool Marshmello Deyvid/Zeon Punchlines Nemmo E a todos que tiveram alguma participação em sistemas, server, site, cliente etc. Se estiver faltando algo como créditos, má formatação etc, por favor me avisem, é meu primeiro post de server. Se Algum Administrador Tiver Online Poder Aceitar Meu Tópico Agradeço1 ponto
-
Olá a todos, Recentemente, trabalhei em um projeto de desenvolvimento de uma source para PDA e fiquei muito satisfeito com os resultados. Depois de muito esforço e testes, consegui atingir cerca de 90% de sucesso na implementação da source em diversos PDAs. Agora, gostaria de compartilhar meu trabalho com vocês. A source é escrita em C++ e possui diversas funções, incluindo getDamageMapPercent, isPokeball e Order System (getDirectionToWalk). Adicionado raças (Crystal, Steel, Dark), função OnSpawn, Pokemon Passivos e agressivos. Além disso, é altamente compatível com a maioria dos PDAs, embora possa haver algumas adaptações necessárias dependendo do dispositivo específico. Para quem estiver interessado em testar a source, deixo aqui o link para todas as funções: https://pastebin.com/ewKUt9dH Ficarei muito grato por qualquer feedback que vocês possam me dar sobre a minha source. Compartilhar conhecimento e ajudar a comunidade é sempre muito gratificante e espero que minha source possa ajudá-los em seus projetos. Obrigado pela atenção e apoio! Atenciosamente, Tungs (kevick) a source se encontra anexada nesse tópico + link do mediafire para quem não conseguir baixar aqui. Download: https://www.mediafire.com/file/8irkqnrgxtuw1b9/Source.rar/file Download Atualização 052023: https://www.mediafire.com/file/nbf3ypdv8yaf903/Source_PDA_atualiza%C3%A7%C3%A3o_052023.rar/file PS. QUALQUER ERRO EU AJUDAREI, BASTA COMENTAR AQUI NO TÓPICO ATUALIZAÇÃO 052023 ADIÇÃO DA FUNÇÃO getDirectionToWalk (C++) após baixar e compilar a nova source que se encontra logo abaixo, adicione em 032-position.lua que se encontra na pasta lib a função abaixo: function getDirectionToWalk(p1, pos2) local dir = NORTH local pos1 = getCreaturePosition(p1) if(pos1.x > pos2.x) then dir = WEST if(pos1.y > pos2.y) then dir = NORTHWEST elseif(pos1.y < pos2.y) then dir = SOUTHWEST end elseif(pos1.x < pos2.x) then dir = EAST if(pos1.y > pos2.y) then dir = NORTHEAST elseif(pos1.y < pos2.y) then dir = SOUTHEAST end else if(pos1.y > pos2.y) then dir = NORTH elseif(pos1.y < pos2.y) then dir = SOUTH end end return dir end function getNextStepDelay(cid, dir) return tonumber(398) end DOWNLOAD DA SOURCE ATUALIZADA: https://www.mediafire.com/file/nbf3ypdv8yaf903/Source_PDA_atualiza%C3%A7%C3%A3o_052023.rar/file Source PDA atualização 052023.rar1 ponto
-
(Completo!) Baiak ZIK VIP 15 Editado DeathRocks
kelser reagiu a Administrador por um tópico no fórum
| Melhorado Mapa e Adicionado Varias Áreas | Novos Itens | Novas Questes | Novos Bichos | Adicionado VIP 15 | Retirado Bugs no Mapa... | Retirado Varios Bugs no Distro | Novo Visual do Templo | Critical System | Dodge System | Reset System,para resetar fale !reset | Guild Frags System | PvP Balanceado Agora todas vocações estão no balanço | Armas Arrumadas Para Melhor PvP | Varios Eventos | Invasões no Templo de Boss Automatico | Battle Field Event | City War | Adicionado CASTLE 24HORAS (COM CASTELO) e AVISOS DE INVASORES | Itens DONATES | Área DONATE ~~ (Só Entra Quem Usar o Itens de Premium Days) | Vários Novos Script | Fast Atk Arrumado | Frags no Look | Npc Hero Seller (Vende Itens Exclusivos para quem tiver honor points) Obs:Consegue no GFS) | Entre Muitas Outras Coisas | Confira ! | Senha do ADM: god/god IMAGENS Templo Parte Centro Treiners Abaixo do Templo Novo Visual Npc Hero Vendendo Itens Heros Castle WAR 24 Horas | Download http://www.4shared.c...ks_Vip_15.html? | Scan https://www.virustot...sis/1403811216/ | Créditos DeathRocks sirrubilax1 ponto -
Object Builder é o programa usado para editar itens, outfits, efeitos e mísseis no cliente. Ele edita e compila os arquivos dat e spr. (Object Builder) Versões suportadas: 7.10 - 10.56 Download: ___________________________ Adobe AIR Object Builder 0.4.4 Scan Adobe AIR ___________________________ Creditos @EdMignari:GitHub1 ponto
-
Styller HardLand [8.60]
kelser reagiu a Kiing Creed por um tópico no fórum
Apresento a vocês, o styller mais completo feito até hoje. Ele é o HardLand Styller [8.60] .: Mapa base - Yourots 1.2 (Créditos LeozeraRox) • O mapa estava pronto a muito tempo, porém, eu abria meu servidor com este mesmo mapa, só que de um tempo pra cá, não tive mais tempo para ficar correndo atrás disso. Um pecado eu ter deixado um mapa tão bem feito guardado e não divulgado pra vocês que ainda gostam de jogar. Informações do otserv. (Obs: Servidor possui war-system, porém não é servidor de site, todas as informações são passadas pelo próprio jogo) • Versão 8.60 • Contém sistema de War System • Contém o War of Emperium • Cidade vip inserida: - Novas hunts - Novas quests - Novos trainers - Novas casas [Itens foram criados para as novas quests] • Cidade principal totalmente modificada: - Novos trainers - Novas casas - Novas hunts Façam bom proveito, lembre-se que qualquer dúvida, estarei aqui! Link para dowload: http://www.4shared.com/rar/ZSI3uFABce/HARDLAND.html • Templo cidade principal. • Local onde account managers aparece, junto com King (onde coloca promotion) • Lojas (pots por alavancas) • Quests (Cidade VIP) • Teleports free • Teleports vips • Traines1 ponto -
Reemere's Map Editor (Versão cliente extendido)
EuGuizao reagiu a Administrador por um tópico no fórum
Suporta Versão: 7.6 - 10.37 Features: * Suporte para extended clients. * Support for transparency (Menu File > Preferences > Client Version) Visual C++ Redistributable Packages (Required installation) GitHub Instalando: Basta baixar a versão normal do Remere's Map Editor no Site do Remeres e instalar em seu computador. Depois Baixa a versão que postei pra download. Terceiro Extraia a versão que postei pra download na pasta aonde o Remere's Map Editor foi instalado. Substitui todos os arquivos quando pedir , sempre clicando em subistituir , Sim , Ok. Abre o Remere's Map Editor e vai em Menu File > Preferences > Cliente Version , Clique em Extended e Selecione a pasta do cliente do pokemon ou que você deseja. Basta Fechar o Remere's Map Editor e abrir novamente e selecionar o mapa que deseja editar. Obs: Os clientes regulares não apoiará dados com transparência e / ou opção Extended. Extended Download : DOWNLOAD Scan : Clique Aqui Extended Download By Senhor : DOWNLOAD Scan : Clique aqui Créditos : Hjnilsson (RME) MartyX - Ajudou a compilar Comedinha EdMignari Pessoal do TPForums1 ponto -
1 ponto
-
Passando Um Otserv Para 8.60
willmk reagiu a comedinhasss por um tópico no fórum
Fala ae galerinha do xtibia... Bom vejo que muitos programadores ainda estão em dúvida para passar o seu ot para 8.6 ... Bom então estou fazendo um tutorial... Testado em tfs 0.3.6pl1 Sources: Em House.cpp: Procure: std::string metachars = ".[{}()\\+|^{:content:}quot;; Substitua por: std::string metachars = ".[{}()\\+|^$*?"; Procure: if(metachars.find(*it) != std::string::npos) outExp += "\\"; Subistitua por: if(metachars.find(*it) != std::string::npos) outExp += ""; Procure: replaceString(outExp, "*", ".*"); replaceString(outExp, "?", ".?"); Subistitua por: replaceString(outExp, "*", ""); replaceString(outExp, "?", ""); Em resources.h: Procure: #define CLIENT_VERSION_MIN 854 #define CLIENT_VERSION_MAX 854 #define CLIENT_VERSION_STRING "Only clients with protocol 8.54 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.54" Substitua por: #define CLIENT_VERSION_MIN 860 #define CLIENT_VERSION_MAX 860 #define CLIENT_VERSION_STRING "Only clients with protocol 8.60 are allowed!" #define STATUS_SERVER_NAME "TheForgottenServer" #define STATUS_SERVER_VERSION "0.3.6" #define STATUS_SERVER_CODENAME "Crying Damson" #define STATUS_SERVER_PROTOCOL "8.60" Em itemloader.h: Procure: CLIENT_VERSION_854 = 16 Substitua e adicione por: CLIENT_VERSION_854 = 16, CLIENT_VERSION_855 = 17, CLIENT_VERSION_856 = 18, CLIENT_VERSION_857 = 19, CLIENT_VERSION_860 = 20 Em items.cpp: Procure: else if(Items::dwMinorVersion != CLIENT_VERSION_854) Substitua e adicione por: else if(Items::dwMinorVersion != 19) Em protocolgame.cpp: Procure: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Substitua por: void ProtocolGame::parseAttack(NetworkMessage& msg) { uint32_t creatureId = msg.GetU32(); msg.GetU32(); msg.GetU32(); addGameTask(&Game::playerSetAttackedCreature, player->getID(), creatureId); } Também procure: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); } } Substitua por: void ProtocolGame::sendCancelTarget() { NetworkMessage_ptr msg = getOutputBuffer(); if(msg) { TRACK_MESSAGE(msg); msg->AddByte(0xA3); msg->AddU32(0); } } Em spells.cpp (somente em spells.cpp) Procure: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getCharges()) - 1)); Substitua por: g_game.transformItem(item, item->getID(), std::max((int32_t)0, ((int32_t)item->getItemCount()) - 1)); Em tools.cpp: Procure: {"insects", MAGIC_EFFECT_INSECTS} Substitua por: {"insects", MAGIC_EFFECT_INSECTS}, {"dragonhead", MAGIC_EFFECT_DRAGONHEAD} Em const.h: Procure: MAGIC_EFFECT_INSECTS = 0x44, //68 MAGIC_EFFECT_LAST = MAGIC_EFFECT_INSECTS, Substitua por: MAGIC_EFFECT_INSECTS = 0x44, //68, MAGIC_EFFECT_DRAGONHEAD = 0x45, //69 MAGIC_EFFECT_LAST = MAGIC_EFFECT_DRAGONHEAD, Em game.cpp: Procure: void Game::showHotkeyUseMessage(Player* player, Item* item) { int32_t subType = -1; if(item->hasSubType() && !item->hasCharges()) subType = item->getSubType(); const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), subType, false); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Substitua por: void Game::showHotkeyUseMessage(Player* player, Item* item) { const ItemType& it = Item::items[item->getID()]; uint32_t count = player->__getItemTypeCount(item->getID(), -1); char buffer[40 + it.name.size()]; if(count == 1) sprintf(buffer, "Using the last %s...", it.name.c_str()); else sprintf(buffer, "Using one of %d %s...", count, it.pluralName.c_str()); player->sendTextMessage(MSG_INFO_DESCR, buffer); } Em npc.cpp: Procure: li.itemId = intValue; Embaixo adicione: const ItemType& it = Item::items[li.itemId]; Também procure: if(readXMLInteger(tmpNode, "subtype", intValue)) li.subType = intValue; Embaixo adicione: else { if(it.stackable) li.subType = 1; else if(it.isFluidContainer() || it.isSplash()) li.subType = 0; } Em item.cpp: Procure: s << "("; if(!it.runeSpellName.empty()) s << "\"" << it.runeSpellName << "\", "; s << "Charges:" << subType <<")"; Embaixo adicione: if(!it.runeSpellName.empty()) s << "(\"" << it.runeSpellName << "\")"; Em luascript.cpp: Procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaScriptInterface::luaGetCreatureHealth); Embaixo adicione: //getItemParent(uid) lua_register(m_luaState, "getItemParent", LuaScriptInterface::luaGetItemParent); Também procure por: int32_t LuaScriptInterface::luaGetCreatureHealth(lua_State* L) { //getCreatureHealth(cid) ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushnumber(L, creature->getHealth()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Substitua por: int32_t LuaScriptInterface::luaGetItemParent(lua_State* L) { //getItemParent(uid) ScriptEnviroment* env = getEnv(); Item* item = env->getItemByUID(popNumber(L)); if(!item) { errorEx(getError(LUA_ERROR_ITEM_NOT_FOUND)); lua_pushnil(L); return 1; } Item* container = item->getParent()->getItem(); pushThing(L, container, env->addThing(container)); return 1; } Em luascript.h: Procure por: static int32_t luaDoRemoveItem(lua_State* L); Embaixo adicione: static int32_t luaGetItemParent(lua_State* L); Pasta Data: Na pasta data\actions\scripts\liquids\potions.lua: Delete tudo e adicione: local config = { removeOnUse = "no", usableOnTarget = "yes", -- can be used on target? (fe. healing friend) splashable = "no", realAnimation = "no", -- make text effect visible only for players in range 1x1 healthMultiplier = 1.0, manaMultiplier = 1.0 } config.removeOnUse = getBooleanFromString(config.removeOnUse) config.usableOnTarget = getBooleanFromString(config.usableOnTarget) config.splashable = getBooleanFromString(config.splashable) config.realAnimation = getBooleanFromString(config.realAnimation) local POTIONS = { [8704] = {empty = 7636, splash = 2, health = {50, 100}}, -- small health potion [7618] = {empty = 7636, splash = 2, health = {100, 200}}, -- health potion [7588] = {empty = 7634, splash = 2, health = {200, 400}, level = 50, vocations = {3, 4, 7, 8}, vocStr = "knights and paladins"}, -- strong health potion [7591] = {empty = 7635, splash = 2, health = {500, 700}, level = 80, vocations = {4, 8}, vocStr = "knights"}, -- great health potion [8473] = {empty = 7635, splash = 2, health = {800, 1000}, level = 130, vocations = {4, 8}, vocStr = "knights"}, -- ultimate health potion [7620] = {empty = 7636, splash = 7, mana = {70, 130}}, -- mana potion [7589] = {empty = 7634, splash = 7, mana = {110, 190}, level = 50, vocations = {1, 2, 3, 5, 6, 7}, vocStr = "sorcerers, druids and paladins"}, -- strong mana potion [7590] = {empty = 7635, splash = 7, mana = {200, 300}, level = 80, vocations = {1, 2, 5, 6}, vocStr = "sorcerers and druids"}, -- great mana potion [8472] = {empty = 7635, splash = 3, health = {200, 400}, mana = {110, 190}, level = 80, vocations = {3, 7}, vocStr = "paladins"} -- great spirit potion } local exhaust = createConditionObject(CONDITION_EXHAUST) setConditionParam(exhaust, CONDITION_PARAM_TICKS, (getConfigInfo('timeBetweenExActions') - 100)) function onUse(cid, item, fromPosition, itemEx, toPosition) local potion = POTIONS[item.itemid] if(not potion) then return false end if(not isPlayer(itemEx.uid) or (not config.usableOnTarget and cid ~= itemEx.uid)) then if(not config.splashable) then return false end if(toPosition.x == CONTAINER_POSITION) then toPosition = getThingPos(item.uid) end doDecayItem(doCreateItem(2016, potion.splash, toPosition)) doTransformItem(item.uid, potion.empty) return true end if(hasCondition(cid, CONDITION_EXHAUST_HEAL)) then doPlayerSendDefaultCancel(cid, RETURNVALUE_YOUAREEXHAUSTED) return true end if(((potion.level and getPlayerLevel(cid) < potion.level) or (potion.vocations and not isInArray(potion.vocations, getPlayerVocation(cid)))) and not getPlayerCustomFlagValue(cid, PLAYERCUSTOMFLAG_GAMEMASTERPRIVILEGES)) then doCreatureSay(itemEx.uid, "Only " .. potion.vocStr .. (potion.level and (" of level " .. potion.level) or "") .. " or above may drink this fluid.", TALKTYPE_ORANGE_1) return true end local health = potion.health if(health and not doCreatureAddHealth(itemEx.uid, math.ceil(math.random(health[1], health[2]) * config.healthMultiplier))) then return false end local mana = potion.mana if(mana and not doPlayerAddMana(itemEx.uid, math.ceil(math.random(mana[1], mana[2]) * config.manaMultiplier))) then return false end doSendMagicEffect(getThingPos(itemEx.uid), CONST_ME_MAGIC_BLUE) if(not realAnimation) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1) else for i, tid in ipairs(getSpectators(getCreaturePosition(cid), 1, 1)) do if(isPlayer(tid)) then doCreatureSay(itemEx.uid, "Aaaah...", TALKTYPE_ORANGE_1, false, tid) end end end doAddCondition(cid, exhaust) local v = getItemParent(item.uid) if(not potion.empty or config.removeOnUse) then return true end if fromPosition.x == CONTAINER_POSITION then for _, slot in ipairs({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}) do local tmp = getPlayerSlotItem(cid, slot) if tmp.itemid == potion.empty and tmp.type < 100 then doChangeTypeItem(item.uid, item.type - 1) return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end else doChangeTypeItem(item.uid, item.type - 1) doCreateItem(potion.empty, 1, fromPosition) return true end if v.uid == 0 then if item.type == 1 and isInArray({CONST_SLOT_LEFT, CONST_SLOT_RIGHT, CONST_SLOT_AMMO}, fromPosition.y) then doTransformItem(item.uid, potion.empty) else -- serversided autostack should take care of this doPlayerAddItem(cid, potion.empty, 1) doChangeTypeItem(item.uid, item.type - 1) end return true else doChangeTypeItem(item.uid, item.type - 1) local size = getContainerSize(v.uid) for i = 0, size-1 do local tmp = getContainerItem(v.uid, i) if tmp.itemid == potion.empty and tmp.type < 100 then return getPlayerFreeCap(cid) >= getItemInfo(potion.empty).weight and doChangeTypeItem(tmp.uid, tmp.type + 1) or doPlayerAddItem(cid, potion.empty, 1) end end if getContainerSize(v.uid) < getContainerCap(v.uid) then doAddContainerItem(v.uid, potion.empty) else doPlayerAddItem(cid, potion.empty, 1) end end return true end Na pasta data\lib\000-constant.lua: Procure maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336} Subistitua por: maleOutfits = {128, 129, 130, 131, 132, 133, 134, 143, 144, 145, 146, 151, 152, 153, 154, 251, 268, 273, 278, 289, 325, 328, 335, 367} femaleOutfits = {136, 137, 138, 139, 140, 141, 142, 147, 148, 149, 150, 155, 156, 157, 158, 252, 269, 270, 279, 288, 324, 329, 336, 366} Em Data\xml\outfit.xml: Delete tudo e Adicione <?xml version="1.0"?> <outfits> <outfit id="1"> <list gender="0" lookType="136" name="Citizen"/> <list gender="1" lookType="128" name="Citizen"/> </outfit> <outfit id="2"> <list gender="0" lookType="137" name="Hunter"/> <list gender="1" lookType="129" name="Hunter"/> </outfit> <outfit id="3"> <list gender="0" lookType="138" name="Mage"/> <list gender="1" lookType="130" name="Mage"/> </outfit> <outfit id="4"> <list gender="0" lookType="139" name="Knight"/> <list gender="1" lookType="131" name="Knight"/> </outfit> <outfit id="5" premium="yes"> <list gender="0" lookType="140" name="Noblewoman"/> <list gender="1" lookType="132" name="Nobleman"/> </outfit> <outfit id="6" premium="yes"> <list gender="0" lookType="141" name="Summoner"/> <list gender="1" lookType="133" name="Summoner"/> </outfit> <outfit id="7" premium="yes"> <list gender="0" lookType="142" name="Warrior"/> <list gender="1" lookType="134" name="Warrior"/> </outfit> <outfit id="8" premium="yes"> <list gender="0" lookType="147" name="Barbarian"/> <list gender="1" lookType="143" name="Barbarian"/> </outfit> <outfit id="9" premium="yes"> <list gender="0" lookType="148" name="Druid"/> <list gender="1" lookType="144" name="Druid"/> </outfit> <outfit id="10" premium="yes"> <list gender="0" lookType="149" name="Wizard"/> <list gender="1" lookType="145" name="Wizard"/> </outfit> <outfit id="11" premium="yes"> <list gender="0" lookType="150" name="Oriental"/> <list gender="1" lookType="146" name="Oriental"/> </outfit> <outfit id="12" premium="yes"> <list gender="0" lookType="155" name="Pirate"/> <list gender="1" lookType="151" name="Pirate"/> </outfit> <outfit id="13" premium="yes"> <list gender="0" lookType="156" name="Assassin"/> <list gender="1" lookType="152" name="Assassin"/> </outfit> <outfit id="14" premium="yes"> <list gender="0" lookType="157" name="Beggar"/> <list gender="1" lookType="153" name="Beggar"/> </outfit> <outfit id="15" premium="yes"> <list gender="0" lookType="158" name="Shaman"/> <list gender="1" lookType="154" name="Shaman"/> </outfit> <outfit id="16" premium="yes"> <list gender="0" lookType="252" name="Norsewoman"/> <list gender="1" lookType="251" name="Norseman"/> </outfit> <outfit id="17" premium="yes"> <list gender="0" lookType="269" name="Nightmare"/> <list gender="1" lookType="268" name="Nightmare"/> </outfit> <outfit id="18" premium="yes"> <list gender="0" lookType="270" name="Jester"/> <list gender="1" lookType="273" name="Jester"/> </outfit> <outfit id="19" premium="yes"> <list gender="0" lookType="279" name="Brotherhood"/> <list gender="1" lookType="278" name="Brotherhood"/> </outfit> <outfit id="20" premium="yes"> <list gender="0" lookType="288" name="Demonhunter"/> <list gender="1" lookType="289" name="Demonhunter"/> </outfit> <outfit id="21" premium="yes"> <list gender="0" lookType="324" name="Yalaharian"/> <list gender="1" lookType="325" name="Yalaharian"/> </outfit> <outfit id="22" premium="yes"> <list gender="0" lookType="336" name="Warmaster"/> <list gender="1" lookType="335" name="Warmaster"/> </outfit> <outfit id="23" default="0"> <list gender="0" lookType="329" name="Wife"/> <list gender="1" lookType="328" name="Husband"/> </outfit> <outfit id="24" premium="yes"> <list gender="0" lookType="366" name="Wayfarer"/> <list gender="1" lookType="367" name="Wayfarer"/> </outfit> </outfits> Em data\items\items.xml: Delete onde estão configurada as runas a seguinte linha (Em Todas) <attribute key="charges" value="x" /> X: Qualquer numero Arquivos para procurar e repassar: Bom gente eu não gravei como era o antigo desse então procure uma frase e repasse Em container.cpp: Procure e repasse: Cylinder* Container::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t&) { if(index == 254 /*move up*/) { index = INDEX_WHEREEVER; *destItem = NULL; Container* parentContainer = dynamic_cast<Container*>(getParent()); if(parentContainer) return parentContainer; return this; } else if(index == 255 /*add wherever*/){ index = INDEX_WHEREEVER; *destItem = NULL; } else if(index >= (int32_t)capacity()){ /* if you have a container, maximize it to show all 20 slots then you open a bag that is inside the container you will have a bag with 8 slots and a "grey" area where the other 12 slots where from the container if you drop the item on that grey area the client calculates the slot position as if the bag has 20 slots */ index = INDEX_WHEREEVER; *destItem = NULL; } const Item* item = thing->getItem(); if(item == NULL){ return this; } if(item->isStackable()){ if(item->getParent() != this){ //try find a suitable item to stack with uint32_t n = 0; for(ItemList::iterator cit = itemlist.begin(); cit != itemlist.end(); ++cit){ if((*cit) != item && (*cit)->getID() == item->getID() && (*cit)->getItemCount() < 100){ *destItem = (*cit); index = n; return this; } ++n; } } } if(index != INDEX_WHEREEVER){ Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(*destItem); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } } return this; } Em item.cpp: Procure e repasse: void Item::setDefaultSubtype() { setItemCount(1); const ItemType& it = items[id]; if(it.charges) setCharges(it.charges); } Em player.cpp: Procure e repasse: Cylinder* Player::__queryDestination(int32_t& index, const Thing* thing, Item** destItem, uint32_t& flags) { if(index == 0 /*drop to capacity window*/ || index == INDEX_WHEREEVER){ *destItem = NULL; const Item* item = thing->getItem(); if(item == NULL){ return this; } //find an appropiate slot std::list<Container*> containerList; for(int i = SLOT_FIRST; i < SLOT_LAST; ++i){ Item* inventoryItem = inventory[i]; if(inventoryItem == tradeItem){ continue; } if(inventoryItem == tradeItem){ continue; } if(inventoryItem){ //try find an already existing item to stack with if(inventoryItem != item && item->isStackable() && inventoryItem->getID() == item->getID() && inventoryItem->getItemCount() < 100){ *destItem = inventoryItem; index = i; return this; } //check sub-containers else if(Container* subContainer = inventoryItem->getContainer()){ Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } containerList.push_back(subContainer); } } //empty slot else if(__queryAdd(i, item, item->getItemCount(), flags) == RET_NOERROR){ index = i; *destItem = NULL; return this; } } //check deeper in the containers for(std::list<Container*>::iterator it = containerList.begin(); it != containerList.end(); ++it){ for(ContainerIterator iit = (*it)->begin(); iit != (*it)->end(); ++iit){ if(Container* subContainer = (*iit)->getContainer()){ if(subContainer == tradeItem){ continue; } Cylinder* tmpCylinder = NULL; int32_t tmpIndex = INDEX_WHEREEVER; Item* tmpDestItem = NULL; tmpCylinder = subContainer->__queryDestination(tmpIndex, item, &tmpDestItem, flags); if(tmpCylinder && tmpCylinder->__queryAdd(tmpIndex, item, item->getItemCount(), flags) == RET_NOERROR){ index = tmpIndex; *destItem = tmpDestItem; return tmpCylinder; } } } } return this; } Thing* destThing = __getThing(index); if(destThing) *destItem = destThing->getItem(); Cylinder* subCylinder = dynamic_cast<Cylinder*>(destThing); if(subCylinder){ index = INDEX_WHEREEVER; *destItem = NULL; return subCylinder; } else return this; } Downloads: Items.otb (8.6): Clique Aqui Items.xml (8.6): Clique aqui Creditos á: darkhaos - Sources Tauku - Sources BlueSilver - Sources Doidin - Data Cykotitan (O do xtibia) - Sources/Data Eu - Data/Sources Outros - Data/Sources Tutorial atualizado: 24/09/2010 Agora Funciona 99,9% perfeito (deve estar faltando um detalhe ou outro) Recomendo fazer tudo o que está mandando para não ocorrer erros1 ponto -
Para fazer seu client você vai precisar: 1º Cliente (Pode ser qualquer Client Wodbo - Tibia - Naruto - Pokemon) 2º MoleBox (Download) Obs: NÂO TEM COMO BLOQUEAR PARA NINGUEM COPIAR SUAS SPRITES! Existem Vários programas que desfazem essa Compilação. Agora vou mostra um exemplo compilando o tíbia 8.6 Tutorial em Imagens! :star: CREDITOS :star: :star2: Jakiin :star2: :star2: ADM Babidy :star2:1 ponto
-
Criando Um Launcher Para Seu Client
TICyber reagiu a Gabrieltxu por um tópico no fórum
Olá Galera , Irei Ensinar como Se Criar uma Launcher para voces que gostam de mexer no client , para nao obrigar ao player ficar baixando direto do site , resolvi ensinar para voces a como criar uma launcher para fazer o auto-update creditos: tonyplyson e Gabrieltxu e tonynamoral Então Vamos Lá Primeiramente , Voces Precisam do Pack Launcher que eu irei Disponibilizar o Download Abaixo download: http://www.4shared.c...nynamoral_.html Quando Voces terminarem de Baixar , Extraiem na Desktop (Area De Trabalho) Após Isso , Vamos Configurar ao Seu Gosto Abra a Pasta *Config* , E Depois Abra o *Config.Ini* Procure Por News Lá Voce encontrará um site , Mude para o Seu Website de Noticias Depois Procure Por Register Lá voce coloca o Link da sua pagina de Registrar Depois Procure por patchs_list Lá voce coloca o link do Arquivo .ini de atualizaçoes (Veremos no Final) , Nao retire o /patchs_list.ini , Do Final do Link Depois Procure Por exec_file Lá voce coloca o nome do Seu Client.exe (Nao Tire o .EXE do Final) Pronto ! O Básico Do CONFIG.INI Está Pronto Edite a Sua SKIN a Gosto... OBS : NAO É NESCESÁRIO MUDAR A LEGUAGES.INI Após Ter Configurado a Pasta CONFIG Toda , Vamos Compilar ela.... Abra CFT (Tonynamoral) , e Procure primeiro o LEGUAGES.INI e Depois CONFIG.INI , Depois de Compactar , Voce Criará um arquivo chamado CONFIG.TPC Coloque esse arquivo dentro da pasta (Seu Client) Agora , Vamos Fazer o Arquivo Patchs_List.ini , para voce por no seu site , para o launcher baixar as atualizaçoes Abra o Bloco de Notas E Dentro Dele Escreva ; Launcher (TonyNamoral) [options] deny_getpatch = 0 deny_play = 1 [patchs] Embaixo de [patchs] , Voce adiciona o Link do download direto do arquivo (PATCH.TPP , VEREMOS NO FINAL) Ele irá ficar +- Assim ; Launcher (TonyNamoral) [options] deny_getpatch = 0 deny_play = 1 [patchs] http://www.xtibia.com/patch.tpp = 1 Agora , irei ensinar como criar o arquivo .TPP (Um Client Compilado em Um Arquivo que a launcher lÊ) Abra a Pasta *Compactador* Dentro dele , voce irá ver o arquivo PCT (TonyNamoral) , Abra-o Clique em Ajouter/ADD , e selecione do seu client o (Tibia.exe , Tibia.spr , Tibia.dat e Tibia.pic) E Depois Aperte em OK , para todos os arquivos. Quando Tiver Todos Dentro do Progama , Click Em Empacter / Pack Pronto , o arquivo TPP Está Criado Só por no seu progama de host site , e pronto !! Divirta-se OBS : Nao Mude a Forma da Foto , Apenas a Foto que está do Pokemon , Voce Poderá colocar a sua , Porque se mexer no formato da foto , voce precisará mecher nas configuraçoes , e eu nao irei ensinar , pq será outro tutorial bem grande Entao Galera , Ajudei ?? REP + Duvidas ?? Nao Fique Com Vergonha !! Solte a Boca :_1 ponto -
E ae rapaziada, beleza? Então eu to tentando abrir esse site no meu XAMPP e sempre que eu vou criar uma conta ele da erro. a Creat account dele vem assim, toda bugada e estranha A mesmo fazendo todo o processo aqui da account para criar, a tela so pisca quando vai tentar logar na conta "criada" ou uma conta que ja existe ele da esse erro alguem consegue me ajudar?0 pontos
