Líderes
-
Koetejiraya
MembroPontos16Total de itens -
Elitondeveloper
MembroPontos8Total de itens -
-
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 06/14/20 em todas áreas
-
Alfa-Baiak mapa completo
Alfa-Baiak mapa completo
cs007 e 2 outros reagiu a Elitondeveloper por uma resposta no tópico
3 pontosVenho disponibilizar para vocês gratuitamente o servidor Alfa-Baiak, que atualmente está online com 250+ players. Algumas imagens em anexo! Totalmente Completo e de graça !! Façam bom proveito para seus projetos !! Informações Várias Quests 4 sistemas de Vip 1 donate hunts para level 620+ Caves exclusivas novos itens! Muita jogabilidade Vocações balancedas Magias Balanceadas Sem Bugs Eventos Battle Field Capiture a Bandeira Defesa das torres Fire Storm Zombie Ataque SnowBall War War Anti-Entrosa Castle 24hrs Castle War Exp e Rates Exp inicial: 700x | (stages) Magic Rate: 10.0x | Skill Rate: 25.0x | Loot Rate: 8.0x Versão online para verificarem ! Site: http://alfa-baiak.com/ Ip: alfa-baiak.com Versão: 8.60 Download: Download COMPLETO+SOURCE Scan: Virus total Créditos: Gabriel Correa3 pontos -
[Novos Atributos] Critical/Dodge/Life e Mana Leech/Life e Mana Absorb
[Novos Atributos] Critical/Dodge/Life e Mana Leech/Life e Mana Absorb
thekilleron reagiu a Mathias Kenfi por uma resposta no tópico
1 pontoEsse sistema foi feito utilizando a source disponibilizada neste link Pode funcionar em TFS 0.4, OTX 2.X e, talvez, em TFS 0.4 só que a probabilidade erros é maior por ter diferentes nomes de funções e variáveis. Fiz um vídeo seguindo o passo a passo abaixo para facilitar o processo de instalação do sistema. Hoje estarei ensinando a instalar os seguintes novos atributos/sistemas em sua source CriticalHitChance e DodgeChance -- (Funciona da mesma maneira que o critical básico de script, porém sem bugs de callstack) Life e Mana Absorb -- (Regenera, de acordo com a % atribuida, a partir de dano recebido) Life e Mana Leech -- (Regenera, de acordo com a % atribuida, a partir do dano causado) Exemplo de como vai ficar Primeiro e antes de tudo, você terá de desativar o critical padrão do Tibia (Você pode pular essa parte se quiser) Vamos lá! Vá em items.cpp e procure por: attackSpeed = 0; Abaixo coloque: criticalHitChance = dodgeChance = lifeAbsorb = manaAbsorb = lifeLeech = manaLeech = 0; Depois, ainda em items.cpp, procure por: else if(tmpStrValue == "extradefense" || tmpStrValue == "extradef") { if(readXMLInteger(itemAttributesNode, "chance", intValue)) it.extraDefenseChance = intValue; if(readXMLInteger(itemAttributesNode, "value", intValue)) it.extraDefense = intValue; if(readXMLInteger(itemAttributesNode, "random_min", intValue)) it.extraDefenseRndMin = intValue; if(readXMLInteger(itemAttributesNode, "random_max", intValue)) it.extraDefenseRndMax = intValue; } Abaixo coloque: else if(tmpStrValue == "criticalhitchance") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.criticalHitChance = intValue; } else if(tmpStrValue == "dodgechance") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.dodgeChance = intValue; } else if(tmpStrValue == "lifeabsorb") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.lifeAbsorb = intValue; } else if(tmpStrValue == "manaabsorb") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.manaAbsorb = intValue; } else if(tmpStrValue == "lifeleech") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.lifeLeech = intValue; } else if(tmpStrValue == "manaleech") { if(readXMLInteger(itemAttributesNode, "value", intValue)) it.manaLeech = intValue; } Agora vá em items.h e procure por: int32_t attack, extraAttack, defense, extraDefense, armor, breakChance, hitChance, maxHitChance, runeLevel, runeMagLevel, lightLevel, lightColor, decayTo, rotateTo, alwaysOnTopOrder; Abaixo coloque: int32_t criticalHitChance, dodgeChance, lifeAbsorb, manaAbsorb, lifeLeech, manaLeech; Agora vá em item.cpp e procure por: case ATTR_ATTACK: { int32_t attack; if(!propStream.getLong((uint32_t&)attack)) return ATTR_READ_ERROR; setAttribute("attack", attack); break; } Acima coloque: case ATTR_CRITICALHITCHANCE: { int32_t criticalHitChance; if(!propStream.getLong((uint32_t&)criticalHitChance)) return ATTR_READ_ERROR; setAttribute("criticalhitchance", criticalHitChance); break; } case ATTR_DODGECHANCE: { int32_t dodgeChance; if(!propStream.getLong((uint32_t&)dodgeChance)) return ATTR_READ_ERROR; setAttribute("dodgechance", dodgeChance); break; } case ATTR_LIFEABSORB: { int32_t lifeAbsorb; if(!propStream.getLong((uint32_t&)lifeAbsorb)) return ATTR_READ_ERROR; setAttribute("lifeabsorb", lifeAbsorb); break; } case ATTR_MANAABSORB: { int32_t manaAbsorb; if(!propStream.getLong((uint32_t&)manaAbsorb)) return ATTR_READ_ERROR; setAttribute("manaabsorb", manaAbsorb); break; } case ATTR_LIFELEECH: { int32_t lifeLeech; if(!propStream.getLong((uint32_t&)lifeLeech)) return ATTR_READ_ERROR; setAttribute("lifeleech", lifeLeech); break; } case ATTR_MANALEECH: { int32_t manaLeech; if(!propStream.getLong((uint32_t&)manaLeech)) return ATTR_READ_ERROR; setAttribute("manaleech", manaLeech); break; } Procure por: if(it.weaponType == WEAPON_DIST && it.ammoType != AMMO_NONE) { begin = false; s << " (Range:" << int32_t(item ? item->getShootRange() : it.shootRange); if(it.attack || it.extraAttack || (item && (item->getAttack() || item->getExtraAttack()))) { s << ", Atk " << std::showpos << int32_t(item ? item->getAttack() : it.attack); if(it.extraAttack || (item && item->getExtraAttack())) s << " " << std::showpos << int32_t(item ? item->getExtraAttack() : it.extraAttack) << std::noshowpos; } if(it.hitChance != -1 || (item && item->getHitChance() != -1)) s << ", Hit% " << std::showpos << (item ? item->getHitChance() : it.hitChance) << std::noshowpos; } else if(it.weaponType != WEAPON_AMMO && it.weaponType != WEAPON_WAND) { if(it.attack || it.extraAttack || (item && (item->getAttack() || item->getExtraAttack()))) { begin = false; s << " (Atk:"; if(it.abilities.elementType != COMBAT_NONE && it.decayTo < 1) { s << std::max((int32_t)0, int32_t((item ? item->getAttack() : it.attack) - it.abilities.elementDamage)); if(it.extraAttack || (item && item->getExtraAttack())) s << " " << std::showpos << int32_t(item ? item->getExtraAttack() : it.extraAttack) << std::noshowpos; s << " physical + " << it.abilities.elementDamage << " " << getCombatName(it.abilities.elementType); } else { s << int32_t(item ? item->getAttack() : it.attack); if(it.extraAttack || (item && item->getExtraAttack())) s << " " << std::showpos << int32_t(item ? item->getExtraAttack() : it.extraAttack) << std::noshowpos; } } if(it.defense || it.extraDefense || (item && (item->getDefense() || item->getExtraDefense()))) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Def:" << int32_t(item ? item->getDefense() : it.defense); if(it.extraDefense || (item && item->getExtraDefense())) s << " " << std::showpos << int32_t(item ? item->getExtraDefense() : it.extraDefense) << std::noshowpos; } } Abaixo coloque: if(it.criticalHitChance || (item && item->getCriticalHitChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos; } if(it.dodgeChance || (item && item->getDodgeChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Dodge Chance:" << std::showpos << int32_t(item ? item->getDodgeChance() : it.dodgeChance) << "%"<< std::noshowpos; } if(it.lifeAbsorb || (item && item->getLifeAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Absorb:" << std::showpos << int32_t(item ? item->getLifeAbsorb() : it.lifeAbsorb) << "%"<< std::noshowpos; } if(it.manaAbsorb || (item && item->getManaAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Absorb:" << std::showpos << int32_t(item ? item->getManaAbsorb() : it.manaAbsorb) << "%"<< std::noshowpos; } if(it.lifeLeech || (item && item->getLifeLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Leech:" << std::showpos << int32_t(item ? item->getLifeLeech() : it.lifeLeech) << "%"<< std::noshowpos; } if(it.manaLeech || (item && item->getManaLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Leech:" << std::showpos << int32_t(item ? item->getManaLeech() : it.manaLeech) << "%"<< std::noshowpos; } Procure por: int32_t tmp = it.armor; if(item) tmp = item->getArmor(); bool begin = true; if(tmp) { s << " (Arm:" << tmp; begin = false; } Abaixo coloque: if(it.criticalHitChance || (item && item->getCriticalHitChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Crit Chance:" << std::showpos << int32_t(item ? item->getCriticalHitChance() : it.criticalHitChance) << "%"<< std::noshowpos; } if(it.dodgeChance || (item && item->getDodgeChance())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Dodge Chance:" << std::showpos << int32_t(item ? item->getDodgeChance() : it.dodgeChance) << "%"<< std::noshowpos; } if(it.lifeAbsorb || (item && item->getLifeAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Absorb:" << std::showpos << int32_t(item ? item->getLifeAbsorb() : it.lifeAbsorb) << "%"<< std::noshowpos; } if(it.manaAbsorb || (item && item->getManaAbsorb())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Absorb:" << std::showpos << int32_t(item ? item->getManaAbsorb() : it.manaAbsorb) << "%"<< std::noshowpos; } if(it.lifeLeech || (item && item->getLifeLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Life Leech:" << std::showpos << int32_t(item ? item->getLifeLeech() : it.lifeLeech) << "%"<< std::noshowpos; } if(it.manaLeech || (item && item->getManaLeech())) { if(begin) { begin = false; s << " ("; } else s << ", "; s << "Mana Leech:" << std::showpos << int32_t(item ? item->getManaLeech() : it.manaLeech) << "%"<< std::noshowpos; } Agora vá em item.h e procure por: ATTR_DUALWIELD = 43, Abaixo coloque: ATTR_CRITICALHITCHANCE = 44, ATTR_DODGECHANCE = 45, ATTR_LIFEABSORB = 46, ATTR_MANAABSORB = 47, ATTR_LIFELEECH = 48, ATTR_MANALEECH = 49, Procure por: int32_t getExtraDefense() const; Abaixo coloque: int32_t getCriticalHitChance() const; int32_t getDodgeChance() const; int32_t getLifeAbsorb() const; int32_t getManaAbsorb() const; int32_t getLifeLeech() const; int32_t getManaLeech() const; Procure por: inline int32_t Item::getExtraDefense() const { bool ok; int32_t v = getIntegerAttribute("extradefense", ok); if(ok) return v; return items[id].extraDefense; } Abaixo coloque: inline int32_t Item::getCriticalHitChance() const { bool ok; int32_t v = getIntegerAttribute("criticalhitchance", ok); if(ok) return v; return items[id].criticalHitChance; } inline int32_t Item::getDodgeChance() const { bool ok; int32_t v = getIntegerAttribute("dodgechance", ok); if(ok) return v; return items[id].dodgeChance; } inline int32_t Item::getLifeAbsorb() const { bool ok; int32_t v = getIntegerAttribute("lifeabsorb", ok); if(ok) return v; return items[id].lifeAbsorb; } inline int32_t Item::getManaAbsorb() const { bool ok; int32_t v = getIntegerAttribute("manaabsorb", ok); if(ok) return v; return items[id].manaAbsorb; } inline int32_t Item::getLifeLeech() const { bool ok; int32_t v = getIntegerAttribute("lifeleech", ok); if(ok) return v; return items[id].lifeLeech; } inline int32_t Item::getManaLeech() const { bool ok; int32_t v = getIntegerAttribute("manaleech", ok); if(ok) return v; return items[id].manaLeech; } Agora vá em player.cpp e procure por: int32_t Player::getArmor() const { int32_t i = SLOT_FIRST, armor = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) armor += item->getArmor(); } if(vocation->getMultiplier(MULTIPLIER_ARMOR) != 1.0) return int32_t(armor * vocation->getMultiplier(MULTIPLIER_ARMOR)); return armor; } Abaixo coloque: int32_t Player::getCriticalHitChance() const { int32_t i = SLOT_FIRST, crit = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) crit += item->getCriticalHitChance(); } return crit; } int32_t Player::getDodgeChance() const { int32_t i = SLOT_FIRST, dodge = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) dodge += item->getDodgeChance(); } return dodge; } int32_t Player::getLifeAbsorb() const { int32_t i = SLOT_FIRST, life = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) life += item->getLifeAbsorb(); } return life; } int32_t Player::getManaAbsorb() const { int32_t i = SLOT_FIRST, mana = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) mana += item->getManaAbsorb(); } return mana; } int32_t Player::getLifeLeech() const { int32_t i = SLOT_FIRST, life = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) life += item->getLifeLeech(); } return life; } int32_t Player::getManaLeech() const { int32_t i = SLOT_FIRST, mana = 0; for(; i < SLOT_LAST; ++i) { if(Item* item = getInventoryItem((slots_t)i)) mana += item->getManaLeech(); } return mana; } Agora vá em player.h e procure por: virtual int32_t getDefense() const; Abaixo coloque: virtual int32_t getCriticalHitChance() const; virtual int32_t getDodgeChance() const; virtual int32_t getLifeAbsorb() const; virtual int32_t getManaAbsorb() const; virtual int32_t getLifeLeech() const; virtual int32_t getManaLeech() const; Agora vá em luascript.cpp e procure por: //getCreatureHealth(cid) lua_register(m_luaState, "getCreatureHealth", LuaInterface::luaGetCreatureHealth); Abaixo coloque: //getPlayerCriticalHitChance(cid) lua_register(m_luaState, "getPlayerCriticalHitChance", LuaInterface::luaGetPlayerCriticalHitChance); //getPlayerDodgeChance(cid) lua_register(m_luaState, "getPlayerDodgeChance", LuaInterface::luaGetPlayerDodgeChance); //getPlayerLifeAbsorb(cid) lua_register(m_luaState, "getPlayerLifeAbsorb", LuaInterface::luaGetPlayerLifeAbsorb); //getPlayerManaAbsorb(cid) lua_register(m_luaState, "getPlayerManaAbsorb", LuaInterface::luaGetPlayerManaAbsorb); //getPlayerLifeLeech(cid) lua_register(m_luaState, "getPlayerLifeLeech", LuaInterface::luaGetPlayerLifeLeech); //getPlayerManaLeech(cid) lua_register(m_luaState, "getPlayerManaLeech", LuaInterface::luaGetPlayerManaLeech); Procure por: int32_t LuaInterface::luaGetCreatureMaxHealth(lua_State* L) { //getCreatureMaxHealth(cid[, ignoreModifiers = false]) bool ignoreModifiers = false; if(lua_gettop(L) > 1) ignoreModifiers = popBoolean(L); ScriptEnviroment* env = getEnv(); if(Creature* creature = env->getCreatureByUID(popNumber(L))) lua_pushnumber(L, creature->getPlayer() && ignoreModifiers ? creature->healthMax : creature->getMaxHealth()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Abaixo coloque: int32_t LuaInterface::luaGetPlayerCriticalHitChance(lua_State* L) { //getPlayerCriticalHitChance(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getCriticalHitChance()); else { errorEx(getError(LUA_ERROR_PLAYER_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerDodgeChance(lua_State* L) { //getPlayerDodgeChance(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getDodgeChance()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerLifeAbsorb(lua_State* L) { //getPlayerLifeAbsorb(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getLifeAbsorb()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerManaAbsorb(lua_State* L) { //getPlayerManaAbsorb(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getManaAbsorb()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerLifeLeech(lua_State* L) { //getPlayerLifeLeech(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getLifeLeech()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } int32_t LuaInterface::luaGetPlayerManaLeech(lua_State* L) { //getPlayerManaLeech(cid) ScriptEnviroment* env = getEnv(); if(Player* player = env->getPlayerByUID(popNumber(L))) lua_pushnumber(L, player->getManaLeech()); else { errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND)); lua_pushboolean(L, false); } return 1; } Agora vá em luascript.h e procure por: static int32_t luaGetPlayerSpentMana(lua_State* L); Abaixo coloque: static int32_t luaGetPlayerCriticalHitChance(lua_State* L); static int32_t luaGetPlayerDodgeChance(lua_State* L); static int32_t luaGetPlayerLifeAbsorb(lua_State* L); static int32_t luaGetPlayerManaAbsorb(lua_State* L); static int32_t luaGetPlayerLifeLeech(lua_State* L); static int32_t luaGetPlayerManaLeech(lua_State* L); As funções Lua adicionadas foram getPlayerCriticalHitChance(cid) getPlayerDodgeChance(cid) getPlayerLifeAbsorb(cid) getPlayerManaAbsorb(cid) getPlayerLifeLeech(cid) getPlayerManaLeech(cid) Agora a parte do game.cpp. (Esta é uma parte opcional, você pode optar por não adicioná-la) Créditos: ~Mathias Kenfi1 ponto -
OtClient V8 - Sources
OtClient V8 - Sources
Bruno111111111111111 reagiu a Cat por uma resposta no tópico
1 pontoOTClient V8 OTClientV8 é um mecanismo de jogo 2D altamente otimizado, baseado em blocos, construído com c ++, lua, physfs, OpenGL ES 2.0 e OpenAL. Funciona hem, mesmo em computadores com 12 anos de uso. Funciona em Windows (min. Windows 7), Linux e Android (min. 5.0). V8 NOVIDADES • Renderização reescrita e otimizada (60 fps em um computador de 11 anos) • Melhor suporte ao DirectX9 e DirectX11. • Renderização adaptável (otimizações gráficas automatizadas) • Renderização de luz reescrita e otimizada • "Path finding" e "auto walking" reescritos. • "Walking system" reescrito com animações. • HTTP/HTTPS lua API com suporte à JSON. • API WebSocket lua. • Auto updater com modo de recuperação. • Novo sistema de arquivos • Criptografia e compactação de arquivos • Sistema de diagnóstico automático • Interface atualizada • Novo manipulador de "crash" e "error". • Novo protocolo de login HTTP • Loja no jogo (mesma do tibia). • Gerenciador de "hotkeys" atualizado. • "Battle list" otimizada e atualizada. • "Crosshair" (mira), "floor fading", barras de hp/mp extras e painéis. • Muitas outras opções de clients. • Removido muitas coisas inúteis e desatualizadas • Bot Avançado • Versão Linux. • Suporte completo para tibia 11.00 • Layouts Download Oficial: Link Download Tk: otclientv8-master.rar Contribua no Github: https://github.com/OTCv8/otclientv8/issues IMAGENS: Créditos: Edubart1 ponto -
Problema ao criar site
Problema ao criar site
luizjoy reagiu a Koetejiraya por uma resposta no tópico
1 pontoO script tem que ser colocado dentro de código e spoiler para poder ver melhor. Porque o próprio site do tibia king as vezes remove alguns sinais como >;,.}{][)(< então fica impossivel trabalhar com o script assim. Coloca pra mim fazendo um favor, porque no final ficou bagunçado cortando partes do seu script.1 ponto -
Alfa-Baiak mapa completo
Alfa-Baiak mapa completo
DiigooMix reagiu a Elitondeveloper por uma resposta no tópico
1 pontoQualquer gesior aqui do fórum, indico o do Natanael bem feito e com proteção anti sql injection, etc. Cast system na source1 ponto -
Problema ao criar site
Problema ao criar site
luizjoy reagiu a Koetejiraya por uma resposta no tópico
1 pontoOk, nós vamos resolver seu problema. Poste o seu arquivo lastnews.php, fazendo um favor.1 ponto -
(Resolvido)Erro item editor
(Resolvido)Erro item editor
Kill of sumoners reagiu a Koetejiraya por uma resposta no tópico
1 pontoEsse iten editor não suporta tibia.dat e tibia.spr extendido, tem qeu usar aqueles basicão mesmo. Faz um seguinte, baixa o tibia na versão do seu server, pega o dat e o spr joga na pasta e então abre o programa. Se o programa abrir você deixa o tibia.spr onde está e atualize apenas o tibia.dat pelo seu que funciona certinho.1 ponto -
Problema ao criar site
1 pontoOlá, bom dia tudo bem? Antes de mais nada, deixe-me perguntar, qual versão do xampp/php você está usando ?1 ponto
-
(Resolvido)SETAR STORAGE PHPMYADMIN
(Resolvido)SETAR STORAGE PHPMYADMIN
Freitas Epilef reagiu a Koetejiraya por uma resposta no tópico
1 pontoserá setado no player declarado no script, você tem que declarar ele antes, seja sendo puxado pelo nome ou pelo id. exemplo de declaração. $playerteste = new Player(); $playerteste->setStorage(5000,1);1 ponto -
Problema ao criar site
Problema ao criar site
luizjoy reagiu a Koetejiraya por uma resposta no tópico
1 pontoPoste a Linha 11 do seu arquivo latestnews.php Fazendo um favor.1 ponto -
Lista de personagens carregando, Linux!
Hmm, interessante, vou dar uma olhada de novo, se tiver alguma dúvida posso te chamar aqui pelo TK? My bad! Obrigado pelo aviso, grato! ?1 ponto
-
(Resolvido)[RME] É possível editar/mudar item de menu no RME?
Achei, deu certo. Caso alguém esteja vendo esse topico e com a mesma dúvida que eu, segue o link do tutorial. Credito todo do @Nolis Tutorial perfeito.1 ponto
-
(Resolvido)[RME] É possível editar/mudar item de menu no RME?
@DiigooMix sim mas precisa ser editado manualmente entre no perfil do @Nolis ele tem diversos tutoriais de como editar e deixar as paletas do seus rme da maneira que desejar1 ponto
-
Criação de servidor 8.6 totalmente alternativo
Criação de servidor 8.6 totalmente alternativo
DATA Vinny reagiu a Reds por uma resposta no tópico
1 ponto1 - Alguém sabe um server mais puro possível? para fazer a limpeza? - Como você está pensando em 8.6, pega um tfs 0.4 rev 3884. Não tem muitos scripts e é só você ir removendo. 2 - como adiciono o cliente OTC no server 8.6 - Basta criar uma pasta "860" dentro do diretório things do otclient e acessar. 3 - a adição de itens e sprites é feita pelo objectitem? - Vai precisar de um editor de tibia.dat e tibia.spr. Eu sugiro o ObjectBuilder. Da um google que você acha com scan e etc.., mas pode ficar tranquilo que não tem vírus. 4 - Tenho que fazer todas as edições e depois compilar o server (criar o tfs)? - A princípio o tfs já vem compilado para você. Só precisa compilar caso você queira fazer alguma edição que não seja possível fazer com as funções que o TFS proporciona. 5 - como adiciono tais coisas editadas no meu client (que eu quero q seja o OTC) - Eu acho bem chatinho de fazer e não tenho muito conhecimento. Confesso que encontrar conteúdo disso é meio chato, mas você pode ir estudando as estruturas dos componentes que já existem no OTC original e criar os seus a partir deles. 6 - Essa é uma boa versão para este tipo de coisa? se não qual recomendariam? - O tfs 0.4 rev 3884 é um dos mais completos que tem. Hoje em dia estou usando o TFS 1.2 e digo que sinto falta de algumas funções que tinham na versão antiga.1 ponto -
GesiorACC 2019 8.60 UPDATE 29/06/2019
Use este latestnews, é o mesmo porem ja sem o bug, se continuar é alguma informação com a sua database que nao esta batendo latestnews.php1 ponto
-
Como fazer buff que troca effecto do um Spells?
Como fazer buff que troca effecto do um Spells?
DATA Vinny reagiu a LeoTK por uma resposta no tópico
1 ponto@Fabian Marzan depende de alguns fatores mas pode ser por verificações de storage por tempo na spell e mudar a storage ou aumentar o valor de uma mesma storage no buff sendo assim Buff: a cada momento que troca o efeito/outfit ele aumenta o valor da storage para +1 ou troca para um outro valor de storage Spell: verificação de storage a cada storage diferente ele manda um efeito diferente ao usar a spell1 ponto -
Erro com function IF
1 ponto@gnomoffc function onCastSpell(cid, var) if getPlayerMaxMana(cid) == getPlayerMana(cid) then doPlayerSendCancel(cid, "Sua mana está cheia.") doSendMagicEffect(getThingPos(cid), CONST_ME_POFF) return false else doPlayerAddMana(cid, 1) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return true end end O erro estava nessa linha: if getPlayerMaxMana(cid) = getPlayerMana(cid) then Para comparar se dois valores são iguais, o correto a se usar é o "==". O correto seria: if getPlayerMaxMana(cid) == getPlayerMana(cid) then1 ponto
-
Spells- Troca do Outfit e Effects
Spells- Troca do Outfit e Effects
DATA Vinny reagiu a Stigal por uma resposta no tópico
1 pontoBoa noite @Fabian Marzan , tudo bom? Segue o exemplo para estudo e utilização:1 ponto -
Modificando Extensions I - Grounds (Terrain Palette)
Extensions Customizadas II - Walls Extensions Customizadas I - Grounds Extensions Customizadas III - Doodads (objetos montados) Sumário A. Escolha do item e arquivos que serão alterados. B. Edição do arquivo grounds.xml e adição da base para um novo brush. C. Explicação sobre o que modificar nas linhas adicionadas. D. Edição do arquivo borders.xml e adição da base para as bordas do brush anterior. E. Configuração dos Ids das bordas e do brush. F. Cadastramento do brush na paleta terrain, editando o arquivo tilesets.xml COMEÇAR (Dica: Utilize Notepad++) A. Tudo que está em azul nas imagens acima é onde você vai clicar e/ou editar. Recomendo backup. Cuidado para não modificar qualquer linha por acidente ou sem saber o que está fazendo, uma letra errada já é o suficiente pra dar erro na hora de abrir o mapa. Escolha o piso que você quer adicionar. Vou escolher o dark spikes para usar como exemplo, ok? (na imagem, ele já está pronto e adicionado na paleta) B. Abra grounds.xml. Repare que o documento começa com <materials> e termina com </materials> Desça até o final do código. Antes do </materials> há algum item cadastrado, um </brush> Alguma coisa ... </brush>. Após o último brush, e antes do </materials>, cole o seguinte código: <brush name="ITEMNOME" type="ground" server_lookid="ITEMID - ID PRA APARECER NA PALETA" z-order="NUMERO"> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <item id="ID" chance="100"/> <border align="outer" id="NUMEROBORDA"/> </brush> C. Server_lookid é pra por o ID da sprite que vai aparecer na paleta, pra identificar o atalho. Coloque o ID do ground principal caso tenha mais versões do mesmo. Em Z-order, se o brush X tiver z-order maior que brush Y, a borda de brush X vai sobrepor a do Y. Item Id e chances, adicione os grounds e mude o valor da chance para definir qual deles vai predominar caso houver vários, como por exemplo o grass, que tem diversas sprites diferentes. Se for apenas uma sprite, pode deixar uma linha. Border align, tem outer e inner. São para as duas finalidades apresentadas nas imagens abaixo. (No inner dessa imagem, fora utilizado <border align="inner" to="none" id="1"/>, que é padrão para vários brushs) O codigo do Dark Spikes ficará assim: <brush name="dark spikes" type="ground" server_lookid="12234" z-order="3200"> <item id="12234" chance="2500"/> <item id="12235" chance="2500"/> <item id="12236" chance="2500"/> <item id="12237" chance="2500"/> <border align="outer" id="155"/> </brush> D. Revise o que você modificou e salve. Abra borders.xml. O esquema é o mesmo, desça até o final e depois de </border> e antes de </materials>, adicione o código abaixo: <border id="NUMEROBORDA"> -- NOME -- <borderitem edge="n" item="ID"/> <borderitem edge="e" item="ID"/> <borderitem edge="s" item="ID"/> <borderitem edge="w" item="ID"/> <borderitem edge="cnw" item="ID"/> <borderitem edge="cne" item="ID"/> <borderitem edge="csw" item="ID"/> <borderitem edge="cse" item="ID"/> <borderitem edge="dnw" item="ID"/> <borderitem edge="dne" item="ID"/> <borderitem edge="dsw" item="ID"/> <borderitem edge="dse" item="ID"/> </border> E. O número que estiver em border id vai servir para ligar essass bordas ao brush criado anteriormente. Identifique o nome do brush a qual essa borda pertence para ficar fácil encontrar mais tarde ( -- exemplo -- ) Siga a tabela abaixo para configurar as bordas, conforme a posição delas: O código das bordas do dark spikes ficará assim: <border id="155"> -- dark spikes border -- <borderitem edge="n" item="12255"/> <borderitem edge="e" item="12256"/> <borderitem edge="s" item="12254"/> <borderitem edge="w" item="12257"/> <borderitem edge="cnw" item="12264"/> <borderitem edge="cne" item="12265"/> <borderitem edge="csw" item="12263"/> <borderitem edge="cse" item="12262"/> <borderitem edge="dnw" item="12260"/> <borderitem edge="dne" item="12261"/> <borderitem edge="dsw" item="12259"/> <borderitem edge="dse" item="12258"/> </border> F. Agora que o ground foi criado e as bordas configuradas, é preciso adicionar o atalho na paleta, para poder usá-lo. Abra tilesets.xml. Dê um ctrl + f e procure por: <tileset name="Nature"> em terrain. Ou no local que você preferir. Também pode colocar na ordem que quiser, reinicie o editor e teste. Dúvidas? Comente.1 ponto
-
[PokeTibia] Recomendação para servidor sério
[PokeTibia] Recomendação para servidor sério
DATA Vinny reagiu a Mono Singed por uma resposta no tópico
1 pontoVou dar uma breve explicação (se quiser mais detalhes pode vir pm): Antigamente, existiram dois grandes servidores de poketibia: SVKE e PAdventures. Não vou entrar muito em detalhes sobre eles porque tem controvérsias, mas resumindo: a comunidade participou e participa ativamente nas "ideias inovadoras" desses servidores de poketibias considerados grandes (as conversas com npc pelo botão direito, que foi popularizada pela pxg, por exemplo, pode ser encontrada disponível na otland). O que se tem na comunidade hoje em dia é: PDA: sem source, só tem a distro compilada (ou seja, bugs não poderão ser resolvidos), é a mais avançada em relação a sistemas, mas grande parte deles tem bugs ou foram implementados com gambiarras em lua que quase ninguém entende (nem tente entender elas, tu só vai ter dor de cabeça) Pokémon Dash: tem a source (pode resolver os bugs), muiiitas gambiarras em lua e sistemas defasados ou falta deles (tu consegue consertar tudo) Pokémon Flash: porra, isso é antigo demais SAHUSAHUSUHA, só ignora. Pra ti ter noção, algumas distros do pokémon flash nem moves (m1, m2 etc) tem. Tendo informação disso tudo, tu chega na seguinte conclusão: pra ti partir de qualquer base disponível na comunidade tu vai precisar estudar as gambiarras e sistemas dela na unha, já que grande parte da documentação foi perdida (por estar no xtibia ou pelos links terem ficado off). Outro comentário cabível é que: essas bases foram baseadas na versão 0.3.6 do theforgottenserver. Essa versão foi lançada em 2010. O código fonte em geral não usa açúcar sintático, é bagunçado, usa convenções antigas etc, além de ter vários bugs conhecidos (por ser antiga). Na minha singela opinião, se tu tiver conhecimento e quiser algo sério e que tu compreenda totalmente o funcionamento, faça o seguinte: vá no github do theforgottenserver, baixe a última versão (1.3), estude ela (tem a otland e a wiki no próprio github pra isso) e altere as sources para adaptar a um poketibia.1 ponto