DayZ init.c: улучшения старта игрока, сообщения и условия
Настройка сервера / Todtleben / 2 просмотров
DayZ init.c: улучшения старта игрока, сообщения и условия
В init.c можно сделать не только стартовый лут. Ниже несколько полезных улучшений, которые часто используют на живых серверах.
Приветственное сообщение
override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
{
super.InvokeOnConnect(player, identity);
if (identity)
{
string name = identity.GetName();
GetGame().ChatPlayer("Добро пожаловать на сервер, " + name + "!");
}
}
Такой вариант простой, но не перегружайте чат. Лучше одно короткое сообщение, чем пять строк рекламы.
Разный старт для новичков и обычных игроков
Идея: проверять, есть ли у игрока уже данные персонажа или отдельная отметка в профиле. В чистом init.c это часто делают через внешние файлы или моды. Без дополнительного хранилища проще делать одинаковую логику для всех.
Случайный бонус
void GiveRandomBonus(PlayerBase player)
{
ref array<string> bonuses = {
"Apple",
"Pear",
"Plum",
"SodaCan_Cola",
"BandageDressing"
};
player.GetInventory().CreateInInventory(bonuses.GetRandomElement());
}
Безопасный стартовый нож
void GiveStarterTool(PlayerBase player)
{
ref array<string> tools = {
"KitchenKnife",
"SteakKnife",
"StoneKnife"
};
player.GetInventory().CreateInInventory(tools.GetRandomElement());
}
Спавн по ролям
Если вы делаете RP/PvE-сервер, можно разделить стартовые наборы:
- медик получает бинты и легкую одежду;
- охотник получает нож и компас;
- строитель получает молоток или веревку;
- выживший получает еду и фонарик.
Важно: роли лучше выбирать через отдельный мод/меню. В одном init.c без интерфейса игрок сам роль выбрать не сможет.
Что не стоит делать в init.c
- сложную экономику;
- большие базы данных игроков;
- тяжелые циклы при каждом входе;
- выдачу редких пушек всем новичкам;
- телепорт игроков без проверок.
Хорошая структура
Вынесите повторяющиеся куски в функции:
void GiveFood(PlayerBase player)
{
player.GetInventory().CreateInInventory("Apple");
}
void GiveMedical(PlayerBase player)
{
player.GetInventory().CreateInInventory("BandageDressing");
}
Так StartingEquipSetup будет чистым и понятным, а не огромной кучей строк.