Jump to content

návod [ Tutoriál ] Jak zakázat na serveru určité zbraně?


rEf

Recommended Posts

Zdravím, normálně sem nic nedávám ani tu nepíšu žádné tutoriály ale našel jsem v počítači něco z dávnější doby a myslím si že se to někomu i hodí.

 

Jak to použít normálně v módu?

 

Do public OnPlayerKeyStateChange(playerid, newkeys, oldkeys) vložíme:

if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid))
{
    ResetPlayerWeapons(playerid);
    return 1;
}

Následně to funguje tak že pokud vystřelíte s té určité zbraně tak vám to resetuje kompletně zbraně no můžete si tam dát místo ResetPlayerWeapons(playerid); třeba funkci pro ban např: BanEx(playerid,"Weapon Hack"); a nějakou zprávu.

Také v případě že se jedná o rcon admina jako o vás tak to bude ignorovat použití zbraně kterou jste zakázali.

 

Celé by to mělo vypadat takto:

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid))
    {
            ResetPlayerWeapons(playerid);
            return 1;
    }
    return 0;
} 

Následně si vložíte do módu stock který zjistí jaké ty zbraně jsou zakázané:

 

stock ProhWeap(playerid)
{
    new wp = GetPlayerWeapon(playerid);
    if(wp = ID ZBRANE || wp = ID ZBRANE || wp = ID ZBRANE || wp = ID ZBRANE)
    {
    return true;
    }
    return false;
}

Místo ID ZBRANĚ si dáte id té zbraně kterou chcete zakázat, id zbraní najdete na google, wiki a podobně. Vždy když chce přidat zbraň napíšete || wp = ID ZBRANE tak aby na konci kde máte ) nebylo || každopádně pokud chcete ubrat uděláte to samé ale opačně.

 

Myslím si že netřeba to moc vysvětlovat ale i pro nějaké "lidi": new wp = GetPlayerWeapon(playerid); toto zjišťuje o jakou zbraň se jedná. A nevím co více k tomu říct :d

 

-----------------------------------------------------------------------------------------------

 

Ještě vám sem dám co jsem zkoušel udělat já po pravdě nevím jestli je to funkční/není protože jsem to nezkoušel. Je to celkem staré a udělané na způsob includu. Mělo by se ukládat do PW.txt ukládat Zbran1 =, Zbran2 = atd... kde si následně napíšete ID ZBRANĚ:

 

Vytvoříte si například includ: WH.pwn vložíte ho do includu ve vašem pawnu a do něj dáte:

new PWS[11];

forward PW_Load();
forward PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);

public PW_Load()
{
	new soubor[50];
	format(soubor, sizeof(soubor), "PW.txt");
	
    PWS[0] = dini_Get(soubor, "Zbran1");
    PWS[1] = dini_Get(soubor, "Zbran2");
    PWS[2] = dini_Get(soubor, "Zbran3");
    PWS[3] = dini_Get(soubor, "Zbran4");
    PWS[4] = dini_Get(soubor, "Zbran5");
    PWS[5] = dini_Get(soubor, "Zbran6");
    PWS[6] = dini_Get(soubor, "Zbran7");
    PWS[7] = dini_Get(soubor, "Zbran8");
    PWS[8] = dini_Get(soubor, "Zbran9");
    PWS[9] = dini_Get(soubor, "Zbran10");
    PWS[10] = dini_Get(soubor, "Zbran11");
    return true;
}

public PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid))
    {
            ResetPlayerWeapons(playerid);
            return 1;
    }
    return 0;
}

stock ProhWeap(playerid)
{
    new wp = GetPlayerWeapon(playerid);
    PW_Load();
    if(wp = PWS[0] || wp = PWS[1] || wp = PWS[2] || wp = PWS[3] || wp = PWS[4] || wp = PWS[5] || wp = PWS[6] || wp = PWS[7] || wp = PWS[8] || wp = PWS[9] || wp = PWS[10])
    {
    return true;
    }
    return false;
}

Následně ve svém módu úplně nahoru dáte #include <WH.pwn>

A do publicu OnPlayerKeyStateChange dáte:

PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);

Také si nezapomeňte do scriptfiles vytvořit soubor: PW.txt

 

Prakticky po případě si to můžete upravit/opravit a využít jak chcete... Mě to vůbec nezajímá a ani to nehodlám využívat.

Díky.

A nepište hodnocení dokud si to nezkusíte protože si nejsem jistý s tím ukládáním už od pohledu :d

Ale opravovat vám to nebudu :d :d :d

Asi by bylo lepší místo Zbran1 Zbran2 atd... ukládat -1 :):d

 

Informační návod - Návod označen jako platný

Ten to návod byl označen jako platný.Návod může být kdykoli označen jako nevhodný či neplatný

  • Líbí se mi to! (+1) 2
Link to comment
Share on other sites

To už je libovolné volba na osobě která to použije. Dá se to udělat i třeba tak že do OnPlayerUpdate nebo na sekundovej timer dáš zjištění zbraně určité a aby jí to resetlo. Ale tohle šetří řádky a jak psal i Omen můžeš si to dát rovnou i na AIM že mu to smaže při zamíření nebo jednoduše si tam můžeš šoupnout kick, ban co chceš...

Link to comment
Share on other sites

este bych to malinko zkratil aby to zabralo min mista

stock ProhWeap(playerid)
{
    new wp = GetPlayerWeapon(playerid);
    PW_Load();
    if(wp = PWS[0] || wp = PWS[1] || wp = PWS[2] || wp = PWS[3] || wp = PWS[4] || wp = PWS[5] || wp = PWS[6] || wp = PWS[7] || wp = PWS[8] || wp = PWS[9] || wp = PWS[10])    return true;
    return false;
}
Link to comment
Share on other sites

Mně osobně to příjde lepší udělat trošku jinak. Pak už nemusíš na nic myslet, jen si vesele měníš počet MAX_ZAKAZ_ZBRANI (= maximum zakázaných zbraní) a připisuješ si ID zbraní pod sebe v souboru.
Vypadalo by to nějak takto: (navíc nepoužíváš dini a nemusíš si to dávat jako include)

(Ale máš to hezky vysvětlené)

#define MAX_ZAKAZ_ZBRANI 11

new PWS[MAX_ZAKAZ_ZBRANI];

forward PW_Load();
forward PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);

public PW_Load()
{
	if(fexist("PW.txt"))
	{
	    new string[32],radku;
	    new File:soubor = fopen("PW.txt",io_read);
		while(fread(soubor,string))
		{
		    if(radku < MAX_ZAKAZ_ZBRANI)
		    {
		    	PWS[radku] = strval(string);
		    	radku ++;
			} else printf("Překročil jste maximum zakázaných zbraní! (max. %d)",MAX_ZAKAZ_ZBRANI);
		}
		fclose(soubor);
    } else print("Soubor PW.txt není vytvořen");
    return true;
}

public PW_OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    if(newkeys & KEY_FIRE && ProhWeap(playerid) && !IsPlayerAdmin(playerid))
    {
    	ResetPlayerWeapons(playerid);
        return 1;
    }
    return 0;
}

stock ProhWeap(playerid)
{
	new wp = GetPlayerWeapon(playerid);
	PW_Load();
	for(new i;i<sizeof(PWS);i++)
	{
		if(wp == PWS[i]) return true;
	}
	return false;
}
Link to comment
Share on other sites

  • Administrátor

Jednak je to zbytečný,druhak zbytečná přítěž pro server 30 za minutu načítat soubor... Navíc když si vezmeš idčka do podmínky v OnPlayerWeaponShot a returnem vrátíš nulu tak ho nech střílet jak se mu chce...

 

Samozřejmě je to dostupné tuším od 0.3z

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
    if( weaponid == 38 )
    {
        return 0;
    }

    return 1;
}
Link to comment
Share on other sites

Ten kód je z dávnější doby, já osobně ho nevyužívám. Jenom mě napadlo to sem dát jako další věc mezi ho*na který tu jsou. :d Alespoň vy jste to vašimi příspěvky vyjasnili na tolik že si to člověk může udělat na víc způsobu až si tu počte. Toť vše.

Link to comment
Share on other sites

  • 2 months later...

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...