Jump to content
  • 0

pomoc OnWeaponShot


Paulo*

Dotaz

Zdravim,

 

iste viete ze ak pouzite sobeit na priadanie nejakej zbrane tak sa obcas stane ze ze vam to prida zbran s nabojmi v minuse tak ma napadlo ci by neslo vytvorit funkciu v ktorej by to vlastne kontrolovalo.. mohlo by to fungovat?

public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
{
	if(hittype == 1 || hittype == 2 || hittype == 3)
	{
	    if(weaponid != 0)
	    {
			if(GetPlayerAmmo(i) < 0)
			{
				SCMTEX(i,CO_RED,"weapon hack");
			        KickEx(i,CO_ORANGE, "You were been kicked for weapon hack.");
			}
		}
	}
	return 1;
}
Link to comment
Share on other sites

Recommended Posts

  • 0

Fungovalo by to pokud by tomu tak bylo, ovšem s0beit ti nikdy nepřidá náboje do mínusu.

Dá se přes s0beit získat mínusovou hodnotu nábojů ale to by to cheater musel chtít nebo by naopak musel být úplně blbej, jelikož si náboje můžeš stále přidávat až to přesáhne určenou hodnotu a díky tomu se dostaneš do - (mínusu) stejně tak jako je tomu u money.
V defaultu ti s0beit přidává myslím, že 1 - 100 či 1 - 1000 nábojů (Liší se od verze).

Nejlepší možnost jak server ochránit před Weapon Cheatem je, že zbraně a náboje uděláš 100% ServerSide.

Link to comment
Share on other sites

  • 0

Myslíš něco na způsob: 

new Zbran = 31;
new Naboje = 99;

do timeru sekundoveho:

    for(new i; i < MAX_PLAYERS;i++)
    {
        GetPlayerWeaponData(i, 0, Zbran, Naboje);
        if(Zbran == 0 && Naboje > 1)
        {
            new string[128];
            format(string, sizeof(string), "tvoje zpráva jako ze hrac co si dal zbran 31 a 99 naboju tak ban");
            SendClientMessageToAll(0xFFFFFFAA,string);
            BanEx(i,"Weapon Hack");
        }
    }

neco takového?

Link to comment
Share on other sites

  • 0

On myslel něco na způsob že to zjistí počet náboju u zbraně ne? jako že nastavíš ty zbraně, a ty náboje no to je jedno čumim na hokej :d

Link to comment
Share on other sites

  • 0

Paulo, serverside zbraně není zas tak moc těžké udělat ale bez použití SQL bych to rozhodně nedoporučoval.

Zbraň a jeho ammo uložit, a jednoduše hráči dát jen tolik kolik je uloženo, pokud by mu ammo došlo a zbraň by mu zůstala nebo by se jen neshodovali hodnoty tak by se rovnou dal ban.

Pak už jen řešit problémy s možným vypnutím WeaponDat atd... ale to už je trochu o něčem jiném. :)

Link to comment
Share on other sites

  • 0

Zbraně a jejich náboje je podle mého nejlépe ukládat někam kde se rychle načtou a zároveň neberou zbytečně místo na disku.
Ono těch dat není v tomto případě málo a ukládat to někam do souboru by bylo zbytečné a jejich načítání zdlouhavé, tzn. jde vlastně jen o optimalizaci zásadní nevýhoda v tom zřejmě nebude. :)

Link to comment
Share on other sites

  • 0

Zbraně a jejich náboje je podle mého nejlépe ukládat někam kde se rychle načtou a zároveň neberou zbytečně místo na disku.

Ono těch dat není v tomto případě málo a ukládat to někam do souboru by bylo zbytečné a jejich načítání zdlouhavé, tzn. jde vlastně jen o optimalizaci zásadní nevýhoda v tom zřejmě nebude. :)

A co to mit treba v promenych? Boze nato by ti to bylo v souborech ? :d :d :d

Link to comment
Share on other sites

  • 0

A co to mit treba v promenych? Boze nato by ti to bylo v souborech ? :d :d :d

No nevím jestli je lepší uchovávat všechny zbraně a jejich náboje ode všech hráčích do proměnných, přeci tím zrovna nešetříš virtuální paměť. :)

Je to tedy můj osobní názor (Nebo spíše přesvědčení) ale když už je dat opravdu hodně tak je lepší poukládat data do SQL tabulek z tama je rovnou i číst než vše mít v souborech pak schovat do proměnných a pak zase z proměnných uložit do souboru. :d

Link to comment
Share on other sites

  • 0

No nevím jestli je lepší uchovávat všechny zbraně a jejich náboje ode všech hráčích do proměnných, přeci tím zrovna nešetříš virtuální paměť. :)

Je to tedy můj osobní názor (Nebo spíše přesvědčení) ale když už je dat opravdu hodně tak je lepší poukládat data do SQL tabulek z tama je rovnou i číst než vše mít v souborech pak schovat do proměnných a pak zase z proměnných uložit do souboru. :d

Ta spotreba je zanedbatelna, rozhodne lepsi reseni nesetrit virtualni pamet, ktery je vsude dost. Nez zatezovat ctenim ze souboru, coz zatezuje mnohem vic a zere taky vic CPU. CPU je mnohonasobne drazsi nez RAM.

Link to comment
Share on other sites

  • 0

Hmm... je pravda, že vytížení procesoru jsem nějak nebral v potaz, nikdy jsem neměl nějak moc velkou spotřebu CPU takže ho ani nijak nepočítám.
Na druhou stranu jsou volně plovoucí proměnné rájem pro cheatery :d

Link to comment
Share on other sites

  • 0

Když to vezmu jen

 

Kalcor na nic neodpovida :)

 

 

To je škoda :d

 

Jinak když to vezmu obecně tak většina ( i když to je slabé slovo) funkcí je uložena v souboru, tzn. že cheater může zavolat či naopak blokovat kteroukoliv funkci (až na pár vyjímek) i pro práci s proměnými využíváme funkce, řekněme, že hráči přes nějakou funkci přidáme pár dat do proměných, pokud jsou to chtěná data např. představující money tak ji cheater může vyvolat znova tedy pokud s tím pawner předem nepočítal a neošetřil to, osobně nevím ani o jednom serveru v CZ/SK který by po přidání hodnoty zkontroloval jestli má tolik kolik má mít.

Tady tím nemyslím, tu klasickou kontrolu money co má dnes každý server kdyby náhodou cheater připisoval hodnotu tam kam nemá ale jestli tu kontrolu která zjistí jestli ta funkce od serveru dala tolik kolik měla, tady je hold problém v tom, že málo lidí tuší co je server-side a co už ne. :)

 

Bohužel nejsem na PC tsk nemohu napsat nějaký ten příklad pro lepší pochopení :)

Link to comment
Share on other sites

  • 0

No takhle, ty promene v pawnu (co zacinaji na new) nejsou urcite server side, proc by taky meli byt, vsak server nemuze vedet, jestli ji ma nejakemu hraci priradit. Taky je nesmysl to nekomu prizarovat proc. Tyhle promene jsou na serveru a client i kdyby se p**** tak s tim nehne. Vim ze pomoci s0beitu lze blokovat fce jako SetPlayerAmmo atp.. ovsem i to lze resit, staci si proste udelat pocitani, kolik bylo neuspesnych pojkusu o nastaveni amma, a pokud to prekroci nejakou tebou urcenou hranici, tak hrace kicknout (musis tam mit casove problevy kluli update packetam). Ovsem nastava problem s peckety nebo esc. to se pak stava i kdyz hrac cheater neni. Na SP to mam formou hlasice, ktery admini upozorni, ze hrac zrejme ma cheaty a ze by si ho meli proklepnout.

Link to comment
Share on other sites

  • 0

To je pravda ale stejně jako může cheater v s0beitu funkce blokovat tak je může zavolat, díky bohu, že to už 0x688 (nynější oficialní developer ) do s0beitu nedal.

Díky tomu si kid cheateři nepřidávají money kolik je potřeba.

Sice cheater s proměnou jako takovou nehne ale ani nemusí jen odešle řekněme určité pakety a vyvolá funkci kterou má uloženou v souboru.

Konkrétně na SP máš taky problém s připisováním hodnot kdy máš podmínky jen před určitou funkcí ale ne již v ní či potom, když to popíšu zjednodušeně:

Hráč přijde k nějaké profesi a něco vykoná aby splnil všechny podmínky díky to mu se vyvolá klasický blok příkazů(funkcí) a tímto končí, pokud je však hráč cheater tak z bloku příkazů dokáže vytáhnout funkci a stále ji obnovovat(znova vyvolávat) bez nutnosti splnit ty podmínky nad funkcí.

Link to comment
Share on other sites

  • 0

To je pravda ale stejně jako může cheater v s0beitu funkce blokovat tak je může zavolat, díky bohu, že to už 0x688 (nynější oficialní developer ) do s0beitu nedal.

Díky tomu si kid cheateři nepřidávají money kolik je potřeba.

Sice cheater s proměnou jako takovou nehne ale ani nemusí jen odešle řekněme určité pakety a vyvolá funkci kterou má uloženou v souboru.

Konkrétně na SP máš taky problém s připisováním hodnot kdy máš podmínky jen před určitou funkcí ale ne již v ní či potom, když to popíšu zjednodušeně:

Hráč přijde k nějaké profesi a něco vykoná aby splnil všechny podmínky díky to mu se vyvolá klasický blok příkazů(funkcí) a tímto končí, pokud je však hráč cheater tak z bloku příkazů dokáže vytáhnout funkci a stále ji obnovovat(znova vyvolávat) bez nutnosti splnit ty podmínky nad funkcí.

To ovsem jenom teorezitujes, ono taky pawno neni zakladem, cele to jde pres RakNet kde je povolene volat jen ty fce co tam da kalcor, a hlavne kdo nevidel zdrojak tak se nikdy nemuze strefit :d Takze nemuze zavolat fce ktere nejsou zakladni. A dalsi vec, pokud jeto pres stock a ne public tak se neuchovava nazev callbacku, takze tim hur :d

Link to comment
Share on other sites

  • 0
To ovsem jenom teorezitujes, ono taky pawno neni zakladem, cele to jde pres RakNet kde je povolene volat jen ty fce co tam da kalcor, a hlavne kdo nevidel zdrojak tak se nikdy nemuze strefit :d Takze nemuze zavolat fce ktere nejsou zakladni. A dalsi vec, pokud jeto pres stock a ne public tak se neuchovava nazev callbacku, takze tim hur :d

 

U první části teď nevím jestli si myslel funkce a zdroják samotného pawna či zdroják tvého serveru, pokud zdroják pawna tak většina adres s uloženou funkcí je známa ještě se tedy dodnes stále vyhledávají určité adresy, naposledy bylo myslím oběvení adresy pro checkpoint kdy ho vlastně můžeš vytvořit nebo spíše přesunout na pozici na které se právě nacházíš a dále s ním manipulovat.

 

Pokud myslíš zdroják serveru nebo spíše módu tak těžko posoudit, nikdy jsem nezkoušel vyvolat stock a navíc hledání adresy by byla makačka a kdoví jestli by se našla a ještě ke všemu by to šlo použít jen na konkrétním serveru.

//edit (teď jsem si uvědomil, že vyvolat celý stock by nebylo ani možné) //

To ovšem nemění nic na tom, že 99% neli 100% používá client side funkce ono to vlastně ani nijak nejde, např. na vyvolání dialogu vlastní funkci nevytvoříš. :d

Link to comment
Share on other sites

  • 0

Zjistíš hráčovu pozici a porovnáš s pozicí checkpointu hned po vytvoření ? :)

Těchto hloupostí je v SA:MP docela dost další je OnDialogResponse (přesný název si z hlavy nikdy nevybavím :d), kdy vlastně můžeš vyvolat jen tu část kdy něco dostaneš a všechny podmínky které tam jsou vynechat.:)

Hmm.. Možná bych někdy, někam mohl nahrát seznam těchto problematických věciček :)

Link to comment
Share on other sites

  • 0

To by šlo jen, porovnáváš pozici checkpointu s hráčem či nějak zjišťuješ aktuální pozici checkpointu?

Pokud s hráčem tak to má menší nevýhodu a tou je velikost checkpointu pokud je vyšší než 1, tak hráč vlastně nemusí být na pozici původního checkpointu aby ho otevřel, tady to vyřešit tak jedině s isplayerinrageofpoint na druhou stranu to kontrolovat u každého checkpointu musí být otrava :d

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