Hát ez a baj látod hogy csak azokra gondol a készítõ hogy talán ennyit megtesznek de aki meg ért hozzá az nem fog plusz inc fájlt használni, ezért kellene azokra is gondolni.
Amúgy nekem meg teljesen mindegy, és egy kicsit túl is van bonyolítva.
Az alap elv abból indul ki mikor ShowPlayerDialog kerül meghívásra akkor tároljuk PVarban a dialogid-t és ezt az értéket is ellenõrizni kell OnDialogResponse alatt, hogy a ténylegesen megjelenített dialog funkciói kerüljenek alkalmazásra a továbbiakban.
EDIT:
Minél többet nézem annál biztosabb vagyok benne hogy ez nagyon túl van bonyolítva és nem kicsit és nem értem mi kerül meghamisításra, meg hogyan lehet kicselezni, mivel sok helyen akár regisztráció akár login vannak külön funkciók amik bizonyos dolgoknál tovább lépnek, például ha valaki már be van jelentkezve
akkor csak egy üzenetet fog vissza kapni hogy õ már bejelentkezett felhasználó, és ha mondjuk van egy fegyver lekérõ dialog ami csak adminoknak van akkor
oda meg elég lenne pluszba beírni hogy újból ellenõrzésre kerüljön admin joggal rendelkezik-e az illetõ, ezért OnDialogResponse alatt nem csak a dialogid-k vannak ellenõrizve hanem sok egyéb más dolog is, ami igencsak megnehezíti a hamis dialogid dolgot.
Így az én javaslatom ha olyan eljárás van OnDialogResponse alatt ami adminoknak szól, akkor pluszba írjunk oda egy admin szint ellenõrzést is, mintsem egy plussz .inc-t alkalmazzunk.
Igaz többet tudnék mondani én is ha elõ tudnám idézni az ilyen dolgokat, de még nem találkoztam ilyesmivel.
Még egy edit:
Van ez a rész mit is ellenõriz pontosan?
[pawn] new SA_ADH_ODR_dialogid = GetPVarInt(playerid, \"dId1\");
if (SA_ADH_ODR_dialogid < 1 || SA_ADH_ODR_dialogid > 32767) return 1; /* illegal dialog ids */
if (SA_ADH_DR)
{
if (SA_ADH_cODR(playerid, SA_ADH_ODR_dialogid, response, listitem, inputtext) == 1) /* the current script handled the dialog */
{
{[/pawn]
Hogy a ShowPlayerDialog meghívásakor eltárolt dialogid kisebb-e mint 0 vagy nagyobb-e mint 32767 és létezik-e az OnDialogResponse alias (SA_ADH_DR)
majd tovább lépve újabb OnDialogResponse létezik-e alias (SA_ADH_cODR to CalllocalFunction OnDialogResponse)?
Ezt nem tudom hogy véd a hamis dialogid ellen de mindegy.
Ennyi erõvel:
[pawn]
#define antidialog_id \"gtjkkktgdsatui\"
stock
ShowPlayerDialogEx(playerid, dialogid, style, caption[], info[], button1[], button2[])
{
SetPVarInt(playerid, antidialog_id, dialogid); // Dialogid mentés játékosonként
ShowPlayerDialog(playerid, dialogid, style, caption, info, button1, button2);
}
#define ShowPlayerDialog ShowPlayerDialogEx //A szkript lefordításakor (compile) az összes ShowPlayerDialog kicserélésre kerül erre ShowPlayerDialogEx
[/pawn]
Majd az OnDialogResponse alatt:
[pawn]
public
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
// switch(dialogid) // ez helyet használjuk az eltárolt dialogid-t
switch(GetPVarInt(playerid, antidialog_id))
{
case 1: {} // Ebben az esetben egy megjegyzés: ne használjunk 0 val jelölt dialogid-t mivel ha nincs adat megadva PVar-nak akkor alap értéke nulla.
case 2: {}
case 3: {}
case 4: {}
case 5: {}
}
return 1;
}
[/pawn]
Még egy edit:
Közben találtam egyet ajánlom áttanulmányozásra:
http://pastebin.com/kUgfNiLshttp://forum.sa-mp.com/showthread.php?t=283790&highlight=Anti-Dialog+Hack