Aller au contenu
San Andreas Multiplayer
xxcocoxx974

SelectObject probléme

Messages recommandés

Bonsoir , alors voila j'ai un petit soucis , je vous explique , actuellement j'essaie de faire un petit script pour mappez in game.

Le soucis c'est que quand j'utilise SelectObject , je ne sais pas comment récupérer l'id de l'objet dans ma base de donné.

Car du coup dans le jeu , au lieu de récupérer l'id de l'objet dans dans ma base de donnée , je récupére l'id de l'objet dans le jeu.

 

Voici le script : 

 

Dans OnPlayerSelectDynamicObject

if(ObjectEditing[playerid]==1)
	{
	    EditDynamicObject(playerid,objectid);
	    player_Variable[playerid]= mapping[objectid][mobjectid];

	}
OnPlayerEditDynamicObject

if(response == EDIT_RESPONSE_FINAL)
	{
	    if(ObjectEditing[playerid]==1)
		{
		
		    msg_Client(playerid,COLOR_WHITE,"{FF2727}Admin -{FFFFFF} Positions de l'objet sauvegardées.");
		    new i = player_Variable[playerid];
		    mapping[i][pos][0] = x;
			mapping[i][pos][1] = y;
			mapping[i][pos][2] = z;
			mapping[i][pos][3] = rx;
			mapping[i][pos][4] = ry;
			mapping[i][pos][5] = rz;
			mapping_Save(i);
		    mapping_Update(i);
			//SetDynamicObjectPos(i,x,y,z);
			//SetDynamicObjectRot(i,rx,ry,rz);




		    print("Mapping savegardé");
		    //ObjectEditing[playerid]=-1;
		}
		return 1;
}

Merci d'avance de vos réponse.

Modifié par xxcocoxx974

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec une variable sa serait plus simple, je te laisse regarder avec SetPVarInt , GetPVarInt

Enfin moi je ferait comme sa 

Partager ce message


Lien à poster
Partager sur d’autres sites

Je me suis mal exprimé je pense , enfaite je n'arrive pas à recupéré l'id dans ma base de donné mais je récupéré celui en jeu ( celui qui est mélangé avec tout les autres mappings ).

Partager ce message


Lien à poster
Partager sur d’autres sites
Citation

 

	    new mapID = 0, found = false;
		for(new g; g < MAX_MAPPING; g++)
		{
		    if(PlayerToPoint(5.0, playerid, mapping[g][pos][0],mapping[g][pos][1], mapping[g][pos][2]))
		    {
				found = true;
				mapID = g;
				break;
		    }
		}
	    if(!found)
	        {SendClientMessage(playerid,-1, "pas de mapping ici"); return 1;}

Avec une boucle sa devrait fonctionner 

Modifié par Marcus62

Partager ce message


Lien à poster
Partager sur d’autres sites

@vitespirite a tout dit SelectObject appel la callback OnPlayerSelectObject 

public OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ)

//objectid = id du mapping

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui mais du coup quand je sauvergarde dans la bd , sa veux pas , vue que par exemple j'ai des portes , des poubelles en Objet dynamique , l'id de la bd ne sera pas la même que celle in game.

Partager ce message


Lien à poster
Partager sur d’autres sites

Quand je crée ( Sa fonctionne , la je cherche un moyen de modifier l'objet depuis SelectObject ) :

if(strcmp(tmp, "creer", true) == 0)
								{
									tmp = strtok(cmdtext, idx);
									if(!strlen(tmp))
										{return msg_Client(playerid, COLOR_WHITE, "{FF6347}Admin -{FFFFFF} Usage -{FFFFFF} /a creer mapping <id>");}
									new idobject,
										ID = -1;
									idobject = strval(tmp);
									if(idobject < 1000 || idobject > 25000)
										{return msg_Client(playerid, COLOR_WHITE, "{FF2727}Admin -{FFFFFF} L'ID de l'object doît être comprise entre 1000 & 25000 !"); }
			                        new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid, X,Y,Z);
			                        for(new nbg = 0; nbg < totalMappings; nbg++)
									{
										if(mapping[nbg][used] == 0)
											{ID = nbg; break;}
									}
									if(ID==-1)
									{
										format(sql, sizeof(sql), "SELECT * FROM serveur_mappings");
										mysql_query(MYSQL,sql);
										cache_get_row_count(ID);
										if(ID>MAX_OBJECTSM)
											{msg_Client(playerid,COLOR_WHITE,"{FF2727}Admin -{FFFFFF} Maximum d'object atteint."); return 1;}
			                            format(sql, sizeof(sql), "INSERT INTO serveur_mappings SET id=%d, Objectid=%d, Pos_x=%f, Pos_y=%f, Pos_z=%f, rX=0, rY=0, rZ=0,Owner='Admin', Owned=1, Terrainid=-1, Created=1",ID+1, idobject, X+1, Y+1, Z);
										mysql_pquery(MYSQL,sql);
										totalMappings++;
									}
									//ID = CreateDynamicObject(idobject, X ,Y, Z, 0.0,0.0,0.0, -1, -1, -1, 200.0);
									mapping[ID][owned] = 1;
									mapping[ID][used] = 1;
									mapping[ID][mobjectid] = idobject;
									mapping[ID][mterrainid] = -1;
									mapping[ID][pos][0] = X+1;
									mapping[ID][pos][1] = Y+1;
									mapping[ID][pos][2] = Z;
									mapping[ID][pos][3] = 0;
									mapping[ID][pos][4] = 0;
									mapping[ID][pos][5] = 0;
									mapping_Update(ID);
									format(string,sizeof(string),"{FF2727}Admin -{FFFFFF} Objet id %d créé.",ID);
									msg_Client(playerid,COLOR_WHITE,string);
				                	return 1;

								}

Et quand sa update : 

stock mapping_Update(mappingid)
{
    if(IsValidDynamicObject(uniquemapping_Object[mappingid]))
    	{DestroyDynamicObject(uniquemapping_Object[mappingid]);}
   	new tmpmapping = 0;
    if(tmpmapping == 0)
	{uniquemapping_Object[mappingid] = CreateDynamicObject(mapping[mappingid][mobjectid], mapping[mappingid][pos][0],mapping[mappingid][pos][1],mapping[mappingid][pos][2],mapping[mappingid][pos][3],mapping[mappingid][pos][4],mapping[mappingid][pos][5], -1, -1, -1, STREAM_DISTANCE);}
	return 1;
}

 

 

Ces deux la fonctionnes bien.

Modifié par xxcocoxx974

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 3 minutes, xxcocoxx974 a dit :

"INSERT INTO serveur_mappings SET id=%d, Objectid=%d, Pos_x=%f, Pos_y=%f, Pos_z=%f, rX=0, rY=0, rZ=0,Owner='Admin', Owned=1, Terrainid=-1, Created=1",ID+1, idobject, X+1, Y+1, Z)

non sa sa ne fonctionne pas a mon avis

Partager ce message


Lien à poster
Partager sur d’autres sites

Enfaite le soucis c'est que je souhaite faire une commande , genre quand j'ai selectionné l'objet il faut que je modifie sa position , j'ai donc EditDynamicObject , mais je n'est pas d'idée pour récuperer l'id de l'objet selectionné ( j'ai déja essayé et quand je le fait sa selectionne l'id de l'objet dans le jeu qui n'est pas comme celui de la bd ) 

Partager ce message


Lien à poster
Partager sur d’autres sites
if(strcmp(tmp, "creer", true) == 0)
{
	tmp = strtok(cmdtext, idx);
	if(!strlen(tmp))
		{return msg_Client(playerid, COLOR_WHITE, "{FF6347}Admin -{FFFFFF} Usage -{FFFFFF} /a creer mapping <id>");}
	new idobject,
		ID = -1;
	idobject = strval(tmp);
	if(idobject < 1000 || idobject > 25000)
		{return msg_Client(playerid, COLOR_WHITE, "{FF2727}Admin -{FFFFFF} L'ID de l'object doît être comprise entre 1000 & 25000 !"); }
	new Float:X,Float:Y,Float:Z; GetPlayerPos(playerid, X,Y,Z);
	for(new nbg = 1; nbg < totalMappings; nbg++)
	{
		if(mapping[nbg][used] == 0)
			{ID = nbg; break;}
	}
	if(ID==-1)
	{
		if(ID>MAX_OBJECTSM)
			{msg_Client(playerid,COLOR_WHITE,"{FF2727}Admin -{FFFFFF} Maximum d'object atteint."); return 1;}
		format(sql, sizeof(sql), "INSERT INTO serveur_mappings SET id=%d, Objectid=%d, Pos_x=%f, Pos_y=%f, Pos_z=%f, rX=0, rY=0, rZ=0,Owner='Admin', Owned=1, Terrainid=-1, Created=1",ID, idobject, X+1, Y+1, Z);
		mysql_pquery(MYSQL,sql);
		totalMappings++;
	}
	mapping[ID][object_id] = CreateDynamicObject(idobject, X ,Y, Z, 0.0,0.0,0.0, -1, -1, -1, 200.0);
	mapping[ID][owned] = 1;
	mapping[ID][used] = 1;
	mapping[ID][mobjectid] = idobject;
	mapping[ID][mterrainid] = -1;
	mapping[ID][pos][0] = X+1;
	mapping[ID][pos][1] = Y+1;
	mapping[ID][pos][2] = Z;
	mapping[ID][pos][3] = 0;
	mapping[ID][pos][4] = 0;
	mapping[ID][pos][5] = 0;
	mapping_Update(ID);
	format(string,sizeof(string),"{FF2727}Admin -{FFFFFF} Objet id %d créé.",ID);
	msg_Client(playerid,COLOR_WHITE,string);
	return 1;
}

J'ai editer dans ton enum mapping tu ajoutera object_id

Modifié par vitespirite

Partager ce message


Lien à poster
Partager sur d’autres sites

Y'a plusieurs solutions, avec les fonctions du streamer ou alors en utilisant une variable qui récupère le bon ID de la BDD au moment ou tu load le mapping (donc au démarrrage du serveur logiquement)

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as un ID en BDD qui n'est pas le même IG.

Donc rajoute une variable quand tu load:

mapping[i][realID] = cache_get_field_content_int(i , "ID");

et quand tu Save

UPDATE mapping SET ce que tu as à save WHERE ID = mapping[id][realID]

 

 

Modifié par Root

Partager ce message


Lien à poster
Partager sur d’autres sites
Guest
Ce sujet ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...