GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: mjlayak le 26 Octobre 2010, 18:03:17
-
J'aimerais bien faire un /dire qui parle dans un rayon de 10-20 mettre j'ai deja quelque idée mais elle ne sont vraiment pas complete
Si quelqu'un pourait me donné le script Ou m'aider a le réalisé ce sera tres gentils de sa part .
Je le remerci d'avance pour l'aide .
-
Prend le LARPTraduitFR (post par scott1) , et regarde le OnPlayerText() et la fonction ProxDetector ;)
-
Ok car je m'etais aidé de Miami Rp et d'autre mais le script etant trop compliqué je m'etais embrouillé . Je regarde sa dessuite .
-
Crée la tienne avec isplayerisinrangeofpoint
-
Oui scott1 à raison.
Il vaut mieux créé ta fonction similaire au proxdector, mais avec isplayerinrangeofpoint car tu n'utilise pas getplayerpos avec des variables etc.. ce qui te permet d'optimiser un peu tes calculs.
A+,
Sam. :cheers
-
Ok donc il faut faire un truc comme sa :
Si on est dans IsPlayerInRangeOfPoint on entend et si on est pas dedant on entend pas , mais comment le "Faire tenir" au joueurs pour que sa soit dans un perrimetre qui bouge quand le joueurs bouge ?
-
Ben tu prend la position du joueur et tu affiche le message au joueur qui sont à x unités autour de lui.
-
Je les fais mes In Game cela ne donne rien voici le code
if(strcmp(cmdtext, "/dire", true) == 0)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
if(IsPlayerInRangeOfPoint(playerid,20,x,y,z))
{
format(string, sizeof(string), "Etrangé crie: %s!!");
}
}
-
Alors déjà si tu fais ça tu va venir comparer la position du joueur à lui même il faut que tu prend la position du joueur '' playerid '' et que tu compare avec les autres joueur donc il faut que tu créé une boucle.
if(strcmp(cmdtext, "/dire", true) == 0)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInRangeOfPoint(i,20.0,x,y,z))// on compare la position de '' i '' à playerid
{
format(string, sizeof(string), "Etrangé crie: %s!!");
}
}
return 1;
}
Il reste deux petites erreurs, au format > Par quoi va être remplacer le %s ?
puis Comment va tu envoyer le message et à qui ?
;)
Ces questions vont t'aider à trouver :)
Sam. :cheers
-
slt
Euh elle est juste formater ^^ maintenant faut la dire au joueur donc :
if(strcmp(cmdtext, "/dire", true) == 0)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInRangeOfPoint(i,20.0,x,y,z))// on compare la position de '' i '' à playerid
{
format(string, sizeof(string), "Etrangé crie: %s!!");
SendClientMessage(i,TACOULEUR, string);
}
}
return 1;
}
-
salut , quand je le test IG , il y a rien sauriez vous d'ou sa viens ?
Ps : J'ai remplacé Tacouleur par COLOR_BLUE pour l'info
-
Vous n'avez pas repérer l'erreur que cibler cette question :
Par quoi va être remplacer le %s ?
C'est l'histoire dans paramètres qui n'étais pas entre sa virgule et sa parenthèse ;)
-
Je suis désolé mais j'ai vraiment pas compris cette notions je script depuis 4 jours sur un projet Dm/Mirp j'ai aquis bon nombres de base mais celle si je ne la comprends pas .
_________________________________________________________________________________ ________________________________________
if(strcmp(cmdtext, "/dire", true) == 0)
{
new name[MAX_PLAYER_NAME], string[44];
GetPlayerName(playerid, name, sizeof(name));
new result[64];
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
for(new i=0; i<MAX_PLAYERS; i++)
{
if(IsPlayerInRangeOfPoint(i,20.0,x,y,z))// on compare la position de '' i '' à playerid
{
format(string, sizeof(string), "%s crie : %s ",name,result);
SendClientMessage(i,COLOR_BLUE, string);
}
}
return 1;
J'ai tentais ceci mais sa ne marche pas encore . Et aussi comment faire pour que quand on tape la commande on voit le nom de la personne ?
-
La ton résult ne vaut rien ^^
il faut donc chercher le texte après ta commande /dire car la le script comprend juste cette commande là ''/dire" et ne comprend pas "/dire [texte]"
-
Excusez moi mais je n'y arrives vraiment pas alors que je ne fais que persistais .
-
if( strcmp( "/dire", cmdtext, true, 5 ) == 0 )
{
if( strlen( cmdtext[6] ) == 0 )
{
SendClientMessage( playerid, 0xFF0000FF, "/dire [ texte ]" );
return 1;
}
new nom[ MAX_PLAYER_NAME ] = "", str[ 128 ] = "";
GetPlayerName( playerid, nom, sizeof( nom ) );
format( str, 128, "%s dit %s", nom, cmdtext[ 6 ] );
new Float:Pos[ 3 ] = {0, 0, 0};
GetPlayerPos( playerid, Pos[0], Pos[1], Pos[2] );
for( int i = 0; i < MAX_PLAYERS; i++ )
{
if( IsPlayerConnected( i ) )
{
if( IsPlayerInRangeOfPoint( i, 20.0, Pos[0], Pos[1], Pos[2] ) )
{
SendClientMessage( i, 0xFFFFFFFF, str );
}
}
}
}
à tester
-
Je test ceci immediatement , et merci de votre aide .
_________________________________________________________________________________ _____________________________
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1105) : warning 219: local variable "nom" shadows a variable at a preceding level
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1109) : warning 213: tag mismatch
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1109) : warning 213: tag mismatch
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1109) : warning 213: tag mismatch
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1112) : error 017: undefined symbol "int"
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1112) : warning 215: expression has no effect
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1112) : error 001: expected token: ")", but found ";"
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1112) : error 036: empty statement
C:UsersflorianDesktopMes Documentssamp03bsvr_R2_win32gamemodesDM.pwn(1112) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
-
Tu n'a même pas pris la peine de corriger les erreurs -_-"
if( strcmp( "/dire", cmdtext, true, 5 ) == 0 )
{
if( strlen( cmdtext[6] ) == 0 )
{
SendClientMessage( playerid, 0xFF0000FF, "/dire [ texte ]" );
return 1;
}
new nom[ MAX_PLAYER_NAME ] = "", str[ 128 ] = "";
GetPlayerName( playerid, nom, sizeof( nom ) );
format( str, 128, "%s dit %s", nom, cmdtext[ 6 ] );
new Float:Pos[ 3 ] = {0.0, 0.0, 0.0};
GetPlayerPos( playerid, Pos[0], Pos[1], Pos[2] );
for( new i = 0; i < MAX_PLAYERS; i++ )
{
if( IsPlayerConnected( i ) )
{
if( IsPlayerInRangeOfPoint( i, 20.0, Pos[0], Pos[1], Pos[2] ) )
{
SendClientMessage( i, 0xFFFFFFFF, str );
}
}
}
}
Voila sans erreur
-
Merci beaucoup .
_________________________________________________________________________________ ______________________________________
Malheuresement quand je veux l'utilisé In Game toujours rien ne se passe . :(
-
Ça fait quoi ?
-
ça fonctionne parfaitement chez moi, il manque juste le return 1; qui fait en sorte que ça nous dit pas Unknown Command
-
mjlayak le return 1; tu dois le placer juste après l'avant dernière accolade, de la commande. Regarde sur d'autres commande tu verras.
-
Meme en metant le return 1; sa change rien .