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

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

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

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

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
123new

[DayZ 1.0] Создаем Сейвзону на сервере

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

6 часов назад, UnknownError сказал:

вот из логов, кстати:


NULL pointer to instance
Function: 'RunCheckStart'
Stack trace:
$CurrentDir://mpmissions//dayzoffline.chernarusplus//Scripts/safezone.c:25
scripts/3_Game/DayZGame.c:2365

а что у вас на 15 строке: $CurrentDir://mpmissions//dayzoffline.chernarusplus//Scripts/safezone.c:25

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


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



47 минут назад, UnknownError сказал:

spacer.png

 

пробуйте

/*
	Author: Sania(ZoS) (aka 123new)
	Project: S-platoon.ru
	Install:
	1. Create a 'Scripts' directory in your active mpmissions
	2. Plase this filename (safezone.c) in 'Scripts' 
	3. Add in init.c this line:
	#include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c"
	Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server
	4. Configure a next settings
*/
class SafeZone_PlugIn
{
	protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false)
	protected float SAFEZONE_time_repeat_checking = 10; //In seconds
	
	ref static TStringArray SAFEZONE_LOACTIONS = {"15145.1 32.9793 13919.0",
		   "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone)
	protected static float  SAFEZONE_RADIUS   = 100; //In meter
	protected static string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
	protected static string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";
		
	
	void OnInit()
	{
		if(Activate_SafeZone_PlugIn)
		{
			GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); 
		}
	}
	
	static void RunCheckStart()
	{
		private array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		if (SAFEZONE_LOACTIONS.Count() > 0)
		{
			if (players.Count() > 0)
			{
				foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS)
				{
					if( players.Count() > 0 )
					{
						foreach(Man player: players)
						{
							if(player)
							{
								private PlayerBase player_casted = PlayerBase.Cast(player);
								CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector());
							}
						}
				   }
			   }	
		   }
		}
	}

	static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION)
	{
		private float SAFEZONE_distance;
		private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER;
		SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); 
		SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64	

		private vector SAFEZONE_pos_player = player.GetPosition();
		private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION);
		private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString();
		SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED);
		if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone
		{
			SAFEZONE_ZoneCheck = "";
			GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
			if (SAFEZONE_ZoneCheck == "true") //Already in zone
			{
				GetGame().SetProfileString(name_mesage_profile,"true");
				player.SetAllowDamage(false); //GodMode On
				return;
			}
			else
			{
				GetGame().SetProfileString(name_mesage_profile,"true");
				Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
				player.SetAllowDamage(false); //GodMode On
				SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player);
			}
		} else 
		{
			 //Player Outside of Zone
			if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone
			{
				SAFEZONE_ZoneCheck = "";
				GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
				if (SAFEZONE_ZoneCheck == "false")
				{
					GetGame().SetProfileString(name_mesage_profile,"false");
					return;
				}
				else
				{
					if (SAFEZONE_ZoneCheck != "")
					{
						GetGame().SetProfileString(name_mesage_profile,"false");
						Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
						player.SetAllowDamage(true); //GodMode Off
						SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player);
					} else
					{
						GetGame().SetProfileString(name_mesage_profile,"false");
						return;
					}
				}
			
		}
	}

	static vector CorrectToGroundPosY(vector pos)
	{
		private float pos_x = pos[0];
		private float pos_z = pos[2];
		private float pos_y = GetGame().SurfaceY(pos_x, pos_z);
		private vector tmp_pos = Vector(pos_x, pos_y, pos_z);
		return tmp_pos;
	}
	static void SendPersonalMessage(string message, PlayerBase casted_player) 
	{
		Man player; 
		Class.CastTo(player, casted_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()); 
		}
	}
}
/*
class SafeZone_Config //test config for json
{
	vector SAFEZONE_LOACTION = "15145.1 32.9793 13919.0"; //Map coords (position of the safe zone)
	float  SAFEZONE_RADIUS   = 100.0; //In meter
	string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
	string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";\
}
*/
ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn();
modded class CustomMission
{	
	override void OnInit () 
    {
		super.OnInit();
		SafeZone.OnInit();		
    }
}

 

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


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

Вижу изменения в RunCheckStart, сейчас затестим 🙂

Отпишусь по результатам. Кстати, а опрос в 10 секунд не слишком частый? Попробую оставить 30 секунд. А то вдруг это скажется на нагрузке на сервер.

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


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

Вижу изменения в RunCheckStart, сейчас затестим 🙂

Отпишусь по результатам. Кстати, а опрос в 10 секунд не слишком частый? Попробую оставить 30 секунд. А то вдруг это скажется на нагрузке на сервер.

да чисто в теории и 60 достаточно, но если уж говорите что беда, пусть чаще))

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


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

Пока что попробовал код, что Вы скинули, ошибка, ругается на недостающую точку с запятой. Хотя вроде всё просмотрел, ошибки нет нигде, всё на месте. Может, плохо смотрел. Времени сейчас нет и сервак с народом перезапускать не хочется. Чуть позже отпишусь, потестирую на другом инстансе, где пусто.

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


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

Дичь какая-то.. Ругается на отсутствующую точку с запятой всё так же. Всё перепроверил, всё на месте. Эх, не силён я совсем в ЯП, особенно в плюсах((
spacer.pngspacer.png

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


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

Дичь какая-то.. Ругается на отсутствующую точку с запятой всё так же. Всё перепроверил, всё на месте. Эх, не силён я совсем в ЯП, особенно в плюсах((
spacer.pngspacer.png

скобочка потерялась закрывающая, добавь 104 строкой }

523169911_.png.c7a57474938c2d7e77dc987badd89d39.png

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


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

Спасибо тебе огромнейшее! Работает! И вроде бы лучше. Сообщения приходят как нужно, нету бессмертия по полчаса.

Но сегодня я тестировал в одиночку.  Завтра ещё с одним игроком попробую. Мне интересно, как себя поведут оповещения, когда вдвоём входишь в безопасную зону.

Ещё раз спасибище!!

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


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

Подскажите а как сделать PVE зону?

или лучше сделать весь сервер ПВЕ и определить оны пвп

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


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

Подскажите а как сделать PVE зону?

или лучше сделать весь сервер ПВЕ и определить оны пвп

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

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


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

Вот нашел мод, может надо будет кому https://steamcommunity.com/sharedfiles/filedetails/?id=1878060278&searchtext=no+kill

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


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

А как сделать чтобы из сейфзоны очищался весь лут?

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


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

А как сделать чтобы из сейфзоны очищался весь лут?

убрать точки спавна лута из xml файлов миссии, насколько понимаю, самый лучший вариант

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


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

убрать точки спавна лута из xml файлов миссии, насколько понимаю, самый лучший вариант

А нельзя через скрипт очистить?

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


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

А нельзя через скрипт очистить?

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

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


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

убрать точки спавна лута из xml файлов миссии, насколько понимаю, самый лучший вариант

А нельзя через скрипт очистить?

Ну в моде Traider как-то чистит. Только вот как не могу разобраться.

Я просто запарюсь искать эти точки чтобы их вырезать

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


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

А нельзя через скрипт очистить?

Ну в моде Traider как-то чистит. Только вот как не могу разобраться.

Я просто запарюсь искать эти точки чтобы их вырезать

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

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

1. Сканирование от точки на хорошем радиусе очень хорошо нагружает сервер

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

Не уверен, что это безболезненно скажется на корректности работы сервера и его фпс, памяти, но вот время на написание скрипта потратить прийдется. Уверены что оно таки вам нужно то?

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


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

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

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

1. Сканирование от точки на хорошем радиусе очень хорошо нагружает сервер

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

Не уверен, что это безболезненно скажется на корректности работы сервера и его фпс, памяти, но вот время на написание скрипта потратить прийдется. Уверены что оно таки вам нужно то?

 

НУ я трейдер мод ставил себе в радиусе лута небыло. ХЗ как там делается. А вот потеря ФПС сервера не очень хорошо.

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


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

что не так? не работает!При прописывание в папку (mpmissionss) выдает ошибку!Закинул в (dayzOffline.chernarusplus) ошибок не было ,потом кинул в (mpmissionss) измененил строку на #include "$CurrentDir:\\mpmissions\\Scripts\safezone.c"  консоль без ошибок прошла но все ровно не работает! Координаты ( 6721.99 3.28686 2368.24 )

/*
    Author: Sania(ZoS) (aka 123new)
    Project: S-platoon.ru
    Install:
    1. Create a 'Scripts' directory in your active mpmissions
    2. Plase this filename (safezone.c) in 'Scripts' 
    3. Add in init.c this line:
    #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c"
    Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server
    4. Configure a next settings
*/
class SafeZone_PlugIn
{
    protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false)
    protected float SAFEZONE_time_repeat_checking = 10; //In seconds
    
    ref static TStringArray SAFEZONE_LOACTIONS = {"6721.99 3.28686 2368.24",
           "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone)
    protected static float  SAFEZONE_RADIUS   = 100; //In meter
    protected static string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
    protected static string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";
        
    
    void OnInit()
    {
        if(Activate_SafeZone_PlugIn)
        {
            GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); 
        }
    }
    
    static void RunCheckStart()
    {
        private array<Man> players = new array<Man>;
        GetGame().GetPlayers( players );
        if (SAFEZONE_LOACTIONS.Count() > 0)
        {
            if (players.Count() > 0)
            {
                foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS)
                {
                    if( players.Count() > 0 )
                    {
                        foreach(Man player: players)
                        {
                            if(player)
                            {
                                private PlayerBase player_casted = PlayerBase.Cast(player);
                                CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector());
                            }
                        }
                   }
               }    
           }
        }
    }

    static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION)
    {
        private float SAFEZONE_distance;
        private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER;
        SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); 
        SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64    

        private vector SAFEZONE_pos_player = player.GetPosition();
        private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION);
        private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString();
        SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED);
        if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone
        {
            SAFEZONE_ZoneCheck = "";
            GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
            if (SAFEZONE_ZoneCheck == "true") //Already in zone
            {
                GetGame().SetProfileString(name_mesage_profile,"true");
                player.SetAllowDamage(false); //GodMode On
                return;
            }
            else
            {
                GetGame().SetProfileString(name_mesage_profile,"true");
                Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
                player.SetAllowDamage(false); //GodMode On
                SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player);
            }
        } else 
        {
             //Player Outside of Zone
            if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone
            {
                SAFEZONE_ZoneCheck = "";
                GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
                if (SAFEZONE_ZoneCheck == "false")
                {
                    GetGame().SetProfileString(name_mesage_profile,"false");
                    return;
                }
                else
                {
                    if (SAFEZONE_ZoneCheck != "")
                    {
                        GetGame().SetProfileString(name_mesage_profile,"false");
                        Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
                        player.SetAllowDamage(true); //GodMode Off
                        SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player);
                    } else
                    {
                        GetGame().SetProfileString(name_mesage_profile,"false");
                        return;
                    }
                }                
            }
        }
    }

    static vector CorrectToGroundPosY(vector pos)
    {
        private float pos_x = pos[0];
        private float pos_z = pos[2];
        private float pos_y = GetGame().SurfaceY(pos_x, pos_z);
        private vector tmp_pos = Vector(pos_x, pos_y, pos_z);
        return tmp_pos;
    }
    static void SendPersonalMessage(string message, PlayerBase casted_player) 
    {
        Man player; 
        Class.CastTo(player, casted_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()); 
        }
    }
}
/*
class SafeZone_Config //test config for json
{
    vector SAFEZONE_LOACTION = "6721.99 3.28686 2368.24"; //Map coords (position of the safe zone)
    float  SAFEZONE_RADIUS   = 100.0; //In meter
    string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
    string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";\
}
*/
ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn();
modded class CustomMission
{    
    override void OnInit () 
    {
        super.OnInit();
        SafeZone.OnInit();        
    }
}

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

Изменено пользователем 123new
вставка кода файла в спец. тег для его вставки (история изменений)

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


Ссылка на сообщение
Поделиться на других сайтах
08.02.2022 в 09:04, temniyri сказал:

что не так? не работает!При прописывание в папку (mpmissionss) выдает ошибку!Закинул в (dayzOffline.chernarusplus) ошибок не было ,потом кинул в (mpmissionss) измененил строку на #include "$CurrentDir:\\mpmissions\\Scripts\safezone.c"  консоль без ошибок прошла но все ровно не работает! Координаты ( 6721.99 3.28686 2368.24 )


/*
    Author: Sania(ZoS) (aka 123new)
    Project: S-platoon.ru
    Install:
    1. Create a 'Scripts' directory in your active mpmissions
    2. Plase this filename (safezone.c) in 'Scripts' 
    3. Add in init.c this line:
    #include "$CurrentDir:\\mpmissions\\dayzoffline.chernarusplus\\Scripts\safezone.c"
    Where is 'dayzoffline.chernarusplus' is active mpmission directory in cfg filename server
    4. Configure a next settings
*/
class SafeZone_PlugIn
{
    protected bool Activate_SafeZone_PlugIn = true; // safezone on (true) or off (false)
    protected float SAFEZONE_time_repeat_checking = 10; //In seconds
    
    ref static TStringArray SAFEZONE_LOACTIONS = {"6721.99 3.28686 2368.24",
           "12145.1 32.9793 10919.0"};//Map coords (positions of the safe zone)
    protected static float  SAFEZONE_RADIUS   = 100; //In meter
    protected static string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
    protected static string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";
        
    
    void OnInit()
    {
        if(Activate_SafeZone_PlugIn)
        {
            GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(RunCheckStart, (SAFEZONE_time_repeat_checking * 1000), true); 
        }
    }
    
    static void RunCheckStart()
    {
        private array<Man> players = new array<Man>;
        GetGame().GetPlayers( players );
        if (SAFEZONE_LOACTIONS.Count() > 0)
        {
            if (players.Count() > 0)
            {
                foreach(string SAFEZONE_LOACTION: SAFEZONE_LOACTIONS)
                {
                    if( players.Count() > 0 )
                    {
                        foreach(Man player: players)
                        {
                            if(player)
                            {
                                private PlayerBase player_casted = PlayerBase.Cast(player);
                                CheckingPosition(player_casted,SAFEZONE_LOACTION.ToVector());
                            }
                        }
                   }
               }    
           }
        }
    }

    static void CheckingPosition(PlayerBase player,vector SAFEZONE_LOACTION)
    {
        private float SAFEZONE_distance;
        private string SAFEZONE_ZoneCheck, SAFEZONE_UID_PLAYER, SAFEZONE_NAME_PLAYER;
        SAFEZONE_NAME_PLAYER = player.GetIdentity().GetName(); 
        SAFEZONE_UID_PLAYER = player.GetIdentity().GetPlainId(); //Steam 64    

        private vector SAFEZONE_pos_player = player.GetPosition();
        private vector SAFEZONE_LOCATION_FIXED = CorrectToGroundPosY(SAFEZONE_LOACTION);
        private string name_mesage_profile = "GodModeEnabledFor: " + SAFEZONE_UID_PLAYER + " Location: " + SAFEZONE_LOACTION.ToString();
        SAFEZONE_distance = vector.Distance(SAFEZONE_pos_player,SAFEZONE_LOCATION_FIXED);
        if (SAFEZONE_distance <= SAFEZONE_RADIUS) //Player Inside Zone
        {
            SAFEZONE_ZoneCheck = "";
            GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
            if (SAFEZONE_ZoneCheck == "true") //Already in zone
            {
                GetGame().SetProfileString(name_mesage_profile,"true");
                player.SetAllowDamage(false); //GodMode On
                return;
            }
            else
            {
                GetGame().SetProfileString(name_mesage_profile,"true");
                Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Enter in safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
                player.SetAllowDamage(false); //GodMode On
                SendPersonalMessage(SAFEZONE_ENTRY_MESSAGE, player);
            }
        } else 
        {
             //Player Outside of Zone
            if (SAFEZONE_distance > SAFEZONE_RADIUS) //Player Outside of Zone
            {
                SAFEZONE_ZoneCheck = "";
                GetGame().GetProfileString(name_mesage_profile,SAFEZONE_ZoneCheck);
                if (SAFEZONE_ZoneCheck == "false")
                {
                    GetGame().SetProfileString(name_mesage_profile,"false");
                    return;
                }
                else
                {
                    if (SAFEZONE_ZoneCheck != "")
                    {
                        GetGame().SetProfileString(name_mesage_profile,"false");
                        Print("[SafeZone] " + SAFEZONE_NAME_PLAYER + " (" + SAFEZONE_UID_PLAYER + ") Left safeZone in position: " + SAFEZONE_LOCATION_FIXED.ToString());
                        player.SetAllowDamage(true); //GodMode Off
                        SendPersonalMessage(SAFEZONE_EXIT_MESSAGE, player);
                    } else
                    {
                        GetGame().SetProfileString(name_mesage_profile,"false");
                        return;
                    }
                }                
            }
        }
    }

    static vector CorrectToGroundPosY(vector pos)
    {
        private float pos_x = pos[0];
        private float pos_z = pos[2];
        private float pos_y = GetGame().SurfaceY(pos_x, pos_z);
        private vector tmp_pos = Vector(pos_x, pos_y, pos_z);
        return tmp_pos;
    }
    static void SendPersonalMessage(string message, PlayerBase casted_player) 
    {
        Man player; 
        Class.CastTo(player, casted_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()); 
        }
    }
}
/*
class SafeZone_Config //test config for json
{
    vector SAFEZONE_LOACTION = "6721.99 3.28686 2368.24"; //Map coords (position of the safe zone)
    float  SAFEZONE_RADIUS   = 100.0; //In meter
    string SAFEZONE_ENTRY_MESSAGE     = "Welcome to The SafeZone! Godmode ENABLED!";
    string SAFEZONE_EXIT_MESSAGE      = "You Have Left The SafeZone! Godmode DISABLED!";\
}
*/
ref SafeZone_PlugIn SafeZone = new SafeZone_PlugIn();
modded class CustomMission
{    
    override void OnInit () 
    {
        super.OnInit();
        SafeZone.OnInit();        
    }
}

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

ошибка в пути в init.c #include "$CurrentDir:\\mpmissions\\Scripts\safezone.c"
обратите внимание на пункт №3 от автора!

Изменено пользователем 123new
вставка кода файла в спец. тег для его вставки (история изменений)

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


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

@123new
спасибо..
1,15 проверен скрипт, работает..
из особенностей:
суицид через F11 не возможен..
оно и ранее было известно
безмозглые не трогают, лут спавнится в зоне действия скрипта.
недостаток:
нет возможности внести изменения в работу скрипта и применить сразу, без перезагрузки сервера.

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

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


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

1,15 проверен скрипт, работает..

не знаю, как вы проверяли, но все работает через одно место. Админкой ничего с игроками сделать не можешь в зоне, при этом ф11 работает, можно самоубиться, но для всех ты будешь валяться как будто без сознания и пульс можно проверить, при этом возродится нельзя, только перезаход. Из оружия тоже стрелять можно.

 

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


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

Я же написал что при прописывании в папку (mpmissionss) выдает ошибку! и скрин даже кинул .Невнимательно читаем, граждане!

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


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

Я же написал что при прописывании в папку (mpmissionss) выдает ошибку! и скрин даже кинул .Невнимательно читаем, граждане!

а вы текст ошибки перевести не пробовали? вам же пишет 'can't find file' что в переводе звучит как 'не может быть найден файл'. Грубо говоря, если у вас миссия сервера не dayzoffline.chernarusplus, а  какая-нибудь mysuperpupermission.Expansion то и в строке с include надо заменить dayzoffline.chernarusplus на mysuperpupermission.Expansion соотвентственно, чтобы путь вел в существующую папку.

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

Пример будет такой для mysuperpupermission.Expansion

#include "$CurrentDir:\\mpmissions\\mysuperpupermission.Expansion\\Scripts\safezone.c"

А целую кучу кода, что вы скинули, надо давать под спец тегом для вставки кода

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

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

13 часов назад, FreddyCruger сказал:

не знаю, как вы проверяли, но все работает через одно место. Админкой ничего с игроками сделать не можешь в зоне, при этом ф11 работает, можно самоубиться, но для всех ты будешь валяться как будто без сознания и пульс можно проверить, при этом возродится нельзя, только перезаход. Из оружия тоже стрелять можно.

 

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

    • Автор: 123new
      В данной теме я распишу возможность создания серверного мода для сервера на собственном примере и объясню как его собрать.Работающий на момент публикации статьи на версии сервера игры 1.04.152050.
       
      Темы к ознакомлению, связанные с данным материалом:
      https://s-platoon.ru/topic/8701-enscript-uchimsya-osnovam-skriptinga/
      https://s-platoon.ru/topic/8622-enscript-delaem-skript-dlya-moda-i-osnovnye-principy-skriptinga-modov/
       
      Нам понадобятся:
      1. Сервер игры актуальной версии, не ниже патча 1.04. Как установить можно узнать тут:
      До версии 1.04 параметра servermod у сервера игры не существовало!!!
      2. Программа 'PBO manager' с состава инструментария армы из сети: https://www.armaholic.com/page.php?id=16369
      Зеркало: https://yadi.sk/d/_gmzoNSDpNJTt
      Еще зеркало:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      3. Скрипты для упаковки в наш мод, сформированные и подготовленные нами вручную. Как - смотрите тему
      4. Notepad++ https://notepad-plus-plus.org/download
      P.S. Вместо 'PBO manager' можно использовать DayZ Tools, но как им пользоваться разбираемся сами 😉
       
      И так, приступим:
      1. Предположим, что у нас имеется свой некий набор
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
      Подробнее о создании скриптов для своих целей - читайте вот эту тему!
      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 и изменять напрямую в папке необходимые вам файлы.Запаковывать назад в pbo папку и размещать в dta в таком случае не нужно!
       
      P.P.S. Процедура создания своего собственного клиент-серверного мода на основе скриптов работает таким же образом. В случае создания такого мода, файл 'config.cpp' может быть для стандартного мода более разнообразным, а также после требуется обязательная подпись такого мода в bisign и создание bikey файлов. Более подробно это освещать требуется отдельно!
    • Автор: 123new
      Здравствуйте, дорогие друзья и посетители сайта. В данной теме я распишу как создать свой "чистый" сервер на основе первых официальных серверных файлов игры, доступных каждому в steam для тех, кто приобрел эту замечательную игру. Для тех, кто не приобретал ее, не расстраивайтесь, добавлю зеркала на файлы.
      И так, приступим.
       
      Системные требования игры:
      https://s-platoon.ru/topic/7014-polnaya-dokumentaciya-servernyh-faylov-dayz-standalone-dayz-server-files-documentation/?do=findComment&comment=61219
       
      Нам понадобятся:
      1. Notepad++ https://notepad-plus-plus.org/download
      2. Официальные серверные файлы игры со steam. Скачать  их можно:
      В Steam из раздела 'инструменты' , выбрав DayZ Server и нажав 'установить' Вручную через утилиту SteamCMD:
      3. Официальный клиент игры из steam: https://store.steampowered.com/app/221100/DayZ/
      4. "Настроенная конфигурация серверной части игры" и батник для старта сервера:
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.

      И так, приступим.
      Копируем папку со скачанными серверными файлами игры (папку DayZServer ) в отдельную папку. В пути и имени папки не должно быть пробелов и русских символов. Саму новую папку можно назвать как хотите, я же назову ее MyServer. Распаковываем архив с "Настроенной конфигурацией серверной части игры" в папку с серверными файлами (папка MyServer). Получим что-то типа такого: Далее мы работаем уже только внутри папки MyServer Открываем в Notepad++ файл server.cfg в папке Instance_1.  Настраиваем его, комментарии к настройке на русском в файле имеются.
      При особой необходимости вы можете свериться с serverDZ.cfg в корневой папке сервера, это оригинальный файл конфигурации, предоставленный разработчиками. Также, можете прочитать информацию из официальной документации с переводом в теме вот этой(смотрите во 2 сообщении указанной темы). Плюсом есть пояснения в конце гайда! Открываем в Notepad++ файлы BEServer.cfg  и BEServer_x64.cfg в папке Instance_1\Battleye в папке сервера. Настраиваем параметры, содержимое обоих файлов должно быть идентичным.
      Параметры:
      RConPassword - Устанавливает пароль для подключения RCon инструментов  (инструмент удаленного администрирования, таких как BEC/Dart).
      RestrictRCon - Включает\отключает RCon-функции (кик\бан\ограничение подключения) (0 для отключения органичений)
      MaxPing - устанавливает ограничение на сервере по пингу
      В примере, уже имеющемся у вас, 12345678 - rcon-пароль сервера, 500 - максимальный пинг, разрешенный battleye для игры на сервере, RestrictRCon 0 - разрешить подключение с RCon-клиентов с правами кика и бана (0 - разрешено все, 1 - запрещен кик и бан, только отправка в чат). Запускаем !!!Start_server.bat и наш сервер запустится. Запускаем клиент игры со steam, находим наш сервер вручную по ip и порту, либо имени сервера.
      Если сервер запущен на том же компьютере, где и игра, и на стандартном порту 2302, то поумолчанию поиск выполняется по 127.0.0.1:2302
      Если сервер запущен на другом компьютере, то вместо 127.0.0.1 будет ip адрес компьютера, где запущен сервер, или его доменное имя. Например, myserver.com:2302 или 178.123.22.12:2302
      ВАЖНО: если сервер запущен на другом компьютере, отличном от компьютера где запущена игра, то для доступа на сервер игроков необходимо иметь "внешний" выделенный ip-адрес и открытый порт сервера!
      Сменить порт сервера можно в !!!Start_server.bat (Notepad++ для редактирования),  параметр запуска сервера -port= Более подробно по параметрам запуска читайте ниже. Для выключения сервера рекоммендуется пользоваться !!!Server_kill.bat файлом, созданным в соответствии с рекоммендациями разработчиков игры и официальной документацией.  
      Разъяснения по параметрам запуска сервера игры (для !!!Start_server.bat ):
      Разъяснения по конфигурационному файлу сервера игры (для serverDZ.cfg ):
       
      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 файл BEServer.cfg должен быть идентичным по содержанию BEServer_x64.cfg иначе программа не будет работать!
      База данных (storage) теперь хранится по пути: mpmissions\dayzOffline.chernarusplus\storage_{номер instance с cfg сервера}
      В базе данных также хранится файл с сохранениями игроков на сервере с именем players.db
      Если вы не находите свой сервер в списке серверов игры во вкладке Community, проверьте на доступность и открытость извне игровой порт, а также порты steam и steamquery (см. cfg файл сервера). Сервера с crack не отобразятся там.
       
      Вот и все, приятной игры на сервере!
       
       
    • Автор: Miduznya
      Люди помогите кто знает, перепробовал множество вариантов
      ехе качал с сайта ragezone который типа переделан и в нем не работает БЕ
      но если зайти на сервер и выключить БЕ на клиенте через лаунчер, с сервера кикает, так что этот вариант не рабочий
      battleye = 0; тоже ничего не дает, кикает с сервера тоже.
      если не хотите тут можно и в лс , буду рад любой помощи.
    • Автор: Miduznya
      Собственно как, как отключить battleye на сервере античит

      параметр BattlEye=0; не работает я так понял 
  • Наш выбор

×
×
  • Создать...

Важная информация

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