Salve. Oggi vorrei su richiesta di "Haker99" spiegarvi il metodo per creare dei menų in s0beit.
Se vuoi aggiungere funzioni all'interno del menų devi procedere come segue:
Innanzitutto devi lavorare nel file "dumb_menu.cpp", file che contiene i dati relativi al menu.
Una volta aperto si deve definire l'ID del nostro elemento. Il nostro potremmo chiamarlo ID_MENU_CHEAT.
Pertanto procederemo di conseguenza: all'inizio del file troveremo tanti #define, assieme ad essi possiamo insterire un ID (consiglio come valore uno inutilizzato dallo stesso menų o sottomenų).
Ad esempio possiamo mettere questo:
CODICE
#define ID_MENU_NEWSTUFF 45
Abbiamo appena definito l'ID che identifica il menų.
Ora bisogna dire cosa dobbiamo inserire dentro di esso.
Definiamo quindi subito sotto l'oggetto, o meglio dire, il cheat da inserire nel menų nuovo.
CODICE
#define ID_STUFFCHEAT 46
Andiamo verso la fine del file, dove possiamo vedere come la funzione "menu_item_add" (si puō cercare con CTRL+F) venga utilizzata per definire i dati in esso contenuto.
Prima di vedere questa sezione perō bisogna definire il menų. Pertanto cerchiamo la funzione "menu_maybe_init" (CTRL+F) e inseriamo il nostro menų. Quindi inseriamo la seguente riga:
CODICE
struct menu *menu_newstuff
Abbiamo appena definito il nostro menų.
Ora bisogna dirgli che direttive rispettare.
Quindi sotto inseriamo la seguente riga:
CODICE
menu_newstuff = menu_new( menu_main, ID_MENU_NEWSTUFF, menu_callback_newstuff );
Quindi la riga implica che venga creato il menu_newstuff nel menu_main (quello principale di s0beit), avente ID pari a ID_MENU_NEWSTUFF e che le sue funzioni (quindi i cheat veri e propri) vengano eseguite secondo menu_callback_newstuff;
Il callback del newstuff lo aggiungeremo pių avanti.
Ora diciamo al codice cosa mettere dentro al nostro menų newstuff: quindi andiamo sotto (vicino a tutti i "menu_item_add") e aggiungiamo:
CODICE
menu_item_add( menu_main, menu_newstuff, "Cheat Nuovi", ID_NONE, MENU_COLOR_DEFAULT, NULL );
Quindi creerā nel menų main il menų "Cheat Nuovi". L'ID non ci interessa, non č importante per creare i menų. Il colore č quello di default.
Ora bisogna aggiungere un elemento nel menų "Cheat Nuovi". Quindi creiamo un'altra riga:
CODICE
menu_item_add( menu_newstuff, NULL, "Il mio cheat", ID_STUFFCHEAT, MENU_COLOR_DEFAULT, NULL );
Qui crea il cheat "Il mio cheat" nel menų "Cheat Nuovi". L'ID č ID_STUFFCHEAT, che abbiamo prima definito.
ora si deve creare il callback "menu_callback_newstuff", che ci consentirā di creare il cheat vero e proprio.
Inseriamo questo semplice codice:
CODICE
static int menu_callback_newstuff ( int op, struct menu_item *item )
{
if ( op == MENU_OP_SELECT )
{
switch ( item->id )
{
case ID_STUFFCHEAT:
{
actor_info_get(ACTOR_SELF,ACTOR_ALIVE)->hitpoints = 100.0f;
cheat_state_text("La tua salute č stata ricaricata.");
}
break;
default: return 0;
}
return 1;
}
}
Si definisce quindi il callback newstuff. La variabile "op" sarebbe il tipo di operazione che si deve eseguire. Bisogna quindi dirgli che cosa accade per gli elementi selezionati, cosa accade per quelli abilitati e disabilitati, cosa invece per quelli che cambiano di valore, ecc...
In questo caso noi stiamo facendo un cheat che si esegue semplicemente selezionando la funzione dal menų. La funzione switch() serve per processare gli elementi di cui abbiamo bisogno, č pių rapida e forse meno dispendiosa dal punto di vista della memoria dell'IF.
Quindi nel caso in cui noi facciamo invio sul cheat avente id ID_STUFFCHEAT, allora esegue il cheat.
La funzione actor_info_get serve per ottenere i dati relativi all'actor, quindi ai vari giocatori.
ACTOR_SELF sarebbe il giocatore locale, quindi il nostro personaggio.
ACTOR_ALIVE č una condizione per la quale il nostro codice deve funzionare. Quindi prende i dati al nostro giocatore solo se č vivo.
hitpoints č una delle variabili contenuta in actor_info_get, e corrisponde alla salute. Noi per ricaricarla la impostiamo a 100. Ho scritto 100.0f perchč č una variabile FLOAT, quindi una variabile che č costituita da numeri con la virgola. se era INT non poteva avere virgole perchč č intero.
cheat_state_text ci fa visualizzare in alto il testo che afferma l'avvenuto successo del cheat.
Provate a compilare. Se tutto va bene, non ci dovrebbero essere errori.
Non l'ho testato, ditemi voi se funziona. Se avete bisogno di aiuto ditemelo. Se volete altri tutorial ditemelo.
Alla prossima!