Líderes
Conteúdo Popular
Exibindo conteúdo com a maior reputação em 12/30/16 em %
-
Seria muito útil para mim, agradeço !2 pontos
-
@Jakson Souza Você vai liberar esse sistema?2 pontos
-
2 pontos
-
2 pontos
-
2 pontos
-
Obrigado eu tentei mais não deu certo mais topa 1 rep+ por tentar me ajudar.2 pontos
-
Como usar remeres map editor extendido (VIDEO EM HD)
MgExe reagiu a domvinicius por um tópico no fórum
VIDEO EM HD NO YOUTUBE Bom galera se gostarem da um Rep++ ia pra me ajudar nao custa nada hahaha1 ponto -
Boa tarde, venho compartilhar o código feito por @Oneshot, com adaptação para tfs 0.3.6 (854). Bem, ele postou para tfs 0.4 (860), dai eu só mexi em umas linhas parar funcionar no tfs 0.3.6(854), dai vou compartilhar com vocês. Com o monster level system, o monstro passa a ter level e ganha mais HP, dá mais dano, tem mais defesa, dependendo dele. monsters.h procure por: bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth; Substitua por: bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth, hideLevel; Procure por: int32_t defense, armor, health, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance; Substitua por: int32_t defense, armor, health, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance, levelMin, levelMax; monsters.cpp Procure por: canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = false; Substitua por: canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = hideLevel = false; Procure por: baseSpeed = 200; Logo abaixo, adicione: levelMin = levelMax = 1; Localize: if(readXMLInteger(p, "max", intValue)) mType->healthMax = intValue; else { SHOW_XML_ERROR("Missing health.max"); monsterLoad = false; } } abaixo adicione: else if(!xmlStrcmp(p->name, (const xmlChar*)"level")) { if(!readXMLInteger(p, "max", intValue)) mType->levelMax = 1; else mType->levelMax = intValue; if(!readXMLInteger(p, "min", intValue)) mType->levelMin = mType->levelMax; else mType->levelMin = intValue; } procure por: if(readXMLString(tmpNode, "shield", strValue)) mType->partyShield = getPartyShield(strValue); logo baixo adicione: if(readXMLString(tmpNode, "hidelevel", strValue)) mType->hideLevel = booleanString(strValue); Monster.h Procure: virtual ~Monster(); std::string name, nameDescription; abaixo adicione: std::string name, nameDescription;int32_t level;double bonusAttack, bonusDefense; Procure: virtual const std::string& getName() const {return mType->name;}virtual const std::string& getNameDescription() const {return mType->nameDescription;}virtual std::string getDescription(int32_t) const {return mType->nameDescription + ".";} Substitua por: virtual const std::string& getName() const {return name;}virtual const std::string& getNameDescription() const {return nameDescription;}virtual std::string getDescription(int32_t) const {return nameDescription + ".";} Monster.cpp Logo abaixo de: isIdle = true; Adicione: name = _mType->name;nameDescription = _mType->nameDescription;level = (int32_t)random_range(_mType->levelMin, _mType->levelMax, DISTRO_NORMAL);bonusAttack = 1.0;bonusDefense = 1.0; Procure por está função: Monster::onCreatureAppear Apague e coloque está função: void Monster::onCreatureAppear(const Creature* creature){ Creature::onCreatureAppear(creature); if(creature == this) { //We just spawned lets look around to see who is there. if(isSummon()) { std::string value;// this->master->getStorage((uint32_t)"1996", value); this->master->getStorage((uint32_t)"1996", value); uint8_t intValue = atoi(value.c_str()); if(intValue || value == "0") level = intValue; else level = 1; isMasterInRange = canSee(master->getPosition()); } if(g_config.getBool(ConfigManager::MONSTER_HAS_LEVEL)) { this->healthMax = std::floor(this->getMaxHealth() * (1. + (0.1 * (level - 1)))); this->health = this->healthMax; this->bonusAttack += (0.01 * (level - 1)); this->bonusDefense += (0.005 * (level - 1)); } updateTargetList(); updateIdleStatus(); } else onCreatureEnter(const_cast<Creature*>(creature));} Substitua todos: g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE) Por: g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE) * bonusDefense Substitua todos: g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK) Por: g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK) * bonusAttack Map.cpp Procure por: #include "game.h" Adicione em baixo: #include "configmanager.h" Procure por: extern Game g_game; Adicione em baixo: extern ConfigManager g_config; Procure por está função: bool Map::placeCreature(const Position& centerPos, Creature* creature, bool extendedPos /*= false*/, bool forced /*= false*/){ Abaixo do " { " adicione: Monster* monster = creature->getMonster(); if(monster && g_config.getBool(ConfigManager::MONSTER_HAS_LEVEL)) { uint8_t level; if(!monster->getMonsterType()->hideLevel) { if(monster->isSummon()) { std::string value;// monster->getMaster()->getStorage((uint32_t)"1996", value); monster->getMaster()->getStorage((uint32_t)"1996", value); uint8_t intValue = atoi(value.c_str()); if(intValue || value == "0") level = intValue; else level = 1; } else level = monster->level; char buffer [10]; monster->name = monster->getName() + " [" + itoa(level, buffer, 10) + "]"; } } configmanager.h Procure por: ADDONS_PREMIUM, e abaixo adicione logo em baixo: MONSTER_HAS_LEVEL, configmanager.cpp procure por: m_confBool[ADDONS_PREMIUM] = getGlobalBool("addonsOnlyPremium", true); e logo em baixo adicione: m_confBool[MONSTER_HAS_LEVEL] = getGlobalBool("monsterHasLevel", true); no Config.lua adicione: monsterHasLevel = true -- true para monstros nascerem com level, false para não nascerem com level São muitas modificações para fazer, mas o resultado é garantido e é uma funcionalidade a mais para seu servidor. Como está programado, a cada level, monstros ganham 10% de HP, 1% de dano e 0.5% de defesa. Para configurar level mínimo e máximo, é só adicionar no XML do monstro: <level min="1" max="10"/> -- level minimo, level maximo E alterar a seu gosto. Se você fizer certo irá ficar assim: Créditos: @Oneshot1 ponto
-
Sprite icon system sem pokémon
Taiger reagiu a Alphapetboy por um tópico no fórum
1 ponto -
Pokemon Mythology RPG!
Punchlines Nemmo reagiu a Deadpool por um tópico no fórum
Caro membro, seu tópico foi movido de Download Otserv > Otserv > Otserv Derivado para Soluções > Recepção Xtibia > Lixeira Pública.1 ponto -
Survival of the Fittest
Mendiguinho91 reagiu a DuuhCarvalho por um tópico no fórum
Survival of the Fittest O que é ? Como funciona ? Como configurar ? "Mensagens" Instalando : É isso1 ponto -
Caro membro, seu tópico foi movido de Otserv > Notícias e Debates para Notícias e Debates > Otserv > Formação de Equipes.1 ponto
-
Se quiser continuar seu projeto me avisa que eu junto com você sou scripter1 ponto
-
1 ponto
-
Qual o Bug do Surf? Essa base é á PokeAlpha Oficial? como conseguiu ela? Tem como postar á source do OTCliente?1 ponto
-
1 ponto
-
MITOOOOOOOOOOOOOOOOOOOOOOO Você é uma Lenda um Mito.1 ponto
-
Nada se puder me dar um REP+ pela resposta eu ficaria grato existe tutoriais de compilação aqui no xtibia basta procurar.1 ponto
-
É SÓ COMPILAR Á SOURCE QUE APARECE O .EXE ae como vc pediu um servidor 10.901 ponto
-
Durante esses anos que o Tibia evoluiu eu não vi mudança na questão de IP de Testes OFFLINE Tenta mudar no seu config.lua o IP pode ser que você tenha esquecido isso troca pra 127.0.0.1 Caso Não funcionar eu não sei oque pode ser verifica se o cliente e o servidor está com o IP 127.0.0.11 ponto
-
1 ponto
-
Mate o monstro, complete sua tarefa e ganhe recompensa
Mster Centurio reagiu a vmAth por um tópico no fórum
Qual a função disso? Você fala com o npc, o npc sumona um monstro e após matar este monstro, ele te dá uma recompensa. Tutorial: Vá em data/creaturescripts/creaturescripts.xml e adicione esse código: <event type="death" name="NPC" event="script" value="npcquest.lua"/> Agora vá em creaturescripts/scripts e crie um novo arquivo com o nome npcquest.lua e bote isto dentro: function onDeath(cid, corpse, killer) local monstName = "Monk" -- nome do monstro local Storage = 9755 -- nao mude if isMonster(cid) then if string.lower(getCreatureName(cid)) == string.lower(monstName) then setPlayerStorageValue(killer[1], Storage, 1) doCreatureSay(killer[1],'Você completo sua tarefa.',TALKTYPE_ORANGE_1) end end return TRUE end Vá no xml do monstro que você escolheu e lá no final do script antes do </monster>, você adiciona: <script> <event name="NPC"/> </script> Vá em data/npc, crie um novo arquivo com o nome Jhow.xml e bote isto dentro: <?xml version="1.0" encoding="UTF-8"?> <npc name="Jhow" script="data/npc/scripts/jhow.lua" walkinterval="2000" floorchange="0"> <health now="100" max="100"/> <look type="138" head="96" body="95" legs="0" feet="95" addons="0"/> <parameters> <parameter key="message_greet" value="Ola |PLAYERNAME|, voce quer testar suas habilidades?" /> <parameter key="module_keywords" value="1" /> </parameters> </npc> Vá em npc/script e crie um novo arquivo com o nome de jhow.lua e bote isto dentro: local nomeMonst = "Monk" -- Nome do mosntro que ele vai sumonar local itemid = 2150 local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end function onThink() npcHandler:onThink() end function creatureSayCallback(cid, type, msg) if(not npcHandler:isFocused(cid)) then return false end local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid if getPlayerStorageValue(cid, 9755) == -1 then if(msgcontains(msg, 'yes')) then selfSay('Mate este monstro para completar sua tarefa.', cid) doCreateMonster(nomeMonst,getThingPos(cid)) talkState[talkUser] = 1 end return true end if getPlayerStorageValue(cid, 9755) == 1 then selfSay('Você matou o monstro e ganhou um item.', cid) doPlayerAddItem(cid, itemid,1) setPlayerStorageValue(cid, 9755,2) talkState[talkUser] = 0 return true end if getPlayerStorageValue(cid, 9755) == 2 then selfSay('Você já fez esta tarefa.', cid) talkState[talkUser] = 0 return true end return true end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Agora, volte lá em creaturescripts/scripts/ e procure por login.lua, e antes do último return true, adicione isto: registerCreatureEvent(cid, "NPC") Pronto, NPC criado. Créditos: thalia1 ponto