• 23 Avril 2025, 21:31:18


Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - zorglue

Pages: [1]
1
Je trouve cette fonction très spécial.
Mon problème n'est pas résolu avec SetTimerEx() car elle a le même effet que SetTimer().
Lorsque le premier joueur fais apellé à la fonction, Tout marche bien pour lui et pour son véhicule (voir le code que j'avais écris) .
Mais lorsque qu'un autre joueur viens aussi à faire appelle à cette fonction, 2 timer sont créé mais les variables des deux timer sont modifié par les propriété du deuxième joueur .
Le résultat : le premier joueur ne profite plus de la fonction et le deuxième joueur profite de sa fonction SetTimer qu'il a décidé d'éxécuter et hérité aussi de la fonction du premier joueur .

je l'explique avec mon code : (le problème viens de la variable vid2)

ici

Donc voilà , je suis encore un peu bordélique car je ne fais que débuter .
Si vous avez compris mon problème et que vous avez des idées , n'hésiter pas :laugh

2
oui c'est vrai , il vau mieux arrêter le timer quand le joueur n'en a plus besoin .
Mais pour cela, une condition ne suffit pas . Le timer existera toujours mais n'excutera plus son contenu !
Il faut carément arrêter le timer .
Avec la fonction : KillTimer(idtimer) ?

comment s'utilise-t-elle?
L'id d'un timer ?  :blink on récupère ça comment ?  :-\
Il y a peut-être un autre moyen qui m'échappe ?

3
en effet , tu as une bonne idée . Mais cependant cela ne marche que si l'on joue seul !
else if (strcmp("/autonos", cmdtext, true) == 0){
   vid2 = GetPlayerVehicleID(playerid);
       SetTimer("nos", 19999, true);
    }
    else if (strcmp("/autoheal", cmdtext, true) == 0){
       vid2 = GetPlayerVehicleID(playerid);
       SetTimer("heal", 1, true);
    }

public heal(playerid)
{
    if (IsPlayerInAnyVehicle(playerid)){
SetVehicleHealth(vid2, 1000);
    }
    return 1;
}
public nos(playerid)
{
    if (IsPlayerInAnyVehicle(playerid)){
        AddVehicleComponent(vid2, 1010);
    }
return 1;
}

lorsque qu'un joueur execute cette commande , la fonction appelé , va s'appliquer pour lui. Grace à la fonction SetTimer, un cycle va être créer .
Mais lorsque qu'un autre joueur va à son tour exécuter cette commande, il va recréer un nouveau cycle pour lui et modifier les variables du cycle de l'autre joueur.

En résumé , le joueur 2 se retrouve avec 2 cycles pour son véhicule et le joueur 1 quand à lui, n'a plus de cycle et ne peut donc plus profiter de la fonction !

Je ne pense pas que c'est la fonction ou la méthode que je cherche  :closedeyes ???
Ou alors , il y a un moyen de résoudre mon problème ?

Merci , en espérant avoir été assez clair

4
hé bien , oui j'ai finis par faire 2 menus .

Maintenant je cherche à mettre du nos dans la voiture réguilièrement ( que je n'ai pas à faire /nos quand je n'en ai plus )

new vid;
new nos;
    vid = GetPlayerVehicleID(playerid);
    nos = AddVehicleComponent(vid, 1010);
    SetTimer(nos, 1, 1);

ce code est-il correct ... dans quelle fonction dois-je le mettre ?

Merci beaucoup

Double post
je veux aussi que le véhicule se répare automatiquement.
J'ai fais le code sauf que ce code est indépendant des autres fonctions.
dés lors, je ne sais pas où mettre mon code :
   new vid;
    new float:vh;
    vid = GetPlayerVehicleID(playerid);
    vh = GetVehicleHealth(vid);
    if (vh < 20){
        SetVehicleHealth(vid, 100);
        }
  

5
ah oui excellent !! :D

Maintenant je cale ici : vehi = CreateMenu("~b~vehicule ~w~selection",2,0,0,999999,999999); // "vehi" active un menu qui nous donne les choix ci-dessous :
//vehi2 = CreateMenu("~b~vehicule ~w~selection",1,125,150,300);
    if(IsValidMenu(vehi)) {
     SetMenuColumnHeader(vehi , 0, "Choisissez un vehicule:");
         AddMenuItem(vehi ,0,"manana");
     AddMenuItem(vehi ,0,"supergt");
     AddMenuItem(vehi ,0,"Landstalker");
     AddMenuItem(vehi ,0,"Sentinel");
     AddMenuItem(vehi ,0,"Ambulance");
         AddMenuItem(vehi ,0,"Leviathan");
         AddMenuItem(vehi ,0,"BF Injection");
         AddMenuItem(vehi ,0,"Hunter");
         AddMenuItem(vehi ,0,"Banshee");
         AddMenuItem(vehi ,0,"Predator");
         AddMenuItem(vehi ,0,"Rhino");
         AddMenuItem(vehi ,0,"Barracks");
         AddMenuItem(vehi ,0,"Packer");
         AddMenuItem(vehi ,0,"Monster");
         AddMenuItem(vehi ,0,"Seasparrow");
         AddMenuItem(vehi ,0,"Turismo");
         AddMenuItem(vehi ,0,"Caddy");
         AddMenuItem(vehi ,0,"Skimmer");
         AddMenuItem(vehi ,0,"Sanchez");
         AddMenuItem(vehi ,0,"Patriot");
         AddMenuItem(vehi ,0,"ZR-350");
         AddMenuItem(vehi ,0,"Comet");
         AddMenuItem(vehi ,0,"Sandking");
         AddMenuItem(vehi2 ,0,"Dumper");
         AddMenuItem(vehi2 ,0,"Trashmaster");
         AddMenuItem(vehi2 ,0,"Stretch");
         AddMenuItem(vehi2 ,0,"Infernus");
         AddMenuItem(vehi2 ,0,"Cheetah");

apparement ici , le serveur ne crash pas !

car le problème venait d'ici =CreateMenu("~b~vehicule ~w~selection",2,0,0,999999,999999);
malheureusement , qu'une petite partie de ma la liste est affiché , j'aimerais que le menu fasse tout l'écran et que ma liste soit entièrement affiché , en plusieur collones si il le faut :D .
Mais je ne sais absolument pas quelles nombres je dois entrer dans ma fonction . Aidez moi  :-\

6
Merci  :laugh .
Maintenant je cherche à enregistrer dans une varibla le résultat d'une fonction : GetPlayerVehicleID(playerid);c'est possible de faire ça ?  :blink
C'est juste pour pouvoir téléporter le véhicule d'un joueur.
Je sais qu'il y a moyen de téléporter le véhicule d'un joueur sans enregistrer le résultat de la fonction met en mettant la fonction directement .
Mais quand j'analyse l'idée que j'ai en tête , il faut vraiment que je connaisse cette ID car quand la personne ne sera plus dans la véhicule , je veux encore utiliser l'ID du véhicule !!   :bangin

Merci pour vos réponses

7
merci beaucoup , j'en apprende toutes les heures !!

je suis en train de scripter un menu qui sert à faire un apparaitre des véhicules .
J'ai remarqué que lorsque le menu a une taille trop grande, le serveur crash directement à son lancement en rendant un log de crash vide ( je vous dit pas le temps que j'ai mis pour savoir qu'est-ce qui faisait planter le serveur ^^ )

j'ai donc décider de couper ce long menu en plusieur petit menu !! je vous laisse analyser le code :
#pragma tabsize 0
#include <a_samp>
#include <core>
#include <float>
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

//-----------------------------------------------

new Menu:vehi;
new Menu:vehi2;

public OnPlayerCommandText(playerid, cmdtext[])
{
   
if (strcmp("/vehi", cmdtext, true) == 0){
       ShowMenuForPlayer(vehi,playerid); // On active le menu "tunning"
       TogglePlayerControllable(playerid,0); // On freeze le joueur
    }
   
    return 1;
}


public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" bibis mod");
print("--------------------------------------\n");
}



main()
{
print("\n----------------------------------");
print("bibis mod");
print("----------------------------------\n");
}



public OnGameModeInit()
{
    SetGameModeText("bibi's mod free mod");
    AddPlayerClass(257, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
vehi = CreateMenu("~b~vehicule ~w~selection",1,125,150,300); // "vehi" active un menu qui nous donne les choix ci-dessous :
vehi2 = CreateMenu("~b~vehicule ~w~selection",1,125,150,300);
    if(IsValidMenu(vehi)) {
     SetMenuColumnHeader(vehi , 0, "Choisissez un vehicule:");
         AddMenuItem(vehi ,0,"manana");
     AddMenuItem(vehi ,0,"supergt");
     AddMenuItem(vehi ,0,"Landstalker");
     AddMenuItem(vehi ,0,"Sentinel");
     AddMenuItem(vehi ,0,"suivant");
}
    if(IsValidMenu(vehi2)) {
AddMenuItem(vehi2 ,0,"precedent");
         AddMenuItem(vehi2 ,0,"Dumper");
         AddMenuItem(vehi2 ,0,"Trashmaster");
         AddMenuItem(vehi2 ,0,"Stretch");
         AddMenuItem(vehi2 ,0,"Infernus");
         AddMenuItem(vehi2 ,0,"Cheetah");
    }
         
       
return 1;
}



public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}



public OnPlayerSelectedMenuRow(playerid, row)
{
   new Float:X;
   new Float:Y;
   new Float:Z;
   new finish;
   GetPlayerPos(playerid, X, Y, Z);
   new Menu:Current = GetPlayerMenu(playerid); // Si le joueur séléctionne quel que chose du menu.
   do{
  finish = true;
      if (Current == vehi){
        if (row == 0){
          CreateVehicle(410, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 1){
          CreateVehicle(506, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 2){
          CreateVehicle(400, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 3){
          CreateVehicle(405, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 4){
          ShowMenuForPlayer(vehi2,playerid);
          Current = vehi2;
    }
  }
      if (Current == vehi2){
        if (row == 0){
          ShowMenuForPlayer(vehi,playerid);
          Current = vehi;
        }
        else if (row == 1){
          CreateVehicle(409, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 2){
          CreateVehicle(411, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 3){
          CreateVehicle(415, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 4){
          CreateVehicle(416, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 5){
          CreateVehicle(417, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
        }
        else if (row == 6){
          CreateVehicle(424, X, Y+2, Z, 356, 1, 1, 50);
          finish = false;
    }
      }
   }
   while(finish == true);   --> c'est ici que ça pose problème.
   
   TogglePlayerControllable(playerid,1); // On défreeze le joueur
   return 1;
}

donc voilà , j'ai fais un petit copié-collé du tutoriel des menus et j'ai un peu modifier le truc pour en afficher 2 et faire un bouton " précédent" et "suivant"
vous l'auriez remarqué  ;)

j'ai eu une bonne quinzaine d'erreur toutes, je pense corrigé .
Mais 1 perssiste :

C:\Documents and Settings\bibs\Bureau\samp02Xserver.win32\gamemodes\testt.pwn(164) : warning 213: tag mismatch
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase


1 Warning.

 j'arrive pas à trouver où est le problème :(

8
hé bien non !! il y a une erreur

public OnPlayerCommandText(playerid, cmdtext[])
{
    new Float:X;
    new Float:Y;
    new Float:Z;
    if (strcmp("/v", cmdtext, true) == 0)
   {
      GetPlayerPos(playerid, X, Y, Z);
       AddStaticVehicle(481, X, Y+2, Z, 356.9482, -1, -1);

\ ici le véhicule ne va jamais apparaitre puisse que je pense que cette fonction n'est exécuté qu'au lancement du serveur, pas pendant son fonctionnement !!

       CreateVehicle(481, X, Y+2, Z, 356, 1, 1, 50);
\ il fallait utiliser cette fonction  :happy , ^^
         return 1;
   }
   return 0;
}


j'aprend au grands singes à faire des grimaces  :jesors


je continue à apprendre et à scripter , je vous check si j'ai un problème
Merci pour votre aide  :-[

ps : je cherche toujours un tutoriel qui me présente toutes les fonctions , leur usages , leur foncionnement , etc ...   :laugh


Double post
question , question , ^^ .

Comment stoper une animation lancé avec cette fonction :

SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
j'ai esseyé :

ClearAnimations(playerid);
mais cela , ne fais que recommencer l'animation .

C'est quelle fonction alors ??  :ohmy

9
Scripting SA-MP [Pawn center] / Re : [Tuto]Apprendre a scripter
« le: 11 Juillet 2009, 12:38:26 »
merci super tuto , mais je le connais déjà  :laugh http://www.gtaonline.fr/forums/index.php?action=printpage;topic=6229.0  :lmfao

10
d'abord je m'attaque au premier problème : GetPlayerPos(playerid, X, Y, Z); est assez spécial , je trouve . On entre des variables dans la fonction : playerid X ? Y ? Z ? --> c'est pas les variables qu'il est censé nous rendre ? ^^  :lmao peut-être que le return ce trouve là  aussi ^^ j'esseye et ça marche pas :

trouvez l'erreur.
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/v", cmdtext, true, 10) == 0)
{
   GetPlayerPos(playerid, X, Y, Z);
       AddStaticVehicle(481, X, Y, Z, 356.9482, -1, -1);
   return 1;
}
return 0;
}


11
donc voilà je me présente zorglue  :king , belge  :cheers et miam de frite .
J'ai de toute petites connaissance en programmation et je me lance dans le scriptage de mod SAmp.

Je ne suit pas de tutoriel particulier , je prend un exemple de script, j'analyse , modifie et apprend !!
Donc j'ai plein de question à vous poser.

la première, j'aimerais faire apparaitre un un véhicule à coté du joueur où qu'il soit .

Pour cela, je suppose qu'il faut récupérer ses coordonnées avec la fonction -> GetPlayerPos() dans ce cas comment l'utiliser et comment stocké les coordonnées ?

Je me suis familiarisé avec un script qui m'a beaucoup aidé .
Même si je n'ai rien compris à cette partie  strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}

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

j'ai pu modifié la seconde :
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new idx;
new dancestyle;
cmd = strtok(cmdtext, idx);

// HANDSUP
  if(strcmp(cmd, "/handsup", true) == 0) {
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_HANDSUP);
    return 1;
}
}
if (strcmp(cmd, "/test", true) == 0) {
SendClientMessage(playerid,0xFF0000FF,"1 changer la grivité à 10 \n 2 changer la gravité à 20 \n 3 changer la grvité à 30" );
   if (strlen(cmd) == 1) {
   SetGravity(10);
   }
   if (strlen(cmd) == 2) {
   SetGravity(20);
   }
   if (strlen(cmd) == 3) {
   SetGravity(30);
   }
   return 1;
}

if(strcmp(cmd, "/heal", true) ==0){
            SetPlayerHealth(playerid, 100);
            SendClientMessage(playerid,0xFF0000FF,"you have been healed");
            SendClientMessageToAll(0xFF0000FF,"a poeple has been healed");
           
            return 1;
}

// SUICIDE COMMAND
  if(strcmp(cmd, "/kill", true) == 0) {
    SetPlayerHealth(playerid,0.0);
    return 1;
}

// START DANCING
  if(strcmp(cmd, "/dance", true) == 0) {
if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
    new tmp[256];

    // Get the dance style param
      tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) {
SendClientMessage(playerid,0xFF0000FF,"Usage: /dance [style 1-3]");
return 1;
}

dancestyle = strval(tmp);
if(dancestyle < 1 || dancestyle > 3) {
    SendClientMessage(playerid,0xFF0000FF,"Usage: /dance [style 1-3]");
    return 1;
}

if(dancestyle == 1) {
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE1);
} else if(dancestyle == 2) {
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE2);
} else if(dancestyle == 3) {
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_DANCE3);
}
    return 1;
}
}

return 0;

Où peut remarquer que j'ai rajouer 2 commandes : if(strcmp(cmd, "/heal", true) ==0){
            SetPlayerHealth(playerid, 100);
            SendClientMessage(playerid,0xFF0000FF,"you have been healed");
            SendClientMessageToAll(0xFF0000FF,"a poeple has been healed");
           
            return 1;
}

qui fonctionne merveille
Ici j'ai une question SendClientMessageToAll(0xFF0000FF,"a poeple has been healed"); comment mettre à la place "a poeple has been healed" le nom du joueur qui s'est soigné ??  ???

je vous laisse deviner ce code : if (strcmp(cmd, "/test", true) == 0) {
SendClientMessage(playerid,0xFF0000FF,"1 changer la grivité à 10 \n 2 changer la gravité à 20 \n 3 changer la grvité à 30" );
   if (strlen(cmd) == 1) {
   SetGravity(10);
   }
   if (strlen(cmd) == 2) {
   SetGravity(20);
   }
   if (strlen(cmd) == 3) {
   SetGravity(30);
   }
return 1;
}
je n'ai pas d'erreur lors du jeu mais ce code est-il correct ?

merci pour votre aide

@+

12
oh super bien sympathique , pour le reste je pense que je vais créer un nouvelle discussion

merci @+

13
j'ai téléchargé le serveur de samp !
Des exemples de scripts y était inclus.
Ayant de faibles connaissances en c/c++ , la plupart du code ne m'y est pas inconnu.
J'ai réussis à modifier un script pour choisir à un endroit donné la classe d'un personnage , choisir juste à coté du spawn que j'avais choisis de faire apparaitre un véhicule .
Le language C n'est malheureusement pas POO . Donc je  :wall avec toutes ces fonctions !! : :bangin ( même si il existe aussi des fonctions en C  :jesors )
j'ai aussi bien compris ceci : AddStaticVehicle(481,124.9143,100.2766,11.8594,0.0,1,1); . Le numéro 481 désigne le véhicule .
Ne connaissez -vous pas une liste de tout les véhicules avec leur numéro , cela serait pratique . Si je veux spawn une clover , je vais pas esseyer tout les nombres  :lmao . Il existe surement une liste  :rules non ?
Je cherche aussi un site en français qui peut m'expliquer toute les fonctions existantes , à quoi servent-elles ?

Le site que tu m'a donné en français, m'aide beaucoup mais malheureusement , il n'est pas encore finis.
Il n'y a pas d'index qui me donne tout les tuto . Seulement " une page au hasard " me permet d'obtenir un tutoriel .
Malheureusement je n'aime pas faire les choses au hasard ^^  :laugh

14
Bonjour,
je jouais beaucoup à San andreas en multijoueur sur toutes sortes de mods . (stunt , RPG , ... ) .
J'ai aujourd'hui une très bonne idée pour monter un serveur samp : Un " need for speed / grand turismo ".
Vous l'auriez deviné , un mod qui consiste a faire des courses de voitures et à gagner de l'argent pour acheter de nouvelles caisses , tunning , amélioration , etc ...
Le joueur pourra par la suite acheter une propriété avec un garage pour ranger ses caisses .

J'ai de toutes petites connaissances en ce qui consiste à monter un serveur mais pour ce qui est du script du mod , je n'y connait rien !! je connais le language HTML , CSS un peu de python et de c/c++ ( ce qui ne nous servira a rien ici  :hs ) .
Je ne connait rien au niveau du script du mod et je ne demande qu'à apprendre.

Si des personnes sont intéressé .. n'hésiter pas

ps : si vous connaissez un bon tutoriel COMPLET pour le scriptage SAMP .. qu'il me partage son url . :D

MERCI  :happy

Pages: [1]