Код за потвърждение: Избери целия код
#define HUD_colorR 255 // default: 255
#define HUD_colorG 155 // default: 155
#define HUD_colorB 0 // default: 0
#define HUD_posX 0.6 // default: 0.6
#define HUD_posY 0.2 // default: 0.2
#define HUD_fx 0 // default: 0
#define HUD_fxTime 0.0 // default: 0.0
#define HUD_holdTime 1.0 // default: 1.0
#define HUD_fadeInTime 0.3 // default: 0.3
#define HUD_fadeOutTime 2.0 // default: 2.0
#define HUD_channel -1 // default: -1
#include <amxmodx>
#include <amxmisc>
#include <hamsandwich>
#include <cstrike>
#include <fakemeta>
#include <fun>
#define Money_Amount 1
#define IsPlayer(%1) ( 1 <= %1 <= g_iMaxPlayers )
#define XTRA_OFS_PLAYER 5
#define m_iAccount 115
#define cs_set_money_value(%1,%2) set_pdata_int(%1, m_iAccount, %2, XTRA_OFS_PLAYER)
#define MAXPLAYERS 32 + 1
#define TEAM_NONE 0
#define TEAM_TE 1
#define TEAM_CT 2
#define TEAM_SPEC 3
#define is_player(%1) (1 <= %1 <= g_iMaxPlayers)
new const PLUGIN[] = "CSGO: Death and Money Messages"
new const VERSION[] = "2.0.1"
new const DATE[] = "15 October 2017";
new const old_deathmsg[][] =
{
"worldspawn",
"p228",
"scout",
"grenade",
"xm1014",
"c4",
"mac10",
"aug",
"elite",
"fiveseven",
"ump45",
"sg550",
"galil",
"famas",
"usp",
"glock18",
"awp",
"mp5navy",
"m249",
"m3",
"m4a1",
"tmp",
"g3sg1",
"deagle",
"sg552",
"ak47",
"knife",
"p90"
}
new new_deathmsg[sizeof(old_deathmsg)][32], kill_reward[sizeof(old_deathmsg)];
new dnm_old_deathmsg[64][32], dnm_new_deathmsg[64][32], dnm_weapon_mdl[64][32], g_dnm_weapons_exist = 1;
new cvar_tk_money, cvar_maxmoney, cvar_hs_money;
new g_iMaxPlayers, g_iNewMoney, g_iMsgHookMoney, gmsgMoney;
new cvar_amxmode, cvar_enable, cvar_assist_mindmg, cvar_assist_frags, cvar_assist_money, toggle_deathmsg;
new ch_cvar_enable, ch_cvar_assist_mindmg, ch_cvar_assist_frags, ch_cvar_assist_money;
new msgID_sayText, msgID_deathMsg, msgID_scoreInfo;
new g_szName[MAXPLAYERS][32], g_iTeam[MAXPLAYERS], g_iDamage[MAXPLAYERS][MAXPLAYERS];
new bool:g_bAlive[MAXPLAYERS] = {false, ...}, bool:g_bOnline[MAXPLAYERS] = {false, ...};
new g_iLastAmxMode, bool:g_bAmxModeExists = false;
public plugin_init()
{
register_plugin(PLUGIN, VERSION, "Digi, ConnorMcleod, hellmonja");
cvar_hs_money = register_cvar("dnm_hs_money", "100");
cvar_tk_money = register_cvar("dnm_tk_money", "-1000");
cvar_maxmoney = register_cvar("dnm_maxmoney", "16000");
cvar_enable = register_cvar("dnm_assist_enable", "1");
cvar_assist_mindmg = register_cvar("dnm_assist_mindmg", "41");
cvar_assist_frags = register_cvar("dnm_assist_frags", "0");
cvar_assist_money = register_cvar("dnm_assist_money", "50");
toggle_deathmsg = register_cvar("toggle_deathmsg", "1");
register_concmd("ver_dnm", "Code_Version");
if(cvar_exists("amx_mode"))
{
cvar_amxmode = get_cvar_pointer("amx_mode");
g_bAmxModeExists = true;
}
gmsgMoney = get_user_msgid("Money")
msgID_sayText = get_user_msgid("SayText")
msgID_deathMsg = get_user_msgid("DeathMsg")
msgID_scoreInfo = get_user_msgid("ScoreInfo")
register_message(msgID_deathMsg, "msg_deathMsg")
register_logevent("event_roundStart", 2, "1=Round_Start")
register_event("Damage", "player_damage", "be", "2!0", "3=0", "4!0")
register_event("DeathMsg", "Event_DeathMsg", "a")
register_event("TeamInfo", "player_joinTeam", "a")
RegisterHam(Ham_Spawn, "player", "player_spawn", 1)
g_iMaxPlayers = get_maxplayers()
//===============================================================
//DeathMsg Config File
//===============================================================
new szFilepath[64];
get_configsdir(szFilepath, charsmax(szFilepath));
add(szFilepath, charsmax(szFilepath), "/deathmsgs.ini");
if(!file_exists(szFilepath))
{
for(new i = 0; i <= sizeof(old_deathmsg); i++)
new_deathmsg[i][charsmax(old_deathmsg)] = old_deathmsg[i][charsmax(old_deathmsg)];
return
}
new f = fopen(szFilepath, "rt");
new szData[sizeof(new_deathmsg[])];
new msg[32], value[10], i = 0;
while( !feof(f) && i < sizeof(old_deathmsg))
{
fgets(f, szData, charsmax(szData));
trim(szData);
if(!szData[0] || szData[0] == ';' || szData[0] == '/' && szData[1] == '/')
continue;
parse(szData, msg, charsmax(msg), value, charsmax(value));
copy(new_deathmsg[i], charsmax(new_deathmsg), msg);
kill_reward[i] = str_to_num(value);
i++;
}
fclose(f);
//===============================================================
//Custom Weapons Config File
//===============================================================
new szFilepath2[64];
get_configsdir(szFilepath2, charsmax(szFilepath2));
add(szFilepath2, charsmax(szFilepath2), "/dnm_weapons.ini");
if(!file_exists(szFilepath2))
{
g_dnm_weapons_exist = 0;
return
}
new f2 = fopen(szFilepath2, "rt");
new szData2[sizeof(dnm_new_deathmsg[])];
new msg2[32], toggle = 0, index = 0; i = 0;
while( !feof(f2) && i < 999)
{
fgets(f2, szData2, charsmax(szData2));
trim(szData2);
if(!szData2[0] || szData2[0] == ';' || szData2[0] == '/' && szData2[1] == '/')
continue;
parse(szData2, msg2, charsmax(msg2));
switch(toggle)
{
case 0: copy(dnm_old_deathmsg[index], charsmax(dnm_old_deathmsg), msg2);
case 1: copy(dnm_weapon_mdl[index], charsmax(dnm_weapon_mdl), msg2);
case 2: copy(dnm_new_deathmsg[index], charsmax(dnm_new_deathmsg), msg2);
}
if(toggle == 2)
{
toggle = 0;
index++;
}
else toggle++;
i++;
}
fclose(f2);
}
public Code_Version(id)
{
console_print(id, "==============================");
console_print(id, "%s v%s", PLUGIN, VERSION);
console_print(id, "%s", DATE);
console_print(id, "==============================");
}
public plugin_cfg() event_roundStart()
public event_roundStart()
{
ch_cvar_enable = clamp(get_pcvar_num(cvar_enable), 0, 2);
ch_cvar_assist_mindmg = clamp(get_pcvar_num(cvar_assist_mindmg), 0, 100);
ch_cvar_assist_frags = clamp(get_pcvar_num(cvar_assist_frags), 0, 1);
ch_cvar_assist_money = clamp(get_pcvar_num(cvar_assist_money), 0, 16000);
}
public client_putinserver(iPlayer)
{
g_bOnline[iPlayer] = true;
get_user_name(iPlayer, g_szName[iPlayer], 31);
}
public client_disconnect(iPlayer)
{
g_iTeam[iPlayer] = TEAM_NONE;
g_bAlive[iPlayer] = false;
g_bOnline[iPlayer] = false;
}
public player_joinTeam()
{
new iPlayer, szTeam[2];
iPlayer = read_data(1);
read_data(2, szTeam, 1);
switch(szTeam[0])
{
case 'T': g_iTeam[iPlayer] = TEAM_TE;
case 'C': g_iTeam[iPlayer] = TEAM_CT;
default: g_iTeam[iPlayer] = TEAM_SPEC; // since you can't transfer yourself to unassigned team...
}
return PLUGIN_CONTINUE
}
public player_spawn(iPlayer)
{
if(!is_user_alive(iPlayer))
return HAM_IGNORED
g_bAlive[iPlayer] = true // he's alive !
new szName[32]
get_user_name(iPlayer, szName, 31)
if(!equali(szName, g_szName[iPlayer])) // make sure he has his name !
{
set_msg_block(msgID_sayText, BLOCK_ONCE)
set_user_info(iPlayer, "name", g_szName[iPlayer])
}
// reset damage meters
for(new p = 1; p <= g_iMaxPlayers; p++)
g_iDamage[iPlayer][p] = 0
return HAM_IGNORED
}
public player_damage(iVictim)
{
if(!ch_cvar_enable || !IsPlayer(iVictim))
return PLUGIN_CONTINUE
new iAttacker = get_user_attacker(iVictim)
if(!IsPlayer(iAttacker))
return PLUGIN_CONTINUE
g_iDamage[iAttacker][iVictim] += read_data(2)
return PLUGIN_CONTINUE
}
public Event_DeathMsg()
{
new iKiller = read_data(1);
new iVictim = read_data(2);
new iHS = read_data(3);
new szWeapon[24];
read_data(4, szWeapon, 23);
if( IsPlayer(iKiller) && is_user_connected(iKiller) )
{
if( iVictim != iKiller )
{
new money;
if(cs_get_user_team(iVictim) == cs_get_user_team(iKiller))
money = get_pcvar_num(cvar_tk_money);
else
for(new i = 0; i <= sizeof old_deathmsg - 1; i++)
if(equali(szWeapon, old_deathmsg[i]))
money = kill_reward[i] + (get_pcvar_num(cvar_hs_money) * iHS);
g_iNewMoney = clamp(cs_get_user_money(iKiller) + money, 0, get_pcvar_num(cvar_maxmoney));
g_iMsgHookMoney = register_message(gmsgMoney, "Message_Money");
}
}
if(!IsPlayer(iVictim))
{
do_deathmsg(iKiller, iVictim, iHS, szWeapon)
return PLUGIN_CONTINUE
}
g_bAlive[iVictim] = false
if(!IsPlayer(iKiller))
{
do_deathmsg(iKiller, iVictim, iHS, szWeapon)
return PLUGIN_CONTINUE
}
new iKillerTeam = g_iTeam[iKiller]
if(iKiller != iVictim && g_iTeam[iVictim] != iKillerTeam)
{
new iKiller2 = 0
new iDamage2 = 0
for(new p = 1; p <= g_iMaxPlayers; p++)
{
if(p != iKiller && g_bOnline[p] && iKillerTeam == g_iTeam[p] && g_iDamage[p][iVictim] >= ch_cvar_assist_mindmg && g_iDamage[p][iVictim] > iDamage2)
{
iKiller2 = p
iDamage2 = g_iDamage[p][iVictim]
}
g_iDamage[p][iVictim] = 0
}
if(iKiller2 > 0 && iDamage2 > ch_cvar_assist_mindmg)
{
if(ch_cvar_assist_frags)
{
new iFrags = get_user_frags(iKiller2)+1
set_user_frags(iKiller2, iFrags)
message_begin(MSG_ALL, msgID_scoreInfo)
write_byte(iKiller2)
write_short(iFrags)
write_short(get_user_deaths(iKiller2))
write_short(0)
write_short(iKillerTeam)
message_end()
}
if(ch_cvar_assist_money)
{
new iMoney = cs_get_user_money(iKiller2) + ch_cvar_assist_money
if(iMoney > 16000)
iMoney = 16000
cs_set_user_money(iKiller2, iMoney)
if(g_bAlive[iKiller2]) // no reason to send a money message when the player has no hud :}
{
message_begin(MSG_ONE_UNRELIABLE, gmsgMoney, _, iKiller2)
write_long(iMoney)
write_byte(1)
message_end()
}
}
if(ch_cvar_enable == 2)
{
new szName1[32], szName2[32], szName3[32], szMsg[128]
get_user_name(iKiller, szName1, 31)
get_user_name(iKiller2, szName2, 31)
get_user_name(iVictim, szName3, 31)
formatex(szMsg, 63, "%s killed %s assisted by %s", szName1, szName3, szName2)
set_hudmessage(HUD_colorR, HUD_colorG, HUD_colorB, HUD_posX, HUD_posY, HUD_fx, HUD_fxTime, HUD_holdTime, HUD_fadeInTime, HUD_fadeOutTime, HUD_channel)
show_hudmessage(0, szMsg)
}
else
{
new szName1[32], iName1Len, szName2[32], iName2Len, szNames[32], szWeaponLong[32]
iName1Len = get_user_name(iKiller, szName1, 31)
iName2Len = get_user_name(iKiller2, szName2, 31)
g_szName[iKiller] = szName1
if(iName1Len < 14)
{
formatex(szName1, iName1Len, "%s", szName1)
formatex(szName2, 28-iName1Len, "%s", szName2)
}
else if(iName2Len < 14)
{
formatex(szName1, 28-iName2Len, "%s", szName1)
formatex(szName2, iName2Len, "%s", szName2)
}
else
{
formatex(szName1, 13, "%s", szName1)
formatex(szName2, 13, "%s", szName2)
}
formatex(szNames, 31, "%s + %s", szName1, szName2)
set_msg_block(msgID_sayText, BLOCK_ONCE)
set_user_info(iKiller, "name", szNames)
if(g_bAmxModeExists)
{
g_iLastAmxMode = get_pcvar_num(cvar_amxmode)
set_pcvar_num(cvar_amxmode, 0)
}
if(equali(szWeapon, "grenade"))
szWeaponLong = "weapon_hegrenade"
else
formatex(szWeaponLong, 31, "weapon_%s", szWeapon)
new args[4]
args[0] = iVictim
args[1] = iKiller
args[2] = iHS
args[3] = get_weaponid(szWeaponLong)
set_task(0.1, "player_diePost", 0, args, 4)
}
}
else if(ch_cvar_enable == 1)
do_deathmsg(iKiller, iVictim, iHS, szWeapon)
}
else if(ch_cvar_enable == 1)
do_deathmsg(iVictim, iVictim, iHS, szWeapon)
return PLUGIN_CONTINUE
}
public Message_Money(iMsgId, iMsgDest, id)
{
unregister_message(gmsgMoney, g_iMsgHookMoney)
cs_set_money_value(id, g_iNewMoney)
set_msg_arg_int(Money_Amount, ARG_LONG, g_iNewMoney)
}
public player_diePost(arg[])
{
new szWeapon[24]
new iKiller = arg[1]
get_weaponname(arg[3], szWeapon, 23)
replace(szWeapon, 23, "weapon_", "")
do_deathmsg(iKiller, arg[0], arg[2], szWeapon)
set_msg_block(msgID_sayText, BLOCK_ONCE)
set_user_info(iKiller, "name", g_szName[iKiller])
if(g_bAmxModeExists)
set_pcvar_num(cvar_amxmode, g_iLastAmxMode)
return PLUGIN_CONTINUE
}
public msg_deathMsg()
return ch_cvar_enable == 1 ? PLUGIN_HANDLED : PLUGIN_CONTINUE
stock do_deathmsg(iKiller, iVictim, iHS, const szWeapon[])
{
new temp_string[32];
if(get_pcvar_num(toggle_deathmsg) == 1)
{
for(new i = 0; i <= sizeof old_deathmsg - 1; i++)
{
if(equali(szWeapon, old_deathmsg[i]))
formatex(temp_string, 31, "%s", new_deathmsg[i]);
}
}
else
formatex(temp_string, 31, "%s", szWeapon);
if(g_dnm_weapons_exist)
{
static model[32];
pev(iKiller, pev_viewmodel2, model, 31);
for(new i = 0; i <= 63; i++)
if(equali(szWeapon, dnm_old_deathmsg[i]))
if(equali(model, dnm_weapon_mdl[i]))
temp_string = dnm_new_deathmsg[i];
}
message_begin(MSG_ALL, msgID_deathMsg)
write_byte(iKiller)
write_byte(iVictim)
write_byte(iHS)
write_string(temp_string)
message_end()
}[/]