los avisos de daño no concuerdan con los ángulos de disparos
#1
cuando le coloco el daño a un arma comienza el problema de que te disparan de cual quier angulo y en la pantalla marcan todos los ángulos. Solo pasa cuando coloco el daño extra.

Código:
#include <amxmodx>
#include <amxmisc>
#include <fun>
#include <cstrike>
#include <engine>

#define PLUGIN    "Extra Damage Mod"
#define VERSION    "0.3b"
#define AUTHOR    "v3x"

#define ACCESS_LEVEL    ADMIN_CFG    // Access level required to set extra damage
#define MAXWEAPS     31        // DON'T CHANGE!
#define MAXTEAMS    4        // DON'T CHANGE!

enum
{
    TEAM_NONE = 0,
    TEAM_T,
    TEAM_CT,
    TEAM_BOTH
}

public plugin_init()
{
    register_plugin(PLUGIN, VERSION, AUTHOR);

    register_concmd("sv_extradamage", "ConCmd_WeapDmg", ACCESS_LEVEL, ": <weaponid> <damage>");
    register_concmd("amx_weaponlist", "ConCmd_WeapList", 0, ": Lists weapon ids");

    register_event("Damage", "Event_Damage", "b", "2>0");

    if(!cstrike_running())
    {
        pause("d"); // Pause the entire plugin if the server isn't running Counter-Strike
    }
}

new g_nWeapDmg[MAXWEAPS][MAXTEAMS];

public Event_Damage( id )
{
    new iWeapID, iHitzone, iAttacker = get_user_attacker(id, iWeapID, iHitzone);

    if(!is_user_connected(id) || !is_user_connected(iAttacker))
        return PLUGIN_CONTINUE;

    new dmgType = read_data(3);

    if(dmgType & DMG_BLAST)
    {
        iWeapID = 4;
    }

    if(dmg(iWeapID, TEAM_T) <= 0 && dmg(iWeapID, TEAM_CT) <= 0 && dmg(iWeapID, TEAM_BOTH) <= 0)
    {
        return PLUGIN_CONTINUE;
    }

    if(dmg(iWeapID, TEAM_BOTH) > 0)
    {
        extra_damage(iAttacker, id, dmg(iWeapID, TEAM_BOTH), iWeapID);
        return PLUGIN_CONTINUE;
    }
    else if(dmg(iWeapID, TEAM_T) > 0 || dmg(iWeapID, TEAM_CT) > 0)
    {
        switch(get_user_team(iAttacker))
        {
            case TEAM_NONE: return PLUGIN_CONTINUE;
            case TEAM_T: extra_damage(iAttacker, id, dmg(iWeapID, TEAM_T), iWeapID);
            case TEAM_CT: extra_damage(iAttacker, id, dmg(iWeapID, TEAM_CT), iWeapID);
        }
    }
    return PLUGIN_CONTINUE;
}

public ConCmd_WeapDmg( id, lvl, cid )
{
    if(!cmd_access(id, lvl, cid, 4))
        return PLUGIN_HANDLED;

    new arg1[8], arg2[8], arg3[8];
    read_argv(1, arg1, 7); // Weapon ID
    read_argv(2, arg2, 7); // Damage amt
    read_argv(3, arg3, 7); // Team ID

    new weapid = str_to_num(arg1);
    new damage = str_to_num(arg2);
    new teamid = str_to_num(arg3);

    if(weapid > 0 && weapid < MAXWEAPS)
    {
        if(weapid == 2 || weapid == 6 || weapid == 9 || weapid == 25)
        {
            if(id == 0)
            {
                server_print("[ExtraDamageMod] Invalid weapon id: %i", weapid);
            }
            else
            {
                console_print(id, "[ExtraDamageMod] Invalid weapon id: %i", weapid);
            }
            return PLUGIN_HANDLED;
        }
        if(teamid <= 0 || teamid > (MAXTEAMS-1))
        {
            if(id == 0)
            {
                server_print("[ExtraDamageMod] Invalid team parameter: %i", teamid);
            }
            else
            {
                console_print(id, "[ExtraDamageMod] Invalid team parameter: %i", teamid);
            }
            return PLUGIN_HANDLED;
        }

        //if(teamid != TEAM_BOTH)
        //{
        //    g_nWeapDmg[weapid][TEAM_BOTH] = 0;
        //}

        g_nWeapDmg[weapid][teamid] = damage;
        
        new weapname[33];
        get_weaponname(weapid, weapname, 32);

        replace(weapname, 32, "weap_", "");

        if(damage > 0)
        {
            if(id == 0)
            {
                switch(teamid)
                {
                    case 0:
                    {
                        server_print("[ExtraDamageMod] Invalid team parameter: 0");
                        return PLUGIN_HANDLED;
                    }
                    case 1: server_print("[ExtraDamageMod] Added %i extra damage for %s for the TERRORIST team", damage, weapname);
                    case 2: server_print("[ExtraDamageMod] Added %i extra damage for %s for the CT team", damage, weapname);
                    case 3: server_print("[ExtraDamageMod] Added %i extra damage for %s for both teams", damage, weapname);
                }
            }
            else
            {
                switch(teamid)
                {
                    case 0:
                    {
                        console_print(id, "[ExtraDamageMod] Invalid team parameter: 0");
                        return PLUGIN_HANDLED;
                    }
                    case 1: console_print(id, "[ExtraDamageMod] Added %i extra damage for %s for the TERRORIST team", damage, weapname);
                    case 2: console_print(id, "[ExtraDamageMod] Added %i extra damage for %s for the CT team", damage, weapname);
                    case 3: console_print(id, "[ExtraDamageMod] Added %i extra damage for %s for both teams", damage, weapname);
                }
            }
            return PLUGIN_HANDLED;
        }
        else if(damage <= 0)
        {
            if(id == 0)
            {
                switch(teamid)
                {
                    case 0:
                    {
                        server_print("[ExtraDamageMod] Invalid team parameter: 0");
                        return PLUGIN_HANDLED;
                    }
                    case 1: server_print("[ExtraDamageMod] Removed extra damage for %s for the TERRORIST team", damage, weapname);
                    case 2: server_print("[ExtraDamageMod] Removed extra damage for %s for the CT team", damage, weapname);
                    case 3: server_print("[ExtraDamageMod] Removed extra damage for %s for both teams", damage, weapname);
                }
            }
            else
            {
                switch(teamid)
                {
                    case 0:
                    {
                        console_print(id, "[ExtraDamageMod] Invalid team parameter: 0");
                        return PLUGIN_HANDLED;
                    }
                    case 1: console_print(id, "[ExtraDamageMod] Removed extra damage for %s for the TERRORIST team", damage, weapname);
                    case 2: console_print(id, "[ExtraDamageMod] Removed extra damage for %s for the CT team", damage, weapname);
                    case 3: console_print(id, "[ExtraDamageMod] Removed extra damage for %s for both teams", damage, weapname);
                }
            }
            return PLUGIN_HANDLED;
        }
    }
    else if(weapid == 0)
    {
        if(damage > 0)
        {
            for(new i = 1; i < MAXWEAPS; i++)
                g_nWeapDmg[i][teamid] = damage;

            if(id == 0)
            {
                server_print("[ExtraDamageMod] Added %i extra damage for the TERRORIST team", damage);
                server_print("[ExtraDamageMod] Added %i extra damage for the CT team", damage);
                server_print("[ExtraDamageMod] Added %i extra damage for all weapons for both teams", damage);
            }
            else
            {
                console_print(id, "[ExtraDamageMod] Added %i extra damage for the TERRORIST team", damage);
                console_print(id, "[ExtraDamageMod] Added %i extra damage for the CT team", damage);
                console_print(id, "[ExtraDamageMod] Added %i extra damage for all weapons for both teams", damage);
            }
            return PLUGIN_HANDLED;
        }
        if(damage <= 0)
        {
            for(new i = 1; i < MAXWEAPS; i++)
                g_nWeapDmg[i][teamid] = 0;

            if(id == 0)
            {
                server_print("[ExtraDamageMod] Removed extra damage for all weapons for the TERRORIST team");
                server_print("[ExtraDamageMod] Removed extra damage for all weapons for the CT team");
                server_print("[ExtraDamageMod] Removed extra damage for all weapons for both teams");
            }
            else
            {
                console_print(id, "[ExtraDamageMod] Removed extra damage for all weapons for the TERRORIST team");
                console_print(id, "[ExtraDamageMod] Removed extra damage for all weapons for the CT team");
                console_print(id, "[ExtraDamageMod] Removed extra damage for all weapons for both teams");
            }
            return PLUGIN_HANDLED;
        }
    }

    return PLUGIN_HANDLED;
}

// Doesn't work well for clients..
public ConCmd_WeapList( id )
{
    new arg[8];
    read_argv(1, arg, 7);

    new szWeapMsg[256], nLen, iPage = str_to_num(arg);

    nLen = format(szWeapMsg, 255, "[ExtraDamageMod] Weapon ID list %s", (iPage==2) ? "(con.):" : ":");

    if(iPage == 0 || iPage == 1)
    {
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- P228: %i", CSW_P228);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Scout: %i", CSW_SCOUT);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- HE Grenade: %i", CSW_HEGRENADE);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- XM1014 (autoshotgun): %i", CSW_XM1014);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Mac10: %i", CSW_MAC10);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Aug: %i", CSW_AUG);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Elites: %i", CSW_ELITE);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Fiveseven: %i", CSW_FIVESEVEN);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- UMP45: %i", CSW_UMP45);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- SG550: %i", CSW_SG550);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Galil: %i", CSW_GALIL);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Famas: %i", CSW_FAMAS);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- USP: %i", CSW_USP);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n^nType 'amx_weaponlist 2' for more");
    }
    else if(iPage == 2)
    {
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Glock18: %i", CSW_GLOCK18);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- AWP: %i", CSW_AWP);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- MP5NAVY: %i", CSW_MP5NAVY);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- M249 (Para): %i", CSW_M249);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- M3 (Pump): %i", CSW_M3);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- M4A1: %i", CSW_M4A1);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- TMP: %i", CSW_TMP);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- G3SG1: %i", CSW_G3SG1);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Deagle: %i", CSW_DEAGLE);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- SG552: %i", CSW_SG552);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- AK47: %i", CSW_AK47);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- Knife: %i", CSW_KNIFE);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n- P90: %i", CSW_P90);
        nLen += format(szWeapMsg[nLen], (255-nLen), "^n^nType 'amx_weaponlist 1' to go back");
    }

    if(is_user_connected(id))
        console_print(id, szWeapMsg);
    else
        server_print(szWeapMsg);

    return PLUGIN_HANDLED;
}

public extra_damage(attacker, victim, damage, weap)
{
    if(!is_user_connected(attacker) || !is_user_connected(victim))
        return;
    if(damage <= 0 || get_user_health(victim) <= 0 || get_user_godmode(victim))
        return;

    new FFon = get_cvar_num("mp_friendlyfire");

    new index, body, distance = 99999;
    get_user_aiming(attacker, index, body, distance);

    new weaponname[33];
    get_weaponname(weap, weaponname, 32);

    replace(weaponname, 32, "weapon_", "");

    new team[2];
    team[0] = get_user_team(attacker);
    team[1] = get_user_team(victim);

    if(FFon && team[0] == team[1])
    {
        new name[32];
        get_user_name(attacker, name, 31);
        client_print(0, print_chat, "%s attacked a teammate", name);
    }

    if(get_user_health(victim) > damage)
    {
        fakedamage(victim, weaponname, float(damage), (weap == 4) ? DMG_BLAST : DMG_BULLET);

        new origin[3];
        get_user_origin(victim, origin);

        message_begin(MSG_ONE, get_user_msgid("Damage"), {0,0,0}, victim);
        write_byte(0);        // dmg_save
        write_byte(damage);    // dmg_take
        write_long(0);        // visibleDamageBits
        write_coord(origin[0]);    // damageOrigin.x
        write_coord(origin[1]);    // damageOrigin.y
        write_coord(origin[2]);    // damageOrigin.z
        message_end();
    }
    else
    {
        log_kill(attacker, victim, weaponname, (body == HIT_HEAD) ? 1 : 0);
    }
}

public dmg( weapid, teamid )
{
    return g_nWeapDmg[weapid][teamid];
}

stock log_kill(killer, victim, weapon[],headshot)
{
    new weapname[64];

    if(containi(weapon, "nade") != -1)
        format(weapname, 63, "grenade");
    else
    {
        format(weapname, 63, "%s", weapon);
        replace(weapname, 63, "weapon_", "");
    }

    user_silentkill(victim)
    set_msg_block(get_user_msgid("DeathMsg"), BLOCK_NOT)
    make_deathmsg(killer, victim, headshot, weapname)

    if(get_user_team(killer) != get_user_team(victim))
    {
        set_user_frags(killer, get_user_frags(killer) + 1);

        new money = cs_get_user_money(killer) + 300;

        if(money >= 16000)
        {
            cs_set_user_money(killer, 16000);
        }
        else
        {
            cs_set_user_money(killer, cs_get_user_money(killer) + 300, 1);
        }
    }
    if(get_user_team(killer)==get_user_team(victim))
        set_user_frags(killer, get_user_frags(killer) - 1);
    
    message_begin(MSG_BROADCAST, get_user_msgid("ScoreInfo"));
    write_byte(killer);
    write_short(get_user_frags(killer));
    write_short(cs_get_user_deaths(killer));
    write_short(0);
    write_short(1);
    message_end();
    
    new kname[32], vname[32], kauthid[32], vauthid[32], kteam[10], vteam[10];

    get_user_name(killer, kname, 31);
    get_user_team(killer, kteam, 9);
    get_user_authid(killer, kauthid, 31);

    get_user_name(victim, vname, 31);
    get_user_team(victim, vteam, 9);
    get_user_authid(victim, vauthid, 31);

    log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
    kname, get_user_userid(killer), kauthid, kteam,
    vname, get_user_userid(victim), vauthid, vteam, weapname);

    return PLUGIN_CONTINUE;
}

Cita:cambio el nombre del comando a sv_extradamage y agregué un parámetro teamid:

sv_extradamage <weaponid> <damage> <teamid>

Los identificadores del equipo son los siguientes:
- 1: equipo terrorista
- 2: equipo CT
- 3: ambos equipos

Ejemplos :
sv_extradamage 17 5 1 - Agregaría 5 daños adicionales a la Glock para el equipo terrorista
sv_extradamage 23 8 2 - Agregaría 8 daños adicionales al TMP para el equipo antiterrorista
sv_extradamage 29 10 3 - Agregaría 10 daños adicionales al cuchillo para ambos equipos
sv_extradamage 0 0 3 - Quitaría todo el daño extra para TODAS las armas para AMBOS equipos
sv_extradamage 0 25 3 - Agregaría 25 daños adicionales para TODAS las armas para AMBOS equipos

Los comandos los colocas en amxx.cfg
Responder
#2
No es que no funcione, por las funciones que utiliza el plugin es que sucede esto, seria mejor utilizar ham takedamage Whatever
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder
#3
(05/09/2019, 09:42 PM)kikizon2 escribió: ..............

¿que paso no me di a entender?
Responder
#4
(05/09/2019, 09:43 PM)StevenGutierrez escribió:
(05/09/2019, 09:42 PM)kikizon2 escribió: ..............

¿que paso no me di a entender?

Estaba limpiando el teclado y no me fije que tenia abierto esto en la 2da pantalla Roflmao igual ahí edite
[Imagen: bvpq9q-6.png]

NO DOY AYUDA VIA MENSAJE PRIVADO

* Si requieres algún servicio de pago puedes contactarme vía MP o en mi facebook
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)