GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: doun le 20 Juin 2006, 14:17:55

Titre: Probleme: "OnPlayerCommandText"
Posté par: doun le 20 Juin 2006, 14:17:55
Salut j'ai un probleme avec la commande "OnPlayerCommandText"
Quand je met plusieur commande, une fois dans le jeu quand on tape nimporte quel commande c'est toujour la 1ère qui s'execute pourtant j'ai pris exemple sur le "landgrab" j'ai même vérifié sur des autre mod.
Qqn pourait me dire je il n'y a pas des propriété a definire ou si j'ai oublié quelque chose?

Mon code:
Citer
public OnPlayerCommandText(playerid, cmdtext[])
{
   new cmd[256];
      
   if(strcmp(cmd, "/healme", true) == 0) {
      SetPlayerHealth(playerid, 100);
        SendClientMessage(playerid, COLOR_BLUE, "Ta vie a été restoré");
      SendClientMessage(playerid, COLOR_LIGHTBLUE, "Your heal as been regenerated");
      return 1;
      }
   if(strcmp(cmd, "/test", true) == 0) {
      SendClientMessage(playerid, COLOR_GREEN, "test");
       return 1;
      }

 return 0;
}
Titre: Probleme: "OnPlayerCommandText"
Posté par: smallbug le 20 Juin 2006, 15:26:17
il manque pas un strtok ?
Titre: Probleme: "OnPlayerCommandText"
Posté par: doun le 20 Juin 2006, 16:27:17
Ba quand je met strtok jarrive pas a compiler il me dit error je croit que c parcequ'il faut que je le definit.
Titre: Probleme: "OnPlayerCommandText"
Posté par: Lalu le 20 Juin 2006, 16:34:02
Ajouter des commandes

En premier lieu, ajouter ce code dans le bas du script :

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index <length> ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}

Ensuite, en dessous de ce code, ajoutez (Les commandes de ce script sont des exemples, n'hésitez pas à les modifier à votre guise) :

public OnPlayerCommandText(playerid, cmdtext[])
{
    new cmd[256];
    new idx;

    cmd = strtok(cmdtext, idx);

    if(strcmp(cmd, "/aide", true) == 0) {
        SendClientMessage(playerid, COLOR_LIGHTBLUE, "FsK Assault, codé par Laloutre (www.gta-online.fr).");
        SendClientMessage(playerid, COLOR_LIGHTBLUE, "Taper: /but : pour voir le but de ce mode de jeu.");
    return 1;
    }
    if(strcmp(cmd, "/but", true) == 0) {
        SendClientMessage(playerid, COLOR_LIGHTBLUE, "Pour les terroristes : Attaquer la base des Anti-Terroristes;");
        SendClientMessage(playerid, COLOR_LIGHTBLUE, "Pour les Anti-Terroristes : Defendre la base.");
        SendClientMessage(playerid, COLOR_LIGHTBLUE, "Ce mode de jeu est prévu pour les matchs.");
    return 1;
    }
    if(strcmp(cmd, "/go", true) == 0) {
        GameTextForAll("GO GO GO !!!", 1000, 5);
    return 1;
    }
    if(strcmp(cmd, "/glhf", true) == 0) {
        GameTextForAll("~y~Good Luck and Have Fun", 1000, 5);
    return 1;
    }

    // PROCESS OTHER COMMANDS


    return 0;
}
Titre: Probleme: "OnPlayerCommandText"
Posté par: doun le 20 Juin 2006, 16:44:50
J'ai mis ce que tu ma donner, avec tes commands mais quand j'ecri /help ya bien l'aide mais après quand j'ecris /but il me ressort l'aide.

J'ai même ecris nimporte quoi du style: /sdfsdg et ca ma sortit l'aide
Titre: Probleme: "OnPlayerCommandText"
Posté par: Lalu le 20 Juin 2006, 17:00:50
Je répete ...
EN PREMIER LIEU, RAJOUTEZ CECI

strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index <length> ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}
Titre: Probleme: "OnPlayerCommandText"
Posté par: spykerc8 le 20 Juin 2006, 17:03:22
bon, le copier coller, c'est bien mais ca marche pas à tous les coups...


public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext, "/healme", true)==0){
SendClientMessage(playerid, COLOR_BLUE, "Ta vie a été restoré");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Your heal as been regenerated");
SetPlayerHealth(playerid, 100);
return 1;
}
if(strcmp(cmdtext, "/test", true) == 0) {
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Test");
return 1;
}


Essais ca, je l'ait tirer d'un de mes modes ^^
Sinon c'est possible que ton setplayerhealth fasse foirer.
Titre: Probleme: "OnPlayerCommandText"
Posté par: doun le 20 Juin 2006, 17:07:19
Oui lalu c'est ce que j'ai fait
Sinon spyker je ne voit pas ce que tu as changer, tu as enlever "new cmd[256];" mais sans ca c impossible de compiler.
Titre: Probleme: "OnPlayerCommandText"
Posté par: doun le 20 Juin 2006, 17:14:20
Waw ca marche mais quand je compile il me dit: warning 203: symbol is never used: "strtok"

J'arrive a compiler mais ca risque pas de planter defois?




Edit: voila j'arrive a compiler sans le warnig j'ai enlever:
strtok(const string[], &index)
{
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
        index++;
    }

    new offset = index;
    new result[20];
    while ((index <length> ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
        result[index - offset] = string[index];
        index++;
    }
    result[index - offset] = EOS;
    return result;
}





Mais dit moi Spykerc8 ta juste enlever "new cmd [256];"   ????
Parce que avant sans ca j'arrive pas a compiler et la j'arrive.


RE-edit: ha non c'est bon j'ai vu ce que tu as changer tu as mit cmdtext au lieu de cmd. GOOD-GAME :D

Ps: je fait des edit a chaque fois au lieu de refere des post (ca polue moin) mais si ca vous gêne dites le moi.
Titre: Probleme: "OnPlayerCommandText"
Posté par: spykerc8 le 20 Juin 2006, 17:48:01
à la base sa-mp marche avec "cmdtext" y a pas de raison de changer pour ce type de commandes...
enfin, tant que ca marche et qu'on a pu aider ;)