Usage of variable
#1

hello all today i wrote a simple anti weapon hack sctript that fits my servers variables but i have a simple problem that my mind cant accept.

this is my script and apparently i cant use asd in it becuase its a string and tell me that i need to index it:

Code:
public wepcheat(playerid)
{
	new say1[MAX_PLAYERS],say2[MAX_PLAYERS];
	for(new ii=0; ii<MAX_PLAYERS;ii++)
	{
		for(new i=1; i < 3; i++)
		{
		    new asd[15];
			format(asd,sizeof(asd),"[GUN%d]",i);
		    if(USER[ii]asd!=0)
			{
			    say1[ii]++;
			}
		}
		for(new aa=0; aa<12; aa++)
		{
			new wid,wam;
			GetPlayerWeaponData(ii,aa,wid,wam);
			if(wid!=0)
			{
			    say2[ii]++;
			}
			
		}
		if(say1[ii]!=say2[ii])
		{
		    new rcontext[40],bantext[128];
		    format(bantext,sizeof(bantext),"ADMCMD-AUTOBAN: %s has been banned. Reason: Weapon hacks.");
			SendClientMessageToAll(COLOR_RED,bantext);
		    format(rcontext,sizeof(rcontext),"ban %d",ii);
		    SendRconCommand(rcontext);
		}
	}
}
any help is appreciated
Reply
#2

PHP Code:
public wepcheat(playerid)
{
    new 
say1[MAX_PLAYERS],say2[MAX_PLAYERS];
    for(new 
ii=0ii<MAX_PLAYERS;ii++)
    {
        for(new 
i=13i++)
        {
            new 
asd[15];
            
format(asd,sizeof(asd),"[GUN%d]",i);
            if(
USER[ii]asd!=0// <- WRONG as asd is a string correct this
            
{
                
say1[ii]++;
            }
        }
        for(new 
aa=0aa<12aa++)
        {
            new 
wid,wam;
            
GetPlayerWeaponData(ii,wid,wam);
            if(
wid!=0)
            {
                
say2[ii]++;
            }
            
        }
        if(
say1[ii]!=say2[ii])
        {
            new 
rcontext[40],bantext[128];
            
format(bantext,sizeof(bantext),"ADMCMD-AUTOBAN: %s has been banned. Reason: Weapon hacks.");
            
SendClientMessageToAll(COLOR_RED,bantext);
            
format(rcontext,sizeof(rcontext),"ban %d",ii);
            
SendRconCommand(rcontext);
        }
    }

Reply
#3

OMG ARE YOU SERIOUS?! I really couldnt see that. If its that so, why im asking what is the correct usage?

EDIT: it works like this but i really wanna know if there is a way to fix it by using FOR

Code:
public wepcheat(playerid)
{
	new say1[MAX_PLAYERS],say2[MAX_PLAYERS];
	for(new ii=0; ii<MAX_PLAYERS;ii++)
	{
		if(USER[ii][GUN1]!=0)
		{
		    say1[ii]++;
  		}
  		if(USER[ii][GUN2]!=0)
		{
		    say1[ii]++;
  		}
  		if(USER[ii][GUN3]!=0)
		{
		    say1[ii]++;
  		}
		for(new aa=0; aa<12; aa++)
		{
			new wid,wam;
			GetPlayerWeaponData(ii,aa,wid,wam);
			if(wid!=0)
			{
			    say2[ii]++;
			}
			
		}
		if(say1[ii]!=say2[ii])
		{
		    new rcontext[40],bantext[128];
		    format(bantext,sizeof(bantext),"ADMCMD-AUTOBAN: %s has been banned. Reason: Weapon hacks.");
			SendClientMessageToAll(COLOR_RED,bantext);
		    format(rcontext,sizeof(rcontext),"ban %d",ii);
		    SendRconCommand(rcontext);
		}
	}
}
Reply
#4

You can't, unless you define GUNX as an array of guns, i.e GUN[MAX_X]
Reply
#5

this is the answer im looking for. thank you
Reply
#6

Your anticheat doesnt even work.
PHP Code:
#define max_players 50
#define scm            SendClientMessage
new UWeapon[max_players][13];
GetWeaponSlot(weaponid){ 
    switch(
weaponid){ 
        case 
1: return 0
        case 
2..9: return 1
        case 
22..24: return 2
        case 
25..27: return 3
        case 
282932: return 4
        case 
3031: return 5
        case 
3334: return 6
        case 
35..38: return 7
        case 
16..1839: return 8
        case 
41..43: return 9
        case 
10..15: return 10
        case 
44..46: return 11
        case 
40: return 12
    } 
    return 
0
}  
func Update3sec(){
    new 
wid,wam;
    foreach(
Player,i){
        for(new 
i2i2 13i2++){
            
GetPlayerWeaponData(i,i2,wid,wam);
            if(
wid && UWeapon[i][GetWeaponSlot(wid)]!=wid){
                
scm(i,-1,"STOP CHEATING WEAPONS!");
            }
        }
    }
    return 
1;

Reply
#7

Copy pasted?
Reply
#8

Quote:
Originally Posted by CodeStyle175
View Post
Your anticheat doesnt even work.
PHP Code:
#define max_players 50
#define scm            SendClientMessage
new UWeapon[max_players][13];
GetWeaponSlot(weaponid){ 
    switch(
weaponid){ 
        case 
1: return 0
        case 
2..9: return 1
        case 
22..24: return 2
        case 
25..27: return 3
        case 
282932: return 4
        case 
3031: return 5
        case 
3334: return 6
        case 
35..38: return 7
        case 
16..1839: return 8
        case 
41..43: return 9
        case 
10..15: return 10
        case 
44..46: return 11
        case 
40: return 12
    } 
    return 
0
}  
func Update3sec(){
    new 
wid,wam;
    foreach(
Player,i){
        for(new 
i2i2 13i2++){
            
GetPlayerWeaponData(i,i2,wid,wam);
            if(
wid && UWeapon[i][GetWeaponSlot(wid)]!=wid){
                
scm(i,-1,"STOP CHEATING WEAPONS!");
            }
        }
    }
    return 
1;

it definitely works if you get weapons out of script your USER[playerid][GUNx] es will be 0 and it will check if the numbers matches. i already tried and got myself banned. thank you for your attention tho. thanks all of you.

you guys think so big about this code, its working or not thats not even what i asked. I only asked how can i change the string asd there and im not trying to make an anticheat that will be applied to many servers. my code will only will only be capable to work with my variables which is working right now.

Also if you wanna see it working(just because you said no it doesnt work) i will show it on my code block on teamviewer and i get you an account on my server so you can check for yourself.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)