Люди, как антимат сделать?
Антимат
Сообщений 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
Можно, но тогда в чат будет писаться сообщение одним цветом, а так ник цвета игрока, а сообщение белое.