Emotes Fortnite v1.07 07/24/2018

Эмоции появляются над головой после ввода команд.

  1. Disaster

    Disaster Не ждите чуда. Чудите сами!

    Сообщения:
    111
    Симпатии:
    16
    Пользователь Disaster разместил новый ресурс:

    Emotes Fortnite - Эмоции появляются над головой после ввода команд.

    Узнать больше об этом ресурсе...
     
  2. White Wolf

    White Wolf sm_ban @aim Супермодератор

    Сообщения:
    1.624
    Симпатии:
    987
    @Disaster, во первых все скриншоты должны быть во вложениях.
    Во вторых где ссылка на оригинал в описании ресурса.
    В третьих автор утверждает что плагин работает в ТФ2, почему не отмечено.
    Даю вам 24 часа исправить.
     
  3. Grey83

    Grey83

    Сообщения:
    1.644
    Симпатии:
    758
    чуть почистил код
    PHP:
    #pragma semicolon 1

    #include <emotes>

    #pragma newdecls required

    #include <sdktools>
    #include <sdkhooks>

    #define PLUGIN_AUTHOR "Rachnus"
    #define PLUGIN_VERSION "1.07.1"

    ConVar    g_AnimateEmotes,
            
    g_EmoteCooldown,
            
    g_EmoteTime,
            
    g_EmoteScale,

            
    g_RoundTime;

    bool bTF2
    StringMap g_hEmoteMap
    ;
    KeyValues g_hEmoteConfig;
    int g_iEmotes[MAXPLAYERS 1][EMOTES_MAX_EMOTES_PER_PLAYER];
    float g_fTimeToKillEmote[MAXPLAYERS 1][EMOTES_MAX_EMOTES_PER_PLAYER],
        
    g_fTimeUsedEmote[MAXPLAYERS 1];

    // TF2 stuff
    int g_iLinks[MAXPLAYERS 1][EMOTES_MAX_EMOTES_PER_PLAYER];

    // Emote animation
    int g_iFramesToMove[MAXPLAYERS 1][EMOTES_MAX_EMOTES_PER_PLAYER];

    // Handles
    Handle g_hOnEmoteSpawnSay;

    public 
    Plugin myinfo =
    {
        
    name "Emotes v1.07",
        
    author PLUGIN_AUTHOR,
        
    description "Display emotes above your head",
        
    version PLUGIN_VERSION,
        
    url "https://github.com/Rachnus"
    };

    public 
    APLRes AskPluginLoad2(Handle hMyselfbool bLatechar[] sErrorint err_max)
    {
        
    CreateNative("Emotes_SpawnEmote"Native_SpawnEmote);
        
    CreateNative("Emotes_ClearEmotes"Native_ClearEmotes);
        
    CreateNative("Emotes_GetEmoteMaterial"Native_GetEmoteMaterial);
        
    CreateNative("Emotes_IsEmote"Native_IsEmote);

        
    RegPluginLibrary("emotes");
        return 
    APLRes_Success;
    }

    public 
    void OnPluginStart()
    {
        
    bTF2 GetEngineVersion() == Engine_TF2;
        
    LoadTranslations("common.phrases");

        
    HookEvent("player_death"Event_PlayerDeath);

        
    g_AnimateEmotes    CreateConVar("emotes_animate_emotes""1""Should the emotes animate or just snap (Setting this to 0 will increase server performance if needed)");
        
    g_EmoteCooldown    CreateConVar("emotes_emote_cooldown""3.0""Time in seconds before you can use another emote");
        
    g_EmoteTime        CreateConVar("emotes_emote_time""3.0""Time in seconds an emote lasts");
        
    g_EmoteScale    CreateConVar("emotes_emote_scale""0.1""The scale of the emote (0.1 is default for some reason)");

        
    g_RoundTime        FindConVar("mp_roundtime");

        
    g_hOnEmoteSpawnSay CreateGlobalForward("Emotes_OnEmoteSpawnSay"ET_EventParam_CellParam_String);

        
    g_hEmoteMap = new StringMap();
        
    g_hEmoteConfig = new KeyValues("emotes");
        
    char path[PLATFORM_MAX_PATH];
        
    BuildPath(Path_SMpathsizeof(path), EMOTE_CONFIG);
        if(!
    g_hEmoteConfig.ImportFromFile(path))
            
    SetFailState("Could not load emotes");

        
    LoadEmotes();
        for (
    int i 1<= MaxClientsi++)
            
    InitializeClientEmotesArray(i);

        
    RegAdminCmd("sm_emote"Command_EmoteADMFLAG_ROOT);
        
    RegAdminCmd("sm_clearemotes"Command_ClearEmotesADMFLAG_ROOT);
    }

    public 
    void OnPluginEnd()
    {
        
    ClearAllEmotes();
    }

    public 
    int Native_SpawnEmote(Handle pluginint numParams)
    {
        
    int client GetNativeCell(1);
        if(!
    IsValidClient(client))
            return 
    INVALID_ENT_REFERENCE;

        
    char key[64];
        
    GetNativeString(2keysizeof(key));

        return 
    SpawnEmote(clientkeyGetNativeCell(3), GetNativeCell(4));
    }

    public 
    int Native_ClearEmotes(Handle pluginint numParams)
    {
        
    int client GetNativeCell(1);
        if(!
    IsValidClient(client))
            return;

        
    ClearClientEmotes(client);
    }

    public 
    int Native_GetEmoteMaterial(Handle pluginint numParams)
    {
        
    char key[64];
        
    GetNativeString(1keysizeof(key));

        
    char material[PLATFORM_MAX_PATH];
        
    g_hEmoteMap.GetString(keymaterialPLATFORM_MAX_PATH);
        
    SetNativeString(2materialGetNativeCell(3));
    }

    public 
    int Native_IsEmote(Handle pluginint numParams)
    {
        
    char key[64];
        
    GetNativeString(1keysizeof(key));

        return 
    IsEmote(key);
    }

    public 
    Action Event_PlayerDeath(Event event, const char[] namebool dontBroadcast)
    {
        
    int client GetClientOfUserId(event.GetInt("userid"));
        
    ClearClientEmotes(client);
    }

    public 
    Action Command_Emote(int clientint args)
    {
        if(
    args != 4)
        {
            
    ReplyToCommand(client"%s Usage: \x04sm_emote <client> <emote> <scale> <duration>"EMOTES_PREFIX);
            return 
    Plugin_Handled;
        }

        
    char arg[65], arg2[65], arg3[65], arg4[65];
        
    GetCmdArg(1argsizeof(arg));
        
    GetCmdArg(2arg2sizeof(arg2));
        
    GetCmdArg(3arg3sizeof(arg3));
        
    GetCmdArg(4arg4sizeof(arg4));

        if(!
    IsEmote(arg2))
        {
            
    ReplyToCommand(client"%s \x04%s\x09 is not an emote!"EMOTES_PREFIXarg2);
            return 
    Plugin_Handled;
        }

        
    char target_name[MAX_TARGET_LENGTH];
        
    int target_list[MAXPLAYERS 1];
        
    int target_count;

        
    bool tn_is_ml;

        if((
    target_count ProcessTargetString(
                
    arg,
                
    client,
                
    target_list,
                
    MAXPLAYERS 1,
                
    COMMAND_FILTER_CONNECTED,
                
    target_name,
                
    sizeof(target_name),
                
    tn_is_ml)) <= 0)
        {
            
    ReplyToTargetError(clienttarget_count);
            return 
    Plugin_Handled;
        }

        for(
    int itarget_counti++)
            
    SpawnEmote(target_list[i], arg2StringToFloat(arg3), StringToFloat(arg4));

        return 
    Plugin_Handled;
    }

    public 
    Action Command_ClearEmotes(int clientint args)
    {
        if(
    args != 1)
        {
            
    ReplyToCommand(client"%s Usage: \x04sm_clearemotes <client>"EMOTES_PREFIX);
            return 
    Plugin_Handled;
        }

        
    char arg[65];
        
    GetCmdArg(1argsizeof(arg));

        
    char target_name[MAX_TARGET_LENGTH];
        
    int target_list[MAXPLAYERS 1];
        
    int target_count;

        
    bool tn_is_ml;

        if((
    target_count ProcessTargetString(
                
    arg,
                
    client,
                
    target_list,
                
    MAXPLAYERS 1,
                
    COMMAND_FILTER_CONNECTED,
                
    target_name,
                
    sizeof(target_name),
                
    tn_is_ml)) <= 0)
        {
            
    ReplyToTargetError(clienttarget_count);
            return 
    Plugin_Handled;
        }

        for(
    int itarget_counti++)
            
    ClearClientEmotes(target_list[i]);
        return 
    Plugin_Handled;
    }

    public 
    Action OnClientSayCommand(int client, const char[] command, const char[] sArgs)
    {
        if(!
    IsValidClient(client))
            return 
    Plugin_Continue;

        if(!
    IsPlayerAlive(client))
            return 
    Plugin_Continue;

        
    char message[65];
        
    Format(messagesizeof(message), sArgs);

        
    Action result Plugin_Continue;
        
    Call_StartForward(g_hOnEmoteSpawnSay);
        
    Call_PushCell(client);
        
    Call_PushStringEx(messagesizeof(message), SM_PARAM_STRING_COPYSM_PARAM_COPYBACK);
        
    Call_Finish(result);

        switch(
    result)
        {
            case 
    Plugin_Handled,Plugin_Stop:
                return 
    Plugin_Continue;
            default:
            {
                
    float time;
                if(
    g_fTimeUsedEmote[client] != 0.0)
                {
                    
    time g_EmoteCooldown.FloatValue;
                    
    time -= GetGameTime() - g_fTimeUsedEmote[client];
                }

                if(
    time 0.0)
                    return 
    IsEmote(message) ? Plugin_Stop Plugin_Continue;

                return 
    SpawnEmote(clientmessageg_EmoteScale.FloatValueg_EmoteTime.FloatValue)!=INVALID_ENT_REFERENCE?Plugin_Stop:Plugin_Continue;
            }
        }
        return 
    Plugin_Continue;
    }

    public 
    void LoadEmotes()
    {
        
    g_hEmoteConfig.Rewind();
        
    g_hEmoteConfig.GotoFirstSubKey();
    //  char key[EMOTES_KEY_LENGTH], materialPath[PLATFORM_MAX_PATH], matVTF[PLATFORM_MAX_PATH];
        
    char key[EMOTES_KEY_LENGTH], materialPath[PLATFORM_MAX_PATH];
        do
        {
            
    g_hEmoteConfig.GetString("key"keyEMOTES_KEY_LENGTH);
            
    g_hEmoteConfig.GetString("material"materialPathPLATFORM_MAX_PATH);

    //      Format(matVTF, sizeof(matVTF), "%s.vtf", materialPath);
            
    Format(materialPathsizeof(materialPath), "%s.vmt"materialPath);

            
    g_hEmoteMap.SetString(keymaterialPathfalse);
            
    PrintToServer("[emotes.smx] Emote: '%s' loaded successfully."key);
        } while (
    g_hEmoteConfig.GotoNextKey());
    }

    public 
    void PrecacheEmotes()
    {
        
    g_hEmoteConfig.Rewind();
        
    g_hEmoteConfig.GotoFirstSubKey();
        
    char materialPath[PLATFORM_MAX_PATH], matVTF[PLATFORM_MAX_PATH];
        do
        {
            
    g_hEmoteConfig.GetString("material"materialPathPLATFORM_MAX_PATH);

            
    Format(matVTFsizeof(matVTF), "%s.vtf"materialPath);
            
    Format(materialPathsizeof(materialPath), "%s.vmt"materialPath);

            
    AddFileToDownloadsTable(materialPath);
            
    AddFileToDownloadsTable(matVTF);

            
    PrecacheModel(materialPath);

        } while (
    g_hEmoteConfig.GotoNextKey());
    }

    public 
    void ClearAllEmotes()
    {
        for (
    int i 1<= MaxClientsi++)
            
    ClearClientEmotes(i);
    }

    public 
    bool IsEmote(const char[] key)
    {
        
    char material[PLATFORM_MAX_PATH];
        
    g_hEmoteMap.GetString(keymaterialPLATFORM_MAX_PATH);
        return !
    material[0];
    }

    public 
    int SpawnEmote(int client, const char[] keyfloat scalefloat duration)
    {
        
    char material[PLATFORM_MAX_PATH];
        
    g_hEmoteMap.GetString(keymaterialPLATFORM_MAX_PATH);
        if(
    StrEqual(material""))
            return 
    INVALID_ENT_REFERENCE;

        
    int sprite CreateEntityByName("env_sprite_oriented");
        
    float pos[3];
        
    GetClientAbsOrigin(clientpos);

        if(
    bTF2GetClientEyePosition(clientpos);
        else 
    GetClientAbsOrigin(clientpos);

        if(
    IsPlayerAlive(client))
        {
            if(
    bTF2pos[2] += 20.0 + ((g_EmoteScale.FloatValue 5) * (g_EmoteScale.FloatValue 5));
            else 
    pos[2] += 80.0 + ((g_EmoteScale.FloatValue 5) * (g_EmoteScale.FloatValue 5));
        }
        
    DispatchKeyValue(sprite"spawnflags""1");
        
    DispatchKeyValueFloat(sprite"scale"scale);
        
    DispatchKeyValue(sprite"model"material);
        
    DispatchSpawn(sprite);
        
    TeleportEntity(spriteposNULL_VECTORNULL_VECTOR);
        
    SetVariantString("!activator");
        
    AcceptEntityInput(sprite"SetParent"client);

        
    ShiftEmoteQueue(client);
        
    g_iEmotes[client][0] = EntIndexToEntRef(sprite);

        
    //TF2 stuff
        
    if(bTF2)
        {
            
    int link CreateLink(client);
            
    g_iLinks[client][0] = EntIndexToEntRef(link);
            
    SetVariantString("!activator");
            
    AcceptEntityInput(sprite"SetParent"link);

            
    SetEntPropEnt(spriteProp_Send"m_hEffectEntity"link);
        }

        
    // If duration is 0, emote will last until round end
        
    if(duration <= 0.0)
            
    duration g_RoundTime.FloatValue 60.0;

        
    g_fTimeToKillEmote[client][0] = GetGameTime() + duration;

        if(
    g_AnimateEmotes.BoolValue)
            
    g_iFramesToMove[client][0] = EMOTES_FRAMES_TO_MOVE_EMOTE;

        
    g_fTimeUsedEmote[client] = GetGameTime();
        return 
    sprite;
    }

    stock int CreateLink(int client)
    {
        
    int link CreateEntityByName("tf_taunt_prop");

        
    DispatchKeyValue(link"targetname""EmoteLink");
        
    DispatchSpawn(link);

        
    SetEntityModel(linkMODEL_EMPTY);

        
    SetEntProp(linkProp_Send"m_fEffects"16|64);

        
    SetVariantString("!activator");
        
    AcceptEntityInput(link"SetParent"client);

        
    SetVariantString("flag");
        
    AcceptEntityInput(link"SetParentAttachment"client);
        return 
    link;
    }

    public 
    void OnGameFrame()
    {
        for (
    int client 1ientclient <= MaxClientsclient++) if(IsClientInGame(client))
        {
            for(
    0EMOTES_MAX_EMOTES_PER_PLAYERi++)
            {
                if((
    ent EntRefToEntIndex(g_iEmotes[client][i])) != INVALID_ENT_REFERENCE && IsValidEntity(ent))
                {
                    if(
    g_AnimateEmotes.BoolValue && g_iFramesToMove[client][i]-- > 0)
                        
    float pos[3], clientPos[3];
                        
    GetClientAbsOrigin(clientclientPos);
                        
    GetEntPropVector(entProp_Data"m_vecOrigin"pos);
                        
    float temp float(g_iFramesToMove[client][i]) / 200.0;
                        if(
    bTF2pos[1] -= temp temp;
                        else 
    pos[2] += temp temp;
                        
    TeleportEntity(entposNULL_VECTORNULL_VECTOR);
                    }
                    if(
    GetGameTime() > g_fTimeToKillEmote[client][i])
                        
    ClearClientEmote(clienti);
                }
            }
        }
    }

    public 
    void ShiftEmoteQueue(int client)
    {
        
    int ent EntRefToEntIndex(g_iEmotes[client][EMOTES_MAX_EMOTES_PER_PLAYER 1]);
        if(
    ent != INVALID_ENT_REFERENCE && IsValidEntity(ent))
            
    AcceptEntityInput(ent"Kill");
        
    g_iEmotes[client][EMOTES_MAX_EMOTES_PER_PLAYER 1] = INVALID_ENT_REFERENCE;

        if(
    bTF2)
        {
            
    ent EntRefToEntIndex(g_iLinks[client][EMOTES_MAX_EMOTES_PER_PLAYER 1]);
            if(
    ent != INVALID_ENT_REFERENCE && IsValidEntity(ent))
                
    AcceptEntityInput(ent"Kill");
            
    g_iLinks[client][EMOTES_MAX_EMOTES_PER_PLAYER 1] = INVALID_ENT_REFERENCE;
        }

        for (
    int i EMOTES_MAX_EMOTES_PER_PLAYER 2>= 0i--)
        {
            
    g_iEmotes[client][i+1] = g_iEmotes[client][i];
            
    g_iLinks[client][i+1] = g_iLinks[client][i];
            
    g_fTimeToKillEmote[client][i+1] = g_fTimeToKillEmote[client][i];
            if(
    g_AnimateEmotes.BoolValue)
                
    g_iFramesToMove[client][i+1] = EMOTES_FRAMES_TO_MOVE_EMOTE;
            else if((
    ent EntRefToEntIndex(g_iEmotes[client][i+1])) != INVALID_ENT_REFERENCE && IsValidEntity(ent))
            {
                
    float pos[3];
                
    GetEntPropVector(entProp_Data"m_vecOrigin"pos);
                
    pos[2] += EMOTE_SNAP_OFFSET;
                
    TeleportEntity(entposNULL_VECTORNULL_VECTOR);
            }
        }
    }

    public 
    void InitializeClientEmotesArray(int client)
    {
        for(
    int iEMOTES_MAX_EMOTES_PER_PLAYERi++)
        {
            
    g_iEmotes[client][i] = g_iLinks[client][i] = INVALID_ENT_REFERENCE;
            
    g_iFramesToMove[client][i] = 0;
            
    g_fTimeToKillEmote[client][i] = 0.0;
        }
    }

    public 
    void ClearClientEmote(int clientint emoteIndex)
    {
        
    int ent EntRefToEntIndex(g_iEmotes[client][emoteIndex]);
        if(
    ent != INVALID_ENT_REFERENCE && IsValidEntity(ent))
            
    AcceptEntityInput(ent"Kill");
        
    g_iEmotes[client][emoteIndex] = INVALID_ENT_REFERENCE;
        
    g_iFramesToMove[client][emoteIndex] = 0;
        
    g_fTimeToKillEmote[client][emoteIndex] = 0.0;

        if(
    bTF2)
        {
            
    ent EntRefToEntIndex(g_iLinks[client][emoteIndex]);
            if(
    ent != INVALID_ENT_REFERENCE && IsValidEntity(ent))
                
    AcceptEntityInput(ent"Kill");
            
    g_iLinks[client][emoteIndex] = INVALID_ENT_REFERENCE;
        }
    }

    public 
    void ClearClientEmotes(int client)
    {
        for(
    int iEMOTES_MAX_EMOTES_PER_PLAYERi++)
            
    ClearClientEmote(clienti);

        
    g_fTimeUsedEmote[client] = 0.0;
    }

    public 
    bool IsValidClient(int client)
    {
        return 
    client <= MaxClients && IsClientInGame(client);
    }

    public 
    void OnClientDisconnect(int client)
    {
        
    ClearClientEmotes(client);
    }

    public 
    void OnMapStart()
    {
        if(
    bTF2PrecacheModel(MODEL_EMPTY);
        
    PrecacheEmotes();
    }
    Но там оптимизировать и оптимизировать код
    --- Добавлено позже ---
    И вообще я бы добавил менюшку, через которую можно было бы вызывать эмоции
     
    BossKotoriiNeSmok нравится это.
  4. Disaster

    Disaster Не ждите чуда. Чудите сами!

    Сообщения:
    111
    Симпатии:
    16
    @Grey83 73 эмоции через меню, проще бинд )
     
  5. SlavON

    SlavON

    Сообщения:
    976
    Симпатии:
    136
    sm_emote - Порождает эмоции, передаваемые аргументом - а это как понять?
    По мойму как раз проще забиндить менюшку чем отдельные иконки.
     
  6. BossKotoriiNeSmok

    BossKotoriiNeSmok

    Сообщения:
    422
    Симпатии:
    59
    Сделать менюшку и для випов или шопа:D Идеально!
     
  7. Grey83

    Grey83

    Сообщения:
    1.644
    Симпатии:
    758
    @SlavON, рут принудительно вызывает эффект эмоции у игрока (нужно прописать 4 параметра: ReplyToCommand(client, "%s Usage: \x04sm_emote <client> <emote> <scale> <duration>", EMOTES_PREFIX);)
    --- Добавлено позже ---
    @Disaster, только для наиболее часто используемых, для всех остальных удобнее меню
    Хотя можно попробовать упорядочить меню так, чтобы на первой странице меню было 7 "любимых" эмоций игрока (естественно с запоминанием оных в кукисах).
     
    pashaV1rtual нравится это.
  8. LAnOFF

    LAnOFF

    Сообщения:
    21
    Симпатии:
    0
    Даа, с менюхой было б зачётно
     
  9. pashaV1rtual

    pashaV1rtual

    Сообщения:
    60
    Симпатии:
    8
    Воу, крутяк плагин, вот бы модулем к випке от RIKO))

    Сколхозил меню временное с помощью плагина Menu Creator:
    "emotes"
    {
    "1_HP"
    {
    "key" "!1_HP"
    "material" "materials/emotes/RG/1_HP"
    }
    "200_IQ_PLAY"
    {
    "key" "!200_IQ_PLAY"
    "material" "materials/emotes/RG/200_IQ_PLAY"
    }
    "A+"
    {
    "key" "!A+"
    "material" "materials/emotes/RG/A+"
    }
    "ACE"
    {
    "key" "!ACE"
    "material" "materials/emotes/RG/ACE"
    }
    "ALARM"
    {
    "key" "!ALARM"
    "material" "materials/emotes/RG/ALARM"
    }
    "ANGEL"
    {
    "key" "!ANGEL"
    "material" "materials/emotes/RG/ANGEL"
    }
    "AWWW"
    {
    "key" "!AWWW"
    "material" "materials/emotes/RG/AWWW"
    }
    "BABY_SEAL"
    {
    "key" "!BABY_SEAL"
    "material" "materials/emotes/RG/BABY_SEAL"
    }
    "BAD_APPLE"
    {
    "key" "!BAD_APPLE"
    "material" "materials/emotes/RG/BAD_APPLE"
    }
    "BAITED"
    {
    "key" "!BAITED"
    "material" "materials/emotes/RG/BAITED"
    }
    "BANANAS"
    {
    "key" "!BANANAS"
    "material" "materials/emotes/RG/BANANAS"
    }
    "BOOMBOX"
    {
    "key" "!BOOMBOX"
    "material" "materials/emotes/RG/BOOMBOX"
    }
    "BULLSEYE"
    {
    "key" "!BULLSEYE"
    "material" "materials/emotes/RG/BULLSEYE"
    }
    "BUSH"
    {
    "key" "!BUSH"
    "material" "materials/emotes/RG/BUSH"
    }
    "CELEBRATE"
    {
    "key" "!CELEBRATE"
    "material" "materials/emotes/RG/CELEBRATE"
    }
    "CHICKEN"
    {
    "key" "!CHICKEN"
    "material" "materials/emotes/RG/CHICKEN"
    }
    "CLAPPING"
    {
    "key" "!CLAPPING"
    "material" "materials/emotes/RG/CLAPPING"
    }
    "CRABBY"
    {
    "key" "!CRABBY"
    "material" "materials/emotes/RG/CRABBY"
    }
    "DANCE_PARTY"
    {
    "key" "!DANCE_PARTY"
    "material" "materials/emotes/RG/DANCE_PARTY"
    }
    "DYNAMITE"
    {
    "key" "!DYNAMITE"
    "material" "materials/emotes/RG/DYNAMITE"
    }
    "EMBARRASSED"
    {
    "key" "!EMBARRASSED"
    "material" "materials/emotes/RG/EMBARRASSED"
    }
    "ESC_HASH_1"
    {
    "key" "!ESC_HASH_1"
    "material" "materials/emotes/RG/ESC_HASH_1"
    }
    "EXCLAMATION"
    {
    "key" "!EXCLAMATION"
    "material" "materials/emotes/RG/EXCLAMATION"
    }
    "FLAMING_RAGE"
    {
    "key" "!FLAMING_RAGE"
    "material" "materials/emotes/RG/FLAMING_RAGE"
    }
    "FLEX"
    {
    "key" "!FLEX"
    "material" "materials/emotes/RG/FLEX"
    }
    "GO"
    {
    "key" "!GO"
    "material" "materials/emotes/RG/GO"
    }
    "GOOD_GAME"
    {
    "key" "!GOOD_GAME"
    "material" "materials/emotes/RG/GOOD_GAME"
    }
    "HEARTBROKEN"
    {
    "key" "!HEARTBROKEN"
    "material" "materials/emotes/RG/HEARTBROKEN"
    }
    "HEART_HANDS"
    {
    "key" "!HEART_HANDS"
    "material" "materials/emotes/RG/HEART_HANDS"
    }
    "HOARDER"
    {
    "key" "!HOARDER"
    "material" "materials/emotes/RG/HOARDER"
    }
    "HOT_DAWG"
    {
    "key" "!HOT_DAWG"
    "material" "materials/emotes/RG/HOT_DAWG"
    }
    "IN_LOVE"
    {
    "key" "!IN_LOVE"
    "material" "materials/emotes/RG/IN_LOVE"
    }
    "KABOOM"
    {
    "key" "!KABOOM"
    "material" "materials/emotes/RG/KABOOM"
    }
    "LETS_ROCK"
    {
    "key" "!LETS_ROCK"
    "material" "materials/emotes/RG/LETS_ROCK"
    }
    "LIGHTS_CAMERA"
    {
    "key" "!LIGHTS_CAMERA"
    "material" "materials/emotes/RG/LIGHTS_CAMERA"
    }
    "LOL"
    {
    "key" "!LOL"
    "material" "materials/emotes/RG/LOL"
    }
    "MAJESTIC"
    {
    "key" "!MAJESTIC"
    "material" "materials/emotes/RG/MAJESTIC"
    }
    "MVP"
    {
    "key" "!MVP"
    "material" "materials/emotes/RG/MVP"
    }
    "ON_FIRE"
    {
    "key" "!ON_FIRE"
    "material" "materials/emotes/RG/ON_FIRE"
    }
    "PEACE"
    {
    "key" "!PEACE"
    "material" "materials/emotes/RG/PEACE"
    }
    "PLOTTING"
    {
    "key" "!PLOTTING"
    "material" "materials/emotes/RG/PLOTTING"
    }
    "POOL_PARTY"
    {
    "key" "!POOL_PARTY"
    "material" "materials/emotes/RG/POOL_PARTY"
    }
    "POSITIVITY"
    {
    "key" "!POSITIVITY"
    "material" "materials/emotes/RG/POSITIVITY"
    }
    "POTATO_AIM"
    {
    "key" "!POTATO_AIM"
    "material" "materials/emotes/RG/POTATO_AIM"
    }
    "POT_OF_GOLD"
    {
    "key" "!POT_OF_GOLD"
    "material" "materials/emotes/RG/POT_OF_GOLD"
    }
    "PRICKLY"
    {
    "key" "!PRICKLY"
    "material" "materials/emotes/RG/PRICKLY"
    }
    "RABID"
    {
    "key" "!RABID"
    "material" "materials/emotes/RG/RABID"
    }
    "RAGE"
    {
    "key" "!RAGE"
    "material" "materials/emotes/RG/RAGE"
    }
    "RAINBOW"
    {
    "key" "!RAINBOW"
    "material" "materials/emotes/RG/RAINBOW"
    }
    "RIP"
    {
    "key" "!RIP"
    "material" "materials/emotes/RG/RIP"
    }
    "ROCKET_RIDE"
    {
    "key" "!ROCKET_RIDE"
    "material" "materials/emotes/RG/ROCKET_RIDE"
    }
    "SALTY"
    {
    "key" "!SALTY"
    "material" "materials/emotes/RG/SALTY"
    }
    "STEALTHY"
    {
    "key" "!STEALTHY"
    "material" "materials/emotes/RG/STEALTHY"
    }
    "STINKY"
    {
    "key" "!STINKY"
    "material" "materials/emotes/RG/STINKY"
    }
    "STOP"
    {
    "key" "!STOP"
    "material" "materials/emotes/RG/STOP"
    }
    "TASTY"
    {
    "key" "!TASTY"
    "material" "materials/emotes/RG/TASTY"
    }
    "TATTERED"
    {
    "key" "!TATTERED"
    "material" "materials/emotes/RG/TATTERED"
    }
    "TEAMWORK"
    {
    "key" "!TEAMWORK"
    "material" "materials/emotes/RG/TEAMWORK"
    }
    "THIEF"
    {
    "key" "!THIEF"
    "material" "materials/emotes/RG/THIEF"
    }
    "THUMBS_DOWN"
    {
    "key" "!THUMBS_DOWN"
    "material" "materials/emotes/RG/THUMBS_DOWN"
    }
    "THUMBS_UP"
    {
    "key" "!THUMBS_UP"
    "material" "materials/emotes/RG/THUMBS_UP"
    }
    "TRAP"
    {
    "key" "!TRAP"
    "material" "materials/emotes/RG/TRAP"
    }
    "VICTORY_ROYALE"
    {
    "key" "!VICTORY_ROYALE"
    "material" "materials/emotes/RG/VICTORY_ROYALE"
    }
    "WOW"
    {
    "key" "!WOW"
    "material" "materials/emotes/RG/WOW"
    }
    "ZZZ"
    {
    "key" "!ZZZ"
    "material" "materials/emotes/RG/ZZZ"
    }

    }
    create |emotions_info |panel
    title |{ }[Инструкция по бинду эмоций]{ }{nl}{ } |
    text |Прописываем в консоль: |
    text |{ }{ }bind key "say !name" |
    text |Где key - клавиша, которую биндите. |
    text |{ }{ }{ }{ }{ }{ }name - название эмоции.|
    text |{ } |
    setpos |8
    item |Назад |sm_mc_om {cl} emotions

    create |emotions |menu
    regcmd |sm_emotion |
    regcmd |sm_emotions |
    title |{ }Выберите эмоцию:{ }{nl}{ } |
    item |1_HP |sm_mc_fc {cl} "say !1_HP";sm_mc_om {cl} emotions
    item |200_IQ_PLAY |sm_mc_fc {cl} "say !200_IQ_PLAY";sm_mc_om {cl} emotions
    item |A+ |sm_mc_fc {cl} "say !A+";sm_mc_om {cl} emotions
    item |ACE |sm_mc_fc {cl} "say !ACE";sm_mc_om {cl} emotions
    item |ALARM |sm_mc_fc {cl} "say !ALARM";sm_mc_om {cl} emotions
    item |ANGEL |sm_mc_fc {cl} "say !ANGEL";sm_mc_om {cl} emotions
    item |AWWW |sm_mc_fc {cl} "say !AWWW";sm_mc_om {cl} emotions
    item |BABY_SEAL |sm_mc_fc {cl} "say !BABY_SEAL";sm_mc_om {cl} emotions
    item |BAD_APPLE |sm_mc_fc {cl} "say !BAD_APPLE";sm_mc_om {cl} emotions
    item |BAITED |sm_mc_fc {cl} "say !BAITED";sm_mc_om {cl} emotions
    item |BANANAS |sm_mc_fc {cl} "say !BANANAS";sm_mc_om {cl} emotions
    item |BOOMBOX |sm_mc_fc {cl} "say !BOOMBOX";sm_mc_om {cl} emotions
    item |BULLSEYE |sm_mc_fc {cl} "say !BULLSEYE";sm_mc_om {cl} emotions
    item |BUSH |sm_mc_fc {cl} "say !BUSH";sm_mc_om {cl} emotions
    item |CELEBRATE |sm_mc_fc {cl} "say !CELEBRATE";sm_mc_om {cl} emotions
    item |CHICKEN |sm_mc_fc {cl} "say !CHICKEN";sm_mc_om {cl} emotions
    item |CLAPPING |sm_mc_fc {cl} "say !CLAPPING";sm_mc_om {cl} emotions
    item |CRABBY |sm_mc_fc {cl} "say !CRABBY";sm_mc_om {cl} emotions
    item |DANCE_PARTY |sm_mc_fc {cl} "say !DANCE_PARTY";sm_mc_om {cl} emotions
    item |DYNAMITE |sm_mc_fc {cl} "say !DYNAMITE";sm_mc_om {cl} emotions
    item |EMBARRASSED |sm_mc_fc {cl} "say !EMBARRASSED";sm_mc_om {cl} emotions
    item |ESC_HASH_1 |sm_mc_fc {cl} "say !ESC_HASH_1";sm_mc_om {cl} emotions
    item |EXCLAMATION |sm_mc_fc {cl} "say !EXCLAMATION";sm_mc_om {cl} emotions
    item |FLAMING_RAGE |sm_mc_fc {cl} "say !FLAMING_RAGE";sm_mc_om {cl} emotions
    item |FLEX |sm_mc_fc {cl} "say !FLEX";sm_mc_om {cl} emotions
    item |GO |sm_mc_fc {cl} "say !GO";sm_mc_om {cl} emotions
    item |GOOD_GAME |sm_mc_fc {cl} "say !GOOD_GAME";sm_mc_om {cl} emotions
    item |HEARTBROKEN |sm_mc_fc {cl} "say !HEARTBROKEN";sm_mc_om {cl} emotions
    item |HEART_HANDS |sm_mc_fc {cl} "say !HEART_HANDS";sm_mc_om {cl} emotions
    item |HOARDER |sm_mc_fc {cl} "say !HOARDER";sm_mc_om {cl} emotions
    item |HOT_DAWG |sm_mc_fc {cl} "say !HOT_DAWG";sm_mc_om {cl} emotions
    item |IN_LOVE |sm_mc_fc {cl} "say !IN_LOVE";sm_mc_om {cl} emotions
    item |KABOOM |sm_mc_fc {cl} "say !KABOOM";sm_mc_om {cl} emotions
    item |LETS_ROCK |sm_mc_fc {cl} "say !LETS_ROCK";sm_mc_om {cl} emotions
    item |LIGHTS_CAMERA |sm_mc_fc {cl} "say !LIGHTS_CAMERA";sm_mc_om {cl} emotions
    item |LOL |sm_mc_fc {cl} "say !LOL";sm_mc_om {cl} emotions
    item |MAJESTIC |sm_mc_fc {cl} "say !MAJESTIC";sm_mc_om {cl} emotions
    item |MVP |sm_mc_fc {cl} "say !MVP";sm_mc_om {cl} emotions
    item |ON_FIRE |sm_mc_fc {cl} "say !ON_FIRE";sm_mc_om {cl} emotions
    item |PEACE |sm_mc_fc {cl} "say !PEACE";sm_mc_om {cl} emotions
    item |PLOTTING |sm_mc_fc {cl} "say !PLOTTING";sm_mc_om {cl} emotions
    item |POOL_PARTY |sm_mc_fc {cl} "say !POOL_PARTY";sm_mc_om {cl} emotions
    item |POSITIVITY |sm_mc_fc {cl} "say !POSITIVITY";sm_mc_om {cl} emotions
    item |POTATO_AIM |sm_mc_fc {cl} "say !POTATO_AIM";sm_mc_om {cl} emotions
    item |POT_OF_GOLD |sm_mc_fc {cl} "say !POT_OF_GOLD";sm_mc_om {cl} emotions
    item |PRICKLY |sm_mc_fc {cl} "say !PRICKLY";sm_mc_om {cl} emotions
    item |RABID |sm_mc_fc {cl} "say !RABID";sm_mc_om {cl} emotions
    item |RAGE |sm_mc_fc {cl} "say !RAGE";sm_mc_om {cl} emotions
    item |RAINBOW |sm_mc_fc {cl} "say !RAINBOW";sm_mc_om {cl} emotions
    item |RIP |sm_mc_fc {cl} "say !RIP";sm_mc_om {cl} emotions
    item |ROCKET_RIDE |sm_mc_fc {cl} "say !ROCKET_RIDE";sm_mc_om {cl} emotions
    item |SALTY |sm_mc_fc {cl} "say !SALTY";sm_mc_om {cl} emotions
    item |STEALTHY |sm_mc_fc {cl} "say !STEALTHY";sm_mc_om {cl} emotions
    item |STINKY |sm_mc_fc {cl} "say !STINKY";sm_mc_om {cl} emotions
    item |STOP |sm_mc_fc {cl} "say !STOP";sm_mc_om {cl} emotions
    item |TASTY |sm_mc_fc {cl} "say !TASTY";sm_mc_om {cl} emotions
    item |TATTERED |sm_mc_fc {cl} "say !TATTERED";sm_mc_om {cl} emotions
    item | TEAMWORK |sm_mc_fc {cl} "say !TEAMWORK";sm_mc_om {cl} emotions
    item |THIEF |sm_mc_fc {cl} "say !THIEF";sm_mc_om {cl} emotions
    item |THUMBS_DOWN |sm_mc_fc {cl} "say !THUMBS_DOWN";sm_mc_om {cl} emotions
    item |THUMBS_UP |sm_mc_fc {cl} "say !THUMBS_UP";sm_mc_om {cl} emotions
    item |TRAP |sm_mc_fc {cl} "say !TRAP";sm_mc_om {cl} emotions
    item |VICTORY_ROYALE |sm_mc_fc {cl} "say !VICTORY_ROYALE";sm_mc_om {cl} emotions
    item |WOW |sm_mc_fc {cl} "say !WOW";sm_mc_om {cl} emotions
    item |ZZZ |sm_mc_fc {cl} "say !ZZZ";sm_mc_om {cl} emotions
    item |Как забиндить эмоцию? |sm_mc_om {cl} emotions_info
    Оффтоп
     
    wayLANder и etojemad нравится это.
  10. over_trax

    over_trax

    Сообщения:
    750
    Симпатии:
    158
    Подскажите, сервер крашится с этим конфигом, как фиксить ?
     

    Вложения:

    • emotes.cfg
      Размер файла:
      4,8 КБ
      Просмотров:
      12
  11. Disaster

    Disaster Не ждите чуда. Чудите сами!

    Сообщения:
    111
    Симпатии:
    16
    Со стандартным все нормально работает ?
     
  12. SlavON

    SlavON

    Сообщения:
    976
    Симпатии:
    136
    Не могу понять, что не так, файлы скачались, вижу плагин запущен, ошибок нет, но ничего не показывает. Я так понимаю надо писать !ZZZ или там !WOW и над головой должна быть картинка? Ничего не вижу :ac:
     
  13. Disaster

    Disaster Не ждите чуда. Чудите сами!

    Сообщения:
    111
    Симпатии:
    16
    Да
    в стандартном конфиге через / а не !
     
  14. SlavON

    SlavON

    Сообщения:
    976
    Симпатии:
    136
    Да, да, уже разобрался) жаль сам не видишь.