Люди, как антимат сделать?
Антимат
Сообщений 1 страница 9 из 9
Поделиться22006-11-11 21:35:20
Поставлю вопрос по другому: как заменять определёные слова на например "*"
Поделиться32006-11-12 14:59:59
Хммм нет пок4а опкода такого. Или можно в OnPlayerText не порбывал но надо попробывать.
Поделиться42006-11-12 15:55:42
#include <a_samp> #include <dutils> #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[]) { SendClientMsg(playerid,"giii"); 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) { gFilter[gFilterProps[FILTER_COUNT]] = tmp; gFilterProps[FILTER_COUNT]++; fread(fhnd,tmp); StripNewLine(tmp); } fclose(fhnd); } else { printf("*** CRITICAL ERROR: File '%s' not found. ***", gFilterProps[FILTER_FILENAME]); OnFilterScriptExit(); } } AddFilter(playerid, filter[]) { new string[MAX_STRING]; if(gFilterProps[FILTER_COUNT]>=MAX_FILTERS) { format(string,MAX_STRING,"Filter '%s' not added. Maximum filter buffer reached.",filter); } else { for(new i=0; i<gFilterProps[FILTER_COUNT]; i++) { if(equal(gFilter[i],filter,false)) { format(string,MAX_STRING,"Filter '%s' not added. It already exists.",filter); SendClientMsg(playerid,string); return; } } format(gFilter[gFilterProps[FILTER_COUNT]],MAX_STRING,"%s",filter); gFilterProps[FILTER_COUNT]++; if(SaveFilters()) { format(string,MAX_STRING,"Filter '%s' successfully added.",filter); } else { format(string,MAX_STRING,"Filter '%s' not added (file write error).",filter); } } SendClientMsg(playerid,string); } RemoveFilter(playerid, filter[]) { new string[MAX_STRING]; for(new i=0; i<gFilterProps[FILTER_COUNT]; i++) { if(equal(gFilter[i],filter,false)) { for(new j=i; j<MAX_FILTERS-1; j++) gFilter[j] = gFilter[j+1]; gFilter[MAX_FILTERS-1] = "\0"; gFilterProps[FILTER_COUNT]--; if(SaveFilters()) { format(string,MAX_STRING,"Filter '%s' successfully removed.",filter); } else { format(string,MAX_STRING,"Filter '%s' not removed (file write error).",filter); } SendClientMsg(playerid,string); return; } } format(string,MAX_STRING,"Filter '%s' not removed. It was not found.",filter); SendClientMsg(playerid,string); } SaveFilters() { new File:fhnd, tmp[MAX_STRING]; if(fexist(gFilterProps[FILTER_FILENAME])) { fhnd = fopen(gFilterProps[FILTER_FILENAME],io_write); for(new i=0; i<gFilterProps[FILTER_COUNT]; i++) { tmp[0]=0; strcat(tmp,gFilter[i]); if(i<gFilterProps[FILTER_COUNT]-1) strcat(tmp,"\r\n"); fwrite(fhnd,tmp); } fclose(fhnd); return true; } return false; } SLF_Parse(text[]) { new i,j,tmp[MAX_STRING],newtmp[MAX_STRING],repstr[MAX_STRING],replen,pos; set(tmp,text); for(i=0; i<gFilterProps[FILTER_COUNT]; i++) { newtmp[0]=0; repstr[0]=0; replen = strlen(gFilter[i]); for(j=0;j<replen;j++) strcat(repstr,gFilterProps[FILTER_REPCHAR]); pos = strfind(tmp,gFilter[i],true); while(pos>=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); }
Вот есть скрипт. Только когда его вставляеш русские буквы заменяются на много "я"
Поделиться52006-11-12 19:43:44
Ты встовляеш так (текст русский) и у тебя получается яя напиши так (*** Текст русский) и всё окей будет.
Поделиться62006-11-12 19:50:09
ЭЭЭЭ, непонял
Поделиться72006-11-12 20:56:09
короче когда вводишь нужно пробел вначале поставить! А потом уже писать русский текст
Поделиться82006-11-12 22:24:02
А никак нельзя сделать чтоб ненадо было пробел ставить?
Поделиться92006-11-13 13:36:34
Можно, но тогда в чат будет писаться сообщение одним цветом, а так ник цвета игрока, а сообщение белое.