• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Pedido] [Pedido] Signo de negativo en perdida de daño

    Compartir:

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

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    Que tal como estan amigos de TF, Vengo a realizar un pedido el como puedo configurar en mi ot para que la perdida de daño se agregue el signo de menos.

    tengo entendido que eso se edita en las sources game.cpp .

    Utilizo la consola otx 2.15+ 8.6

    dejo mi game.cpp
    [Tienes que estar registrado y conectado para ver este vínculo]

    Saludos y gracias!
    Captura del Error escribió:Imagen del error: [Pedido] [Pedido] Signo de negativo en perdida de daño Empty
    La config. radica en: Consola

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    eso es en player.cpp y lo podras encontrar en esta distribucion

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

    vienen con sus sources busca en player.cpp



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    [Pedido] [Pedido] Signo de negativo en perdida de daño Errors11

    me sale este error al compilar y tengo entendio que es esta parte:

    Código:

             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("");
             }

    Código:

                   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("");
                   }

    eso fue lo que implemente, sin embargo me sale ese error de compilación

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    pues no tienes que implementar nada dejame que edite tus player.cpp pasamelo



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    aqui esta el game.cpp:

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

    y aqui el player.cpp
    [Tienes que estar registrado y conectado para ver este vínculo]

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    aqui tienes tu game.cpp solo era ese que habia que modificar

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



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    sigue saliendo este error

    [Pedido] [Pedido] Signo de negativo en perdida de daño S10

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    es game.cpp que me pasaste es el sin editar



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    asi es, sin editar, ya que lo volvi a compilar de nuevo regresando al archivo sin editar y ningun error

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    prueba este

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



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    mismo error Sad

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    si e sigue dando error reemplace estas dos funciones

    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;
    }



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    Al colocar ese código, me asegure de que lo haya copiado bien y al compilarlo sale este montón de errores :v

    [Pedido] [Pedido] Signo de negativo en perdida de daño Eror_210

    2 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    pues no veo que mas pueda ser quisas en linux no funcione aquello estoy suponiendo



    [Pedido] [Pedido] Signo de negativo en perdida de daño YNU5B25
    2 participantes
    http://www.tibiaface.com

    Miguel Albertto

    Miguel Albertto
    Miembro
    Miembro
    pero es windows, no linux Sad

    2 participantes

    Contenido patrocinado


    2 participantes

    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).