
1579091
Membro
-
Registro em
-
Última visita
Histórico de Curtidas
-
1579091 deu reputação a JZDJ em Mapa Lion SanctumPra quem ainda não tem hj trago o mapa de Lion Sanctum.
Lion Sanctum.rar
SCAN
-
1579091 deu reputação a Bruxo Ots em Bounac 12.40É com muito prazer que trago para vocês a área de Bounac.
Todos os créditos ao jo3bingham por desenvolver a melhor ferramenta.
Imagem da area.
ClientId
Server ID
Items otb do server id.
items.otb
-
1579091 deu reputação a JZDJ em Novos Locais de Caça (atualizado 29/11/2020) Trackeando...Olá galerinha do TK.
Estou trackeando as novas áreas:
Claustrophobic Inferno,
Ebb and Flow,
Furious Crater,
Hyaena Lairs,
Adicionado para download, COMPLETO
Hyaena Lairs.rar
scan mapa completo Hyaena Lairs
Mirrored Nightmare,
Mirrored Nightmare.rar
SCAN
Créditos ao OTG-King
Rotten Wasteland,
Forbidden Temple
Me pediram e vou postar aqui:
Adicionado para download, o mapa está localizado em 33330-32690-7
forbidden temple full.rar
Novo scan full map
Zarganash
Zarganash.rar Créditos: @Johncore e @Nolis
SCAN
Imagens do tibiawiki.com.br
Assim que eu terminar de copiar as áreas trarei aqui de graça.
Espero terminar de trackear até o final de novembro.
Abraços e aguardem novidades.
-
1579091 deu reputação a Cat em [novo] » Mapas do Nolis
-
1579091 deu reputação a Cat em [novo] » Mapas do NolisOlá, bem vindo ao meu portfolio. Decidi abandonar o anterior (este aqui) devido à quantidade de comentários e imagens quebradas.
Este em vez, usarei para organizar e publicar imagens de mapas.
Siga o tópico para receber notificações de novos mapas! » ↑
(clique no botão seguir)
↓ ↓ « « » » ↓ ↓
Mapas do Nolis
| Mapas de Projetos |
| Mapas de Eventos |
...
-
1579091 deu reputação a Naze em [VIDEO] Virtualiza Linux Com Acesso "localhost" Direto do WindowsEstava precisando de uma maquina linux para alguns trabalho e testes e bancar minha vps só pra isso não é viavel, usar dual boot tbm não é do meu gosto, e criar uma maquina virtual não chegava ao ponto que exatamente eu queria, que é facilidade e trabalha no terminal do Linux.
Então descobri um metodo que seria criar uma maquina virtual e rodala em background, e usar como se estivessa montado com a rede do meu Windows, podendo acessar pelo localhost, sem ta colocando numeros de porta na frente (localhost:1234).
Com isso vai ta podendo trabalha em um Linux direto de seu PC, como se estivesse acessando uma VPS comum, e ter total controle de sua maquina podendo até entra na interface grafica oq nao faz sentido ja que tou fazendo isso pra nao precisa entra nela.
Fiz um video explicando todos passo e deixarei os links e comando utilizado a baixo. O video está acelerado para nao ficar mais extenso.
VirtualBox: download
Lembre-se de desativar Hyper-V em seu windows caso tenha ativado para virtualbox funcionar corretamente.
Linux Mint: download
Aconselho a baixar a edição Xfce por ser mais leve e rapida..
Instalar ssh:
sudo apt-get install openssh-server verificar:
sudo service ssh status
Codigo para criar arquivo .bat, lembre-se de trocar o diretorio de acordo com sua instalação e o nome de acordo com o que criou:
Iniciar:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" startvm "NOME DA MAQUINA" -type headless desligar:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" controlvm "NOME DA MAQUINA" poweroff soft
Acesso ssh é feito por:
usuario@localhost
No meu caso usei usario "naze" e cmd do windows 10
ssh naze@localhost
-
1579091 deu reputação a Naze em Otimizado: AutoLoot in Sources for TFS 0.3.6, TFS 0.4Uns dos problemas das maiorias dos otserv casual que estão online é o autoloot, alguns com erros e defeito na checagem dos containers e sempre consumindo muito por ser em lua fazendo checagens de tile, corpo, itens e etc. Por isso decidi da uma contribuição a essa comunidade que me evoluiu bastante um autoloot diretamente na source na função que insere os itens no corpo, otimizando em 100% na hr da entrega do item, e não tendo problemas ocasionais como corpos sobre corpos ou varias bags.
Esse sistema já é bem comum quando comprado, mas gratuito acredito que ainda não tinha disponível, então fiz esse totalmente do 0 na source tfs 0.4 rev 3999 (do yan).
Atenção na instalação! Qualquer problema pra compilar que envolva as linhas presente no código verifique novamente se instalou corretamente antes de pedir ajuda para evitar flood. Qualquer bug, erro ou mal funcionamento encontrado pode postar que estarei corrigindo, mas não irei customizar a seu agrado, você consegue fazer isso sozinho com atenção e calma, e se precisa de ajuda é só posta as duvidas.
Imagens do Sistema:
Características:
-> Otimizado executando apenas funções necessarias -> Comandos simples e praticos -> !autoloot on/off //Autoloot estara sempre ligado, e caso queria desliga use '!autoloot off' -> !autoloot bank/bag //Define para onde ira o dinheiro coletado, direto banco ou no inventario -> !autoloot list //Lista todos itens adicionados para coleta -> !autoloot clear/clean //Remove todos itens da lista -> !autoloot add, name item, name item, ... //Adiciona itens na lista, podendo adicionar quantos quiser de uma vez. Ele retorna um messagem dizendo os itens que foram adicionados e os que deram erro e não foram adicionados, talvez por escrito errado, ja existente na lista, na lista de bloquados, etc. -> !autoloot remove, item name, item name, ... //Remove itens da lista, com a mesma logica do add. -> Opções configuravel pelo Config.lua -> AutoLoot_MoneyIDs //IDs dos Itens Moedas do servidor como gold coins, platinium coins, crystal coins. -> AutoLoot_BlockIDs //IDs dos itens bloqueados para autoloot -> AutoLoot_MaxItem //Quantidade maxima de itens para adicionar a lista -> Sistema livres de bugs ou logs de erros.
Instalação:
Toda instalação será feita na source, exceto por 1 linha em talkactions.xml e 3 variáveis no config.lua
TFS 0.4 :
Link para Otx -> https://tibiaking.com/forums/topic/101086-otimizado-autoloot-in-sources-for-otx2-ou-menor/
Nas versões atual da TFS para servidores 10+ não ira funcionar pois algumas funções são diferente e não irei corrigir agora, em breve passo o mesmo pra tfs 1.x e otx3.
Esse sistema foi totalmente feito por mim, mas dou créditos também ao @Mathias Kenfi por me ajudar muito na evolução em lua/c++ e a tabela sql é a mesma usada no quick autoloot 1.3 postado por Pedriinz
@Edit:
Quem usa source de derivados caso ocorra erro aplica as alterações dos comentários abaixo.
Pequena correção em talkactions.cpp na parte remove na linha if(!player->checkAutoLoot(itemId)), para if(player->checkAutoLoot(itemId))
-
1579091 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
-
1579091 deu reputação a Cat em [10.98] Carlin Revamp 2.0Trago a vocês a nova versão desse remake que fiz um tempo atrás. Agradecimentos ao @JohnBonner que me ajudou em alguns locais.
Confiram o que mudou:
- Bugs em algumas houses corrigidos;
- Saídas leste, oeste e norte modificadas;
- Nova loja de paladins, no topo da estrutura onde se localizava a antiga;
- Nova biblioteca;
- Novo depot;
- Adição de um segundo depot com loja de jewels no topo e vista para o Magician's park;
- Adição do Magician's Park e estatuas de memorial nos dois lados da cidade;
- Remake do templo;
- Remake da prision;
- Remake do teatro;
- Novo porto, localizado ao sol, tendo como acesso a loja de potions e de móveis;
- Castelo editado, novo piso no topo com duas passagens para saída;
- Remake em loja de npc de tasks, com saída para campo com flores;
- Outras edições menores.
Espero que gostem!
Download - Link direto (arquivo.otbm)
carlinrevamp2.0.otbm
-
1579091 deu reputação a Movie em Gesior Ferobra - Open SourceFala pessoal, beleza?
Alguns dias atrás estava procurando um site que seja compatível com o meu servidor que é downgrade (TFS 1.3 para 8.60) e percebi que (segundo minhas pesquisas) não existe nenhum.
Portanto, o que eu fiz foi pegar um projeto original que já existia (esse aqui) e fiz um fork para atualizá-lo.
Sintam-se à vontade para fazer issues e pull requests, assim melhoraremos o gesior juntos.
O link para o repositório é esse:
https://github.com/moviebr/TheRealGesiorFerobra
Créditos: Gesior.pl Ricardo Souza (Vulgo Ricardin PHP) Marco Oliveira Movie (eu) e alguns outros desenvolvedores.
Lembrando que para o site funcionar 100% é necessário fazer a instalação conforme o readme.
-
1579091 deu reputação a Vodkart em Simple Task 3.008/01/2017
SISTEMA ATUALIZADO PARA 4.0:
Mods:
-
1579091 recebeu reputação de Victorhugo69 em [Download] Vácuo By: AnneMottaSHow off do galerath no #####..
-
1579091 recebeu reputação de Markin em [Funcional] Talkaction !rank [Personalizado]Copiando coisa e nao pondo créditos em safado! Créditos by Vodkar:
(aki o spoiler caso vc altere alguma coisa e fale que eu estou inventando)
-
1579091 recebeu reputação de Gustavo Ferreira em [PEDIDO] MapWarW0lf preste atençao kara, vai aprende a ler... ele quer o MAP, nao a porra do script...
E ve se coloca um spoiler nesse caralho, pq n to afim de fica dessendo a bolinha do mouse nessa merda!
Diego lops, to upando aki na net!
-
1579091 recebeu reputação de Markin em [PEDIDO] MapWarW0lf preste atençao kara, vai aprende a ler... ele quer o MAP, nao a porra do script...
E ve se coloca um spoiler nesse caralho, pq n to afim de fica dessendo a bolinha do mouse nessa merda!
Diego lops, to upando aki na net!
-
1579091 recebeu reputação de diegolopes em [PEDIDO] MapJa fiz aqui, vou estar postando... Jaja edit!
@EDIT
http://www.4shared.c...xD_online.html?
Ps. Caso sua versao nao seja compativel, e de errado, só fala aki que eu arrumo!
-
1579091 recebeu reputação de Augusto em Resultado MOTW #07Brigado hehe... Bom acho q minha nota foi coerente ao mapa... Conheço o Vital, e ele julga muito bem, apesar de no fim de tudo nao ter sido ele que julgou (alguns se nao me engano), foi um amigo dele melhor que ele... Acredito que minha nota esta de acordo com o que eu merecia... To só esperando ele entra no msn, pra fica sabendo se foi ele msm que julgou meu map, ou o amigo dele... Mas mesmo assim, competir com a anne motta e ganhar acho que n é algo que se espera todo dia...
@AnneMotta, Po quando fiquei sabendo que se ia competir, sabia em primero n ia ficar... Mas achava que se ia fazer melhor pow USHAUSH se manda bem d++
-
1579091 recebeu reputação de Markin em Mapping of the Week #07Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!! Poe agoraa!!