Emotes Fortnite

Emotes Fortnite v1.07 07/24/2018

Disaster

Не ждите чуда. Чудите сами!
Сообщения
173
Реакции
81
  • Автор ресурса
  • #1
Пользователь Disaster разместил новый ресурс:

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

Эмоции над головой
Скриншот
gMKXBDZwNR8.jpg

Ключ /1_HP - это то, что пользователь должен ввести в чат, чтобы запустить эмоцию.
"material" "materials/emotes/RG/1_HP" - это путь к материалу, который вы хотите отобразить.

C-подобный:
"emotes"
{
    "1_HP"
    {
        "key"    "/1_HP"
        "material"    "materials/emotes/RG/1_HP"
    }
}

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

White Wolf

🍉
Сообщения
2,382
Реакции
2,187
  • Команда форума
  • #2
@Disaster, во первых все скриншоты должны быть во вложениях.
Во вторых где ссылка на оригинал в описании ресурса.
В третьих автор утверждает что плагин работает в ТФ2, почему не отмечено.
Даю вам 24 часа исправить.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
чуть почистил код
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 hMyself, bool bLate, char[] sError, int 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_Event, Param_Cell, Param_String);

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

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

    RegAdminCmd("sm_emote", Command_Emote, ADMFLAG_ROOT);
    RegAdminCmd("sm_clearemotes", Command_ClearEmotes, ADMFLAG_ROOT);
}

public void OnPluginEnd()
{
    ClearAllEmotes();
}

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

    char key[64];
    GetNativeString(2, key, sizeof(key));

    return SpawnEmote(client, key, GetNativeCell(3), GetNativeCell(4));
}

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

    ClearClientEmotes(client);
}

public int Native_GetEmoteMaterial(Handle plugin, int numParams)
{
    char key[64];
    GetNativeString(1, key, sizeof(key));

    char material[PLATFORM_MAX_PATH];
    g_hEmoteMap.GetString(key, material, PLATFORM_MAX_PATH);
    SetNativeString(2, material, GetNativeCell(3));
}

public int Native_IsEmote(Handle plugin, int numParams)
{
    char key[64];
    GetNativeString(1, key, sizeof(key));

    return IsEmote(key);
}

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

public Action Command_Emote(int client, int 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(1, arg, sizeof(arg));
    GetCmdArg(2, arg2, sizeof(arg2));
    GetCmdArg(3, arg3, sizeof(arg3));
    GetCmdArg(4, arg4, sizeof(arg4));

    if(!IsEmote(arg2))
    {
        ReplyToCommand(client, "%s \x04%s\x09 is not an emote!", EMOTES_PREFIX, arg2);
        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(client, target_count);
        return Plugin_Handled;
    }

    for(int i; i < target_count; i++)
        SpawnEmote(target_list[i], arg2, StringToFloat(arg3), StringToFloat(arg4));

    return Plugin_Handled;
}

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

    char arg[65];
    GetCmdArg(1, arg, sizeof(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(client, target_count);
        return Plugin_Handled;
    }

    for(int i; i < target_count; i++)
        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(message, sizeof(message), sArgs);

    Action result = Plugin_Continue;
    Call_StartForward(g_hOnEmoteSpawnSay);
    Call_PushCell(client);
    Call_PushStringEx(message, sizeof(message), SM_PARAM_STRING_COPY, SM_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(client, message, g_EmoteScale.FloatValue, g_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", key, EMOTES_KEY_LENGTH);
        g_hEmoteConfig.GetString("material", materialPath, PLATFORM_MAX_PATH);

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

        g_hEmoteMap.SetString(key, materialPath, false);
        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", materialPath, PLATFORM_MAX_PATH);

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

        AddFileToDownloadsTable(materialPath);
        AddFileToDownloadsTable(matVTF);

        PrecacheModel(materialPath);

    } while (g_hEmoteConfig.GotoNextKey());
}

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

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

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

    int sprite = CreateEntityByName("env_sprite_oriented");
    float pos[3];
    GetClientAbsOrigin(client, pos);

    if(bTF2) GetClientEyePosition(client, pos);
    else GetClientAbsOrigin(client, pos);

    if(IsPlayerAlive(client))
    {
        if(bTF2) pos[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(sprite, pos, NULL_VECTOR, NULL_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(sprite, Prop_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(link, MODEL_EMPTY);

    SetEntProp(link, Prop_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 = 1, i, ent; client <= MaxClients; client++) if(IsClientInGame(client))
    {
        for(i = 0; i < EMOTES_MAX_EMOTES_PER_PLAYER; i++)
        {
            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(client, clientPos);
                    GetEntPropVector(ent, Prop_Data, "m_vecOrigin", pos);
                    float temp = float(g_iFramesToMove[client][i]) / 200.0;
                    if(bTF2) pos[1] -= temp * temp;
                    else pos[2] += temp * temp;
                    TeleportEntity(ent, pos, NULL_VECTOR, NULL_VECTOR);
                }
                if(GetGameTime() > g_fTimeToKillEmote[client][i])
                    ClearClientEmote(client, i);
            }
        }
    }
}

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; i >= 0; i--)
    {
        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(ent, Prop_Data, "m_vecOrigin", pos);
            pos[2] += EMOTE_SNAP_OFFSET;
            TeleportEntity(ent, pos, NULL_VECTOR, NULL_VECTOR);
        }
    }
}

public void InitializeClientEmotesArray(int client)
{
    for(int i; i < EMOTES_MAX_EMOTES_PER_PLAYER; i++)
    {
        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 client, int 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 i; i < EMOTES_MAX_EMOTES_PER_PLAYER; i++)
        ClearClientEmote(client, i);

    g_fTimeUsedEmote[client] = 0.0;
}

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

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

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

Disaster

Не ждите чуда. Чудите сами!
Сообщения
173
Реакции
81
  • Автор ресурса
  • #4
@Grey83 73 эмоции через меню, проще бинд )
 

Grey83

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

L4NOFF

Участник
Сообщения
59
Реакции
34
Даа, с менюхой было б зачётно
 

pashaV1rtual

Участник
Сообщения
63
Реакции
11
Воу, крутяк плагин, вот бы модулем к випке от 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
Оффтоп
 

over_trax

Участник
Сообщения
1,451
Реакции
488
Подскажите, сервер крашится с этим конфигом, как фиксить ?
 

Вложения

  • emotes.cfg
    4.8 КБ · Просмотры: 18

SlavON

Добрая душа
Сообщения
1,582
Реакции
326
Не могу понять, что не так, файлы скачались, вижу плагин запущен, ошибок нет, но ничего не показывает. Я так понимаю надо писать !ZZZ или там !WOW и над головой должна быть картинка? Ничего не вижу :ac:
 

Disaster

Не ждите чуда. Чудите сами!
Сообщения
173
Реакции
81
  • Автор ресурса
  • #13
Да
Не могу понять, что не так, файлы скачались, вижу плагин запущен, ошибок нет, но ничего не показывает. Я так понимаю надо писать !ZZZ или там !WOW и над головой должна быть картинка? Ничего не вижу :ac:
в стандартном конфиге через / а не !
 

GuSenoK

Участник
Сообщения
253
Реакции
8
На 34 у кого-нибудь работает? У меня вроде загрузилось, но на команы не реагирует.
В логах
L 10/26/2018 - 03:37:28: [SM] Exception reported: NULL not allowed
L 10/26/2018 - 03:37:28: [SM] Blaming: emotes.smx
L 10/26/2018 - 03:37:28: [SM] Call stack trace:
L 10/26/2018 - 03:37:28: [SM] [0] DispatchKeyValue
L 10/26/2018 - 03:37:28: [SM] [1] Line 345, C:\Users\Jimi\Desktop\SourcePawn\CSGO\Finished\EMOTES\addons\sourcemod\scripting\emotes.sp::SpawnEmote
L 10/26/2018 - 03:37:28: [SM] [2] Line 260, C:\Users\Jimi\Desktop\SourcePawn\CSGO\Finished\EMOTES\addons\sourcemod\scripting\emotes.sp::OnClientSayCommand
 

GuSenoK

Участник
Сообщения
253
Реакции
8
Пошла на css 34 у кого? Пишу в чате например /1_HP и ничего не происходит. А так плагин работает вроде. Пробовал другие эмоции, тоже ничего.
 

Raven1313

Участник
Сообщения
208
Реакции
28
А как правильно добавлять свои "эмоции"?
 
Сверху Снизу