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
BorizzK

DayZ Standalone 0.63 Оповещение на сервере о входе игрока

Recommended Posts

Автор скрипта сообщения всем пользователям: Мизев
 

Код функции отправки сообщения всем игрокам
вставляется в OnInit () в init.c или в missionserver.c из scripts.pbo
Становится глобальной серверной функцией и можно использовать где угодно на сервере (вроде бы)

Что делает? Отправляет сообщение переданное в функцию всем игрокам на сервере
Использование: MessageAllPlayers ("ТЕКСТ");

void MessageAllPlayers(string message) 
	{ 
		ref array<Man> players = new array<Man>; 
		GetGame().GetPlayers( players );
		if ( players.Count() > 0 )
		{
			for ( int i = 0; i < players.Count(); i++ ) 
			{ 
				PlayerBase player; 
				Class.CastTo(player, players.Get(i)); 
				Param1<string> m_MessageParam = new Param1<string>(message); 
				GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			} 
		}
	}

 

Код сообщения всем игрокам на сервере о входе НОВОГО игрока

вставляется в код создания персонажа, обработки его подключения или экипировки при входе - где Вам больше нравится

но после того как персонаж создастся и будет помещен в переменную к которой можно обратиться
В данном примере m_player


исполняется в контексте конкретного персонажа

 

Например init.c
 

	override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
	{

      //...... //тут еще разный код
      
      	playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
		Class.CastTo(m_player, playerEnt);

		GetGame().SelectPlayer(identity, m_player);
		
		//inform all players about new player connected
		ref array<Man> players = new array<Man>; //define array for all players
		GetGame().GetPlayers( players ); //put all players in to array players
		if ( players.Count() > 0 ) // if players count > 0
		{			
			string Message = "NEW Player " + m_player.GetIdentity().GetName() + " connected!"; //message text
			MessageAllPlayers(Message); // call MessageAllPlayers function with Message param
		}

		return m_player;
	}

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites



Однако!
В данном случае сообщение о новом игроке будет отправлено только если входит НОВЫЙ игрок
Если игрок входил и выходил, потом зашел заново и был загружен из базы сохранения сервера, сообщение отправлено не будет, тк будет обработано только подключение

 

Для того что бы сообщение отправлялось всегда во время подключения игрока

Функцию  MessageAllPlayers надо обьявить в missionServer.c

код отправки сообщения нужно поместить в функцию OnClientReadyEvent в в missionServer.c

после

 

вот так

	void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
	{
		GetGame().SelectPlayer(identity, player);

		//inform all players about new player connected
		ref array<Man> players = new array<Man>; //define array for all players
		GetGame().GetPlayers( players ); //put all players in to array players
		if ( players.Count() > 0 ) // if players count > 0
		{			
			string Message = "Player " + m_player.GetIdentity().GetName() + " connected!"; //message text
			MessageAllPlayers(Message); // call MessageAllPlayers function with Message param
		}
    }

 

или переопределить  OnClientReadyEvent в классе CustomMission: MissionServer в init.c

тогда в missionServer.c эта функция будет игнорироваться и использоваться та, что Вы переопределили

и поместить код в нее, убрав или не убрав код из функции создания персонажа

 

	override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
	{
		GetGame().SelectPlayer(identity, player);
		
		//inform all players about player connected
		ref array<Man> players = new array<Man>; //define array for all players
		GetGame().GetPlayers( players ); //put all players in to array players
		if ( players.Count() > 0 ) // if players count > 0
		{			
			string Message = "Player " + m_player.GetIdentity().GetName() + " connected!"; //message text
			MessageAllPlayers(Message); // call MessageAllPlayers function with Message param
		}
	}	

 

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

Аналогично о

 

респавне игрока переопределяем/правим функцию OnClientRespawnEvent

выходе/отключении  переопределяем/правим функцию OnClientDisconnectedEvent

 

из missionServer.c

Share this post


Link to post
Share on other sites

BorizzK Запутался чутка, первый код поместил в Mission, затем в инит..
Что нужно исправить?

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

Share this post


Link to post
Share on other sites

AlexandrUA Я попрравил код (см выше)

Это потому как я не проверил, не было времени
Написал теоретически

Исправь

 

if ( GetGame().GetPlayers().Count() > 0 ) - так не работает почему-то (((( хотя по логике должно

 

Сделай так

ref array<Man> players = new array<Man>; //define array for all players

GetGame().GetPlayers( players ); //put all players in to array players

if ( players.Count() > 0 ) // if players count > 0

 

см init.с

 

#include "mpmissions\dayzOffline.chernarusplus\init_mod.c"
#include "mpmissions\dayzOffline.chernarusplus\AirDrop\V2\AirDrop.c"


//GLOBAL SERVER INIT ON START
void main()
{
	Print("::: init.c ::: main() ::: ");

		Hive ce = CreateHive();
	if ( ce )
		ce.InitOffline();

	Weather weather = g_Game.GetWeather();

	weather.GetOvercast().SetLimits( 0.0 , 1.0 );
	weather.GetRain().SetLimits( 0.0 , 1.0 );
	weather.GetFog().SetLimits( 0.0 , 0.25 );

	weather.GetOvercast().SetForecastChangeLimits( 0.0, 0.2 );
	weather.GetRain().SetForecastChangeLimits( 0.0, 0.1 );
	weather.GetFog().SetForecastChangeLimits( 0.15, 0.45 );

	weather.GetOvercast().SetForecastTimeLimits( 1800 , 1800 );
	weather.GetRain().SetForecastTimeLimits( 600 , 600 );
	weather.GetFog().SetForecastTimeLimits( 1800 , 1800 );

	weather.GetOvercast().Set( Math.RandomFloatInclusive(0.0, 0.3), 0, 0);
	weather.GetRain().Set( Math.RandomFloatInclusive(0.0, 0.2), 0, 0);
	weather.GetFog().Set( Math.RandomFloatInclusive(0.0, 0.1), 0, 0);
	
	weather.SetWindMaximumSpeed(15);
	weather.SetWindFunctionParams(0.1, 0.3, 50);
	
	//CUSTOM SPAWN CAR
	vector niva_pos = {6063.77, 0, 7871.36};
	EntityAI nivaCar = EntityAI.Cast(GetGame().CreateObject("OffroadHatchback", niva_pos, false, true));
	nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackWheel" ); 
	nivaCar.GetInventory().CreateAttachment( "CarBattery" ); 
	nivaCar.GetInventory().CreateAttachment( "SparkPlug" );  
	nivaCar.GetInventory().CreateAttachment( "EngineBelt" ); 
	nivaCar.GetInventory().CreateAttachment( "CarRadiator" );
	nivaCar.GetInventory().CreateAttachment( "HatchbackDoors_Driver" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackDoors_CoDriver" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackHood" ); 
	nivaCar.GetInventory().CreateAttachment( "HatchbackTrunk" ); 
	nivaCar.SetAllowDamage(false);
	Print("::: init.c ::: main() ::: CUSTOM SPAWN CAR: " + nivaCar.ToString() + ", POSITION: " + nivaCar.GetPosition().ToString());
	
}

class CustomMission: MissionServer
{	

	ref array<string> m_pointPlayerPVP = new array<string>;;
	ref map<string, int> m_playersSetUID = new map<string, int>;
	
	//SERVER INIT
	override void OnInit()
	{
		
		Print("::: init.c ::: OnInit() ::: ");
		
		//???
		//Print("PSOVIS: new player");
		PrintString( "isServer " + GetGame().IsServer().ToString() );
		PrintString( "isClient " + GetGame().IsClient().ToString() );
		PrintString( "isMultiplayer " + GetGame().IsMultiplayer().ToString() );

		string line_content; 
		
		//Выбор координат спавна
		//ФАЙЛ pointPlayerPVP.lst кладем в папку указанную в параметре запуска сервера -profiles=
		//Формат координат в файле: X Z Y
		//Любая ошибка приведет к крашу сервера
		//Например:
		//6010.40 0 7742.71
		//6386.92 0 7945.12
		//6478.50 0 7874.77
		//6044.73 0 7699.81
		//5966.05 0 7720.02
		//5912.13 0 7768.36
		//5945.08 0 7759.17

		FileHandle file = OpenFile("$profile:pointPlayerPVP.lst", FileMode.READ);
		Print("::: OpenFile : pointPlayerPVP.lst : $profile");
		
		if (file != 0)
		{ 
			while ( FGets( file,  line_content ) > 0 )    
			{
				m_pointPlayerPVP.Insert( line_content);
			}
			CloseFile(file);
		}	
		m_pointPlayerPVP.Debug();
		array<string> strFileParam;
	
		//ФАЙЛ playersSetUID.ini кладем в папку указанную в параметре запуска сервера -profiles=
		//Формат файла:
		//Steam UID в привычном виде|номер комплекта
		//Любая ошибка приведет к крашу сервера
		//Пример:
		// 76562298156537007|1
		// 76561998116927207|3
		//Ели UID в файле нет комплект выбирается рандомно
		
		file = OpenFile("$profile:playersSetUID.ini", FileMode.READ);
		Print("::: OpenFile : playersSetUID.ini : $profile");
		
		if (file != 0)
		{ 
			while ( FGets( file,  line_content ) > 0 )    
			{
				strFileParam = new array<string>;
				line_content.Split( "|", strFileParam );
				m_playersSetUID.Insert(strFileParam.Get(0), strFileParam.Get(1).ToInt());
			}
			CloseFile(file);
		}
		
		//MZ
		//Message to all players
		GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(MessagePlayerCounts, 60000, true); //300 seconds = 300000
	}	
	
	//MZ
	//Messaging all players
	//USAGE: MessageAllPlayers("TEXT");
	void MessageAllPlayers(string message) 
	{ 
		ref array<Man> players = new array<Man>; 
		GetGame().GetPlayers( players );
		if ( players.Count() > 0 )
		{
			for ( int i = 0; i < players.Count(); i++ ) 
			{ 
				PlayerBase player; 
				Class.CastTo(player, players.Get(i)); 
				Param1<string> m_MessageParam = new Param1<string>(message); 
				GetGame().RPCSingleParam(player, ERPCs.RPC_USER_ACTION_MESSAGE, m_MessageParam, true, player.GetIdentity()); 
			} 
			Print("::: init.c ::: MessageAllPlayers(string message) ::: m_MessageParam: " + message);
		}
	}
	
	//MZ
	//Message about players count
	void MessagePlayerCounts() 
	{
		ref array<Man> players = new array<Man>; 
		GetGame().GetPlayers( players ); 
		if ( players.Count() > 0 )
		{
			int count_pl = players.Count(); 
			string Message = "Players online: [" + count_pl.ToString() + "]";
			//MessageAllPlayers("Players online: [" + count_pl + "]");
			MessageAllPlayers(Message);
			Print("::: init.c ::: MessagePlayerCounts() ::: Message: " + Message);
		}
	}

	override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
	{
		GetGame().SelectPlayer(identity, player);
		
		//inform all players about player connected
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		if ( players.Count() > 0 )
		{			
			string Message = "Player " + player.GetIdentity().GetName() + " connected!";
			MessageAllPlayers(Message);
			Print("::: init.c ::: OnClientReadyEvent(PlayerIdentity identity, PlayerBase player) ::: " + Message);
		}
	}	

	void SetRandomHealth(EntityAI itemEnt)
	{
		Print("::: init.c ::: SetRandomHealth(EntityAI itemEnt) ::: ");
		//int rndHlt = Math.RandomInt(40,100);
		//itemEnt.SetHealth("","",rndHlt);
		
		//MY - ЭТО ЭКСПЕРИМЕНТ
		itemEnt.SetHealth("","",1000);
	}

	//CREATE PLAYER CHARACTER IF NEW PLAYER CONNECT/RESPAWN
	override PlayerBase CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName)
	{
		Print("::: init.c ::: CreateCharacter(PlayerIdentity identity, vector pos, ParamsReadContext ctx, string characterName) ::: ");
		Entity playerEnt;
		if (m_pointPlayerPVP.Count()>0)
		{
			Print (m_pointPlayerPVP.Count());
			int maxNum = m_pointPlayerPVP.Count();
			int numPoint = Math.RandomInt(0, maxNum - 1);
			pos = m_pointPlayerPVP.Get(numPoint).ToVector();
		}
		
		playerEnt = GetGame().CreatePlayer(identity, characterName, pos, 0, "NONE");//Creates random player
		Class.CastTo(m_player, playerEnt);

		GetGame().SelectPlayer(identity, m_player);
		
		//inform all players about new player connected
		ref array<Man> players = new array<Man>; //define array for all players
		GetGame().GetPlayers( players ); //put all players in to array players
		if ( players.Count() > 0 ) // if players count > 0
		{			
			string Message = "NEW Player " + m_player.GetIdentity().GetName() + " connected!"; //message text
			MessageAllPlayers(Message); // call MessageAllPlayers function with Message param
			Print("::: init.c ::: OnClientReadyEvent(PlayerIdentity identity, PlayerBase player) ::: " + Message);
		}
	
		return m_player;
	}
	
	//CREATE EQUIPMENT FOR NEW PLAYER
	override void StartingEquipSetup(PlayerBase player, bool clothesChosen)
	{
		Print("::: StartingEquipSetup(PlayerBase player, bool clothesChosen) :::");
		
		//Номер комплекта выбирается рандомно
		int numSet = Math.RandomInt(2,6);  /// 1 - Админ сет, 2-6 сеты для всех

		EntityAI itemEnt;
		ItemBase itemBs;
		
		//Получаем UID
		//PlayerIdentity p_identity = player.GetIdentity();
		//p_identity.GetName(); // Получим имя игрока
		//p_identity.GetPlainId(); // UID в нашем знакомом виде 7656119**********
		//p_identity.GetId(); // получим UID в не знакомом виде Ue7dyagee34*********
		//p_identity.GetPlayerId(); // получим порядковый номер объекта типа игрок

		PlayerIdentity p_identity = player.GetIdentity();
		string p_name = p_identity.GetName();
		int p_id = p_identity.GetPlayerId();
		
		if( p_identity )
		{
			string uid_pl = p_identity.GetPlainId();
			
 			if (m_playersSetUID.Contains(uid_pl))
			{
				numSet = m_playersSetUID.Get(uid_pl);
			} 
 		}
		
		itemEnt = player.GetInventory().CreateInInventory("Rag");
		itemBs = ItemBase.Cast(itemEnt);
		itemBs.SetQuantity(4);
		SetRandomHealth(itemEnt);

		itemEnt = player.GetInventory().CreateInInventory("RoadFlare");
		itemBs = ItemBase.Cast(itemEnt);
		
		switch( numSet )
		{
			case 1: //ADMIN
			{
				Print("::: init.c ::: StartingEquipSetup ::: ADMIN ::: NAME:" + p_name + ", UID: " + uid_pl + ", ID: " + p_id.ToString() );

				//player.RemoveAllItems();

				player.GetInventory().CreateInInventory("CoyoteBag_Green");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("TTSKOPants");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("TTsKOJacket_Camo");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("CombatBoots_Black");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("CombatKnife");
				itemBs = ItemBase.Cast(itemEnt);
			
				player.GetInventory().CreateInInventory("FNX45");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");
				itemBs = ItemBase.Cast(itemEnt);
				player.GetInventory().CreateInInventory("Mag_FNX45_15Rnd");
				itemBs = ItemBase.Cast(itemEnt);	
				player.GetInventory().CreateInInventory("Mag_AKM_30Rnd");
				itemBs = ItemBase.Cast(itemEnt); 
				player.GetInventory().CreateInInventory("Mag_AKM_30Rnd");
				itemBs = ItemBase.Cast(itemEnt);
				
				itemEnt = player.GetInventory().CreateInInventory( "akm" ); 
				itemEnt.GetInventory().CreateAttachment( "PSO11Optic" ); 
				itemEnt.GetInventory().CreateAttachment( "AK_WoodBttstck" ); 
				itemEnt.GetInventory().CreateAttachment( "AK_WoodHndgrd" );
				itemEnt.GetInventory().CreateAttachment( "AK_Suppressor" );
				
				itemEnt = player.GetInventory().CreateInInventory("Rag");
				itemBs = ItemBase.Cast(itemEnt);
				itemBs.SetQuantity(6);
				
				itemEnt = player.GetInventory().CreateInInventory("RoadFlare");
				itemBs = ItemBase.Cast(itemEnt);

				player.SetHealth("","",1000); //ТЕСТ
				
				//SetAllowDamage НЕ РАБОТАЕТ ДЛЯ ОНЛАЙНА - БОГЕМЦЫ ВЫКЛЮЧИЛИ 
				//Тут обсуждение - https://forums.dayz.com/topic/240028-pve-server-disable-pvp-damage/
				//Есть идея насчет доработки кода обрабатывающего нанесение урона 
				//player.SetAllowDamage(false);
				
				break;
			}
			
			case 2:
			{
				itemEnt = player.GetInventory().CreateInInventory("VSS");
				itemBs = ItemBase.Cast(itemEnt);
				//Шаманим свое
				break;
			}
			
			case 3:
			{
				itemEnt = player.GetInventory().CreateInInventory("AKM");
				itemBs = ItemBase.Cast(itemEnt);
				//Шаманим свое
				break;
			}
			
			case 4:
			{
				itemEnt = player.GetInventory().CreateInInventory("AK74");
				itemBs = ItemBase.Cast(itemEnt);
				//Шаманим свое
				break;
			}
			
			case 5:
			{
					
					break;
			}
			
			case 6:
			{
					
					break;
			}
		}
	}
	
	//AIRDROP START
	ref AirDrop AirDropClass;//AirDrop class definition - #include "mpmissions\dayzOffline.chernarusplus\AirDrop\V2\AirDrop.c"

	void CustomMission()
	{
		AirDropClass = new AirDrop;		
	}

	float TimerSlice; // Timeslice
	override void OnUpdate( float timeslice )
	{
		super.OnUpdate( timeslice );

		// FPS Fix
		TimerSlice += timeslice;
		if (TimerSlice >= AirDropClass.TimesliceMultiplyier)
		{
			AirDropClass.CreateAirDrop();
			TimerSlice = 0;	
		}
	}
	//AIRDROP END
}	
  
Mission CreateCustomMission(string path)
{
	Print("::: init.c ::: CreateCustomMission(string path) ::: ");
	return new CustomMission();
}

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

AlexandrUA сделай сам

Ниже написано куда и что пихать )))

Пишу с телефона

 

Найди в missioserver.c   

(Где искать знаешь?)

 

Void OnClientDisconnectedEvent (...тут ее входные параметры.)

{

Тут ее код ее

}

 

 Всю функцию скопируй в init.c

Послкэе функции OnClientReadyEvent

 

Перед void начепятай override, как в предыдушем случае

 

И в конце ее родного кода межлу {} вставь код вызова оповещения как в предылушем случае заменив в тексте переменной Message  = "........connect" на disconnect ))))

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK Правильно заменил?

 

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

Share this post


Link to post
Share on other sites

Условие забыл

Зачем отпраалять мессагу если игроков нет

 

Кстати стрелочку в качестве спасибо то же можно щелкнуть ))

Share this post


Link to post
Share on other sites

Ты невнимателен, а я ошибся когда копипастил код из файла ))))

 

Если в функции ВЫШЕ где мы вызываем

 

   string Message = "Player " + m_player.GetIdentity().GetName() + " connected!"; //message text
   MessageAllPlayers(Message); // call MessageAllPlayers function with Message param

 

обьект игрока  в переменной m_player

 

то на скрине что ты привел игрок в переменной player

 

и надо вот так

 

   string Message = "Player " + player.GetIdentity().GetName() + " connected!"; //message text
   MessageAllPlayers(Message); // call MessageAllPlayers function with Message param

 

Я там выше исправил )))

 

просто посмотри в какой переменной обьект игрока

GetGame().SelectPlayer(identity, m_player);

или

GetGame().SelectPlayer(identity, player);

итд итп

 

	override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
	{
		GetGame().SelectPlayer(identity, player);
		
		//inform all players about player connected
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		if ( players.Count() > 0 )
		{			
			string Message = "Player " + player.GetIdentity().GetName() + " connected!";
			MessageAllPlayers(Message);
		}
	}	

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK код сообщения всем игрокам, можно заменить на 1 строку -

GetGame().ChatPlayer(0, "сообщение");

где 0 - это ID канала чата.

Share this post


Link to post
Share on other sites

NoNameUltima 

 

string Message = "Player " + player.GetIdentity().GetName() + " connected!"; 

 

Вопрос

 

Движок в script.log ругается на эту строку

NULL pointer to instance

Хотя сообщение формирует корректно

 

Интересно, это глюк движка или....

 

Не люблю когда в логах ошибки )))

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

NoNameUltima 

 

Ну дык

 

	override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
	{
		GetGame().SelectPlayer(identity, player);
		
		//inform all players about player connected
		ref array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );
		if ( players.Count() > 0 )
		{			
			string Message = "Player " + player.GetIdentity().GetName() + " connected!";
			MessageAllPlayers(Message);
			Print("::: init.c ::: OnClientReadyEvent(PlayerIdentity identity, PlayerBase player) ::: " + Message);
		}
	}	

 

 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK Поставь принты да посмотри после какой строки, точно выдает что нулл.

и вообще - нафига получать массив игроков, и проверять их кол-во, если оно заведомо будет больше нуля при подключении нового?

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

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

Share this post


Link to post
Share on other sites

NoNameUltima 

Да это понятно теперь

Использовал наработку Мизева, у него было так

Однако, "А если новый игрок еще не в списке  то и объекта быть не может, и функция гетНэйм не должна ниче выдать"

Но ведь выдает же

Но ругается
Чуть позже по другому попробую ))

Share this post


Link to post
Share on other sites

BorizzK запринтуй весь массив игроков и посмотри что в нике, что в самом object находится, что в id

Share this post


Link to post
Share on other sites

123new 
Принтовал

Все на месте и ругань на NULL в этой строке

Чуть позже проверю еще раз и выложу лог в эту тему


 

Edited by BorizzK (see edit history)

Share this post


Link to post
Share on other sites

BorizzK а нафига тебе

player.GetIdentity().GetName()

делать когда у тебя это значение и так в функцию приходит?

PlayerIdentity identity

 

Share this post


Link to post
Share on other sites

123new Дя это понятно
делал по аналогии вчера еще переделал и отправку сообшений упростил по наводки Ультимы

 

Share this post


Link to post
Share on other sites
override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
    {
        super.OnClientReadyEvent(PlayerIdentity identity, PlayerBase player);
        string Message = "Player " + identity.GetName() + " connected!";
        MessageAllPlayers(Message);
        Print("::: init.c ::: OnClientReadyEvent(PlayerIdentity identity, PlayerBase player) ::: " + Message);
    }    


   
или так

override void OnClientReadyEvent(PlayerIdentity identity, PlayerBase player)
    {
        super.OnClientReadyEvent(PlayerIdentity identity, PlayerBase player);
        string Message = "Player " + identity.GetName() + " connected!";
        GetGame().ChatPlayer(0, Message);
        Print("::: init.c ::: OnClientReadyEvent(PlayerIdentity identity, PlayerBase player) ::: " + Message);
    }   

 

Edited by NoNameUltima (see edit history)

Share this post


Link to post
Share on other sites

NoNameUltima 

 

super.OnClientReadyEvent - а это что?

и что это за магическое super ?

что-то как-то рекурсию напоминает )))

Share this post


Link to post
Share on other sites

BorizzK Вызов базы, - той что ты перекрыл override'ом. а уж потом все твое. Можно и не вызывать, если не надо базу. можно и откропировать с базы, можно и где то в другом месте вызвать))) ну дело ситуации)

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

  • Similar Content

    • By Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. На сервере есть трейдер зоны и базы игроков. 
      Если в течение определённого времени, на пример 1 - 2 часа с машиной не кто не взаимодействует и машина не находится в зоне трейдера или на теретории базы, то машина отлетает в гараж или на штраф стоянку.
      На сервере используется TraderPlus.
       
      Есть такие решения у кого?
      За ранние благодарю.
    • By Troy1
      Всем привет. Подскжите ну или помогите пожалуйста решить вопрос.
      Вопрос звучит так. Нужно сделать так, что бы на всей карте был запрет на строительство. 
      Если нужно построить например базу с палатками, то нужно установить верстак или флаг, который установит зону для строительства с радиусом примерно 20-25 метров от центра и желательно что бы зона была квадратной.
      Есть такие решения у кого?
      За ранние благодарю.
    • By BR0wi
      Подскажите где найти людей, которые делаю моды на заказ. К кому вообще обращаться? Или что бы реализовать свои идеи нужно самому "год" сидеть и изучать все механики модинга?
    • By CubeIn
      Приветствую господа, хочу создать новый проект, уникальный, но для этого нужен маппер.
      Я оставлю здесь свой дискрод, напишите в лс, кто готов взяться за крупный проект.
      4me#4542
    • By 6agu
      Поставил
      Пожалуйста, Войдите или Зарегистрируйтесь, чтобы увидеть это: Вложение.
  • Our picks

×
×
  • 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.