Мутатор размещения объектов на карте перед запуском

Тема в разделе "Общего назначения", создана пользователем Flame, 10 май 2016.

Метки:
  1. Flame

    Flame -Заслуженый кодер форума-

    Понадобилось мне разместить танки на 9 мая на разных картах
    Накидал мутатор
    Но потом прикинул - можно ж размещать что угодно с таким же успехом
    Пушки, патроны, какие то статики облечённые в actor и т.д.

    В общем мутатор для тех, кому лень размещать объекты в редакторе на карте и кто хочет обойтись размещением с помощью кода
    Я не помню выкладывал ли я или ещё кто подобный мутатор - поэтому если что, пните меня

    ini файл:
    Тут всё просто
    Задаётся массив, а элементами массива являются Карта, Объект который мы хотим разместить, Положение на карте, Поворот объекта
    Например,
    Код:
    MapsAndItemsList=(Map="KF-MountainPass",Item="IS2Tank.IS2Tank",Location=(X=3522.000000,Y=2478.000000,Z=56.000000),Rotation=(Pitch=0,Yaw=0,Roll=0))
    
    Здесь
    Map = название rom файла
    Item = строка представляющая собой полный путь до размещаемого объекта
    Location = координаты объекта на карте
    Rotation = "повёрнутость" объекта
    Алгоритм заполнения ini:
    В мутатор добавлена пара команд
    mutate loc - позволяет определить текущие координаты тела игрока или в режиме наблюдения координаты наблюдателя
    mutate rot - позволяет определить текущий поворот тела игрока или в режиме наблюдения поворот наблюдателя

    То есть заходим на карту, находим подходящее место для размещения объекта, забиваем эти команды в консоль и записываем на бумажке координаты и поворот
    Потом открываем ini файл и забиваем это туда. Теперь при старте карты эти объекты будут размещены по данным координатам
    Пример:
    [​IMG]
    Код:
    Код:
    class PlaceItemsOnMapMut extends Mutator config(PlaceItemsOnMapMut);
    
    var string URL;
    
    struct MapsAndItems
    {
    	var config string Map;
    	var config string Item;
    	var config vector Location;
    	var config rotator Rotation;
    };
    var config array<MapsAndItems> MapsAndItemsList;
    
    function PostBeginPlay()
    {
    	SaveConfig();
    	URL=GetShortUrl(Level.GetLocalURL());
    	PlaceItems();
    }
    
    function Mutate(string Command, PlayerController Sender)
    {
    	if(Command~="Loc")
    	{
    		if(Sender.Pawn!=none)
    		{
    			Log("My Location:"@int(Sender.Pawn.Location.X)@int(Sender.Pawn.Location.Y)@int(Sender.Pawn.Location.Z));
    			Sender.ClientMessage("My Location:"@int(Sender.Pawn.Location.X)@int(Sender.Pawn.Location.Y)@int(Sender.Pawn.Location.Z));
    		}
    		else
    		{
    			Log("My Location:"@int(Sender.Location.X)@int(Sender.Location.Y)@int(Sender.Location.Z));
    			Sender.ClientMessage("My Location:"@int(Sender.Location.X)@int(Sender.Location.Y)@int(Sender.Location.Z));
    		}
    	}
    	if(Command~="Rot")
    	{
    		if(Sender.Pawn!=none)
    		{
    			Log("My Rotation:"@Sender.Pawn.Rotation);
    			Sender.ClientMessage("My Rotation:"@Sender.Pawn.Rotation);
    		}
    		else
    		{
    			Log("My Rotation:"@Sender.Rotation);
    			Sender.ClientMessage("My Rotation:"@Sender.Rotation);
    		}
    	}
    	if ( NextMutator != None )
    		NextMutator.Mutate(Command, Sender);
    }
    
    function PlaceItems()
    {
    	local int i;
    	local class<Actor> aClass;
    
    	for(i=0;i<MapsAndItemsList.Length;i++)
    	{
    		if(URL~=MapsAndItemsList[i].Map)
    		{
    			aClass = class<Actor>(DynamicLoadObject(MapsAndItemsList[i].Item, class'Class'));
    			if(aClass!=none)
    			{
    				Spawn(aClass,,,MapsAndItemsList[i].Location,MapsAndItemsList[i].Rotation);
    			}
    		}
    	}
    }
    
    function string GetShortUrl(string s)
    {
    	local int qPos, slashPos, startPos;
    	local string result;
    	qPos=InStr(s,"?");
    	slashPos=InStr(s,"/");
    	startPos=Max(slashPos, 0);
    	result=Mid(s, startPos+1, qPos-startPos-1);
    	return result;
    }
    
    defaultproperties
    {
    	MapsAndItemsList=(Map="KF-MountainPass",Item="IS2Tank.IS2Tank",Location=(X=3522,Y=2478,Z=56),Rotation=(Pitch=0,Yaw=0,Roll=0))
    	bAddToServerPackages=True
    	GroupName="KF-PlaceItemsOnMap"
    	FriendlyName="PlaceItemsOnMapMut"
    	Description="PlaceItemsOnMapMut"
    }
    
    Ссылка 1 или Ссылка 2

    Ну и раз я поднял тему танков - размещу танк IS2. В старой теме про танки. Тем более вытащил ему внутренний интерьер от 1 лица из Red Orcestra.
    Позже я накидаю ещё десяток танков из RO в ту же тему

    upd. (2016.05.10 11:46) Забыл сделать вывод результатов команд mutate на экран)
     
    Фрэгл, Stein, HATAXA и 3 другим нравится это.
  2. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Он сделал это ! Я дождался
    [​IMG]

    "мутатор для тех, кому лень размещать объекты в редакторе на карте" - мутатор, чтобы не менять карту физически, но менять геймплей на ней, или фиксить лазейки.
    3 года, как положено ? :laugh:

    Наверное, какой-то справочник по объектам будет полезен тем, кто в маппинге не разбирается, а с серверами дело имеет
     
  3. Flame

    Flame -Заслуженый кодер форума-

    :smile:
    Дак надо было напомнить) Мутатор же - 2 строчки
    А про объекты, которые можно размещать - придумаю может какой справочник
    Но ты бы написал хотя бы мини списочек, какие объекты стоит туда включить)

    В принципе я хотел статейку накидать, как создать актёра, прицепить к нему статик меш или скелетал меш
    Чтобы можно было на карте всякие меши расставлять, грузовики и прочий мусор)
    Как раз один мутатор сейчас делаю
     
  4. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Думаю, программа-минимум - это какие-то бочки-ящики.
    Чтобы блочить точки.
    Но для разнообразия лучше хотя бы ещё несколько "стандартных" объектов.

    Несколько вопросов :

    - Объекты неподвижные, можно сдвинуть или свойство задаётся ?
    (на некоторых картах - arcade_action, arcade_shopping есть бочки, которые можно двигать)

    - Можно ли спавнить живых мобов ?
    (Как, например, раньше на карте meow_remix_JIadya - при старте карту уже бродили мобы, даже ФП)

    - Как ведут себя мобы при встрече с объектом ?
    (можно ли создать разрушаемый мобами объект ?)
     
  5. Flame

    Flame -Заслуженый кодер форума-

    - Да, либо свойство какое, либо можно тупо какой сложный объект с анимацией сделать
    - Да
    - Да, можно создать разрушаемый объект

    Если сложный объект, то 1 и 3 пункты нетривиальные
     
    Последнее редактирование: 23 окт 2016
    Фрэгл и ЛОХМАТЫЙ нравится это.
  6. BAHO

    BAHO Fresh Meat

    Хорошая штуковина.
     
  7. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    0) Для блокировки багов ещё могут понадобиться мелкие предметы - просто, чтобы игрокам было не пролезть.
    И какие-то части забора - чтобы перекрытие участка вписывалось в игру, а не выглядело посторонней "заплаткой".
    3) Не подумал сам. Если объект будет прямо между игроком и мобом - мобы будут тупить, как на картах, которые я и указал ( arcade_action, arcade_shopping).

    2) И это будут прям настоящие всамделишные живые мобы ? Которые будут бегать за игроками ?
    Тогда вопрос - они будут спавниться каждую волну или 1 раз при старте карты ?
    Или это опционально ?
     
  8. Flame

    Flame -Заслуженый кодер форума-

    Настоящие) Только жизней у них будет как будто играет 1 игрок - они же появляются до появления игроков.
    Спавниться они будут при старте карты. И пока игроки их не перебьют - 1 волна не начнётся.

    Можно сделать и каждую волну, но только это мутатор с другой идеологией и реализацией. Да и нафик эт надо)
     
  9. ЛОХМАТЫЙ

    ЛОХМАТЫЙ •*´¨`*•.,¸¸,.•*´¨`*•.,¸¸,.•*´¨`*•

    Особенно весело, когда игроки уровня "спавнюсь без штанов" на meow_remix_JIadya натыкались в самом начале игры на флешек :laugh:

    Если развивать идею "фикс карт и попытки улучшения геймплея" - то этот мутатор хорошо совместить с тем, который убирает предметы и двери (только не все подряд, а указанные)
     
  10. Pepsiman

    Pepsiman Новенький

    hi bro u have all tanks? jp kf-normad-server many tanks use

    vehicle tanks version who make?? i old see jp hiyoko server admin tank spawn

    i dont remember tank name