GTAOnline.net

San Andreas Multiplayer (sa:mp) => Scripting SA-MP [Pawn center] => Discussion démarrée par: Lychaos le 14 Novembre 2009, 22:13:47

Titre: Apprendre le PAWN
Posté par: Lychaos le 14 Novembre 2009, 22:13:47
Bonsoir a tous,

Voila plusieurs mois que j'essaie d'apprendre le PAWN, mais sans grand succè, étant un mec plutôt théorique, j'arrive pas a me forger en travaillant seul. Je suis donc a la rechercher de "tutos" , ou un tuteur qui me ferait des sortes de cours

Je suis près a y passer beaucoup de temps, mais étant seul, j'arrive seulement a modifier une commande, je comprend la plupart des choses, mais je ne sais pas comment les utiliser (string , variable, ect)

Donc je chercherais quelqu'un qui serait près a me les apprendre.

Je vous remercie

Bonne soirée , +Lychaos++Ster+
Titre: Re : Apprendre le PAWN
Posté par: cristab le 14 Novembre 2009, 22:20:05
ben explique sur ce que tu buche et je pense qu'on pourras t'expliquer au plus simple ;)
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 14 Novembre 2009, 22:34:27
Le truck, c'est que j'aimerais savoir crée sans avoir besoin de beaucoup d'aide, par exemple, je ne sais meme pas comment appliquer une couleur a une team , je sais a peine faire des spawn different (et encore)

Je pense que j'aurais du apprendre le C avant ce langage sa m'aurait aider ... ( pourquoi j'ai prit se satané xHTML  :wall ))

=============EDIT============

J'avais entendu parlez d'un tuto qui permettais d'editer un DM, sa pourrait etre bien pour debuter?

Si vous avez un lien, je suis preneur ^^
Titre: Re : Apprendre le PAWN
Posté par: cristab le 14 Novembre 2009, 23:11:54
personnelement je ne connait pas le C ^^

je suis plus php html et pawn appris par mes propres moyen en regardant les autre GM FS :)


pour appliquer une team


commence par declarer tes team

new Team[MAX_PLAYERS];
dans le onplayerconnecte qui est la callback appeler quand un joueur ce connect ajoute ceci

Team[playerid] = 0;
ensuie dans la callback OnPlayerRequestClass qui est appeler quand un joueur choisit sont personnage

if(classid == 0)
{
   Team[playerid] = 1;
}
else if(classid == 1)
{
   Team[playerid] = 2;
}


ensuite dans la callback OnPlayerSpawn qui est appeler au moment ou le joueur spawn

if(Team[playerid] == 1)
{
   SetPlayerColor(playerid,couleur1);
}
else if(Team[playerid] == 2)
{
   SetPlayerColor(playerid,couleur2);
}

Voila par toi meme tu purras optimiser ceci un peu plus tard :)
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 14 Novembre 2009, 23:23:34
Merci , sa fait plaisir que tu t'investisse pour moi ^^

Sinon il y le truk que j'ai jamais piger
c'est une sort de new xxx[256]
ou sting[256]

Je voudrais savoir ce que cela signifie.
Titre: Re : Apprendre le PAWN
Posté par: cristab le 14 Novembre 2009, 23:33:05
enfaite la il faut savoir que si c'est pour un text le

new String[256]; ne sert pas a grand chose il est preferable d'utiliser 128 a la place

en gros sa va etre le nombre de caractere que l'on aimerais stocker dans la variable


par exemple
new string[5];
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));

format(string, sizeof(string)," la maison verte de %s est jolie", pName);
SendClientMessageToAll(COLOR_ORANGE, string);

afficheras seulement

la ma

tans dis que si on passe le string a 128

new string[128];
new pname[MAX_PLAYER_NAME];
GetPlayerName(playerid, pname, sizeof(pname));

format(string, sizeof(string)," la maison verte de %s est jolie", pName);
SendClientMessageToAll(COLOR_ORANGE, string);

il afficheras
la maison verte de Lychaos  est jolie

Voila je ne sais pas si j'ai etait assez claire en faite

Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 14 Novembre 2009, 23:44:19
Si tres ^^

Et sa se met a chaque fin de var? Enfin, a chaque debut de fonction qui renvoit un texte?
Titre: Re : Apprendre le PAWN
Posté par: cristab le 14 Novembre 2009, 23:45:58
des que tu as besoin de faire un format
Titre: Re : Apprendre le PAWN
Posté par: Diablo62 le 15 Novembre 2009, 00:36:25
Salut.

Tout le monde débute quelque part dans quelque chose et tout le monde a des façons d'apprendre différentes (certains ont besoin de cours approfondies, d'autres un prof particulier, d'autres apprennent sur le tas (en essayant), et autres). Il n'y a pas de mauvaises façon d'apprendre et dans tous les cas tu seras obliger de passer à la pratique.

Ici il y a des Tutos qui sont relativement simple et bien expliqué et si tu as besoin d'aide, tu peux toujours demander et on te répondra (du moins, s'il n'y a pas eu de recherche et que la solution est déjà écrite plusieurs fois, tu risques d'attendre :p ) ;) .
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 15 Novembre 2009, 09:59:41
Oui, j'ai utiliser la fonction recherche de mainte fois x).

Sinon, disons que je marche sur la logique, et j'arrive pas a m'y mettre tout seul ^^

Si tu a des lien de tuto (francais de preference, sinon je me debrouillerais)

Merci beaucoup ;)

+Lychaos++Ster+
Titre: Re : Apprendre le PAWN
Posté par: cristab le 15 Novembre 2009, 10:38:32
http://www.gtaonline.fr/forums/index.php/board,75.0.html (http://www.gtaonline.fr/forums/index.php/board,75.0.html)


voila :)

commence par les anciens tuto et je regarde si  j'ai le temps d'expliquer chaque callback
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 15 Novembre 2009, 11:28:32
Merci, je suis en train de lire les Tuto ^^

Sinon j'aimerais savoir si y'a un lien qui permet de savoir ce qu'on doit mettre habituelement dans les OnPlayerSpawn (quand le joueurs a choisis sa classe) OnPlayerConnect(quand il se connecte)

Ce qu'on doit placer, et comment le savoir.
Par exemple je lis "Dans le OnGameModInit
tunning= blablable
<-->
 Ici on doit mettre tout les new?
<-->

et ensuite crée une public
public OnPlayerSelectedMenuRow(playerid, row) (Deja sa, comment on sait qu'on doit ecrire tout sa lol)

En bref, une expliquation de ces choses la me serait bien utile ^^  :laugh
Titre: Re : Apprendre le PAWN
Posté par: cristab le 15 Novembre 2009, 11:44:09
dans le OnGameModeInit tu doit retrouver ceci

*tes option du genre (SetGameModeText("nom du GM");ShowNameTags(1);ShowPlayerMarkers(1);AllowInteriorWeapons(1);)
*les timers pour certaine fonction du GM (anticheat,payday,...)
*tes personnages (addplayerclass)
*tes vehicule (addstaticvehicle ou creatvehicle)
*tes variable que ton GM a besoin (seulement le GM )
*ensuite tu ajoute tes menu si il y a


pour ta callback OnPlayerSpawn sa depent ce que tu aimerais quelle fasse ^^


/!\ a savoir les variable concernant un seul joueur tu peu les remarquer en haut du gm avec ceci a la fin [MAX_PLAYERS] tu doit mettre tout les variable a 0 lors de la conection dans la callback OnPlayerConnect
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 15 Novembre 2009, 12:27:21
Merci ^^

Mettre les variable a zero au debut sa veux dire quoi?

a chaque new xxx je dois mettre = 0?

Et sinon, comment savoir les ID de chaque chose, je connais Skin, vehicule, mais les ajout tunning par exemple, il y a un site? ou une librairie?
Titre: Re : Apprendre le PAWN
Posté par: cristab le 15 Novembre 2009, 13:16:28
tout a fait il y a un wiki officiel a samp http://wiki.sa-mp.com/wiki/Main_Page_FR (http://wiki.sa-mp.com/wiki/Main_Page_FR) par contre juste la page d'acceuil est en français tout le reste est en anglais
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 15 Novembre 2009, 13:27:44
Merci encore

Sinon je lisais ce tuto la (http://www.gtaonline.fr/forums/index.php/topic,4289.0.html (http://www.gtaonline.fr/forums/index.php/topic,4289.0.html)) Concernant le MoveObject, il y a une chose que je ne comprend pas

On doit ecrire le commande donc le cmdtp(jsais pus comment sa s'ecrit) =/fermer

ensuite le SetTimer(Nomdutimer,7000,0) // pour 7 sg

MAIS, le Timer en question n'est dit qu'a la FIN du scripte, il risque pas d'y avoir un "Nomdutimer n'est pas déclarer" ?

=================Edit==============
J'aimerais aussi savoir les type de variable et a quoi sa correspond, car je voit beaucoup de "i" et je me demandais... ???
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 16 Novembre 2009, 14:06:32
Bonjour a tous

Je suis en train d'apprendre le pawn et j'en etait a crée un moveobject, mais la commande seulement dans une zone, j'ai donc mit IsPlayerInArea, mais j'ai toujours "Udefined sybol "Getplayerpos"

erreur :
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : error 017: undefined symbol "GetPlayerPos"
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : warning 215: expression has no effect
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : warning 215: expression has no effect
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : warning 215: expression has no effect
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : warning 215: expression has no effect
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : error 001: expected token: ";", but found ")"
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : error 029: invalid expression, assumed zero
C:\SERVEUR SAMP\gamemodes\mytdm.pwn(33) : 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.

Pastebin de mon script: http://pastebin.com/m6d0943c3 (http://pastebin.com/m6d0943c3)
Titre: Re : Apprendre le PAWN
Posté par: cristab le 16 Novembre 2009, 15:58:23
tu as mis #include <a_samp> tout en haut ??
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 16 Novembre 2009, 15:58:58
EDIT : Haaaann C'est regler, je devais encore avoir une confusion de PAWNO

Sa m'arrive pleins de fois sa, quand j'en ouvre plusieurs en meme temps, il a pus la bonne version, et fait bugguer tout mon script ;) (toute une aprem pour sa xd)
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 17 Novembre 2009, 22:26:46
Salut a vous,
J'ai esseyer de crée des menu pour qu'on selectionne ses arme, mais j'ai un little soucis, quand on va sur le premier menu, on a tout, et sur les 2 autre, le menu apparait, mais vide :s

voici mes code

new Menu:gun;
new Menu:gun1;
new Menu:gun2;

gun = CreateMenu("~r~Pistol ~w~selection",1,125,150,300); //création du menu
  if(IsValidMenu(gun))
{
    SetMenuColumnHeader(gun, 0, "Choisissez votre pistolet:");
    AddMenuItem(gun ,0,"Eagle");
    AddMenuItem(gun ,0,"9mm");
    AddMenuItem(gun ,0,"Silentieux");
}
//----------------------
gun1 = CreateMenu("~r~Mitraill. ~w~selection",1,125,150,300); //création du menu
if(IsValidMenu(gun1))
{
    SetMenuColumnHeader(gun1, 0, "Choisissez votre mitraillette legere et lourde:");
    AddMenuItem(gun ,0,"AK47");
    AddMenuItem(gun ,0,"M4");
    AddMenuItem(gun ,0,"MP5");
    AddMenuItem(gun ,0,"Tec9");
    AddMenuItem(gun ,0,"Micro-MP5");
}
//-------------------------------
gun2 = CreateMenu("~r~Letal ~w~selection",1,125,150,300); // création du menu
if(IsValidMenu(gun2))
{
SetMenuColumnHeader(gun2, 0, "Choisissez votre arme letal:");
    AddMenuItem(gun ,0,"Batte");
    AddMenuItem(gun ,0,"Couteau");
    AddMenuItem(gun ,0,"Gods");
    AddMenuItem(gun ,0,"Pelle");
}

if (strcmp("/gun", cmdtext, true, 10) == 0)
{
    if(PlayerToPoint(playerid, 3, 1883.069336, 1284.791626, 11.357388) || PlayerToPoint(playerid, 3, 1949.034790, 1444.481201, 11.357388))
    {
        ShowMenuForPlayer(gun,playerid);
        TogglePlayerControllable(playerid,0);
}
else
{
    SendClientMessage(playerid, COLOR_RED, "Vous n'etes pas sur la bonne etoile");
}
return 1;
}
//FIN CMD

// Debut CMD
if(strcmp("/mgun", cmdtext, true, 10) == 0)
{
    if(PlayerToPoint(playerid, 3, 11886.490967, 1284.813599, 11.357388) || PlayerToPoint(playerid, 3, 1945.264282, 1444.519043, 11.357388 ))
    {
        ShowMenuForPlayer(gun1,playerid);
        TogglePlayerControllable(playerid,0);
}
else
{
    SendClientMessage(playerid, COLOR_RED, "Vous n'etes pas sur la bonne etoile");
}
return 1;
}
// Fin cmd

// debut cmd
    if(strcmp("/lgun", cmdtext, true, 10) == 0)
{
    if(PlayerToPoint(playerid, 3, 1890.087891, 1284.888672, 11.357388) || PlayerToPoint(playerid, 3, 1941.252930, 1444.630737, 11.357388 ))
    {
        ShowMenuForPlayer(gun2,playerid);
        TogglePlayerControllable(playerid,0);
}
else
{
    SendClientMessage(playerid, COLOR_RED, "Vous n'etes pas sur la bonne etoile");
}
return 1;
}
// FIN DES COMMANDE DE MENU

public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:Current = GetPlayerMenu(playerid);
if(Current == gun)
{
    if(row == 0)
    {
GivePlayerWeapon(playerid, 24, 100);
}
if(row == 1)
{
    GivePlayerWeapon(playerid, 22, 100);
}
if(row == 2)
{
    GivePlayerWeapon(playerid, 23, 100);
}
TogglePlayerControllable(playerid,1); //on defreeze
}
if(Current == gun1)
{
    if(row == 0)
    {
GivePlayerWeapon(playerid, 30, 500);
}
if(row == 1)
{
    GivePlayerWeapon(playerid, 31, 500);
}
if(row == 2)
{
    GivePlayerWeapon(playerid, 28, 500);
}
if(row == 3)
{
    GivePlayerWeapon(playerid, 29, 500);
}
if(row == 4)
{
    GivePlayerWeapon(playerid, 32, 500);
}
TogglePlayerControllable(playerid,1); //on defreeze
}
    if(Current == gun2)
{
    if(row == 0)
    {
GivePlayerWeapon(playerid, 2, 0);
}
if(row == 1)
{
    GivePlayerWeapon(playerid, 4, 0);
}
if(row == 2)
{
    GivePlayerWeapon(playerid, 10, 0);
}
if(row == 3)
{
    GivePlayerWeapon(playerid, 6, 0);
}
TogglePlayerControllable(playerid,1); //on defreeze
}
return 1;
}

J'ai pourtant suivit le tuto, verifier sur le wiki samp mais je voit :s

Merci de votre aide
Titre: Re : Apprendre le PAWN
Posté par: cristab le 17 Novembre 2009, 22:39:56
if(IsValidMenu(gun))
{
    SetMenuColumnHeader(gun, 0, "Choisissez votre pistolet:");
    AddMenuItem(gun ,0,"Eagle");
    AddMenuItem(gun ,0,"9mm");
    AddMenuItem(gun ,0,"Silentieux");
}
//----------------------
gun1 = CreateMenu("~r~Mitraill. ~w~selection",1,125,150,300); //création du menu
if(IsValidMenu(gun1))
{
    SetMenuColumnHeader(gun1, 0, "Choisissez votre mitraillette legere et lourde:");
    AddMenuItem(gun1 ,0,"AK47");
    AddMenuItem(gun1 ,0,"M4");
    AddMenuItem(gun1 ,0,"MP5");
    AddMenuItem(gun1 ,0,"Tec9");
    AddMenuItem(gun1 ,0,"Micro-MP5");
}
//-------------------------------
gun2 = CreateMenu("~r~Letal ~w~selection",1,125,150,300); // création du menu
if(IsValidMenu(gun2))
{
SetMenuColumnHeader(gun2, 0, "Choisissez votre arme letal:");
    AddMenuItem(gun2 ,0,"Batte");
    AddMenuItem(gun2 ,0,"Couteau");
    AddMenuItem(gun2 ,0,"Gods");
    AddMenuItem(gun2 ,0,"Pelle");
}

;)
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 18 Novembre 2009, 09:22:38
Ahhh ouai :D, merci beaucoup, sa m'etait meme pas venu a l'esprit :dry

Faut que je sois plus concentrer, ou jvais galerer lool
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 19 Novembre 2009, 10:15:59
Bonjour, j'essais de crée une sorte de job d'eboueur où il faut aller de checkpoint en checkpoint, les coordonner se font de maniere aleatoire, mais j'ai un soucis, c'est que quand je rentre sur un seul point, il active tout le reste en meme temps, et je sais pus comment m'y prendre ...

Voici mes code :
new eboueur[MAX_PLAYERS];
new ceboueur[MAX_PLAYERS];
new Float:PoubellePoints[3][3]={
{2036.697143,1163.087524,10.471667},
{2036.946044,1044.111206,10.470774},
{2037.472290,909.212158, 8.086796}
};

// DEBUT CMD
if(strcmp("/eboueur", cmdtext, true, 10) ==0)
{
    eboueur[playerid] = 1;
    SendClientMessage(playerid,COLOR_RED,"Vous etes désormais Eboueur");
    return 1;
}
// FIN CMD

// debut cmd
if(eboueur[playerid] == 1)
{
if(strcmp("/rampoubelle", cmdtext, true, 10) == 0)
{
    ceboueur[playerid] = 1;
    SendClientMessage(playerid,COLOR_YELLOW,"Suivez les checkpoint pour faire votre tourné");
    new randomize;
    randomize = random(sizeof(PoubellePoints));
    SetPlayerCheckpoint(playerid, PoubellePoints[randomize][0], PoubellePoints[randomize][1], PoubellePoints[randomize][2],5);
    return 1;
}
return 0;
}
//fin cmd

public OnPlayerEnterCheckpoint(playerid)
{
if(ceboueur[playerid] == 1)
{
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez ramasser votre premiere poubelle.(2restantes)");
GivePlayerMoney(playerid,150);
new randomize;
randomize = random(sizeof(PoubellePoints));
  SetPlayerCheckpoint(playerid, PoubellePoints[randomize][0], PoubellePoints[randomize][1], PoubellePoints[randomize][2], 5.0);
ceboueur[playerid] = 2;
  }
else if(ceboueur[playerid] == 2)
{
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez ramasser votre deuxieme poubelle.(1restantes)");
GivePlayerMoney(playerid,150);
new randomize;
randomize = random(sizeof(PoubellePoints));
  SetPlayerCheckpoint(playerid, PoubellePoints[randomize][0], PoubellePoints[randomize][1], PoubellePoints[randomize][2], 5.0);
ceboueur[playerid] = 3;
  }
else if(ceboueur[playerid] == 3)
{
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez ramasser votre troisieme poubelle.");
GivePlayerMoney(playerid,500);
SendClientMessage(playerid,COLOR_YELLOW,"Vous avez finit votre tourné!");
ceboueur[playerid] = 1;

}
return 1;
}

La, quand je rentre sur le premier point sa fait " Vous avez ramasser votre premiere poubelle" le cp reste au meme endroit, et si je re-rentre j'ai les 3 autre messages e le cp change d'endroit...

J'ai pour le moment 3 coordonné, mais il y en auras beaucoup .

Si vous savez comment je dois m'y prendre sa m'aiderais beaucoup...
Titre: Re : Apprendre le PAWN
Posté par: cristab le 19 Novembre 2009, 10:21:21
pense a killer le CP dans le quelle tu entre
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 19 Novembre 2009, 10:25:02
Haaaan sa marche merci...

Je l'avais mit mais j'ai recommencer le systeme et je les ai oublier :-\
Bon en tout cas je suis content, apres 4h a etre passer dessus  :lmfao

Edit: Maintenant j'aimerais savoir comment faire qu'un vehicule sois reserver a un job
    |--> Le trashcar m'interresserais particulierement...
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 22 Novembre 2009, 10:08:03
Bonjour, j'etais en train de voir pour utiliser des animation et nottament une anim quand on parle, et qu'au bout de 3-4 secondes, l'anim s'arrete.
J'ai donc mit sa
                          if(!IsPlayerInAnyVehicle(playerid))
{
if(PlayerInfo[playerid][pMaskuse] == 1)
{
    ApplyAnimation(playerid,"PED","IDLE_CHAT",4.1,1,1,1,1,1);
SetTimer("parler",3000,0);
format(string, sizeof(string), "Etrangé dit: %s", result);
ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
   
}
else
    {
        ApplyAnimation(playerid,"PED","IDLE_CHAT",4.1,1,1,1,1,1);
    SetTimer("parler",3000,0);
    format(string, sizeof(string), "%s dit: %s", sendername, result);
    ProxDetector(20.0, playerid, string,COLOR_FADE1,COLOR_FADE2,COLOR_FADE3,COLOR_FADE4,COLOR_FADE5);
   
}
}

Le soucis c'est que, le timer se repete en boucle, et l'anim viens jamais :/

Mon deuxieme soucis vient du fait que je veux placer un train pour l'enregistrer en temps que bot, mais il ne se spawn pas avec le debug, quand je l'ajoute sur le script, il ne se crée pas...

Y a t-il une fonction particuliere pour que le train sois crée?

+Lychaos++Ster+
Titre: Re : Apprendre le PAWN
Posté par: cristab le 22 Novembre 2009, 10:31:38
pour le timer essaye avec SettimerEx

pour le train verifie bien qu'il soit en AddStaticVehicle et non en createVehicle
Titre: Re : Apprendre le PAWN
Posté par: Lychaos le 22 Novembre 2009, 10:33:07
Oui effectivement, le train marche maintenant ;)

Mais l'animation quand on parle.... Non, je parle, il ne se passe rien sauf le timer en boucle tout les 4 seconde, je vais esseyer avec un SetTImerEx.

Mais pour l'anim, vous savez pourquoi elle ne s'affiche pas?