Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- | gheecco's Boombox FS |
- */
- #define FILTERSCRIPT
- //*[Includes]
- #include <a_samp>
- #include <YSI_Data\y_iterate>
- #include <YSI_Coding\y_inline>
- #include <a_mysql_yinline>
- #include <a_mysql>
- #include <sscanf2>
- #include <Pawn.CMD>
- #include <strlib>
- #include <foreach>
- #include <audio>
- //*[Defines]
- //-Macro
- #if! defined isnull
- #define isnull (% 1) ((! (% 1 [0])) || (((% 1 [0]) == '\ 1') && (! (% 1 [1] ))))
- #endif
- // MySQL
- #define MYSQL_HOSTNAME "127.0.0.1"
- #define MYSQL_USERNAME "root"
- #define MYSQL_PASSWORD ""
- #define MYSQL_DATABASE "gheecco"
- //-colori
- #define COLORE_ERRORE 0x8B0000FF
- #define COLORE_INFO 0xFFFFE0FF
- //-Utili
- #define NULL (-1)
- #define BOOMBOX_MODELLO_1 (2226)
- #define BOOMBOX_MODELLO_2 (2102)
- #define BOOMBOX_STATO_SPENTO (0)
- #define BOOMBOX_STATO_ATTIVO (1)
- #define BOOMBOX_STATO_PAUSA (2)
- #define BOOMBOX_DISTANZA_MASSIMA (15.0) // valore massima distanza riproduzione della musica
- #define BOOMBOX_LABEL_ALTEZZA (0.5)
- #define BOOMBOX_LABEL_DISTANZA (10.0) // massima visibilità della label
- #define MAX_BOOMBOX (11) // Il valore va sempre aumentato di 1 al numero desiderato, per un corretto funzionamento dei cicli e degli Iterators
- //*[Variabili]
- //-Iteratori
- new Iterator:Boombox_Esistenti<MAX_BOOMBOX>;
- // Enums
- enum boomboxinfo
- {
- Creatore[MAX_PLAYER_NAME],
- Modello,
- Float:x,
- Float:y,
- Float:z,
- Float:rx,
- Float:ry,
- Float:rz,
- VirtualWorld,
- // Variabili che non verranno salvate
- OggettoID,
- Text3D:LabelID,
- URL[200],
- Stato
- };
- new g_Boombox[MAX_BOOMBOX][boomboxinfo], MySQL:mysqlhandle, PlayerText:TD_BOOMBOX[MAX_PLAYERS][3]; // CELLA 0: Testo | CELLA 1: Modello Preview 1 | CELLA 2: Modello Preview 2 | le altre formano i bordi
- //* [Forward]
- forward Riproduzione_Boombox(playerid);
- // --
- public OnFilterScriptInit()
- {
- Iter_Add(Boombox_Esistenti, 0); // Serve per far iniziare il count da 1
- new MySQLOpt: option_id = mysql_init_options();
- mysql_set_option(option_id, AUTO_RECONNECT, true);
- mysqlhandle = mysql_connect(MYSQL_HOSTNAME, MYSQL_USERNAME, MYSQL_PASSWORD, MYSQL_DATABASE, option_id);
- if (mysqlhandle == MYSQL_INVALID_HANDLE || mysql_errno(mysqlhandle) != 0)
- {
- print("[MySQL] Connessione col Database non riuscita, il server verrà spento."); // Read below
- SendRconCommand("exit");
- return 1;
- }
- print("[MySQL] Connessione col Database riuscita.");
- return 1;
- }
- public OnFilterScriptExit()
- {
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- CaricaTD(playerid); // Precarica le TD
- SetTimerEx("Riproduzione_Boombox", 500, true, "i", playerid); // Timer per player di riproduzione
- new querycaricamento[200];
- mysql_format(mysqlhandle, querycaricamento, sizeof(querycaricamento), "SELECT * FROM `boombox` WHERE `Creatore` = '%e' LIMIT 0, 1", GetNome(playerid)); // Controlla se esistono boombox salvate a questo player
- inline Carica_Boombox()
- {
- new rows;
- cache_get_row_count(rows);
- if(rows) // se esistono, le carica e le crea
- {
- new boomboxid = Iter_Free(Boombox_Esistenti);
- Iter_Add(Boombox_Esistenti, boomboxid);
- cache_get_value_name(0, "Creatore", g_Boombox[boomboxid][Creatore], MAX_PLAYER_NAME);
- cache_get_value_name_int(0, "Modello", g_Boombox[boomboxid][Modello]);
- cache_get_value_name_float(0, "x", g_Boombox[boomboxid][x]);
- cache_get_value_name_float(0, "y", g_Boombox[boomboxid][y]);
- cache_get_value_name_float(0, "z", g_Boombox[boomboxid][z]);
- cache_get_value_name_float(0, "rx", g_Boombox[boomboxid][rx]);
- cache_get_value_name_float(0, "ry", g_Boombox[boomboxid][ry]);
- cache_get_value_name_float(0, "rz", g_Boombox[boomboxid][rz]);
- cache_get_value_name_int(0, "VirtualWorld", g_Boombox[boomboxid][VirtualWorld]);
- SetPVarInt(playerid, "Player_Boombox_ID", boomboxid);
- new oggettoid = CreateObject(g_Boombox[boomboxid][Modello], g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z], g_Boombox[boomboxid][rx], g_Boombox[boomboxid][ry], g_Boombox[boomboxid][rz]);
- new Text3D:labelid = Create3DTextLabel(sprintf("\n{20B2AA}Boombox #%d {FFFFFF}%s", boomboxid, GetNome(playerid)), -1,g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z]+BOOMBOX_LABEL_ALTEZZA, BOOMBOX_LABEL_DISTANZA, g_Boombox[boomboxid][VirtualWorld], 1);
- Aggiorna_Boombox(boomboxid, oggettoid, labelid, g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z], g_Boombox[boomboxid][rx], g_Boombox[boomboxid][ry], g_Boombox[boomboxid][rz], g_Boombox[boomboxid][VirtualWorld], BOOMBOX_STATO_SPENTO, "");
- }
- }
- mysql_tquery_inline(mysqlhandle, querycaricamento, using inline Carica_Boombox);
- return 1;
- }
- public OnPlayerDisconnect(playerid, reason)
- {
- new boomboxid = GetPVarInt(playerid, "Player_Boombox_ID");
- if(boomboxid != 0) // se il player aveva una boombox
- {
- new querysalvataggio[500];
- mysql_format(mysqlhandle, querysalvataggio, sizeof(querysalvataggio), "SELECT * FROM `boombox` WHERE `Creatore` = '%e' LIMIT 0, 1", GetNome(playerid));
- inline Salva_Boombox()
- {
- new result;
- cache_get_row_count(result);
- if(result) // se già era presente, l'aggiorna
- {
- DestroyObject(g_Boombox[boomboxid][OggettoID]);
- Delete3DTextLabel(g_Boombox[boomboxid][LabelID]);
- strdel(querysalvataggio, 0, strlen(querysalvataggio));
- strcat(querysalvataggio, "UPDATE `boombox` SET `Creatore` = '%e', `Modello` ='%d', `x` = '%f', `y` = '%f', `z` = '%f', `rx` = '%f', `ry` = '%f', `rz` = '%f', `VirtualWorld` = '%d' WHERE `Creatore` = '%e'", sizeof(querysalvataggio));
- mysql_format(mysqlhandle, querysalvataggio, sizeof(querysalvataggio), querysalvataggio, g_Boombox[boomboxid][Creatore], g_Boombox[boomboxid][Modello], g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z], g_Boombox[boomboxid][rx], g_Boombox[boomboxid][ry], g_Boombox[boomboxid][rz], g_Boombox[boomboxid][VirtualWorld], g_Boombox[boomboxid][Creatore]);
- mysql_tquery(mysqlhandle, querysalvataggio);
- Iter_Remove(Boombox_Esistenti, boomboxid);
- Aggiorna_Boombox(boomboxid, 0, Text3D:0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, false, "");
- }
- else // se non era presente la crea
- {
- strdel(querysalvataggio, 0, strlen(querysalvataggio));
- strcat(querysalvataggio, "INSERT INTO `boombox` (`Creatore`, `Modello`, `x`, `y`, `z`, `rx`, `ry`, `rz`, `VirtualWorld`) VALUES ('%e', '%d', '%f', '%f', '%f', '%f', '%f', '%f', '%d')", sizeof(querysalvataggio));
- mysql_format(mysqlhandle, querysalvataggio, sizeof(querysalvataggio), querysalvataggio, g_Boombox[boomboxid][Creatore], g_Boombox[boomboxid][Modello], g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z], g_Boombox[boomboxid][rx], g_Boombox[boomboxid][ry], g_Boombox[boomboxid][rz], g_Boombox[boomboxid][VirtualWorld]);
- mysql_tquery(mysqlhandle, querysalvataggio);
- DestroyObject(g_Boombox[boomboxid][OggettoID]);
- Delete3DTextLabel(g_Boombox[boomboxid][LabelID]);
- Iter_Remove(Boombox_Esistenti, boomboxid);
- Aggiorna_Boombox(boomboxid, 0, Text3D:0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, false, "");
- }
- }
- mysql_tquery_inline(mysqlhandle, querysalvataggio, using inline Salva_Boombox);
- }
- else // se non ha (più) una boombox
- {
- new querysalvataggio[500];
- mysql_format(mysqlhandle, querysalvataggio, sizeof(querysalvataggio), "SELECT * FROM `boombox` WHERE `Creatore` = '%e' LIMIT 0, 1", GetNome(playerid));
- inline Cancella_Boombox()
- {
- new result;
- cache_get_row_count(result);
- if(result) // se non ha più una boombox salvata in precedenza sul db laa cancella
- {
- strdel(querysalvataggio, 0, strlen(querysalvataggio));
- mysql_format(mysqlhandle, querysalvataggio, sizeof(querysalvataggio), "DELETE FROM boombox WHERE Creatore='%e'", GetNome(playerid));
- mysql_tquery(mysqlhandle, querysalvataggio);
- }
- }
- mysql_tquery_inline(mysqlhandle, querysalvataggio, using inline Cancella_Boombox);
- }
- return 1;
- }
- public OnPlayerSpawn(playerid)
- {
- return 1;
- }
- public OnPlayerDeath(playerid, killerid, reason)
- {
- return 1;
- }
- public OnVehicleSpawn(vehicleid)
- {
- return 1;
- }
- public OnVehicleDeath(vehicleid, killerid)
- {
- return 1;
- }
- public OnPlayerText(playerid, text[])
- {
- return 1;
- }
- //*[Comandi]
- public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
- {
- new Float:oldX, Float:oldY, Float:oldZ, Float:oldRotX, Float:oldRotY, Float:oldRotZ;
- GetObjectPos(objectid, oldX, oldY, oldZ);
- GetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
- if(playerobject == 0)
- {
- if(response == EDIT_RESPONSE_CANCEL) // se annulla la modifica della boombox la riporta alla posizione precedente
- {
- SetObjectPos(objectid, oldX, oldY, oldZ);
- SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai annullato la modifica alla posizione della boombox.");
- }
- else if(response == EDIT_RESPONSE_FINAL)
- {
- if(!IsPointInRangeOfPoint(oldX, oldY, oldZ, fX, fY, fZ, 5.0))
- {
- SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Sei troppo distante dalla distanza precedente, diminuiscila oppure usa /boombox riponi e piazzala nuovamente nel punto desiderato.");
- SetObjectPos(objectid, oldX, oldY, oldZ);
- SetObjectRot(objectid, oldRotX, oldRotY, oldRotZ);
- }
- else
- {
- new boomboxid = GetPVarInt(playerid, "Player_Boombox_ID");
- new vw = GetPlayerVirtualWorld(playerid);
- SetObjectPos(objectid, fX, fY, fZ); // Setto nuovamente le posizioni perchè in passato in assenza si sono causati bug, solitamente con OnPlayerDynamicObject dello streamer.
- SetObjectRot(objectid, fRotX, fRotY, fRotZ);
- Delete3DTextLabel(g_Boombox[boomboxid][LabelID]);
- new Text3D:labelid = Create3DTextLabel(sprintf("\n{20B2AA}Boombox #%d {FFFFFF}%s", boomboxid, GetNome(playerid)), -1,fX, fY, fZ+BOOMBOX_LABEL_ALTEZZA, BOOMBOX_LABEL_DISTANZA, vw, 1);
- Aggiorna_Boombox(boomboxid, objectid, labelid, fX, fY, fZ, fRotX, fRotY, fRotZ, vw);
- }
- }
- }
- return 0;
- }
- public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
- {
- CloseTD(playerid);
- new editid = GetPVarInt(playerid, "Player_Boombox_ID");
- if(playertextid == TD_BOOMBOX[playerid][1]) // Se preme la 1 TD, con la boombox rossa
- {
- if(editid == 0) // Se non ha una boombox, e deve crearla
- {
- if(Iter_Free(Boombox_Esistenti) == NULL) return SendClientMessage(playerid, COLORE_ERRORE, sprintf("[gBoombox]: E' stato raggiunto il limite di Boombox posizionabili. (%d) ", MAX_BOOMBOX));
- new Float:xp, Float:yp, Float:zp, Float:angle, vw, objectid, Text3D:idlabel, idboombox = Iter_Free(Boombox_Esistenti);
- vw = GetPlayerVirtualWorld(playerid);
- GetPlayerPos(playerid, xp, yp, zp);
- GetInFrontOfPlayer(playerid, 0.5, xp, yp, zp, angle);
- zp = zp-1;
- objectid = CreateObject(BOOMBOX_MODELLO_1, xp, yp, zp, 0, 0, angle);
- idlabel = Create3DTextLabel(sprintf("\n{20B2AA}Boombox #%d {FFFFFF}%s", idboombox, GetNome(playerid)), -1, xp, yp, zp+BOOMBOX_LABEL_ALTEZZA, BOOMBOX_LABEL_DISTANZA, vw, 1);
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai posizionato la tua boombox per terra con successo, usa /boombox fix per modificarne la posizione.");
- SetPVarInt(playerid, "Player_Boombox_ID", idboombox);
- Iter_Add(Boombox_Esistenti, idboombox);
- format(g_Boombox[idboombox][Creatore], MAX_PLAYER_NAME, "%s", GetNome(playerid));
- Aggiorna_Boombox(idboombox, objectid, idlabel, xp, yp, zp, 0, 0, angle, vw, BOOMBOX_STATO_SPENTO, "");
- }
- else // se deve AGGIORNARE la Boombox e ha scelto il modello 1
- {
- if(GetObjectModel(g_Boombox[editid][Modello]) == BOOMBOX_MODELLO_1) return EditObject(playerid, g_Boombox[editid][OggettoID]);
- DestroyObject(g_Boombox[editid][OggettoID]);
- new oggetto = CreateObject(BOOMBOX_MODELLO_1, g_Boombox[editid][x], g_Boombox[editid][y], g_Boombox[editid][z], g_Boombox[editid][rx], g_Boombox[editid][ry], g_Boombox[editid][rz]);
- EditObject(playerid, g_Boombox[editid][OggettoID]);
- Aggiorna_Boombox(editid, oggetto, g_Boombox[editid][LabelID], g_Boombox[editid][x], g_Boombox[editid][y], g_Boombox[editid][z], g_Boombox[editid][rx], g_Boombox[editid][ry], g_Boombox[editid][rz], g_Boombox[editid][VirtualWorld], g_Boombox[editid][Stato], g_Boombox[editid][URL]);
- }
- }
- if(playertextid == TD_BOOMBOX[playerid][2]) // se deve creare la Boombox e ha scelto il modello 2
- {
- if(editid == 0)
- {
- new Float:xp, Float:yp, Float:zp, Float:angle, vw, objectid, Text3D:idlabel, idboombox = Iter_Free(Boombox_Esistenti);
- vw = GetPlayerVirtualWorld(playerid);
- GetPlayerPos(playerid, xp, yp, zp);
- GetInFrontOfPlayer(playerid, 0.5, xp, yp, zp, angle);
- zp = zp-1;
- objectid = CreateObject(BOOMBOX_MODELLO_2, xp, yp, zp, 0, 0, angle);
- idlabel = Create3DTextLabel(sprintf("\n{20B2AA}Boombox #%d {FFFFFF}%s", idboombox, GetNome(playerid)), -1, xp, yp, zp+BOOMBOX_LABEL_ALTEZZA, BOOMBOX_LABEL_DISTANZA, vw, 1);
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai posizionato la tua boombox per terra con successo, usa /boombox fix per modificarne la posizione.");
- SetPVarInt(playerid, "Player_Boombox_ID", idboombox);
- Iter_Add(Boombox_Esistenti, idboombox);
- format(g_Boombox[idboombox][Creatore], MAX_PLAYER_NAME, "%s", GetNome(playerid));
- Aggiorna_Boombox(idboombox, objectid, idlabel, xp, yp, zp, 0, 0, angle, vw, BOOMBOX_STATO_SPENTO, "");
- }
- else // Se deve aggiornare la Boombox col modello 2
- {
- if(GetObjectModel(g_Boombox[editid][Modello]) == BOOMBOX_MODELLO_2) return EditObject(playerid, g_Boombox[editid][OggettoID]);
- DestroyObject(g_Boombox[editid][OggettoID]);
- new oggetto = CreateObject(BOOMBOX_MODELLO_2, g_Boombox[editid][x], g_Boombox[editid][y], g_Boombox[editid][z], g_Boombox[editid][rx], g_Boombox[editid][ry], g_Boombox[editid][rz]);
- EditObject(playerid, g_Boombox[editid][OggettoID]);
- Aggiorna_Boombox(editid, oggetto, g_Boombox[editid][LabelID], g_Boombox[editid][x], g_Boombox[editid][y], g_Boombox[editid][z], g_Boombox[editid][rx], g_Boombox[editid][ry], g_Boombox[editid][rz], g_Boombox[editid][VirtualWorld], g_Boombox[editid][Stato], g_Boombox[editid][URL]);
- }
- }
- return 0;
- }
- public OnPlayerClickTextDraw(playerid, Text:clickedid)
- {
- if(clickedid == Text:INVALID_TEXT_DRAW) // se preme ESC durante la visualizzazione della td
- {
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][0]);
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][1]);
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][2]);
- }
- return 1;
- }
- public OnPlayerEnterCheckpoint(playerid)
- {
- DisablePlayerCheckpoint(playerid); // se entra nel checkpoint di /boombox gps
- return 1;
- }
- CMD:boombox(playerid, params[])
- {
- new azione[10], linkURL[200], idboombox = GetPVarInt(playerid, "Player_Boombox_ID");
- if(sscanf(params, "s[10]S()[200]", azione, linkURL)) return SendClientMessage(playerid, NULL, "[gBoombox]: /boombox < posiziona | riponi | fix | play | pausa | gps >");
- if(!strcmp(params, "posiziona")) // avvia la td (onplayerclickplayertextdraw) e fa creare la boombox
- {
- if(idboombox != 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Hai già una boombox posizionata.");
- if(Iter_Free(Boombox_Esistenti) == NULL) return SendClientMessage(playerid, COLORE_ERRORE, sprintf("[gBoombox]: E' stato raggiunto il limite di Boombox posizionabili. (%d) ", MAX_BOOMBOX));
- if(GetBoomboxPosition(playerid) == 1) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Nella tua posizione è già presente una boombox.");
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][0]);
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][1]);
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][2]);
- SelectTextDraw(playerid, 0x0083c9FF);
- }
- else if(!strcmp(params, "riponi")) // ripone la boombox, la cancella e resetta l'enum al suo id assegnato
- {
- if(idboombox == 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non hai nessuna boombox posizionata da riporre.");
- if(GetBoomboxPosition(playerid, idboombox) != 1) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non ti trovi di fronte alla la tua boombox.");
- Delete3DTextLabel(g_Boombox[idboombox][LabelID]);
- DestroyObject(g_Boombox[idboombox][OggettoID]);
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai riposto la tua boombox.");
- DeletePVar(playerid, "Player_Boombox_ID");
- Iter_Remove(Boombox_Esistenti, idboombox);
- Aggiorna_Boombox(idboombox, 0, Text3D:0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0, BOOMBOX_STATO_SPENTO, "");
- printf("%f %f %f", g_Boombox[idboombox][x], g_Boombox[idboombox][y], g_Boombox[idboombox][z]);
- }
- else if(!strcmp(params, "fix")) // edita una boombox già esistente
- {
- if(idboombox == 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non hai nessuna boombox posizionata da modificare.");
- if(GetBoomboxPosition(playerid, idboombox) != 1) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non ti trovi di fronte alla la tua boombox.");
- // Per fargli editare direttamente l'oggetto, senza la possibilita di editare anche il modello: EditObject(playerid, g_Boombo[idboombox][OggettoID]);
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][0]);
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][1]);
- PlayerTextDrawShow(playerid, TD_BOOMBOX[playerid][2]);
- SelectTextDraw(playerid, 0x0083c9FF);
- }
- else if(!strcmp(azione, "play")) // esegue il file mp3
- {
- if(isnull(linkURL)) return SendClientMessage(playerid, NULL, "[gBoombox]: /boombox play <url.mp3>");
- if(idboombox == 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non hai nessuna boombox posizionata.");
- if(GetBoomboxPosition(playerid, idboombox) != 1) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non ti trovi di fronte alla la tua boombox.");
- if(strfind(linkURL, ".mp3") == NULL) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Hai inserito un link privo di formato .mp3, inseriscine uno valido.");
- SendClientMessage(playerid, COLORE_INFO, sprintf("[gBoombox]: Hai eseguito l'URL:'%s' alla tua boomboxid %d.", linkURL, idboombox));
- Aggiorna_Boombox(idboombox, g_Boombox[idboombox][OggettoID], g_Boombox[idboombox][LabelID], g_Boombox[idboombox][x], g_Boombox[idboombox][y], g_Boombox[idboombox][z], g_Boombox[idboombox][rx], g_Boombox[idboombox][ry], g_Boombox[idboombox][rz], g_Boombox[idboombox][VirtualWorld], BOOMBOX_STATO_ATTIVO, linkURL);
- }
- else if(!strcmp(azione, "pausa")) // mette in pausa, per chi non ha l'audio plugin stopperà lo stream
- {
- if(idboombox == 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non hai nessuna boombox posizionata.");
- if(GetBoomboxPosition(playerid, idboombox) != 1) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non ti trovi di fronte alla la tua boombox.");
- if(g_Boombox[idboombox][Stato] == BOOMBOX_STATO_SPENTO) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: La tua Boombox è spenta (inutilizzata) al momento.");
- else if(g_Boombox[idboombox][Stato] == BOOMBOX_STATO_PAUSA)
- {
- g_Boombox[idboombox][Stato] = BOOMBOX_STATO_ATTIVO;
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai ripreso l'ascolto togliendo la pausa alla tua Boombox.");
- }
- else if(g_Boombox[idboombox][Stato] == BOOMBOX_STATO_ATTIVO)
- {
- g_Boombox[idboombox][Stato] = BOOMBOX_STATO_PAUSA;
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Hai interrotto l'ascolto mettendo la pausa alla tua Boombox, usa /boombox pausa per riprendere l'ascolto.");
- }
- }
- else if(!strcmp(azione, "gps")) // segna la posizione della boombox ( mi è stato utile durante i test)
- {
- if(idboombox == 0) return SendClientMessage(playerid, COLORE_ERRORE, "[gBoombox]: Non hai nessuna boombox posizionata.");
- SetPlayerCheckpoint(playerid, g_Boombox[idboombox][x], g_Boombox[idboombox][y], g_Boombox[idboombox][z], 1.5);
- SendClientMessage(playerid, COLORE_INFO, "[gBoombox]: Ti è stato segnato sulla mappa il punto in cui si trova la tua boombox.");
- }
- return 1;
- }
- stock Aggiorna_Boombox(ID, idobject, Text3D:labelid, Float:Posx, Float:Posy, Float:Posz, Float:Rotx, Float:Roty, Float:Rotz, bVirtualWorld, stato = false, bURL[] = "")
- {
- g_Boombox[ID][OggettoID] = idobject;
- g_Boombox[ID][LabelID] = labelid;
- g_Boombox[ID][Modello] = GetObjectModel(idobject);
- g_Boombox[ID][Stato] = stato;
- format(g_Boombox[ID][URL], 200, "%s", bURL);
- g_Boombox[ID][x] = Posx;
- g_Boombox[ID][y] = Posy;
- g_Boombox[ID][z] = Posz;
- g_Boombox[ID][rx] = Rotx;
- g_Boombox[ID][ry] = Roty;
- g_Boombox[ID][rz] = Rotz;
- g_Boombox[ID][VirtualWorld] = bVirtualWorld;
- return 1;
- }
- stock CloseTD(playerid)
- {
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][0]);
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][1]);
- PlayerTextDrawHide(playerid, TD_BOOMBOX[playerid][2]);
- CancelSelectTextDraw(playerid);
- return 1;
- }
- stock GetBoomboxPosition(playerid, boomboxid=NULL)
- {
- new risposta = -1;
- if(boomboxid == NULL) // Se nei parametri boombox viene lasciato vuoto è utile per funzione di cercare boombox nei paraggi, in modo da non farne creare una nello stesso punto
- {
- foreach(new i : Boombox_Esistenti)
- {
- if(IsPlayerInRangeOfPoint(playerid, 1.5, g_Boombox[i][x], g_Boombox[i][y], g_Boombox[i][z]))
- {
- if(GetPlayerVirtualWorld(playerid) == g_Boombox[i][VirtualWorld])
- {
- risposta = 1;
- break;
- }
- }
- else continue;
- }
- }
- else // controlla se ti trovi vicino alla boombox con l'id inserito (nello script usato con il proprio id boombox)
- {
- if(IsPlayerInRangeOfPoint(playerid, 3, g_Boombox[boomboxid][x], g_Boombox[boomboxid][y], g_Boombox[boomboxid][z]))
- {
- if(GetPlayerVirtualWorld(playerid) == g_Boombox[boomboxid][VirtualWorld]) return risposta = 1;
- }
- }
- return risposta;
- }
- public Riproduzione_Boombox(playerid) // funzione di ascolto musica per tutti i player
- {
- new idboombox = GetPVarInt(playerid, "Player_Boombox_InAscolto");
- if(Audio_IsClientConnected(playerid)) // Se il player ha l'audio plugin
- {
- if(idboombox != 0) // Se sta già ascoltando una boombox
- {
- if(!IsPlayerInRangeOfPoint(playerid, BOOMBOX_DISTANZA_MASSIMA, g_Boombox[idboombox][x], g_Boombox[idboombox][y], g_Boombox[idboombox][z]) || g_Boombox[idboombox][Stato] == BOOMBOX_STATO_SPENTO) // Se non si trova nel raggio della boombox, o la boombox è spenta stoppa la musica
- {
- Audio_Stop(playerid, GetPVarInt(playerid, "Player_Boombox_AudioID"));
- DeletePVar(playerid, "Player_Boombox_InAscolto");
- DeletePVar(playerid, "Player_Boombox_Pausa");
- return 1;
- }
- if(GetPVarInt(playerid, "Player_Boombox_Pausa") == idboombox && g_Boombox[idboombox][Stato] == BOOMBOX_STATO_ATTIVO) // se il player ha un id di una boombox in pausa ( e' in pausa lui stesso) e, la boombox a cui è assegnato Player_Boombox_InAscolto è attiva, la riattiva
- {
- Audio_Resume(playerid, GetPVarInt(playerid, "Player_Boombox_AudioID"));
- DeletePVar(playerid, "Player_Boombox_Pausa");
- return 1;
- }
- else if(g_Boombox[idboombox][Stato] == BOOMBOX_STATO_PAUSA) // se la musica è in pausa, la mette in pausa
- {
- Audio_Pause(playerid, GetPVarInt(playerid, "Player_Boombox_AudioID"));
- SetPVarInt(playerid, "Player_Boombox_Pausa", idboombox);
- return 1;
- }
- return 1;
- }
- else // Se non sta ascolta nessuna boombox
- {
- foreach(new b : Boombox_Esistenti) // controlla se c'è una boombox da attivargli
- {
- if(g_Boombox[b][Stato] == BOOMBOX_STATO_ATTIVO)
- {
- if(!IsPlayerInRangeOfPoint(playerid, BOOMBOX_DISTANZA_MASSIMA, g_Boombox[b][x], g_Boombox[b][y], g_Boombox[b][z])) continue;
- new audiohandle = Audio_PlayStreamed(playerid, g_Boombox[b][URL], false, false, true);
- Audio_Set3DPosition(playerid, audiohandle, g_Boombox[b][x], g_Boombox[b][y], g_Boombox[b][z], BOOMBOX_DISTANZA_MASSIMA);
- SetPVarInt(playerid, "Player_Boombox_InAscolto", b);
- SetPVarInt(playerid, "Player_Boombox_AudioID", audiohandle);
- if(g_Boombox[b][Stato] == BOOMBOX_STATO_PAUSA)
- {
- Audio_Pause(playerid, audiohandle);
- SetPVarInt(playerid, "Player_Boombox_Pausa", idboombox);
- }
- }
- }
- return 1;
- }
- }
- else // Se il player non ha l'audio plugin, usa la funzione standard di SA-MP
- {
- if(idboombox != 0) // se sta già ascoltando una boombox
- {
- if(!IsPlayerInRangeOfPoint(playerid, BOOMBOX_DISTANZA_MASSIMA, g_Boombox[idboombox][x], g_Boombox[idboombox][y], g_Boombox[idboombox][z]) || g_Boombox[idboombox][Stato] != BOOMBOX_STATO_ATTIVO) // controlla la posizione e lo stato e in caso disattiva la riproduzione
- {
- StopAudioStreamForPlayer(playerid);
- DeletePVar(playerid, "Player_Boombox_InAscolto");
- }
- return 1;
- }
- else // se non sta ascoltando nessuna boombox, controlla
- {
- foreach(new a : Boombox_Esistenti)
- {
- if(g_Boombox[a][Stato] != BOOMBOX_STATO_ATTIVO) continue;
- if(!IsPlayerInRangeOfPoint(playerid, BOOMBOX_DISTANZA_MASSIMA, g_Boombox[a][x], g_Boombox[a][y], g_Boombox[a][z])) continue;
- PlayAudioStreamForPlayer(playerid, g_Boombox[a][URL], g_Boombox[a][x], g_Boombox[a][y], g_Boombox[a][z], BOOMBOX_DISTANZA_MASSIMA, 1);
- SetPVarInt(playerid, "Player_Boombox_InAscolto", a);
- }
- }
- }
- return 1;
- }
- stock GetInFrontOfPlayer(playerid, Float:distance, &Float:xposizione, &Float:yposizione, &Float:zposizione, &Float:angle)
- {
- GetPlayerPos(playerid, xposizione, yposizione, zposizione);
- GetPlayerFacingAngle(playerid, angle);
- xposizione += (distance * floatsin(-angle, degrees));
- yposizione += (distance * floatcos(-angle, degrees));
- }
- stock IsPointInRangeOfPoint(Float:xa, Float:ya, Float:za, Float:xa2, Float:ya2, Float:za2, Float:range)
- {
- xa2 -= xa;
- ya2 -= ya;
- za2 -= za;
- return ((xa2 * xa2) + (ya2 * ya2) + (za2 * za2)) < (range * range);
- }
- stock GetNome(playerid)
- {
- new nome[MAX_PLAYER_NAME];
- GetPlayerName(playerid, nome, sizeof(nome));
- return nome;
- }
- stock CaricaTD(playerid)
- {
- TD_BOOMBOX[playerid][0] = CreatePlayerTextDraw(playerid, 409.000000, 191.000000, "scegli_un_modello_boombox");
- PlayerTextDrawFont(playerid, TD_BOOMBOX[playerid][0], 3);
- PlayerTextDrawLetterSize(playerid, TD_BOOMBOX[playerid][0], 0.191666, 1.000000);
- PlayerTextDrawTextSize(playerid, TD_BOOMBOX[playerid][0], 399.000000, 16.500000);
- PlayerTextDrawSetOutline(playerid, TD_BOOMBOX[playerid][0], 1);
- PlayerTextDrawSetShadow(playerid, TD_BOOMBOX[playerid][0], 0);
- PlayerTextDrawAlignment(playerid, TD_BOOMBOX[playerid][0], 1);
- PlayerTextDrawColor(playerid, TD_BOOMBOX[playerid][0], -1);
- PlayerTextDrawBackgroundColor(playerid, TD_BOOMBOX[playerid][0], 255);
- PlayerTextDrawBoxColor(playerid, TD_BOOMBOX[playerid][0], 50);
- PlayerTextDrawUseBox(playerid, TD_BOOMBOX[playerid][0], 0);
- PlayerTextDrawSetProportional(playerid, TD_BOOMBOX[playerid][0], 1);
- PlayerTextDrawSetSelectable(playerid, TD_BOOMBOX[playerid][0], 0);
- PlayerTextDrawSetSelectable(playerid, TD_BOOMBOX[playerid][0], 0);
- TD_BOOMBOX[playerid][1] = CreatePlayerTextDraw(playerid, 406.000000, 200.000000, "Preview_Model");
- PlayerTextDrawFont(playerid, TD_BOOMBOX[playerid][1], 5);
- PlayerTextDrawLetterSize(playerid, TD_BOOMBOX[playerid][1], 0.600000, 2.000000);
- PlayerTextDrawTextSize(playerid, TD_BOOMBOX[playerid][1], 49.500000, 46.500000);
- PlayerTextDrawSetOutline(playerid, TD_BOOMBOX[playerid][1], 0);
- PlayerTextDrawSetShadow(playerid, TD_BOOMBOX[playerid][1], 0);
- PlayerTextDrawAlignment(playerid, TD_BOOMBOX[playerid][1], 1);
- PlayerTextDrawColor(playerid, TD_BOOMBOX[playerid][1], -1);
- PlayerTextDrawBackgroundColor(playerid, TD_BOOMBOX[playerid][1], 169);
- PlayerTextDrawBoxColor(playerid, TD_BOOMBOX[playerid][1], 255);
- PlayerTextDrawUseBox(playerid, TD_BOOMBOX[playerid][1], 0);
- PlayerTextDrawSetProportional(playerid, TD_BOOMBOX[playerid][1], 1);
- PlayerTextDrawSetSelectable(playerid, TD_BOOMBOX[playerid][1], 1);
- PlayerTextDrawSetPreviewModel(playerid, TD_BOOMBOX[playerid][1], 2226);
- PlayerTextDrawSetPreviewRot(playerid, TD_BOOMBOX[playerid][1], -18.000000, 1.000000, -180.000000, 1.000000);
- TD_BOOMBOX[playerid][2] = CreatePlayerTextDraw(playerid, 455.500000, 200.000000, "Preview_Model");
- PlayerTextDrawFont(playerid, TD_BOOMBOX[playerid][2], 5);
- PlayerTextDrawLetterSize(playerid, TD_BOOMBOX[playerid][2], 0.179166, 2.000000);
- PlayerTextDrawTextSize(playerid, TD_BOOMBOX[playerid][2], 49.500000, 46.500000);
- PlayerTextDrawSetOutline(playerid, TD_BOOMBOX[playerid][2], 0);
- PlayerTextDrawSetShadow(playerid, TD_BOOMBOX[playerid][2], 0);
- PlayerTextDrawAlignment(playerid, TD_BOOMBOX[playerid][2], 0);
- PlayerTextDrawColor(playerid, TD_BOOMBOX[playerid][2], -1);
- PlayerTextDrawBackgroundColor(playerid, TD_BOOMBOX[playerid][2], 169);
- PlayerTextDrawBoxColor(playerid, TD_BOOMBOX[playerid][2], 255);
- PlayerTextDrawUseBox(playerid, TD_BOOMBOX[playerid][2], 0);
- PlayerTextDrawSetProportional(playerid, TD_BOOMBOX[playerid][2], 1);
- PlayerTextDrawSetSelectable(playerid, TD_BOOMBOX[playerid][2], 1);
- PlayerTextDrawSetPreviewModel(playerid, TD_BOOMBOX[playerid][2], 2102);
- PlayerTextDrawSetPreviewRot(playerid, TD_BOOMBOX[playerid][2], -18.000000, 1.000000, -180.000000, 1.000000);
- return 1;
- }
- //
Add Comment
Please, Sign In to add comment