okey, got the script form hlrn.net. Made by Twilight Suzuka. And it supose to work on Ts. But the script had two errors, one was No free edicts and the second one was Get_user_menu. I managed to get the no free edicts away buy uncommenting something at the stop of the script. and then i really struggled to get the second part to work. What can be wrong, il post the script. with the first probleme fixed.
*EDIT* I forgot to add the lines whrer the fault cam up in debug mode. 532, 177, 101
Code:
#pragma tabsize 0
#include <amxmodx>
#include <amxmisc>
#include <string>
#include <fun>
#include <engine>
new kills[33], deaths[33], starttime[33], lastkill[33], secondkill[33], killed[33], killedby[33], warnings[33], warnstatus[33]
new prunetime = 1209600
new bool:dmer[33], bool:potdmer[33]
new statusbar[5][32] = {"No status", "Slight Criminal Status", "Moderate Criminal Status", "High Criminal Status", "DeathMatcher"};
new barremarks[5][50] = {"Keep up the good work", "Keep it on the low", "Lay low a while", "Cops are on your tail", "What are you doing in an RP server?"};
new punishments[4][30] = {"Permanent Ban","Temp Ban","Kick","Blank"}
new storedid[33] = -1
public plugin_init()
{
register_plugin("Criminal Mod", "1.17", "TSX")
register_cvar("nodm_block","1",FCVAR_PRINTABLEONLY);
register_cvar("nodm_respawn","1",FCVAR_PRINTABLEONLY);
register_cvar("nodm_fadeblack","1",FCVAR_PRINTABLEONLY);
register_cvar("aa_death_level", "200",FCVAR_PRINTABLEONLY);
register_cvar("aa_kill_level", "300",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_warning", "300",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_slap", "400",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_slay", "450",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_blank", "500",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_kick", "600",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_bantemp", "650",FCVAR_PRINTABLEONLY);
register_cvar("aa_warning_ban", "700",FCVAR_PRINTABLEONLY);
register_cvar("aa_admin_highlander", "1",FCVAR_PRINTABLEONLY);
register_cvar("clear_allowed", "1",FCVAR_PRINTABLEONLY);
register_event("TSMessage","respawn_message","b");
register_menucmd(register_menuid("AA: Consulting on:"), 1023, "consult_key");
register_concmd("say /criminals","show_criminals",ADMIN_KICK)
register_concmd("amx_deathblock","deathblock",ADMIN_LEVEL_A,"<0|1> - turns death blocking on or off");
register_concmd("amx_forcerespawn","forcerespawn",ADMIN_LEVEL_A,"<0|1> - turns force respawn on or off");
register_concmd("amx_fadetoblack","fadetoblack",ADMIN_LEVEL_A,"<0|1> - turns fade to black on death on or off");
set_task(2.0,"crimbar",0,"",0,"bd");
// handle deathblock on load
if(!get_cvar_num("nodm_block")) set_msg_block(get_user_msgid("DeathMsg"),BLOCK_NOT);
else if(get_cvar_num("nodm_block")) set_msg_block(get_user_msgid("DeathMsg"),BLOCK_SET);
}
//public respawn_message(id) {
// if(!get_cvar_num("nodm_respawn")) return PLUGIN_HANDLED
// spawn(id)
//
//}
public fade(id) {
if(is_user_alive(id)) {
message_begin(MSG_ONE,get_user_msgid("ScreenFade"),{0,0,0},id);
write_short(~0); // duration, ~0 is max
write_short(~0); // hold time, ~0 is max
write_short(1<<12); // flags, no idea wtf 1<<12 is
write_byte(0); // red, 0 for black
write_byte(0); // green, 0 for black
write_byte(0); // blue, 0 for black
write_byte(255); // alpha, 255 for total black
message_end();
set_task(10.0,"fade",id); // reset it, screenfade only last for so long
}
}
public crimbar(){
if(!get_cvar_num("nodm_block")) set_msg_block(get_user_msgid("DeathMsg"),BLOCK_NOT);
else if(get_cvar_num("nodm_block")) set_msg_block(get_user_msgid("DeathMsg"),BLOCK_SET);
for(new i=0;i< get_maxplayers(); i++){
if(is_user_connected(i)){
new lev = warnstatus[i]/100
if(lev>5) lev = 5
set_hudmessage(0,175,0,-1.0,-0.02,0,0.0,5.0,0.0,0.0,2);
show_hudmessage(i,"Criminal Status:%s^n%s",statusbar[lev],barremarks[lev]);
}
}
return 1;
}
public client_putinserver(id) {
set_user_frags(id, 0)
remember_frags(id)
client_cmd(id,"hud_centerid 0")
client_cmd(id,"hud_deathnotice_time 0")
client_cmd(id,"hud_drawhistory_time 0")
starttime[id] = get_systime();
lastkill[id] = -1
secondkill[id] = -1
killed[id] = -1
killedby[id] = -1
check_em(id,0)
check_em(id,1)
warnstatus[id] = -1
return PLUGIN_CONTINUE;
}
public client_death(killer,victim,wpnindex,hitplace,TK){
kills[killer] += get_cvar_num("aa_kill_level");
deaths[victim] += get_cvar_num("aa_death_level");
secondkill[killer] = lastkill[killer]
lastkill[killer] = get_systime();
killed[victim] = victim
killedby[victim] = killer
calculate_status(killer,1)
calculate_status(victim,0)
record_frags(killer,1)
record_frags(victim,0)
check_em(killer,1)
check_em(victim,0)
if(get_cvar_num("nodm_fadeblack")) set_task(2.5,"fade",victim);
if(get_cvar_num("clear_allowed")){
set_user_frags(killer, 0)
set_user_frags(victim, 0)
}
exec_clear()
return 1;
}
public calculate_status(id,mode){
if(kills[id] > 5) potdmer[id] = true;
if(warnings[id] > 5) potdmer[id] = true
if(potdmer[id] == true){
new multi = (lastkill[id] - secondkill[id])/60
new pote = kills[id]/multi
new potential = pote*100
if(potential > 500) dmer[id] = true
}
if(dmer[id] == true) warnstatus[id] = 1000;
if(mode == 1){
if((potdmer[killedby[id]] == true) || (dmer[killedby[id]] == true)){
if(potdmer[id] == false || dmer[id] == false) return 1;
}
if(secondkill[id] == -1) warnstatus[id] += get_cvar_num("aa_kill_level")
else{
new multi = (lastkill[id] - secondkill[id])/60
new pote = kills[id]/multi
new potential = pote*100
if(warnstatus[id] == -1) warnstatus[id] = potential
else warnstatus[id] += potential
}
return 1;
}
if(mode == 0){
if(warnstatus[id] == -1) return 1;
else{
new timebetween = lastkill[id] - secondkill[id]
if(potdmer[id] == true){
if(timebetween < 300) warnstatus[id] += (kills[id]/(lastkill[id] - secondkill[id]))*100
else potdmer[id] = true
}
}
return 1
}
return 0;
}
public check_em(id,mode){
new admin=0
if(get_cvar_num("aa_admin_highlander")){
admin = check_admins()
}
if(mode == 1){
if(warnstatus[id] > (get_cvar_num("aa_warning_banperm"))){
warnings[id] += 1
if(admin != 0){
consult_admin(admin,id,1)
return 1;
}
spawn(id);
console_print(id,"[TSX AA] **** You have been banned for Dm'ing. ****")
new userid2 = get_user_userid(id)
server_cmd("banid 0 #%d kick;writeid",userid2)
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_bantemp"))){
warnings[id] += 1
if(admin != 0){
consult_admin(admin,id,2)
return 1;
}
spawn(id);
console_print(id,"[TSX AA] **** You have been banned for Dm'ing. ****")
new userid2 = get_user_userid(id)
server_cmd("banid 10 #%d kick;writeid",userid2)
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_kick"))){
warnings[id] += 1
if(admin != 0){
consult_admin(admin,id,3)
return 1;
}
spawn(id);
console_print(id,"[TSX AA] **** You have been kicked for DM'ing. ****")
new userid2 = get_user_userid(id)
server_cmd("kick #%d",userid2)
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_blank"))){
warnings[id] += 1
if(admin != 0){
consult_admin(admin,id,4)
return 1;
}
spawn(id);
client_print(id,print_chat,"[TSX AA] **** This is your last warning. Do not DM. ****")
blank(id)
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_slay"))){
warnings[id] += 1
spawn(id);
client_print(id,print_chat,"[TSX AA] **** This is your third warning. Do not DM. ****")
new health2 = get_user_health(id);
set_user_health(id, health2-100);
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_slap"))){
warnings[id] += 1
spawn(id);
client_print(id,print_chat,"[TSX AA] **** This is your second warning. Do not DM. ****")
user_slap(id,60);
return 1;
}
if(warnstatus[id] > (get_cvar_num("aa_warning_warning"))){
warnings[id] += 1
strip_user_weapons(id)
spawn(id);
client_print(id,print_chat,"[TSX AA] **** This is your first warning. Do not DM. ****")
return 1;
}else{
unblank(id)
spawn(id)
if(warnings[id] > 0) warnings[id]--
}
}
if(mode == 0){
if(potdmer[id] == true) check_em(id,1)
if(dmer[id] == true) check_em(id,1)
}
return 1;
}
public exec_clear() {
new players[32], inum
get_players(players,inum,"a")
for(new i = 0 ;i < inum ;++i) {
if(get_cvar_num("clear_allowed")){
client_cmd(players[i],"clear")
}
client_cmd(players[i],"hud_centerid 0")
client_cmd(players[i],"hud_deathnotice_time 0")
client_cmd(players[i],"hud_drawhistory_time 0")
}
}
public show_criminals(id,level,cid){
if(!cmd_access(id,level,cid,2)) { // no access
return PLUGIN_HANDLED;
}
for(new i=0;i< get_maxplayers(); i++){
if(is_user_connected(i)){
if(dmer[id] == true){
new username[32]
get_user_name(i,username,31)
console_print(id,"%i. %s is a dmer. Level:%i",i,username,warnstatus[i])
}else if(potdmer[id] == true){
new username[32]
get_user_name(i,username,31)
console_print(id,"%i. %s is a potential dmer. Level:%i",i,username,warnstatus[i])
}
}
}
return 1;
}
public remember_frags(id){
new authid[32], vaultstring[256]
get_user_authid(id,authid,31)
format(vaultstring,255,"CRIM=%s=status",authid); // get money
new stat[256]
get_cvaultdata(vaultstring,stat,255,"crim_vault.ini",1)
warnstatus[id] = str_to_num(stat)
if(cvaultdata_exists(vaultstring,"crim_vault.ini",1)) {
format(vaultstring,255,"CRIM=%s=kills",authid); // get money
new kil[256];
get_cvaultdata(vaultstring,kil,255,"crim_vault.ini",1);
kills[id] = str_to_num(kil);
}
else kills[id] = 0
if(cvaultdata_exists(vaultstring,"crim_vault.ini",1)) {
format(vaultstring,255,"CRIM=%s=deaths",authid); // get money
new det[256];
get_cvaultdata(vaultstring,det,255,"crim_vault.ini",1);
deaths[id] = str_to_num(det);
}
else deaths[id] = 0
return 1;
}
public record_frags(id,mode){
new authid[32], vaultstring[256]
get_user_authid(id,authid,31)
format(vaultstring,255,"CRIM=%s=status",authid);
new stat[256]
num_to_str(warnstatus[id],stat,255)
set_cvaultdata(vaultstring,stat,"crim_vault.ini",1)
if(mode == 1){
if(cvaultdata_exists(vaultstring,"crim_vault.ini",1)) {
format(vaultstring,255,"CRIM=%s=kills",authid); // get money
new kil[256];
num_to_str(kills[id],kil,255)
set_cvaultdata(vaultstring,kil,"crim_vault.ini",1);
}
}
if(mode == 0){
if(cvaultdata_exists(vaultstring,"crim_vault.ini",1)) {
format(vaultstring,255,"CRIM=%s=deaths",authid); // get money
new kil[256];
num_to_str(deaths[id],kil,255)
set_cvaultdata(vaultstring,kil,"crim_vault.ini",1);
}
}
return 1;
}
public blank(id){
set_user_hitzones(id, 0, 0)
}
public unblank(id){
set_user_hitzones(id, 0, 255)
}
// returns 1 if "key" was found in "file", 0 otherwise
public get_cvaultdata(const key[], data[], len, const file[],prune) {
if(!file_exists(file)) { // no file
write_file(file,"//CustomVault by Avalanche + Mel - leave this line intact",-1);
return 0;
}
// invalid parameters
if(strlen(key) == 0 || strlen(file) == 0 || len <= 1) return 0; // return failure
new line, text[256], txtlen;
// go through file
while(read_file(file,line,text,255,txtlen)) {
line = read_file(file,line,text,255,txtlen); // get data
new currkey[128], currdata[128]; // title, data
strtok(text,currkey,127,currdata,127,' ',1); // split into parts
if(prune){
new currtime[128]
strtok(currdata,currdata,127,currtime,127,' ',1); // split into parts
new storedtime = str_to_num(currtime)
new systime = get_systime ()
if((systime - storedtime) < prunetime) remove_cvaultdata(key,file,1);
}
if(equal(key,currkey)) { // if we found a match
format(data,len,"%s",currdata);
if(prune) set_cvaultdata(key,data,file,1);
return 1; // return success
}
}
return 0; // return failure
}
// returns 1 if "key" was found and changed in "file", 0 otherwise
public set_cvaultdata(const key[], const data[], const file[],prune) {
if(!file_exists(file)) { // no file
write_file(file,"//CustomVault by Avalanche + Mel - leave this line intact",-1);
return 0;
}
// invalid parameters
if(strlen(key) == 0 || strlen(data) == 0 || strlen(file) == 0) return 0; // return failure
new string[256], theline, result; // our vault format
if(prune){
new systime = get_systime ()
format(string,255,"%s %s %i",key,data,systime); // format it!
result = cvaultdata_exists(key,file,1);
}else{
format(string,255,"%s %s",key,data); // format it!
result = cvaultdata_exists(key,file,0);
}
if(!result) { // no result
theline = -1; // set to last line by default
new line, text[256], txtlen;
// go through file
while((line=read_file(file,line,text,255,txtlen)) != 0) if(equal(text,"")) theline = line - 1;
}else theline = result; // override that line
if(write_file(file,string,theline)) return 1; // return success
return 0; // return failure by default
}
// returns 1 if "key" was found in and removed from "file", otherwise 0
public remove_cvaultdata(const key[], const file[],prune) {
if(!file_exists(file)) { // no file
write_file(file,"//CustomVault by Avalanche + Mel - leave this line intact",-1);
return 0;
}
// invalid parameters
if(strlen(key) == 0 || strlen(file) == 0) return 0;
new line, text[256], txtlen;
// go through file
while((line=read_file(file,line,text,255,txtlen)) != 0) {
new currkey[128], currdata[128];// title, data
strtok(text,currkey,127,currdata,127,' ',1); // split into parts
if(prune){
new currtime[128]
strtok(currdata,currdata,127,currtime,127,' ',1); // split into parts
new storedtime = str_to_num(currtime)
new systime = get_systime ()
if((systime - storedtime) < prunetime) remove_cvaultdata(key,file,1);
}
if(equal(currkey,key)) if(write_file(file,"",line-1)) return 1;
}
return 0; // return failure
}
// returns line if "key" was found in if found in "file", otherwise 0
public cvaultdata_exists(const key[], const file[],prune) {
if(!file_exists(file)) { // no file
write_file(file,"//CustomVault by Avalanche + Mel - leave this line intact",-1);
return 0;
}
// invalid parameters
if(strlen(key) == 0 || strlen(file) == 0) return 0; // return failure
new line, text[256], txtlen;
// go through file
while((line=read_file(file,line,text,255,txtlen)) != 0) {
new title[128], data[128]; // title, data
strtok(text,title,127,data,127,' ',1); // split into parts
if(prune){
new currtime[128]
strtok(data,data,127,currtime,127,' ',1); // split into parts
new storedtime = str_to_num(currtime)
new systime = get_systime ()
if((systime - storedtime) < prunetime) remove_cvaultdata(key,file,1);
}
if(equal(key,title)) return (line - 1)
}
return 0; // return failure
}
public consult_admin(id,player,num){
new menu[1024], name[32]
get_user_name(player,name,31)
storedid[id] = player
format(menu,sizeof(menu),"AA: Consulting on: %s^n Potential punishment: %s^n Status number: %i^n Warnings: %i)",name,punishments[num],warnstatus[player],warnings[player])
add(menu, sizeof(menu), "^n1. Ban Perm.")
add(menu, sizeof(menu), "^n2. Ban")
add(menu, sizeof(menu), "^n3. Kick")
add(menu, sizeof(menu), "^n4. Blank")
add(menu, sizeof(menu), "^n5. Slay")
add(menu, sizeof(menu), "^n6. Slap")
add(menu, sizeof(menu), "^n7. Warn")
add(menu, sizeof(menu), "^n^n0. Leave Alone for now")
new keys = (1<<0|1<<1|1<<2|1<<3|1<<4|1<<5|1<<6|1<<7|1<<8|1<<9)
show_menu(id,keys,menu)
return PLUGIN_HANDLED;
}
public consult_key(id,key) {
new player = storedid[id]
new userid2 = get_user_userid(player)
switch(key) {
case 0: server_cmd("banid 0 #%d kick;writeid",userid2)
case 1: server_cmd("banid 10 #%d kick;writeid",userid2)
case 2: server_cmd("kick #%d",userid2)
case 4: user_kill(player)
case 5: user_slap(player,60)
case 6: client_print(player,print_chat,"No DM'ing. Stop killing. You have been warned.")
}
return PLUGIN_HANDLED
}
public check_admins(){
new potadmin[2];
for(new i=0;i<get_maxplayers();i++){
new menuid, menukeys
new see = get_user_menu(i,menuid,menukeys);
if(see == 0){
if(!(get_user_flags(i)&ADMIN_USER)){
if(get_user_flags(i)&ADMIN_RCON) return i;
if(get_user_flags(i)&ADMIN_BAN) return i;
if(get_user_flags(i)&ADMIN_KICK) return i;
if(potadmin[1] < 5) if(get_user_flags(i)&ADMIN_VOTE) potadmin[0] = i, potadmin[1] = 5
if(potadmin[1] < 4) if(get_user_flags(i)&ADMIN_SLAY) potadmin[0] = i, potadmin[1] = 4
if(potadmin[1] < 3) if(get_user_flags(i)&ADMIN_PASSWORD) potadmin[0] = i, potadmin[1] = 3
if(potadmin[1] < 2) if(get_user_flags(i)&ADMIN_CFG) potadmin[0] = i, potadmin[1] = 2
if(potadmin[1] < 1) if(get_user_flags(i)&ADMIN_MENU) potadmin[0] = i, potadmin[1] = 1
}
}
}
if(potadmin[0]) return potadmin[0]
return 0
}