123new

[DayZ 1.0] Объявления о количестве игроков в чат

17 сообщений в этой теме

В данной теме мы с вами научимся создавать простой скрипт, который позволит выводить в чат объявления о количестве игроков.

 

Нам понадобится:

1. Сервер DayZ 1.0, сделанный по одному из гайдов:

2. Notepad++

3. Немножечко трезвого ума

 

Приступим:

1. Открываем Mpmissions - dayzOffline.chernarusplus - init.c
2. В самом начале файла добавляем:

#include "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\PlayersMessagesCount.c" 

Находим функцию

void main()

и перед ее закрывающей скобкой "}"добавляем:

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(SendPlayersCount, CountPlayers_TIME_InfoPlayers_Repeat, true); 

3. Помещаем в папку файл

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Либо создаем вручную этот файл с именем "PlayersMessagesCount.c" и заполняем его следующим текстом:

int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000)
string Message_Chat = "Online Players: ";
void SendPlayersCount()
{
	array<Man> players = new array<Man>;
	GetGame().GetPlayers( players );
	int numbOfplayers = players.Count();
	
	if( numbOfplayers > 0 )
	{
		foreach(Man player: players)
		{
			CountPlayers_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);
		}
	//   GetGame().ChatPlayer(0,Message_Chat + numbOfplayers.ToString());
	}
}
void CountPlayers_SendPersonalMessage(string message, Man player) 
{
	if(( player ) && (message != ""))
	{
		Param1<string> m_GlobalMessage = new Param1<string>(message); 
		GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
	}
}

4. Настраиваем файл как нам нужно. Т.е. в строке

int CountPlayers_TIME_InfoPlayers_Repeat = 120000; //in ms (120 seconds = 120000)

указываем время повтора вывода сообщений в чат (поумолчанию стоит 2 минуты)

и текст сообщений в переменной

string Message_Chat = "Online Players: ";

 

P.S. Если сообщения вам не видны, включите их видимость в настройках вашего клиента игры для себя!

 

Изменено пользователем 123new (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Забронировать это рекламное место


123new при запуске сервера выдает ошибку в файле PlayerMessagesCount.c(13): Undefined function 'InfoMassages_SendPersonalMessage'

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

123new все исправил работает

 

Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

123new замените в файле PlayersMessagesCount.c строку

InfoMessages_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);

на

CountPlayers_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);

 

Изменено пользователем PJIIOxa (история изменений)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, PJIIOxa сказал:

123new замените в файле PlayersMessagesCount.c строку

InfoMessages_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);

на

CountPlayers_SendPersonalMessage(Message_Chat + numbOfplayers.ToString(), player);

 

поправил, спасибо, проглядел

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А никак нельзя сделать на основе этого скрипта - другой скрипт об оповещении кто кого убил???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
7 минут назад, danisimus сказал:

А никак нельзя сделать на основе этого скрипта - другой скрипт об оповещении кто кого убил???

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Парни подскажите пожалуйста, сделал все по иструкции, все поставилось сервер загружается ничего не конфликтует, но на сервере не показывает эти сообщения!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуй переустановить. Даже у меня получилось))) поверь, это показатель простоты в установке)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

всем привет, чат в последнем обновлении уже пофиксили, подскажите пожайлуйста как сделать обратно чтоб вместо красного чата от BattlEye теперь инфа о количестве игроков писалась белым цветом)  

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если с InfoMessages использовать, вместо одного сообщения об онлайне приходит несколько, полностью засоряя чат(но сообщение из infomessages приходит). Как исправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 21.06.2019 в 14:56, Bounty сказал:

Если с InfoMessages использовать, вместо одного сообщения об онлайне приходит несколько, полностью засоряя чат(но сообщение из infomessages приходит). Как исправить?

не наблюдал такого, весьма странное явление

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


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

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: 123new
      За основу взята наработка автора скрипта: http://s-platoon.ru/profile/14721-borizzk/
      И немного доработана по своим соображениям.
      Использование мода клиенту игры НЕ ТРЕБУЕТСЯ!!!
       
      И так, установка:
      1. Первым делом нам необходим чистый стандартный сервер DayZ (без модов, поскольку моды могу приводить к неработоспособности частей гайда). Установить его можно по инструкции, например, так:
      2. Добавляем в папку сервера игры мод из архива:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. Добавляем в параметры запуска сервера:
      -Filepatching "[email protected]_ServerMod" Если ваш сервер уже имеет серверные моды, просто добавьте папку с модом в список используемых сервером модов.
      ВАЖНО: не добавляйте данный мод в параметр запуска сервера -mod=, иначе это может стать проблемой заходи игроков с параметрами verifysignatures=2; equalmodrequired=1;
      4. В 'config-файле' сервера (там где названием сервера и прочие настройки) добавляем настройки для мода:
      //KillFeed_mod KillFeed_enableSaveKills = 1; // Включение сохранения счетчика убийств по игрокам KillFeed_enableSaveDies = 1; // Включение сохранения счетчика смертей по игрокам KillFeed_enableCustomTimeLog = 1; // Включение записи модом 'Кастомных' логов смертей игроков KillFeed_enableDefaultLog = 1; // Включение записи сервером стандартных логов сервера в scripts.log KillFeed_enableDebugLog = 1; // Включение записи сервером отладочных логов сервера в scripts.log (работает при KillFeed_enableDefaultLog = 1) KillFeed_enableMessages = 1; // Включение отправки сообщений в чат сервера о смертях игроков Пояснения к настройкам, как видите, имеются.
      Напомню, активный профиль сервера обозначается параметром '-profiles={имя папки или путь до папки}'
      Например, при указании:
      -profiles=Instance_1 папка профиля сервера будет выглядеть вот так:
      5. Запускаем сервер, умираем от зомби и радуемся. Сообщения о смертях игроков будут в чате у других игроков (если в настройках игры они не отключены), так и в script.log.

      Где хранятся счетчики убийств и смертей? Ответ:
      Они хранятся в profile сервера игры. Т.е. после 1-го запуска создаются 2 файла (как у клиента игры в документах windows в папку dayz) в файлах с расширениями ".vars.DayZProfile" и ".DayZProfile". При удалении этих файлов счетчики сбросятся!
       
      P.S. Чтобы увидеть сообщения в чате, нужно быть 2-м игрокам на сервере, и умереть одному из двух. тот, кто умирает, сообщения с чата не видит!!!
       
    • Автор: 123new
      Нам понадобится:
      1. Сервер DayZ Standalone (см. тему вот эту)
      2. Notepad++: бесплатно на оф. сайте
      3. Немного времени и настойчивости (обычно бывает в комплекте и так)
       
      И так, начинаем:
      1. Открываем блокнотом mpmissions\dayzOffline.chernarusplus\init.c
      P.S. Имя папки dayzOffline.chernarusplus у вас может отличаться, будьте внимательны
      2. В начале файла добавляем:
      static int time_repeat_info_players = 10; //in seconds static string file_name_info_players = "$profile:PlayersLogFile.txt"; static void WriteFile(string file_name, string text) { private FileHandle fhandle; if ( !FileExist(file_name) ) { fhandle = OpenFile(file_name, FileMode.WRITE); } else { fhandle = OpenFile(file_name, FileMode.APPEND); } if ( fhandle == 0 ) { Print("[#Запись_в_файл]: Не удалось открыть файл для записи: " + file_name); Print("[#Запись_в_файл]: [Запись]: " + text); return; } FPrintln(fhandle, text); CloseFile(fhandle); } static void WritePlayersInfo() { array<Man> players = new array<Man>; Man player; Man player_test; GetGame().GetPlayers( players ); if (players.Count() > 0) { if ( FileExist(file_name_info_players) ) { DeleteFile(file_name_info_players); } for ( int i = 0; i < players.Count(); ++i ) { player_test = players.Get(i); if( player_test ) { PlayerIdentity p_identity = player_test.GetIdentity(); private string coord_pl = player_test.GetPosition().ToString(); private string Name_P = p_identity.GetName(); private string UID_P = p_identity.GetPlainId(); WriteFile(file_name_info_players, "User name: " + Name_P + " UID: " + UID_P + " Coords: " + coord_pl); } } } else { if ( FileExist(file_name_info_players) ) { DeleteFile(file_name_info_players); } } } Где 'PlayersLogFile.txt' меняем на нужное вам имя файла, а в 'time_repeat_info_players' настраиваем время повтора проверки списка игроков для перезаписи файла
      3. Находим в файле блок 'void main()' и в его конце перед закрывающей '}', поумолчанию это строка
      weather.SetWindFunctionParams(0.1, 0.3, 50); добавляем ниже строку:
      GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(WritePlayersInfo, (time_repeat_info_players * 1000), true); 4. Готово, если не допустили ошибок, при наличии хотя бы 1 игрока на сервере ваш файл с данными по игрокам будет присутствовать и заполняться информацией, а в случае их отсутствия удаляться.
    • Автор: 123new
      В данной теме я распишу возможность создания серверного мода для сервера на свобственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.4.152050.
       
      Нам понадобятся:
      1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
      До версии 1.04 параметра servermod у сервера игры не существовало!!!
      2. Программа 'PBO manager' с состава инструментария армы из сети: https://www.armaholic.com/page.php?id=16369
      Зеркало: https://yadi.sk/d/_gmzoNSDpNJTt
      Еще зеркало:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      4. Notepad++ https://notepad-plus-plus.org/download P.S. Вместо 'PBO manager' можно использовать DayZ Tools, но как им пользоваться разбираемся сами ;)
       
      И так, приступим:
      1. Предположим, что у нас имеется свой некий набор скриптов, который необходимо добавить серверу, но не на уровне миссии сервера, а на более ранних уровнях его загрузки. Например, добавить свой killfeed, модифицировать или изменить какой-либо из родных скриптов сервера игры, либо вовсе модификации, подключенной у вас.
      Для примера в этой теме и данного гайда я взял вот этот набор скриптов, собранный непосредственно для данной темы за 5 минут, и не изменяющий в сервере ровным счетом ничего. Он может послужить базой для создания своих модов, функций, переменных или классов. Данный гайд будем описывать, исходя из этого архива.
      Архив:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      2. Создаем папку с нашим модом. Для примера, это будет папка '@My_Server_Mod'. В созданной нами папке создаем папку 'Addons', а в ней папку 'My_Server_Mod'.
      3. Помещаем содержимое распакованного архива в папку 'My_Server_Mod'. Должно получиться так:

      4. В папке 'My_Server_Mod' создаем файлик 'config.cpp' и заполняем его следующими данными (советую использовать Notepad++ для этого):
      class CfgPatches // требуется обязательно { class My_Server_Mod // требуется обязательно, совпадает с именем мода { units[]={}; // may be not worked weapons[]={}; // may be not worked requiredVersion=0.1; // may be not worked requiredAddons[]={}; /* requiredAddons[]= { "DZ_Data", // Перечисляем требуемые и используемые модом аддоны (pbo-файлы игры и модов по их внутренним скриптовым именам) }; */ }; }; class CfgMods // // требуется обязательно, совпадает с именем мода { // https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation class My_Server_Mod { dir = "My_Server_Mod"; // Имя папки мода, совпадает с именем мода picture = ""; // Картинка в описании мода action = ""; // Ссылка, например вот так: action = "https://dayz.com/"; hideName = 1; // Не уверен, что этот параметр работает hidePicture = 1; // Не уверен, что этот параметр работает name = "My_Server_Mod"; // Имя мода (а также его внутреннее скриптовое имя) logoSmall = "Mods/TestMod/modlogosmall.tga"; // значок рядом с именем мода, если описание не развернуто logo = "Mods/TestMod/modlogo.tga"; // логотип под меню игры logoOver = "Mods/TestMod/modlogohover.tga"; // при наведении курсора мыши на логотип tooltip = "tooltip"; // подсказка при наведении курсора мыши overview = "My Server Mod"; // Описание credits = "123new"; // credits author = "123new"; // author authorID = "0"; // author steam ID version = "1.0"; // version extra = 0; // Не уверен, что этот параметр работает type = "mod"; // требуется обязательно, остается неизменным // inputs = "mods\testmod\inputs\my_new_inputs.xml"; // необязательно, при использовании пользовательских inputs dependencies[]={"Core","GameLib","Game","World","Mission"}; // необязательно, если необходимо установить зависимость класса class defs { class engineScriptModule { value=""; // если значение пустое, используется функция ввода по умолчанию files[]={"My_Server_Mod/scripts/1_Core"}; // вы можете добавить любое количество файлов или каталогов, и они будут скомпилированы вместе с оригинальными скриптами игрового модуля }; class gameLibScriptModule { value=""; files[]={"My_Server_Mod/scripts/2_GameLib"}; }; class gameScriptModule { //value="CreateGameMod"; // когда значение заполнено, имя функции ввода модуля скрипта по умолчанию перезаписывается им value = ""; files[]={"My_Server_Mod/scripts/3_Game"}; }; class worldScriptModule { value=""; files[]={"My_Server_Mod/scripts/4_World"}; }; class missionScriptModule { value=""; files[]={"My_Server_Mod/scripts/5_Mission"}; }; }; // Если какой-то из разделов скриптинга вам не нужен и вы не сибираетесь его паковать, сотрите необходимый блок с ним выше и в массиве dependencies }; }; Пояснения в файле оставил. Файл готовый:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Как видите, в 'deffs' названия классов и путей соответствуют родным из 'scripts.pbo', но с допиской имени мода. Имя мода в данном случае и есть идентификатор для обращения к своему моду извне. А в 'dependencies' перечисляются используемые классы оригинальных скриптов без дописки номера секции. Количество используемых 'dependencies' и блоков 'deffs' должно быть идентично.
      Пояснения есть также и в официальной документации от разработчика: https://community.bistudio.com/wiki/DayZ:Modding_Structure#Mod_presentation
      5. Запаковываем нашу папку 'My_Server_Mod' в pbo-файл 'My_Server_Mod.pbo' через 'PBO manager', как на скриншоте ниже:

      Можно использовать и другие способы запаковки, если знаете их или привычны вам.
      6. Добавляем в параметры запуска сервера параметр:
      "[email protected]_Server_Mod;" -FilePatching 7. Радуемся, наш серверный мод готов. Пример готового серверного мода:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      P.S. Создавать bikey файл для мода и bisign подписи для него не требуется, иначе это может привести к неработоспособности серверной модификации (возможно, недоработка сервера игры разработчиком)
       
      Отмечу сразу, что данный способ подходит для модификации и переписывания оригинальных классов скриптов сервера от разработчиков и модификации чужих модов с помощью моддинга, применяется исключительно на стороне сервера игры и клиент игры не затрагивает. Распространять такой мод игрокам НЕ НУЖНО!
      Изменение оригинальных скриптов, для которых не предусмотрена операция 'modded class' в движке игры, а также классов и функций, которые защищены языком и движком игры от такого рода действий через серверные моды не получится. Если вы столкнулись с этим, вам проще распаковать scripts.pbo и поместить папку scripts в корень сервера игры, добавить в параметры запуска сервера параметр -FilePatching и изменять напрямую в папке необходимые вам файлы. (правда из-за ошибки разработчиков на патче 1.04 данный метод не работает корректно)
       
      P.P.S. Процедура создания своего собственного клиент-серверного мода на основе скриптов работает таким же образом. В случае создания такого мода, файл 'config.cpp' может быть для стандартного мода более разнообразным, а также после требуется обязательная подпись такого мода в bisign и создание bikey файлов. Более подробно это освещать требуется отдельно!
    • Автор: BorizzK
      Автор я
      На основе наработок комьюнити, на основе идей DaOne
       
      Мучайте
      P.S. Так же там есть доп функционал - для вызовов из класса миссии
      P.S.2. Инструкция (на англ) внутрях
       
       

      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
    • Автор: Alex39
      Прописал скрипт, серверные сообщение, вроде как работают, но есть косяки, может кто подскажет в чем проблема,
      override void OnInit() { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(NumPlayersOnServer, 30000, true); // 30 seconds } void NumPlayersOnServer() { ref array<Man> players = new array<Man>; GetGame().GetPlayers( players ); int numPlayers = players.Count(); for( int i=0; i < players.Count(); ++i ) { Man player = players.Get(i); if( player ) { string messPlayers = "Players on the server: " + numPlayers.ToString(); Param1<string> m_MessageParam = new Param1<string>(messPlayers); GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); } } }
       
      Проблема пропадание трейдера, админ тулз из за этого скрипта
       
      override void OnInit() { GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(NumPlayersOnServer, 30000, true); // 30 seconds }