
thekilleron
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
thekilleron deu reputação a Johncore em Cidade Arcadia 11.0Arcadia é uma cidade custom bem bonita que pode ser encontrada no servidor AureraGlobal,
Por ter esse conteudo aqui em primeira mão, resolvi disponibilizar para a comunidade.
Creditos:
Aurera Team
Johncorex
Arcadia-spawn.xml Arcadia-house.xml Arcadia.otbm
-
thekilleron deu reputação a King Laker em [OTX 2.x / 8.60] - OTSERVEROque seria exatamente esse mw replace system? Oque ele faz? Da uma certa noção pelo nome, mas nada muito detalhado..
@FeeTads estou enfrentando esse erro quando tento compilar.
-
thekilleron deu reputação a FeeTads em [OTX 2.x / 8.60] - OTSERVEROpa rapaziadaa beleza?
Hoje estou disponibilizando uma source OTX 2, baseada na otx 2.x do mattyx - aqui, essa source que estou disponibilizando é um pouco diferente, com algumas features a mais do que a OTX padrão, como muitos sabem, a OTX serve apenas para abrir o seu OT, essa estou disponibilizando com algumas features, onde disponibilizei até scripts do TK, ou usando scripts do TK, tais como o autoloot na source do Naze, o projeto é pra Otserv 8.60.
Está sendo desenvolvido no github (projeto github) onde posto atualizações diárias do datapack e source. Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou no próprio github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações.
Edit: MatheusJP2 Adicionado como contribuidor, ajudando a estender pra source custom
LINK: https://github.com/FeTads/otxserver/tree/custom
Essa Tree será pra implementar sistemas pra custom tibia / derivados, como sistema de aura, shaders, etc.. voltado para a modificação para OTC.
Edit
systems Added:
Max Absorb All: (protect SSA + Might Ring, você coloca o máximo de protect all que pode ser atingido, caso o player passe disso é ignorado, o maximo de protect vai ser o que está no config.lua)
Commit max absorb all edit: fixed all system
Delete Players With Monster Name: Deleta o player com nome de monstro, ou com nome proibido (alteravel pelo config.lua), caso vc deixe "deletePlayersWithMonsterName = false", irá apenas renomear o player aleatóriamente sem deleta-lo, ele não conseguirá logar com nome de monstro ou nome proibido.
ps: Esse script pega o monster.xml todo, então mesmo que você adicione novos monstros, não precisar mexer em nada, ele ja vai pegar o novo monstro, mesmo sem precisar derrubar o Ot etc..
deletePlayersWithMonsterName = true forbiddenNames = "gm;adm;cm;support;god;tutor;god ; god; adm;adm ; gm;gm ; cm;cm ;" --// other names here
edit: 30/10
modifyDamageInK = true (essa função ativada irá modificar a saida do dano pra K, por exemplo 219000 > 219.0K / 2.000.000 > 2.00 KK).
modifyExperienceInK = true (esas função também mudará a saida normal pra K, isso é bom em high EXP pra arrumar aquela exp "-2147483647", de muita EXP, irá mudar pra "+2.14 Bi Exp").
17/01 Last Changes:
displayBroadcastLog = true - Desabilita os logs de broadcast do server na distro, aqueles logs de eventos etc... deixa a distro mais limpa. (by kizuno18)
enableCriticalAndDodgeSource = true - (Sistema de Dodge E Critical de StatsChange pra source, deixa mais clean, mais leve, e o sistema pega em monstros, sem a necessidade de registrar o evento, previne bugs.)
pushInProtectZone = false - Sistema para desabilitar o push de player em PZ, impossibilitando que players empurrem outros players dentro do PZ.
SpyCast: Sistema de SPY, pra GM+ ver a tela dos jogadores, como se eles estivessem de cast aberto, GM spy não mostra aviso nenhum que vc está monitorando o player, (sistema de telescope, se o player clicar no item com actionId configurado, mostra os players com cast on), Para GM+ mostra todos os players logados, independente se estão de cast on, para players mostra somente players com cast on.
SendProgressbar: Sistema para feature do OTC, necessário saber usar e compilar o otcv8 com a modificação
SetCreatureSpeed: Sistema usado pra setar a quantidade exata de speed de alguma criatura/player, usado no sistema de roleta (ainda não disponivel do datapack).
(Projeto github)
Informações:
º 8.60
º Baseado na OTX 2.x mattyx
º Lib global (sistema pesadex)
º Informações / changelog
Dúvidas, erros, dicas e contribuições:
Caso tenha dúvidas, ou queira resolver algum bug/erro, dar dicas para o projeto, ou também ajudar em sua construção, crie um issue / pull requests pelo github ou use esse tópico.
Créditos:
FeTads (FeeTads#0246) mattyx (source base e datapack) Reason182 (fixes e mais) Luxx (meu sócio de servidor, ajudou com teste) Daniel (spriter e dev junior) ADM Mario (cara brabo dos mapas e testes, achador de bug profissional) Luan Luciano (cara brabo que no inicio me ajudou d++) MatheusJP2 (Editor e contribuidor com implementações pra Tree custom source)
Download:
O download pode ser feito diretamente no github, ou clonando o projeto via git.
How Compile:
Windows Tutorial - Linux(Ubuntu) Tutorial
Sistemas adicionado até o momento, todos 100% e sem bug.
-
thekilleron deu reputação a Glacial em Map Old City [8.60] ~~ v2.0Boa noite galera!
Meu nome é Gustavo/Glacial, gostaria de compartilhar meu mapa projeto Old City (8.60)
Espero que curtam e podem baixar pra colocar no ot de vocês!
Atualização Old City (8.60) versão 1.0:
- Depot + Templo + Lojas (NPCs a gosto) + Teleports (para customizar) tudo em uma mesma casa central.
- Houses em volta da cidade.
- 4 saídas N, S, L e Oeste.
- Cidade estilizada com bancos, postes de luz, e bancos.
Atualização Old City (8.60) versão 2.0:
- 4 Novos Mapas de Hunt/Quest ao Norte (Montanhas) Sul (Jungle) Leste (Vulcão) e Oeste (Gelo) da Old City.
>>> Download Mapas: https://www.mediafire.com/folder/hz0q694t9nk86/Mapas_Glacial <<<
Scan VirusTotal:
Old City (8.60) versão 1.0 Virus Total: https://www.virustotal.com/gui/file/5c2988531c71e1ae7f363b1102c865cb9debe2fd7e5f1b09b7cd09d40c2bf517?nocache=1
Old City (8.60) versão 2.0 Virus Total: https://www.virustotal.com/gui/file/a2caef91a130d0df62ae4e88fa0719c331a6bb1fbad66a72c08fc3cd362bf430?nocache=1
- Mapas Anteriores:
Glacial City (10.98) versão 1.0 Virus Total: https://www.virustotal.com/gui/file/b4e94903752e24aba63b291f9929f15f6bd7f4feb44d5a1f42ec3d755ee7977e?nocache=1
Glacial City (10.98) versão 2.0 Virus Total: https://www.virustotal.com/gui/file/d88ae087e966bed6e2f2348f31246c1858831c1fb13d4e8613ba98f6ede37503?nocache=1
-
thekilleron recebeu reputação de zGiovani em MyAac Itens e Outfits 12.85/12.86 + Client 12.86 Atualizado + TUTORIAL DE INSTALAÇÃO COMPLETO!muito bom parabéns
-
thekilleron deu reputação a Mathias Kenfi em [Novos Atributos] Critical/Dodge/Life e Mana Leech/Life e Mana AbsorbEsse 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 Kenfi
-
thekilleron deu reputação a Belmont em Configurando VPSTodos os Download está na ultima linha desse post!
Bom vamos lá, primeiramente você deve instalar o xampp na sua VPS Windows, e depois está colocando uma senha no mesmo para proteger sua Database. Se você não sabe instalar, vou está instalando junto com você, segue as imagens abaixo:
Instalando o Xampp
Protegendo o Xampp
Importando a Database
Abrindo as Portas
Fazendo todos os passos acima, vá no config.lua do seu do servidor e altere as seguintes linhas:
ip = "127.0.0.1" Aqui você troca para o Ip da sua VPS Windows sqlType = "sqlite" Aqui você troca para mysql sqlHost = "127.0.0.1" sqlPort = 3306 sqlUser = "root" sqlPass = "" Aqui você coloca a senha do Root sqlDatabase = "" Aqui você coloca o nome da sua Database Não se esqueça de apagar a pasta Webdav da pasta do Xampp!
Esse tutorial eu fiz do meu próprio computador, mas os passos são os mesmo para serem executados na VPS Windows, só é fazer tudo como está ai que vai da certo. Pronto, você acabou de configurar sua VPS Windows, agora é só ligar seu servidor e se divertir junto com seus Players!!
Xampp
Donwload
Site Download - Scan
Db
database.sql - Scan
OBS: Link do site, e do scan, foram retirados do mesmo post que continham os mesmos!
Créditos:
@Belmont
@KOLISAO
@WooX
-
thekilleron deu reputação a Under em [TibiaKing] TFS 1.5 Downgrade 8.60Este é o projeto TFS Downgrade (Nekiro), uma versão modificada do TFS Downgrade (Nekiro) baseado no TFS 1.5. Você pode ver o histórico do repositório releases.
Este projeto foi criado com o intuito de ser uma base o mais limpa possível, para funcionar como um mecanismo de MMORPG não necessariamente ligado ao Tibia Global, embora também funcione. O Tibia King - Downgrade foi adaptado para funcionar com o código TFS, sendo o primeiro repositório a utilizar esse mecanismo.
Para se conectar ao servidor e ter uma experiência estável, você pode usar o otclient do mehah ou o cliente do Tibia. E se quiser fazer alguma edição, confira nossas ferramentas personalizadas.
Se você quiser editar o mapa, use o próprio Remere's Map Editor.
Esteja ciente do nosso código de conduta, disponível neste link.
Problemas
Usamos o rastreador de problemas no GitHub. Tenha em mente que todos que estão observando o repositório recebem notificações por e-mail quando há atividade, então seja cuidadoso e evite escrever comentários que não sejam destinados a um problema (por exemplo, "+1"). Se você gostaria que um problema fosse resolvido mais rapidamente, você deve corrigi-lo você mesmo e enviar uma solicitação de pull request ou oferecer uma recompensa para o problema.
Recursos
Pvp System (Open, Retro, Enforced) Old Classic Slot System Old Classic Vocation System Old Classic Attack Speed Protocol 8.60 Referências
Compilação VCPKG Outas Versões:
7.72
8.0
Download
-
thekilleron deu reputação a Nolangg em Baiak Hyper [8.60][TFS 0.3] ~ King-Baiak (atualizado 20/03/23)Olá Tibianos.
Hoje após um looooongo tempo sem tempo e animo pra mexer em server etc etc.
Venho trazer a vós um servidor do @Igorzerah que foi vendido à mim, e foi feito inúmeras modificações também.
Sem mais enrolação...
O que você irá encontrar no servidor?
Sistema de Montaria (desativado) pelo comando "!mount" (dá pra comprar no site)
Sistema de Daily Monster (toda vez que abre a distro um monstro é selecionado *também configurável)
Sistema de Castle48/24HRS (exatamente as 21:00H o castle 48h abre todos os dias, já o castle 24h é sempre aberto a invasões e tem monstros específicos lá)
Sistema de Cast Arrows / Spy System (spy é um cast para admins que mesmo sem estar ativado ele consegue ver *usado para monitorar players)
Sistema de EXP FOOD / EGGS (dá pra usar simultâneos ovos de EXP, assim aumentando *ex: 100% + 200% + 300% etc etc)
Sistema de Anti Divulgação (Anti divulgação modificado, intruso parece que está divulgando mas não está, tipo um fakechat...)
Sistema de Roleta (uma roleta que pode dar itens temporarios *itens hyper)
Sistema de Mineração (sistema básico que dá pepitas de ouro *usado no lugar do money para comprar coisas)
Várias Cidades (Baiak City, Nether, Oramond e Roshamuul)
Boss Gaz'Haragoth e Boss CLAPTOMANIACO (um por boss token e outro por horário)
Fast Respawn (quanto mais jogadores online mais rápido é o spawn)
esse é o resumo do servidor, eu trabalhei mudando a maioria das coisas e tirando vários bugs, mas, o @nettonnwk vendeu o servidor e me desanimou
agora eu estou disponibilizando, já que também teve trabalho meu aqui ?
um monte de bug foi resolvido, mas ainda pode ter mais (falta de foco por minha parte dhasudhsa)
*algumas imagens do servidor:
Link Download Baiak Hyper
https://www.mediafire.com/file/p9hdkethf6hjrbr/baiakhyper.zip/file
Link Scan Servidor Baiak Hyper
https://www.virustotal.com/gui/file/2993b94b808c8c5a98eca8139bd4ab4745ea482e603b847e02464e16458382b5?nocache=1
Client 8.60 Extendido Hyper
https://www.mediafire.com/file/l7mkxe4zmb2nlzv/Starlix+8.60.zip/file
Link Scan Client 8.60
https://www.virustotal.com/gui/file/11a9444677731e0f2620ce75a159b84aad21ceed472ca68f0da10ee41b8283be
Client 8.60 Mobile Hyper
https://www.mediafire.com/file/3vvqy78h5b5ccpr/starlix-mobile.apk/file
Link Scan Mobile 8.60
https://www.virustotal.com/gui/file/3ec7b021990501eacf208452296025b7b3e02a5c1c8a27e012dc77b06132c6c1?nocache=1
Otclient v8 Hyper
https://www.mediafire.com/file/ao7mbah1odhm4mk/Otclient-Starlix.zip/file
Link Scan Otclient V8
https://www.virustotal.com/gui/file/b703dac28286dd6139b2f140516b6dfe9882a288b2909817d1570692e73e3c04?nocache=1
Source OTX 2.15 (Modificada por mim e feita algumas alterações..; darei suporte mas... be patienty;)
https://www.mediafire.com/file/vacu76zusyk4ubr/king.rar/file
scan: https://www.virustotal.com/gui/file/2a5cbca6a6acc028c9809448151836e68250f49abbc7e804a696e2a7eb1dac6f?nocache=1
Atualização:
Site: https://drive.google.com/file/d/1zCZAVvacHInGpUOWc82hrsPDGpZ2ro8l/view?usp=share_link
Scan Site: https://www.virustotal.com/gui/url/dc2516f12b7f1bb6e3a265fd6a67a4f200fef3664c1ac3d2554203d78690dfb0?nocache=1
Imagem do Site:
apesar da maioria das coisas serem feitas por várias pessoas, o site os créditos de alterações é todo meu (já a base é crédito totalmente ao gesior )
db compativel com o site:
baiak.sql
descrição quando estava sendo vendido*
⭐️ SERVIDOR 8.60 COM RESETS, MONTARIAS E GOLDEN OUTFIT ⭐️
INFORMAÇÕES BÁSICAS DO SERVIDOR:
[+] MAPA BAIAK
[+] HIGH EXP
[+] RESETS COM + DAMAGE
[+] PROTEÇÃO DE BAN DO OTSERVLIST
[+] ANTI-LAG DE TALKACTION
[+] DISTRO OTIMIZADA
[+] SOURCE PRONTA PARA WINDOWS/LINUX
[+] SITE ATUAL E CONFIGURADO
[+] CLIENTE PRÓPRIO + DB LIMPA
? SISTEMAS ATUAIS ?
[+] AUTOLOOT AUTOMÁTICO
[+] CITY DONATE
[+] ROSHAMUUL, ORAMOND E NETHER
[+] MONTARIAS E GOLDEN OUTFIT
[+] INVASÃO DE MONSTROS AUTOMÁTICAS
[+] DAILY MONSTER QUE APARECE AO LOGAR
[+] MONTARIAS COM COMANDO !MOUNT
[+] SISTEMA DE ROLETA ATUAL
[+] CAST WATCH
[+] FAST ATTACK
[+] CAST ARROWS
[+] PUSH CRUZADO
[+] REWARD CHEST
[+] WARSQUARE
[+] COMBO EXP DE POTIONS
[+] MINERAÇÃO COM LOJA
[+] SISTEMA DE BOSS
[+] CRITICAL/DODGE [500/500]
[+] LIFE E MANA EM PORCENTAGEM*
[+] VARIAS QUESTS
? EVENTOS ?
[+] EVENTO DTT (AUTOMÁTICO)
[+] EVENTO BATLEFIELD (AUTOMÁTICO)
[+] EVENTO SNOWBALLWAR (AUTOMÁTICO)
[+] EVENTO DESERT WAR (AUTOMÁTICO)
[+] EVENTO ZOMBIE (AUTOMÁTICO)
[+] EVENTO CAMPO MINADO (AUTOMÁTICO)
[+] EVENTO TEAM BATLE (AUTOMÁTICO)
[+] EVENTO CAPTURE THE FLAG (AUTOMÁTICO)
see ya l8 guys.
créditos em modificações do servidor ( @Lyu, @Diiego Liima, eu, @nettonnwk e o @Igorzerah)
Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.
-
thekilleron deu reputação a Toruk em (Resolvido)GesiorAAC Estou com 2 Problemas.Isso está na pagina de donate .php e não no config.php.
Só ir na pagina e procurar por <strike> ou <s> e deletar essa tag.
-
thekilleron deu reputação a zGiovani em MyAac Itens e Outfits 12.85/12.86 + Client 12.86 Atualizado + TUTORIAL DE INSTALAÇÃO COMPLETO!Olá Galera do Tibia King! ?
----------------------------------------------------------- -----------------------------------------------------------
----------------------------------------------------------- -----------------------------------------------------------
TODOS OS CREDITOS AO @Lucas Giovanni TODOS OS CREDITOS AO @Lucas Giovanni
Link do projeto oficial Link do projeto oficial
https://github.com/lucasgiovannibr/myaac https://github.com/lucasgiovannibr/myaac
----------------------------------------------------------- -----------------------------------------------------------
----------------------------------------------------------- -----------------------------------------------------------
Hoje venho contribuir também com essa comunidade maravilhosa, deu um grande trabalho pra encontrar esses arquivos, mas consegui.
Vou deixar aqui os arquivos completos para abrir o site do Myaac com as Outfits e itens da versão 12.85, e Client com ITENS da versão atual do tibia atualizado para abrir com o Object Builder, porém o executável da versão 12.86 configurado para jogar com servidor local, eu vou disponibilizar em outro tópico junto com o server!
Lembrando que o Char Bazaar está disponível nesse modo.
SCAN DOS ARQUIVOS:
https://www.virustotal.com/gui/file/913e829138ce67c37557072a5cb3fc8421986048f8f67396fb5a19237e39114b/detection
DOWNLOAD DOS ARQUIVOS:
Como evolui bastante com a ajuda da comunidade, hoje também venho contribuir com os que não sabem instalar o site pelo MyAac ou "rodar" o site pelo Xampp.
Imagem do Site
"Instalando o site"
1- Baixe e Instale o programa Xampp
https://downloadsapachefriends.global.ssl.fastly.net/7.4.29/xampp-windows-x64-7.4.29-1-VC15-installer.exe?from_af=true
2- Acesse o local do c:/xampp e vá até a pasta htdocs e exclua tudo que estiver dentro dessa pasta.
3- Abra o arquivo Site-myaac-main.zip, abra a pasta myaac-main e copie tudo que está dentro dela e cole na pasta htdocs do xampp.
vai ficar da seguinte maneira:
4- Copie o Endereço da pasta do seu server, e Abra o arquivo Config.php na pasta htdocs
5- Configure o local do seu servidor.
Fica Assim:
Faça o mesmo na linha 89 e 90, só que em vez de copiar o endereço do server, copie o endereço da imagem e outfits: "não esqueça de extrair os outfits na pasta htdocs, e itens na pasta htdocs/images"
6- Inicie o programa do Xampp e clique em "Start" "MySQL" e "Apache" (no meu caso já startei o MySQL)
Depois Clique em admin MySQL
7- Crie um servidor com o nome desejado, no meu caso vai ser meuserver
8- Clique no nome do seu servidor que está na lista, Importar, Escolher Arquivo, e escolha o Schema.sql que está dentro da pasta do seu servidor, role o mouse até a parte de baixo e clique no botão inferior direito da tela em "executar".
Pronto, o Servidor criado!
Agora vamos instalar o MyAac
9- Volte a tela do Xampp e clique em Apache Admin, vá avançando até chegar na seguinte tela:
O Caminho da pasta do servidor é o mesmo esquema do Passo número 4 e 5:
Preencha o formulário corretamente, Selecione a versão do seu cliente e clique novamente em avançar.
10- Essa parte é muito importante, recomendo salvar o email e senha em um bloco de notas, o email da conta de administrador vai ser usado para entrar e configurar o site pelo MyAac e também para logar a conta de administrador no jogo, mesmo que mude o email no phpMyAdmin o email para logar no MyAac vai ser mantido o mesmo que foi preenchido anteriormente, ou talvez de algum erro, portanto se não souber configurar, não mude o email ou senha que foi colocado para conta de administrador.
Pronto, seu site está configurado para ser iniciado normalmente, lembrando que se quiser instalar o MyAac novamente com outra conta de administrador é só não excluir a pasta install localizada em htdocs, e excluir o arquivo config.local CASO QUEIRA configurar e instalar o MyAac novamente...
Digite isso na barra de pesquisa, para acessar a página de administrador do MyAac:
localhost/admin/
11- Clique em Plugins e Procure o arquivo "2-plugin-myaac-tibia12-login-v2.0.zip" que está nos arquivos que disponibilizei, e depois clique em Upload!
Esse plugin é necessário para logar corretamente no seu servidor pelo Client12.86.exe configurado em 127.0.0.1
12- Por fim vamos configurar o Config.lua localizado na pasta do seu servidor, em MysqlDatabase você coloca o nome do seu servidor (o mesmo que foi criado no phpmyadmin, citado no passo número 7!
Esse foi o tutorial, espero ter ajudado, se eu te ajudei deixa o joinha? para ver quantas pessoas eu consegui ajudar, deu um trabalhão fazer tudo isso aqui, mas nada comparado a força que a comunidade ja me deu!
Obrigado a todos e Bom Proveito!!! +++