Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • Не хотите БАН?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок
  • Загляните на рынок

    Там вы можете продать или купить
    Всё что касается игровых серверов
123new

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

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

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

 

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

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

2. Notepad++

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

 

Приступим:

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

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

И после строки

weather.SetWindFunctionParams(0, 0, 0);

добавляем:

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

Пример:

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


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

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

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

int 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 )
	{
	   GetGame().ChatPlayer(0,Message_Chat + numbOfplayers.ToString());
	}
}

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

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

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

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

string Message_Chat = "Online Players: ";

 

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

 

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

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


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


adler14k если найти функцию, которая обрабатывает сообщения игроков, то может быть. Все зависит от того где и как оно обрабаывается. Если на стороне клиента игры, то 100% без моддинга клиента игры не получится

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


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

123new можно и на клиенте смотреть, сколько игроков и при изменении писать в чат сообщение локально. Если мод подключить. + Сообщать только при изменении.

class Ultima_Client_Class_Player_List_On_Change
    {
        private    ref    SyncPlayerList    cv_BackSyncPlayerList    =    ClientData.m_PlayerList;
        private    ref    SyncPlayerList    cv_SyncPlayerList;
        
        void Ultima_Client_Class_Player_List_On_Change()
            {GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(this.PlayerListOnChange, 1000, true);}
            
        void ~Ultima_Client_Class_Player_List_On_Change()
            {GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Remove(this.PlayerListOnChange);}            
        
        void PlayerListOnChange()
            {
                cv_SyncPlayerList    =    ClientData.m_PlayerList;
                if ( cv_SyncPlayerList.m_PlayerList.Count() !=    cv_BackSyncPlayerList.m_PlayerList.Count() )
                    {
                        cv_BackSyncPlayerList    =    ClientData.m_PlayerList;
                        GetGame().ChatPlayer( 0, string.Format("Игроков онлайн: %1",cv_SyncPlayerList.m_PlayerList.Count()) );
                    }
            }


....            
 

Ultima_Client_Class_Player_List_On_Change cUltima_Client_Class_Player_List_On_Change    =    new Ultima_Client_Class_Player_List_On_Change();

 

 

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

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


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

NoNameUltima зачем это делать на клиенте?

А нахрена обременять сервер какой то работой, которая по факту ему не уперлась? Да к тому же если все есть на клиенте?

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


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

NoNameUltima 
Но нужно вносить изменения на клиенте

Имхо
Нужно моддитть так, что бы файлы и параметры запуска на клиенте вообще не затрагивались
Те что бы мог зайти и поиграть ЛЮБОЙ  клиент

Вообще любой

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

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


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

BorizzK Херня это. рано Множество вещей без клиентской части не решить. => рано или поздно придется ставить мод. И лучше раньше чем "как нить потом".

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


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

BorizzK Админка\GUI\все что связанно с работой на клиенте - и зависит от добавляемого контента. Торговля\еще что то - крч, дохрена чего.

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


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

NoNameUltima Торговцы уже есть

Видел на одном сервере

Заходил с чистого клиента из стим

Менюхи конечно в новом стиле

Но реализовали их со стороны сервера

Как? Пока загадка

А админка вроде как штатная будет

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


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

Торговцы уже есть

Ты не путай людей. Я могу сказать что у меня магазин есть на сервере, и? моделька и РАБОЧИЙ магазин вещи разные.

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

Торговец - это совокупность понятий, - взаимодействие\меню\выбор\обработка и тд. и т.п.

А то что где то там деревянного истукана воткнули - дело двух кликов мышкой.

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

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


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

А админка вроде как штатная будет

Когда чтонить НЕ штатное ты добавишь себе на сервер, ты же не будешьзвонить в богемию, чтоб тебе срочно добавили пункт в админку, для твоей нештатной штуковины)

Выдачу каких нить монеток, или еще чего.

Штатная админка это как максимум - телепорт\погода\спавн - остальное это модификации, а в ванилине они их никоим боком учитывать не будут.

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


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

Заходил с чистого клиента из стим

есть в дев функциях передача мода удаленно - т.е. что то типа как в арме мпмиссия. может и прикрутили. а может и по другому - ну это если точно работает) - скрин в общем с торговцами и менюшками ждемс)

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


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

NoNameUltima 
Если бы я тогда знал о том что меня уже не пустит и чел просто давал ip комраду что бы он друзей зазвал на одиночный тест и потом серв спрятал - сделал бы

Реально были менюхи в новом стиле с задержкой левой кнопки мышки и прокруткой

 

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


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

есть в дев функциях передача мода удаленно

а примеры можно? может кого заинтересует

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


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

123new Я не смотрел особо, может я ошибаюсь... что то там по модам было, а может это просто получение\отправка списока модов установленных у игрока. Где то в dta валялось...

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


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

NoNameUltima 
Видео на ютьюбе с одного сервера
Там где я был были именно такие трейдеры и такая же менюха

Файлы моего клиента изменены не были

Никаких параметров в допах я не указывал

Либо все реализовано чисто на сервере, либо клиент что-то из контента и скриптов автоматом подгрузил с сервера

Трейдеры после 30й секунды

 

 

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


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

NoNameUltima Вот если бы товарищ дейз 063 запоминал нормально все сервера

Он у меня даж фавориты не запоминает ((( вероятно потомушта профиль пользователя лежит на сетевой шаре, а дейз unc-пути не воспринимает (над будет переделать на сетевой диск)

Уверен, что есть возможность отдавать скрипты клиенту для выполнения на нем

 

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

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


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

Гайд обновлен под версию сервера 0.63.149386 и добавлен пример-скрипшот с правильным заполнением файла init.c

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


Ссылка на сообщение
Поделиться на других сайтах
22.10.2018 в 11:40, 123new сказал:

И после строки


weather.SetWindFunctionParams(0, 0, 0);

У меня нет в инит.с такой строки или я что-то не туда добавляю?

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


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

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...

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

    • Автор: 123new
      За основу взята наработка автора скрипта: http://s-platoon.ru/profile/14721-borizzk/
      И немного доработана по своим соображениям.
      Использование мода клиенту игры НЕ ТРЕБУЕТСЯ!!!
       
      И так, установка:
      1. Первым делом нам необходим чистый стандартный сервер DayZ (без модов, поскольку моды могу приводить к неработоспособности частей гайда). Установить его можно по инструкции, например, так:
      2. Добавляем в папку сервера игры мод из архива:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. Добавляем в параметры запуска сервера:
      -Filepatching "-servermod=@KillFeed_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. Добавляем в параметры запуска сервера параметр:
      "-servermod=@My_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. Инструкция (на англ) внутрях
       
       

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