Перейти к содержанию

Оповещение о подключении игрока на сервер


Перейти к решению Решено Shadow,

Рекомендуемые сообщения

  • Администратор

Начнем с того, что таких плагинов для 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.

Ссылка на комментарий
Поделиться на другие сайты
  • 2 недели спустя...
  • 1 месяц спустя...
  • 1 месяц спустя...
  • Администратор
07.07.2020 в 01:34, BLOODY BLADE сказал:

Я попробовал, не хочет воспроизводится звук. Не в какую... Что я уже не делал со своими знаниями. Сам код довел уже до такого состояния:

#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********************************************************");
    }
}

Звук не хочет играть и все тут.

Ссылка на комментарий
Поделиться на другие сайты
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, потому, уже присутствует у игроков по данному же пути.

Ссылка на комментарий
Поделиться на другие сайты
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");

Прекеш звука в таком случае, не используется. Будет работать со стандартными звуками(без наличия самого звука на сервере), что уже имеются у клиентов по умолчанию.

Ссылка на комментарий
Поделиться на другие сайты
  • Администратор
10 часов назад, Ryancoolround сказал:

#define Join "ambient\tones\elev1.wav"

Все проще оказалось. Во всем виноват символ "\". Поменял на "/", все заработало. Спасибо!

Ссылка на комментарий
Поделиться на другие сайты
  • Администратор
  • В скомпилированном файле тег [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

Ссылка на комментарий
Поделиться на другие сайты
  • 2 недели спустя...
  • Администратор

Изменения 2.0:

  • Блок объявления сделал компактнее
  • Добавил проверку на ADMFLAG_ROOT (Проверка сообщит, если на сервер зашел Гл. Админ)
Скрытый текст

20200917152953_1.jpg

 

Connect_Announce.smx Connect_Announce.sp

Ссылка на комментарий
Поделиться на другие сайты
  • 1 месяц спустя...
  • 1 месяц спустя...
  • Администратор
Только что, Shadow сказал:

В left 4dead 2 не определяет админа 

Определяет. Я делал его именно в L4D2 тестируя. Просто у тебя наверно что то не так.

На работе я проверить не смогу, но завтра у меня выходной, я обязательно посмотрю плагин.

Кстати не работает моя версия или версия @BLOODY BLADE? Попробуй обе.

Ссылка на комментарий
Поделиться на другие сайты
  • Решение
3 минуты назад, Ryancoolround сказал:

Определяет. Я делал его именно в L4D2 тестируя. Просто у тебя наверно что то не так.

На работе я проверить не смогу, но завтра у меня выходной, я обязательно посмотрю плагин.

Кстати не работает моя версия или версия @BLOODY BLADE? Попробуй обе.

Надо было сразу обе проверить -_-
Твоя версия отлично работает, а от  @BLOODY BLADE не определяет админа.

Ссылка на комментарий
Поделиться на другие сайты
  • Администратор
1 минуту назад, Shadow сказал:

Надо было сразу обе проверить -_-
Твоя версия отлично работает, а от  @BLOODY BLADE не определяет админа.

Ну и славно что все так быстро решилось, удалю напоминание у себя на телефоне тогда. А @BLOODY BLADE, он очень редко заходит, но заходит, когда придет обязательно поправит свой плагин, я уверен.

Ссылка на комментарий
Поделиться на другие сайты
  • Райан изменил название на Оповещение о подключении игрока на сервер

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Похожий контент

    • Автор Райан
      Плагин печатает игрокам сообщения с советами и дополнительно игроки могут отключить или включить советы. Помимо этого в плагине настроены команды на отображение IP, Группы Steam, сайта и Discord сервера.

      Все советы и рекламные сообщения настраиваются в файле перевода Simple_Tips_Chat.phrases.txt
      Конфиг плагина:
      // Enable Tips Messages || 1= Yes || 0= No sm_tips_enable "1" // Commands To Disable / Enable Tips sm_tips_cmd_tips "sm_tips;sm_tip" // How many Tips Messages did you use in Simple_Tips_Chat.phrases sm_tips_lines "6" // Time in seconds between Tips Messages // Default: "101.0" sm_tips_time "101.0" /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Enable Welcome Message || 1= Yes || 0= No sm_tips_enable_welcome "1" // How many Welcome Messages did you use in Simple_Tips_Chat.phrases Max is 8 Lines sm_tips_welcome_lines "7" // Time in seconds To Send Welcome messages // Default: "15.0" sm_tips_welcome_time "15.0" /////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Enable Command discord print chat || 1= Yes || 0= No sm_tips_enable_discord "1" // Commands To Print Discord sm_tips_cmd_dis "sm_discord" // Enable Command ip print chat || 1= Yes || 0= No sm_tips_enable_ip "1" // Commands To Print Ip sm_tips_cmd_ip "sm_ip;sm_serverip" // Enable Command steamgroup print chat || 1= Yes || 0= No sm_tips_enable_steamgroup "1" // Commands To Print Steam Group sm_tips_cmd_steam "sm_steamgroup;sm_steam;sm_group" // Enable Command website print chat || 1= Yes || 0= No sm_tips_enable_website "1" // Commands To Print Website sm_tips_cmd_web "sm_website;sm_web;sm_site"  
      Simple Tips Chat.zip
    • Автор Райан
      Демонстрация скрипта: https://ip-gamers.net/page/23-monitoring-aktivnosti-administratorov-servera/ Данный скрипт позволит анализировать то, как часто ваши администраторы заходят на игровой сервер.
      Установка:
      Скачать архив и распаковать Создать базу данных Содержимое папки Server поместить в корень сервера В databases.cfg добавить следующий массив, в котором нужно указать данные от вашей базы данных "adminwatch" { "driver" "mysql" "host" "localhost" "database" "Имя базы" "user" "Имя пользователя" "pass" "Пароль" "port" "3306" } Содержимое папки web положить в удобное место на вашем сайте В директории \web\includes в файле database.include указать данные от вашей базы данных var $Host = "localhost или IP адрес"; // Hostname of our MySQL server. var $Database = "Имя базы"; // Logical database name on that server. var $User = "Имя пользователя"; // User and Password for login. var $Password = "Пароль"; var $Port = 3306; Сделать рестарт сервера Заметки:
      Если нет соединения с базой данных страница будет выдавать 500 ошибку Админов как я понял нужно удалять вручную из базы adminwatch.zip
    • Автор Райан
      Простой плагин для L4D2, который показывает количество оставшихся выживших в чате.

      L4D_Counting_Survivors.sp L4D_Counting_Survivors.smx
    • Автор Райан
      Плагин, который позволяет игрокам выбирать язык, на который они хотят, чтобы SourceMod переводил текст. Переводы должны быть предоставлены плагинами, чтобы это имело какое-либо влияние на них. Требуется как минимум SourceMod 1.11.
      Функции:
      Настраиваемое меню и автоматически сгенерированный cfg/sourcemod/plugin.langselect.cfg. Сохраняет настройки языка игрока между сеансами (можно отключить). Необязательный запрос для новых игроков на выбор языка (либо спрашивайте один раз, либо спрашивайте, пока они что-то не выберут). Полная поддержка перевода. Как установить:
      Загрузите и распакуйте архив в addons/sourcemod/. После первой загрузки будет сгенерирован файл cfg/sourcemod/plugin.langselect.cfg, который затем можно настроить. При обновлении помните, что автоматически сгенерированный файл конфигурации может потребоваться удалить (но только если были добавлены новые ConVars). Команды:
      Как и все sm_ команды, которые вы можете использовать ! или / тоже, как !lang или /lang
      // Все игроки sm_language <Country Code> или sm_language sm_lang <Country Code> или sm_lang // Админы sm_getlanguage <Target> sm_getlang <Target> // Админы sm_setlanguage <Target> <Country Code> sm_setlang <Target> <Country Code> // Админы sm_resetlanguage <Target> sm_resetlang <Target> Пример конфига:
      // Allow custom language codes with "sm_language <Code>". // If 0, only codes available in the config (or the built-in list if config is disabled) are permitted. // - // Default: "0" // Minimum: "0.000000" // Maximum: "1.000000" langselect_allow_custom "0" // Show a "Reset Language" option on the menu. // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" langselect_allow_reset "1" // Location of the Language Selector config file (relative to the SourceMod directory). // - // Default: "configs/langselect.cfg" langselect_config "configs/langselect.cfg" // How should the language selection prompt show to a new player. // 0 - On each respawn until a language is selected. // 1 - Only once per session. // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" langselect_prompt_once "1" // Should a player's selected language be saved. // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" langselect_save "1" // Ask new players to select a language when they spawn. // - // Default: "0" // Minimum: "0.000000" // Maximum: "1.000000" langselect_show_prompt "0" // Should the config file be used to set the available languages. // If 0, this will use a built-in list of languages. // - // Default: "1" // Minimum: "0.000000" // Maximum: "1.000000" langselect_use_config "1" Перевод:
      Если кто-то хочет помучиться и попытаться перевести файл перевода гигантского размера, пожалуйста, поделитесь им здесь, и я мог бы добавить его в плагин. Файл перевода содержит более 250 фраз.
      lang-selector-1.0.0.zip
    • Автор Райан
      Плагин проверялся на версии Sourcemod 1.10.0.6492, на сервере Left 4 Dead 2.
      Этот плагин включает визуальный эффект взрыва при смерти игрока. Это никоим образом не меняет игровой процесс. Однако, когда игрок умирает, его тело круто взрывается.
      explode_on <1/0> - Отвечает за включение и отключение плагина Скачать актуальную версию плагина. PlayerExplode.smx - Скомпилированный плагин PlayerExplode.sp - Исходный код
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу


×
×
  • Создать...