GTA-Center.com » Forum http://www.gta-center.com/forums/ |
|
[GUIDA] Funzioni Roleplay http://www.gta-center.com/forums/viewtopic.php?f=40&t=704 |
Pagina 1 di 1 |
Autore: | OSTAAA [ 28/01/2011, 11:55 ] |
Oggetto del messaggio: | [GUIDA] Funzioni Roleplay |
E' la mia prima guida perciò perdonatemi se fa schifo 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 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ò! |
Autore: | .:Phantom:. [ 28/01/2011, 12:01 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Be' che dire, non ti conosco ma hai fatto una bella guida Complimenti. |
Autore: | Alby Fire [ 28/01/2011, 12:05 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Carina ^^ |
Autore: | mitosking [ 28/01/2011, 12:41 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Complimenti, come prima guida sei andato bene |
Autore: | OSTAAA [ 28/01/2011, 12:42 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Grazie |
Autore: | Peppe [ 28/01/2011, 13:47 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Nei comandi l'IsPlayerConnected è del tutto inutile, la funzione Salary è totalmente sbagliata e nella funzione IsModelABike il public/forward è totalmente inutile. |
Autore: | Angelo [ 28/01/2011, 14:13 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
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 |
Autore: | Peppinux AKA Peppe_Stasu [ 28/01/2011, 15:08 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
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 . |
Autore: | OSTAAA [ 28/01/2011, 19:40 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Grazie è la mia prima guida e devo ancora capire come fare |
Autore: | Peppinux AKA Peppe_Stasu [ 28/01/2011, 20:47 ] |
Oggetto del messaggio: | Re: [GUIDA] Funzioni Roleplay |
Di niente . |
Pagina 1 di 1 | Tutti gli orari sono UTC + 1 ora [ ora legale ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |