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

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

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

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

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

[DayZ 0.63] Создаем объявления в чат

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

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

 

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

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

2. Notepad++

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

 

Приступим:

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

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

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

weather.SetWindFunctionParams(0, 0, 0);

добавляем:

GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(CustomInformation, TIME_Information_Repeat, true);  

пример:

Безымянный.png
3. Помещаем в папку файл 

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

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

int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000)

ref TStringArray Messages = {"Welcome to My Server!",
		   "This is server DayZ 0.63 Experimental!",
		   "Our ip adress: ....", "Our site: ....",
		   "Good day and big Loot for all!"};

void CustomInformation()
{
	//GetGame().GetWorld().GetPlayerList(m_Players);
	array<Man> players = new array<Man>;
	GetGame().GetPlayers( players );
	private int numbOfplayers = players.Count();
	
	if( numbOfplayers > 0 )
	{
	   GetGame().ChatPlayer(0,Messages.GetRandomElement());
   }
}

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

int TIME_Information_Repeat = 60000; //in ms (60 seconds = 60000)

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

и сами сообщения в переменной

ref TStringArray Messages = {"Welcome to My Server!",
		   "This is server DayZ 0.63 Experimental!",
		   "Our ip adress: ....", "Our site: ....",
		   "Good day and big Loot for all!"};

Важно: в конце последней строки обязательно должна быть скобка и точка с запятой, иначе сервер не запустится!

 

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

 

 

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

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


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


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

 

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


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

123new это сообщения всем, а конкретному игроку в новом обновлении нашли уже как?

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

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


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

BorizzK 

               да все так же, как и было.

Param1<string>     message = new Param1<string>("Сообщение");
GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity());

 

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


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

Ninehd а почему у меня не работает???

Чат в настройках клиента включен

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

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


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

BorizzK 

	ref array<Man> players = new array<Man>;
        GetGame().GetPlayers( players );
        for ( int i = 0; i < players.Count(); i++ )
        {
            PlayerBase player;
            Class.CastTo(player, players.Get(i));
            Param1<string>     message = new Param1<string>("Сообщение"); 
  			GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, message, true, player.GetIdentity());
        }

ну вот стандартным перебором по всем игрокам все отлично работает.

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


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

У меня на крайнем билде тишина в чате

Нет сообщений

Только через chatplayer всем

Через rpc нихрена

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


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

Ninehd 

 

У меня на крайнем билде тишина в чате

Нет сообщений

Только через chatplayer всем

Через rpc нихрена

 

...Все

Понял

Нужно кастить игрока в playerbase,  а раньше это было не нужно вроде

Вечером гляну скрипты

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


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

Казалось бы все нагядно и просто, копируешь 2 строчки в нужное место в одно файле, создаешь с данным названием еще один и копируешь остальное в него, но но даже тут оказалось траблов не избежать.
Что не так? Мой уровень программирования находится где-та на уровне:

int main() 
{ 
    cout << "Hello, world!" << endl;
    system("pause");
    return 0; 
}

А то есть где-то ниже плинтуса, по этому решение проблемы для меня не на поверхности...
5bea71eba6297_.png.99e1a950ec9f779b12d503e83572861a.png

Изменено пользователем XpeHoboyKa
Ой, ну я как обычно, все таки решил вчитаться и оказалось все таки, что на поверхности (история изменений)

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


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

XpeHoboyKa 

 

Это что за код такой????

include не работает внутри класса/функции как ранее в стресс/экспе

вызывает как раз вышеуказанню ошибку

теперь только вне класса

 

яж говорил ранее - с выходом на типа стабилку переделают они синтаксис

козлы

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


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

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

 

BorizzKBorizzK походу надо бунт, как с ReadFile было.

 

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

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


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

123new да да, я как только отправил сообщение с кодом ошибки, решил все таки все пересмотреть и понял, что не так)

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


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

BorizzK а ничего, буквально, не работает он от слова вообще, заблочили функцию, типа не разрешена для использования. По этой причине не работают, например, самописные логи, и из-за этого невозможно какие-то свои файлы писать, например, выводить информацию по игрокам онлайн. Давай всетаки в соответствующей теме это уже обсуждать.

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

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


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

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

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

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

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

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

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

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

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

Загрузка...

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

    • Автор: 123new
      Здравствуйте, дорогие друзья и посетители сайта. В данной теме я распишу как создать свой "чистый" сервер на основе первых официальных серверных файлов игры, доступных каждому в steam для тех, кто приобрел эту замечательную игру. Для тех, кто не приобретал ее, не расстраивайтесь, добавлю зеркала на файлы.
      И так, приступим.
       
      Нам понадобятся:
      1. Официальные серверные файлы игры со steam ссылки на файлы имеются в теме:
      Копия Server Files от меня на момент публикации статьи (версия сервера игры 1.0.149923):  https://mega.nz/#!Pu50WKaY!K2LlvflSsHJj3-xWvoyMxYd4Prt-IPbO5Hy7YErZBBU
      Копия Server Tools от меня на момент публикации статьи (версия сервера игры 1.0.149923): https://mega.nz/#!7ugEkCZb!2sVV5n9Qssyd2NlUj4491bp8-NNXNAY9itY7GiAnCtQ
      Скачать можно и через SteamCMD:

      2. Официальный клиент игры из steam:
      https://store.steampowered.com/app/221100/DayZ/
      Зеркало на DayZ Client версию клиента игры 1.0.149923 на момент публикации: https://mega.nz/#!C3AHlAjK!5FOv8ZeXB8pS085ff1jkCoFQCr4uAr7bMs827u95Dls
      3. "Настроенная конфигурация серверной части игры" и батник для старта сервера:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      4. Notepad++ https://notepad-plus-plus.org/download
      И так, приступим.
      1. Распаковываем скачанные серверные файлы игры в отдельную папку
      2. Распаковываем архив с "Настроенной конфигурацией серверной части игры" в папку с серверными файлами
      Получим что-то типа такого

      Если вам необходимо, настраиваем cfg-файлы сервера вручную сами, как вам необходимо, информация по его настройке есть в теме во 2 ее сообщении
      Открывать cfg файлы через Notepad++.
      Ккомментарии по CFG файлам Battleye ниже:
      где 12345678 - rcon-пароль сервера
      500 - максимальный пинг, разрешенный battleye на сервере игры (не уверен, что работает)
      RestrictRCon 0 - подключение с rcon-клиентов с правами кика и бана игроков(например, dart и bec)(0 - разрешено все, 1 - запрещен кик и бан, только отправка в чат)
      По остальным настройкам и файлам читайте комментарии в файлах и в теме:
      3. Запускаем !!!Start_server.bat и наш сервер запустится
      4. Запускаем клиент игры со steam, находим наш сервер вручную по ip и порту, либо имени сервера.
      Если сервер запущен на том же компьютере, где и игра, и на стандартном порту 2302, то поумолчанию поиск выполняется по 127.0.0.1:2302
      Если сервер запущен на другом компьютере, то вместо 127.0.0.1 будет ip адрес компьютера, где запущен сервер, или его доменное имя. Например, myserver.com:2302 или 178.123.22.12:2302
      ВАЖНО: если сервер запущен на другом компьютере, отличном от компьютера где запущена игра, то для доступа на сервер игроков необходимо иметь "внешний" выделенный ip-адрес и открытый порт сервера!
      5. Для выключения сервера рекоммендуется пользоваться !!!Server_kill.bat файлом, созданным в соответствии с рекоммендациями разработчиков игры и официальной документацией.
       
      Для совсем "ленивых" запаковал уже настроенный сервер в архив с версией игры 1.0.149923:
      https://mega.nz/#!W3QhECTR!4m0hf8KGrL6a36Vo-6GY93vXCNfrbDraSIv3FrPgcrM
       
      Настраивайте лишь config сервера, battleye и bat-файл запуска сервера, и можете играть.
       
      Crack SmartSteamEmu v. 1.4.3 данной версии клиента игры и сервера:
      Скачать с Zippyshare.com: https://www64.zippyshare.com/v/mHmPweqg/file.html
      Скачать с Mega.nz: https://mega.nz/#!rnZBXK4b!KRrJm6obcJjUlzMpEPNQ3R8sy2z0pP-0Myb_ao4TVhg
      Скачать с yandex.disk: https://yadi.sk/d/4xSF1dSt6XN41g
      Инструкция по установке есть в архиве, дублирую:
       
      Для работы Battleye используйте ip-адрес и порт сервера, и любой rcon-клиент с паролем из BEServer_x64.cfg
      Для работы BEC делайте Battleye config файл BEServer.cfg идентичным по содержанию BEServer_x64.cfg иначе программа не будет работать!
      База данных (storage) теперь хранится по пути: mpmissions\dayzOffline.chernarusplus\storage_{номер instance с cfg сервера}
      В базе данных также хранится файл с сохранениями игроков на сервере с именем players.db
       
      Вот и все, приятной игры на сервере!
       
       
    • Автор: 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 файлов. Более подробно это освещать требуется отдельно!
×
×
  • Создать...