#include #include #define MAX_FILTERS 500 enum FILTER_MAIN { FILTER_ACTIVE, FILTER_FILENAME[128], FILTER_REPCHAR[3], FILTER_COUNT }; new gFilterProps[FILTER_MAIN]; new gFilter[MAX_FILTERS][MAX_STRING]; public OnFilterScriptInit() { print("\n\n==== Filterscript: Simple Language Filter (SLF) by Betamaster ===="); gFilterProps[FILTER_ACTIVE] = true; gFilterProps[FILTER_FILENAME][0]=0; set(gFilterProps[FILTER_FILENAME],"FS_SLFDef.inc"); gFilterProps[FILTER_REPCHAR][0]=0; set(gFilterProps[FILTER_REPCHAR],"*"); print("----------------------------------------------------------------"); printf("Processing file '%s' (replacement char: '%s')...",gFilterProps[FILTER_FILENAME],gFilterProps[FILTER_REPCHAR]); LoadFilters(); printf("%d filter definitions loaded.",gFilterProps[FILTER_COUNT]-1); print("----------------------------------------------------------------\n"); } public OnFilterScriptExit() { print("\n\n==== Filterscript: SLF ... Exited ===="); } public OnPlayerCommandText(playerid, cmdtext[]) { new cmd[MAX_STRING], tmp[MAX_STRING], i; cmd = strtok(cmdtext,i); if(equal(cmd,"/slf",false)) { if(!IsPlayerAdmin(playerid)) { SendClientMsg(playerid,"You must be an admin to use this feature."); return 1; } tmp = strtok(cmdtext,i); if(!tmp[0]) { SendClientMessage(playerid,0xFFFFFFAA,"USAGE: /slf [on/off/add [filter]/remove [filter]/reload]"); } else { if(equal(tmp,"on",false)) { gFilterProps[FILTER_ACTIVE] = true; SendClientMsg(playerid,"Enabled"); } else if(equal(tmp,"off",false)) { gFilterProps[FILTER_ACTIVE] = false; SendClientMsg(playerid,"Disabled"); } else if(equal(tmp,"add",false)) { set(tmp,right(cmdtext,strlen(cmdtext)-i)); AddFilter(playerid,tmp); } else if(equal(tmp,"remove",false)) { set(tmp,right(cmdtext,strlen(cmdtext)-i)); RemoveFilter(playerid,tmp); } else if(equal(tmp,"reload",false)) { new string[MAX_STRING]; LoadFilters(); format(string,MAX_STRING,"%d filter definitions loaded.",gFilterProps[FILTER_COUNT]); SendClientMsg(playerid,string); } } return 1; } return 0; } public OnPlayerText(playerid, text[]) { if(gFilterProps[FILTER_ACTIVE]) format(text,MAX_STRING,"%s",SLF_Parse(text)); return 1; } public OnPlayerPrivmsg(playerid, senderid, text[]) { if(gFilterProps[FILTER_ACTIVE]) format(text,MAX_STRING,"%s",SLF_Parse(text)); return 1; } //------------------------------------------------------------------------------------------------------ LoadFilters() { new File:fhnd, tmp[MAX_STRING]; if(fexist(gFilterProps[FILTER_FILENAME])) { fhnd = fopen(gFilterProps[FILTER_FILENAME],io_read); fread(fhnd,tmp); StripNewLine(tmp); gFilterProps[FILTER_COUNT]=0; while(tmp[0]!=0 && gFilterProps[FILTER_COUNT]=MAX_FILTERS) { format(string,MAX_STRING,"Filter '%s' not added. Maximum filter buffer reached.",filter); } else { for(new i=0; i=0) { strcat(newtmp,left(tmp,pos)); strcat(newtmp,repstr); tmp = right(tmp,strlen(tmp)-pos-replen); pos = strfind(tmp,gFilter[i],true); } strcat(newtmp,tmp); set(tmp,newtmp); } return tmp; } left(source[], len) { // By Alex "Y_Less" Cole new tmp[MAX_STRING]; strmid(tmp,source,0,len,MAX_STRING); return tmp; } right(source[], len) { // By Alex "Y_Less" Cole new tmp[MAX_STRING], srclen=strlen(source); strmid(tmp,source,srclen-len,srclen,MAX_STRING); return tmp; } SendClientMsg(playerid, string[]) { new tmp[MAX_STRING]; format(tmp,MAX_STRING,"[SLF] %s", string); SendClientMessage(playerid,0xFFFFFFAA,tmp); }