Администратор Ryancoolround Опубликовано 21 ноября, 2021 Администратор Поделиться Опубликовано 21 ноября, 2021 Простая переливающаяся радужная аура на игроке в L4D2, которая включается и выключается по команде. Переменная: rainbow_time 3.0 отвечает за время существование одного цвета в радуге. Команды: !arco - Включить радугу !arcoff - Выключить радугу Установка: Либо готовую версию .smx поместить в /addons/sourcemod/plugins, либо скомпилировать исходник и поместить туда же. Сделать рестарт сервера. rainbow_player.sp rainbow_player.smx Исходник плагина #pragma semicolon 1 #pragma newdecls required #include #include #include int g_iLight[MAXPLAYERS+1]; ConVar g_hRainbowTime; public Plugin myinfo = { name = "[L4D2] Rainbow Flashlight", author = "King", description = "Set Rainbow To flashlight", version = "1.0.0", url = "" }; public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max) { EngineVersion test = GetEngineVersion(); if (test != Engine_Left4Dead && test != Engine_Left4Dead2) { strcopy(error, err_max, "Plugin only supports Left 4 Dead 1 & 2."); return APLRes_SilentFailure; } return APLRes_Success; } public void OnPluginStart() { g_hRainbowTime = CreateConVar("rainbow_time", "3.0", "time for aura and body change"); HookEvent("player_death", Event_PlayerDeath); HookEvent("round_end", Event_RE); RegAdminCmd("sm_arco", Command_Rainbow, ADMFLAG_ROOT, "make rainbow light_dynamic"); RegAdminCmd("sm_arcoff", Command_RainbowOff, ADMFLAG_ROOT, "kill rainbow light_dynamic"); AutoExecConfig(true, "rainbow_light"); } public Action Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast) { RemoveNeon(GetClientOfUserId(event.GetInt("userid"))); } public Action Event_RE(Event event, const char[] name, bool dontBroadcast) { RemoveNeon(GetClientOfUserId(event.GetInt("userid"))); } public void OnClientDisconnect(int iClient) { g_iLight[iClient] = 0; } public Action Command_Rainbow(int client, int args) { SetClientNeon(client); } public Action Command_RainbowOff(int client, int args) { RemoveNeon(client); } int SetClientNeon(int iClient) { RemoveNeon(iClient); g_iLight[iClient] = CreateEntityByName("light_dynamic"); DispatchKeyValue(g_iLight[iClient], "brightness", "4"); float fOrigin[3]; GetClientAbsOrigin(iClient, fOrigin); DispatchKeyValue(g_iLight[iClient], "spotlight_radius", "250"); DispatchKeyValue(g_iLight[iClient], "distance", "255"); DispatchKeyValue(g_iLight[iClient], "style", "0"); SetEntPropEnt(g_iLight[iClient], Prop_Send, "m_hOwnerEntity", iClient); SDKHook(iClient, SDKHook_PreThinkPost, OnRainbowPlayer); if(DispatchSpawn(g_iLight[iClient])) { AcceptEntityInput(g_iLight[iClient], "TurnOn"); TeleportEntity(g_iLight[iClient], fOrigin, NULL_VECTOR, NULL_VECTOR); SetVariantString("!activator"); AcceptEntityInput(g_iLight[iClient], "SetParent", iClient, g_iLight[iClient], 0); SDKHook(g_iLight[iClient], SDKHook_SetTransmit, OnTransmit); return; } g_iLight[iClient] = 0; } void RemoveNeon(int iClient) { if(g_iLight[iClient] && IsValidEdict(g_iLight[iClient])) { AcceptEntityInput(g_iLight[iClient], "TurnOff"); AcceptEntityInput(g_iLight[iClient], "Kill"); SetEntProp(iClient, Prop_Send, "m_glowColorOverride", 0); SetEntProp(iClient, Prop_Send, "m_iGlowType", 0); SetEntProp(iClient, Prop_Send, "m_nGlowRange", 0); SetEntProp(iClient, Prop_Send, "m_nGlowRangeMin", 0); SDKUnhook(iClient, SDKHook_PreThinkPost, OnRainbowPlayer); } g_iLight[iClient] = 0; } public Action OnTransmit(int iEntity, int iClient) { if (g_iLight[iClient] == iEntity) { return Plugin_Continue; } static int iOwner, iTeam; if ((iOwner = GetEntPropEnt(iEntity, Prop_Send, "m_hOwnerEntity")) > 0 && (iTeam = GetClientTeam(iClient)) > 1 && GetClientTeam(iOwner) != iTeam) { return Plugin_Handled; } return Plugin_Continue; } public Action OnRainbowPlayer(int iClient) { if (!(0 < iClient <= MaxClients && IsClientInGame(iClient) && IsPlayerAlive(iClient))) { SDKUnhook(iClient, SDKHook_PreThinkPost, OnRainbowPlayer); return Plugin_Continue; } float flRainbow = g_hRainbowTime.FloatValue; int color[3]; color[0] = RoundToNearest((Cosine((GetGameTime() * flRainbow) + iClient + 0) * 127.5) + 127.5); color[1] = RoundToNearest((Cosine((GetGameTime() * flRainbow) + iClient + 2) * 127.5) + 127.5); color[2] = RoundToNearest((Cosine((GetGameTime() * flRainbow) + iClient + 4) * 127.5) + 127.5); //Light Color char sBuffer[16]; FormatEx(sBuffer, sizeof(sBuffer), "%i %i %i %i", GetRandomColor(color[2]), GetRandomColor(color[1]), GetRandomColor(color[0]), 255); DispatchKeyValue(g_iLight[iClient], "_light", sBuffer); //GLow Color SetEntProp(iClient, Prop_Send, "m_glowColorOverride", color[2] + (color[1] * 256) + (color[0] * 65536)); SetEntProp(iClient, Prop_Send, "m_iGlowType", 3); SetEntProp(iClient, Prop_Send, "m_nGlowRange", 99999); SetEntProp(iClient, Prop_Send, "m_nGlowRangeMin", 0); //Player Color SetEntityRenderColor(iClient, color[2], color[1], color[0], 255); return Plugin_Continue; } stock int GetRandomColor(int color) { return (color == -1 || color < 0 || color > 255) ? GetRandomInt(0, 255) : color; } Форум для вас существует бесплатно и без рекламы, однако сервер Minecraft, домен и интернет не бесплатны, поэтому ваша помощь приветствуется. Поддержите IP-Gamers! Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор Ryancoolround Опубликовано 25 ноября, 2021 Автор Администратор Поделиться Опубликовано 25 ноября, 2021 Пример можно посмотреть в этом видео: Форум для вас существует бесплатно и без рекламы, однако сервер Minecraft, домен и интернет не бесплатны, поэтому ваша помощь приветствуется. Поддержите IP-Gamers! Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор Ryancoolround Опубликовано 21 июля, 2022 Автор Администратор Поделиться Опубликовано 21 июля, 2022 Переформатирован синтаксис Сообщения в коде переведены на русский язык Добавлена ссылка в коде на эту тему На 47, 53, 64, 70 строки добавлено: return Plugin_Handled; Что бы избавится от предупреждений: warning 242: function "Event_PlayerDeath" should return an explicit value warning 242: function "Event_RE" should return an explicit value warning 242: function "Command_Rainbow" should return an explicit value warning 242: function "Command_RainbowOff" should return an explicit value На 95 и 99 строки нужно было добавить: return 0; Что бы избавится от предупреждения: warning 209: function has explicit 'int' tag but does not return a value Готовый вариант плагина скомпилирован на SourceMod 1.11.0.6905 В следующей версии нужно не забыть команду !arco сделать доступной для всех игроков, а не только для админов. rainbow_player.sp rainbow_player.smx Форум для вас существует бесплатно и без рекламы, однако сервер Minecraft, домен и интернет не бесплатны, поэтому ваша помощь приветствуется. Поддержите IP-Gamers! Ссылка на комментарий Поделиться на другие сайты Поделиться
Darya Опубликовано 13 сентября Поделиться Опубликовано 13 сентября В 22.07.2022 в 00:30, ryancoolround сказал: В следующей версии нужно не забыть команду !arco сделать доступной для всех игроков, а не только для админов. Замечательно! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти