GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: yah00078 le 09 Octobre 2007, 19:03:06
-
Bonjour a tous joueur et scripteur , j'ai un pti probleme...
Je voudrais pourvoir choisir le temps d'emprisonement des comdamané en tapant par exemple /ajail "nombre de minutes"
je ne sais scripter que la prion simple
aider moi svp
Merci a vous tous :)
-
Au pire, tu téléporte le player une foi que tu pense qu'il a fait assé de temps de prison ^^ comme sa il reste autant de temps que tu veu ^^ ;) (si en plus tu le freez c'est le comble :laugh )
-
Ce n'est pas très difficile.
Tout d'abord, il faut que tu récupères l'id du joueur et le nombre qui se trouvent derrière ta commande (et on va dire que ce nombre est en secondes).
Ensuite, tu lances un timer qui se chargera de faire sortir le joueur de prison.
Pour l'extraction des paramètres, il faut que tu utilises la fonction strtok (si tu ne l'as pas déjà dans ton script, prends la dans le fichier LVDN.PWN fourni avec le serveur).
Voici un façon de faire :
http://pastebin.gtaonline.fr/pastebin.php?show=105
++
Syg
-
Merci sa marche :)
Merci a tous et a toi syg
-
Salut ^^ Je vien te demander de l'aide syg, ou autres personnes qui pourraient me répondre :p
Voila j'ais fais des cmds admin et je voudrais que quand un joueur non admin fase la cmd qu'il soit envoyé en prison.
Donc j'ais fait ça :
else if(strcmp(cmdtext,"/vie", true)==0){
if(IsPlayerAdmin(playerid) == 1){
SetPlayerHealth(playerid, 100);
} else {
cmd = strtok (cmdtext, idx);
new IdJoueur = strval (tmp);
tmp = strtok (cmdtext, idx);
if (strlen (tmp) != 0)
GameTextForPlayer(playerid, "~r~Tu n'est pas admin !!",5000,6);
SetPlayerInterior(playerid,3);
SetPlayerPos(playerid,197.6661,173.8179,1003.0234);
SetTimerEx(SortiePrison, 1000, 0, i, IdJoueur);sur l'exemple que tu avais donner. Avec le public qu'il faut (je ne savais pas trop quoi mettre dedans alors j'ais juste mis le SetPlayerPos pour faire sortir le joueur :
public SortiePrison (IdJoueur)
{
SetPlayerPos(IdJoueur,X,Y,Z); //je mettrais mes valeurs après
return 1;
}
et j'ais 1 erreur :
C:\Documents and Settings\Charles-alexandre\Bureau\sa-mp 2.2 r2\gamemodes\truk.pwn(1994) : error 076: syntax error in the expression, or invalid function call
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
Voila ^^ J'ais cherché un bout de temps, mais je ne vois pas trop comment faire alors je vous demande avant qu'il n'y est trop d'erreurs :laugh
A++
-
Tu as oublié le guillemets "" dans l'appel à la fonction SetTimerEx :
SetTimerEx("SortiePrison", 1000, 0, "i", IdJoueur);
Deuxième chose, 1000 veut dire 1 seconde (1000 milliseondes), je ne pense pas que tu veuilles mettre quelqu'un en prison pendant 1 seconde.
Sinon, n'oublie pas d'initialiser les variables X, Y et Z sinon le joueur va retourner à la position 0,0,0 quand il sortira de prison.
++
Syg
-
Merci beaucoup ^^ Il y a un autre prob maintenant, que je ne comprend pas... :closedeyes
Voila j'ais ajouter tous ce qu'il fallais a mes commandes admins pour que les joueurs non admins qui la tapent soient envoiyés en taule, et il y a une commande, ainsi que les messages qui ne fonctionne plus.
La commande /god ne fonctionne plus :
}
else if(strcmp(cmdtext,"/god", true)==0){
if(IsPlayerAdmin(playerid) == 1){
SetPlayerHealth(playerid, 10000);
} else {
if(IsPlayerAdmin(playerid) == 0){
cmd = strtok (cmdtext, idx);
new IdJoueur = strval (tmp);
tmp = strtok (cmdtext, idx);
if (strlen (tmp) != 0)
GameTextForPlayer(IdJoueur,"~r~Tu n'est pas admin !!T'es en prison pour 10 secondes",5000,6);
SetPlayerInterior(IdJoueur,3);
SetPlayerPos(IdJoueur,197.6661,173.8179,1003.0234);
SetTimerEx("SortiePrison", 10000, 0, "i", IdJoueur);
}
}
}
Aucune erreur aucun warning.
Et les messages "GameTextForPlayer(IdJoueur,"~r~Tu n'est pas admin !!T'es en prison pour 10 secondes",5000,6);" ne fonctionne pas pour toutes les commandes
Je ne sais pas pourquoi...
Il faut pas que je les mettent dans des accolades
}
else
{
GameTextForPlayer(IdJoueur,"~r~Tu n'est pas admin !!T'es en prison pour 10 secondes",5000,6);
} ??? ?
-
c'est pas IdJoueur, c'est playerid
-
ton code me semble assez bizzard ...
Pourquoi utiliser IDJoueur à la place de playerid ? La commande s'éxecute sur le joueur qui la tappe et pas sur un autre ;)
Pourquoi utiliser strtok ? Sa sert à récupérer une portion de chaine de caractères dans une chaine, par apport à un délimiteur ;)
else if(strcmp(cmdtext,"/god", true)==0){
if(IsPlayerAdmin(playerid) == 1){
SetPlayerHealth(playerid, 10000);
} else {
GameTextForPlayer(playerid,"~r~Tu n'est pas admin !!T'es en prison pour 10 secondes",5000,6);
SetPlayerInterior(playerid,3);
SetPlayerPos(playerid,197.6661,173.8179,1003.0234);
SetTimerEx("SortiePrison", 10000, 0, "i", playerid);
}
return 1;
}
//----------------------------------------
public SortiePrison (playerid)
{
SetPlayerPos(playerid,X,Y,Z); //je mettrais mes valeurs après
return 1;
}Voila le code d'après moi, je ne l'ai pas testé ni compilé, donc dit moi si sa marche ;)
++
R@f
-
Merci R@f mais j'avais déja fais comme tu ma dit de faire et le résultat est le même... Ni texte qui s'affiche, ni cmd qui fonctionne, ni envoie en taule quand le player n'est pas admin...
kif kif...
Merci quand même, en plus c'est la seul commande qui ne veu plus fonctionner, toutes les autres fonctionnent, mais il y a le prob des textes qui ne s'affiches pas quand le player non admin tape une commande admin. Sinon il y a bien la tel derrière les barreaux ^^ et mon texte en sortie de taule :p
Faut que je trouve ce qui cloche, c'est énervant :laugh
-
ah la boulette que j'ai faite ... j'ai oublié le return 1 ::) code corrigé, testé et fonctionnant (voir mon post plus haut)
++
R@f
-
Ok merci, mais le returne 1; n'était pas important car cette commande était a la suite d'autre commandes, et le return 1; était tout a la fin du public.
j'ai enlever les strok ainsi que
cmd = strtok (cmdtext, idx);
new IdJoueur = strval (tmp);
tmp = strtok (cmdtext, idx);
if (strlen (tmp) != 0)
Reste plus cas voir si ça marche ^^ mais je ne doute plus maintenant ^^ Merci a vous ^^ a++
-
Sorry pour le double post... J'avais pas de bouton "modifier" :blink
Bon bref Du coup je refais un post..
En faite ça marche bien, mais la commande "god" ne veu pas du tout fonctionner... Ni la téléportation pour les non admins, ni la vie illimitée pour les admins :(
Je ne sias pas pourquoi ça fait ça, elle marchais niel avant... Et pourtant en modifiant la commande je n'est pas toucher a quoi que se soit qui aurrait pue faire disfonctionner la cmd...
-
Bon aller un petit triple post ^^ ...... ;D
Est ce quelqu'un peut m'aider ?? svp ??