Администратор ryancoolround Опубликовано 4 мая, 2020 Администратор Поделиться Опубликовано 4 мая, 2020 Начнем с того, что таких плагинов для Left 4 Dead 2 в сети лежит 1000 и 1 штука. Но этот скрипт я писал сам, для обучения. И поэтому можно разобрать здесь его. Ну а вы меня отругаете, или все переделаете на свой лад. 🖖 Итак, сам код (Кстати, на версии Sourcemod 1.10.6460 он компилируется без проблем): #pragma semicolon 1 #include <sourcemod> #include <sdktools> #include <geoip> #pragma tabsize 0 new Handle:h_connectmsg = INVALID_HANDLE; public Plugin:myinfo = { name = "Анонс о подключении", author = "L4D2Noob.ru Dr.Lex", description = "Сообщает в чате о присоединении игрока", version = "1.6", url = "https://l4d2noob.ru/" }; public OnPluginStart() { h_connectmsg = CreateConVar("sm_connectmsg", "1", "Показывает сообщение о подключении в чате, когда игрок присоединяется.", FCVAR_NOTIFY | FCVAR_DONTRECORD); } public OnClientPutInServer(client) { if (!IsFakeClient(client)) { new Connect = GetConVarInt(h_connectmsg); if(Connect == 1) { new String:name[99], String:authid[99], String:IP[99], String:Country[99]; GetClientName(client, name, sizeof(name)); GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)); GetClientIP(client, IP, sizeof(IP), true); if(!GeoipCountry(IP, Country, sizeof Country)) { Country = "Неизвестный Регион"; } if (CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC, true)) return; PrintToChatAll ("\x04[L4D2Noob]: \x05 Игрок \x04%s \x05 вошел на сервер", name); PrintToChatAll ("\x04[L4D2Noob] \x05 SteamID: \x04[%s]",authid); PrintToChatAll ("\x04[L4D2Noob] \x05 Локация: \x04%s", Country); } else { CloseHandle(h_connectmsg); } } } Давайте разберемся с проблемами, которые возникли у меня при создании. Но опять таки, благодаря @dr.lex их удалось решить. PrintToChatAll ("\x04[L4D2Noob]: \x05 Игрок \x04%s \x05 вошел на сервер", name); PrintToChatAll ("\x04[L4D2Noob] \x05 SteamID: \x04[%s]",authid); PrintToChatAll ("\x04[L4D2Noob] \x05 Локация: \x04%s", Country); Почему то не хотели отображаться цветные сообщения в игре. Оказалось, что виноват символ "»". Что очень странно, ведь в предыдущем моем творении, он исправно работал. Но как только я убрал этот символ, цвета в чате стали отображаться. Кстати, благодаря этому я понял почему @dr.lex ругал меня за #include <colors> в той теме. Оказывается что это подключение отвечает за отображение дополнительных, подключаемых цветов, которые выводятся как {green} или {lightgreen}, и что если ты используешь стандартные цвета типа \x04, то это подключение не нужно. Кстати, надо запомнить, что CPrintToChatAll = {green}, а PrintToChatAll = \x04. Дальше я столкнулся со следующей бедой, это отображение спавна ботов в этом оповещении. То есть плагин считал каждого появившегося бота, как подключившегося игрока. Из за этого в чате игры возникал бесконечный спам. Что бы этого не было, и плагин говорил только о настоящих игроках, нам следующие строки: new Connect = GetConVarInt(h_connectmsg); if(Connect == 1) { new String:name[99], String:authid[99], String:IP[99], String:Country[99]; GetClientName(client, name, sizeof(name)); GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)); GetClientIP(client, IP, sizeof(IP), true); if(!GeoipCountry(IP, Country, sizeof Country)) { Country = "Неизвестный Регион"; } if (CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC, true)) return; PrintToChatAll ("\x04[L4D2Noob]: \x05 Игрок \x04%s \x05 вошел на сервер", name); PrintToChatAll ("\x04[L4D2Noob] \x05 SteamID: \x04[%s]",authid); PrintToChatAll ("\x04[L4D2Noob] \x05 Локация: \x04%s", Country); } else { CloseHandle(h_connectmsg); } Надо просто было поместить в следующий оператор (Не знаю правильно ли я это назвал, но проект не просто так называется l4d2NOOB😞 if (!IsFakeClient(client)) { Поместить сюда } По итогу все. Как может показаться, что это мелочь, но на эту мелочь у меня ушло часа 2,5. «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 17 мая, 2020 Автор Администратор Поделиться Опубликовано 17 мая, 2020 Так же работает и в Counter-Strike: Source. «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
BLOODY BLADE Опубликовано 6 июля, 2020 Поделиться Опубликовано 6 июля, 2020 Connect_Announce.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 3 сентября, 2020 Автор Администратор Поделиться Опубликовано 3 сентября, 2020 07.07.2020 в 01:34, BLOODY BLADE сказал: Connect_Announce.zip 16 kB · 0 скачиваний Я попробовал, не хочет воспроизводится звук. Не в какую... Что я уже не делал со своими знаниями. Сам код довел уже до такого состояния: #pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <sdktools> #include <geoip> #define Join "ambient\tones\elev1.wav" ConVar h_connectmsg, h_connectsound; public Plugin myinfo = { name = "Анонс о подключении", author = "L4D2Noob.ru, Dr.Lex; Модификация - Blode Blade", description = "Сообщает в чате о присоединении игрока", version = "1.8", url = "https://l4d2noob.ru/" }; public void OnPluginStart() { h_connectmsg = CreateConVar("sm_connectmsg", "1", "Показывать сообщение в чате, при подключении игрока?", FCVAR_NOTIFY); h_connectsound = CreateConVar("sm_connectsound", "1", "Воспроизводить звук, при подключении игрока?", FCVAR_NOTIFY); } public void OnMapStart() { PrecacheSound(Join, true); } public void OnClientPutInServer(int client) { if (!IsFakeClient(client) && h_connectmsg.IntValue == 1) { char name[99], authid[99], IP[99], Country[99]; GetClientName(client, name, sizeof(name)); GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)); GetClientIP(client, IP, sizeof(IP), true); if(!GeoipCountry(IP, Country, sizeof Country)) Country = "Неизвестный Регион"; if (CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC, true)) return; if (h_connectsound.IntValue == 1) EmitSoundToClient(client, Join); PrintToChatAll ("\x03********************************************************"); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Игрок \x04%s \x05вошел на сервер \x03*", name); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05SteamID\x01: \x04[%s] \x03*", authid); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Локация\x01: \x04%s \x03*", Country); PrintToChatAll ("\x03********************************************************"); } } Звук не хочет играть и все тут. «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
BLOODY BLADE Опубликовано 3 сентября, 2020 Поделиться Опубликовано 3 сентября, 2020 10 часов назад, Ryancoolround сказал: Я попробовал, не хочет воспроизводится звук. Не в какую... Что я уже не делал со своими знаниями. Сам код довел уже до такого состояния: #pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <sdktools> #include <geoip> #define Join "ambient\tones\elev1.wav" ConVar h_connectmsg, h_connectsound; public Plugin myinfo = { name = "Анонс о подключении", author = "L4D2Noob.ru, Dr.Lex; Модификация - Blode Blade", description = "Сообщает в чате о присоединении игрока", version = "1.8", url = "https://l4d2noob.ru/" }; public void OnPluginStart() { h_connectmsg = CreateConVar("sm_connectmsg", "1", "Показывать сообщение в чате, при подключении игрока?", FCVAR_NOTIFY); h_connectsound = CreateConVar("sm_connectsound", "1", "Воспроизводить звук, при подключении игрока?", FCVAR_NOTIFY); } public void OnMapStart() { PrecacheSound(Join, true); } public void OnClientPutInServer(int client) { if (!IsFakeClient(client) && h_connectmsg.IntValue == 1) { char name[99], authid[99], IP[99], Country[99]; GetClientName(client, name, sizeof(name)); GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)); GetClientIP(client, IP, sizeof(IP), true); if(!GeoipCountry(IP, Country, sizeof Country)) Country = "Неизвестный Регион"; if (CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC, true)) return; if (h_connectsound.IntValue == 1) EmitSoundToClient(client, Join); PrintToChatAll ("\x03********************************************************"); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Игрок \x04%s \x05вошел на сервер \x03*", name); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05SteamID\x01: \x04[%s] \x03*", authid); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Локация\x01: \x04%s \x03*", Country); PrintToChatAll ("\x03********************************************************"); } } Звук не хочет играть и все тут. Т.к. эта версия имеет поддержку использования кастомных звуков, то звук должен находиться на сервере. В случае, со звуком из архива, путь до звука: left4dead2\sound\ambient\tones . Данный звук стандартный для l4d2, потому, уже присутствует у игроков по данному же пути. Ссылка на комментарий Поделиться на другие сайты Поделиться
BLOODY BLADE Опубликовано 3 сентября, 2020 Поделиться Опубликовано 3 сентября, 2020 10 часов назад, Ryancoolround сказал: Я попробовал, не хочет воспроизводится звук. Не в какую... Что я уже не делал со своими знаниями. Сам код довел уже до такого состояния: #pragma semicolon 1 #pragma newdecls required #include <sourcemod> #include <sdktools> #include <geoip> #define Join "ambient\tones\elev1.wav" ConVar h_connectmsg, h_connectsound; public Plugin myinfo = { name = "Анонс о подключении", author = "L4D2Noob.ru, Dr.Lex; Модификация - Blode Blade", description = "Сообщает в чате о присоединении игрока", version = "1.8", url = "https://l4d2noob.ru/" }; public void OnPluginStart() { h_connectmsg = CreateConVar("sm_connectmsg", "1", "Показывать сообщение в чате, при подключении игрока?", FCVAR_NOTIFY); h_connectsound = CreateConVar("sm_connectsound", "1", "Воспроизводить звук, при подключении игрока?", FCVAR_NOTIFY); } public void OnMapStart() { PrecacheSound(Join, true); } public void OnClientPutInServer(int client) { if (!IsFakeClient(client) && h_connectmsg.IntValue == 1) { char name[99], authid[99], IP[99], Country[99]; GetClientName(client, name, sizeof(name)); GetClientAuthId(client, AuthId_Steam2, authid, sizeof(authid)); GetClientIP(client, IP, sizeof(IP), true); if(!GeoipCountry(IP, Country, sizeof Country)) Country = "Неизвестный Регион"; if (CheckCommandAccess(client, "sm_admin", ADMFLAG_GENERIC, true)) return; if (h_connectsound.IntValue == 1) EmitSoundToClient(client, Join); PrintToChatAll ("\x03********************************************************"); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Игрок \x04%s \x05вошел на сервер \x03*", name); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05SteamID\x01: \x04[%s] \x03*", authid); PrintToChatAll ("\x03* \x04[L4D2Noob]\x01: \x05Локация\x01: \x04%s \x03*", Country); PrintToChatAll ("\x03********************************************************"); } } Звук не хочет играть и все тут. Замени EmitSoundToClient(client, Join); на ClientCommand(client, "play Join"); Прекеш звука в таком случае, не используется. Будет работать со стандартными звуками(без наличия самого звука на сервере), что уже имеются у клиентов по умолчанию. Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 3 сентября, 2020 Автор Администратор Поделиться Опубликовано 3 сентября, 2020 10 часов назад, Ryancoolround сказал: #define Join "ambient\tones\elev1.wav" Все проще оказалось. Во всем виноват символ "\". Поменял на "/", все заработало. Спасибо! «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 3 сентября, 2020 Автор Администратор Поделиться Опубликовано 3 сентября, 2020 В скомпилированном файле тег [L4D2Noob] заменен на [СЕРВЕР]. Можно скачать, и сразу использовать. Лишней рекламы не будет. Файл .smx компилировался на версии SM 1.10.0.6492 Файл .sp идеально компилируется на версии SM 1.10.0.6492 Если ищете где отредактировать тег [СЕРВЕР], то это 50, 51 и 52 строки Стандартный звук для L4D2 можно на сервер не загружать, так как: 28 минут назад, BLOODY BLADE сказал: Данный звук стандартный для l4d2, потому, уже присутствует у игроков по данному же пути. Другие звуки, в других модах придется загружать на сервер, и при этом не забывать обновлять контент хостинг. (Да пишу по нубски, я нуб, на таких как я рассчитан этот сайт). Соответственно, если вы загружаете другой звук, то в скрипте, в 7 строке, надо указать, что звук изменен: #define Join "ambient/tones/elev1.wav" Connect_Announce.smx Connect_Announce.sp «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 17 сентября, 2020 Автор Администратор Поделиться Опубликовано 17 сентября, 2020 Изменения 2.0: Блок объявления сделал компактнее Добавил проверку на ADMFLAG_ROOT (Проверка сообщит, если на сервер зашел Гл. Админ) Скрытый текст Connect_Announce.smx Connect_Announce.sp «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
BLOODY BLADE Опубликовано 17 сентября, 2020 Поделиться Опубликовано 17 сентября, 2020 Упростил. OnClientPostAdminCheck здесь не нужен, чтобы узнать админ права. Connect_Announce.sp Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 10 ноября, 2020 Поделиться Опубликовано 10 ноября, 2020 17.09.2020 в 16:57, BLOODY BLADE сказал: Упростил. OnClientPostAdminCheck здесь не нужен, чтобы узнать админ права. Connect_Announce.sp 2 kB · 9 скачиваний Работает спасибо! То что надо Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow Опубликовано 20 декабря, 2020 Поделиться Опубликовано 20 декабря, 2020 В left 4dead 2 не определяет админа Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 20 декабря, 2020 Автор Администратор Поделиться Опубликовано 20 декабря, 2020 Только что, Shadow сказал: В left 4dead 2 не определяет админа Определяет. Я делал его именно в L4D2 тестируя. Просто у тебя наверно что то не так. На работе я проверить не смогу, но завтра у меня выходной, я обязательно посмотрю плагин. Кстати не работает моя версия или версия @BLOODY BLADE? Попробуй обе. «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
Решение Shadow Опубликовано 20 декабря, 2020 Решение Поделиться Опубликовано 20 декабря, 2020 3 минуты назад, Ryancoolround сказал: Определяет. Я делал его именно в L4D2 тестируя. Просто у тебя наверно что то не так. На работе я проверить не смогу, но завтра у меня выходной, я обязательно посмотрю плагин. Кстати не работает моя версия или версия @BLOODY BLADE? Попробуй обе. Надо было сразу обе проверить -_- Твоя версия отлично работает, а от @BLOODY BLADE не определяет админа. Ссылка на комментарий Поделиться на другие сайты Поделиться
Администратор ryancoolround Опубликовано 20 декабря, 2020 Автор Администратор Поделиться Опубликовано 20 декабря, 2020 1 минуту назад, Shadow сказал: Надо было сразу обе проверить -_- Твоя версия отлично работает, а от @BLOODY BLADE не определяет админа. Ну и славно что все так быстро решилось, удалю напоминание у себя на телефоне тогда. А @BLOODY BLADE, он очень редко заходит, но заходит, когда придет обязательно поправит свой плагин, я уверен. «Успех – это приятно, но он не должен быть единственной причиной, по которой вы – музыкант». - Честер Беннингтон Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти