HLMOD.HU Forrás Megtekintés - www.hlmod.hu
#include <amxmodx>
/* Ami előtt // van az le van tiltva, ami előtt nincs, az aktív. Itt tudsz mindent módosítani. */
#define PREFIXEK // Alap prefixek engedélyezése.
#if defined PREFIXEK
//#define EGYEDI_PREFIXEK // Egyedi prefixek engedélyezése "addons/amxmodx/configs/egyedi_prefixek.ini"
#endif
//#define STEAM_PREFIX // Steam prefix engedélyezése.
#define ZOLD_IRAS // Zöld írás az Adminoknak és a VIP-nek.
#define TULAJ_JOG ADMIN_RCON // Tulaj jog a Tulaj prefixhez. (alap: "l")
#define ADMIN_JOG ADMIN_BAN // Admin jog az Admin prefixhez. (alap: "d")
#define VIP_JOG ADMIN_LEVEL_H // VIP jog a VIP prefixhez. (alap: "t")
//#define ANTI_FLOOD // Anti-flood bekapcsolása (ki kell törölni a plugins.ini-ből az alap "antiflood.amxx"-et.)
#define IDOKOZ 0.75 // Flood időköz
#define ADMIN_LAT // Az Admin látja az élő és a halott, és a két csapat írását egyaránt.
//#define ALAP_CHAT // Élő nem látja a halott írását, kivéve az Admin,ha az ADMIN_LAT aktív. (alap: mindenki látja a halottat is.)
#if defined STEAM_PREFIX
new bool:steames[33];
#endif
#if defined EGYEDI_PREFIXEK
enum _:ADATOK
{
TIPUS[2],
ELLENORZES[32],
PREFIX[64]
};
new Array:adat, jatekosadat[ADATOK];
new prefix[33][64];
#endif
#define GetBit(%1,%2) (%1 & (1 << (%2 & 31)))
#define SetBit(%1,%2) %1 |= (1 << (%2 & 31))
#define ResetBit(%1,%2) %1 &= ~(1 << (%2 & 31))
#if defined ADMIN_LAT
new bitadmin;
#endif
new bitelo;
public plugin_init()
{
#define AUTHOR "neygomon, mforce"
register_plugin("Lite Chat", "1.0", AUTHOR);
register_cvar("lite_chat", AUTHOR, FCVAR_SERVER | FCVAR_SPONLY);
register_clcmd("say", "HandlerSay");
register_clcmd("say_team", "HandlerSayTeam");
register_event("ResetHUD", "eResetHUD", "be");
register_event("DeathMsg", "eDeathMsg", "a", "1>0");
}
#if defined EGYEDI_PREFIXEK
public plugin_cfg()
{
adat = ArrayCreate(ADATOK);
new betolt[256], fp = fopen("addons/amxmodx/configs/egyedi_prefixek.ini", "rt");
if(!fp) return set_fail_state("A fajlt ^"addons/amxmodx/configs/egyedi_prefixek.ini^" nem talaltuk");
while(!feof(fp))
{
fgets(fp, betolt, charsmax(betolt));
if(betolt[0] && betolt[0] != ';' && parse(betolt, jatekosadat[TIPUS], charsmax(jatekosadat[TIPUS]), jatekosadat[ELLENORZES], charsmax(jatekosadat[ELLENORZES]), jatekosadat[PREFIX], charsmax(jatekosadat[PREFIX])))
ArrayPushArray(adat, jatekosadat);
}
return fclose(fp);
}
#endif
public client_putinserver(id)
{
#if defined EGYEDI_PREFIXEK
kereses(id);
#endif
#if defined STEAM_PREFIX
steames[id] = is_user_steam(id) ? true : false;
#endif
#if defined ADMIN_LAT
if(get_user_flags(id) & ADMIN_CHAT) SetBit(bitadmin, id);
else ResetBit(bitadmin, id);
#endif
}
public client_disconnect(id) ResetBit(bitelo, id);
public eResetHUD(id) SetBit(bitelo, id);
public eDeathMsg() ResetBit(bitelo, read_data(2));
public HandlerSay(id) return uzenetformazas(id, false);
public HandlerSayTeam(id) return uzenetformazas(id, true);
uzenetformazas(id, bool:csapat)
{
#define MAX_BIT 180
static uzenet[MAX_BIT], stringkonvertalas[charsmax(uzenet) * 2 + 1];
read_args(uzenet, charsmax(uzenet));
remove_quotes(uzenet);
if(uzenet[0] == EOS || uzenet[0] == '/' || equal(uzenet, " "))
return PLUGIN_HANDLED_MAIN;
#if defined ANTI_FLOOD
static Float:floodido[33], Float:jatekido, figyelmeztetes[33];
if(floodido[id] > (jatekido = get_gametime()))
{
if(++figyelmeztetes[id] > 2)
{
client_print(id, print_chat, "NE FLOODOLJ!");
floodido[id] = jatekido + IDOKOZ + 3.0;
return PLUGIN_HANDLED;
}
}
else if(figyelmeztetes[id]) figyelmeztetes[id]--;
floodido[id] = jatekido + IDOKOZ;
#endif
static fullos, tagek[MAX_BIT], team_lekeres, sTeam[16];
team_lekeres = get_user_team(id, sTeam, charsmax(sTeam));
switch(team_lekeres)
{
case 1: fullos = formatex(tagek, charsmax(tagek), "%s%s", GetBit(bitelo, id) ? "^1" : "^1*Halott* ", csapat ? "^1[T] " : "");
case 2: fullos = formatex(tagek, charsmax(tagek), "%s%s", GetBit(bitelo, id) ? "^1" : "^1*Halott* ", csapat ? "^1[CT] " : "");
default:fullos = formatex(tagek, charsmax(tagek), "^1*Spec* ");
}
#if defined ZOLD_IRAS || (defined PREFIXEK && !defined EGYEDI_PREFIXEK)
static hozzaferes; hozzaferes = jogellenorzes(id);
#endif
#if defined STEAM_PREFIX
if(steames[id])
fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^1[^4Steam^1] ");
#endif
#if defined PREFIXEK
#if defined EGYEDI_PREFIXEK
if(prefix[id][0])
{
replace_all(prefix[id], charsmax(prefix[]), "!n", "^1");
replace_all(prefix[id], charsmax(prefix[]), "!t", "^3");
replace_all(prefix[id], charsmax(prefix[]), "!g", "^4");
fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "%s ", prefix[id]);
}
#else
static const adminprefixek[][] = { "", "^4[Tulaj] ", "^4[Admin] ", "^4[VIP] " };
fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "%s", adminprefixek[hozzaferes]);
#endif
#endif
#if defined ZOLD_IRAS
switch(hozzaferes)
{
case 0: fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : %%s2");
default:fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : ^4%%s2");
}
#else
fullos += formatex(tagek[fullos], charsmax(tagek) - fullos, "^3%%s1^1 : %%s2");
#endif
stringkonvertalas = uzenet;
replace_all( stringkonvertalas, charsmax( stringkonvertalas ), "", " " );
replace_all( stringkonvertalas, charsmax( stringkonvertalas ), "", " " );
static bitlimit; bitlimit = MAX_BIT;
while(fullos + strlen(stringkonvertalas) > MAX_BIT) stringkonvertalas[bitlimit -= 10] = 0;
static players[32], pcount; get_players(players, pcount, "c");
switch(csapat)
{
case true:
{
for(new i; i < pcount; i++)
{
#if defined ADMIN_LAT
if(GetBit(bitadmin, players[i]) || (GetBit(bitelo, id) == GetBit(bitelo, players[i]) && team_lekeres == get_user_team(players[i])))
#else
if(GetBit(bitelo, id) == GetBit(bitelo, players[i]) && team_lekeres == get_user_team(players[i]))
#endif
PrintChat(players[i], id, tagek, stringkonvertalas);
}
}
case false:
{
for(new i; i < pcount; i++)
#if defined ALAP_CHAT
#if defined ADMIN_LAT
if(GetBit(bitadmin, players[i]) || GetBit(bitelo, id) == GetBit(bitelo, players[i]))
#else
if(GetBit(bitelo, id) == GetBit(bitelo, players[i]))
#endif
PrintChat(players[i], id, tagek, stringkonvertalas);
#else
PrintChat(players[i], id, tagek, stringkonvertalas);
#endif
}
}
static sAuthId[25], sName[32];
get_user_name(id, sName, charsmax(sName));
get_user_authid(id, sAuthId, charsmax(sAuthId));
log_message("^"%s<%d><%s><%s>^" %s ^"%s^"", sName, get_user_userid(id), sAuthId, sTeam, csapat ? "say_team" : "say" , stringkonvertalas);
return PLUGIN_HANDLED;
}
PrintChat(iReceiver, iSender, const tagek[], const uzenet[])
{
message_begin(MSG_ONE, 76, .player=iReceiver);
write_byte(iSender);
write_string(tagek);
write_string("");
write_string(uzenet);
message_end();
}
stock kereses(const id)
{
for(new i; i < ArraySize(adat); i++)
{
ArrayGetArray(adat, i, jatekosadat);
switch(jatekosadat[TIPUS])
{
case 'j':
{
if(get_user_flags(id) & read_flags(jatekosadat[ELLENORZES]))
return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
}
case 'i':
{
static sIP[16]; get_user_ip(id, sIP, charsmax(sIP), 1);
if(!strcmp(jatekosadat[ELLENORZES], sIP))
return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
}
case 's':
{
static sAuthid[25]; get_user_authid(id, sAuthid, charsmax(sAuthid));
if(!strcmp(jatekosadat[ELLENORZES], sAuthid))
return copy(prefix[id], charsmax(prefix[]), jatekosadat[PREFIX]);
}
}
}
return prefix[id][0] = 0;
}
stock jogellenorzes(id)
{
static flagek; flagek = get_user_flags(id);
if(flagek & TULAJ_JOG) return 1;
else if(flagek & ADMIN_JOG) return 2;
else if(flagek & VIP_JOG) return 3;
return 0;
}
stock bool:is_user_steam(id)
{
static dp_pointer;
if(dp_pointer || (dp_pointer = get_cvar_pointer("dp_r_id_provider")))
{
server_cmd("dp_clientinfo %d", id);
server_exec();
return (get_pcvar_num(dp_pointer) == 2) ? true : false;
}
return false;
}