PDA

View Full Version : Usage of variable


grymtn
25/09/2017, 10:04 PM
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:

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

kAn3
25/09/2017, 10:16 PM
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) // <- WRONG as asd is a string correct this
{
say1[ii]++;
}
}
for(new aa=0; aa<12; aa++)
{
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);
}
}
}

grymtn
25/09/2017, 10:22 PM
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

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);
}
}
}

Misiur
25/09/2017, 10:26 PM
You can't, unless you define GUNX as an array of guns, i.e GUN[MAX_X]

grymtn
25/09/2017, 10:31 PM
this is the answer im looking for. thank you

CodeStyle175
25/09/2017, 10:33 PM
Your anticheat doesnt even work.

#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 28, 29, 32: return 4;
case 30, 31: return 5;
case 33, 34: return 6;
case 35..38: return 7;
case 16..18, 39: 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 i2; i2 < 13; i2++){
GetPlayerWeaponData(i,i2,wid,wam);
if(wid && UWeapon[i][GetWeaponSlot(wid)]!=wid){
scm(i,-1,"STOP CHEATING WEAPONS!");
}
}
}
return 1;
}

kAn3
25/09/2017, 10:38 PM
Copy pasted?

grymtn
26/09/2017, 12:46 AM
Your anticheat doesnt even work.

#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 28, 29, 32: return 4;
case 30, 31: return 5;
case 33, 34: return 6;
case 35..38: return 7;
case 16..18, 39: 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 i2; i2 < 13; i2++){
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.