Всё о скриптинге в Sa-Mp

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Антимат

Сообщений 1 страница 9 из 9

1

Люди, как антимат сделать?

0

2

Поставлю вопрос по другому: как заменять определёные слова на например "*" :)

0

3

Хммм нет пок4а опкода такого. Или можно в OnPlayerText не порбывал но надо попробывать.

0

4

Код:
#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);
}

Вот есть скрипт. Только когда его вставляеш русские буквы заменяются на много "я"

0

5

Ты встовляеш так (текст русский) и у тебя получается яя напиши так (*** Текст русский) и всё окей будет.

0

6

ЭЭЭЭ, непонял

0

7

короче когда вводишь нужно пробел вначале поставить! А потом уже писать русский текст

0

8

А никак нельзя сделать чтоб ненадо было пробел ставить?

0

9

Можно, но тогда в чат будет писаться сообщение одним цветом, а так ник цвета игрока, а сообщение белое.

0