GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: ShaDowxx™ le 24 Décembre 2010, 14:30:35
-
Bonjour, voilà, je m'explique : en se moment, je fais des DM mais il n'y a pas moyen de trouver un code qui permet de choisir une un spawn au choix dans mon tableau :
<?php
//====================Les DM====================================================
new Float:dm1[5][5] = {
{-1288.3530,2516.2642,87.1486},
{-1308.3904,2514.4939,87.0790},
{-1329.6014,2525.6045,87.1134},
{-1316.7584,2541.0601,87.7422},
{-1305.2456,2546.1252,90.3281},
Jusque là, il y a déjà une première erreur :
<?php
C:\Users\Julien\Downloads\Serveur RC6\gamemodes\SF-LVTDM.pwn(73) : error 001: expected token: ";", but found "-identifier-"
//Voici mon code à la ligne 73 :
main()
{
print("\n----------------------------------");
print(" ******************** ");
print(" ******************** ");
print("----------------------------------\n");
}
#endif
Et moi dans cette histoire je veut savoir comment je peut faire mon propre DM sur mon GameMode et si possible savoir choisir les spawns disponible sur mon tableau.
-
new Float:dm1[5][3] = {
{-1288.3530,2516.2642,87.1486},
{-1308.3904,2514.4939,87.0790},
{-1329.6014,2525.6045,87.1134},
{-1316.7584,2541.0601,87.7422},
{-1305.2456,2546.1252,90.3281}
};
-
Merci du code mais je veut savoir comment tu as trouvé le : [3]
-
ben pour une position tu doit avoir X Y Z donc 3 et tu as 5 position donc [5][3] mais ton erreure etait surtout ton tableau qui etait pas fermer
-
D'accord.
Mais tu connait la commande pour mettre en relation deux commandes : celle pour rentré : (/dm1) et celle pour sortir (/dmq) ?
-
rien de complexe ce genre de commande
-
J'ai pas d'idée c'est pour renvoyer le joueur qui va quitté le dm a son spawn
-
utilise PlayerSpawn(playerid); un truc du genre
-
Donc Dizzy t'a raison ?
Et je met le même code pour les deux commandes ?
-
Merci Dizzy ^^
Non juste pour le /dmquit
-
D'accord c'est logique ^^
Sinon /dmq sera configurer pour tout les dm ?
-
J'ai pas tout compris
-
Le système est de tourner (mettre) une valeur qui sera vrai si le joueur est dans un deathmatch et faux s'il n'est pas dans un deathmatch.
Ensuite, selon cette valeur, tu pourra activé ou non ta commande pour quitter un deathmatch.
-
Ou là, je me suis perdu ... Bref en gros moi je veut du simple car vous m'embrouiller.
en gros :
if (strcmp("/dm1", cmdtext, true) == 0)
{
GivePlayerWeapon(playerid,26,5000);
ResetPlayerWeapons(playerid);
//La ici, il me faut le code pour mettre en relation le tableau
return 1;
}
if (strcmp("/dmq", cmdtext, true) == 0)
{
SpawnPlayer(playerid);
ResetPlayerWeapons(playerid);
return 1;
}
Comme ça non ?
-
new IsInDM[MAX_PLAYERS] = 0;
if(strcmp("/dm1", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 1)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous êtes déjà dans un DM. Veuillez utiliser la commande /dmq pour quitter le DM !");
return 1;
}
IsInDM[playerid] = 0;
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 26, 5000);
return 1;
}
if(strcmp("/dmq", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous n'êtes pas dans un DM !");
return 1;
}
IsInDM[playerid] = 1;
ResetPlayerWeapons(playerid);
SpawnPlayer(playerid);
return 1;
}
Je pense que ceci sera mieux.
Je voudrais également te parler de ta logique, regarde ta commande /dm1, ne trouve-tu pas qu'il y a un problème ?
Tu donne une arme puis tu lui enlève toutes ses armes, comment vas-t-il jouer ?
-
Oui mais je l'ai corriger sur mon DM :lmfao
Double post
Pardon pour le double-post.
Le code marche que quand on fais > /kill pour /dmq. Moi je veut que sa marche directement. Pouvez-vous me dire comment je peut le corriger
-
Mon code est juste, cela doit venir de toi.
-
Non s'est toi Xartrick, je fais le code mais sa marche pas, /dmq ne fonctionne pas :
if(strcmp("/dm1", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 1)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous êtes déjà dans un DM !");
return 1;
}
IsInDM[playerid] = 0;
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 26, 5000);
return 1;
}
if(strcmp("/dmq", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 0)
{
SendClientMessage(playerid, 0xFFFFFF, "Vous n'êtes pas dans un DM !");
return 1;
}
IsInDM[playerid] = 1;
ResetPlayerWeapons(playerid);
SpawnPlayer(playerid);
Pour l'image :
J'ai bien spawné dans mon dm, mais pour le quitter il n'y a pas moyen de faire /dmq. Sa justifie que je ne suis pas dans un DM
((Sinon comment on fait pour re-name un joueur dans un DM ?))
-
je pense que l'erreure qu'il a faite est pour que tu comprenne le code regarde bien
if(strcmp("/dm1", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 1)//Si le joueur est dans le DM il ne peu pas retaper la commande
{
SendClientMessage(playerid, 0xFFFFFF, "Vous êtes déjà dans un DM !");
return 1;
}
IsInDM[playerid] = 0;//ici est la faute volontaire car elle doit etre a 1 est non a 0
ResetPlayerWeapons(playerid);
GivePlayerWeapon(playerid, 26, 5000);
return 1;
}
if(strcmp("/dmq", cmdtext, true) == 0)
{
if(IsInDM[playerid] == 0)//si le joueur n'est pas dans un DM donc la on peu voir que l'erreure volontaire etait faites pour que tu comprenne
{
SendClientMessage(playerid, 0xFFFFFF, "Vous n'êtes pas dans un DM !");
return 1;
}
IsInDM[playerid] = 1;//la seconde erreure elle doit etre passer a 0 est non a 1
ResetPlayerWeapons(playerid);
SpawnPlayer(playerid);
-
Je comprends un peu mieux le bug du 0 et 1 qui causé tout ça.
Sinon
Comment on fait pour changer de pseudo à un joueur qui rejoint un DM
-
une petit recherche s'impose ;)
-
*Julien part a la recherche du code*
-
Les pièges viennent des indicateurs ;).
Voici ce que cela te donnera quand tu auras trouvé les deux pièges.
PS: J'ai ajouté des messages d'informations mais c'est le même code !
-
Salut Julien :)
Je l'ai fait.
#include <a_samp>
#include <float>
new Float:Dm1[5][3] = { // TAbleau
{-1288.3530,2516.2642,87.1486},
{-1308.3904,2514.4939,87.0790},
{-1329.6014,2525.6045,87.1134},
{-1316.7584,2541.0601,87.7422},
{-1305.2456,2546.1252,90.3281}
};
new DM[MAX_PLAYERS]; // on défini
new PlayerName[MAX_PLAYER_NAME];
#define COLOR_GREEN 0x33AA33AA
#define COLOR_RED 0xAA3333AA
public OnPlayerConnect(playerid)
{
DM[playerid] = 0;
return 1;
}
public OnPlayerSpawn(playerid)
{
if (DM[playerid] == 1) // si le joueur est au dm1 on le met à la pos
{
new rand = random(sizeof(Dm1));
SetPlayerPos(playerid, Dm1[rand][0], Dm1[rand][1], Dm1[rand][2]); // ton tableau
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/dm1", cmdtext, true, 10) == 0)
{
if( DM[playerid] == 1)
{
SendClientMessage(playerid, COLOR_RED, "Vous êtes déjà en DM1 ! ");
return 1;
}
if (DM[playerid] == 0)
{
new rand = random(sizeof(Dm1));
DM[playerid] = 1; // on le met dans le dm1
SetPlayerPos(playerid, Dm1[rand][0], Dm1[rand][1], Dm1[rand][2]); // ton tableau
new nom[128];
new msg[128];
GetPlayerName(playerid, nom, sizeof(nom));
format(nom, sizeof(nom), "%s a rejoint le DM 1 (/dm1)", nom, playerid);
SendClientMessageToAll(COLOR_GREEN, nom);
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(msg, sizeof(msg), "[DM1]%s", PlayerName);
SetPlayerName(playerid, msg);
return 1;
}
return 1;
}
if (strcmp("/dmq", cmdtext, true, 10) == 0)
{
if (DM[playerid] == 0)
{
SendClientMessage(playerid, COLOR_RED, "Vous pouvez utiliser cette commande que en DM !");
return 1;
}
if (DM[playerid] == 1)
{
new nom[128];
DM[playerid] = 0; // on le met dans le jeu normal
SpawnPlayer(playerid); // on le fait respawn
SetPlayerName(playerid, PlayerName);
GetPlayerName(playerid, nom, sizeof(nom));
format(nom, sizeof(nom),"%s n'est plus en DM", nom, playerid);
SendClientMessageToAll(COLOR_GREEN, nom);
return 1;
}
return 1;
}
return 0;
}
A+
Karting06
PS: Si c'est trop long, veuillez me le dire :)
-
Euh ... Je veut juste le code pour changer de pseudo :)
-
Là, tu abuse, il t'a donné le code, tu as juste as extraire les lignes que tu recherche.
Sinon, à propos de ce code, n'oublie pas de vérifier si un petit malin vient avec le pseudo [DM1]Xartrick, cela t'évitera bien des soucis ;).
-
Mais j'ai un bug.
Quand y a deux joueurs en DM1 et le premier fait /dmq il prend le nom karting06 et moi quand je fais /dmq ça change plus. Quelqu'un peut m'aider?
-
Ajoute une entré playerid dans ton tableau PlayerName pour pouvoir stocker les pseudos de chaque joueur et non le pseudo d'un seul joueur.
-
Voilà, je me suis perdu.
-
montre nous comment tu t'y es pris
-
Juste un petit indice, si tu as besoin d'aide, nous sommes là.
new PlayerName[playerid][MAX_PLAYER_NAME];
-
Je m'y suis très mal pris :
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(52) : error 017: undefined symbol "playerid"
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(553) : error 048: array dimensions do not match
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(553) : warning 224: indeterminate array size in "sizeof" expression (symbol "")
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(572) : error 048: array dimensions do not match
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(774) : warning 203: symbol is never used: "IsInDM"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
3 Errors.
-
Je comprends pas ?!
il faut pas mettre [MAX_PLAYERS] au lieu de [playerid][MAX_PLAYER_NAME]
-
Moi aussi :S, je vais essayé sans
Sa marche très bien ! j'ai juste cette erreur mais elle n'est pas trop grave :D
Kdo je vous la donne
C:\Users\Julien\Downloads\serveur RC7\gamemodes\SF-LVTDM.pwn(774) : warning 203: symbol is never used: "IsInDM"
:lmfao
-
Tu te base sur quoi maintenant pour savoir si un joueur est dans un deathmatch ?
-
ça : new DM[MAX_PLAYERS];
-
Ca marche toujours pas le changement du nom :(
Quand tu es à deux ça bug :(
-
regarder sur mon fs de DM ^^
-
Le problème de DM est réglé. Merci de votre aide !