Опубликовано 21 ноября, 20213 г. Администраторы Простая переливающаяся радужная аура на игроке в 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;} Изменено 31 октября31 окт пользователем Ryancoolround Обновил тег. (смотреть историю редактирования)
Опубликовано 21 июля, 20222 г. Автор Администраторы Переформатирован синтаксис Сообщения в коде переведены на русский язык Добавлена ссылка в коде на эту тему На 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
Опубликовано 13 сентября13 сент В 22.07.2022 в 00:30, ryancoolround сказал: В следующей версии нужно не забыть команду !arco сделать доступной для всех игроков, а не только для админов. Замечательно!
Опубликовано 31 октября31 окт Автор Администраторы В 13.09.2024 в 23:37, Darya сказал:Замечательно!Рад, что все понравилось!
Простая переливающаяся радужная аура на игроке в L4D2, которая включается и выключается по команде.
Переменная:
отвечает за время существование одного цвета в радуге.
Команды:
Установка:
Либо готовую версию .smx поместить в /addons/sourcemod/plugins, либо скомпилировать исходник и поместить туда же.
Сделать рестарт сервера.
rainbow_player.sp rainbow_player.smx
Изменено пользователем Ryancoolround
Обновил тег. (смотреть историю редактирования)