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

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

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

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

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

[Dayz 0.63] Миссия и Админка в игре

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

На основе админки по ссылке Github из шапки темы:

Моя мини-админка без всяких наворотов и годмодов на текущую чистую steam-версию сервера игры. Это пакет минимум" (с вырезанной частью функций).

 

Установка:

1. Открыть 'mpmissions\dayzOffline.chernarusplus\init.c' и добавить в самом начале файла 1 строкой

#include "$CurrentDir:\mpmissions\dayzOffline.chernarusplus\Scripts\AdminTool\AdminTool_functions.c" 
ref AdminTool_PlugIn AdminTool = new AdminTool_PlugIn();

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

2. Найти в классе 'CustomMission: MissionServer' и добавить:

override void OnInit()
	{
		AdminTool.Init(); //Call for admin tool scripts
	}

Если есть функция 'OnInit()', то добавить в ее конец код:

AdminTool.Init(); //Call for admin tool scripts

Пример:

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

Затем ниже в теле этого же класса добавляем функцию (если есть уже, заменяем или дописываем недостающее)

override void OnEvent(EventType eventTypeId, Param params) 
	{
		super.OnEvent(eventTypeId,params);
		
		switch(eventTypeId)
		{
			case ChatMessageEventTypeID:
				 ChatMessageEventParams chat_params = ChatMessageEventParams.Cast(params);
				 if (chat_params.param1 == 0 && chat_params.param2 != "") //trigger only when channel is Global == 0 and Player Name does not equal to null
					{
						Param4<int,string,string,string> request_info = new Param4<int,string,string,string>(chat_params.param1, chat_params.param2, chat_params.param3, chat_params.param4);
						AdminTool.RequestHandler(request_info); //Send the param to Admintools
					}
			break;
		}
	}

3. Создаем в 'mpmissions\dayzOffline.chernarusplus' папку 'Scripts', а в ней папку 'AdminTool'.

4. Создаем файл с именем и расширением 'AdminTool_functions.c' и заполняем его следующим содержимым

typedef Param4<int, string, string, string> AdminChatParams;

class AdminTool_PlugIn
{
	protected string Dir_Locations_Configs = "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\Scripts\\AdminTool\\";
	protected string FileName_AdminList = "Admins.txt";
	protected string FileName_TPLocationsList = "Locations_TP.txt";
	protected bool Enable_check_nickNames_Admin = false;
	
	protected ref map<string, string> m_AdminList;
	protected ref map<string, vector> m_TPLocations;
	protected ref map<string,    int> m_ExtendedCommands;

	protected bool m_FreeCamera;
	protected bool m_IsDebugRunning = false;

	protected PlayerBase Admin;
	protected PlayerIdentity identityT;
	protected string PlayerUID;
	protected string GUID;
	
	void Init()
	{
		Print("AdminTool:: Init():: Loading AdminTool Mods...");
		
		m_AdminList    = new map<string, string>; //UID, name
		m_TPLocations  = new map<string, vector>; //name of town, pos
		m_ExtendedCommands = new map<string,int>; //Command, length
		
		string line_content = "";
		array<string> temp_massive = new array<string>;

		//-----Add Admins from txt-----
		FileHandle AdminUIDSFile = OpenFile(Dir_Locations_Configs + FileName_AdminList,FileMode.READ);
		if (AdminUIDSFile != 0)
		{
			line_content = "";
			while ( FGets(AdminUIDSFile,line_content) > 0 )
			{
				if (line_content.Contains("|"))
				{
					temp_massive.Clear();
					line_content.Split( "|", temp_massive );
					private string Getted_UID_PL = temp_massive.Get(0);
					private string Getted_Name_PL = "null";
					if (Enable_check_nickNames_Admin)
					{
						Getted_Name_PL = temp_massive.Get(1);
						m_AdminList.Insert(Getted_UID_PL,Getted_Name_PL); //UID , NAME
						Print("Adding Admin: "+ Getted_Name_PL + "(uid=" + Getted_UID_PL + ") To the Admin List!");
					} else
					{
						m_AdminList.Insert(Getted_UID_PL,Getted_Name_PL); //UID , NAME
						Print("Adding Admin: "+ Getted_UID_PL + " To the Admin List!");
					}
					temp_massive.Clear();
				}
			}
			CloseFile(AdminUIDSFile);
		}
		
		FileHandle TPLocsFile = OpenFile(Dir_Locations_Configs + FileName_TPLocationsList,FileMode.READ);
		if (TPLocsFile != 0)
		{
			line_content = "";
			while ( FGets(TPLocsFile,line_content) > 0 )
			{
				if ((line_content.Contains("|")) && (line_content.Contains(" ")))
				{
					temp_massive.Clear();
					line_content.Split( "|", temp_massive );
					private string Getted_Namne_Location = temp_massive.Get(0);
					private string Getted_Coord_Location = temp_massive.Get(1);
					
					m_TPLocations.Insert(Getted_Namne_Location,Getted_Coord_Location.ToVector()); //UID , NAME
					Print("Adding Location: "+ Getted_Namne_Location +  "(" + Getted_Coord_Location + ") To the TP Locations List!");
				}
			}
			CloseFile(TPLocsFile);
		}
		
		//Init Commands
		m_ExtendedCommands.Insert("/readcfg",8);
		m_ExtendedCommands.Insert("/strip",6);
		m_ExtendedCommands.Insert("/tpm",5);
		m_ExtendedCommands.Insert("/tpp",4);
		m_ExtendedCommands.Insert("/tpto",5);
		m_ExtendedCommands.Insert("/spi",4);
		m_ExtendedCommands.Insert("/spg",4);
		m_ExtendedCommands.Insert("/tpc",4);
		//Sub commands
		m_ExtendedCommands.Insert("/ammo",1);
		m_ExtendedCommands.Insert("/stamina",1);
		m_ExtendedCommands.Insert("/LoadoutType",1);
		m_ExtendedCommands.Insert("/CustomLoadouts",1);
		m_ExtendedCommands.Insert("/SpawnArmed",1);
		m_ExtendedCommands.Insert("/freecam",1);
		m_ExtendedCommands.Insert("/debug",1);
		m_ExtendedCommands.Insert("/nighttime",1);
		m_ExtendedCommands.Insert("/daytime",1);
		m_ExtendedCommands.Insert("/godmode",1);
		m_ExtendedCommands.Insert("/heal",1);
		m_ExtendedCommands.Insert("/kill",1);
		m_ExtendedCommands.Insert("/tpalltome",1);
		m_ExtendedCommands.Insert("/killall",1);
		m_ExtendedCommands.Insert("/spawncar",1);
	}

	int TeleportAllPlayersTo(PlayerBase Admin)
	{
		array<Man> players = new array<Man>;
		GetGame().GetPlayers( players );

		vector AdminPos;
		AdminPos = Admin.GetPosition();

		for ( int i = 0; i < players.Count(); ++i )
		{
			PlayerBase Target = players.Get(i);
			Target.SetPosition( AdminPos );
		}
		return i;
	}

	void oSpawnItemFunc(bool ground, PlayerBase player, string ClassName)
	{
		EntityAI item;
		ItemBase itemBs

		vector NewPosition;
		vector OldPosition;

		if (ground)
		{
			OldPosition = player.GetPosition();

			NewPosition[0] = OldPosition[0] + 1.5;
			NewPosition[1] = OldPosition[1] + 0.1;
			NewPosition[2] = OldPosition[2] + 1.5;

			item = GetGame().CreateObject( ClassName, NewPosition, false, true );
		}else{

			item = player.GetInventory().CreateInInventory( ClassName );
			itemBs = ItemBase.Cast(item);	
			itemBs.SetQuantity(1);
		}
	}

	vector SnapToGround(vector pos)
	{
		float pos_x = pos[0];
		float pos_z = pos[2];
		float pos_y = GetGame().SurfaceY( pos_x, pos_z );
		vector tmp_pos = Vector( pos_x, pos_y, pos_z );
		tmp_pos[1] = tmp_pos[1] + pos[1];

		return tmp_pos;
	}

	ref array<string> CheckCommand(string CommandLine)
	{
		ref array<string> ret = new array<string>;
		string strRplce,mKey;
		int cmdLength;

		strRplce = CommandLine;

		for (int i = 0; i < m_ExtendedCommands.Count(); ++i)
		{
			mKey 	  = m_ExtendedCommands.GetKey(i);
			cmdLength = m_ExtendedCommands.Get(mKey);

			if (CommandLine.Contains(mKey))
			{
				strRplce.Replace(mKey + " ","");
				ret.Insert(mKey); //0 = Command 1 = Data
				if (strRplce != "")
				{
					ret.Insert(strRplce);
				}
				return ret;
			}
		}
		return NULL;
	}

	//---------------------------------------------------------------------------------
	void RequestHandler( Param request_info )
	{
		AdminChatParams chat_params = AdminChatParams.Cast(request_info);
		if (chat_params)
		{
			array<Man> players = new array<Man>;
			GetGame().GetPlayers( players );
			
			PlayerBase Admin;
			PlayerIdentity AdminIdentity;
			string AdminUID;

			PlayerBase selectedPlayer;
			PlayerIdentity selectedIdentity;
			string selectedUID;
			
			string chatLine = chat_params.param3;
			string strMessage;
			Param1<string> Msgparam;

			for (int i = 0; i < players.Count(); ++i)
			{
				private string temp_name_pl = players.Get(i).GetIdentity().GetName();
				if (!Enable_check_nickNames_Admin)
				{
					temp_name_pl = players.Get(i).GetIdentity().GetPlainId();
				}
				if (players.Get(i).GetIdentity().GetName() == chat_params.param2 && m_AdminList.Contains(players.Get(i).GetIdentity().GetPlainId())  && m_AdminList.Contains(temp_name_pl))
				{
					Admin 		  = players.Get(i);
					AdminIdentity = Admin.GetIdentity();
					AdminUID 	  = AdminIdentity.GetPlainId();
				}
			}

			if (Admin && AdminUID != "")
			{
				if (chatLine.Contains("/"))
				{
					ref array<string> chatData = CheckCommand(chatLine);
					string cCommand, cData;
					if (chatData != NULL)
					{
						cCommand = chatData.Get(0);
						cData    = chatData.Get(1);
					} else { cCommand = "UnknownCommand" }

					Run_Command(cCommand,cData,players,selectedPlayer,selectedIdentity,selectedUID,Admin,AdminIdentity,AdminUID);
				}
			}
		}
	}
	
	
	/////////////////////
	void Run_Command(string cCommand,string cData,array<Man> players,PlayerBase selectedPlayer,PlayerIdentity selectedIdentity,string selectedUID,PlayerBase Admin,PlayerIdentity AdminIdentity, string AdminUID)
	{	
		string strMessage;
		Param1<string> Msgparam;
		
		
		switch(cCommand)
		{
			case "/readcfg":
			{
				Init();
				Msgparam = new Param1<string>( "Configs Readed Again!" );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				break;
			}
			
			case "/strip":
			{
					for ( int a = 0; a < players.Count(); ++a )
					{
						selectedPlayer = players.Get(a);
						selectedIdentity = selectedPlayer.GetIdentity();
						if ( selectedIdentity.GetName() == cData )
						{
							selectedPlayer.RemoveAllItems();
							Msgparam = new Param1<string>( "Player "+cData +" Stripped!" );
							GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
						}
					}
				break;
			}

			case "/tpm":
			{
				for ( int zm = 0; zm < players.Count(); ++zm )
				{
					if ( players.Get(zm).GetIdentity().GetName() == cData )
					{
						Admin.SetPosition(players.Get(zm).GetPosition());
						strMessage = "You were teleported to player " + cData;
						Msgparam = new Param1<string>( strMessage );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
					}
				}
			break;
			{

			case "/tpp":
			{
				for ( int z = 0; z < players.Count(); ++z )
				{
					selectedPlayer = players.Get(z);
					selectedIdentity = selectedPlayer.GetIdentity();
					if ( selectedIdentity.GetName() == cData )
					{
						selectedPlayer.SetPosition(Admin.GetPosition());

						Msgparam = new Param1<string>( "You were teleported by the admin!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, selectedIdentity);
							  
						strMessage = "Player " + cData + " was teleported to your location!";
						Msgparam = new Param1<string>( strMessage );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
					}
				}
			break;
			}

			case "/tpto":
			{
				vector position = "0 0 0";
				if (m_TPLocations.Contains(cData))
				{
					m_TPLocations.Find( cData, position );

					vector ofixPlayerPos;
					ofixPlayerPos[0] = position[0];
					ofixPlayerPos[2] = position[2];

					ofixPlayerPos = SnapToGround( ofixPlayerPos );

					Admin.SetPosition(ofixPlayerPos);

					strMessage = "Teleported To Location: " + cData;
					Msgparam = new Param1<string>( strMessage );
					GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				}
				else
				{
					strMessage = "Teleport Failed! Location: " + cData + " Is not on the list!";
					Msgparam = new Param1<string>( strMessage );
					GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				}
			break;
			}

			case "/spi":
			{
				oSpawnItemFunc(false,Admin,cData);
				strMessage = "Admin Commands: Item " + cData + " Added in Inventory!";
				Msgparam = new Param1<string>( strMessage );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}

			case "/spg":
			{
				oSpawnItemFunc(true,Admin,cData);
				strMessage = "Admin Commands: Item " + cData + " Spawned around you!";
				Msgparam = new Param1<string>( strMessage );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}

			case "/tpc":
			{
				vector tpPos = cData.ToVector();
				vector fixPlayerPos;
				fixPlayerPos[0] = tpPos[0];
				fixPlayerPos[2] = tpPos[2];

				fixPlayerPos = SnapToGround( fixPlayerPos );
				Admin.SetPosition(fixPlayerPos);

				strMessage = "Teleported to:: " + tpPos;
				Msgparam = new Param1<string>( strMessage );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}

			case "/ammo":
			{
			EntityAI CurrentWeapon = Admin.GetHumanInventory().GetEntityInHands();
			if( CurrentWeapon )
				{
					CurrentWeapon.SetHealth( CurrentWeapon.GetMaxHealth( "", "" ) );
					Magazine foundMag = ( Magazine ) CurrentWeapon.GetAttachmentByConfigTypeName( "DefaultMagazine" );
					if( foundMag && foundMag.IsMagazine())
					{
						foundMag.ServerSetAmmoMax();
					}
														
					Object Suppressor = ( Object ) CurrentWeapon.GetAttachmentByConfigTypeName( "SuppressorBase" );
					if( Suppressor )
					{
						Suppressor.SetHealth( Suppressor.GetMaxHealth( "", "" ) );
					}
					string displayName = CurrentWeapon.ConfigGetString("displayName");

					Msgparam = new Param1<string>( "Weapon " + displayName + "Reloaded and Repaired" );
					GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				}
			break;
			}

			case "/freecam":
			{
				 PlayerBase pBody = Admin;

				 if (m_FreeCamera)
					{
						GetGame().SelectPlayer(Admin.GetIdentity(), pBody);
						m_FreeCamera = false;
						Msgparam = new Param1<string>( "Exiting FreeCam!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
					}
					else
					{
						GetGame().SelectPlayer(Admin.GetIdentity(), NULL);
						GetGame().SelectSpectator(Admin.GetIdentity(), "freedebugcamera", Admin.GetPosition());
						m_FreeCamera = true;
						Msgparam = new Param1<string>( "FreeCam Spawned!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
					}
			break;
			}

			case "/debug":
			{
				  if (m_IsDebugRunning)
					 {
						Msgparam = new Param1<string>( "DeBug Monitor (Status Monitor) Disabled!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
						GetGame().SetDebugMonitorEnabled(0);
						m_IsDebugRunning = false;
					 }
					 else
					 {
						Msgparam = new Param1<string>( "DeBug Monitor (Status Monitor) Enabled!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
						GetGame().SetDebugMonitorEnabled(1);
						m_IsDebugRunning = true;
					 }
			break;
			}

			case "/nighttime":
			{
				GetGame().GetWorld().SetDate( 1988, 9, 23, 22, 0 );
				Msgparam = new Param1<string>( "NIGHT TIME!!" );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}

			case "/daytime":
			{
				GetGame().GetWorld().SetDate( 1988, 5, 23, 12, 0 );
				Msgparam = new Param1<string>( "DAY TIME!!" );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}

			/*case "/godmode":
			{
				string GmodeCheck;
				GUID = AdminUID;
				g_Game.GetProfileString("SafeZoneStatus"+GUID,GmodeCheck);
				if (GmodeCheck == "true")
				   {
						g_Game.SetProfileString("SafeZoneStatus"+GUID,"false");
						Msgparam = new Param1<string>( "God Mode DISABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }
				   else
				   {
						g_Game.SetProfileString("SafeZoneStatus"+GUID,"true");
						Msgparam = new Param1<string>( "God Mode ENABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }

			break;
			}
			*/
			case "/heal":
			{
				 Msgparam = new Param1<string>( "Player Healed!" );
				 GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				 Admin.SetHealth( Admin.GetMaxHealth( "", "" ) );
				 Admin.SetHealth( "","Blood", Admin.GetMaxHealth( "", "Blood" ) );
			break;
			}

			case "/kill":
			{
				  Admin.SetHealth(0);
			break;
			}
												
			case "/tpalltome":
			{
				 int tpCount = TeleportAllPlayersTo(Admin);
				 string msgc = "All " + tpCount.ToString() + " Players Teleported to my POS!";
				 Msgparam = new Param1<string>( msgc );
				 GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}
												
			case "/killall":
			{
				for ( int ig = 0; ig < players.Count(); ++ig )
				{
					PlayerBase Target = players.Get(ig);
					if ( Target.GetIdentity() != AdminIdentity )
					{
						Target.SetHealth(0);						
					}
				}
			break;
			}
			
			case "/spawncar":
			{
				EntityAI MyV3S;
				vector NewPosition;
				vector OldPosition;
				OldPosition = Admin.GetPosition();
				NewPosition[0] = OldPosition[0] + 1.5;
				NewPosition[1] = OldPosition[1] + 0.2;
				NewPosition[2] = OldPosition[2] + 1.5;
				MyV3S = GetGame().CreateObject( "OffroadHatchback", NewPosition, false, true, true );		            
				MyV3S.GetInventory().CreateAttachment("HatchbackHood");
				MyV3S.GetInventory().CreateAttachment("HatchbackTrunk");
				MyV3S.GetInventory().CreateAttachment("HatchbackDoors_CoDriver");
				MyV3S.GetInventory().CreateAttachment("HatchbackWheel");
				MyV3S.GetInventory().CreateAttachment("HatchbackWheel");
				MyV3S.GetInventory().CreateAttachment("HatchbackWheel");
				MyV3S.GetInventory().CreateAttachment("HatchbackWheel");
				MyV3S.GetInventory().CreateAttachment("SparkPlug");
				MyV3S.GetInventory().CreateAttachment("EngineBelt");
				MyV3S.GetInventory().CreateAttachment("CarBattery");
				auto carfluids = Car.Cast( MyV3S );
				carfluids.Fill( CarFluid.FUEL, 1000 );
				carfluids.Fill( CarFluid.OIL, 1000 );
				carfluids.Fill( CarFluid.BRAKE, 1000 );
				carfluids.Fill( CarFluid.COOLANT, 1000 );
				break;
			break;
			}

			default:
			{
				Msgparam = new Param1<string>( "Error: The following command is Unknown." );
				GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
			break;
			}
		}
	}
}

или поместить готовый файл

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

5. Рядом с файлом разместить 2 следующих файла:

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

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

Заполнять их аналогично примеру. Папку чтения этих файлов можно сменить, см ниже.

6. В строках

protected string Dir_Locations_Configs = "$CurrentDir:\\mpmissions\\dayzOffline.chernarusplus\\Scripts\\AdminTool\\";
	protected string FileName_AdminList = "Admins.txt";
	protected string FileName_TPLocationsList = "Locations_TP.txt";
	protected bool Enable_check_nickNames_Admin = false;

Написаны мини-настроечки. 'Dir_Locations_Configs' - папка расположения 2-х текстовых файлов с вашими настройками. Это может быть относительный путь, как в примере, либо абсолютный путь, например

protected string Dir_Locations_Configs = "C:\\DayZ_Server\\AdminTool\\";

В 'FileName_AdminList' и 'FileName_TPLocationsList' соответственно указаны имена файлов с настройками UID и локаций для телепорта. Примеры файлов выше были даны.

В 'Enable_check_nickNames_Admin' параметр точной проверки ника к добавленному UID в файл с админами. 'true' - включен, 'false' - выключен.
7. Запускаем сервер и радуемся. Авторизуемся через '#login {пароль админа сервера}' в чате и используем команды.

 

Для совсем уж рукожопов, миссия сервера с админкой:

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

P.S. Команды видны всем игрокам!
P.P.S. Список комманд вынесет в функции Init класса админки, а их действия внизу файла в отдельной функции для простоты добавления своих комманд и их редактирования.

 

Ну и для желающих годмод, так сказать мини-дополнение:

1. Ставим все как и выше.

2. Распаковываем в корень сервера папку из архива:

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

3. В параметры запуска сервера добавляем -mod=ModdedScripts

4. В файле 'AdminTool_functions.c' меняем

/*case "/godmode":
			{
				string GmodeCheck;
				GUID = AdminUID;
				g_Game.GetProfileString("SafeZoneStatus"+GUID,GmodeCheck);
				if (GmodeCheck == "true")
				   {
						g_Game.SetProfileString("SafeZoneStatus"+GUID,"false");
						Msgparam = new Param1<string>( "God Mode DISABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }
				   else
				   {
						g_Game.SetProfileString("SafeZoneStatus"+GUID,"true");
						Msgparam = new Param1<string>( "God Mode ENABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }

			break;
			}
			*/

на

case "/godmode":
			{
				string GmodeCheck;
				GUID = AdminUID;
				g_Game.GetProfileString("GodModeEnabledFor:"+GUID,GmodeCheck);
				if (GmodeCheck == "true")
				   {
						g_Game.SetProfileString("GodModeEnabledFor:"+GUID,"false");
						Msgparam = new Param1<string>( "God Mode DISABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }
				   else
				   {
						g_Game.SetProfileString("GodModeEnabledFor:"+GUID,"true");
						Msgparam = new Param1<string>( "God Mode ENABLED!" );
						GetGame().RPCSingleParam(Admin, ERPCs.RPC_USER_ACTION_MESSAGE, Msgparam, true, AdminIdentity);
				   }

			break;
			}
			

P.S. Если у вас в корне сервера лежала папка scripts и она читалась сервером, после этого она может перестать считываться!

 

 

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

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


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

Ранее задавал вопрос.

У меня 2 сервера,  устанавливал ранее эту стоковую админку. и игрок перезаходил с одного сервера на другой со своим лутом. 

но эта админка мне не нужна, или можно и с ней, но чтобы работала корректно. 

подскажите, как настроить общую базу данный на двух серверах. 

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

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


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

belenkiy2 от админки это не зависит. Сервера официально не поддерживают более 1 сервера на 1 базу данных.

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


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

belenkiy2 от админки это не зависит. Сервера официально не поддерживают более 1 сервера на 1 базу данных.

я не согласен с предупреждением. 

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

вы не правы. вечером проверю еще раз и запишу видео, специально для Вас. 

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


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

Кстати вроде нашел почему у мну чат  в админке не чистился

Как бы проверить

У нас цод где мои сервачки внутренние крутились вырублен на профилактику (((

смогу проверить вечером 

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


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

я не согласен с предупреждением. 

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

вы не правы. вечером проверю еще раз и запишу видео, специально для Вас. 

и каким образом это связано с темой данного обсуждения темы? Не, ну серьезно, тема про админку дэйза, вопросы про общего персонажа между серверами. Предупреждение у вас именно за оффтоп, т.е. за сообщение, не относящееся к тематике обсуждаемой темы в данном разделе. Для подобного рода вопросов есть спец. раздел помощи на форуме, ну или на худой конец темы с гайдами по созданию сервера.

А то что вы нашли способ объединить 2 сервера в одну базу персонажей - так никто и не спорит, что реально это сделать, но с тематикой именно данной темы на форуме это никак не связано.

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


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

и каким образом это связано с темой данного обсуждения темы? Не, ну серьезно, тема про админку дэйза, вопросы про общего персонажа между серверами. Предупреждение у вас именно за оффтоп, т.е. за сообщение, не относящееся к тематике обсуждаемой темы в данном разделе. Для подобного рода вопросов есть спец. раздел помощи на форуме, ну или на худой конец темы с гайдами по созданию сервера.

А то что вы нашли способ объединить 2 сервера в одну базу персонажей - так никто и не спорит, что реально это сделать, но с тематикой именно данной темы на форуме это никак не связано.

Я не хочу вступать в полемику к какой теме относится мой вопрос. 

Я человек простой, объединение  произошло при установке этой админки на оба сервера , я и написал в тему про эту админку. все. 

Если кто знает как сделать, подскажите. спасибо. 

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


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

belenkiy2 хорошо, допустим, произошло объединение. Объясните тогда как именно вы устанавливали эти 2 сервера, что у вас такое объединение произошло, может тогда мы с вами и найдем то, как у вас это получилось.

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


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

belenkiy2 хорошо, допустим, произошло объединение. Объясните тогда как именно вы устанавливали эти 2 сервера, что у вас такое объединение произошло, может тогда мы с вами и найдем то, как у вас это получилось.

так а все просто. 

2 разных сера запустил на одной машине. один IP разные порты. 

запускаю с батника. все. 

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


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

belenkiy2 а остальные параметры запуска сервера, конфиг сервера и миссия сервера те же? Есть какое-то отличие между ними?

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


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

belenkiy2 а остальные параметры запуска сервера, конфиг сервера и миссия сервера те же? Есть какое-то отличие между ними?

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

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


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

belenkiy2 тогда понятно почему работает. Делаете 2 сервера. Конфиги сервера и прочее до лампочки. Главное чтобыplayers.db в storage обоих миссий соответствовал, т.е. был один и тот же файл (символьными ссылками (симлинк) можно объединить 2 файла в 2 папках в 1 файл). Работать это будет. Без нареканий? Разумеется нет, изредка (очень) будет возникать проблема что либо база данных блокирована, и сервер либо запустится, но персонажи не будут загружаться и сохраняться, о чем будет писать в чате, либо не запустится и уйдет в краш, или на сервер не пустит с причиной database is locked. Повторяю, именно изредка, т.к. сам такое уже практиковал. И не советую более 2 серверов так объединять, так как официально, как уже ранее писал, такое не поддерживается вообще.

И разумеется, с темой обсуждения в данном обсуждении форума это не связано, т.к. это чисто общесерверная тема, и не более того. Впрочем, корректность моих действий товарищу Таурену судить.

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


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

belenkiy2 тогда понятно почему работает. Делаете 2 сервера. Конфиги сервера и прочее до лампочки. Главное чтобыplayers.db в storage обоих миссий соответствовал, т.е. был один и тот же файл (символьными ссылками (симлинк) можно объединить 2 файла в 2 папках в 1 файл). Работать это будет. Без нареканий? Разумеется нет, изредка (очень) будет возникать проблема что либо база данных блокирована, и сервер либо запустится, но персонажи не будут загружаться и сохраняться, о чем будет писать в чате, либо не запустится и уйдет в краш, или на сервер не пустит с причиной database is locked. Повторяю, именно изредка, т.к. сам такое уже практиковал. И не советую более 2 серверов так объединять, так как официально, как уже ранее писал, такое не поддерживается вообще.

И разумеется, с темой обсуждения в данном обсуждении форума это не связано, т.к. это чисто общесерверная тема, и не более того. Впрочем, корректность моих действий товарищу Таурену судить.

можно объединить 2 файла в 2 папках в 1 файл).  я не объединял 2 в 1.

как это сделать? 

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


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

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

Ну так сделай два разных сервера, чтобы БД не путалась.

Сделай внутри mpmission две разных папки. И в батниках пути разные укажи.

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


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

NoNameUltima достаточно тупо инстанс помеять в конфиге сервера по сути)

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

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


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

123new Сервера можно подключить к своей mysql базе

и все будет храниться в ней

и к ней можно подключить несколько серверов

функционал такой в движке точно есть

 

но вот как это реализовать - фиг знает

 

P.S.

class Hive
{
 proto native void InitOnline( string host = "" );
 proto native void InitOffline();
 proto native void InitSandbox();

 proto native void SetShardID( string shard );
 proto native void SetEnviroment( string env );

 proto native void CharacterSave( Man player );
 proto native void CharacterKill( Man player );
 proto native void CharacterExit( Man player );

 proto native void CallUpdater( string content );
 
};

proto native Hive CreateHive();
proto native void DestroyHive();
proto native Hive GetHive();

 

 

Если кто-то делал такое для 0.62, то с большой долей вероятности в 0.63 аналогично

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

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


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

BorizzK проблема в том, что для InitOnline необходимо иметь наверняка не только саму mysql бд, но и либо какие-то файлы в web-доступе для обработки запросов игры, либо\и\или конфиги сервера. Т.е. априори все не так просто. И это сделать на 63 пока никому не удалось полноценно. Сомневаюсь, что на 63 стало это проще. И если это не реализуют, возможно, это не готово еще. Ну или не для privatehive)

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


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

123new Мне кажется надо задать вопрос богемии насчет неск серверов к одной хиве

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


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

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

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


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

DimitriPokki Ну как бы вроде и лут на персе сохраняется при переходе с одного паблик на другой

Но! Если в течение 3х минут поменять 3 сервера лут на персе обнуляется

Посему между прыжками с сервера на сервер надо выдерживать паузу минуты по 3

Но это оф-паблики которые подключены к общей куче (hive)

 

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


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

BorizzK так уже задавал кто-то это при релизе на стабилку. Ответ был прост - официально private hive не поддерживает более 1 сервера. А вот будет ли поддержка нескольких серверов на 1 hive не сказано.

 

DimitriPokki так а большего и не нужно)

BorizzK у оф. public hive как раз скорее всего и есть бд на основе тех функций, что ты скидывал) А баг этот думаю лишь временный. Впрочем, сделать свою систему сохранения персонажа реально, правда это больше гемор и костыль, чем решение назойливой проблемы. Да и сохранять все по полочкам как в оф системе правильно и на тех же местах довольно не простая задача.

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

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


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

Хм.. Бреда ради — можно попробовать "жесткую ссылку" на файл.. NTFS это поддерживает.. Всё зависит от того, как сервер работает с файлом.. Если в "эксклюзивном" режиме и держит его в lock, то второй сервер просто не запустится..

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

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


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

Господа, я все понимаю, но давайте уже прекратим наш точечный флуд на тему серверостроения и общей базы данных между серверами, и начнем это писать в соответствующих на то темах?

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


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

EvGeNu4 Поставил админку. Захожу с команды #login пароль, дальше не какие команды не работают

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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

Поддержка