05/09/2019, 08:58 PM
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