1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

En cours Skin Admin visible quand tag Admin présent dans le pseudo

Discussion dans 'Suggestions / Modifications / Demandes de plugins' démarrée par Leetchee, 5 Octobre 2012.

Tags:
  1. Leetchee

    Leetchee Membre

    Bonjour à tous,

    J'utilise sur mon serveur un plugin codé par Connor pour gérer les skins (que ce soit aussi bien les skins admin que les skins joueurs). Ce plugin me convient parfaitement car il prend en charge les fichiers T.mdl présents de plus en plus souvent dans les skins.

    J'aimerais toutefois votre aide pour apporter une légère modification dessus :

    J'aimerais que le skin Admin apparaisse uniquement quand mes Admins ont leur tag dans leur pseudo.
    Notre tag Admin est le suivant : [F.B.I.]

    Exemple :
    Si je suis en Leetchee, j'aurai le skin classique des joueurs.
    Si je suis en [F.B.I.] Leetchee, j'aurai mon skin Admin.

    Est ce que cette modification serait réalisable ? Il y a quelques mois, j'avais fait la demande sur le forum AlliedModders, mais les codes que l'on m'a proposés n'ont jamais fonctionné.
    Sur l'ancien serveur où j'étais co-admin, un serveur amx 2006, nous avions accès à cette fonctionnalité.

    En vous remerciant par avance.

    Voici le code du plugin de Connor :

    Code (Text):
    /*    Formatright © 2009, ConnorMcLeod
     
        Players Models is free software;
        you can redistribute it and/or modify it under the terms of the
        GNU General Public License as published by the Free Software Foundation.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
     
        You should have received a copy of the GNU General Public License
        along with Players Models; if not, write to the
        Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        Boston, MA 02111-1307, USA.
    */
     
    // #define SET_MODELINDEX
     
    #include <amxmodx>
    #include <fakemeta>
     
    #define VERSION "1.3.1"
     
    #define SetUserModeled(%1)        g_bModeled |= 1<<(%1 & 31)
    #define SetUserNotModeled(%1)        g_bModeled &= ~( 1<<(%1 & 31) )
    #define IsUserModeled(%1)        ( g_bModeled &  1<<(%1 & 31) )
     
    #define SetUserConnected(%1)        g_bConnected |= 1<<(%1 & 31)
    #define SetUserNotConnected(%1)        g_bConnected &= ~( 1<<(%1 & 31) )
    #define IsUserConnected(%1)        ( g_bConnected &  1<<(%1 & 31) )
     
    #define MAX_MODEL_LENGTH    16
    #define MAX_AUTHID_LENGTH 25
     
    #define MAX_PLAYERS    32
     
    #define ClCorpse_ModelName 1
    #define ClCorpse_PlayerID 12
     
    #define m_iTeam 114
    #define g_ulModelIndexPlayer 491
    #define fm_cs_get_user_team_index(%1)    get_pdata_int(%1, m_iTeam)
     
    new const MODEL[] = "model";
    new g_bModeled;
    new g_szCurrentModel[MAX_PLAYERS+1][MAX_MODEL_LENGTH];
     
    new Trie:g_tTeamModels[2];
    new Trie:g_tModelIndexes;
    new Trie:g_tDefaultModels;
     
    new g_szAuthid[MAX_PLAYERS+1][MAX_AUTHID_LENGTH];
    new g_bPersonalModel[MAX_PLAYERS+1];
     
    new g_bConnected;
     
    public plugin_init()
    {
        register_plugin("Players Models", VERSION, "ConnorMcLeod");
     
        register_forward(FM_SetClientKeyValue, "SetClientKeyValue");
        register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse");
    }
     
    public plugin_precache()
    {
        new szConfigFile[128];
        get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
        format(szConfigFile, charsmax(szConfigFile), "%s/players_models.ini", szConfigFile);
     
        new iFile = fopen(szConfigFile, "rt");
        if( iFile )
        {
            new const szDefaultModels[][] = {"", "urban", "terror", "leet", "arctic", "gsg9",
                        "gign", "sas", "guerilla", "vip", "militia", "spetsnaz" };
            g_tDefaultModels = TrieCreate();
            for(new i=1; i<sizeof(szDefaultModels); i++)
            {
                TrieSetCell(g_tDefaultModels, szDefaultModels[i], i);
            }
     
            g_tModelIndexes = TrieCreate();
     
            g_tTeamModels[0] = TrieCreate();
            g_tTeamModels[1] = TrieCreate();
     
            new szDatas[70], szRest[40], szKey[MAX_AUTHID_LENGTH], szModel1[MAX_MODEL_LENGTH], szModel2[MAX_MODEL_LENGTH];
            while( !feof(iFile) )
            {
                fgets(iFile, szDatas, charsmax(szDatas));
                trim(szDatas);
                if(!szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
                {
                    continue;
                }
     
                parse(szDatas, szKey, charsmax(szKey), szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
     
                if( TrieKeyExists(g_tDefaultModels, szKey) )
                {
                    if( szModel1[0] && !equal(szModel1, szKey) && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tDefaultModels, szKey, szModel1);
                    }
                }
                else if( equal(szKey, "STEAM_", 6) || equal(szKey, "BOT") )
                {
                    parse(szRest, szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
                    if( szModel1[0] && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tTeamModels[1], szKey, szModel1);
                    }
                    if( szModel2[0] && PrecachePlayerModel(szModel2) )
                    {
                        TrieSetString(g_tTeamModels[0], szKey, szModel2);
                    }
                }
            }
            fclose( iFile );
        }
    }
     
    PrecachePlayerModel( const szModel[] )
    {
        if( TrieKeyExists(g_tModelIndexes, szModel) )
        {
            return 1;
        }
     
        new szFileToPrecache[64];
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel);
        if( !file_exists( szFileToPrecache ) && !TrieKeyExists(g_tDefaultModels, szModel) )
        {
            return 0;
        }
     
        TrieSetCell(g_tModelIndexes, szModel, precache_model(szFileToPrecache));
     
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%st.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%sT.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
     
        return 1;
    }
     
    public plugin_end()
    {
        TrieDestroy(g_tTeamModels[0]);
        TrieDestroy(g_tTeamModels[1]);
        TrieDestroy(g_tModelIndexes);
        TrieDestroy(g_tDefaultModels);
    }
     
    public client_authorized( id )
    {
        get_user_authid(id, g_szAuthid[id], MAX_AUTHID_LENGTH-1);
     
        for(new i=1; i<=2; i++)
        {
            if( TrieKeyExists(g_tTeamModels[2-i], g_szAuthid[id]) )
            {
                g_bPersonalModel[id] |= i;
            }
            else
            {
                g_bPersonalModel[id] &= ~i;
            }
        }
    }
     
    public client_putinserver(id)
    {
        if( !is_user_hltv(id) )
        {
            SetUserConnected(id);
        }
    }
     
    public client_disconnect(id)
    {
        g_bPersonalModel[id] = 0;
        SetUserNotModeled(id);
        SetUserNotConnected(id);
    }
     
    public SetClientKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
    {
        if( equal(szKey, MODEL) && IsUserConnected(id) )
        {
            new iTeam = fm_cs_get_user_team_index(id);
            if( 1 <= iTeam <= 2 )
            {
                new szSupposedModel[MAX_MODEL_LENGTH];
     
                if( g_bPersonalModel[id] & iTeam )
                {
                    TrieGetString(g_tTeamModels[2-iTeam], g_szAuthid[id], szSupposedModel, charsmax(szSupposedModel));
                }
                else
                {
                    TrieGetString(g_tDefaultModels, szValue, szSupposedModel, charsmax(szSupposedModel));
                }
     
                if( szSupposedModel[0] )
                {
                    if(    !IsUserModeled(id)
                    ||    !equal(g_szCurrentModel[id], szSupposedModel)
                    ||    !equal(szValue, szSupposedModel)    )
                    {
                        copy(g_szCurrentModel[id], MAX_MODEL_LENGTH-1, szSupposedModel);
                        SetUserModeled(id);
                        set_user_info(id, MODEL, szSupposedModel);
                    #if defined SET_MODELINDEX
                        new iModelIndex;
                        TrieGetCell(g_tModelIndexes, szSupposedModel, iModelIndex);
                    //    set_pev(id, pev_modelindex, iModelIndex); // is this needed ?
                        set_pdata_int(id, g_ulModelIndexPlayer, iModelIndex);
                    #endif
                        return FMRES_SUPERCEDE;
                    }
                }
     
                if( IsUserModeled(id) )
                {
                    SetUserNotModeled(id);
                    g_szCurrentModel[id][0] = 0;
                }
            }
        }
        return FMRES_IGNORED;
    }
     
    public Message_ClCorpse()
    {
        new id = get_msg_arg_int(ClCorpse_PlayerID);
        if( IsUserModeled(id) )
        {
            set_msg_arg_string(ClCorpse_ModelName, g_szCurrentModel[id]);
        }
    }
     
    Tags:
  2. Arkshine

    Arkshine Le Docteur

    Je suppose que tu peux tenter de remplacer :

    Code (C):
        if( equal(szKey, MODEL) && IsUserConnected(id) )
        {
    par

    Code (C):
        if( equal(szKey, MODEL) && IsUserConnected(id) )
        {
            static const tag[] = "[F.B.I.]";
           
            if( is_user_admin( id ) && !equal( szKey, tag, charsmax( tag ) ) )
            {
                return FMRES_IGNORED;
            }
     
  3. Leetchee

    Leetchee Membre

    Merci Arkshine et bravo pour la rapidité.

    Je teste ceci et je vous tiens au courant :) 
    --- Message fusionné : 7 Octobre 2012 ---
    Re bonjour,

    J'ai essayé et il y a eu une erreur de compilation :

    - En local, le .amxx n'est jamais apparu

    - Avec le compilateur en ligne, ça m'a marqué ceci :
    Your plugin failed to compile! Read the errors below:
    Welcome to the AMX Mod X 1.8.1-300 Compiler.
    Copyright (c) 1997-2006 ITB CompuPhase, AMX Mod X Team

    /tmp/text3YiM2n.sma(202) : error 017: undefined symbol "is_user_admin"

    1 Error.
    Could not locate output file /home/groups/amxmodx/public_html/websc3/text3YiM2n.amx (compile failed).

    Avez vous une idée de pourquoi ?
     
  4. Arkshine

    Arkshine Le Docteur

    Faut rajouter #include <amxmisc> ; oublié de le signaler.
     
  5. Leetchee

    Leetchee Membre

    Re Bonsoir,

    J'ai essayé, avec cette modification le plugin se compile.

    Il me supprime bien le skin quand je n'ai pas le tag Admin, par contre il ne me le rajoute pas quand je modifie mon nom en [F.B.I.] Pseudo.

    SI ça peut aider, voici le sma du plugin que l'on utilisait sur le serveur en question.

    Code (Text):
    // Corrigé par XXXX pour que le skin s'enlève en cas de suppression de la souris dans le pseudo
     
    #include <amxmod>
    #include <VexdUM>
    #include <Vexd_Utilities>
    #include <fun>
     
    public plugin_init() {
    register_plugin("AMX Admin Model", "1.1.1", "whitemike") //modifie par XXXX pour l'ajout de la notion de coadmin
    register_event("ResetHUD", "resetHud", "b")
    }
     
    public plugin_precache() {
    precache_model("models/player/admintest2_ct/admintest2_ct.mdl")
    precache_model("models/player/admintest2_te/admintest2_te.mdl")
    precache_model("models/player/coadmintest_ct/coadmintest_ct.mdl") //ajout des models coadmins
    precache_model("models/player/coadmintest_te/coadmintest_te.mdl")
    }
     
    public resetHud(id) {
    set_task(0.2, "resetModel", id)
    set_task(0.4, "resetcoModel", id + 122)
    }
     
    public resetModel(id) { //modele d'admin
     
        if (get_user_flags(id) & ADMIN_LEVEL_F)
        {
            new name[32]
            get_user_name(id,name,31)
           
    if (!(containi(name,"~(^^^^>") == -1))  // identifie le tag d'un admin
        {
                new userTeam = get_user_team(id)
                if (userTeam == 1)
                {
                    CS_SetModel(id, "admintest2_te")
                }
                else if (userTeam == 2)
                {
                    CS_SetModel(id, "admintest2_ct")
                }
        }
    else
                {
                    CS_ClearModel(id)              
                }
           
        }
        return PLUGIN_CONTINUE
    }
     
     
    public resetcoModel(id) { //modele coadmin
    id = id - 122
        if (get_user_flags(id) & ADMIN_LEVEL_E)
        {
            new name[32]
            get_user_name(id,name,31)
        if (!(containi(name,"~(^^^^>") == -1))  // identifie le tag d'un coadmin
        {
                new userTeam = get_user_team(id)
                if (userTeam == 1)
                {
                    CS_SetModel(id, "coadmintest_te")
                }
                else if (userTeam == 2)
                {
                    CS_SetModel(id, "coadmintest_ct")
                }
        }
        else
                {
                    CS_ClearModel(id)              
                }
           
        }
        return PLUGIN_CONTINUE
    }
     
     
  6. Arkshine

    Arkshine Le Docteur

    Tu mélanges les problèmes et les plugins. Si t'as un nouveau problème, créé un nouveau sujet. C'est plus clair pour tout le monde.
    Surtout que là, utiliser un plugin AMX, alors que tu utilisais le plugin de Connor et pour AMXX, c'est un peu n'importe quoi, et je suis personnellement largué. Va falloir t'expliquer clairement, et si ça concerne un problème qui n'est pas en rapport avec le sujet actuel, tu crées une nouvelle discussion.
     
  7. Leetchee

    Leetchee Membre

    Je ne vois pas en quoi ce n'est pas clair.

    Mon problème est toujours le même :

    J'aimerais que le plugin que j'utilise et que Connor a fait soit modifié pour que le skin Admin apparaisse uniquement quand nous avons le tag Admin dans le pseudo.

    Tu m'as donné un code que j'ai compilé, essayé et qui ne fonctionne pas.

    En conséquence, j'ai posté le code AMX que nous utilisions avant au cas où ça te donne une idée pour celui AMXX.

    Perso je n'y connais rien de rien en programmation, c'est pour ça que je m'en remets à vous car je sais que toi et Connor avez codé de super plugins, et que vous êtes toujours prêt à aider les gens.

    Il m'est arrivé de recoder des plugins simples AMX en AMXX; ces derniers fonctionnent parfaitement, donc je me suis dis que peut être il y aurait quelque chose d'intéressant dans le code que j'ai posté et qui pourrait t'aider.

    J'ai mis juste le code AMX au cas où ça puisse te donner une piste. Il est bien entendu évident que je ne compte pas remplacer le plugin de Connor par celui AMX.
     
    Dernière édition: 9 Octobre 2012
  8. Arkshine

    Arkshine Le Docteur

    J'ai lu trop vite, car en diagonale. Je comprends maintenant après relecture.
    Je pensais que tu utilisais les 2 plugins en même temps, et je ne comprenais plus rien. :confused2: 

    Ce que tu demandes c'est un changement immédiat.

    Ca a marché dans le premier cas car tu as sûrement testé quand tu t'es connecté. Dans l'autre cas, ca marche si tu te reconnectes (tu peux tester ça se mettra à jour).
    Car dans les 2 cas, la fonction va être appelé que si l'info "model" est utilisé sur le client.

    Je suppose que si tu veux un changement immédiat, va falloir vérifier quand changement de nom a lieu.
    Je regarderais plus tard, sauf si te reconnecter est suffisant pour toi.
     
  9. Leetchee

    Leetchee Membre

    Désolé, j'ai relu mon post et je n'ai pas été clair non plus. Je parlais "du serveur en question" sans re-préciser qu'il s'agissait de celui qui tournait en AMX 2006.

    Oui, tout à fait, j'aurai aimé un changement immédiat. Désolé Arkshine, j'ai oublié de le préciser.

    Si tu as moyen de le modifier pour un changement immédiat, ça serait absolument parfait.

    Autre précision que je n'ai pas donné avant, je ne sais pas si elle a une importance : Ce même plugin me sert également à donner un Skin spécial aux financeurs du serveur.

    La modification apportée aura t'elle une influence sur les skins des financeurs ?
     
  10. Arkshine

    Arkshine Le Docteur

    En supposant que tu repartes sur la version non-modifiée du plugin :
    • En dessous de #include <amxmodx>, rajoutes #include <amxmisc> ;
    • En dessous de : new const MODEL[] = "model";, rajoutes : new const NAME[] = "name"; ;
    • Remplaces
      Code (C):
          if( equal(szKey, MODEL) && IsUserConnected(id) )
          {
      par
      Code (C):
          if( IsUserConnected(id) )
          {
              if( equal( szKey, NAME ) )
              {
                  static const tag[] = "[F.B.I.]";
                 
                  if( is_user_admin( id ) )
                  {
                      if( !equal( szValue, tag, charsmax( tag ) ) )
                      {
                          new oldModel[32];
                         
                          get_user_info( id, MODEL, oldModel, charsmax( oldModel ) );
                          set_user_info( id, MODEL, oldModel );
                         
                          return FMRES_IGNORED;
                      }
                  }
                  else
                  {
                      return FMRES_IGNORED;
                  }
              }
              else if( !equal( szKey, MODEL ) )
              {
                  return FMRES_IGNORED;
              }
    Ca devrait faire ce que tu demandes. :) 
     
  11. ConnorMcLeod

    ConnorMcLeod Modérateur

    Remplace FMRES_SUPERCEDE par FMRES_IGNORED et ça devrait fonctionner mieux.
     
  12. Arkshine

    Arkshine Le Docteur

    Ah oui merde, c'est "name" et pas "model". :footinmouth: 
     
  13. Leetchee

    Leetchee Membre

    Donc si je ne me suis pas trompé, ça donnerait ça :

    J'ai testé le plugin après compilation du sma et ça ne fonctionne pas. Je me suis co sans le tag et j'ai le skin malgré tout

    Code (Text):
    /*    Formatright © 2009, ConnorMcLeod
     
        Players Models is free software;
        you can redistribute it and/or modify it under the terms of the
        GNU General Public License as published by the Free Software Foundation.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
     
        You should have received a copy of the GNU General Public License
        along with Players Models; if not, write to the
        Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        Boston, MA 02111-1307, USA.
    */
     
    // #define SET_MODELINDEX
     
    #include <amxmodx>
    #include <amxmisc>
    #include <fakemeta>
     
    #define VERSION "1.3.1"
     
    #define SetUserModeled(%1)        g_bModeled |= 1<<(%1 & 31)
    #define SetUserNotModeled(%1)        g_bModeled &= ~( 1<<(%1 & 31) )
    #define IsUserModeled(%1)        ( g_bModeled &  1<<(%1 & 31) )
     
    #define SetUserConnected(%1)        g_bConnected |= 1<<(%1 & 31)
    #define SetUserNotConnected(%1)        g_bConnected &= ~( 1<<(%1 & 31) )
    #define IsUserConnected(%1)        ( g_bConnected &  1<<(%1 & 31) )
     
    #define MAX_MODEL_LENGTH    16
    #define MAX_AUTHID_LENGTH 25
     
    #define MAX_PLAYERS    32
     
    #define ClCorpse_ModelName 1
    #define ClCorpse_PlayerID 12
     
    #define m_iTeam 114
    #define g_ulModelIndexPlayer 491
    #define fm_cs_get_user_team_index(%1)    get_pdata_int(%1, m_iTeam)
     
    new const MODEL[] = "model";
    new const NAME[] = "name";
    new g_bModeled;
    new g_szCurrentModel[MAX_PLAYERS+1][MAX_MODEL_LENGTH];
     
    new Trie:g_tTeamModels[2];
    new Trie:g_tModelIndexes;
    new Trie:g_tDefaultModels;
     
    new g_szAuthid[MAX_PLAYERS+1][MAX_AUTHID_LENGTH];
    new g_bPersonalModel[MAX_PLAYERS+1];
     
    new g_bConnected;
     
    public plugin_init()
    {
        register_plugin("Players Models", VERSION, "ConnorMcLeod");
     
        register_forward(FM_SetClientKeyValue, "SetClientKeyValue");
        register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse");
    }
     
    public plugin_precache()
    {
        new szConfigFile[128];
        get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
        format(szConfigFile, charsmax(szConfigFile), "%s/players_models.ini", szConfigFile);
     
        new iFile = fopen(szConfigFile, "rt");
        if( iFile )
        {
            new const szDefaultModels[][] = {"", "urban", "terror", "leet", "arctic", "gsg9",
                        "gign", "sas", "guerilla", "vip", "militia", "spetsnaz" };
            g_tDefaultModels = TrieCreate();
            for(new i=1; i<sizeof(szDefaultModels); i++)
            {
                TrieSetCell(g_tDefaultModels, szDefaultModels[i], i);
            }
     
            g_tModelIndexes = TrieCreate();
     
            g_tTeamModels[0] = TrieCreate();
            g_tTeamModels[1] = TrieCreate();
     
            new szDatas[70], szRest[40], szKey[MAX_AUTHID_LENGTH], szModel1[MAX_MODEL_LENGTH], szModel2[MAX_MODEL_LENGTH];
            while( !feof(iFile) )
            {
                fgets(iFile, szDatas, charsmax(szDatas));
                trim(szDatas);
                if(!szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
                {
                    continue;
                }
     
                parse(szDatas, szKey, charsmax(szKey), szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
     
                if( TrieKeyExists(g_tDefaultModels, szKey) )
                {
                    if( szModel1[0] && !equal(szModel1, szKey) && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tDefaultModels, szKey, szModel1);
                    }
                }
                else if( equal(szKey, "STEAM_", 6) || equal(szKey, "BOT") )
                {
                    parse(szRest, szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
                    if( szModel1[0] && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tTeamModels[1], szKey, szModel1);
                    }
                    if( szModel2[0] && PrecachePlayerModel(szModel2) )
                    {
                        TrieSetString(g_tTeamModels[0], szKey, szModel2);
                    }
                }
            }
            fclose( iFile );
        }
    }
     
    PrecachePlayerModel( const szModel[] )
    {
        if( TrieKeyExists(g_tModelIndexes, szModel) )
        {
            return 1;
        }
     
        new szFileToPrecache[64];
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel);
        if( !file_exists( szFileToPrecache ) && !TrieKeyExists(g_tDefaultModels, szModel) )
        {
            return 0;
        }
     
        TrieSetCell(g_tModelIndexes, szModel, precache_model(szFileToPrecache));
     
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%st.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%sT.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
     
        return 1;
    }
     
    public plugin_end()
    {
        TrieDestroy(g_tTeamModels[0]);
        TrieDestroy(g_tTeamModels[1]);
        TrieDestroy(g_tModelIndexes);
        TrieDestroy(g_tDefaultModels);
    }
     
    public client_authorized( id )
    {
        get_user_authid(id, g_szAuthid[id], MAX_AUTHID_LENGTH-1);
     
        for(new i=1; i<=2; i++)
        {
            if( TrieKeyExists(g_tTeamModels[2-i], g_szAuthid[id]) )
            {
                g_bPersonalModel[id] |= i;
            }
            else
            {
                g_bPersonalModel[id] &= ~i;
            }
        }
    }
     
    public client_putinserver(id)
    {
        if( !is_user_hltv(id) )
        {
            SetUserConnected(id);
        }
    }
     
    public client_disconnect(id)
    {
        g_bPersonalModel[id] = 0;
        SetUserNotModeled(id);
        SetUserNotConnected(id);
    }
     
    public SetClientKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
    {
        if( IsUserConnected(id) )
        {
            if( equal( szKey, NAME ) )
            {
                static const tag[] = "[F.B.I.]";
               
                if( is_user_admin( id ) )
                {
                    if( !equal( szValue, tag, charsmax( tag ) ) )
                    {
                        new oldModel[32];
                       
                        get_user_info( id, MODEL, oldModel, charsmax( oldModel ) );
                        set_user_info( id, MODEL, oldModel );
                       
                        return FMRES_IGNORED;
                    }
                }
                else
                {
                    return FMRES_IGNORED;
                }
            }
            else if( !equal( szKey, MODEL ) )
            {
                return FMRES_IGNORED;
            }
            new iTeam = fm_cs_get_user_team_index(id);
            if( 1 <= iTeam <= 2 )
            {
                new szSupposedModel[MAX_MODEL_LENGTH];
     
                if( g_bPersonalModel[id] & iTeam )
                {
                    TrieGetString(g_tTeamModels[2-iTeam], g_szAuthid[id], szSupposedModel, charsmax(szSupposedModel));
                }
                else
                {
                    TrieGetString(g_tDefaultModels, szValue, szSupposedModel, charsmax(szSupposedModel));
                }
     
                if( szSupposedModel[0] )
                {
                    if(    !IsUserModeled(id)
                    ||    !equal(g_szCurrentModel[id], szSupposedModel)
                    ||    !equal(szValue, szSupposedModel)    )
                    {
                        copy(g_szCurrentModel[id], MAX_MODEL_LENGTH-1, szSupposedModel);
                        SetUserModeled(id);
                        set_user_info(id, MODEL, szSupposedModel);
                    #if defined SET_MODELINDEX
                        new iModelIndex;
                        TrieGetCell(g_tModelIndexes, szSupposedModel, iModelIndex);
                    //    set_pev(id, pev_modelindex, iModelIndex); // is this needed ?
                        set_pdata_int(id, g_ulModelIndexPlayer, iModelIndex);
                    #endif
                        return FMRES_SUPERCEDE;
                    }
                }
     
                if( IsUserModeled(id) )
                {
                    SetUserNotModeled(id);
                    g_szCurrentModel[id][0] = 0;
                }
            }
        }
        return FMRES_IGNORED;
    }
     
    public Message_ClCorpse()
    {
        new id = get_msg_arg_int(ClCorpse_PlayerID);
        if( IsUserModeled(id) )
        {
            set_msg_arg_string(ClCorpse_ModelName, g_szCurrentModel[id]);
        }
    }
     
  14. Arkshine

    Arkshine Le Docteur

    Normal, j'ai en fait oublié de remettre la vérif initial pour le model, mouarf. :p 

    Remplace else if( !equal( szKey, MODEL ) par else if( !equal( szKey, MODEL ) || ( is_user_admin( id ) && !equal( szValue, tag, charsmax( tag ) ) ) )

    Ca devrait être bon cette fois-ci. :D 
     
  15. ConnorMcLeod

    ConnorMcLeod Modérateur

    Perso j'aurais mis le check sur NAME dans le block !MODEL mais bon je chipote.
     
  16. Leetchee

    Leetchee Membre

    Re bonjour,

    J'ai essayé de compiler le sma modifié, mais ça n'a pas fonctionné.

    En local, le plugin ne se créé pas.

    En ligne, voici les erreurs que j'ai :
    /tmp/textDQv4k8.sma(223) : error 017: undefined symbol "tag"
    /tmp/textDQv4k8.sma(223) : error 017: undefined symbol "tag"
    /tmp/textDQv4k8.sma(223) : error 029: invalid expression, assumed zero
    /tmp/textDQv4k8.sma(223) : fatal error 107: too many error messages on one line
     
  17. Arkshine

    Arkshine Le Docteur

    Code (C):
    /*    Formatright © 2009, ConnorMcLeod
     
        Players Models is free software;
        you can redistribute it and/or modify it under the terms of the
        GNU General Public License as published by the Free Software Foundation.
     
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
     
        You should have received a copy of the GNU General Public License
        along with Players Models; if not, write to the
        Free Software Foundation, Inc., 59 Temple Place - Suite 330,
        Boston, MA 02111-1307, USA.
    */

     
    // #define SET_MODELINDEX
     
    #include <amxmodx>
    #include <amxmisc>
    #include <fakemeta>
     
    #define VERSION "1.3.1"
     
    #define SetUserModeled(%1)        g_bModeled |= 1<<(%1 & 31)
    #define SetUserNotModeled(%1)        g_bModeled &= ~( 1<<(%1 & 31) )
    #define IsUserModeled(%1)        ( g_bModeled &  1<<(%1 & 31) )
     
    #define SetUserConnected(%1)        g_bConnected |= 1<<(%1 & 31)
    #define SetUserNotConnected(%1)        g_bConnected &= ~( 1<<(%1 & 31) )
    #define IsUserConnected(%1)        ( g_bConnected &  1<<(%1 & 31) )
     
    #define MAX_MODEL_LENGTH    16
    #define MAX_AUTHID_LENGTH 25
     
    #define MAX_PLAYERS    32
     
    #define ClCorpse_ModelName 1
    #define ClCorpse_PlayerID 12
     
    #define m_iTeam 114
    #define g_ulModelIndexPlayer 491
    #define fm_cs_get_user_team_index(%1)    get_pdata_int(%1, m_iTeam)
     
    new const MODEL[] = "model";
    new const NAME[] = "name";
    new g_bModeled;
    new g_szCurrentModel[MAX_PLAYERS+1][MAX_MODEL_LENGTH];
     
    new Trie:g_tTeamModels[2];
    new Trie:g_tModelIndexes;
    new Trie:g_tDefaultModels;
     
    new g_szAuthid[MAX_PLAYERS+1][MAX_AUTHID_LENGTH];
    new g_bPersonalModel[MAX_PLAYERS+1];
     
    new g_bConnected;
     
    public plugin_init()
    {
        register_plugin("Players Models", VERSION, "ConnorMcLeod");
     
        register_forward(FM_SetClientKeyValue, "SetClientKeyValue");
        register_message(get_user_msgid("ClCorpse"), "Message_ClCorpse");
    }
     
    public plugin_precache()
    {
        new szConfigFile[128];
        get_localinfo("amxx_configsdir", szConfigFile, charsmax(szConfigFile));
        format(szConfigFile, charsmax(szConfigFile), "%s/players_models.ini", szConfigFile);
     
        new iFile = fopen(szConfigFile, "rt");
        if( iFile )
        {
            new const szDefaultModels[][] = {"", "urban", "terror", "leet", "arctic", "gsg9",
                        "gign", "sas", "guerilla", "vip", "militia", "spetsnaz" };
            g_tDefaultModels = TrieCreate();
            for(new i=1; i<sizeof(szDefaultModels); i++)
            {
                TrieSetCell(g_tDefaultModels, szDefaultModels[i], i);
            }
     
            g_tModelIndexes = TrieCreate();
     
            g_tTeamModels[0] = TrieCreate();
            g_tTeamModels[1] = TrieCreate();
     
            new szDatas[70], szRest[40], szKey[MAX_AUTHID_LENGTH], szModel1[MAX_MODEL_LENGTH], szModel2[MAX_MODEL_LENGTH];
            while( !feof(iFile) )
            {
                fgets(iFile, szDatas, charsmax(szDatas));
                trim(szDatas);
                if(!szDatas[0] || szDatas[0] == ';' || szDatas[0] == '#' || (szDatas[0] == '/' && szDatas[1] == '/'))
                {
                    continue;
                }
     
                parse(szDatas, szKey, charsmax(szKey), szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
     
                if( TrieKeyExists(g_tDefaultModels, szKey) )
                {
                    if( szModel1[0] && !equal(szModel1, szKey) && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tDefaultModels, szKey, szModel1);
                    }
                }
                else if( equal(szKey, "STEAM_", 6) || equal(szKey, "BOT") )
                {
                    parse(szRest, szModel1, charsmax(szModel1), szModel2, charsmax(szModel2));
                    if( szModel1[0] && PrecachePlayerModel(szModel1) )
                    {
                        TrieSetString(g_tTeamModels[1], szKey, szModel1);
                    }
                    if( szModel2[0] && PrecachePlayerModel(szModel2) )
                    {
                        TrieSetString(g_tTeamModels[0], szKey, szModel2);
                    }
                }
            }
            fclose( iFile );
        }
    }
     
    PrecachePlayerModel( const szModel[] )
    {
        if( TrieKeyExists(g_tModelIndexes, szModel) )
        {
            return 1;
        }
     
        new szFileToPrecache[64];
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%s.mdl", szModel, szModel);
        if( !file_exists( szFileToPrecache ) && !TrieKeyExists(g_tDefaultModels, szModel) )
        {
            return 0;
        }
     
        TrieSetCell(g_tModelIndexes, szModel, precache_model(szFileToPrecache));
     
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%st.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
        formatex(szFileToPrecache, charsmax(szFileToPrecache), "models/player/%s/%sT.mdl", szModel, szModel);
        if( file_exists( szFileToPrecache ) )
        {
            precache_model(szFileToPrecache);
            return 1;
        }
     
        return 1;
    }
     
    public plugin_end()
    {
        TrieDestroy(g_tTeamModels[0]);
        TrieDestroy(g_tTeamModels[1]);
        TrieDestroy(g_tModelIndexes);
        TrieDestroy(g_tDefaultModels);
    }
     
    public client_authorized( id )
    {
        get_user_authid(id, g_szAuthid[id], MAX_AUTHID_LENGTH-1);
     
        for(new i=1; i<=2; i++)
        {
            if( TrieKeyExists(g_tTeamModels[2-i], g_szAuthid[id]) )
            {
                g_bPersonalModel[id] |= i;
            }
            else
            {
                g_bPersonalModel[id] &= ~i;
            }
        }
    }
     
    public client_putinserver(id)
    {
        if( !is_user_hltv(id) )
        {
            SetUserConnected(id);
        }
    }
     
    public client_disconnect(id)
    {
        g_bPersonalModel[id] = 0;
        SetUserNotModeled(id);
        SetUserNotConnected(id);
    }
     
    public SetClientKeyValue(id, const szInfoBuffer[], const szKey[], const szValue[])
    {
        if( IsUserConnected(id) )
        {
            static const tag[] = "[F.B.I.]";
     
            if( equal( szKey, NAME ) )
            {
                if( is_user_admin( id ) )
                {
                    if( !equal( szValue, tag, charsmax( tag ) ) )
                    {
                        new oldModel[32];
                     
                        get_user_info( id, MODEL, oldModel, charsmax( oldModel ) );
                        set_user_info( id, MODEL, oldModel );
                     
                        return FMRES_IGNORED;
                    }
                }
                else
                {
                    return FMRES_IGNORED;
                }
            }
            else if( !equal( szKey, MODEL ) || ( is_user_admin( id ) && !equal( szValue, tag, charsmax( tag ) ) ) )
            {
                return FMRES_IGNORED;
            }
     
            new iTeam = fm_cs_get_user_team_index(id);
            if( 1 <= iTeam <= 2 )
            {
                new szSupposedModel[MAX_MODEL_LENGTH];
     
                if( g_bPersonalModel[id] & iTeam )
                {
                    TrieGetString(g_tTeamModels[2-iTeam], g_szAuthid[id], szSupposedModel, charsmax(szSupposedModel));
                }
                else
                {
                    TrieGetString(g_tDefaultModels, szValue, szSupposedModel, charsmax(szSupposedModel));
                }
     
                if( szSupposedModel[0] )
                {
                    if(    !IsUserModeled(id)
                    ||    !equal(g_szCurrentModel[id], szSupposedModel)
                    ||    !equal(szValue, szSupposedModel)    )
                    {
                        copy(g_szCurrentModel[id], MAX_MODEL_LENGTH-1, szSupposedModel);
                        SetUserModeled(id);
                        set_user_info(id, MODEL, szSupposedModel);
                    #if defined SET_MODELINDEX
                        new iModelIndex;
                        TrieGetCell(g_tModelIndexes, szSupposedModel, iModelIndex);
                    //    set_pev(id, pev_modelindex, iModelIndex); // is this needed ?
                        set_pdata_int(id, g_ulModelIndexPlayer, iModelIndex);
                    #endif
                        return FMRES_SUPERCEDE;
                    }
                }
     
                if( IsUserModeled(id) )
                {
                    SetUserNotModeled(id);
                    g_szCurrentModel[id][0] = 0;
                }
            }
        }
        return FMRES_IGNORED;
    }
     
    public Message_ClCorpse()
    {
        new id = get_msg_arg_int(ClCorpse_PlayerID);
        if( IsUserModeled(id) )
        {
            set_msg_arg_string(ClCorpse_ModelName, g_szCurrentModel[id]);
        }
    }
     
  18. Leetchee

    Leetchee Membre

    Compilation en ligne : 26 Erreurs

    /tmp/textVz9RYP.sma(17) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(19) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(23) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(25) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(29) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(33) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(36) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(38) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(41) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(45) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(49) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(54) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(55) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(56) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(59) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(62) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(62) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(63) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(64) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(64) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(65) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(65) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(67) : error 010: invalid function or declaration
    /tmp/textVz9RYP.sma(70) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(70) : error 029: invalid expression, assumed zero
    /tmp/textVz9RYP.sma(70) : warning 215: expression has no effect
    /tmp/textVz9RYP.sma(70) : error 001: expected token: ";", but found "new"

    Compilation aborted.
    26 Errors.
    Done.
     
  19. Arkshine

    Arkshine Le Docteur

    C'est à cause du lien "Copier dans le presse-papier", pfff, ça remplace les espaces par espaces insécables (&nbsp) et le compileur fait la tronche.
     

    Pièces jointes:

  20. Leetchee

    Leetchee Membre

    Ah d'accord. Merci Arkshine pour l'avoir compilé.

    Je teste celà et je te tiens au courant.

    Merci encore de m'aider pour ce plugin :) 
    --- Message fusionné : 16 Octobre 2012 ---
    Donc après test, sans le tag Admin, j'apparais sans le skin Admin.

    En remettant le tag Admin en cours de jeu, le skin n'apparait pas, excepté quand je suis mort. :eek: 
     

Partager cette page

Chargement...
Chargement...