spiritofkill

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

Вопрос

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

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


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

24 ответа на этот вопрос

Забронировать это рекламное место


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 (история изменений)

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


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

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

 

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

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

 

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

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


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

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

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

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

 

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

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
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()); 
			}
		}
	}
}

 

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


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

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

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


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

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

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

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


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

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

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

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас