• TibiaFace

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

    .
    demo menumenu

    Afiliados



    Votar:

    [Codigo] Get Damage Map Percent TFS 0.4

    Compartir:

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

    1[Codigo] Get Damage Map Percent TFS 0.4 Empty [Codigo] Get Damage Map Percent TFS 0.4 Jue Ene 13, 2022 4:48 pm

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    hola usuarios de Tibiaface

    Hola chicos les dejo una funcion muy buscada por varios servidores que usan como base la PDA Open Source , el getDamageMapPercent(cid,pid) que sirve para calcular el daño del jugador y su summon!


    En luascript.cpp busque getCreatureStorage y agregue a continuación:

    Código:

     //getDamageMapPercent(cid, pid)
        lua_register(m_luaState, "getDamageMapPercent", LuaScriptInterface::luaGetDamageMapPercent);

    Todavía en luascript.cpp busque:

    Código:

    int32_t LuaScriptInterface::luaGetCreatureStorage(lua_State* L)

    Y agregue debajo del final de la misma:

    Código:

    int32_t LuaScriptInterface::luaGetDamageMapPercent(lua_State* L)
    {
        // getDamageMapPercent(cid, pid)
        ScriptEnviroment* env = getEnv();
        Creature* pid = env->getCreatureByUID(popNumber(L)); //attacker
        Creature* cid = env->getCreatureByUID(popNumber(L)); //cid
        if (!pid->getMonster() || !cid->getPlayer()){
            lua_pushnumber(L,0);
            return 1;
        }
        if (cid && pid){
            std::string name = cid->getName();
            if (pid->getMonster()->damageMap[name])
            {
                double ret = (pid->getMonster()->damageMap[name] + 0.0) / (pid->getMaxHealth() + 0.0);
                lua_pushnumber(L, ret);
            }
            else
            {
                lua_pushnumber(L, 0);
            }
            } else{
            //não achou alguem
            errorEx(getError(LUA_ERROR_CREATURE_NOT_FOUND));
            lua_pushnumber(L, 0);
        }
        return 1;
    }

    En luascript.h busca:

    Código:

    static int32_t luaGetCreatureStorage(lua_State* L);

    Y añade a continuación:

    Código:

    static int32_t luaGetDamageMapPercent(lua_State* L);

    en creature.h busque:

    Código:

    typedef std::map<uint32_t, CountBlock_t> CountMap;

    abajo agregue

    Código:

    CountMap damageMap;

    en monster.cpp busque:

    Código:

    Monster::Monster(MonsterType* _mType):

    abajo de raid = NULL adicione:

    Código:

    damageMap;

    en monster.cpp busque:

    Código:
    void Monster::onAttackedCreatureDisappear(bool isLogout)

    abajo de esa funcion agregue:

    Código:

    void Monster::doRegisterDamageMap(Creature* player, int32_t damage){
        if (damage <=0)
        return;
        if (damage > this->getMaxHealth())
        damage = this->getMaxHealth();
        std::string name = player->getName();
        if (damageMap[name]){               
            damageMap[name] += damage;
            }else{                           
            damageMap[name] = damage;
        }
    }

    en monster.h busque:

    Código:

    class Monster : public Creature
    {

    y abajo de public agregue:

    Código:

    std::map <std::string, int32_t> damageMap;

    en monster.h busque

    Código:

    void setRaid(Raid* _raid) {raid = _raid;}

    abajo agregue esto:

    Código:

    void doRegisterDamageMap(Creature* player, int32_t damage);

    en player.cpp busque:

    Código:
    void Player::onAttackedCreatureDrain(Creature* target, int32_t points)

    cambiar esa funcion por esta

    Código:

    void Player::onAttackedCreatureDrain(Creature* target, int32_t points)
    {
        Creature::onAttackedCreatureDrain(target, points);
        if(party && target && (!target->getMaster() || !target->getMaster()->getPlayer())
            && target->getMonster() && target->getMonster()->isHostile()) //we have fulfilled a requirement for shared experience
            getParty()->addPlayerDamageMonster(this, points);

        char buffer[100];
        if (target->getMonster()){
            target->getMonster()->doRegisterDamageMap(this, points);
        }   
        sprintf(buffer, "Your summon dealt %d damage to %s.", points, target->getNameDescription().c_str());
        sendTextMessage(MSG_STATUS_DEFAULT, buffer);
    }

    creditos: Underewar



    [Codigo] Get Damage Map Percent TFS 0.4 YNU5B25
    3 participantes
    http://www.tibiaface.com

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    Para 1.XX la tendran? 1.3...

    3 participantes

    [Admin] God Maya

    [Admin] God Maya
    Administrador
    Administrador
    SoyFabi escribió:Para 1.XX la tendran? 1.3...

    por defecto ya tiene integrada esa funcion tfs 1.3 por usa el reward sytem para lo boses



    [Codigo] Get Damage Map Percent TFS 0.4 YNU5B25
    3 participantes
    http://www.tibiaface.com

    anthonyx22

    anthonyx22
    Nuevo Miembro
    Nuevo Miembro
    Cómo lo haría para un tfs 0.4? Y cómo se aplicaría el código?

    3 participantes

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    anthonyx22 escribió:Cómo lo haría para un tfs 0.4? Y cómo se aplicaría el código?

    Si el codigo es para 0.4 [Codigo] Get Damage Map Percent TFS 0.4 1f601

    3 participantes

    anthonyx22

    anthonyx22
    Nuevo Miembro
    Nuevo Miembro
    Podría darme un ejemplo de cómo aplicar a este código?
    Por ejemplo, mi servidor usa magdamage como la fuerza principal. Quería saber cómo lo aplicaría, por ejemplo.

    function onAdvance(cid, skill, oldlevel, newlevel)
    local level = 1
    local diminuirmagdamage = 0.5
    local storage = 1111

    if getPlayerLevel(cid) == level and getPlayerStorageValue(cid,storage) == -1 then
    doMagDamage(cid,getCreatureMagDamage(cid)-diminuirmagdamage)
    setPlayerStorageValue(cid,storage, 1)
    end
    end

    3 participantes

    SoyFabi

    SoyFabi
    Miembro
    Miembro
    anthonyx22 escribió:Podría darme un ejemplo de cómo aplicar a este código?
    Por ejemplo, mi servidor usa magdamage como la fuerza principal. Quería saber cómo lo aplicaría, por ejemplo.

    function onAdvance(cid, skill, oldlevel, newlevel)
    local level = 1
    local diminuirmagdamage = 0.5
    local storage = 1111

    if getPlayerLevel(cid) == level and getPlayerStorageValue(cid,storage) == -1 then
    doMagDamage(cid,getCreatureMagDamage(cid)-diminuirmagdamage)
    setPlayerStorageValue(cid,storage, 1)
    end
    end

    Mira te sugiero hacer un post aparte sobre esto, y a ver si logro ayudarte sobre esto xq no tengo mucha idea como se usa esa función y también es porque esta raro responder aqui en este post.

    3 participantes

    anthonyx22

    anthonyx22
    Nuevo Miembro
    Nuevo Miembro
    Lo haré y te etiquetaré, pero alguien me puede ayudar con esto, cómo aplicaría esta función, En el caso de esta publicación.

    3 participantes

    Contenido patrocinado


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