GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ptijean le 24 Avril 2010, 16:46:50
-
Bonjour,
Voilà j'ai suivie cette commande qui vient de wiki sa-mp pour baisser une barrière, qu'elle rentre dans le sol, j'ai pris mes coordonnées, de mon objet en position normal et l'autre en position dans le sol, mais le problème quand je fait la commande, sa me le déplace a l'horizontal et il ne s'arrete jamais d'avancé...
Comment je pourrait faire svp ?
Voici mon code:
obj = CreateObject(994, 627.846924, -589.675110, 15.655596, 0.0000, 0.0000, 270.0000);
if(strcmp(cmdtext, "/moveobject", true) == 0)
{
new string[50];
new movetime = MoveObject(obj, 627.846924, 589.675110, 14.455614, 2.00);
format(string, sizeof(string), "Object will finish moving in %d milliseconds", movetime);
SendClientMessage(playerid, 0xFF000000, string);
return 0;
}
Voilà merci d'avance pour votre aide
-
La réponse à tout des probleme (http://www.gtaonline.fr/forums/index.php?action=search;advanced)
-
Merci pour ton lien mais j'ai bien chercher, je fait que sa, et je n'ai pas vue une personne avoir le même problème, donc je me suis dit que j'allais postez...
-
Il faut faire un timer ;)
-
Merci pour l'information c'est sympa :d
j'ai essayez de faire ce que tu ma dit mais j'ai 2 problèmes:
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(318) : error 017: undefined symbol "cmd"
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(322) : error 017: undefined symbol "MoveStreamObject"
Voici mes lignes de codes:
if(strcmp(cmd, "/op", true) == 0)
{
if(IsPlayerConnected(playerid))
{
MoveStreamObject(obj, 627.846924, 589.675110, 14.455614, 2.0); // Donc le X Y Z, tu remplace par les coordonés de ta grille OUVERTE ! Puis le V par la vitesse d'ouverture
SetTimer("grille", 12000, 0); // Donc ici le timer va appeler le public grille dans 12 secondes, une fois que tu a exécuter la commande
}
return 1;
}
return 1;
}
public grille() // grâce au timer et quand ta fonction va etre appeler, donc ce public, il va bouger l'objet porteyak et tu peut mettre tous tes objets à bouger dedans, il va bouger que le nom de l'objet avec lequel tu as défini juste avant, et il ne va pas tout ouvrir tes grilles.
{
MoveObject(obj, 627.846924, 589.675110, 15.655596, 2.0); // Pareil que sur le dessus :) biensur ici en position fermer
return 1;
J'ai mis également sa en haut:
forward grille(playerid);
new obj;
Je ne comprend donc pas, si quelqu'un veut bien m'aidez...
Merci bien
-
Il faut mettre un Timer qui permettra à la grille de ce fermer automatiquement ou alors tu met deux commandes..une pour ouvrir et une pour fermer ;)
Voici un exemple :
#include <a_samp>
#define FILTERSCRIPT
forward ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5);
forward PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
forward Urban(); // Voici le forward du Timer
new Grille; // Le new de la grille
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print("-Grille By Paradize");
print("--------------------------------------\n");
// Grilles
Grille = CreateObject(ID Objet, X, Y, Z, 0, 0, 0); // Grille
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new sendername[MAX_PLAYER_NAME];
new string[256];
if (strcmp(cmdtext, "/op", true)==0)
{
MoveObject(Grille, X, Y, Z, 3.5); // Coordonnées de la grille quand elle est ouverte
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "* %s prend sa télécommande et ouvre la grille..", sendername);
ProxDetector(30.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
SendClientMessage(playerid, COLOR_WHITE,"Fermeture dans 7 secondes"); // On avertie que la porte va ce fermer dans 7 secondes..
SetTimer("Timer", 7000, 0); //On active le Le Timer
return 1;
}
public Timer() // On retrouve le Timer
{
MoveObject (Grille,X, Y, Z, 2.5); // Coordonnées de la grille quand elle est fermé
return 1;
}
Dans cette exemple, la grille va ce fermer automatiquement :lmfao
A toi de l'adapter..
-
Sa j'ai compris maintenant mais quand je compile j'ai 2 petites erreur :s
-
Donne moi les lignes des erreurs
-
Citation
:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(318) : error 017: undefined symbol "cmd"
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(322) : error 017: undefined symbol "MoveStreamObject"
Voici mes lignes de codes:
Code:
if(strcmp(cmd, "/op", true) == 0)
{
if(IsPlayerConnected(playerid))
{
MoveStreamObject(obj, 627.846924, 589.675110, 14.455614, 2.0); // Donc le X Y Z, tu remplace par les coordonés de ta grille OUVERTE ! Puis le V par la vitesse d'ouverture
SetTimer("grille", 12000, 0); // Donc ici le timer va appeler le public grille dans 12 secondes, une fois que tu a exécuter la commande
}
return 1;
}
return 1;
}
public grille() // grâce au timer et quand ta fonction va etre appeler, donc ce public, il va bouger l'objet porteyak et tu peut mettre tous tes objets à bouger dedans, il va bouger que le nom de l'objet avec lequel tu as défini juste avant, et il ne va pas tout ouvrir tes grilles.
{
MoveObject(obj, 627.846924, 589.675110, 15.655596, 2.0); // Pareil que sur le dessus :) biensur ici en position fermer
return 1;
J'ai mis également sa en haut:
Code:
forward grille(playerid);
new obj;
-
Remplace " MoveStreamObject " par " MoveObject "
Remplace çà :
if(strcmp(cmd, "/op", true) == 0)
Par çà :
if (strcmp(cmdtext, "/op", true)==0)
Redis moi
-
merci je n'ai plus d'erreur dans le script, en revanche sa m'ouvre la porte dans le jeu mais pas dans le bon sens et elle ne s'arrete pas, elle avance à l'infini...
mes coordonnées sont pourtant bonne, je comprend pas :s
-
Met ton code en entier sur PastBin et je regarderais
-
Voilà http://pastebin.com/yXRQ8GY5
-
MoveObject(obj, 627.846924, 589.675110, 15.655596, 2.0); // Pareil que sur le dessus :) biensur ici en position fermer
-589.675110
-
sayer problème résolue,merci beaucoup
maintenant comment sa ce passe pour que une seule faction puisse l'ouvrir et pas tout le monde svp ?
encore merci pour votre aide
-
Si tu utilise GF ou LARP
if(PlayerInfo[playerid][pLeader] == 1 || PlayerInfo[playerid][pMember] == 1)
{
a inséré dans ta commande
-
une dernière petite question, je peut faire la commande n'importe ou sur la map sa fonctionne, comment je peut faire pour que l'on soit dans un certain périmètre de la barrière pour que sa marche ?
Encore merci pour votre aide :)
-
if(strcmp(cmdtext, "/moveobject", true) == 0)
{
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1) // Pour les factions, 1 = police dans LARP/GFRP
{
if(PlayerToPoint(playerid, 100, x,y,z) // 100 = Nombre au mètre² (périmètre) x,y,z à remplacer par tes coordonés.
{
new string[50];
new movetime = MoveObject(obj, 627.846924, 589.675110, 14.455614, 2.00);
format(string, sizeof(string), "Object will finish moving in %d milliseconds", movetime);
SendClientMessage(playerid, 0xFF000000, string);
return 1;
}
else // Si il 'nest pas dans le périmètre
{
SendClientMessage(playerid, 0xFF000000,"Vous n'êtes pas dans le périmètre de la grille ! ");
}
}
else // Si il n'est pas dans la faction 1
{
SendClientMessage(playerid, 0xFF000000,"Vous ne faite pas partit dans la faction 1 ! ");
}
return 1;
}
Je l'ai fait sur le fofo à la va vite, possibilité de soucis ^^
-
oulaaa j'ai pas trop compris ton code la ^^
voici le mien pourrait tu me montrer comment faire stp ?
if (strcmp(cmdtext, "/op1", true)==0)
{
if(IsPlayerConnected(playerid))
{
MoveObject(obj1, 627.580078, -589.833801, 10.671726, 1.5); // Donc le X Y Z, tu remplace par les coordonés de ta grille OUVERTE ! Puis le V par la vitesse d'ouverture
SetTimer("grille1", 2800, 0); // Donc ici le timer va appeler le public grille dans 12 secondes, une fois que tu a exécuter la commande
}
return 1;
-
if (strcmp(cmdtext, "/op1", true)==0)
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1) // Ici, tu as les conditions pour les faction
{
if(PlayerToPoint(playerid, 100, 627.580078, -589.833801, 10.671726) // Le 100 veux dire qu'on peux faire la commande dans un rayonement de 100 mètre
{
MoveObject(obj1, 627.580078, -589.833801, 10.671726, 1.5); // Donc le X Y Z, tu remplace par les coordonés de ta grille OUVERTE !
SetTimer("grille1", 2800, 0); // Donc ici le timer va appeler le public grille dans 12 secondes, une fois que tu a exécuter la commande
}
else // Else = Si. Ce else = si il n'est pas dans le rayonnement de 100 mètre
{
Sendclient(blablabla) // Fait le toi le text. C'est ce qui est mis au joueur si il n'est pas dans les 100 mètre de la grille
return 1; // evite la répétition du msg
}
}
else // Si le mec n'est pas dans la faction ID 1
{
Sendclient(blablabla) // Le texte du joueur qui tape la cmd et qui n'est pas dans la faction
return 1; // evite la répétition du msg
}
}
return 1;
}
Voilà, après faut aussi si tu veux mettre le else du IsPlayerConnected
-
voilà les erreurs que cela me met:
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(341) : error 028: invalid subscript (not an array or too many subscripts): "PlayerInfo"
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(341) : warning 215: expression has no effect
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(341) : error 001: expected token: ";", but found "]"
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(341) : error 029: invalid expression, assumed zero
C:\Program Files (x86)\Rockstar Games\GTA San Andreas\Rp World\gamemodes\Rpworld.pwn(341) : fatal error 107: too many error messages on one line
-
1) As-tu un GM de nase LARP/GF ?
2) Les sendclient(blabla) ta bien modifier par: SendClientMessage(playerid, couleur, text) ?
3) Ta mis le else que j'ai pas mis pour le IsPlayerConnected?
4) Quel est la ligne 341 ?
EDIT: à la ligne if(PlayerToPoint(playerid, 100, 627.580078, -589.833801, 10.671726) rajoute une " ) " pour donner: (je l'avais oublier )
if(PlayerToPoint(playerid, 100, 627.580078, -589.833801, 10.671726))
-
non je créer entièrement le gm
j'ai bien ce que tu ma dit sauf le else, je vois pas ou le mettre
voici la ligne qui apparement poserait problème: if(PlayerInfo[playerid][pMember] == 1 || PlayerInfo[playerid][pLeader] == 1) // Ici, tu as les conditions pour les faction
je précise aussi que les factions ne sont pas encore créer, cela peut posez problème ?
-
Ton GM utilise quel fonction pour les factions ? (pFaction, pMember, pTeam? Autre ? Quoi?) Si tu sais ce que c'est (logiquement oui vue que c'est ton gm crée à zéro.. [J'y croix pas vraiment]) tu modifi pMember et pLeader par
if(PlayerInfo[playerid][pMACHINCHOSE] = ID DE LA FACTION) et normalement ca marchera..
EDIT: Si les factions sont pas crée, c'est pas grave, tant que ta le 'pTrucbidule' des factions.. Sinon oui c'est à cause de cela
-
Merci pour votre aide:d
Problème résolue
-
Sufit de mettre un Défine pour marqué que seul la faction ID** peux le faire, prend exemple sur un /equiper ( que LSPD Peux faire cette CMD ) bonne chance