GTA-Center.com » Forum http://www.gta-center.com/forums/ |
|
[ARG] Funzioni utili http://www.gta-center.com/forums/viewtopic.php?f=41&t=211 |
Pagina 2 di 2 |
Autore: | mitosking [ 25/02/2011, 21:07 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Peppinux scusa la domanda, ma cosa dovrebbe fare? Cioè che ha di speciale? |
Autore: | Peppinux AKA Peppe_Stasu [ 25/02/2011, 21:23 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Usando la prima funzione verrà mandato al playerid il messaggio: [Verde o Rosso dipende dal bool del color]INFO: [Grigio]Qua il testo. invece usando la seconda: [Rosso]ERRORE: [Grigio]Qua il testo. Queste due funzioni servono semplicemente per evitare di perder tempo a fare per esempio SendClientMessage(playerid, -1, "{Verde o Rosso}INFO: {Grigio}Testo"); Spero di essermi spiegato . |
Autore: | mitosking [ 25/02/2011, 21:52 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Si adesso ho capito. Comunque sarebbe stato bello se spuntasse un Dialog come una finestra d'errore. |
Autore: | Peppinux AKA Peppe_Stasu [ 25/02/2011, 22:56 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Ma anche no . Questo è un sendInfoMessage/sendErrorMessage.. se vorrò farò un showInfoMessage/showErrorMessage con dialog come dici tu . |
Autore: | mitosking [ 26/02/2011, 0:24 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Ok lol |
Autore: | Angelo [ 10/06/2011, 19:01 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Guardando uno script di Phanto90 su un altro forum mi è venuta un'idea ed ho deciso di creare un RandomStr, cioè una funzione che crea una stringa formata da lettere e numeri a caso. Codice: stock RandomStr(string[], size) { new counter, Char; while(counter <= size) { Char = random(0x7B); if(0x30 <= Char <= 0x39 || 0x41 <= Char <= 0x5A || 0x61 <= Char <= 0x7A) string[counter] = Char, counter++; } return string; } Molto semplice da usare: Codice: new str[128]; //crea la stringa che dovrà contenere le lettere a caso RandomStr(str, 10); //10 sarebbero i caratteri a caso che conterrà la stringa printf("%s", str); //Verranno printati 10 caratteri a caso tra lettere (maiuscole e minuscole) e numeri 2° ToUppercase Il ToUppercase trasformerà una stringa da minuscola a maiuscola Codice: stock ToUppercase(string[]) { new str[256]; for(new i = 0; i < strlen(string); i++) { if(string[i] == ' ') str[i] = ' '; else if(0x41 <= string[i] <= 0x5A) str[i] = string[i]; else if(0x61 <= string[i] <= 0x7A) str[i] = string[i]-32; } return str; } Uso: Codice: new str[128]; str = ToUppercase("We Ciao"); printf("%s", str); Printerà: "WE CIAO" 3° ToTiny Il ToTiny ha la funzione inversa del ToUppercase Codice: stock ToTiny(string[])
{ new str[256]; for(new i = 0; i < strlen(string); i++) { if(string[i] == ' ') str[i] = ' '; else if(0x61 <= string[i] <= 0x7A) str[i] = string[i]; else if(0x41 <= string[i] <= 0x5A) str[i] = string[i]+32; } return str; } |
Autore: | Phanto90 [ 10/06/2011, 21:35 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Migliorato generatore stringhe random: Codice: stock StringaRandom(stringa[], size = sizeof(stringa)) { for(new i; i < size; ++i) { switch(random(3)) { case 0: stringa[i] = random(26) + 'a'; case 1: stringa[i] = random(26) + 'A'; case 2: stringa[i] = random(10) + '0'; } } return 1; } Oppure una versione alternativa, anche se penso sia più lenta: Codice: stock StringaRandom(stringa[], size = sizeof(stringa)) { static const caratteri[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" } ; while((size--)) stringa[size] = caratteri[random(sizeof(caratteri)-1)]; } Potrei anche eseguire dei test ma mi pare inutile Forse potrebbe essere divertente vedere qual'è quella più veloce |
Autore: | Giovanni94m [ 10/06/2011, 22:16 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Parlavo proprio oggi con angelo sul primo e sul secondo metodo. Personalmente ho sempre usato il secondo |
Autore: | Angelo [ 10/06/2011, 22:19 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
io preferisco usare le hex U.U |
Autore: | Phanto90 [ 10/06/2011, 22:23 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Test random stringhe effettuato in un ciclo di 100000 ripetizioni: Codice: Angelo: Test1: 3766 Test2: 3777 Test3: 3764 Phanto(n°1): Test1: 1153 Test2: 1248 Test3: 1139 Phanto(n° 2): Test1: 892 Test2: 1008 Test3: 916 Sorprendentemente è il 2° a essere stato più veloce Codice: //Codice test
#define PROVE 100000 #include a_samp new stringb[20]; main() { new count = GetTickCount(); for(new i=0; i<PROVE; i++) StringaRandom(stringb, sizeof(stringb)); //Sostituire con funzione da utilizzare printf("Numero prove: 1000000"); printf("Tempo Random String: %d millisec", GetTickCount() - count); } stock StringaRandom(stringa[], size = sizeof(stringa)) //Phanto1 { for(new i; i < size; ++i) { switch(random(3)) { case 0: stringa[i] = random(26) + 'a'; case 1: stringa[i] = random(26) + 'A'; case 2: stringa[i] = random(10) + '0'; } } return 1; } stock StringaRandom2(stringa[], size = sizeof(stringa)) //Phanto2 { static const caratteri[] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" } ; while((size--)) stringa[size] = caratteri[random(sizeof(caratteri)-1)]; return 1; } stock RandomStr(string[], size) //Angelo { new counter, Char; while(counter <= size) { Char = random(0x7B); if(0x30 <= Char <= 0x39 || 0x41 <= Char <= 0x5A || 0x61 <= Char <= 0x7A) string[counter] = Char, counter++; } return 1; } |
Autore: | Angelo [ 10/06/2011, 22:39 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Confermo però a me da diversi risultati: Mio script: 2500 ms 1° Script di Phanto: 730 ms 2° // : 650 ms Siamo sempre li all'incirca xD |
Autore: | Phanto90 [ 10/06/2011, 23:12 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
E' per via del processore, tieni conto che sono su un netbook che ha Nemmeno 2 Ghz single core, i risultati quindi variano da pc a pc ma il rapporto tra le funzioni alla fine è all'incirca costante Comunque questa è la migliore, postata proprio da Y_Less (per quanto riguarda il convertitore maiuscole - minuscole): Nota: Le prove sono state utilizzate con una stringa random. Codice: #define PROVE 100000 #include a_samp new stringb[]="WeCaIJjOJOFcnIJoij"; main() { new count = GetTickCount(); for(new i=0; i<PROVE; i++) ToTiny(stringb); //Sostituire con funzione da utilizzare printf("Numero prove: %d",PROVE); printf("Tempo Random String: %d millisec", GetTickCount() - count); } stock Y_Less(text[]) //Y_Less { new i; while (text[++i]) { if ('A' <= text[i] <= 'Z') text[i] |= 0x20; } return 1; } stock ToTiny(string[]) //Funzione Angelo { new str[256]; for(new i = 0; i < strlen(string); i++) { if(string[i] == ' ') str[i] = ' '; else if(0x61 <= string[i] <= 0x7A) str[i] = string[i]; else if(0x41 <= string[i] <= 0x5A) str[i] = string[i]+32; } return 1; } Codice: Y_Less:
Test1: 775 Test2: 743 Test3: 761 Angelo: Test1: 1997 Test2: 1998 Test3: 2084 |
Autore: | Angelo [ 02/07/2011, 14:11 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Codice: stock bool:IsAPrimeNumber(numero) { switch(numero) { case -1..1: return false; case 2, 3: return true; } if(!(numero % 2) || !(numero % 3) || !(numero % 5)) return false; for(new i = 5; i <= floatround(floatsqroot(numero), floatround_floor); ++i) { if(!(numero % i) && (numero != i)) return false; } return true; } Semplice funzione creata da me che controlla se un numero è primo, uso: Codice: public OnFilterScriptInit()
{ new we; for(new i = 0; i < 10; i++) { we = random(5000); if(!IsAPrimeNumber(we)) printf("Numero Non Primo: %d", we); else printf("Numero Primo: %d", we); } return 1; } |
Autore: | Giovanni94m [ 02/07/2011, 14:29 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Cosa si potrebbe fare con i numeri primi su sa-mp? |
Autore: | Angelo [ 02/07/2011, 14:46 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Non saprei :\ io l'ho creata, tocca a voi cercare le idee per usarla asd |
Autore: | Angelo [ 04/07/2011, 19:44 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Codice: stock RandomBetweenNumbers(...) { if(!numargs()) return -1; if(numargs() == 1) return getarg(0); new Num = numargs(), RandomNum = random(Num) ; return getarg(RandomNum); } Semplice funzione crea un random tra diversi numeri, esempio: Codice: new Random = RandomBetweenNumbers(1, 45, 66, 12, -123, 62); printf("%d", Random); Printerà uno dei seguenti numeri a caso: 1, 45, 66, 12, -123, 62 Codice: stock RandomBetweenCharacters(...) { if(!numargs()) return ' '; if(numargs() == 1) { switch(getarg(0)) { case 33..126, 128..254: return getarg(0); default: return ' '; } } new Num = numargs(), RandomArgs = random(Num) ; return getarg(RandomArgs); } Questa crea un random tra i simboli inseriti nei parametri della funzione, esempio: Codice: new Char = RandomBetweenCharacters('a', ')', '!', '0'); printf("%c", Char); Printerà uno dei seguenti caratteri a caso: a, ), !, 0, PS. Potete usare anche gli hex e i decimali, non soltanto i caratteri tra apici |
Autore: | mitosking [ 05/07/2011, 14:21 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Codice: stock GetPlayerIDFromName(const nome[]) { new pid; for(new i = 0; i < MAX_PLAYERS; i++) { if(!IsNumeric(nome)) { if(IsPlayerConnected(i)) { new pName[MAX_PLAYER_NAME]; GetPlayerName(i, pName, sizeof pName); if(!strcmp(pName, nome, true)) pid = i; else pid = -1; } } else pid = strval(nome); } return pid; } Questa funzione returna l'ID del nome che verrà digitato dentro la funzione. Se il nome risulta numerico, esso verrà returnato senza gettare nessun nome. Codice: stock SendRangedMessage(playerid, colore, const string[], Float: Raggio) { new Float: pPos[3]; GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]); for(new i = 0; i < MAX_PLAYERS; i++) { if(IsPlayerConnected(i)) && IsPlayerInRangeOfPoint(i, Raggio, pPos[0], pPos[1], pPos[2])) SendClientMessage(i, colore, string); } return 1; } Questa funzione (utile per le GM RP) serve ad inviare un "Range Message", ovvero basta scegliere il Raggio d'azione di tale messaggio ed esso verrà inviato ai Player vicini. |
Autore: | Angelo [ 05/07/2011, 17:53 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Avevo già postato tempo fa il GetPlayerIDFromName, ma questo mi sembra decisamente migliore asd carino anche il SendRangedMessage |
Autore: | Rapgangsta [ 06/07/2011, 12:39 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Codice: stock randoMix(...) return getarg(random(numargs()));
|
Autore: | Angelo [ 06/07/2011, 13:10 ] |
Oggetto del messaggio: | Re: [ARG] Funzioni utili |
Rapgangsta ha scritto: Codice: stock randoMix(...) return getarg(random(numargs())); Si pensavo anche io di farla così ma poi ho detto che se non vengono messi parametri o se ne viene messo solo uno viene attivo un random inutile che potrebbe usare più memoria di un if, almeno credo sia così, infatti se vedi ho messo if(!numargs()) return -1; if(numargs() == 1) return getarg(0); proprio per non fare attivare il random |
Pagina 2 di 2 | Tutti gli orari sono UTC + 1 ora [ ora legale ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |