Jump to content

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


Go to solution Solved by Shadow,

Recommended Posts

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

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 month later...
  • 1 month later...
  • Администратор
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********************************************************");
    }
}

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

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, потому, уже присутствует у игроков по данному же пути.

Link to comment
Share on other sites

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");

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

Link to comment
Share on other sites

  • Администратор
10 часов назад, Ryancoolround сказал:

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

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 2 weeks later...
  • Администратор

Изменения 2.0:

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

20200917152953_1.jpg

 

Connect_Announce.smx Connect_Announce.sp

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • 1 month later...
  • 1 month later...
  • Администратор
Только что, Shadow сказал:

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

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

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

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

  • Solution
3 минуты назад, Ryancoolround сказал:

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

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

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

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

Link to comment
Share on other sites

  • Администратор
1 минуту назад, Shadow сказал:

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

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

Ненавижу загружать новые файлы, но обожаю обновлять версии.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...