• TibiaFace

    Tibiaface | Una comunidad Open Tibia donde encontras : mapas, scripts, Otserver, npc y amigos etc ...

    .
    demo menumenu

    Afiliados



    Votar:

    Signo de "-" en Damage

    Compartir:

    Ver el tema anterior Ver el tema siguiente Ir abajo  Mensaje (Página 1 de 1.)

    1default Signo de "-" en Damage el Vie Mayo 29, 2020 11:55 pm

    Phemus

    Phemus
    Nuevo Miembro
    Nuevo Miembro
    Como puedo configurar las sources de OTX 2.12 para que cuando un player o monster pierde vida salga el signo de "-" antes del damage. Aqui una foto como ejemplo:
    Signo de "-" en Damage Sign

    Gracias de antemano!

    2default Re: Signo de "-" en Damage el Sáb Mayo 30, 2020 8:07 am

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    hay que modificar game.cpp

    (buffer, "%d", damage);

    añadirle un signo -

    Código:
    (buffer, "-%d", damage);

    en mana demage lo mismo

    (buffer, "%d", manaDamage);

    a

    Código:
    (buffer, "-%d", manaDamage);



    Signo de "-" en Damage YNU5B25
    https://www.tibiaface.com

    3default Re: Signo de "-" en Damage el Sáb Mayo 30, 2020 10:50 pm

    Phemus

    Phemus
    Nuevo Miembro
    Nuevo Miembro
    Pero el game.cpp de OTX 2.12 "Open Tibia" es diferente al TFS 0.4. No se exactamente en que linea agregar eso. Si veo que cuando agregas mana/health está el +mana/healthchange con el "+%d", pero no entiendo cuando es damage. Si me podrias decir en que linea agregar eso, te lo agradeceria.

    Gracias.

    4default Re: Signo de "-" en Damage el Dom Mayo 31, 2020 10:31 am

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    [Tienes que estar registrado y conectado para ver este vínculo] escribió:Pero el game.cpp de OTX 2.12 "Open Tibia" es diferente al TFS 0.4. No se exactamente en que linea agregar eso. Si veo que cuando agregas mana/health está el +mana/healthchange con el "+%d", pero no entiendo cuando es damage. Si me podrias decir en que linea agregar eso, te lo agradeceria.

    Gracias.

    como que nooo ahi dice demage



    Signo de "-" en Damage YNU5B25
    https://www.tibiaface.com

    5default Re: Signo de "-" en Damage el Vie Jun 26, 2020 12:40 pm

    Phemus

    Phemus
    Nuevo Miembro
    Nuevo Miembro
    Este es el game.cpp del OTX Server 2.12 :: Version " OpenTibia "

    [Tienes que estar registrado y conectado para ver este vínculo]

    No tiene los buffer para el damage y el manaDamage

    6default Re: Signo de "-" en Damage el Vie Jun 26, 2020 5:55 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    cambia estas 2 funciones en tu game.cpp

    Código:

    bool Game::combatChangeHealth(const CombatParams& params, Creature* attacker, Creature* target, int32_t healthChange, bool force)
    {
       const Position& targetPos = target->getPosition();
       if(healthChange > 0)
       {
          if(!force && target->getHealth() <= 0)
             return false;

          bool deny = false;
          CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
          for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
          {
             if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_HEALTHGAIN, params.combatType, healthChange))
                deny = true;
          }

          if(deny)
             return false;

          int32_t oldHealth = target->getHealth();
          target->gainHealth(attacker, healthChange);
          if(oldHealth != target->getHealth() && g_config.getBool(ConfigManager::SHOW_HEALTH_CHANGE) && !target->isGhost() &&
             (g_config.getBool(ConfigManager::SHOW_HEALTH_CHANGE_MONSTER) || !target->getMonster()))
          {
             const SpectatorVec& list = getSpectators(targetPos);
             if(params.combatType != COMBAT_HEALING)
                addMagicEffect(list, targetPos, MAGIC_EFFECT_WRAPS_BLUE);

             SpectatorVec textList;
             for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
             {
                if(!(*it)->getPlayer())
                   continue;

                if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
                   textList.push_back(*it);
             }

             healthChange = (target->getHealth() - oldHealth);
             std::string plural = (healthChange != 1 ? "s." : ".");

             std::stringstream ss;
             char buffer[20];
             sprintf(buffer, "+%d", healthChange);
             addAnimatedText(list, targetPos, COLOR_MAYABLUE, buffer);
             if(!textList.empty())
             {
                if(!attacker)
                   ss << ucfirst(target->getNameDescription()) << " is healed for " << healthChange << " hitpoint" << plural;
                else if(attacker != target)
                   ss << ucfirst(attacker->getNameDescription()) << " heals " << target->getNameDescription() << " for " << healthChange << " hitpoint" << plural;
                else
                {
                   ss << ucfirst(attacker->getNameDescription()) << " heals ";
                   if(Player* attackerPlayer = attacker->getPlayer())
                      ss << (attackerPlayer->getSex(false) == PLAYERSEX_FEMALE ? "herself" : "himself") << " for " << healthChange << " hitpoint" << plural;
                   else
                      ss << "itself for " << healthChange << " hitpoint" << plural;
                }

                addStatsMessage(textList, MSG_HEALED_OTHERS, ss.str(), targetPos);
                ss.str("");
             }

             Player* player = NULL;
             if(attacker && (player = attacker->getPlayer()))
             {
                if(attacker != target)
                   ss << "You healed " << target->getNameDescription() << " for " << healthChange << " hitpoint" << plural;
                else
                   ss << "You healed yourself for " << healthChange << " hitpoint" << plural;

                player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos);
                ss.str("");
             }

             if((player = target->getPlayer()) && attacker != target)
             {
                if(attacker)
                   ss << ucfirst(attacker->getNameDescription()) << " heals you for " << healthChange << " hitpoint" << plural;
                else
                   ss << "You are healed for " << healthChange << " hitpoint" << plural;

                player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos);
             }
          }
       }
       else
       {
          const SpectatorVec& list = getSpectators(targetPos);
          if(target->getHealth() < 1 || Combat::canDoCombat(attacker, target, true) != RET_NOERROR)
          {
             addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
             return true;
          }

          int32_t elementDamage = 0;
          if(params.element.damage && params.element.type != COMBAT_NONE)
             elementDamage = -params.element.damage;

          int32_t damage = -healthChange;
          if(damage > 0)
          {
             if(target->hasCondition(CONDITION_MANASHIELD) && params.combatType != COMBAT_UNDEFINEDDAMAGE)
             {
                int32_t manaDamage = std::min(target->getMana(), damage + elementDamage);
                damage = std::max((int32_t)0, damage + elementDamage - manaDamage);

                elementDamage = 0; // TODO: I don't know how it works ;(
                if(manaDamage && combatChangeMana(attacker, target, -manaDamage, params.combatType, true))
                   addMagicEffect(list, targetPos, MAGIC_EFFECT_LOSE_ENERGY);
             }

             damage = std::min(target->getHealth(), damage);
             if(damage > 0)
             {
                bool deny = false;
                CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
                for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
                {
                   if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_HEALTHLOSS, params.combatType, damage))
                      deny = true;
                }

                if(deny)
                   return false;

                target->drainHealth(attacker, params.combatType, damage);
                if(elementDamage)
                   target->drainHealth(attacker, params.element.type, elementDamage);

                Color_t textColor = COLOR_NONE;
                MagicEffect_t magicEffect = MAGIC_EFFECT_NONE;

                addCreatureHealth(list, target);
                if(params.combatType == COMBAT_PHYSICALDAMAGE)
                {
                   Item* splash = NULL;
                   switch(target->getRace())
                   {
                      case RACE_VENOM:
                         textColor = COLOR_LIGHTGREEN;
                         magicEffect = MAGIC_EFFECT_POISON;
                         splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_GREEN);
                         break;

                      case RACE_BLOOD:
                         textColor = COLOR_RED;
                         magicEffect = MAGIC_EFFECT_DRAW_BLOOD;
                         splash = Item::CreateItem(ITEM_SMALLSPLASH, FLUID_BLOOD);
                         break;

                      case RACE_UNDEAD:
                         textColor = COLOR_GREY;
                         magicEffect = MAGIC_EFFECT_HIT_AREA;
                         break;

                      case RACE_FIRE:
                         textColor = COLOR_ORANGE;
                         magicEffect = MAGIC_EFFECT_DRAW_BLOOD;
                         break;

                      case RACE_ENERGY:
                         textColor = COLOR_PURPLE;
                         magicEffect = MAGIC_EFFECT_PURPLEENERGY;
                         break;

                      default:
                         break;
                   }

                   if(splash)
                   {
                      internalAddItem(NULL, target->getTile(), splash, INDEX_WHEREEVER, FLAG_NOLIMIT);
                      startDecay(splash);
                   }
                }
                else
                   getCombatDetails(params.combatType, magicEffect, textColor);

                if(params.effects.hit != MAGIC_EFFECT_UNKNOWN)
                   magicEffect = params.effects.hit;

                if(params.effects.color != COLOR_UNKNOWN)
                   textColor = params.effects.color;

                if(textColor < COLOR_NONE && magicEffect < MAGIC_EFFECT_NONE)
                {
                   addMagicEffect(list, targetPos, magicEffect);
                   SpectatorVec textList;
                   for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
                   {
                      if(!(*it)->getPlayer())
                         continue;

                      if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
                         textList.push_back(*it);
                   }

                   
                   if(elementDamage)
                   {
                      getCombatDetails(params.element.type, magicEffect, textColor);
                      addMagicEffect(list, targetPos, magicEffect);
                   }

                   std::stringstream ss;
                   char buffer[20];
     sprintf(buffer, "-%d", damage);
    addAnimatedText(list, targetPos, textColor, buffer);
                   int32_t totalDamage = damage + elementDamage;

                   std::string plural = (totalDamage != 1 ? "s" : "");
                   if(!textList.empty())
                   {
                      if(!attacker)
                         ss << ucfirst(target->getNameDescription()) << " loses " << totalDamage << " hitpoint" << plural << ".";
                      else if(attacker != target)
                         ss << ucfirst(target->getNameDescription()) << " loses " << totalDamage << " hitpoint" << plural << " due to an attack by " << attacker->getNameDescription() << ".";
                      else
                         ss << ucfirst(target->getNameDescription()) << " loses " << totalDamage << " hitpoint" << plural << " due to a self attack.";

                      addStatsMessage(textList, MSG_DAMAGE_OTHERS, ss.str(), targetPos);
                      ss.str("");
                   }

                   Player* player = NULL;
                   if(attacker && (player = attacker->getPlayer()))
                   {
                      if(attacker != target)
                         ss << ucfirst(target->getNameDescription()) << " loses " << totalDamage << " hitpoint" << plural << " due to your attack.";
                      else
                         ss << "You lose " << totalDamage << " hitpoint" << plural << " due to your attack.";

                      player->sendStatsMessage(MSG_DAMAGE_DEALT, ss.str(), targetPos);
                      ss.str("");
                   }

                   if((player = target->getPlayer()) && attacker != target)
                   {
                      if(attacker)
                         ss << "You lose " << totalDamage << " hitpoint" << plural << " due to an attack by " << attacker->getNameDescription() << ".";
                      else
                         ss << "You lose " << totalDamage << " hitpoint" << plural << ".";

                      player->sendStatsMessage(MSG_DAMAGE_RECEIVED, ss.str(), targetPos);
                   }

             
                }
             }
          }
       }

       return true;
    }

    bool Game::combatChangeMana(Creature* attacker, Creature* target, int32_t manaChange,
       CombatType_t combatType/* = COMBAT_MANADRAIN*/, bool inherited/* = false*/)
    {
       const Position& targetPos = target->getPosition();
       if(manaChange > 0)
       {
          bool deny = false;
          CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
          for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
          {
             if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANAGAIN, COMBAT_HEALING, manaChange))
                deny = true;
          }

          if(deny)
             return false;

          int32_t oldMana = target->getMana();
          target->changeMana(manaChange);
          if(oldMana != target->getMana() && g_config.getBool(ConfigManager::SHOW_MANA_CHANGE) && !target->isGhost() &&
             (g_config.getBool(ConfigManager::SHOW_MANA_CHANGE_MONSTER) || !target->getMonster()))
          {
             const SpectatorVec& list = getSpectators(targetPos);

             SpectatorVec textList;
             for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
             {
                if(!(*it)->getPlayer())
                   continue;

                if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
                   textList.push_back(*it);
             }

             manaChange = (target->getMana() - oldMana);
             std::string plural = (manaChange != 1 ? "s." : ".");

             std::stringstream ss;
             char buffer[20];
             sprintf(buffer, "+%d", manaChange);
             addAnimatedText(list, targetPos, COLOR_DARKPURPLE, buffer);
             if(!textList.empty())
             {
                if(!attacker)
                   ss << ucfirst(target->getNameDescription()) << " is regenerated with " << manaChange << " mana" << plural;
                else if(attacker != target)
                   ss << ucfirst(attacker->getNameDescription()) << " regenerates " << target->getNameDescription() << " with " << manaChange << " mana" << plural;
                else
                {
                   ss << ucfirst(attacker->getNameDescription()) << " regenerates ";
                   if(Player* attackerPlayer = attacker->getPlayer())
                      ss << (attackerPlayer->getSex(false) == PLAYERSEX_FEMALE ? "herself" : "himself") << " with " << manaChange << " mana" << plural;
                   else
                      ss << "itself with " << manaChange << " mana" << plural;
                }

                addStatsMessage(textList, MSG_HEALED_OTHERS, ss.str(), targetPos);
                ss.str("");
             }

             Player* player = NULL;
             if(attacker && (player = attacker->getPlayer()))
             {
                if(attacker != target)
                   ss << "You regenerate " << target->getNameDescription() << " with " << manaChange << " mana" << plural;
                else
                   ss << "You regenerate yourself with " << manaChange << " mana" << plural;

                player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos);
                ss.str("");
             }

             if((player = target->getPlayer()) && attacker != target)
             {
                if(attacker)
                   ss << ucfirst(attacker->getNameDescription()) << " regenerates you with " << manaChange << " mana" << plural;
                else
                   ss << "You are regenerated with " << manaChange << " mana" << plural;

                player->sendStatsMessage(MSG_HEALED, ss.str(), targetPos);
             }
          }
       }
       else if(!inherited && Combat::canDoCombat(attacker, target, true) != RET_NOERROR)
       {
          const SpectatorVec& list = getSpectators(targetPos);
          addMagicEffect(list, targetPos, MAGIC_EFFECT_POFF);
          return false;
       }
       else
       {
          int32_t manaLoss = std::min(target->getMana(), -manaChange);
          if(manaLoss > 0)
          {
             bool deny = false;
             CreatureEventList statsChangeEvents = target->getCreatureEvents(CREATURE_EVENT_STATSCHANGE);
             for(CreatureEventList::iterator it = statsChangeEvents.begin(); it != statsChangeEvents.end(); ++it)
             {
                if(!(*it)->executeStatsChange(target, attacker, STATSCHANGE_MANALOSS, combatType, manaLoss))
                   deny = true;
             }

             if(deny)
                return false;

             target->drainMana(attacker, combatType, manaLoss);
             const SpectatorVec& list = getSpectators(targetPos);

             SpectatorVec textList;
             for(SpectatorVec::const_iterator it = list.begin(); it != list.end(); ++it)
             {
                if(!(*it)->getPlayer())
                   continue;

                if((*it) != attacker && (*it) != target && (*it)->getPosition().z == target->getPosition().z)
                   textList.push_back(*it);
             }

             std::stringstream ss;
                 char buffer[20];
        sprintf(buffer, "-%d", manaLoss);
        addAnimatedText(list, targetPos, COLOR_BLUE, buffer);
             if(!textList.empty())
             {
                if(!attacker)
                   ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana.";
                else if(attacker != target)
                   ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to an attack by " << attacker->getNameDescription();
                else
                   ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to a self attack.";

                    addStatsMessage(textList, MSG_DAMAGE_OTHERS, ss.str(), targetPos);
                ss.str("");
             }

             Player* player;
             if(attacker && (player = attacker->getPlayer()))
             {
                if(attacker != target)
                   ss << ucfirst(target->getNameDescription()) << " loses " << manaLoss << " mana due to your attack.";
                else
                   ss << "You lose " << manaLoss << " mana due to your attack.";

                    player->sendStatsMessage(MSG_DAMAGE_DEALT, ss.str(), targetPos);
                ss.str("");
             }

             if((player = target->getPlayer()) && attacker != target)
             {
                if(attacker)
                   ss << "You lose " << manaLoss << " mana due to an attack by " << attacker->getNameDescription();
                else
                   ss << "You lose " << manaLoss << " mana.";

                    player->sendStatsMessage(MSG_DAMAGE_RECEIVED, ss.str(), targetPos);
             }

             
          }
       }

       return true;
    }



    Signo de "-" en Damage YNU5B25
    https://www.tibiaface.com

    7default Re: Signo de "-" en Damage el Vie Jun 26, 2020 10:42 pm

    Phemus

    Phemus
    Nuevo Miembro
    Nuevo Miembro
    Al compilar me da este error.

    Signo de "-" en Damage Capture

    8default Re: Signo de "-" en Damage el Vie Jun 26, 2020 11:05 pm

    Phemus

    Phemus
    Nuevo Miembro
    Nuevo Miembro
    EDIT: Ya resolvi el problema. Cambie la línea que daba el error a
    Código:
    textList.insert(*it);

    Gracias por tu ayuda!

    Contenido patrocinado


    Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje (Página 1 de 1.)

    Permisos de este foro:
    No puedes responder a temas en este foro.

     

    BienvenidosTibiaFace es una comunidad de Open Tibia. Para participar debes estar registrado (click para Regístrate).