Oggi è 25/06/2022, 4:08

Tutti gli orari sono UTC + 1 ora [ ora legale ]





 Pagina 1 di 1 [ 10 messaggi ] 

  Apri un nuovo argomento Rispondi all’argomento

  Stampa pagina

Autore Messaggio
 Oggetto del messaggio: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 11:55 
Avatar utente
Utente

Iscritto il: 06/01/2011
Messaggi: 50
Favourite GTA: San Andreas
Xfire: osta96

Karma
0


Non connesso
E' la mia prima guida perciò perdonatemi se fa schifo :asd:
Sono Funzioni Molto Banali per i RP e non
Qui spiegheremo come aggiungere alcune funzioni per Roleplay.
1. Casco sulla Moto
Cominciamo Definendo in alto la funzione che siamo sulla moto
Codice:
forward IsModelABike(carid);

Così ora fuori da tutto mettiamo la funzione che dice che noi siamo su una moto..perciò sulle auto non può essere usato
Codice:
public IsModelABike(carid)
{
    new modelid = GetVehicleModel(carid);
   if(modelid == 448 || modelid == 461 || modelid == 462 || modelid == 463 || modelid == 468 || modelid == 471 || modelid == 481 || modelid == 509 || modelid == 510 || modelid == 521 || modelid == 522 || modelid == 523 || modelid == 581 || modelid == 586)
   {
      return 1;
   }
   return 0;
}

Così abbiamo aggiiunto l'ID e definendo che sono delle moto,Ora dobbiamo definire la funzione del che ci dice che stiamo usando il casco
In cima
Codice:
new UsingBelt[MAX_PLAYERS];
e anche
Codice:
   new sendername[MAX_PLAYER_NAME];

che ci servirà dopo per il messaggio
Ed ora dobbiamo fare il comando vero e proprio
Codice:
   if (strcmp(cmd, "/helmet", true) == 0)
   {
       if(IsPlayerConnected(playerid))
       {
         if(IsPlayerInAnyVehicle(playerid))
         {
             if(IsModelABike(GetPlayerVehicleID(playerid)))
             {
                if(UsingBelt[playerid] == 0)
                {
                   SendClientMessage(playerid, COLOR_X, "* Ti sei messo il casco in testa");
                   format(string, sizeof(string), "* %s Si è messo il casco", sendername);
                     UsingBelt[playerid] = 1;
               }
               else
               {
                  SendClientMessage(playerid, COLOR_X, "* Hai tolto il tuo casco);
                   format(string, sizeof(string), "* %s Si è tolto il casco", sendername);

                     UsingBelt[playerid] = 0;
               }
            }
            else
            {
            
               return 1;
            }

La funzione UsingBelt[playerid] = 1 spiega se stiamo usando il casco o no con 1 è on con 0 è off mentre IsModelABike spiega se siamo su una moto.
Perciò basterà scrivere /helmet per mettersi o togliere il casco :ghgh:


2. Bustapaga Semplice
Ecco comme creare un sistema di Pay Day semplice che darà ai player una somma di denaro ogni Tot di tempo.
Iniziamo e lo chiameremo Salary e lo definiamo
Codice:
forward Salary();

Ora dobbiamo creare il timer che ci permetterà di dare i soldi ogni tot di tempo perciò creiamo il timer nel OnGameModeInit
Codice:
   SetTimer("Salary",720000,1);

al posto di 720000 possiamo cambiare il tempo che è espresso in millisecondi
Ora tocca alla parte finale,il denaro vero e propria. Fuori da tutto creaiamo la funzione Salary
Codice:
public Salary()
{
  new counter;
    if(IsPlayerConnected(counter))
    SendClientMessageToAll(COLOR_X,"Hai ricevuto la tua Bustapaga ");
    GivePlayerMoney(counter,500);
      }

IsPlayerConncted determina se il giocatore è connesso.

3. Refresh
Refresh è una funzione Banale che ci aiuterà a sbuggarci dagli Int
In alto definiamo solo la funzione
Codice:
   new Float:slx, Float:sly, Float:slz;

che si servirà per sbuggarci se siamo incastrati
Codice:
if(strcmp(cmd, "/refresh", true) == 0)
   {
      if(IsPlayerConnected(playerid))
       {
           SetPlayerVirtualWorld(playerid, 0);
           SetPlayerInterior(playerid,0);
      GetPlayerPos(playerid, slx, sly, slz);
      SetPlayerPos(playerid, slx, sly, slz+2);
           SendClientMessage(playerid,COLOR_X,"Sei stato Re-Freshato,se hai altri problemi contatta una admin!");
           return 1;
      }

La funzione SetPlayerVirtualWorld serve a metterci al "world" 0 che è quello base...per chi non sapesse i virtual world sono funzioni che permettono di creare mondi virtuali ad esempio io sono nel virtual world 1 e un altro player è nello 0 anche se siamo nello stesso punto non ci vedremo.
SetPlayerInterior specifica in quale interior siamo: 0 mondo normale
GetPlayerPos(playerid, slx, sly, slz); e il Set serviranno per alzarci di un pochino in modo se siamo incastrati eccetera.
Lo so è una funzione babbea l'ho appena creata.

4. Blocchi stradali
In quasi tutti gli RP i poliziotti hanno quella funzione di poter spawnare dei posti di blocco per bloccare i veicoli. Ora vi spiego come crearli innanzitutto in cima aggiungiamo la funzione statica Block
Codice:
static Block[MAX_PLAYERS];

Che saranno i nostri posti di blocco,ora nei comandi aggiungiamo
Codice:
   if(strcmp(cmdtext, "/roadblock", true)==0)
{
for(new i = 0; i < MAX_PLAYERS; i++)
      {
      if(IsPlayerConnected(i))
      {
          {
    if(Block[playerid])
    {
         SendClientMessage(playerid, COLOR_X, "Hai già creato un posto di blocco scrivi /removeroadblock per riumovere il blocco.");
         return 1;
    }
    new Float:X1, Float:Y1, Float:Z1, Float:A;
    GetPlayerPos(playerid, X1, Y1, Z1);
    GetPlayerFacingAngle(playerid, A);
    Block[playerid] = CreateObject(981, X1-3, Y1, Z1, 0.0, 0.0, A);
    SendClientMessage(playerid, COLOR_X, "Posto di blocco piazzato.");
    }
    }
    }
    return 1;
}

Block[playerid] = CreateObject(981, X1-3, Y1, Z1, 0.0, 0.0, A); Servirà a creare il posto di blocco davanti a noi
Non possiamo mica lasciare i Blocchi li a marcire quindi creiamo il comando per distruggerli

Codice:
if(strcmp(cmdtext, "/removeroadblock", true)==0)
{
        if(!Block[playerid])
        {
                SendClientMessage(playerid, COLOR_GREY, "Non hai creatyo nessun blocco.");
           return 1;
        }
        DestroyObject(Block[playerid]);
        Block[playerid] = 0;
        SendClientMessage(playerid, COLOR_X, "Posto di blocco rimosso.");
        return 1;
}

Sarà come la funzione precedente ma solo con il DestroyObject che ci distruggerà il nostro povero blocco.

5. Automessaggi
Questa funzione servirà a mandare messaggi varii ogni tot di tempo...si basa sul metodo del Salary perciò non è complicato,Definiamo in alto AutoMSG
Codice:
forward AutoMsg();

Ora dobbiamo creare il timer che farà comparire i messaggi ogni tot di tempo
Nel OnGameModeInit
Codice:
   SetTimer("AutoMsg",170000,1);

170000 Lo possiamo sostituire con un tempo differente in millisecondi
Ora fuori da tutto mettiamo il vero corpo del messaggio
Codice:
public AutoMsg()
{
    new rnd = random(3);
    switch(rnd)
    {
        case 0:
        {
            SendClientMessageToAll(COLOR_X,"SERVER: Se ti Serve qualcosa sicuramente lo troverai su /help!!");
        }
        case 1:
        {
            SendClientMessageToAll(COLOR_X,"SERVER: Visita  ww.gta-center.com/forums");
        }
        case 2:
        {
         SendClientMessageToAll(COLOR_X,"SERVER : We we");
        }
    }
}

new rnd = random(3); Servirà a determinare che sono casuali,potete aggiungere più messaggi basta inserire
Codice:
}
        case NUMERO:
        {
            SendClientMessageToAll(COLOR_X,"SERVER:we we");

Al posto di numero mettiamo il numero di sequenza del messaggio

Finisco qua la guida poi l'aggiornerò! :awesome:

_________________
Immagine
~Osta


Immagine


Immagine


Top
 E-mail  
 

 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 12:01 
Avatar utente
Utente

Iscritto il: 07/11/2010
Messaggi: 250
Località: Sardegna
Favourite GTA: Vice City

Karma
0


Non connesso
Be' che dire, non ti conosco ma hai fatto una bella guida :what:
Complimenti. :sese:

_________________
Immagine

Immagine

Immagine

Immagine

Immagine

Immagine


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 12:05 
Avatar utente
Utente

Iscritto il: 18/11/2010
Messaggi: 352
Località: Valenza(AL)
Favourite GTA: San Andreas

Karma
0


Non connesso
Carina ^^

_________________
Firma cancellata. Ripassa il regolamento.


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 12:41 
Avatar utente
Utente

Iscritto il: 22/12/2010
Messaggi: 1098
Località: Agrigento (Sicilia)
Favourite GTA: San Andreas
Xfire: In PM

Karma
0


Non connesso
Complimenti, come prima guida sei andato bene ;)

_________________
Immagine


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 12:42 
Avatar utente
Utente

Iscritto il: 06/01/2011
Messaggi: 50
Favourite GTA: San Andreas
Xfire: osta96

Karma
0


Non connesso
Grazie :D

_________________
Immagine
~Osta


Immagine


Immagine


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 13:47 
Utente

Iscritto il: 06/11/2010
Messaggi: 197
Favourite GTA: San Andreas

Karma
1


Non connesso
Nei comandi l'IsPlayerConnected è del tutto inutile, la funzione Salary è totalmente sbagliata e nella funzione IsModelABike il public/forward è totalmente inutile.


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 14:13 
Avatar utente
Utente

Iscritto il: 31/10/2010
Messaggi: 901
Località: Universo - Via Lattea - Sistema Solare - Pianeta Terra - Europa - Italia - Sicilia - Grammichele(CT)
Favourite GTA: San Andreas
Xfire: Privato

Karma
2


Non connesso
quoto con peppe, isplayerconnected è inutile, perchè se un player fa il comando è logico che egli sia connesso.
La funzione salary darà i soldi soltanto all'id 0, bisogna usare il for
Invece nel IsModelABike potevi creare una funzione e non usare il forward e il public.

Se vuoi posso sistemare io ;)

_________________
Immagine


I Miei Filterscript Per Sa-Mp

Rampone System By me and Mik_Teck
Autovelox System By me and Mik_Teck
Metro System By me
pLaserPointer By me

Immagine


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 15:08 
Banned

Iscritto il: 31/10/2010
Messaggi: 1363
Località: Sicilia
Favourite GTA: San Andreas
Xfire: peppinux

Karma
-10


Non connesso
:asd: Beh come ti hanno già detto gli altri si poteva fare molto meglio:

1.Inutile dichiarare la funzione IsModelABike usando il forward + public dato che non deve essere usata in un Timer/TimerEx.

2.Inutile dichiarare sendername in cima se poi viene usato solo in un comando.

3.Inutile controllare se il player è connesso (IsPlayerConnected) in ogni comando dato che, se il player ha digitato il comando, è ovvio che è connesso.

4.Nel comando /helmet hai formattato una stringa senza poi utilizzarla.

4.Il salary è fatto malissimo e non potrà mai funzionare. Se ti compila i soldi li darà solo al playerid 0. Dovresti rifarlo d'accapo.

5.Inutile definire Float:slx, Float:sly e Float:slz in cima alla GM.

6.Non riesco a capire a cosa serve il for nel comando /roadblock.

7.Per memorizzare la posizione del player potevi utilizzare un array con 3 di grandezza al posto di definire in una variabile x, in un'altra y e in un'altra ancora z.

8.Per gli auto-messaggi, almeno secondo me, sarebbe meglio usare questo metodo: http://wiki.sa-mp.com/wiki/Random_Messages

9.Il codice non mi sembra scritto molto "pulito".

Ricorda che questo sono solo critiche COSTRUTTIVE e che spero ti saranno utili per migliorare il codice e il tuo modo di scriptare. Bye ;).


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 19:40 
Avatar utente
Utente

Iscritto il: 06/01/2011
Messaggi: 50
Favourite GTA: San Andreas
Xfire: osta96

Karma
0


Non connesso
Grazie è la mia prima guida e devo ancora capire come fare :asd:

_________________
Immagine
~Osta


Immagine


Immagine


Top
 E-mail  
 
 Oggetto del messaggio: Re: [GUIDA] Funzioni Roleplay
MessaggioInviato: 28/01/2011, 20:47 
Banned

Iscritto il: 31/10/2010
Messaggi: 1363
Località: Sicilia
Favourite GTA: San Andreas
Xfire: peppinux

Karma
-10


Non connesso
Di niente ;).


Top
 E-mail  
 
Visualizza ultimi messaggi:  Ordina per  
 Pagina 1 di 1 [ 10 messaggi ] 

  Apri un nuovo argomento Rispondi all’argomento

Tutti gli orari sono UTC + 1 ora [ ora legale ]



Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti


Non puoi aprire nuovi argomenti
Non puoi rispondere negli argomenti
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi inviare allegati

Cerca per:
Vai a:  
cron