eklenti çalışma mantığı aşağıdaki gibidir.
tag.ini içeriği
// Yetki, TAG ISMI, Tagrengi, nickrengi, say rengi
"bi" "[SKY]" "white" "red" "blue"
Kod: Tümünü seç
#include <amxmodx>
#include <amxmisc>
#define PLUGIN "Admin taglar"
#define AUTHOR "Odin"
#define ACCESS_LEVEL ADMIN_CHAT
#define ADMIN_LISTEN ADMIN_BAN
new message[192]
new sayText
new teamInfo
new maxPlayers
//new g_MessageColor
//new g_NameColor
//new g_AdminListen
new strName[191]
new strText[191]
new alive[11]
new const flag_auths[32][32]
new const tags_names[32][32]
new const tags_color[32][32]
new const name_color[32][32]
new const chat_color[32][32]
new taglar_admingrup_opt_tags
new taglar_admingrup_opt_team
new taglar_admingrup_opt_root
new taglar_admingrup_opt_news
new taglar_admingrup_opt_free
new taglar_admingrup_opt_deat
new taglar_admingrup_tdisable
public plugin_init()
{
register_plugin (PLUGIN, AMXX_VERSION_STR, AUTHOR)
//g_MessageColor = register_cvar ("amx_color", "2") // Message colors: [1] Default Yellow, [2] Green, [3] White, [4] Blue, [5] Red
//g_NameColor = register_cvar ("amx_namecolor", "6") // Name colors: [1] Default Yellow, [2] Green, [3] White, [4] Blue, [5] Red, [6] Team-color
//g_AdminListen = register_cvar ("amx_listen", "1") // Set whether admins see or not all messages (Alive, dead and team-only)
taglar_admingrup_opt_tags = register_cvar ("taglar_admingrup_opt_tags", "1") // Oyuncularin isimlerinin basinda yetki TAG ini goster
taglar_admingrup_opt_team = register_cvar ("taglar_admingrup_opt_team", "0") // Oyuncularin isimlerinin basinda takim TAG ini goster
taglar_admingrup_opt_root = register_cvar ("taglar_admingrup_opt_root", "1") // Adminler tum yasizmalari okuyabilir
taglar_admingrup_opt_news = register_cvar ("taglar_admingrup_opt_news", "0") // Server a girenler, admin değil ise ilk 120sn mesaj yazamazlar
taglar_admingrup_opt_free = register_cvar ("taglar_admingrup_opt_free", "1") // [0]yasak, [1] Serbest, [2] Sadece adminler gorur
taglar_admingrup_opt_deat = register_cvar ("taglar_admingrup_opt_deat", "1") // Ölülerin yazabilmesi
taglar_admingrup_tdisable = register_cvar ("taglar_admingrup_tdisable", "0") // Takım mesajında {TAKIM} yazisini gizle
sayText = get_user_msgid ("SayText")
teamInfo = get_user_msgid ("TeamInfo")
maxPlayers = get_maxplayers()
register_message (sayText, "avoid_duplicated")
register_clcmd ("say", "hook_say")
register_clcmd ("say_team", "hook_teamsay")
load_colors()
}
public avoid_duplicated (msgId, msgDest, receiver){
return PLUGIN_HANDLED
}
public hook_say(id){
read_args (message, 191)
remove_quotes (message)
func_say(id,message,0)
}
public hook_teamsay(id){
read_args (message, 191)
remove_quotes (message)
func_say(id,message,1)
}
public func_say(id,message[],protokol){
replace_all(message,190,"^x01","")
replace_all(message,190,"^x02","")
replace_all(message,190,"^x03","")
replace_all(message,190,"^x04","")
replace_all(message,190,"^x05","")
replace_all(message,190,"^x06","")
if (message[0] == '@' || message[0] == '/' || message[0] == '!' || equal (message, "")) // Ignores Admin Hud Messages, Admin Slash commands,
return PLUGIN_CONTINUE
new str_name[32]
get_user_name (id, str_name, 31)
if(is_user_alive(id)){
alive = "^x01"
}else{
alive = "^x01*OLU* "
}
static color[10]
new uindex = user_auth_index(id)
new c_tags = func_color_tags(uindex)
new c_name = func_color_name(uindex)
new c_chat = func_color_chat(uindex)
//client_print(0,print_chat,"Tag: %d | Name: %d | Chat: %d",c_tags,c_name,c_chat);
new team[32],str_team[64],to_team[16]
get_user_team(id,team,31)
if(get_pcvar_num(taglar_admingrup_opt_tags)){
switch (c_tags){
case 1:{format (str_team, 63, "");}
case 2:{format (str_team, 63, "^x04");}
case 3:
{
color = "SPECTATOR"
format (str_team, 63, "^x03")
}
case 4:
{
color = "CT"
format (str_team, 63, "^x03")
}
case 5:
{
color = "TERRORIST"
format (str_team, 63, "^x03")
}
case 6:
{
get_user_team (id, color, 9)
format (str_team, 63, "^x03")
}
}
format (str_team, 63, "%s%s ",str_team,tags_names[uindex])
}
if(get_pcvar_num(taglar_admingrup_opt_team)){
if(equal(team,"TERRORIST")){ format (str_team, 63, "%s(Terorist) ",str_team); }
if(equal(team,"CT")) { format (str_team, 63, "%s(Counter-Terorist) ",str_team); }
if(equal(team,"SPECTATOR")){ format (str_team, 63, "%s(Izleyici) ",str_team); }
}
if(protokol){
if(!get_pcvar_num(taglar_admingrup_tdisable)){
to_team = "{TAKIM} ";
}
}
format (str_team, 63, "%s%s",str_team,to_team)
// Name
switch (c_name){
case 1:{format (strName, 191, "%s%s%s", alive,str_team,str_name);}
case 2:{format (strName, 191, "%s%s^x04%s", alive,str_team,str_name);}
case 3:
{
color = "SPECTATOR"
format (strName, 191, "%s%s^x03%s", alive,str_team,str_name);
}
case 4:
{
color = "CT"
format (strName, 191, "%s%s^x03%s", alive,str_team,str_name);
}
case 5:
{
color = "TERRORIST"
format (strName, 191, "%s%s^x03%s", alive,str_team,str_name);
}
case 6:
{
get_user_team (id, color, 9)
format (strName, 191, "%s%s^x03%s", alive,str_team,str_name);
}
}
// Mesaj
switch (c_chat){
case 1: // Yellow
format (strText, 191, "%s", message)
case 2: // Green
format (strText, 191, "^x04%s", message)
case 3: // White
{
copy (color, 9, "SPECTATOR")
format (strText, 191, "^x03%s", message)
}
case 4: // Blue
{
copy (color, 9, "CT")
format (strText, 191, "^x03%s", message)
}
case 5: // Red
{
copy (color, 9, "TERRORIST")
format (strText, 191, "^x03%s", message)
}
default:
format (strText, 191, "%s", message)
}
new x_mute[10];
get_user_info(id, "x_mute", x_mute, 9);
if(get_pcvar_num(taglar_admingrup_opt_free) == 0 && uindex == 30 || equal(x_mute , "403")){return PLUGIN_CONTINUE;} // Eger oyuncuya konusmak yasaksa ve bu kisi admin degilse
format (message, 191, "%s^x01 : %s", strName, strText)
sendMessage (color, id,protokol) // Sends the colored message
return PLUGIN_HANDLED
}
public sendMessage (color[], id,protokol){
// taglar_admingrup_opt_user
// [1] Oyuncuya yazmak serbest,
// [2] Oyuncuya yazmak serbest fakat sadece adminler gorur,
// [3] Top15 e girmis kisiler herkese yazabilir
new gorebilir = 0
for (new player = 1; player < maxPlayers; player++){
if (!is_user_connected(player)){continue;} // oyuncu yoksa iptal
gorebilir = 1
new karar = 0
// Yazar admin ise
if( user_auth_index(id) != 30 && !protokol || id == player){
karar = 1
}
// Eger adminler tum mesajlari okuyorsa ve bu kisi adminse mesaji gonder
if(get_pcvar_num(taglar_admingrup_opt_root) && user_auth_index(player) != 30 ){
karar = 1
}
// 120 Sn yazamazlar | adminler yazabilir.
if(get_pcvar_num(taglar_admingrup_opt_news) && !karar){
if(get_user_time(player) < get_pcvar_num(taglar_admingrup_opt_news) ){
gorebilir = 0
karar = 1
}
}
//
if(user_auth_index(id) == 30){ //YAZAN KİŞİ OYUNCU
if(get_pcvar_num(taglar_admingrup_opt_free) == 0 && !karar){
gorebilir = 0
karar = 1
}
if(user_auth_index(player) == 30){ // HEDEF OYUNCU İSE
if(get_pcvar_num(taglar_admingrup_opt_free) == 2 && !karar){
gorebilir = 0
karar = 1
}
}
}
if(user_auth_index(id) == 30 && user_auth_index(player) == 30 && get_pcvar_num(taglar_admingrup_opt_deat) == 0){
if (!is_user_alive(id) && is_user_alive(player)){
gorebilir = 0
karar = 1
}
}
if(protokol == 1){
if(get_user_team(id) != get_user_team(player) && !karar){
gorebilir = 0
karar = 1
}
}
if(gorebilir == 1){
write_chat_text(id,player,color,message)
}
}
return PLUGIN_CONTINUE
}
public write_chat_text(yazar,okuyucu,renk[],mesaj[]){
new teamName[10]
get_user_team (okuyucu, teamName, 9)
changeTeamInfo (okuyucu, renk)
writeMessage (okuyucu, message)
changeTeamInfo (okuyucu, teamName)
}
public changeTeamInfo (player, team[])
{
message_begin (MSG_ONE, teamInfo, _, player) // Tells to to modify teamInfo (Which is responsable for which time player is)
write_byte (player) // Write byte needed
write_string (team) // Changes player's team
message_end() // Also Needed
}
public writeMessage (player, message[])
{
message_begin (MSG_ONE, sayText, {0, 0, 0}, player) // Tells to modify sayText (Which is responsable for writing colored messages)
write_byte (player) // Write byte needed
write_string (message) // Effectively write the message, finally, afterall
message_end () // Needed as always
}
public func_color_tags(ix){
if(equal(tags_color[ix],"normal")){return 1;}
if(equal(tags_color[ix],"green")) {return 2;}
if(equal(tags_color[ix],"white")) {return 3;}
if(equal(tags_color[ix],"blue")) {return 4;}
if(equal(tags_color[ix],"red")) {return 5;}
if(equal(tags_color[ix],"team")) {return 6;}
return 1;
}
public func_color_name(ix){
// Name colors: [1] Default Yellow, [2] Green, [3] White, [4] Blue, [5] Red, [6] Team-color
if(equal(name_color[ix],"normal")){return 1;}
if(equal(name_color[ix],"green")) {return 2;}
if(equal(name_color[ix],"white")) {return 3;}
if(equal(name_color[ix],"blue")) {return 4;}
if(equal(name_color[ix],"red")) {return 5;}
if(equal(name_color[ix],"team")) {return 6;}
return 6;
}
public func_color_chat(ix){
// Name colors: [1] Default Yellow, [2] Green, [3] White, [4] Blue, [5] Red, [6] Team-color
if(equal(chat_color[ix],"normal")){return 1;}
if(equal(chat_color[ix],"green")) {return 2;}
if(equal(chat_color[ix],"white")) {return 3;}
if(equal(chat_color[ix],"blue")) {return 4;}
if(equal(chat_color[ix],"red")) {return 5;}
if(equal(chat_color[ix],"team")) {return 6;}
return 6;
}
public user_auth_index(id){
new szFlags[ 64 ];
YetkileriCek( id , szFlags , charsmax( szFlags ) );
for (new i = 0; i < sizeof flag_auths; i++){
if(equal(flag_auths[i],szFlags)){
return i
}
}
if(equal(szFlags,"z")){
return 30
}
return 0;
}
public load_colors(){
new szCfgsDir[64];
get_configsdir(szCfgsDir , 63);
new szFileStr[94];
format(szFileStr , 93 , "%s/taglar.ini" , szCfgsDir );
flag_auths[30] = "z"
tags_names[30] = ""
tags_color[30] = "normal"
name_color[30] = "team"
chat_color[30] = "normal"
new index = 1;
if(file_exists(szFileStr)) {
new szText[256];
new nLen=0 , nLine=0;
while(read_file(szFileStr , nLine++ , szText , 200 , nLen)) {
if(szText[0] == ';') continue;
new l_auth[32], l_tag[32], l_t_color[16], l_n_color[16], l_c_color[16]
parse(szText ,l_auth ,charsmax( l_auth) ,l_tag ,charsmax( l_tag) ,l_t_color ,charsmax( l_t_color) ,l_n_color ,charsmax( l_n_color) ,l_c_color ,charsmax( l_c_color) );
flag_auths[index] = l_auth;
tags_names[index] = l_tag
tags_color[index] = l_t_color
name_color[index] = l_n_color
chat_color[index] = l_c_color
index++
}
} else {
log_amx("Chat color eklentisi icin taglar.ini dosyasi bulunamadi")
}
return PLUGIN_CONTINUE;
}
YetkileriCek( id , szFlags[] , iMaxLen )
{
new iFlags = get_user_flags( id ) , iStartFlag = 'a' , iIndex;
for ( new i = 0 ; i < ( 'z' - 'a' ) ; i++ )
{
if ( iFlags & ( 1 << i ) )
{
szFlags[ iIndex++ ] = iStartFlag + i;
}
if ( iIndex == iMaxLen )
break;
}
return iIndex;
}