Re: Edit script Public Rules on Death & Join
I've made it the way you wanted - I added a cvar (rules_dead_only) and when it's set to 1, it will only print rules if player is dead. I also made it so it will print to a player when he dies, as long as he didn't use the "say /rules" command.
PHP Code:
#include <amxmodx> #include <amxmisc>
new base[] = "rules.txt"
new i, num, text[127], hudmsg[440] //max hudmessage length was 439 chars (?) new bool:g_sawrules[33]; // add by dor123 to check if used the /rules command in the current round
public plugin_init() { register_plugin("AMXX Public server rules", "1.20", "Priski") // register command register_concmd("rules_show", "rules", ADMIN_KICK, "- show rules to everybody") register_concmd("rules_enable", "r_enable", ADMIN_KICK, "- <1|0> set automessagin on/off") register_cvar("rules_admin_only", "0") register_cvar("rules_join", "1") register_cvar("rules_join_timeout", "5") register_cvar("rules_hudmessage_time", "10") register_cvar("rules_interval", "600") register_clcmd("say /rules", "clientrules", ADMIN_ALL, "- show rules") register_cvar("rules_dead_only", "1"); // added by dor12 3to make sure it will only show rules if player is dead register_event("DeathMsg", "player_died", "a"); // dor123 register_event("HLTV", "newRound", "a", "1=0", "2=0"); // dor123 }
public plugin_cfg() { if (!file_exists(base)) { write_file(base, "; This is the public rules file, put your rules below") write_file(base, "; Remember, max amount of characters is 439") console_print(0, "%s file not found. creating new ...", base) } }
public client_authorized ( id ) { // on join display rules if (get_cvar_num("rules_join")) { new tmp[1] tmp[0] = id set_task(1.0, "showrules",id,tmp,1) console_print(0, "[user %d] client auth!", tmp[0]) } return PLUGIN_HANDLED }
public showrules (pid[]) { new id = pid[0] if ( get_user_team(id) != 1 && get_user_team(id) != 2 ) { if (id) { new tmp[1] tmp[0] = id set_task(2.0, "showrules",id,tmp,1) // not yet in server console_print(0, "[user %d] wait for joining team ...", id) } return PLUGIN_HANDLED } new tmp[1] tmp[0] = id console_print(0, "[user %d] joined team : %d", id, get_user_team(id)) console_print(0, "[user %d] printing rules after %d seconds", id, get_cvar_num("rules_join_timeout")) set_task(get_cvar_float("rules_join_timeout"), "printrules", id, tmp, 1) // not yet in server return PLUGIN_HANDLED }
public printrules(pid[]) { new id = pid[0] if (file_exists(base)){ // if only dead cvar is set to 1, the player will see the rules only if he's dead (dor123) if(get_cvar_num("rules_dead_only") && !is_user_alive(id)){ console_print(0, "[user] printing rules for user %d", id) set_hudmessage ( 200, 150, 0, 0.02, 0.25, 2, 0.1, get_cvar_float("rules_hudmessage_time"), 0.05, 1.0, 1) format(hudmsg, 439, "") // read all the rules for(i=0; read_file(base, i, text, 127, num); i++) { if (num > 0 && text[0] != ';') { // display with predefined delay add(hudmsg,439,text) add(hudmsg,439,"^n") } } // show hudmessages show_hudmessage(id, hudmsg) } // if only dead cvar is set to 1 and user is alive, command won't execute (dor123) else if(get_cvar_num("rules_dead_only") && is_user_alive(id)){ client_print(id, print_chat, "Can only show rules to dead players."); return PLUGIN_HANDLED; } else if(!get_cvar_num("rules_dead_only")){ console_print(0, "[user] printing rules for user %d", id) set_hudmessage ( 200, 150, 0, 0.02, 0.25, 2, 0.1, get_cvar_float("rules_hudmessage_time"), 0.05, 1.0, 1) format(hudmsg, 439, "") // read all the rules for(i=0; read_file(base, i, text, 127, num); i++) { if (num > 0 && text[0] != ';') { // display with predefined delay add(hudmsg,439,text) add(hudmsg,439,"^n") } } // show hudmessages show_hudmessage(id, hudmsg) } } return PLUGIN_HANDLED }
public r_enable(id, level, cid) { if (!cmd_access(id, level, cid, 0)) { // NOT ADMIN return PLUGIN_HANDLED } new arg[3] read_argv(1, arg, 2) new value = str_to_num(arg) if (!isalnum(arg[0])) value = -1 if (value == 0) { if (task_exists(2)) // close task remove_task(2) console_print(id, "You have disabled automatic messages") return PLUGIN_HANDLED } if (value == 1) { // activate task, reload if already exist if (task_exists(2)) { change_task(2, get_cvar_float("rules_interval")) } else { set_task(get_cvar_float("rules_interval"), "rules", 2, "", 0, "b") } console_print(id, "You have enabled automatic messages") return PLUGIN_HANDLED } if (task_exists(2)) { console_print(id, "automessages is ON.") } else { console_print(id, "automessages is OFF.") } console_print(id, "rules_enable <1|0> (1 = ON, 0 = OFF)") return PLUGIN_HANDLED }
public clientrules(id, level, cid) { new pID[1] pID[0] = id console_print(0,"[user %d]Print rules for me only",pID[0]) printrules(pID[0]) g_sawrules[pID[0]] = true; // this is to let the plugin know the player used that command (dor123) }
public rules(id, level, cid) { new pID[1] pID[0] = id if (!cmd_access(id, level, cid, 0)) { // NOT ADMIN return PLUGIN_HANDLED } // read file to all users pID[0] = 0 console_print(0,"[user %d]Print rules for all",id) printrules(pID[0]) // Reset scheduled task after display if (get_cvar_float("rules_interval") > 0) { if (task_exists(2)) { change_task(2, get_cvar_float("rules_interval")) } else { set_task(get_cvar_float("rules_interval"), "rules", 200, "", 0, "b") } } return PLUGIN_HANDLED }
public player_died(){ new victim = read_data(2); static pID[1]; pID[0] = victim if( (pID[0]) && is_user_connected(pID[0]) ){ if(g_sawrules[pID[0]]) return PLUGIN_CONTINUE; // if player used the /rules command he won't see the rules when he dies (dor123) else set_task(0.1, "printrules", victim, pID, 1); // otherwise he will (dor123) } return PLUGIN_HANDLED; }
public newRound(){ static players[32], players_num, i; get_players(players, players_num, "c"); for(i = 0 ; i < players_num ; i++) g_sawrules[i] = false; // changes everyones' g_sawrules[] to flase on new round }
If it doesn't work let me know.
|