Jump to content

[ TUT ]Anti Air Break


Pulo15

Recommended Posts

Zdravím Vás.Takže všimol som si, že veľa uživateľov hľadá na svoj server funkciu proti cheaterom - AntiAirBreak.Prezeral som si fórum a nikde som nenašiel niečo ohľadom pawn kódu pre Vaše módy.Našiel som len zopár rad ako BY sa to dalo spraviť a skúšal som to, ale aj tak to nejako nešlo :) Takže kus som poblúdil po nete a niekde som našiel teda tu funkciu.Kus som ju poupravil a tak Vám ju dávam sem.Dúfam, že sa Vám to zíjde a že nebudú prípadní cheateri na Vašom serveri machrovať s AirBreakom.Je to z eng SA-MP fóra...

 

Takže poďme na to...

 

Medzi definicíe

#define UPDATE_COUNT 5
#define POSSIBLE_AIRBREAK_COUNT_CAR 10 //definícia AirBreak - hráč v aute
#define POSSIBLE_AIRBREAK_COUNT_ONFOOT 7 //definícia AirBreak - hráč na nohách

Medzi new (premenné)

 

new airbreakcount[MAX_PLAYERS];
new pupdate[MAX_PLAYERS];

//premenná kam budeme zapísovať údaj

 

Do funkcie: public OnPlayerUpdate(playerid) //vložime toto

 

	pupdates[playerid]++;
if(pupdates[playerid] > UPDATE_COUNT)
{
    pupdates[playerid]=0;
    new check;
	if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER && IsVehicleValid(GetPlayerVehicleID(playerid))) //zisti, či je hráč v aute a či je vodič
	{
		new Float:vx,Float:vy,Float:vz; //premenna pozície
		GetVehicleVelocity(GetPlayerVehicleID(playerid),vx,vy,vz); //zistíme rýchlosť a ID auta
		if(vx==0.0 && vy==0.0 && vz < -0.0032 && vz > -0.022)
		{
			check=1;
		}
	}
	else
	{
	    if(GetPlayerState(playerid)==PLAYER_STATE_ONFOOT) //podmienak, ak je hráč na nohách
	    {
				new Float:vx,Float:vy,Float:vz,Float:px,Float:py,Float:pz; //premenna pozície
				GetVehicleVelocity(GetPlayerVehicleID(playerid),vx,vy,vz);// -//-
				GetPlayerVelocity(playerid,vx,vy,vz); //zistime hráčov "spad"
				GetPlayerPos(playerid,px,py,pz); //zistí hráčovu pozíciu
			    pupdates[playerid]=0;
			    if(-0.022 < vz < -0.0040 && -0.121 < vx < 0.121 && -0.121 < vy < 0.121 && GetPlayerSurfingVehicleID(playerid)==INVALID_VEHICLE_ID && pz > 2.0) //zistime pohyb vozidla
			    {
			        if(!IsPlayerInRangeOfPoint(playerid,2.0,GetPVarFloat(playerid,"oposx"), //ak je v danom bode
GetPVarFloat(playerid,"oposy"),GetPVarFloat(playerid,"oposz")) || -0.5>(GetPVarFloat(playerid,"oposz")-pz)>-0.1 || 0.075>(GetPVarFloat(playerid,"oposz")-pz)>-0.075)
     					{
				        check=2;
			        }
			        SetPVarFloat(playerid,"oposx",px);
			        SetPVarFloat(playerid,"oposy",py);
			        SetPVarFloat(playerid,"oposz",pz);
			    }
	    }
	}
	if(check > 0)
	{
	    new POSSIBLE_AIRBREAK_COUNT;
		switch(check)
			{
 			case 1: POSSIBLE_AIRBREAK_COUNT=POSSIBLE_AIRBREAK_COUNT_CAR;
	 		case 2: POSSIBLE_AIRBREAK_COUNT=POSSIBLE_AIRBREAK_COUNT_ONFOOT;
 		}
		airbreakcount[playerid]++;
		if(airbreakcount[playerid] > POSSIBLE_AIRBREAK_COUNT && IsPlayerInWater(playerid)==0)
		{
				airbreakcount[playerid]=0;
                    //sem si dajte co sa stane, ak hracovi zisti AirBreak
				Kick(playerid); //tu je trebars Kick
		}
	}
	else
	{
 		airbreakcount[playerid]=0;
	}
}

return 1;

}

 

Do funkcie: public OnPlayerStateChange(playerid, newstate, oldstate) //vložime

 

airbreakcount[playerid]=0;

return 1;

}

 

Tak a ešte pár stockov niekam na koniec módu / scriptu:

 

stock IsVehicleValid(id) //ak ma správne vozidlo
{
new type=GetVehicleModel(id);
new blocked[]={ 548, 425, 417, 487, 488, 497, 563, 447, 469, 520 };
for(new i;i	{
	if(type == blocked[i])
	{
		return 0;
	}
}
return 1;
}

 

stock IsPlayerInArea(playerid, Float:max_x, Float:min_x, Float:max_y, Float:min_y) //ak je hráč v danom okruhu
{
new Float:X, Float:Y, Float:Z;
GetPlayerPos(playerid, X, Y, Z);
if(X <= max_x && X >= min_x && Y <= max_y && Y >= min_y) return 1;
return 0;
}

 

stock IsPlayerInWater(playerid) //ak je hráč vo vode
{
new Float:x,Float:y,Float:pz;
GetPlayerPos(playerid,x,y,pz);
if (
	(IsPlayerInArea(playerid, 2032.1371, 1841.2656, 1703.1653, 1467.1099) && pz <= 9.0484) //lv piratenschiff
 	|| (IsPlayerInArea(playerid, 2109.0725, 2065.8232, 1962.5355, 10.8547) && pz <= 10.0792) //lv visage
 	|| (IsPlayerInArea(playerid, -492.5810, -1424.7122, 2836.8284, 2001.8235) && pz <= 41.06) //lv staucamm
 	|| (IsPlayerInArea(playerid, -2675.1492, -2762.1792, -413.3973, -514.3894) && pz <= 4.24) //sf südwesten kleiner teich
 	|| (IsPlayerInArea(playerid, -453.9256, -825.7167, -1869.9600, -2072.8215) && pz <= 5.72) //sf gammel teich
 	|| (IsPlayerInArea(playerid, 1281.0251, 1202.2368, -2346.7451, -2414.4492) && pz <= 9.3145) //ls neben dem airport
 	|| (IsPlayerInArea(playerid, 2012.6154, 1928.9028, -1178.6207, -1221.4043) && pz <= 18.45) //ls mitte teich
 	|| (IsPlayerInArea(playerid, 2326.4858, 2295.7471, -1400.2797, -1431.1266) && pz <= 22.615) //ls weiter südöstlich
 	|| (IsPlayerInArea(playerid, 2550.0454, 2513.7588, 1583.3751, 1553.0753) && pz <= 9.4171) //lv pool östlich
 	|| (IsPlayerInArea(playerid, 1102.3634, 1087.3705, -663.1653, -682.5446) && pz <= 112.45) //ls pool nordwestlich
 	|| (IsPlayerInArea(playerid, 1287.7906, 1270.4369, -801.3882, -810.0527) && pz <= 87.123) //pool bei maddog's haus oben
 	|| (pz < 1.5)
)
{
    return 1;
}
return 0;
}

 

Tak a toto je celá funkcia... testoval som to... Mne osobne to fuguje ako má ;)

Link to comment
Share on other sites

  • Replies 71
  • Created
  • Last Reply

Top Posters In This Topic

Tak to hej... no robil som to narychlo lebo som sa ponáhľal tak som to už nestihol popisať, ale ak by nejaký začiatočník nechápal tak môže napísať sem, alebo súkromu správu a mu popíšem... :v:

Link to comment
Share on other sites

No nějak nechápu ty definace.. mam error:

 

C:\Documents and Settings\kuba\Desktop\trucking.pwn(503) : error 017: undefined symbol "airbreakcount"

 

a to je tohle..

 

public OnPlayerStateChange(playerid, newstate, oldstate)

{

airbreakcount[playerid]=0;

return 1;

}

Link to comment
Share on other sites

new airbreakcount[MAX_PLAYERS]; ale stejně tam jsou pak další erorry, že to nezná..

 

-- stř 28. črc 2010 17:00:10 --

 

C:\Documents and Settings\kuba\Desktop\trucking.pwn(1143) : error 017: undefined symbol "GetPVarFloat"

C:\Documents and Settings\kuba\Desktop\trucking.pwn(1148) : error 017: undefined symbol "SetPVarFloat"

C:\Documents and Settings\kuba\Desktop\trucking.pwn(1149) : error 017: undefined symbol "SetPVarFloat"

C:\Documents and Settings\kuba\Desktop\trucking.pwn(1150) : error 017: undefined symbol "SetPVarFloat"

 

tohle už newem asi nepůjde..

 

-- stř 28. črc 2010 17:08:41 --

 

Už to jde.. zapoměl jsem.. neměl jsem v modu #include "lol"

Link to comment
Share on other sites

s tim IsPlayerInVater nebylo by lepsi udelat zonu kdyz nen iv celym SA (tim padek je nekde ve vode mimo mapu) mene podminek = mensi zatez este kdyz to vyvolavas 30x za vterinu..

Link to comment
Share on other sites

s tim IsPlayerInVater nebylo by lepsi udelat zonu kdyz nen iv celym SA (tim padek je nekde ve vode mimo mapu) mene podminek = mensi zatez este kdyz to vyvolavas 30x za vterinu..

 

Mňa sa nepýtaj, ja som to nevymýšľal, ja som to len upravil a otestoval ;)

Link to comment
Share on other sites

Bl4ck J0k3r":1p751fzx]No myslím si že jsi to nedělal ale budiž ... 9,5/10 :mozilla:

 

 

->

 

Mňa sa nepýtaj, ja som to nevymýšľal, ja som to len upravil a otestoval ;)
Link to comment
Share on other sites

Bl4ck J0k3r":19kvtd5o]No myslím si že jsi to nedělal ale budiž ... 9,5/10 :mozilla:

 

 

->

 

Mňa sa nepýtaj, ja som to nevymýšľal, ja som to len upravil a otestoval ;)

 

No jo no myslis si ze ja to ctu? ja jen hodnotím

Link to comment
Share on other sites

Presne QWER má pravdu :d aktualizoval som to dal som tam hore tu premennú.Začiatočníci aj tak len kopíruju tak čo im tu viac treba ? A ak niečomu nechápu tak nie je zakázane opýtať sa, alebo napísať súkromnú správu nie ? No a tie ERRORY Vaše sú väčšinu tým, že nedávate pozor a zlé skopírujete, alebo vynecháte nejakú premennú a podobne... Vlastne primitívne ERRORY nie nejaká závažna chyba... Kamarát zo skype mi písal, že má samy ERROR no chudák on to robil pre verziu 0.2x tak čo by sme checeli, keď niekto nevie, že má zlú verziu a jeho staré pawno tieto funkcie nepodporuje .... :boss:

 

PS: QWER a dík za rady ;) tie pozície a funkcie na danom mieste mi už funguje :) aj keď som to kus inak spravil ako si mi hovoril, lebo tak mi to nešlo ale na základe TVOJEJ rady som to spravil ;) thx

Link to comment
Share on other sites

A ty odo mňa očakávaš, že som jasnovidec ? Veď predsa som nevidel ten kód ako to máš, ani ten server proste nič.... skús si dať AirBreak a posúvať sa všemožnými spôsobmi (hore,dole, do strán ....)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...