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

Titre: Aide avec un /dire
Posté 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 .
Titre: Re : Aide avec un /dire
Posté par: Myk3L le 26 Octobre 2010, 18:06:41
Prend le LARPTraduitFR (post par scott1) , et regarde le OnPlayerText() et la fonction ProxDetector ;)
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 26 Octobre 2010, 18:08:16
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 .
Titre: Re : Aide avec un /dire
Posté par: scott1 le 26 Octobre 2010, 18:11:47
Crée la tienne avec isplayerisinrangeofpoint
Titre: Re : Aide avec un /dire
Posté par: chneuls le 26 Octobre 2010, 19:17:01
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
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 26 Octobre 2010, 20:28:16
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 ?
Titre: Re : Aide avec un /dire
Posté par: chneuls le 26 Octobre 2010, 20:52:10
Ben tu prend la position du joueur et tu affiche le message au joueur qui sont à x unités autour de lui.
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 26 Octobre 2010, 21:07:54
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!!");
}
   }
Titre: Re : Aide avec un /dire
Posté par: chneuls le 26 Octobre 2010, 21:36:18
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
Titre: Re : Aide avec un /dire
Posté par: Brian Turner le 26 Octobre 2010, 21:54:29
slt
Euh elle est juste formater ^^ maintenant faut la dire au joueur donc :
Code: (pawn) [Sélectionner]
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;
}
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 26 Octobre 2010, 22:02:47
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
Titre: Re : Aide avec un /dire
Posté par: chneubeul le 27 Octobre 2010, 00:10:05
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 ;)
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 27 Octobre 2010, 11:52:07
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 ?
Titre: Re : Aide avec un /dire
Posté par: chneubeul le 27 Octobre 2010, 15:12:15
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]"

Titre: Re : Aide avec un /dire
Posté par: mjlayak le 27 Octobre 2010, 15:58:44
Excusez moi mais je n'y arrives vraiment pas alors que je ne fais que persistais .
Titre: Re : Aide avec un /dire
Posté par: Ssk le 27 Octobre 2010, 16:16:46

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
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 27 Octobre 2010, 16:25:55
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.

Titre: Re : Aide avec un /dire
Posté par: Ssk le 27 Octobre 2010, 16:50:02
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
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 27 Octobre 2010, 16:51:46
Merci beaucoup .

_________________________________________________________________________________ ______________________________________

Malheuresement quand je veux l'utilisé In Game toujours rien ne se passe . :(
Titre: Re : Aide avec un /dire
Posté par: chneubeul le 27 Octobre 2010, 17:02:32
Ça fait quoi ?
Titre: Re : Aide avec un /dire
Posté par: Ssk le 27 Octobre 2010, 17:04:23
ça fonctionne parfaitement chez moi, il manque juste le return 1; qui fait en sorte que ça nous dit pas Unknown Command
Titre: Re : Aide avec un /dire
Posté par: chneubeul le 27 Octobre 2010, 17:17:47
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.
Titre: Re : Aide avec un /dire
Posté par: mjlayak le 27 Octobre 2010, 17:30:07
Meme en metant le return 1; sa change rien .