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

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

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

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

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

Оповещение о входе и выходе игрока

Всем доброго времени суток. Интересует такой вопрос, как же это осуществить. В скриптах 1.0 и выше не нашел информации. Брал с 0.63, либо не работает, либо ошибки идут.

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


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

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

  • 0
Скрытый текст

Присоединяюсь к вопросу

Присоединяюсь к вопросу

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


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



  • 0
	override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
	{
		super.InvokeOnConnect(player, identity);
		GetGame().ChatPlayer("Player " + identity.GetName() + " connected"); // Отправим сообщение в глобальый чат о подключившемся игроке
	}

А дисконнект убрал, мешает

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


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

danisimus Здравствуйте, я так понимаю этот код надо пихать в init.c а куда точнее? если не сложно дайте пример пожалуйста.

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


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

irkutsk38 Надо было добавить что в тело заключенное в { }

 

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


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

@BorizzKЯ этот кода прописал так https://sqfbin.com/ikebixovodojiwewucax

Может не правильно, но работает. Сейчас я поставил вашу систему оповещения о входе и выхода

 

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

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


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

irkutsk38 спасибо!

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


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

Dony С отключением посложнее немного

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


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

BorizzK я даже и не встречал такого пока))

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


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

Dony и не стоит оно криво работает

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


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

irkutsk38 BorizzK 

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

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


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

spiritofkill ну а код-то включая строку в которой ошибка (она там в скобках) сюда приложить

у меня там переменная проверяется которая у тебя не найдена

а содержимое ее берется из конфига моей админки которая его тягает из кнфига сервера

 

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


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

BorizzK И как мне сделать, что бы работало? Объясните пожалуйста, только начал заниматься всем этим

 

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

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


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

spiritofkill показать код весь или часть вместе с функцией из класса миссии

а то хз что и куда ты вставил

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


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

BorizzK 

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

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


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

BorizzK 


void main()
{
	//INIT WEATHER BEFORE ECONOMY INIT------------------------
	Weather weather = g_Game.GetWeather();

	weather.MissionWeather(false);    // false = use weather controller from Weather.c

	weather.GetOvercast().Set( Math.RandomFloatInclusive(0.4, 0.6), 1, 0);
	weather.GetRain().Set( 0, 0, 1);
	weather.GetFog().Set( Math.RandomFloatInclusive(0.05, 0.1), 1, 0);

	//INIT ECONOMY--------------------------------------
	Hive ce = CreateHive();
	if ( ce )
		ce.InitOffline();

	//DATE RESET AFTER ECONOMY INIT-------------------------
	int year, month, day, hour, minute;
	int reset_month = 9, reset_day = 20;
	GetGame().GetWorld().GetDate(year, month, day, hour, minute);

    if ((month == reset_month) && (day < reset_day))
    {
        GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
    }
    else
    {
        if ((month == reset_month + 1) && (day > reset_day))
        {
            GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
        }
        else
        {
            if ((month < reset_month) || (month > reset_month + 1))
            {
                GetGame().GetWorld().SetDate(year, reset_month, reset_day, hour, minute);
            }
        }
    }
}

class CustomMission: MissionServer
{	
	void SetRandomHealth(EntityAI itemEnt)
	{
		if ( itemEnt )
		{
			int rndHlt = Math.RandomInt(55,100);
			itemEnt.SetHealth("","",rndHlt);
		}
	}
	
   static void ConnectPlayersMessage(PlayerIdentity connectedIdentity)
	{
		//ServerDebugFps(); //debug
		
		array<Man> players = new array<Man>; 
		GetGame().GetPlayers( players ); 
		if (players.Count() > 0)
		{
			private string Message = "Player " + connectedIdentity.GetName() + " connected";
			if ( enablePlayersConnectMessages )
			{
				GetGame().ChatPlayer(Message);
			}
			else if ( (enablePlayersConnectMessagesToAdmins && m_AdminsListArray.Count() > 0) || (enablePlayersConnectMessagesToArbitrators && m_ArbitratorsListArray.Count() > 0) )
			{
				for ( int i = 0; i < players.Count(); ++i )
				{
					PlayerBase selectedPlayer = PlayerBase.Cast(players.Get(i));
					if (selectedPlayer && selectedPlayer.GetIdentity())
					{
						PlayerIdentity selectedIdentity = selectedPlayer.GetIdentity();
						Param1<string> Msgparam = new Param1<string>( Message );
						if ( m_AdminsListArray.Find(selectedIdentity.GetPlainId()) >= 0 || m_ArbitratorsListArray.Find(selectedIdentity.GetPlainId()) >= 0 )
						{
							GetGame().RPCSingleParam(selectedPlayer, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, selectedIdentity);
							Print("::: [AdminMod_Class] ::: ConnectPlayersMessage() ::: enablePlayersConnectMessagesToAdmins || enablePlayersConnectMessagesToArbitrators: " + selectedIdentity.GetName() + ": " + Message);
						}
					}
				}
			}
			Print("::: [AdminMod_Class] ::: ConnectPlayersMessage() ::: " + Message + ". Player steam UID: " + connectedIdentity.GetPlainId() + ", Player dayz UID: " + connectedIdentity.GetId());
		}
	}
	override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
	{
		Entity playerEnt;
		playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
		Class.CastTo(m_player, playerEnt);
		
		GetGame().SelectPlayer(identity, m_player);
		
		return m_player;
	}
	
	override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
	{
		EntityAI itemTop;
		EntityAI itemEnt;
		ItemBase itemBs;
		float rand;
		
		itemTop = player.FindAttachmentBySlotName("Body");
		
		if ( itemTop )
		{
			itemEnt = itemTop.GetInventory().CreateInInventory("Rag");
			if ( Class.CastTo(itemBs, itemEnt ) )
				itemBs.SetQuantity(4);

			SetRandomHealth(itemEnt);
			
			itemEnt = itemTop.GetInventory().CreateInInventory("RoadFlare");
			SetRandomHealth(itemEnt);
			
			rand = Math.RandomFloatInclusive(0.0, 1.0);
			if ( rand < 0.35 )
				itemEnt = player.GetInventory().CreateInInventory("Apple");
			else if ( rand > 0.65 )
				itemEnt = player.GetInventory().CreateInInventory("Pear");
			else
				itemEnt = player.GetInventory().CreateInInventory("Plum");
		
			SetRandomHealth(itemEnt);
		}
	}
};
  
Mission CreateCustomMission(string path)
{
	return new CustomMission();
}

 

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

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


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

spiritofkill Ну вы вставили из одминки то что вызывается из инита

 

даж не думая как оно работает

хоть бы поиском по форуму прошлись что ли

 

сегодня же выкладывали прям готовое решение вместе с кодом миссии

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


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

Вот тут все есть

то что вставили из одминуи удалите

вставляйте вот это

 

override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
	{
		super.InvokeOnConnect(player, identity);
		GetGame().ChatPlayer("Player " + identity.GetName() + " connected"); // Отправим сообщение в глобальый чат о подключившемся игроке
	}

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
GetGame().ChatPlayer("Player " + identity.GetName() + " connected");

Это все, что нужно, чтобы отправлять глобальные сообщения? Почему тогда в некоторых скриптах городят нечто подобное?

 

void SendToGlobal(string message) 
{
	array<Man> players = new array<Man>;
	GetGame().GetPlayers( players );
	int numbOfplayers = players.Count();

	if( numbOfplayers > 0 )
	{
		foreach(Man player: players)
		{
			if(( player ) && (message != ""))
			{
				Param1<string> m_GlobalMessage = new Param1<string>(message); 
				GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_GlobalMessage, true, player.GetIdentity()); 
			}
		}
	}
}

 

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


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

SinSin потому как в обновлениях авторы игры ломали эти функции и они работали некорректно. Опять же спасибо авторам игры за игру в стабильном и работающем виде, в которой функционал, который работал в прошлом обновлении может перестать работать в следующем. Это уже как 'закон Bohemia interactive', почти в каждой игре у них такое.

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


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

SinSin Выше в принципе уже ответили, атак добавлю -

Данный код "стабильнее", - он пербором по 1 всем шлет по сообщению, вряд ли уж его поломают, а так то должна работать и 1 строка, но ее постоянно выламывают)

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


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

NoNameUltima Спасибо КЭП )))))

А то мы не знаем )))

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
	override void InvokeOnConnect(PlayerBase player, PlayerIdentity identity)
	{
		super.InvokeOnConnect(player, identity);
		GetGame().ChatPlayer("Player " + identity.GetName() + " connected");
	}
	
	override void InvokeOnDisconnect( PlayerBase player )
	{
		private PlayerIdentity identity = NULL;
		identity = player.GetIdentity();
		if (player && identity)
		{
			GetGame().ChatPlayer("Player " + identity.GetName() + " disconnected");
		}
		super.InvokeOnDisconnect( player );
	}	

Вот работает нормально и туда и обратно

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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