Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Need help?

    Create a topic in the appropriate section
    Don't write everything in the chat!
  • Take a look at the marketplace

    There you can buy
    everything related to game servers
  • Don't want a ban?

    Please read our rules
    Don't disturb the order!
  • Sell or buy?

    Use services of the guarantor
    We will make your deal safe
  • 0
spiritofkill

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

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

Share this post


Link to post
Share on other sites

Recommended Posts

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

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

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

Share this post


Link to post
Share on other sites









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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

 

Share this post


Link to post
Share on other sites
  • 0

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

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

 

Edited by irkutsk38 (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

 

Share this post


Link to post
Share on other sites
  • 0

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

 

Edited by spiritofkill (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

BorizzK 

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

Share this post


Link to post
Share on other sites
  • 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();
}

 

Edited by spiritofkill (see edit history)

Share this post


Link to post
Share on other sites
  • 0

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

 

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

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

 

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

 

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

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites
  • 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()); 
			}
		}
	}
}

 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 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 );
	}	

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.