Jump to content

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


Go to solution Solved by Shadow,

Recommended Posts

  • Administrator

20200504203306_1.jpg

Начнем с того, что таких плагинов для 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 post
  • 2 weeks later...
  • Replies 60
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Версия 2.2 в варианте "Скачал/Установил/Перезапустил Сервер", будет работать только в L4D2. Поэтому из названия темы убрал CSS. Соответственно, если хотите, что бы плагин корректно работал в Coun

Упростил. OnClientPostAdminCheck здесь не нужен, чтобы узнать админ права. Connect_Announce.sp

Connect_Announce.zip

  • Administrator

Так же работает и в Counter-Strike: Source.

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

Link to post
  • 1 month later...
  • 1 month later...
  • Administrator
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 post
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, потому, уже присутствует у игроков по данному же пути.

  • Sad 1
Link to post
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");

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

  • Sad 1
Link to post
  • Administrator
10 часов назад, Ryancoolround сказал:

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

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

  • Sad 1

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

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

  • Sad 1

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

Link to post
  • 2 weeks later...
  • Administrator

Изменения 2.0:

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

20200917152953_1.jpg

 

Connect_Announce.smx Connect_Announce.sp

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

Link to post
  • 1 month later...
  • 1 month later...
  • Administrator
Только что, Shadow сказал:

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

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

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

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

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

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

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

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

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

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

  • Sad 1
Link to post
  • Administrator
1 минуту назад, Shadow сказал:

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

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

Я не ищу ничего логичного, например денег. Меня нельзя купить, запугать, аргументировать или договориться со мной. Я просто хочу смотреть, как горит мир.

Link to post

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.

  • Similar Content

    • By Ry@N
      Поздаравление от Pikachu.Я использую читы не ради себя и не для набивания рейтинга . Я использую читы только для победы моей команды . Я не зазываю использовать читы это плохо я согласен.
      Я заслужил бана баньте. Ваше решения я нарушил првавила.
      ПОЗДРАВЛЯЮ ВСЕХ С НОВЫМ ГОДОМ 2021  FOREVER
    • By Ry@N
      Поздаравление от Pikachu.Я использую читы не ради себя и не для набивания рейтинга . Я использую читы только для победы моей команды . Я не зазываю использовать читы это плохо я согласен.
      Я заслужил бана баньте. Ваше решения я нарушил првавила.
      ПОЗДРАВЛЯЮ ВСЕХ С НОВЫМ ГОДОМ 2021  FOREVER
    • By Ry@N
      Поздаравление от Pikachu.Я использую читы не ради себя и не для набивания рейтинга . Я использую читы только для победы моей команды . Я не зазываю использовать читы это плохо я согласен.
      Я заслужил бана баньте. Ваше решения я нарушил првавила.
      ПОЗДРАВЛЯЮ ВСЕХ С НОВЫМ ГОДОМ 2021  FOREVER
    • By Shadow
      Я тут плагин нашел для рейтинга.
      @Ryancoolround Мне нужно чтобы ты на сайте сделал систему рейтинга.
      Я тебе там кое чего скинул, посмотри.
    • By Ry@N
      Обновление сообщества Left 4 Dead 2: The Last Stand выходит 24 сентября, и мы празднуем его бесплатными выходными!
      Хватайте своих друзей и сражайтесь с ордой зомби на более чем двадцати новых аренах выживания, четырех новых аренах сбора и кампании, основанной на карте выживания Маяк. Новые достижения, холодное оружие, анимация, диалоги, корректировка игрового баланса и другие сюрпризы завершают это официальное обновление Left 4 Dead 2, созданное сообществом для сообщества.
      Взгляните на новый трейлер ниже!
       
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Если у пчелы аллергия на пыльцу; заболеет ли она крапивницей?




×
×
  • Create New...