[quote]#include <amxmodx>
#include <fakemeta>
#include <orpheu>
/*
1 - cauta pentru mai multe simboluri, precum: ^ / & / + / " (la sf. de nick)
orice valoare care nu este egala cu 1 reprezinta ocolirea simbolurilor precizate anterior
*/
#define EXTRA 1
#define MAX_USER_MSG_DATA 36 //default is 192 in hlds/rehlds
new cmdx[21]
new CheckOS = 0 // 1 - windows 2 - linux
public plugin_precache(){
register_message(get_user_msgid("SayText"),"ProtectAllPluginsChatReplaced")
register_forward(FM_ClientCommand,"ClientCommand")
register_forward(FM_ClientUserInfoChanged,"ClientUserInfoChanged")
RegisterOrpheuFunction()
}
public RegisterOrpheuFunction(){
if(CheckOS==0){
if(is_linux_server()){
CheckOS = 2 // linux
}
else{
CheckOS = 1 // windows
}
}
if(CheckOS==1){
if(!file_exists("addons/amxmodx/configs/orpheu/functions/UTIL_ClientPrint")){
FileManager("UTIL_ClientPrint")
set_task(5.0,"reloadtask")
}
else{
OrpheuRegisterHook(OrpheuGetFunction("UTIL_ClientPrint"),"UTIL_ClientPrint_Hook")
}
}
if(CheckOS==2){
if(!file_exists("addons/amxmodx/configs/orpheu/functions/PF_WriteString_I")){
FileManager("PF_WriteString_I")
set_task(5.0,"reloadtask")
}
else{
OrpheuRegisterHook(OrpheuGetFunction("PF_WriteString_I"),"PF_WriteString_I_Hook")
}
}
}
public UTIL_ClientPrint_Hook(string,string2,stringmsg[]){
VoidFunction(stringmsg,1)
}
public PF_WriteString_I_Hook(stringmsg[]){
VoidFunction(stringmsg,2)
}
stock VoidFunction(stringUS[],func){
new id = engfunc(EngFunc_GetCurrentPlayer)+0x01
if(is_user_connected(id)){
new string[255]
formatex(string,charsmax(string),"%s",stringUS)
check_param(id,string,charsmax(string),2,0)
if(strlen(string)>=150){
return 0 // don't print client message
}
else{
if(func==1){
server_print("%s",string) // deoarece e o functie swds/engine
}
if(func==2){
log_amx("%s",string) // deoarece e o functie amxmodx
}
}
}
return 1
}
public ClientUserInfoChanged(id)
{
new newname[100],oldname[100]
get_user_info(id,"name",newname,charsmax(newname))
get_user_name(id,oldname,charsmax(oldname))
if(!equal(oldname,newname)){
check_param(id,newname,charsmax(newname),1,1)
}
}
public ProtectAllPluginsChatReplaced(){
new string[128],id = engfunc(EngFunc_GetCurrentPlayer)+0x01
read_argv(1,string,charsmax(string))
check_param(id,string,charsmax(string),2,1)
if(strlen(string)>=150){
return 1; // fix possible crash in replace with unicode char for all plugins tags/replace chat
}
return 0
}
public ClientCommand(id)
{
new cmd[20],cmd1[20],Said[600]
read_argv(0,cmd,charsmax(cmd))
read_argv(1,cmd1,charsmax(cmd1))
if(containi(cmd1,"@")!=-1){
return PLUGIN_HANDLED
}
if(containi(cmd,"say_team")!=-1 || containi(cmd,"say")!=-1){
read_args(Said,charsmax(Said))
remove_quotes(Said)
copy(cmdx,charsmax(cmdx),cmd)
check_param(id,Said,charsmax(Said),2,1)
}
return 0
}
stock check_param(const id,fc[],fc_max,number,printable)
{
switch(number){
case 1:{
if(containi(fc,"%")!=-1){
if(GetEngineVersion()>=5788){
replace_all(fc,fc_max,"%","ï¼…") //xEFBC2026
}
else if(GetEngineVersion()<=5787){
replace_all(fc,fc_max,"%","%.")
}
set_user_info(id,"name",fc)
}
if(containi(fc,"#")!=-1){
if(GetEngineVersion()>=5788){
replace_all(fc,fc_max,"#","#") //xEFBC192
}
else if(GetEngineVersion()<=5787){
replace_all(fc,fc_max,"#","#.")
}
set_user_info(id,"name",fc)
}
#if EXTRA==1
if(containi(fc,"+")!=-1){
replace_all(fc,fc_max,"+","+.")
server_print("%d",fc_max)
set_user_info(id,"name",fc)
}
if(containi(fc,"&")!=-1){
if(GetEngineVersion()>=5788){
replace_all(fc,fc_max,"&","&") //xEFBC2020
}
else if(GetEngineVersion()<=5787){
replace_all(fc,fc_max,"&","*")
}
set_user_info(id,"name",fc)
}
if(containi(fc,"^x5c")!=-1){
replace_all(fc,fc_max,"^x5c","^x5e")
set_user_info(id,"name",fc)
}
new lenx=strlen(fc)-1
if(lenx>0){
if(equali(fc[lenx],"^x5c")){
fc[lenx]='^x5e'//s3x
set_user_info(id,"name",fc)
}
}
#endif
}
case 2:{
if(containi(fc,"%")!=-1){
replace_all(fc,fc_max,"%","ï¼…") //xEFBC2026
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"#")!=-1){
replace_all(fc,fc_max,"#","#") //xEFBC192
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"^x01")!=-1){
replace_all(fc,fc_max,"^x01","1")
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"^x02")!=-1){
replace_all(fc,fc_max,"^x02","2")
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"^x03")!=-1){
replace_all(fc,fc_max,"^x03","3")
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"^x04")!=-1){
replace_all(fc,fc_max,"^x04","4")
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
#if EXTRA==1
if(containi(fc,"+")!=-1){
replace_all(fc,fc_max,"+"," + ")
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
if(containi(fc,"&")!=-1){
replace_all(fc,fc_max,"&","&") //xEFBC2020
if(printable==1){
engclient_cmd(id,cmdx,fc)
}
}
#endif
}
}
}
public reloadtask(){
server_cmd("reload")
}
stock FileManager(file[]){
if(equali(file,"PF_WriteString_I")){
new PF_WriteString_I = fopen("addons/amxmodx/configs/orpheu/functions/PF_WriteString_I","wb")
fprintf(PF_WriteString_I,"{")
fprintf(PF_WriteString_I,"^"name^" : ^"PF_WriteString_I^",")
fprintf(PF_WriteString_I,"^"library^" : ^"engine^",")
fprintf(PF_WriteString_I,"^"arguments^" :")
fprintf(PF_WriteString_I,"[")
fprintf(PF_WriteString_I,"{")
fprintf(PF_WriteString_I,"^"type^" : ^"char *^"")
fprintf(PF_WriteString_I,"}")
fprintf(PF_WriteString_I,"],")
fprintf(PF_WriteString_I,"^"identifiers^":")
fprintf(PF_WriteString_I,"[")
fprintf(PF_WriteString_I,"{")
fprintf(PF_WriteString_I,"^"os^" : ^"windows^",")
fprintf(PF_WriteString_I,"^"value^" : [0x55,0x8B,0xEC,0x53,0x8B,0x5D,^"*^",0x56,0x8B,0x75,^"*^",0x83,^"*^",^"*^",0x57,0x74]") // posibile crash in windows idk
fprintf(PF_WriteString_I,"},")
fprintf(PF_WriteString_I,"{")
fprintf(PF_WriteString_I,"^"os^" : ^"linux^",")
fprintf(PF_WriteString_I,"^"value^" : ^"PF_WriteString_I^"")
fprintf(PF_WriteString_I,"}")
fprintf(PF_WriteString_I,"]")
fprintf(PF_WriteString_I,"}")
fclose(PF_WriteString_I)
}
if(equali(file,"UTIL_ClientPrint")){
new utilclientprint = fopen("addons/amxmodx/configs/orpheu/functions/UTIL_ClientPrint","wb")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"name^" : ^"UTIL_ClientPrint^",")
fprintf(utilclientprint,"^"library^" : ^"amxmodx_mm^",")
fprintf(utilclientprint,"^"arguments^" :")
fprintf(utilclientprint,"[")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"type^" : ^"edict_s *^"")
fprintf(utilclientprint,"},")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"type^" : ^"int^"")
fprintf(utilclientprint,"},")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"type^" : ^"char *^"")
fprintf(utilclientprint,"}")
fprintf(utilclientprint,"],")
fprintf(utilclientprint,"^"identifiers^":")
fprintf(utilclientprint,"[")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"os^" : ^"windows^",")
fprintf(utilclientprint,"^"value^" : [0x83,^"*^",^"*^",^"*^",^"*^",^"*^",0x00,0x74,^"*^",0x8B,0x44,^"*^",^"*^",0x53,0x56,0x8B,0x74,^"*^",^"*^",0x8A,0x9E,^"*^",^"*^",^"*^",^"*^",0xC6,0x86,^"*^",^"*^",^"*^",^"*^",0x00,0x85,0xC0,0x74,^"*^",0x50,0xA1,^"*^",^"*^",^"*^",^"*^",0x6A,0x00,0x50,0x6A,0x01,0xEB]")
fprintf(utilclientprint,"},")
fprintf(utilclientprint,"{")
fprintf(utilclientprint,"^"os^" : ^"linux^",")
fprintf(utilclientprint,"^"value^" : ^"PF_WriteString_I^"")
fprintf(utilclientprint,"}")
fprintf(utilclientprint,"]")
fprintf(utilclientprint,"}")
fclose(utilclientprint)
}
}
stock GetEngineVersion()
{
new VersionPonter,VersionString[24],Pos
new const VersionSizeNum=4
VersionPonter=get_cvar_pointer("sv_version")
get_pcvar_string(VersionPonter,VersionString,charsmax(VersionString))
Pos=strlen(VersionString)-VersionSizeNum
format(VersionString,VersionSizeNum,VersionString[Pos])
return str_to_num(VersionString)
}[/quote]