Ir para conteúdo

extefania

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    extefania deu reputação a Yota em [C ]Level System in monster [0.3.6]   
    Boa noite, venho compartilhar o código feito por @Oneshot/ @Garou, com adaptação para tfs 0.3.6 (854) por mim. Bem, ele postou para atfs 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:
    @Oneshot
  2. Gostei
    extefania deu reputação a Yota em [C++] Level Monster   
    Eu fiz uma versão 8.54. se quiser, posso postar.
  3. Gostei
    extefania deu reputação a Natanael Beckman em DEV C++ Compilando TFS no Windows   
    DEV C++,  aprenda a compila uma source TFS!
     
    Downloads(Baixe de acordo as configurações do seu windows):
    DEV C++ CONFIGURADO PARA 32BITS
    DEV C++ CONFIGURADO PARA 64BITS
    REV 3884 TFS 0.4
     
    Certo, feitos os downloads, extrai DEV C++ no Disco C e REV 3884 em Documentos.
    ======================================
    Abra o DEV C++:
    ======================================

    ======================================
    Abra a Source:
    ======================================

    ======================================
    Localize a pasta da Source e abra o arquivo TheForgottenServer.dev, Documentos> trunk.r3884> dev-cpp> TheForgottenServer.dev:
    ======================================

    =============================================================

    ======================================
    Aguarde carregar todos os arquivos:
    ======================================

    ======================================
    Vamos adicionar o parâmetro -D__CONSOLE__ no teclado digita ALT + P, clique em parameters e adicione o parâmetro... Feito? clique em OK:
    ======================================

    ======================================
    Vamos compilar Source, no teclado digite CTRL+F9 e aguarde finalizar o processo:
    ======================================

    ======================================
    Se der tudo certo em Log vai estar como mostra a imagem abaixo:
    ======================================

    ======================================
    Verifique na pasta Documentos> trunk.r3884> dev-cpp você vai encontrar o arquivo TheForgottenServer.exe e pronto meu parabéns você compilou!
    ======================================

    ===========================================
    Só isso galera tutorial rápido resumido e útil!
    Créditos Natanael Beckman!    
    ===========================================     
     
    Caso você adquira uma source com apenas os arquivos .cpp e .h e não sabe como compilar o projeto, abaixo vamos explicar:
    Na pasta onde está localizado os arquivos .cpp e .h crie uma pasta chamada dev-cpp, e dentro dela adicione uma imagem icone.
     

     
    Abra o DEV-C++, clique em  File> New> Project:
     

     
    Logo em seguida selecione Empty Project, em name terá o nome Project1 altere utilize o nome quer quiser, após isso clique em OK e em seguida selecione a pasta dev-cpp que criamos:
     

     
    Agora selecione a opção Win32GUI caso use source OTX ou TFS selecione Win32Console ao lado << Browse selecione a imagem do icone que está na pasta Dev-Cpp.
     

     
    No mesmo menu na aba Parameters em C++ compiler adicione os seguintes parâmetros:
    -D__ENABLE_SERVER_DIAGNOSTIC__ -D__ROOT_PERMISSION__ -D__GROUND_CACHE__ -D__USE_SQLITE__ -D__USE_MYSQL__ -D__CONSOLE__ -D__WAR_SYSTEM__ E em Linker adicione as seguintes libs:
    -lboost_filesystem -lboost_thread -lboost_system -lboost_regex -lsqlite3 -lwsock32 -llua5.1 -lws2_32 -leay32 -lmysql -lxml2 -lgmp -lz -s   No mesmo Menu na aba Build Option escreva na segunda coluna horizontal escreva Obj e dê OK.     Na lateral terá o nome do seu projeto o meu no caso é The Forgotten Server, clique com o botão direito do mouse em cima do nome e clique na opção Add Project:      Selecione na pasta da sua source todos os arquivos .cpp e .h após isso salva o projeto e já pode compilar CTRL+F9:         OpenSSL 0.9.8   1º baixe http://devpaks.org/details.php?devpak=73 2° abra Dev-Cpp > Tools > Packager Manager > Install > Seleciona o arquivo baixado e instala, fecha abre e testa!
      Clica aqui \/
  4. Gostei
    extefania deu reputação a MaXwEllDeN em [CTF] Capture The Flag 2.0(Automático)   
    Ainda no arquivo CTFLib.lua, da linha 263 à 268, teremos o seguinte conteúdo:
     
     
    Essa é a parte do código que adiciona a recompensa aos players vencedores. Caso você queira que o player que vencer receba 10 Crystal coins, você pode adicionar abaixo da linha 263, o método que adiciona um item. Por exemplo, para adicionar 10 crystal coins:
     
      doPlayerAddItem(cid, 2160, 10)
     
     
     
    E o código passaria a ser:
     
  5. Gostei
    extefania deu reputação a MaXwEllDeN em [CTF] Capture The Flag 2.0(Automático)   
    #Introdução

    Este é um sistema de rouba bandeira, no qual tem dois times que se enfrentam e tentam se infiltrar na fortaleza do inimigo, roubar a bandeira dele e retornar para sua base com ela.
     
     
     
    #Instalação

    Faça o download do sistema (anexado ao tópico) e cole na pasta do seu servidor.
    Atualizado 28/03/2014 Após ter instalado os arquivos nas suas respectivas pastas e instalado as tags
    nos arquivos xml, abra a pasta do seu servidor, e em seguida abra a pasta spells/scripts/support, e abra o arquivo invisible.lua com algum editor de texto, depois de






    function onCastSpell(cid, var) cole isso:
     
    if (getPlayerStorageValue(cid, 16700) ~= -1) then return doPlayerSendCancel(cid, "Você não pode usar invisible durante o CTF!") and doSendMagicEffect(getThingPos(cid), 2) end ficando assim:
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatParam(combat, COMBAT_PARAM_AGGRESSIVE, false) local condition = createConditionObject(CONDITION_INVISIBLE) setConditionParam(condition, CONDITION_PARAM_TICKS, 200000) setCombatCondition(combat, condition) function onCastSpell(cid, var) if (getPlayerStorageValue(cid, 16700) ~= -1) then return doPlayerSendCancel(cid, "Você não pode usar invisible durante o CTF!") and doSendMagicEffect(getThingPos(cid), 2) end return doCombat(cid, combat, var) end #Configuração

    Como na maioria dos meus códigos: as configurações ficam na lib, então:

     






    waitpos = {x = 93, y = 117, z = 6}, -- Posição da sala de espera tppos = {x = 92, y = 117, z = 7}, -- Onde o TP vai aparecer   days = {2, 5, 7}, -- Dias que o evento vai abrir xp_percent = 0.5, -- Porcentagem de xp que o player vai receber quando ganhar timeclose = 1, -- Tempo para iniciar o CTF winp = 10, waitpos = {x = 93, y = 117, z = 6}, -- Posição da sala de espera  
    Posição onde os players que entrarem no teleport vão ficar esperando, até o evento iniciar
     
    tppos = {x = 92, y = 117, z = 7}, -- Onde o TP vai aparecer Posição de onde o teleport vai aparecer
     
    days = {2, 5, 7}, -- Dias que o evento vai abrir  
    Dias que o evento vai iniciar.
     
    xp_percent = 0.5, -- Porcentagem de exp que o player vai ganhar  
    Quando o evento acaba, os players da equipe que venceu ganham uma quantidade de experiência baseada na experiência que eles já têm, exemplo:
     
    Meu player tem 1200000000 de exp, quando o evento acabar, ele vai ganhar 0.5% da exp que ele tem, no caso desse exemplo 6000000 de exp.
     
    timeclose = 1, -- Tempo, em minutos, para iniciar o CTF  
    Tempo para o teleport sumir e os players que estão na sala de espera serem teletransportados para o evento.

     
    winp = 10, -- Quantos pontos uma equipe precisa marcar para vencer  
    Quantos pontos uma equipe precisa marcar para vencer o evento.
     
     
    Para configurar o horário que o evento vai abrir, é só você modificar na tag do globalevents.xml:
     
    <globalevent name="CTFCheck" time="19:33:00" event="script" value="CTFMax.lua"/>  
    Você não precisa criar as bandeiras pelo map editor. O script irá adicioná-las automaticamente.
     
    É isso, essa versão é uma remake, vários bugs reportados pela galera na v.1 foram corrigidos, o script ficou mais simples
    Capture The Flag.rar
  6. Gostei
    extefania deu reputação a MaXwEllDeN em [CTF] Capture The Flag 2.0(Automático)   
    Ainda com o mesmo problema?
     
     
    Olá, @extefania. Lembro de ter outra versão do CTF, em que essa configuração ficava na própria Lib. Nessa versão que postei, você pode editar a quantidade mínima de players no arquivo:
     
    CTFLib.lua, na linha 182 terá o seguinte conteúdo:
    if #CTF.getMembers() < 2 then Nesse caso, a quantidade mínima de players para iniciar, é 2. Caso deseje, é só alterar conforme seu gosto.

Informação Importante

Confirmação de Termo