Jump to content

[REZOLVAT] Incarcare Pickup-uri din MySQL


Ian15
 Share

Recommended Posts

Intrebare: Cum as putea sa incarc din baza de date pickup-uri si sa le creez in joc?
Ai încercat să faci ceva înainte să postezi?: Pai, am facut functia onPickupLoad, dar e goala si la OnGamemodeInit am incercat ceva dar nu mi-a reusit.

Link to comment
Share on other sites

Pai, pentru prima data trebuie sa creezi in baza de date 7/8 tabele, ID - Text - PosX - PosY - PosZ -  Interior - VirtualWorld - Type(type e optional, in caz ca vrei si alte tipuri de pickupuri, inafara de clasicele pickup-uri in forma de i, acele galbene). Tabelele PosX - PosY - PosZ trebuie sa le creezi de tip FLOAT si Name trebuie sa il creezi de tip VARCHAR, la lungime pui 50(modifici in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri), iar in rest celelalte le creezi de tip INT, iar la ID sa nu uiti sa selectezi A_I(Auto Increment).

Apoi trebuie sa le definiesti variabilele de ex:

#define MAX_PICKUPS 50 // aici modifici in functie de cate pickup-uri vrei sa ai pe server

enum pickups {
	pickupID,
	pickupText[50], // string-ul il maresti in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri
	FLOAT:pickupPosX,
	FLOAT:pickupPosY,
	FLOAT:pickupPosZ,
	pickupInt,
	pickupVW,
	pickupPickup,
	Text3D:pickupLabel // daca lasi optionalul sterge linia asta
	/* //OPTIONAL
	Text3D:pickupLabel,
	pickupType */ //OPTIONAL
	// STERGE ULTIMELE 3 LINII DACA NU VREI OPTIONALUL
};
new PickupsInfo[MAX_PICKUPS][pickups], serverPickups = 0;

Apoi trebuie sa le incarci din baza de date de ex:

function LoadPickups() {
	new Cache: db = mysql_query(SQL, "SELECT * FROM `pickups` ORDER BY `pickups`.`ID` ASC");
	new x, result[50], string[50];
 	for(new i, j = cache_get_row_count (); i != j; ++i) {
	    serverPickups ++;
       	cache_get_field_content(i, "ID", result); x = strval(result); PickupsInfo[x][pickupID] = x;
       	cache_get_field_content(i, "Text", result); format(PickupsInfo[x][pickupText], 50, result);
		cache_get_field_content(i, "PosX", result); PickupsInfo[x][pickupPosX] = strval(result);		
       	cache_get_field_content(i, "PosY", result); PickupsInfo[x][pickupPosY] = strval(result);
       	cache_get_field_content(i, "PosZ", result); PickupsInfo[x][pickupPosZ] = floatstr(result);
       	cache_get_field_content(i, "Interior", result); PickupsInfo[x][pickupInt] = strval(result);
       	cache_get_field_content(i, "VirtualWorld", result); PickupsInfo[x][pickupVW] = strval(result);
	   	// OPTIONAL // cache_get_field_content(i, "Type", result); PickupsInfo[x][pickupType] = strval(result);
        // OPTIONAL // PickupsInfo[x][pickupPickup] = CreateDynamicPickup(PickupsInfo[x][pickupType], 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0);
		PickupsInfo[x][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0);
		format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[x][pickupID], PickupsInfo[x][pickupText]);
	    PickupsInfo[x][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 10.0);
	}
	printf("Pickups: %d", serverPickups);
	cache_delete(db);
	return 1;
}

Ti-am facut toata partea de incarcare si definire a pickup-urilor din baza de date, acum comanda de creeare a pickup-urilor din joc:

YCMD:createpickup(playerid, params[], help) {
	if(serverPickups == 50) return SCM(playerid, -1, "Ai deja 50 de pickp-uri create pe server!");
	// OPTIONAL // new int, vw, type, ptext[50], inputtext[50], query[256], string[128];
	// OPTIONAL // if(sscanf(params, "s[50]iii", inputtext, int, vw, type)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld> <type>");
	new int, vw, ptext[50], inputtext[50], query[256], string[128];
	if(sscanf(params, "s[50]ii", inputtext, int, vw)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld>");
	if(strlen(inputtext) == 0 || strlen(inputtext) > 49) return SCM(playerid, -1, "Introdu un text intre 0 si 49 caractere!");
	new Float: x, Float: y, Float: z; GetPlayerPos(playerid, x, y, z); format(ptext, 50, inputtext);
	// OPTIONAL // mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`, `Type`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d', '%d')", ptext, x, y, z, int, vw, type);
	mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d')", ptext, x, y, z, int, vw);
	new Cache: result = mysql_query(SQL, query);
	new pid = cache_insert_id(); serverPickups++;
	cache_delete(result);
	// OPTIONAL // PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; PickupsInfo[pid][pickupType] = type; format(PickupsInfo[pid][pickupText], 50, inputtext);
	PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; format(PickupsInfo[pid][pickupText], 50, inputtext);
	format(string, sizeof(string), "Pickup-ul cu SQL id-ul %d a fost creeat pe server(total pickup-uri create: %d).", pid, serverPickups); SCM(playerid, COLOR_WHITE, string);
	// OPTIONAL // PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(PickupsInfo[pid][pickupType], 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0);
	PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0);
	format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[pid][pickupID], PickupsInfo[pid][pickupText]);
    PickupsInfo[pid][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 10.0);
    return 1;
}

Acum tu o sa trebuiasca sa iti faci o comanda cu care sa poti muta pozitia pickup-ului sau sa modifici textul / type-ul(in caz ca il pui).

Link to comment
Share on other sites

Acum 9 ore, DiBlaine a spus:

Pai, pentru prima data trebuie sa creezi in baza de date 7/8 tabele, ID - Text - PosX - PosY - PosZ -  Interior - VirtualWorld - Type(type e optional, in caz ca vrei si alte tipuri de pickupuri, inafara de clasicele pickup-uri in forma de i, acele galbene). Tabelele PosX - PosY - PosZ trebuie sa le creezi de tip FLOAT si Name trebuie sa il creezi de tip VARCHAR, la lungime pui 50(modifici in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri), iar in rest celelalte le creezi de tip INT, iar la ID sa nu uiti sa selectezi A_I(Auto Increment).

Apoi trebuie sa le definiesti variabilele de ex:

#define MAX_PICKUPS 50 // aici modifici in functie de cate pickup-uri vrei sa ai pe server enum pickups { pickupID, pickupText[50], // string-ul il maresti in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri FLOAT:pickupPosX, FLOAT:pickupPosY, FLOAT:pickupPosZ, pickupInt, pickupVW, pickupPickup, Text3D:pickupLabel // daca lasi optionalul sterge linia asta /* //OPTIONAL Text3D:pickupLabel, pickupType */ //OPTIONAL // STERGE ULTIMELE 3 LINII DACA NU VREI OPTIONALUL }; new PickupsInfo[MAX_PICKUPS][pickups], serverPickups = 0;


#define MAX_PICKUPS 50 // aici modifici in functie de cate pickup-uri vrei sa ai pe server

enum pickups {
	pickupID,
	pickupText[50], // string-ul il maresti in functie de cat de lungi vor fi textele pe care le vei avea la pickup-uri
	FLOAT:pickupPosX,
	FLOAT:pickupPosY,
	FLOAT:pickupPosZ,
	pickupInt,
	pickupVW,
	pickupPickup,
	Text3D:pickupLabel // daca lasi optionalul sterge linia asta
	/* //OPTIONAL
	Text3D:pickupLabel,
	pickupType */ //OPTIONAL
	// STERGE ULTIMELE 3 LINII DACA NU VREI OPTIONALUL
};
new PickupsInfo[MAX_PICKUPS][pickups], serverPickups = 0;

Apoi trebuie sa le incarci din baza de date de ex:

function LoadPickups() { new Cache: db = mysql_query(SQL, "SELECT * FROM `pickups` ORDER BY `pickups`.`ID` ASC"); new x, result[50], string[50]; for(new i, j = cache_get_row_count (); i != j; ++i) { serverPickups ++; cache_get_field_content(i, "ID", result); x = strval(result); PickupsInfo[x][pickupID] = x; cache_get_field_content(i, "Text", result); format(PickupsInfo[x][pickupText], 50, result); cache_get_field_content(i, "PosX", result); PickupsInfo[x][pickupPosX] = strval(result); cache_get_field_content(i, "PosY", result); PickupsInfo[x][pickupPosY] = strval(result); cache_get_field_content(i, "PosZ", result); PickupsInfo[x][pickupPosZ] = floatstr(result); cache_get_field_content(i, "Interior", result); PickupsInfo[x][pickupInt] = strval(result); cache_get_field_content(i, "VirtualWorld", result); PickupsInfo[x][pickupVW] = strval(result); // OPTIONAL // cache_get_field_content(i, "Type", result); PickupsInfo[x][pickupType] = strval(result); // OPTIONAL // PickupsInfo[x][pickupPickup] = CreateDynamicPickup(PickupsInfo[x][pickupType], 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0); PickupsInfo[x][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0); format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[x][pickupID], PickupsInfo[x][pickupText]); PickupsInfo[x][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 10.0); } printf("Pickups: %d", serverPickups); cache_delete(db); return 1; }


function LoadPickups() {
	new Cache: db = mysql_query(SQL, "SELECT * FROM `pickups` ORDER BY `pickups`.`ID` ASC");
	new x, result[50], string[50];
 	for(new i, j = cache_get_row_count (); i != j; ++i) {
	    serverPickups ++;
       	cache_get_field_content(i, "ID", result); x = strval(result); PickupsInfo[x][pickupID] = x;
       	cache_get_field_content(i, "Text", result); format(PickupsInfo[x][pickupText], 50, result);
		cache_get_field_content(i, "PosX", result); PickupsInfo[x][pickupPosX] = strval(result);		
       	cache_get_field_content(i, "PosY", result); PickupsInfo[x][pickupPosY] = strval(result);
       	cache_get_field_content(i, "PosZ", result); PickupsInfo[x][pickupPosZ] = floatstr(result);
       	cache_get_field_content(i, "Interior", result); PickupsInfo[x][pickupInt] = strval(result);
       	cache_get_field_content(i, "VirtualWorld", result); PickupsInfo[x][pickupVW] = strval(result);
	   	// OPTIONAL // cache_get_field_content(i, "Type", result); PickupsInfo[x][pickupType] = strval(result);
        // OPTIONAL // PickupsInfo[x][pickupPickup] = CreateDynamicPickup(PickupsInfo[x][pickupType], 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0);
		PickupsInfo[x][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 30.0);
		format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[x][pickupID], PickupsInfo[x][pickupText]);
	    PickupsInfo[x][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[x][pickupPosX], PickupsInfo[x][pickupPosY], PickupsInfo[x][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[x][pickupVW], PickupsInfo[x][pickupInt], -1, 10.0);
	}
	printf("Pickups: %d", serverPickups);
	cache_delete(db);
	return 1;
}

Ti-am facut toata partea de incarcare si definire a pickup-urilor din baza de date, acum comanda de creeare a pickup-urilor din joc:

YCMD:createpickup(playerid, params[], help) { if(serverPickups == 50) return SCM(playerid, -1, "Ai deja 50 de pickp-uri create pe server!"); // OPTIONAL // new int, vw, type, ptext[50], inputtext[50], query[256], string[128]; // OPTIONAL // if(sscanf(params, "s[50]iii", inputtext, int, vw, type)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld> <type>"); new int, vw, ptext[50], inputtext[50], query[256], string[128]; if(sscanf(params, "s[50]ii", inputtext, int, vw)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld>"); if(strlen(inputtext) == 0 || strlen(inputtext) > 49) return SCM(playerid, -1, "Introdu un text intre 0 si 49 caractere!"); new Float: x, Float: y, Float: z; GetPlayerPos(playerid, x, y, z); format(ptext, 50, inputtext); // OPTIONAL // mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`, `Type`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d', '%d')", ptext, x, y, z, int, vw, type); mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d')", ptext, x, y, z, int, vw); new Cache: result = mysql_query(SQL, query); new pid = cache_insert_id(); serverPickups++; cache_delete(result); // OPTIONAL // PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; PickupsInfo[pid][pickupType] = type; format(PickupsInfo[pid][pickupText], 50, inputtext); PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; format(PickupsInfo[pid][pickupText], 50, inputtext); format(string, sizeof(string), "Pickup-ul cu SQL id-ul %d a fost creeat pe server(total pickup-uri create: %d).", pid, serverPickups); SCM(playerid, COLOR_WHITE, string); // OPTIONAL // PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(PickupsInfo[pid][pickupType], 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0); PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0); format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[pid][pickupID], PickupsInfo[pid][pickupText]); PickupsInfo[pid][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 10.0); return 1; }


YCMD:createpickup(playerid, params[], help) {
	if(serverPickups == 50) return SCM(playerid, -1, "Ai deja 50 de pickp-uri create pe server!");
	// OPTIONAL // new int, vw, type, ptext[50], inputtext[50], query[256], string[128];
	// OPTIONAL // if(sscanf(params, "s[50]iii", inputtext, int, vw, type)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld> <type>");
	new int, vw, ptext[50], inputtext[50], query[256], string[128];
	if(sscanf(params, "s[50]ii", inputtext, int, vw)) return SCM(playerid, COLOR_GREY, "USAGE: {FFFFFF}/createpickup <text> <interior> <virtualworld>");
	if(strlen(inputtext) == 0 || strlen(inputtext) > 49) return SCM(playerid, -1, "Introdu un text intre 0 si 49 caractere!");
	new Float: x, Float: y, Float: z; GetPlayerPos(playerid, x, y, z); format(ptext, 50, inputtext);
	// OPTIONAL // mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`, `Type`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d', '%d')", ptext, x, y, z, int, vw, type);
	mysql_format(SQL, query, sizeof(query),"INSERT INTO `pickups` (`Text`, `PosX`, `PosY`, `PosZ`, `Interior`, `VirtualWorld`) VALUES ('%s', '%f', '%f', '%f', '%d', '%d')", ptext, x, y, z, int, vw);
	new Cache: result = mysql_query(SQL, query);
	new pid = cache_insert_id(); serverPickups++;
	cache_delete(result);
	// OPTIONAL // PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; PickupsInfo[pid][pickupType] = type; format(PickupsInfo[pid][pickupText], 50, inputtext);
	PickupsInfo[pid][pickupID] = pid; PickupsInfo[pid][pickupPosX] = x; PickupsInfo[pid][pickupPosY] = y; PickupsInfo[pid][pickupPosZ] = z; PickupsInfo[pid][pickupInt] = int; PickupsInfo[pid][pickupVW] = vw; format(PickupsInfo[pid][pickupText], 50, inputtext);
	format(string, sizeof(string), "Pickup-ul cu SQL id-ul %d a fost creeat pe server(total pickup-uri create: %d).", pid, serverPickups); SCM(playerid, COLOR_WHITE, string);
	// OPTIONAL // PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(PickupsInfo[pid][pickupType], 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0);
	PickupsInfo[pid][pickupPickup] = CreateDynamicPickup(1239, 23, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 30.0);
	format(string, sizeof(string), "SQL Pickup ID: %d\n%s", PickupsInfo[pid][pickupID], PickupsInfo[pid][pickupText]);
    PickupsInfo[pid][pickupLabel] = CreateDynamic3DTextLabel(string, 0xFFFFFFFF, PickupsInfo[pid][pickupPosX], PickupsInfo[pid][pickupPosY], PickupsInfo[pid][pickupPosZ], 100, INVALID_PLAYER_ID, INVALID_VEHICLE_ID, 0, PickupsInfo[pid][pickupVW], PickupsInfo[pid][pickupInt], -1, 10.0);
    return 1;
}

Acum tu o sa trebuiasca sa iti faci o comanda cu care sa poti muta pozitia pickup-ului sau sa modifici textul / type-ul(in caz ca il pui).

Iti multumesc pentru ajutorul acordat! Termini orele online si trec si eu sa incerc, sa vad ce-mi iese 🙂 

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...