GTAOnline.net
San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: killian_sanchez le 29 Octobre 2008, 08:42:50
-
Bonjour,
Je débute en script, et sur mon serveur (RPG) j'aimerais que quand on arrive a 5/100 points de vie, une anim ce lance ( sur mon serveur animcrack ) pour améliorer le RP.
si quelque un qui s'y connais bien en script pourrais m'aider se serais super
le but serais de :
- donner du travail a la faction secouriste
- que la police puisse neutraliser les suspect en le baissant
- puis améliore le role play
merci @+,
-
bonjour tu peut utiliser genre un truc comme sa :
dans ongamemodeinit:
SetTimer("vies",5000,1);
ton public :
forward vies();
public vies()
{
(si ta un probleme avec playerid utilise i que tu definit comme sa for(new i=0; i<MAX_PLAYERS; i++) )
new vie;
vie = GetPlyerHealth(playerid, 5);
if( vie == 1)
{
toggleplayercontrollable(playerid,0)//comme tu veut soit sa le freeze (0)
Applyanim//ton animation
}
return 1;
}je vient de le faire vite fait je sais pas si sa marche alors a tester :D
++
-
merci bcp je vai tester ca
Edit : juste dans : ApplyAnimation persone ne sais les nom des anim ?
-
Moi personnellement j'utilise looping anim donc je ne sais pas.
-
Tu trouveras la majeure partie des infos que tu cherches dans le filterscript vactions.pwn fourni avec le serveur SAMP.
++
Syg
-
Et si tu freeze un gars en meme temps que tu met une anim bah cette anim ne sera pas faites
xD mon francais
-
Ok merci de l'info
Mais comment faire que pour la personne reste a faire l'anim sans pouvoir la retirer.
J'e connais un moyen se de faire clearanimation apres un temps donner.Mais si la personne fait /stopani beh la elle stop bien entendut l'anim
donc faut que tu reflechisse.
-
enleve la cmd stopani
-
Euh ta signature sasuke merci de me faire de la pub :)
PS:Vas sur le fofo pour prendre l'adresse hotmail.
Car en ce moemnt j'ai besoin d'aide ^^,
-
arg je voulais pas faire de pub ca a mis ton truc tt seul xD
-
re-salut
bon aparament ca marche pas :wall : quelque un peu m'aider ?
Merci d'avance
-
Tu pourrait t'expliquer ?
-
DSL j'ai mis du temps a repondre j'étais pas la
voila le rapport d'erreur :
\GAMEMO~1\sftdm.pwn(384) : error 021: symbol already defined: "SetTimer"
\GAMEMO~1\sftdm.pwn(389) : error 017: undefined symbol "GetPlyerHealth"
\GAMEMO~1\sftdm.pwn(392) : error 017: undefined symbol "playerid"
-
Salut
Tu pourrait montrer le bout de code.
-
voilla le raport entier ( le bon psk tt a leur je m'étais tromper )
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(385) : error 021: symbol already defined: "SetTimer"
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(392) : error 017: undefined symbol "GetPlyerHealth"
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(395) : error 017: undefined symbol "toggleplayercontrollable"
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(540) : warning 235: public function lacks forward declaration (symbol "SetupPlayerForClassSelection")
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(650) : warning 235: public function lacks forward declaration (symbol "GameModeExitFunc")
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
3 Errors.
je m'étais tromper de raport d'erreur
EDIT : au fait merci , c'est gentil a toi de m'aider psk j'étais en galere
-
Domme moi ton bout de script pas le rapport d'erreur :(
Aussi non je peut rien faire apart te dire qu'il manque 2 forwards que ton getplayerhealth et mal mit ou mal ecrit.
et que tu as un petit probleme avec ton Timer
-
ba le script c'est celui que tu m'a fais sur la page d'avan
en fait je croi que le pb c'est que j'oublie de completer des truc: tu pe pa me le completer avec des exemple
-
Je vais te le corriger et t'expliquer tes erreurs
EDIT:envoit moi le bout de script que tu as fait je te le corrige car le seul qu'il y a ses le mien mais je pense que tu as changer certaine chose.
-
SetTimer("vies",5000,1);
forward vies();
public vies()
{
new vie;
vie = GetPlyerHealth(playerid, 5);
if( vie == 1)
{
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
return 1;
}
Je croi ( enfin je suis sure) que j'ai oublier de compléter des chose.
Jai suprr [toggleplayercontrollable(playerid,0)] psk si il est freeze il ne peut pa faire l'animation
EDIT : tu pourais pa plutot me donner ton MSN ce serais plus pratique ?
-
alors voila comment il faut faire:
Dans ton public OnGameModeInit:
SetTimer("vies",2000,1);Tu le met avec les autre dsn ongamemodeinit tu trouvera bien je pense ;)
et ensuite ton public qui peut etre a la fin de ton script comme au miliieu
forward vies(playerid);
public vies(playerid)
{
new vie;
vie = GetPl[b]a[/b]yerHealth(playerid, 5);//j'avait fait une faute sur mon 1er mais t'aurai pu corriger le "a" qui manquait ^^
if( vie == 1)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
return 1;
}
Voila et je pense que tu va y arriver is ya des erreurs tu les met.
++
-
Les couleurs passent pas dans le code ^^
le TogglePlayerControllable mis a 0 veut dire que le joueur ne peut pas bouger Je ne vois pas pourquoi tu en a mis un alors que tu n'en a pas défini un qui débloque le joueur après....
-
la fonction GetPlayerHealth requiert un float, alors il te faudrait plutôt ça:
forward vies(playerid);
public vies(playerid)
{
new Float:vie;
GetPlayerHealth(playerid, vie);//ici on stock la vie du joueur dans le Float
if(vie <= 5)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
return 1;
}
voilà pour le GetPlayerHealth, sinon, va chercher un peu sur le wiki
[HS] Qu'es qui est arrivé au projet de wiki de GtaOnline??[/HS]
++Sim++
-
ju sui vaiment plus que nul ! sa marche pa : :wall
QQun pourais me le placer dans un GM de base pour me montrer ou ca va ? plz
-
il ta deja tout fait , a toi de les placé en plus il dis ou le placer (enfin je crois) :p
++
madinina 972 ;)
-
voici les erreurs :
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(530) : warning 235: public function lacks forward declaration (symbol "SetupPlayerForClassSelection")
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(640) : warning 235: public function lacks forward declaration (symbol "GameModeExitFunc")
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(701) : error 035: argument type mismatch (argument 2)
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(705) : warning 202: number of arguments does not match definition
C:\DOCUME~1\THOMAS~1.GAU\MESDOC~1\SERVEU~1\GAMEMO~1\sftdm.pwn(706) : error 001: expected token: ";", but found "}"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
2 Errors.
forward vies(playerid);
public vies(playerid)
{
new vie;
vie = GetPlayerHealth(playerid, 5);//j'avait fait une faute sur mon 1er mais t'aurai pu corriger le "a" qui manquait ^^
if( vie == 1)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
return 1;
}ca je lé placer tt a la fin du GM
SetTimer("vies",5000,1);et ca ds public OnGameModeInit()
-
Deja le toggleplayercontollable faut le laisser car il y aura une autre command pour le sauver avec les secour donc laisse le toggle.
Ensuite serieux le bout de code et bon donc sa doit marcher.
-
salut,
tu utilise mal la fonction GetPlayerHealth, le 2e argument est un float dans lequel tu stock la vie du joueur, donc tu fais comme dans mon post!
++Sim++
-
Voila je bosse avec Killian sur le meme projet et il me reste plus qu"une erreur. Voila le bout de script
forward vies(playerid);
public vies(playerid)
{
new Float:vie;
GetPlayerHealth(playerid, vie);//ici on stock la vie du joueur dans le Float
if(vie <= 6)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
return 1;
}Et voici l'erreur:
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(15279) : warning 217: loose indentation
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(24416) : warning 217: loose indentation
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33573) : warning 202: number of arguments does not match definition
C:\DOCUME~1\$h@DW$\MESDOC~1\SERVEU~2\GAMEMO~1\west.pwn(33574) : error 001: expected token: ";", but found "}"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
1 Error.
-
salut,
ton ApplyAnimation contient bien plus de paramètre, je t'ai dit de chercher un peu sur le wiki....LINK (http://wiki.sa-mp.com/wiki/ApplyAnimation)
et pour les loose indentation, tu n'as qu'a réaligner les lignes...
++Sim++
-
et tu as oublier le ";" apres ton aplyanim ;)
++
-
oula ton erreur saute au yeux!!
voila ce qu'il faut faire
ApplyAnimation(playerid, "CRACK", "crckidle2");
et non
ApplyAnimation(playerid, "CRACK", "crckidle2")
++
madinina972
-
voila, c'est bon ca marche
a part quelque chose d'assez embetan ca marche que pour l'ID 0 :'(
-
C'est normal, dans ton timer vies, le paramètre playerid est toujours à 0. C'est une erreur classique avec les timers.
Il faut modifier le timer vies comme ceci :
forward vies();
public vies()
{
new Float:vie;
for (playerid=0 ; playerid<MAX_PLAYERS ; playerid++)
{
GetPlayerHealth(playerid, vie);//ici on stock la vie du joueur dans le Float
if(vie <= 6)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
}
}
return 1;
}
++
Syg
-
pendant que Syg est dans le coin ^^ J'ai vu plusieurs personnes scripter de cette manière :
forward vies();
public vies()
{
new Float:vie;
for (playerid=0 ; playerid<MAX_PLAYERS ; playerid++)
GetPlayerHealth(playerid, vie);//ici on stock la vie du joueur dans le Float
if(vie <= 6)
{
TogglePlayerControllable(playerid,0);//Ps moi sa marche alors y a pas de raison pour toi que sa marche pas ;)
ApplyAnimation(playerid, "CRACK", "crckidle2")
return 1;
}
return 1;
}
Donc en gros mettre toute les conditions les unes a la suite des autres et ne mettre qu'une accolade :blink Et ça marche, bah oui logique, mais je voudrais savoir si c'est mieux, ou pas (la réponse je m'en doute un peut, "ça dépend des personnes" ^^ )
-
Salut,
selon mes connaissances ce code ne devrait pas fonctionner correctement car il ira chercher la vie de chaque joueur puis après avoir terminé faire le test avec le if....
mais si tu dit que ça fonctionne....alors je viens d'en apprendre une bonne
++Sim++
-
dans OnGameModInit:
SetTimer("vies",1000,1);// on pourras détecté mais sa floodera donc il faut llintroduire aussi avec quelque chose que vous flooder
ton public :
forward vies();
public vies()
{
for(new i=0; i<MAX_PLAYERS; i++)
{
new Float:healthh;
GetPlayerHealth(i, healthh);
if(healthh < 15) //je mé 15 on peut pas détecté si on le tue rapidement
{
toggleplayercontrollable(playerid,0);
ClearAnimations(playerid);
ApplyAnimation(playerid, "WUZI", "CS_Dead_Guy", 4.1,0,1,1,1,1);
}
}
}
-
Oui sim, tu as tout à fait raison, ce code ne fonctionne pas.
Et l'exemple que donne [StAfF]mAn est l'exemple parfait en faveur des accolades.
Personnellement et par expérience, je les met toujours sans me poser de question et je ne suis pas le seul dans ma profession.
Donc je vous conseille de faire de même.
++
Syg