GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: [StAfF]MaN le 18 Avril 2008, 21:38:51
-
Bonjour ^^ est ce que vous pouvez m'aider pour un petit prob avec deux checkpoints qui doivent téléporter :
J'ai fait un zone Dm, mais dans cette zone il y a une porte qui me gène, (dans le caligulas pour aller au coffre près des bureaux) avec la possibilité de passer de l'autre coté puisque dans une mission on le fait ;)
Alors j'ai mis un checkpoint d'un coté de la porte qui me TP de l'autre coté, et de l'autre coté j'ai fait un autre checkpoint, pour me TP de l'autre coté, le prob, c'est que quand je prend le 1er checkpoint, j'arrive bien de l'autre coté, mais le deuxième checkpoint me TP au même endroit que le 1er, de plus, quand un player se déco du dm, les checkpoints disparaissent tous les deux....
Voici mon code :
//en haut du script
new check;
new check2;
//dans OnPlayerSpawn
script....
else if(DM[playerid] == 9)
{
SetPlayerInterior(playerid,1);
new rand = random(sizeof(Dm9));
SetPlayerPos(playerid, Dm9[rand][0], Dm9[rand][1], Dm9[rand][2]);// place le joueur
GivePlayerWeapon(playerid, 29, 9999);
GivePlayerWeapon(playerid, 34, 9999);
SetPlayerArmour(playerid, 100);
check = SetPlayerCheckpoint(playerid, 2167.0818,1618.6169,999.9771, 2);
}
script.....
//dans OnPlayerCommandText
script....
if(strcmp(cmdtext,"/DM9", true)==0){
new playerdm[MAX_PLAYER_NAME];
new PlayerConnecteddm[256];
DM[playerid] = 9;
DMArena[playerid] = 1;
GetPlayerName(playerid, playerdm, sizeof(playerdm));
format(PlayerConnecteddm, sizeof(PlayerConnecteddm), "Le player %s est entré dans la zone DM9, tapez /DM9 pour le rejoindre", playerdm);
SendClientMessageToAll(COLOR_YELLOW, PlayerConnecteddm);
GameTextForPlayer(playerid, "~r~DM du Caligulas~n~Faites vos equipes et combattez !!",9000,6);
SetPlayerInterior(playerid,1);
new rand = random(sizeof(Dm9));
SetPlayerPos(playerid, Dm9[rand][0], Dm9[rand][1], Dm9[rand][2]);// place le joueur
GivePlayerWeapon(playerid, 29, 9999);
GivePlayerWeapon(playerid, 34, 9999);
SetPlayerArmour(playerid, 100);
check = SetPlayerCheckpoint(playerid, 2167.0818,1618.6169,999.9771, 2);
}
if(strcmp(cmdtext,"/qDM9", true)==0){//si il tape la cmd /qDM3
if(DM[playerid]==0){/* Si aucun DM n'est activé pour le joueur */
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone DM, tu ne peut donc pas quitter de zone");
}else if(DM[playerid]==9){//si il est dans la zone 9
SendClientMessageToAll(COLOR_BLUE,"Un joueur a quitté la zone DM9");
SetPlayerInterior(playerid,0);
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DisablePlayerCheckpoint(check);
DisablePlayerCheckpoint(check2);
if(couleur[playerid]==1){
SetPlayerColor(playerid, DMrouge[playerid]);
SendClientMessage(playerid,COLOR_RED,"Tu viens de quitter une zone, tu était en Team Dm Rouge, tu est redevenu player normale, pour retourner dans une team, utilise les commandes /dmviolet ou /dmrouge.");
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DisablePlayerCheckpoint(check);
DisablePlayerCheckpoint(check2);
}
if(couleur[playerid]==2){
SetPlayerColor(playerid, DMviolet[playerid]);
SendClientMessage(playerid,COLOR_RED,"Tu viens de quitter une zone, tu était en Team Dm Violet, tu est redevenu player normale, pour retourner dans une team, utilise les commandes /dmviolet ou /dmrouge.");
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DisablePlayerCheckpoint(check);
DisablePlayerCheckpoint(check2);
}
if(couleur[playerid] == 0){
DM[playerid] = 0;
DMArena[playerid] = 0;
DisablePlayerCheckpoint(check);
DisablePlayerCheckpoint(check2);
}
new rand = random(sizeof(PlayerSpawns));
SetPlayerPos(playerid, PlayerSpawns[rand][0], PlayerSpawns[rand][1], PlayerSpawns[rand][2]);// place le joueur
}else if(DM[playerid]==1){//on le remplace par 1
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==2){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DMcar[playerid]==3){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}else if(DM[playerid]==4){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==5){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==6){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==7){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==8){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DMcar[playerid]==1){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}else if(DMcar2[playerid]==1){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}
}
script...
// dans OnPlayerEnterCheckpoint
script...
if(IsPlayerInCheckpoint(check)){
SetPlayerPos(playerid, 2174.0752,1618.7267,999.9766);
check2 = SetPlayerCheckpoint(playerid, 2171.0745,1618.7510,999.9766, 2);
return 1;
}
else if(IsPlayerInCheckpoint(check2)){
SetPlayerPos(playerid, 2163.6257,1618.6069,999.9724);
check = SetPlayerCheckpoint(playerid, 2167.0818,1618.6169,999.9771, 2);
}
return 1;
}
Voila.... Si vous pouviez m'éclairer ;) Merci d'avance :)
-
Deja tu pourrait utiliser ceci: DisableInteriorEnterExits(); dans gamemodeinit, se qui te desactivera les téléport du jeu solo. Ensuite réessaye peut-etre qu'il y'a un petit conflit entre tes checkpoint et le téléport. Si ca marche pas utilise un playertopoint je pense que c'est plus efficace que les checkpoints.
-
Oui mais ce que tu peu faire aussi pour eviter de te faire teleporter dans tout les sens, décale les checkpoint de 1m pour éviter de revenir ...
-
Salut ^^
pour le DisableInteriorEnterExits(); , je pense que c'est une mauvaise idée du fait que j'en est besoin ;) Mais pour le PlayerToPoint j'en avais jamais entendu parler xD
Sinon oui je pense que je vais faire en sorte de ne pas placer les checkpoint sur le même axe dessins :
TP du check2
check
_____________ (porte)
check2
Tp du check
Je pense que je vais faire comme ça :
Tp check2 check
_______________________ (porte)
check 2 tp check
Je vais voir si sa fonctionne
-
Je prendrait l'option 2 car si tu les met tous alignés bah a peine t'avance tu retourne de l'autre coté .... :bangin
-
Les checkpoints ne sont pas convainquant alors j'ai mes un PickUp (ID : 1314) pour me TP, le prob c'est qu'il ne me TP pas xD :
//en haut du script
new check;
new check2;
//dans OnPlayerSpawn
script....
else if(DM[playerid] == 9)
{
SetPlayerInterior(playerid,1);
new rand = random(sizeof(Dm9));
SetPlayerPos(playerid, Dm9[rand][0], Dm9[rand][1], Dm9[rand][2]);// place le joueur
GivePlayerWeapon(playerid, 29, 9999);
GivePlayerWeapon(playerid, 34, 9999);
SetPlayerArmour(playerid, 100);
check = CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
}
script.....
//dans OnPlayerCommandText
script....
if(strcmp(cmdtext,"/DM9", true)==0){
new playerdm[MAX_PLAYER_NAME];
new PlayerConnecteddm[256];
DM[playerid] = 9;
DMArena[playerid] = 1;
GetPlayerName(playerid, playerdm, sizeof(playerdm));
format(PlayerConnecteddm, sizeof(PlayerConnecteddm), "Le player %s est entré dans la zone DM9, tapez /DM9 pour le rejoindre", playerdm);
SendClientMessageToAll(COLOR_YELLOW, PlayerConnecteddm);
GameTextForPlayer(playerid, "~r~DM du Caligulas~n~Faites vos equipes et combattez !!",9000,6);
SetPlayerInterior(playerid,1);
new rand = random(sizeof(Dm9));
SetPlayerPos(playerid, Dm9[rand][0], Dm9[rand][1], Dm9[rand][2]);// place le joueur
GivePlayerWeapon(playerid, 29, 9999);
GivePlayerWeapon(playerid, 34, 9999);
SetPlayerArmour(playerid, 100);
check = CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
}
if(strcmp(cmdtext,"/qDM9", true)==0){//si il tape la cmd /qDM3
if(DM[playerid]==0){/* Si aucun DM n'est activé pour le joueur */
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone DM, tu ne peut donc pas quitter de zone");
}else if(DM[playerid]==9){//si il est dans la zone 9
SendClientMessageToAll(COLOR_BLUE,"Un joueur a quitté la zone DM9");
SetPlayerInterior(playerid,0);
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DestroyPickup(check);
DestroyPickup(check2);
if(couleur[playerid]==1){
SetPlayerColor(playerid, DMrouge[playerid]);
SendClientMessage(playerid,COLOR_RED,"Tu viens de quitter une zone, tu était en Team Dm Rouge, tu est redevenu player normale, pour retourner dans une team, utilise les commandes /dmviolet ou /dmrouge.");
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DestroyPickup(check);
DestroyPickup(check2);
}
if(couleur[playerid]==2){
SetPlayerColor(playerid, DMviolet[playerid]);
SendClientMessage(playerid,COLOR_RED,"Tu viens de quitter une zone, tu était en Team Dm Violet, tu est redevenu player normale, pour retourner dans une team, utilise les commandes /dmviolet ou /dmrouge.");
DM[playerid] = 0;
couleur[playerid] = 0;
DMArena[playerid] = 0;
DestroyPickup(check);
DestroyPickup(check2);
}
if(couleur[playerid] == 0){
DM[playerid] = 0;
DMArena[playerid] = 0;
DestroyPickup(check);
DestroyPickup(check2);
}
new rand = random(sizeof(PlayerSpawns));
SetPlayerPos(playerid, PlayerSpawns[rand][0], PlayerSpawns[rand][1], PlayerSpawns[rand][2]);// place le joueur
}else if(DM[playerid]==1){//on le remplace par 1
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==2){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DMcar[playerid]==3){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}else if(DM[playerid]==4){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==5){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==6){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==7){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DM[playerid]==8){
SendClientMessage(playerid,COLOR_RED,"Tu n'est pas en zone 9");
}else if(DMcar[playerid]==1){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}else if(DMcar2[playerid]==1){
SendClientMessage(playerid, COLOR_RED,"Tu n'es pas en zone 9");
}
}
script...
//dans OnPlayerPickUpPickup(playerid, pickupid){
if(pickupid == check){
if(check == 1){
SetPlayerPos(playerid, 2171.0181,1621.4159,999.9781);
check2 = CreatePickup(1314, 2, 2170.3132,1615.8646,999.9801);
check = 0;
check2 = 1;
return 1;
}
}
if(pickupid == check2){
if(check2 == 1){
SetPlayerPos(playerid, 2164.4460,1617.9716,999.9727);
check = CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
check = 0;
check2 = 1;
return 1;
}
}
return 1;
}
Voila.... xD
-
Désolé du double poste, mais Help please ^^
Je ne vois pas d'où ça peut venir.. Je pense que c'est dans OnPlayerPickUpPickup mais j'en sur pas sur... :s :wall
-
Je pense que tu a zappé de mettre dans ta commande qui emmene au DM: check = 1;. Mais ca serait mieu de faire :
new check[MAX_PLAYERS];
new check2[MAX_PLAYERS];
{
if(strcmp(cmdtext,"/DM9", true)==0)
{
new playerdm[MAX_PLAYER_NAME];
new PlayerConnecteddm[256];
DM[playerid] = 9;
DMArena[playerid] = 1;
GetPlayerName(playerid, playerdm, sizeof(playerdm));
format(PlayerConnecteddm, sizeof(PlayerConnecteddm), "Le player %s est entré dans la zone DM9, tapez /DM9 pour le rejoindre", playerdm);
SendClientMessageToAll(COLOR_YELLOW, PlayerConnecteddm);
GameTextForPlayer(playerid, "~r~DM du Caligulas~n~Faites vos equipes et combattez !!",9000,6);
SetPlayerInterior(playerid,1);
new rand = random(sizeof(Dm9));
SetPlayerPos(playerid, Dm9[rand][0], Dm9[rand][1], Dm9[rand][2]);// place le joueur
GivePlayerWeapon(playerid, 29, 9999);
GivePlayerWeapon(playerid, 34, 9999);
SetPlayerArmour(playerid, 100);
check = CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
check[playerid] = 1;
}
}
Je pense que ca devrait mieu marcher puisque pour ton pickuppickup t'a mis un if(check == 1) mais tu ne donne pas la valeur 1 quand il arrive dans la zone. Et avec le playerid ca ciblera uniquement la personne qui viendra dans le DM.
-
Merci lol Maintenant quand je rentre dans le pickup le deuxième s'active, mais aucun des deux ne téléporte... enfin le 1er du moin... (check)... Erf ça peut venir d'où ??
-
As-tu bien corrigé ceci:
if(check //// [playerid] == 1){
SetPlayerPos(playerid, 2171.0181,1621.4159,999.9781);
check2 = CreatePickup(1314, 2, 2170.3132,1615.8646,999.9801);
check /// [playerid] = 0;
check2 /// [playerid] = 1;
return 1;
}
if(pickupid == check2){
if(check2 ////[playerid] == 1){
SetPlayerPos(playerid, 2164.4460,1617.9716,999.9727);
check = CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
check ///[playerid] = 0;
check2 ///[playerid] = 1;
return 1;
}
Au pire remplace pickupid "check2" par "pick2" pour pas que le pickup se mette sur la meme variable que le reste. ( new pick; , new pick2;)
-
Mais pour le check[playerid] = 1;
et le check2[playerid] = 1;
Je met un
new check[MAX_PLAYERS];
et un new check2[MAX_PLAYERS];
??
Parce que j'avais déjà
new check;
et
new check2;
et du coup sa me faisais plein d'erreurs, du coup j'ai supprimé le "new check," et le "new check2" lol
-
Tu laisse les new check[MAX_PLAYERS] et les check/check2 = Createobject tu les change en pickup/pickup2 = Createobject en haut tu rajoute : new pickup; et new pickup2; tu enleve les new check; tu garde:
new check[MAX_PLAYERS]
new check2[MAX_PLAYERS]
new pickup;
new pickup2;
pickup = Createobject(machinbidule...);
pickup2 = Createobject(machinbidule...);
-
compilation Ok....
Téléportation OK....
code :
public OnPlayerPickUpPickup(playerid, pickupid){
if(pickupid == pickup){
if(check[playerid] == 1){
SetPlayerPos(playerid, 2171.0181,1621.4159,999.9781);
pickup2 = CreatePickup(1314, 2, 2170.3132,1615.8646,999.9801);
check[playerid] = 0;
check2[playerid] = 1;
return 1;
}
}
if(pickupid == pickup2){
if(check2[playerid] == 1){
SetPlayerPos(playerid, 2164.4460,1617.9716,999.9727);
pickup= CreatePickup(1314, 2, 2167.5403,1620.1072,999.9767);
check[playerid] = 1;
check2[playerid] = 0;
return 1;
}
}
return 1;
}
-
Nikel alors ^^
-
Oui nickel ^^ Et merci beaucoup Feldbrau ;)
a++