Ir para conteúdo

rohfagundes

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Obrigado
    rohfagundes recebeu reputação de FeeTads em Variação de Dano Reformulada(Source)   
    Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
     
    • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
     
    • Em weapons.ccp procure por:
     



     
    Nessa parte:
    int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
    int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
     
     
    • Agora para editar o dano de arma, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
     
    • Agora dano de arma elemental, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL);   Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo   • Agora distance, procure:  
  2. Gostei
    rohfagundes recebeu reputação de gubailovo em [C++] Color Monster   
    pra trocar a cor do nome dos npcs ja tem uma função
    vai na pasta modules\game_things do seu client
    abra o arquivo things.lua
    a baixo dessa parte
    function load() local version = g_game.getClientVersion() add isso
    g_game.enableFeature(GameBlueNpcNameColor)  
  3. Curtir
    rohfagundes recebeu reputação de andreguima em Mudar velocidade de ataque   
    voce pode mudar a velocidade de atk no arquivo vocations.xml na pasta data/xml
     
    attackspeed="2000"  1 ataque a cada 2 segundos
     
    ou vc pode add attack speed em cada item

    <attribute key="attackSpeed" value="2000"/> 1 ataque a cada 2 segundos
  4. Gostei
    rohfagundes recebeu reputação de KinG DarKensBerG em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  5. Gostei
    rohfagundes recebeu reputação de TioItachi em [C++] Level Monster   
    ola =)
    estava aqui mexendo nas sources q tenho aqui
    e achei um sistema de level nos monstros q tinha em um forum q agora esta morto(kkk)
     
    Source de Teste: otxserver2(FINAL) Baseada na versão: tfs 0.3.7
     
    entao vamos la =)
     
    em configmanager.h
     
    embaixo de:
    MONSTER_SPAWN_WALKBACK, coloque:
    MONSTER_HAS_LEVEL, em configmanager.cpp
    embaixo de:
    m_confBool[MONSTER_SPAWN_WALKBACK] = getGlobalBool("monsterSpawnWalkback", true); coloque:
    m_confBool[MONSTER_HAS_LEVEL] = getGlobalBool("monsterHasLevel", true); em luascript.cpp
    embaixo de:
    setField(L, "guildEmblem", mType->guildEmblem); coloque:
    setField(L, "levelMin", mType->levelMin); setField(L, "levelMax", mType->levelMax); em map.cpp
    embaixo de:
    #include "game.h" coloque:
    #include "configmanager.h" troque inteiro:
    bool Map::placeCreature(const Position& centerPos, Creature* creature, bool extendedPos /*= false*/, bool forced /*= false*/) por:
    bool Map::placeCreature(const Position& centerPos, Creature* creature, bool extendedPos /*= false*/, bool forced /*= false*/) { 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((std::string)"monster_level", 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) + "]"; } } bool foundTile = false, placeInPz = false; Tile* tile = getTile(centerPos); if (tile && !extendedPos) { placeInPz = tile->hasFlag(TILESTATE_PROTECTIONZONE); uint32_t flags = FLAG_IGNOREBLOCKITEM; if (creature->isAccountManager()) flags |= FLAG_IGNOREBLOCKCREATURE; ReturnValue ret = tile->__queryAdd(0, creature, 1, flags); if (forced || ret == RET_NOERROR || ret == RET_PLAYERISNOTINVITED) foundTile = true; } size_t shufflePos = 0; PairVector relList; if (extendedPos) { shufflePos = 8; relList.push_back(PositionPair(-2, 0)); relList.push_back(PositionPair(0, -2)); relList.push_back(PositionPair(0, 2)); relList.push_back(PositionPair(2, 0)); std::random_shuffle(relList.begin(), relList.end()); } relList.push_back(PositionPair(-1, -1)); relList.push_back(PositionPair(-1, 0)); relList.push_back(PositionPair(-1, 1)); relList.push_back(PositionPair(0, -1)); relList.push_back(PositionPair(0, 1)); relList.push_back(PositionPair(1, -1)); relList.push_back(PositionPair(1, 0)); relList.push_back(PositionPair(1, 1)); std::random_shuffle(relList.begin() + shufflePos, relList.end()); uint32_t radius = 1; Position tryPos; for (uint32_t n = 1; n <= radius && !foundTile; ++n) { for (PairVector::iterator it = relList.begin(); it != relList.end() && !foundTile; ++it) { int32_t dx = it->first * n, dy = it->second * n; tryPos = centerPos; tryPos.x = tryPos.x + dx; tryPos.y = tryPos.y + dy; if (!(tile = getTile(tryPos)) || (placeInPz && !tile->hasFlag(TILESTATE_PROTECTIONZONE))) continue; if (tile->__queryAdd(0, creature, 1, 0) == RET_NOERROR) { if (!extendedPos) { foundTile = true; break; } if (isSightClear(centerPos, tryPos, false)) { foundTile = true; break; } } } } if (!foundTile) return false; int32_t index = 0; uint32_t flags = 0; Item* toItem = NULL; if (Cylinder* toCylinder = tile->__queryDestination(index, creature, &toItem, flags)) { toCylinder->__internalAddThing(creature); if (Tile* toTile = toCylinder->getTile()) toTile->qt_node->addCreature(creature); } return true; } em monster.h
    embaixo de:
    virtual ~Monster(); coloque:
    std::string name, nameDescription; int32_t level; double bonusAttack, bonusDefense; troque:
    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 + ".";} 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 + "."; } em monster.cpp
    embaixo de:
    raid = NULL; coloque:
    name = _mType->name; nameDescription = _mType->nameDescription; level = (int32_t)random_range(_mType->levelMin, _mType->levelMax, DISTRO_NORMAL); bonusAttack = 1.0; bonusDefense = 1.0; troque inteiro:
    void Monster::onCreatureAppear(const Creature* creature) por:
    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((std::string)"monster_level", 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)); } em :
    void Monster::doAttacking(uint32_t interval) procure por:
    if(maxCombatValue > 0) //defense multiplier = g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE); else //attack multiplier = g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK); e troque por:
    if(maxCombatValue > 0) //defense multiplier = g_config.getDouble(ConfigManager::RATE_MONSTER_DEFENSE) * bonusDefense; else //attack multiplier = g_config.getDouble(ConfigManager::RATE_MONSTER_ATTACK) * bonusAttack; em monsters.h
    troque:
    bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth, eliminable; por:
    bool isSummonable, isIllusionable, isConvinceable, isAttackable, isHostile, isLureable, isWalkable, canPushItems, canPushCreatures, pushable, hideName, hideHealth, eliminable, hideLevel; troque:
    int32_t defense, armor, health, healthMin, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance; por:
    int32_t defense, armor, health, healthMin, healthMax, baseSpeed, lookCorpse, corpseUnique, corpseAction, maxSummons, targetDistance, runAwayHealth, conditionImmunities, damageImmunities, lightLevel, lightColor, changeTargetSpeed, changeTargetChance, levelMin, levelMax; em monsters.cpp
    troque:
    canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = eliminable = false; por:
    canPushItems = canPushCreatures = isSummonable = isIllusionable = isConvinceable = isLureable = isWalkable = hideName = hideHealth = eliminable = hideLevel = false; embaixo de:
    baseSpeed = 200; coloque:
    levelMin = levelMax = 1; procure por:
    if(!xmlStrcmp(p->name, (const xmlChar*)"health")) { if(readXMLInteger(p, "min", intValue)) mType->healthMin = intValue; if(!readXMLInteger(p, "max", intValue)) { SHOW_XML_ERROR("Missing health.max"); monsterLoad = false; break; } mType->healthMax = intValue; if(!readXMLInteger(p, "now", intValue)) mType->health = mType->healthMax; else mType->health = intValue; } embaixo dele coloque:
    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; } agora nos arquivos dos monstros vc pode colocar
    <level min="1" max="6"/> min = level minimo q pode vir no monstro
    max = level maximo q pode vir no monstro
     
    obs: se vc colocar essa tag nos monstros sempre vai vir Monstro Level 1
     
     
    obs²: getMonsterInfo(name) n funcionar para achar o nome do monstro
    pq ele pega o nome real q esta no arquivo do monstro q n vai ter o [1](q é o level)
    estou tentando arrumar isso mas ainda n consegui
    se alguem conseguir arrumar isso avisa ai =)
     
    acho q é so isso
     
    Creditos: 100% OneShot/Garou
  6. Curtir
    rohfagundes deu reputação a Tadelho em Armas para Players e Criaturas Específicas TFS 0.4.0   
    Salve, pessoas.
     
    Recentemente criei esse script para meu servidor particular e, embora simples, dá uma margem legal para a criatividade de vocês. Trata-se de um script para dar uma função especial a uma weapon qualquer do seu servidor quando você enfrenta uma criatura específica (ou mesmo um tipo de criatura).
     
    Para isso utilizarmos uma função que pega o nome da criatura que você está atacando e verifica se ela pertence à sua tabela de verificação. Caso positivo, sua arma agirá de um modo diferente contra essa criatura específica.
     
    O feitio é simples: criar um script no diretório .../weapons/scripts com o nome à sua escolha. Ex: "nome.lua" 
     
    Darei primeiro o conteúdo do meu script como exemplo:
     
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, 0, 1.0, 0) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat2, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat2, COMBAT_FORMULA_SKILL, 2.0, 0, 2.0, 0) local creatures = {"x", "y", "z"} function onUseWeapon(cid, var) local target = getCreatureTarget(cid) local nome = getCreatureName(target) if (not isInArray (creatures, nome)) then doCombat(cid, combat, var) else doCombat(cid, combat2, var) end end  
    Explicando o código: combat e combat2 são, respectivamente, os diferentes efeitos que eu desejo que minha arma tenha, e aqui podemos configurar uma série de possibilidades diferentes.
     
    No caso, "combat" está configurado para que seja uma arma normal como qualquer outra.
    O "combat2" está configurado para que esta arma dê um dano x2 (listado na fórmula)
     
    Obs: nesta parte podemos brincar com as fórmulas e o tipo de dano conforme o gosto. Podemos adicionar um efeito secundário de algum elemento, como fogo, gelo, ou mesmo um lifedrain. Só não se esqueça de balancear a fórmula.

     
    IMPORTANTE: "Creatures" é onde vou listar as criaturas para as quais quero que minha arma tenha um comportamento diferente, separadas por vírgula.
     
    Dentro da função onUseWeapon temos um código que será executado ao utilizarmos a arma em questão para um ataque. Em "target" verificamos qual a criatura alvo do meu ataque, em seguida "nome" recebe o valor do nome da criatura em questão e temos uma condicional (if) que verifica se o nome da criatura que estamos atacando está inserida em "Creatures". Caso não esteja, ela assumirá o comportamento de "combat", ou seja, será uma arma com a fórmula e dano físico padrão do servidor; caso o nome esteja na minha lista especial, a arma assumirá "Combar2" e terá uma fórmula de dano x2, será uma arma poderosa contra essa criatura listada.
     
    Uma vez feito o script, não se esqueça de registrá-lo na arma de sua preferência no weapons.xml.
    Ex: 
    <melee id="2397" event="script" value="nome.lua">  
    Algumas ideias de como você pode utilizar a base do código:
     
    - Quests e bosses; podemos fazer um boss que só seja derrotado com uma arma específica, por exemplo. 
    - Podemos brincar com mais recursos, como getPlayerVocation ou getPlayerLevel e com mais condicionais fazer armas que só liberem seu poder oculto nas mãos de alguma vocação, em um certo level, contra um tipo de criatura, etc.
    - Eu utilizei no meu servidor que é baseado em Dungeons & Dragons para fazer com que mortos vivos tomem dano integral de ataques com club mas tomem metade do dano contra ataques de sword/axe (neste universo mortos-vivos são melhor esmagados do que cortados ou perfurados).
     
    Enfim, um exemplo prático: crio uma quest com a recompensa de uma espada conhecida por "exterminar dragões". Registro no weapons.xml esta arma com um script.lua do meu gosto, como:
     
     
    local combat = createCombatObject() setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1) setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 1) setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE) setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1.0, 0, 1.0, 0) local combat2 = createCombatObject() setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_LIFEDRAIN) setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_RED) setCombatFormula(combat2, COMBAT_FORMULA_SKILL, 0, -60, 0, -90) local creatures = {"Dragon", "Dragon Lord", "Frost Dragon"} function onUseWeapon(cid, var) local target = getCreatureTarget(cid) local nome = getCreatureName(target) if (not isInArray (creatures, nome)) then doCombat(cid, combat, var) else doCombat(cid, combat, var) doCombat(cid, combat2, var) end end Neste caso coloquei para, no caso de ser um dos dragões listados, ocorrer tanto o combat como o combat2, ou seja, a espada não só atacar como também drenar uma certa quantidade de vida da criatura (60-90). E no resto do tempo, ela será uma espada normal.
     
    É isso ai, espero ter contribuído.
    Até a próxima.
     
     
     
  7. Curtir
    rohfagundes deu reputação a xWhiteWolf em Serialize/Unserialize Strings to Number   
    Fala rapeize, eu me propus um desafio de criar uma forma de transformar uma string em números que possam ser anexados no storage.
    Basicamente isso resolve o problema dos TFS anteriores de não conseguir salvar nomes de personagens no storage sem ter que fazer source editing.
    PS: É óbvio que é mais fácil fazer source editing, mas o desafio era esse e como não é todo mundo que tem source tb pode ser bastante útil.

    Eu não fechei o código certinho em funções, mas pretendo fazer em breve (agora preciso dormir) e aí eu edito o tópico aqui.
    Nos testes q eu fiz ele conseguiu serializar e deserializar 5 mil caracteres em 0,01 segundo o que provavelmente faz dele o melhor serializador do gênero xD

    Limitações: Ele só funciona com um range bem específico de strings, se vc quiser serializar qualquer outra coisa procure um serializador na internet.

    Ele é capaz de processar tudo que tá dentro do retangulo vermelho

    Ele só funciona com NO MÁXIMO +- 8k de caracteres, se vc quiser mais que isso vai precisar trocar a função table.concat e talvez umas outras coisinhas

    O que ele faz: Transforma qualquer texto num numero, divide esse número em espaços de 32 bits e nas posições da memória consecutivas (no exemplo eu to usando uma tabela, mas poderia ser num storage, por ex). Depois ele ainda é capaz de retornar a string original a partir do serial gerado.

    Funcionamento: por incrivel q pareça a lógica é bem simples, pega o código ascii de cada caractere da string, subtrai 21 para deixar o numero menor (21 é o máximo que a gente consegue encurtar pq 32 - 21 é 11 e 127 - 21 é 106, aí se eu lê-se 10 eu não saberia dizer se é o código do espaço ou dos 5 ultimos ali da tabela)

    Os storages são int_32 então o maior valor q eu consigo colocar dentro de um storage é 2^31 - 1, aí tudo q eu faço é ir pegando os 10 ultimos numeros e vendo se eles cabem dentro desse limite máximo, se não couber eu pego os 9 ultimos, até caber dentro do limite. Aí eu jogo pra tabela e contabilizo quantas vezes eu to fazendo isso (isso vai ser importante depois qnd formos inserir ou pegar do storage)
    Como eu já li os lines ultimos numeros da string, eu posso retirar eles e refazer o processo até não restar mais nada.
    No final dentro da tabela tb vc vai ter no i o numero q vc soma no storage e no v o valor que deve ir pro storage.

    Pra deserializar o processo é parecido, primeiro eu percorro a tabela concatenando os numeros na ordem inversa e depois vou vendo 2 a 2 se o numero é menor que 11 (nosso menor código ascii que representaria o espaço, lembrando que removemos 21 para encurtar). Se ele for menor então significa que estamos lidando com um dos ultimos numeros da tabela (10X), nesse caso temos que ler 3 numeros ao invés de só 2. Depois de passar tudo pra caractere e concatenar, nos é retornado a string inicial.


    Código:
     


    Quem quiser testar é só modificar a variável entrada pra qualquer texto que vc quiser e dar run. O resultado aparece na tela a direita.
    https://repl.it/repls/LongtermVioletTakin
  8. Curtir
    rohfagundes deu reputação a xWhiteWolf em Serialize/Unserialize Strings to Number   
    Pra quem quiser a versão como função:
     

    https://repl.it/repls/LongtermVioletTakin
  9. Curtir
    rohfagundes recebeu reputação de narutomaniacos em Variação de Dano Reformulada(Source)   
    Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
     
    • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
     
    • Em weapons.ccp procure por:
     



     
    Nessa parte:
    int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
    int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
     
     
    • Agora para editar o dano de arma, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
     
    • Agora dano de arma elemental, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL);   Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo   • Agora distance, procure:  
  10. Curtir
    rohfagundes recebeu reputação de mimilon0202 em Variação de Dano Reformulada(Source)   
    Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
     
    • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
     
    • Em weapons.ccp procure por:
     



     
    Nessa parte:
    int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
    int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
     
     
    • Agora para editar o dano de arma, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
     
    • Agora dano de arma elemental, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL);   Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo   • Agora distance, procure:  
  11. Curtir
    rohfagundes recebeu reputação de luisrsousa em Variação de Dano Reformulada(Source)   
    Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
     
    • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
     
    • Em weapons.ccp procure por:
     



     
    Nessa parte:
    int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
    int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
     
     
    • Agora para editar o dano de arma, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
     
    • Agora dano de arma elemental, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL);   Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo   • Agora distance, procure:  
  12. Curtir
    rohfagundes recebeu reputação de seminu em Variação de Dano Reformulada(Source)   
    Ola, atualmente a variação de dano é enorme e não importa qual arma você usa e quanto de skill você tem, na formula o dano minimo é sempre 0. Então vou mostrar pra vocês onde pode ser editado para resolver esse problema
     
    • Versão - Otx 2(final) -- Baseado na Tfs 0.3.7
     
    • Em weapons.ccp procure por:
     



     
    Nessa parte:
    int32_t damage = -random_range(0, (int32_t)maxDamage, DISTRO_NORMAL); Troque por:
    int32_t damage = -random_range((int32_t)maxDamage/2, (int32_t)maxDamage, DISTRO_NORMAL); Sendo assim o dano de fist tera uma variedade de danomaximo/2 a danomaximo
     
     
    • Agora para editar o dano de arma, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL); Sendo assim o dano de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo
     
    • Agora dano de arma elemental, procure:
     


      Nessa parte: return -random_range(0, ret, DISTRO_NORMAL);   Troque por: return -random_range(ret/2, ret, DISTRO_NORMAL);   Sendo assim o dano elemental de (sword,axe e club) terá uma variedade de danomaximo/2 a danomaximo   • Agora distance, procure:  
  13. Gostei
    rohfagundes deu reputação a lorenzo2014 em fecha   
    .
  14. Gostei
    rohfagundes deu reputação a lorenzo2014 em fecha   
    fecha
  15. Gostei
    rohfagundes deu reputação a Golf em (Show-Off) Atributos Bar Avatar   
    Bem, estou desenvolvendo um sistema de distribuição de pontos, baseado em um projeto que vi...
    *Esta todo funcional*

  16. Gostei
    rohfagundes recebeu reputação de tataboy67 em [C++] Color Name [DigiWo]   
    n estou em casa agora
    pede la no topic para arrumarem o link
  17. Gostei
    rohfagundes recebeu reputação de tataboy67 em [C++] Color Name [DigiWo]   
  18. Gostei
    rohfagundes recebeu reputação de tataboy67 em [C++] Color Name [DigiWo]   
    cara é na source do cliente
    vc esta procurando na do servidor
  19. Gostei
    rohfagundes recebeu reputação de tataboy67 em [C++] Color Name [DigiWo]   
    arquivo creature.cpp da source do client tem sim
    vc esta procurando errado
  20. Gostei
    rohfagundes recebeu reputação de L3K0T em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  21. Gostei
    rohfagundes recebeu reputação de DarkWore em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  22. Gostei
    rohfagundes recebeu reputação de Saymon Kopolsky em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  23. Gostei
    rohfagundes recebeu reputação de Vodkart em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  24. Gostei
    rohfagundes recebeu reputação de Pedriinz em [C++] Color Monster   
    Ola, tinha umas pessoas pedindo para eu mostrar aonde muda a cor do monstro
    então resolvi criar um tópico para mostrar, vamos la.
    na source do cliente
    va no arquivo creature.cpp
    procure por:
    void Creature::internalDrawOutfit(Point dest, float scaleFactor, bool animateWalk, bool animateIdle, Otc::Direction direction, LightView *lightView) dentro dessa funçao ache isso:
    g_painter->setColor(m_outfitColor); logo abaixo add isso:
    if (isMonster() && m_name == "Demon") g_painter->setColor(Color::orange); if (isMonster() && m_name == "Dragon") g_painter->setColor(Color::teal);  
    pronto 
    todos os demons e dragons vão estar com cor diferente
    imagem:

     
    ps: no tópico eu editei para pegar o nome do monstro
    pq no meu ele pega outra informação q n vai ter no ot de vcs
     
    edit:
    as cores disponíveis:
    const Color Color::alpha = 0x00000000U; const Color Color::white = 0xffffffff; const Color Color::black = 0xff000000; const Color Color::red = 0xff0000ff; const Color Color::darkRed = 0xff000080; const Color Color::green = 0xff00ff00; const Color Color::darkGreen = 0xff008000; const Color Color::blue = 0xffff0000; const Color Color::darkBlue = 0xff800000; const Color Color::pink = 0xffff00ff; const Color Color::darkPink = 0xff800080; const Color Color::yellow = 0xff00ffff; const Color Color::darkYellow = 0xff008080; const Color Color::teal = 0xffffff00; const Color Color::darkTeal = 0xff808000; const Color Color::gray = 0xffa0a0a0; const Color Color::darkGray = 0xff808080; const Color Color::lightGray = 0xffc0c0c0; const Color Color::orange = 0xff008cff;  
  25. Gostei
    rohfagundes deu reputação a otaviogfl em Pet/Pokemon Hp/Exp Bar   
    Barra de Hp que fiz no começo do ano passado.
    A barra de exp é aquela verde ai sempre tive a vontade de fazer uma circular.

Informação Importante

Confirmação de Termo