Aller au contenu
News ticker
  • Bienvenue sur le nouveau forum VeryGames
  • Welcome to the new VeryGames forum
  • VeryNews

    [Gift] Finit et recherche des testeurs, idées, avis ;)


    had3s99

    Messages recommandés

    Coucou tout le monde,

     

    Ça fait quelques temps que je travaille sur mon !gift et je vous le propose à vous ! Donc veuillez me dire toutes vos idées, bugs !

     

    -- OPTIMISÉ POUR BAJAIL V6 --

     

    Bonus :

     

    Vie +/-

    USP

    Glock

    Vitesse +/-

    Mal de tête

    Rien

    Lancé de cut

    Jailvip

    Gravité +/-

    Être malade

    Droit à un autre !gift

    P'tite loterie à vous de voir si vous la laissez ^^

    Tour de magie

    Dégâts +/-

    Spy

    Regen HP

    Size +/-

    Voler de vos propres ailes

    V3.0 : Release

    V4.0 : Spy optimisé grâce à Kriax,

    Ajout : - Regen d'hp

    - Size +/-

    - Voler de vos propres ailes

    Fichier translations OK

     

    -----------------------------------------------------------------------

     

    Idées futures : Balle illimité, !respawn.

     

    -----------------------------------------------------------------------

     

    Base du plugin de dertione.

     

    Lien utile :

     

    http://s-low.net/forum/viewtopic.php?f=9&t=936&sid=5d9c7f1e5eedc831ff2d30af8b0e2f46

    http://s-low.net/forum/viewtopic.php?f=9&t=74&sid=beb3e025f95e1cc6c014ec206f6dc19a

    http://s-low.net/forum/viewtopic.php?f=11&t=1411&sid=beb3e025f95e1cc6c014ec206f6dc19a

     

    Pour le spy pensez à bien changer le skin ;)

     

    Donc voilà tout pour mon deuxième plug-in dans ce language j'espère qui vous plaira et sachez que mon orthographe n'est pas au TOP donc vous pouvez me corriger et si vous avez des idées pour améliorer le code ou des idées de bonus supplémentaire dîtes les à la suite du sujet ! :P

     

    Cordialement,

     

    Had3s99

    Gift.zip

    Modifié par had3s99
    Lien vers le commentaire
    Partager sur d’autres sites

    Gift v 3.0 car j'ai fais plein de modifs avant de le mettre tout public ! Et donc je metterai en place un changelog au sujet en fonction de vos idées !

    https://fr.wikipedia.org/wiki/Version_d'un_logiciel

     

    new g_jailvip[MAXPLAYERS+1];
    new g_spyt[MAXPLAYERS+1];
    new g_spyct[MAXPLAYERS+1];

    new bool:g_jaivip[MAXPLAYERS + 1];
    new bool:g_spyt[MAXPLAYERS + 1];
    new bool:g_spyct[MAXPLAYERS + 1];
    

    Tu peu facilement utiliser seulement une variable pour ton truc !spy, et faire une seule commande avec une vérification de team du genre :

     

    public Action:Command_spy(client, args)
    {
       if ((GetUserFlagBits(client) & ADMFLAG_CUSTOM4 || GetUserFlagBits(client) & ADMFLAG_ROOT)&&IsPlayerAlive(client))
       {
           if(g_spy[client])
           {
               if(GetClientTeam(client) == 2)
                   SetEntityModel(client, "models/player/natalya/police/chp_male_jacket.mdl");
               if(GetClientTeam(client) == 3)
                   SetEntityModel(client, "models/player/techknow/prison/leet_p.mdl");
    
               CPrintToChat(client, " {blue}[{lime}Gift{blue}]{default} Vous êtes déguisés !");
               CreateTimer(10.0, Timer_Spy, client) ;
               g_spy[client] = false;
    
               return Plugin_Handled;
           }
           else
           {
               CPrintToChat(client, " {blue}[{lime}Gift{blue}]{default} Vous n'avez pas accès à cette commande !");
               return Plugin_Handled;
           }
       }
       else
       {
           CPrintToChat(client, " {blue}[{lime}Gift{blue}]{default} Il faut être vip pour utiliser cette commande !");
           return Plugin_Handled;
       }
    } 
    
    public Action:Timer_Spy(Handle:timer, any:client)
    {
       if(GetClientTeam(client) == 3)
           SetEntityModel(client, "models/player/natalya/police/chp_male_jacket.mdl");
       if(GetClientTeam(client) == 2)
           SetEntityModel(client, "models/player/techknow/prison/leet_p.mdl");
    
       CPrintToChat(client, " {blue}[{lime}Gift{blue}]{default} Vous êtes plus déguiser !");
    }
    

     

    De-plus je vois que tu utilises des timers, les timers même si tu meurs ne sont pas stopé et donc, si tu utilses un overlay autre que ton truc de maladie, que la personne meurt et qu'elle respawn, cet autre overlay vas quand même se barrer vue que tu n'as pas stoper le timer.

    Enfin c'est la seul explication que je peu te donner dans ce cas-ci, part pas d'un principe logique, juste pense à ça à l'avenir.

     

    Tu devrais abandonné ces syntaxe et passé en programation objet et les nouvelles syntaxes de Sourcemod.

    Tu gagneras en facilité et en optimisation.

     

    Pour tes variables, utilise des boolean dans ce genre de chose ^^

    On ne l'à pas inventé pour rien, même si ça reviens au même elle ne sont pas la pour rien ^^

     

    Ah et tu tutoie le client dans certains gift et dans d'autre tu la vouvoie :)

     

    gift[color=#505050][[/color]client[color=#505050]][/color] = gift[color=#505050][[/color]client[color=#505050]][/color] [color=#505050]+[/color] [color=#008b8b]1[/color][color=#505050];[/color]

     

    Tu peu aussi faire :

     

    gift[color=#505050][[/color]client[color=#505050]][/color] [color=#505050]+=[/color] [color=#008b8b]1[/color][color=#505050];[/color]

    g_gift[client]++;

     

    et

     

    [color=#0000ff]HookEvent[/color][color=#505050]([/color][color=#c80000]"[/color][color=#c80000]player_disconnect[/color][color=#c80000]"[/color], Deco[color=#505050]);
    [/color]

     

    OnClientDisconnect
    

     

    Et enfin dernière chose qui n'est pas des moindres :

     

    [color=#0000ff]public[/color] [color=#0040e8]OnPlayerSpawn[/color][color=#505050]([/color][color=#ff0000]Handle:[/color]event, [color=#0000ff]const[/color] [color=#ff0000]String:[/color]name[color=#505050][][/color], [color=#ff0000]bool:[/color]dontBroadcast[color=#505050])[/color]
    [color=#505050]{[/color]
    [color=#ff0000]    new[/color] client = [color=#0000ff]GetClientOfUserId[/color][color=#505050]([/color][color=#0000ff]GetEventInt[/color][color=#505050]([/color]event, [color=#c80000]"[/color][color=#c80000]userid[/color][color=#c80000]"[/color][color=#505050]));[/color]
       [color=#0000ff]if[/color] [color=#505050]([/color][color=#0000ff]GetUserFlagBits[/color][color=#505050]([/color]client[color=#505050])[/color] [color=#505050]&[/color] [color=#8000ff]ADMFLAG_CUSTOM4[/color] [color=#505050]||[/color] [color=#0000ff]GetUserFlagBits[/color][color=#505050]([/color]client[color=#505050])[/color] [color=#505050]&[/color] [color=#8000ff]ADMFLAG_ROOT[/color][color=#505050])[/color]
       [color=#505050]{[/color]
           [color=#0000ff]CPrintToChat[/color][color=#505050]([/color]client, [color=#c80000]"[/color][color=#c80000] {blue}[{lime}Gift{blue}]{default} Vous pouvez taper !gift.[/color][color=#c80000]"[/color][color=#505050]);[/color]
           gift[color=#505050][[/color]client[color=#505050]][/color] = [color=#008b8b]1[/color][color=#505050];[/color]
           g_jailvip[color=#505050][[/color]client[color=#505050]][/color] = [color=#008b8b]0[/color][color=#505050];[/color]
           g_spyt[color=#505050][[/color]client[color=#505050]][/color] = [color=#008b8b]0[/color][color=#505050];[/color]
           g_spyct[color=#505050][[/color]client[color=#505050]][/color] = [color=#008b8b]0[/color][color=#505050];[/color]
           [color=#0000ff]SetEntityGravity[/color][color=#505050]([/color]client, [color=#008b8b]1.0[/color][color=#505050]);[/color]
           [color=#0000ff]ClientCommand[/color][color=#505050]([/color]client, [color=#c80000]"[/color][color=#c80000]r_screenoverlay 0[/color][color=#c80000]"[/color][color=#505050]);[/color]
       [color=#505050]}[/color]
    [color=#505050]}
    
    [color=#ff0000]public Action:[/color][color=#0040e8]Command_Gift[/color][color=#505050]([/color]client, args[color=#505050])[/color]
    [color=#505050]{[/color]
       [color=#0000ff]if[/color] [color=#505050](([/color][color=#0000ff]GetUserFlagBits[/color][color=#505050]([/color]client[color=#505050])[/color] [color=#505050]&[/color] [color=#8000ff]ADMFLAG_CUSTOM4[/color] [color=#505050]||[/color] [color=#0000ff]GetUserFlagBits[/color][color=#505050]([/color]client[color=#505050])[/color] [color=#505050]&[/color] [color=#8000ff]ADMFLAG_ROOT[/color][color=#505050])[/color] [color=#505050]&&[/color] [color=#0000ff]IsPlayerAlive[/color][color=#505050]([/color]client[color=#505050]))[/color]
       [color=#505050]{[/color]
           [color=#0000ff]if[/color] [color=#505050]([/color]gift[color=#505050][[/color]client[color=#505050]][/color] [color=#505050]>[/color] [color=#008b8b]0[/color][color=#505050])[/color]
           [color=#505050]{[/color]
    [color=#ff0000]            new[/color] bonus = [color=#0000ff]GetRandomInt[/color][color=#505050]([/color][color=#008b8b]1[/color], [color=#008b8b]210[/color][color=#505050]);[/color]
               [color=#505050]{[/color]
                   [color=#0000ff]if[/color][color=#505050]([/color]bonus[color=#505050]<[/color]=[color=#008b8b]10[/color][color=#505050])[/color]
                   [color=#505050]{[/color]
    [/color]

     

    Malgré que tu vérifies le IsPlayerAlive, tu devrais aussi vérifié que il n'est pas en spectateur, et que le joueur n'est pas invalide.

    > Tape !gift en temps que console (Hlsw ou /rcon !gift) et tu verras se que te retourneras la commande ^^

    Dans ton respawn, si le joueur "respawn" en spectateur il auras quand même la phrase de gift (Si mes souvenirs sont bon ^^)

     

    C'est une question de propreté ^^

    Modifié par Kriax
    Lien vers le commentaire
    Partager sur d’autres sites

    Ici on vois clairement que tu as repris les codes du VipMenu et ce n'est pas quelque chose que tu devrais faire et je vais t'en expliquer les raisons.

    Comment je le sais:

    La nomenclature des variables ne trompe jamais ^^

    new gift[MAXPLAYERS+1];
    new g_jailvip[MAXPLAYERS+1];
    new g_spy[MAXPLAYERS+1];
    
    new bool:g_Fly[MAXPLAYERS+1] = {false, ...};
    
    new g_iHealthLimit;
    new g_iHealthRegen;
    
    new Handle:g_hTimerRegen[MAXPLAYERS+1] = {INVALID_HANDLE, ...};
    new Handle:pub;
    
    new Float:Vecteur[MAXPLAYERS+1];
    new Float:g_fSizeOK;
    new Float:g_fSizeUp;
    new Float:g_fSizeDown;
    new Float:g_fSizeFly;
    

     

    De-plus tu utilises des bous de code n'importe comment ET DONC on vois clairement que tu ne comprends pas leur sens, asse pour avoir totalement fais du n'importe quoi.

    else if (bonus<=230)
    {
       CPrintToChat(client, " %s %t", LOGO, "RegenHP");
       new Float:g_fIntervalRegen;
       new Handle:hKv = CreateKeyValues("Regeneration");
       g_fIntervalRegen = KvGetFloat(hKv, "interval_regen", 3.0);
       g_iHealthLimit = KvGetNum(hKv, "health_limit", 100);
       g_iHealthRegen = KvGetNum(hKv, "health_regen", 3);
       g_hTimerRegen[client] = CreateTimer(g_fIntervalRegen, Timer_Regen, client, TIMER_REPEAT);
       gift[client]--;
       return Plugin_Handled;
    }
    

     

    Ici tu viens chercher des keyvalues, sauf que tu ne les utilises pas réellement, tout çe que ca vas aller retourner dans ta variable c'est la valeur par défaut.

    En réalité, dans le VipMenu les kv sont utiliser pour aller lire dans un fichier de config, et ici t'as fais réellement du n'importe quoi.

     

    Je me suis arrêter ici dans la source pour t'expliquer.

    Je ne vais pas venir crier au Plagia mdr' j'ai commencer comme ça aussi, et je le répète comme énormément d'autre personne.

     

    Copié un plugin c'est pas réellement grave, mais si tu ne le comprends pas et que ça marche juste par principe il n'y à pas d'intérêt à faire du dev ^^

    Que ce sois du Web, sur Android (Java, ...) ou tout simplement un simple programme.

     

    Pour réellement apprendre à faire du dev dans n'importe quel language il faut d'abord comprendre son principe.

     

    C'est pareil dans n'importe quel domaine.

    Je vais prendre la musique comme domaine vue que tu me connais plus que les autres.

    Je pense que tu m'as déjà entendu faire de la guitare ou de la basse sur Teamspeak.

    En jouer n'est pas difficile, tu peu apprendre une chanson par coeur mais si tu ne sais pas quel accord tu joues ou quel nottes ou en est l'intérêt ?

     

    Dans ce genre d'instrument tu as les partitions (Notte de musique DO - RE - MI - ...) et les tablatures (Lignes avec les cases à jouer).

    Personnellement je fais les deux, car le solfège est la clef de la musique et la comprhenssion.

     

    C'est pareil pour le dev, la structure est la base et si tu ne la comprend pas, tu n'avanceras pas ^^

    Tu devrais prenser à voir un peu plus en profondeur et je te l'ai dit, n'hésite pas à poser des questions, je suis la pour ça.

     

    Kriax.

    Lien vers le commentaire
    Partager sur d’autres sites

    Oui je suis d'accord avec toi mais je t'ai demandé par MP si je pouvais reprendre tes syntaxes de codes que t'as publié et tu m'as donné l'accord et pour l'histoire de ne pas avoir tout compris je te rejoins sur tes syntaxes que j'ai été paumé ! ^^ Hkv je sais pas ce que c'est j'ai pas trop compris ce principe ça doit être le keyvalues que tu parles alors ? Mais pourquoi ta première citation ? Je comprends pas OK regenhp+ size mais les autres ils font quoi là ? ^^ Mauvaise utilisation ?

    Lien vers le commentaire
    Partager sur d’autres sites

    Je tiens juste à te précisé que c'est pas un coup de gueule et que je sais que je t'ai donne "mon accord" même si t'en à pas réellement besoin.

     

    Je te montre mais ne t'explique pas réellement, tu devrais te pencher plus vers les bases du SP et évité les kv pour le moment.

     

    Ici je déclare mes variables, jusque la rien de compliquer.

    new Handle:g_hTimerRegen[MAXPLAYERS+1] = {INVALID_HANDLE, ...};
    
    new Float:g_fIntervalRegen;
    
    new g_iHealthLimit;
    new g_iHealthRegen;
    

    Et ici c'est mon fichier de configuration.

    public Load_RegenerationConfig()
    {
       new Handle:hKv = CreateKeyValues("Regeneration");
    
       decl String:sPath[PLATFORM_MAX_PATH];
       BuildPath(Path_SM, sPath, sizeof(sPath), "configs/vipmenu/regeneration.cfg");
    
       if (!FileToKeyValues(hKv, sPath)) 
       {
           CloseHandle(hKv);
           SetFailState("Impossible de lire le fichier %s", sPath);
       }
    
       g_fIntervalRegen = KvGetFloat(hKv, "interval_regen", 3.0);
       g_iHealthLimit = KvGetNum(hKv, "health_limit", 100);
       g_iHealthRegen = KvGetNum(hKv, "health_regen", 1);
    
       CloseHandle(hKv);
    }
    

     

    Le fichier se trouve dans configs/vipmenu/regeneration.cfg

    Tu peu voir que ici je reprend la valeur des kv "KvGetNum pour les integer, KvGetFloat pour les float, ...).

    Et bien cela sert simplement à aller chercher la valeur dans le fichier de configuration:

     

    "Regeneration"
    {
       "interval_regen"            "2.0"
       "health_limit"    "100"
       "health_regen"    "1"
    }
    

    Ton gift fonctionne car le troisième argument est la veleur par défaut mais n'iras pas reprendre la valeur dans un fichier car toi tu n'en n'as pas.

     

    Encore une fois je te donne des explications simple avec des mots simple pour que tu comprennes, mais tu devrais évité ce genre de chose, surtout que tu ne les comprends pas encore et donc ne sais pas encore les utilisés ^^

    Lien vers le commentaire
    Partager sur d’autres sites

    Bah j'essayais de comprendre même si s’étaie du c/c ^^"

    Le Sourcepawn c'est pas le premier langage que j'ai fais tu sais, j'avais déjà quelques notions par ci par la ^^ puis papa Kriax qui fais du dev, de la sécu réseaux et de la domotique et qu'il t'explique se qu'il fais et que t'en à rien à foutre, ça aidais quand t'étais petit mdr'

     

    Re-essaie de faire ton Gift, de zéro sans copier/coller, ce n'est qu'un principe logique, ^^

    Lien vers le commentaire
    Partager sur d’autres sites

    Bâ sans te le cacher c'est ton truc de regenhp que je suis perdu ^^ mais après moi j'ai aucune base ... Donc rien C/C++ SQL HTML PHP rien de tout ça ^^ et je vais apprendre ces langages dans 2-3ans logiquement mais je connaissais ton parcours professionnel tu m'en avais déjà parler ^^ :) Et moi aussi j'essaie de comprendre mais comme je t'ai dis dans mon code j'ai tout compris de ce que j'ai mis sauf quand il y a ce hkv :X

    Lien vers le commentaire
    Partager sur d’autres sites

    Bâ si tu préfères je connais la base de la lang les if else utilisation d'un include restriction T/CT, commande pour tel flag etc ^^ après les trucs hors basique du style regenhp size je ne connais pas les syntaxes et je sais pas comment les créer soient même si tu vois ce que je veux dire ^^

    Lien vers le commentaire
    Partager sur d’autres sites

    Je t'explique comment faire un regen, ensuite le reste de se que tu auras envie de faire est une suite logique.

    Par exemple, quand tu veux boir quelque choses dans ta tête tu te dit

     

     

    • Je dois prendre un verre et verser ma boisson dans le verre.

     

    Et c'est la logique que tout le monde à, maintenant la logique qu'un dev dois avoir c'est :

     

     

    • Je m'avance vers mon armoir
    • J'ouvre mon armoir
    • Je tend mon bras
    • Je prend mon verre
    • Je ferme mon avoir
    • Je prend ma boisson
    • Je retire le bouchon
    • Je verse dans le verre
    • Je remet le bouchon
    • Je range la boisson
    • Je met le verre pres de ma bouche
    • J'avale la boisson
    • Je dépose le verre

     

    Tu vois facilement la différence, en gros et bien c'est ça.

    Pour la rénération d'HP par exemple et bien ce n'est pas compliquer.

     

     

    • Je choisis les HP à pas dépasse
    • Je choisis les HP à regen
    • Je choisis l'interval de temps

     

    Ici c'est simplement la logique des premières chose de ton code.

    #Je vais utiliser des define pour que tu vois plus facilement.

     

    #define MAX_HP 150
    #define REGEN_HP 1
    #define REGEN_TIME 1.0
    

     

    Voilà, ici tu peu avoir une regen jusque 150HP, un hp toute les secondes.

    Maintenant il faut pouvoir mettre en application ces trois defines.

     

    - Le joueur respawn, je créé un timer de la valeur de ma define

    - Dans ce timer je vérifie que ses HP ne sont pas suppérieur à la valeur de MAX_HP

    - Si c'est le cas je donne la valer de REGEN_HP

     

    Et tu dois avoir le mode opératoir petit à petit dans ta tête du genre :

     

    - Au respawn je créé un timer pour le client

    - ...

    - ...

    - Quand il meurt je tue le timer et ça te donneras un truc du genre

    Handle g_hTimer[MAXPLAYERS+1]
    
    ...
    
    g_hTimer[client] = CreateTimer(REGEN_TIME, Timer_Regen, client, TIMER_REPEAT);
    
    ...
    
    public Action Timer_Regen(Handle timer, int client)
    {
       if(GetClientHealth(client) < MAX_HP)
           SetEntityHealth(client, GetClientHealth(client) + REGEN_HP)
    }
    
    ...
    
    KillTimer(g_hTimer[client]);
    

     

    En gros ça donne ça, tu dois avoir la logique pour pouvoir faire se que tu as envie.

    Au fil du temps, elle va se dévellopé et quand tu penseras à faire un truc, tu vas pouvoir penser à ton code sans le taper, et aussi à comment le structuré.

     

    Si tu fais des trucs de vitesse, d'HP et tout le tralala et que tu vois grands pour ton Gift, tu peu aussi faire des objets (Syntaxe 1.7) et la tu auras encore plus facile pour dev :)

     

    Kriax.

    Lien vers le commentaire
    Partager sur d’autres sites

    Rejoindre la conversation

    Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

    Invité
    Répondre à ce sujet…

    ×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

      Seulement 75 émoticônes maximum sont autorisées.

    ×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

    ×   Votre contenu précédent a été rétabli.   Vider l’éditeur

    ×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

    ×
    ×
    • Créer...