• 07 Juin 2026, 01:26:05


Auteur Sujet: Transposition de map  (Lu 2027 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Transposition de map
« le: 01 Mars 2009, 21:14:51 »
Hello tout le monde,

Voila c'est une question peut etre stupide mais une fois j'avais créé une map a un endroit, puis l'idée m'ai venu de mettre cette meme map a un autre endroit.
Mais comme il est impossible de reproduire 2 fois la meme map, je me demandais si il existait un moyen de "transposer" la map.
Je penserai plutot avec les coordonés, de leur faire subir le meme changement du genre (+214, +15, -26) > (X, Y, Z).
Voila si c'est possible faite le moi savoir  :)

++
nikko

Hors ligne angelrider

  • Scripteur
  • *
  • Bandit
  • Messages: 299
    • Voir le profil
Re : Transposition de map
« Réponse #1 le: 01 Mars 2009, 21:22:54 »
Ouvrir les coordonnées de ta map avec le tableurs xD non je ne crois pas que ce soit possible.
Nouveau Site de Mods San Andreas:
http://lcdacreation.fr

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Transposition de map
« Réponse #2 le: 01 Mars 2009, 21:55:51 »
Non sans tableur. par une fonction pawn...

++
nikko

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Transposition de map
« Réponse #3 le: 02 Mars 2009, 03:25:53 »
Salut,

tu dois tout simplement créer une fonction qui ajoute la différence de position voulue à chaque objet,

voici un exemple:

MoveMap(mapname[], Float:X, Float:Y, Float:Z)
{
if(!fexist(mapname))
{
    return -1;
}
new File: f, File:output, tmp[128];
f = fopen(mapname, io_read);
if(!f)
{
    return -2;
}
format(tmp, sizeof(tmp), "%s.moved",mapname);
output = fopen(tmp,io_write);
if(!output)
{
    fclose(f);
    return -3;
}
new idx, Float:ox, Float:oy, Float:oz, model,Float:rx, Float:ry, Float:rz;
while(fread(f, tmp))
{
idx = strfind(tmp,"(", true);
model = strval(strtok(tmp, idx, ','));
ox = floatstr(strtok(tmp, idx, ','));
oy = floatstr(strtok(tmp, idx, ','));
oz = floatstr(strtok(tmp, idx, ','));
rx = floatstr(strtok(tmp, idx, ','));
ry = floatstr(strtok(tmp, idx, ','));
rz = floatstr(strtok(tmp, idx, ','));
ox += X;
oy += Y;
oz += Z;
format(tmp, sizeof(tmp),"CreateObject(%d, %f, %f, %f, %f, %f, %f);\r\n",model,ox,oy,oz,rx,ry,rz);
fwrite(output,tmp);
}
fclose(output);
fclose(f);
return 1;
}

cet exemple prend en charge les fichiers contenant les données sous un format du genre :

CreateObject(123,453.154,3423.1588,4324.1504,32.4546,123.45,321.6345);

enfin, plutôt tout format qui a une parenthèse '(' suivie des données dans l'ordre habituel, par contre s'il y a une distance, elle ne sera pas envoyer dans le fichier final (qui est le même fichier en ajoutant .moved au bout)

++Sim++





Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Transposition de map
« Réponse #4 le: 02 Mars 2009, 09:57:45 »
Salut, avec cette fonction, il faut mettre la map dans un fichier mais elle est reconstitué dans un autre fichier ou directement ingame ?

++
nikko

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Transposition de map
« Réponse #5 le: 02 Mars 2009, 10:44:43 »
Attention avec la solution de Sim, si on passe deux fois le fichier dans sa fonction, le décalage sera double.
Si les coordonnées sont dans un fichier, tu peux les laisser telles quelles et ne mettre le décalage qu'au moment du chargement.
NB : les décalages sur les différents axes peuvent même être stockés dans le fichier (il faudra donc modifier la fonction de lecture) ce qui permet d'appliquer un décalage différent à chaque map.

++
Syg
Courtesy of GtaManiac

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Transposition de map
« Réponse #6 le: 02 Mars 2009, 11:24:52 »
Mais comment ca marche en fait ?
On prend la position initiale d'un objet de la map, la nouvelle position de l'objet, et fait les calcul de difference et on place tout les autres objets a partir des coordonées  du premier ??

*Ca me fait penser a mes cours de math, translation, rotation et compagnie ... ::) ^^*

++
nikko
« Modifié: 02 Mars 2009, 11:27:26 par Nikko™ »

Hors ligne Syg

  • Expert programmeur C/C++/PAWN
  • *
  • The GTAOnline Jesus
  • Messages: 3908
    • Voir le profil
Re : Transposition de map
« Réponse #7 le: 02 Mars 2009, 16:25:05 »
C'est normal Nikko que ça te fasse penser à ton cours de math parce que c'est exactement ça, une translation.

Par exemple, j'ai une map de 3 objets que je veux déplacer de 20 m vers le nord et l'élever de 5 m (les valeurs sont bidons, c'est juste pour expliquer).
Map initiale :
Createobject (ID1, 10, 20, 30, ..);
CreateObject (ID2, 100, 200, 300, ..);
CreateObject (ID3, 150, 250, 350, ..);

Map avec translation de 20 m vers le nord et 5 m vers le haut:
new dX=0, dY=-20, dZ=5;
Createobject (ID1, 10+dX, 20+dY, 30+dZ, ..);
CreateObject (ID2, 100+dX, 200+dY, 300+dZ, ..);
CreateObject (ID3, 150+dX, 250+dY, 350+dZ, ..);

Les objets resteront aux mêmes distances les uns par rapport aux autres.
Et en faisant comme ça, si je veux ne l'élever que de 4 m, je ne change que la valeur de dZ (dZ = 4).

++
Syg
Courtesy of GtaManiac

Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Transposition de map
« Réponse #8 le: 02 Mars 2009, 17:13:26 »
Et est ce que c'est possible de faire ca mais sans écrire ...+24 a chaque objet ? De faire un tableau (je croi) et de faire repetter sur tout les objets ?

++
nikko

EDIT: dans la fonction de Sim, ou on met le "facteur" de deplacement ?

MoveMap(mapname[], Float:X, Float:Y, Float:Z)
{
if(!fexist(mapname))
{
    return -1;
}
new File: f, File:output, tmp[128];
f = fopen(mapname, io_read);
if(!f)
{
    return -2;
}
format(tmp, sizeof(tmp), "%s.moved",mapname);
output = fopen(tmp,io_write);
if(!output)
{
    fclose(f);
    return -3;
}
new idx, Float:ox, Float:oy, Float:oz, model,Float:rx, Float:ry, Float:rz;
while(fread(f, tmp))
{
idx = strfind(tmp,"(", true);
model = strval(strtok(tmp, idx, ','));
ox = floatstr(strtok(tmp, idx, ','));
oy = floatstr(strtok(tmp, idx, ','));
oz = floatstr(strtok(tmp, idx, ','));
rx = floatstr(strtok(tmp, idx, ','));
ry = floatstr(strtok(tmp, idx, ','));
rz = floatstr(strtok(tmp, idx, ','));
ox += X;
oy += Y;
oz += Z;
format(tmp, sizeof(tmp),"CreateObject(%d, %f, %f, %f, %f, %f, %f);\r\n",model,ox,oy,oz,rx,ry,rz);
fwrite(output,tmp);
}
fclose(output);
fclose(f);
return 1;
}
« Modifié: 02 Mars 2009, 17:16:05 par Nikko™ »

Hors ligne S!m

  • *
  • Messages: 2341
    • Voir le profil
Re : Transposition de map
« Réponse #9 le: 03 Mars 2009, 00:38:08 »
Salut,

les paramètres de la fonction sont les décalage, cette fonction n'est faite que pour être utiliser UNE SEULE FOIS,

UTILISATION:

vous avez un fichier "stunt.map" dans vos scriptfile contenant vos objets en CreateObject(.....);

vous ajoutez cette fonciton à votre gm  :

MoveMap("stunt.map", DÉCALAGE EN X, DÉCALAGE EN Y, DÉCALAGE EN Z);
vous retournez dans votre dossier scriptfiles et trouvez un fichier "stunt.map.moved", il contient les données désirées.
Il ne vous reste qu'a ouvrir le fichier à l'aide d'un éditeur de texte et de coller les données à l'endroit voulu

++Sim++





Hors ligne Nikko™

  • *
  • Mafioso
  • Messages: 2393
    • Voir le profil
Re : Transposition de map
« Réponse #10 le: 03 Mars 2009, 09:58:19 »
Ok merci je testerai dans la journé, je vous dirai ;)

++
nikko