???
Математика на уровне МГУ

Показано с 1 по 10 из 10

Тема: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

  1. #1
    Заявка на ПМЖ Аватар для =Svogris=Kranz
    Регистрация
    11.04.2012
    Возраст
    54
    Сообщений
    43

    Unhappy Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Камрады програмисты! Если вам не трудно уважте: напишите стандартные скриптики для определённых сценарных ситуёвин (и обьяснялки типа "чтобы и дурак понял" к этим скриптикам). Для таких опоссумов в програмировании, вроде меня. Тут ведь вот в чём дело: полазал я по этой ветке, честно и самонадеянно пытаясь разобраться - и преждевременно поседел... И образцы миссий скачивал, и смотрел что там в редакторе скриптов имеется, и с бубном плясал... Нифига не помогает. Как не понимал нихрена, так и... Вот к примеру, по замыслу у мну в миссии должно произойти следующее: группа вылетает на патрулирование, в ходе которого уничтожает вражеского разведчика. Но тот, по сценарию , успевает вызвать своих ястребов, которые приходят и жёстко мстят за сбитого бомбера. Ну, ясно дело, всё вроде элементарно - гибель разведчика становится триггером, который включает зарождение мстительных асов-истребителей. Ага, думаю я себе и чтобы разобраться на живом примере лезу в миссию, выложенную Маленькой Пчёлкой (респект, кстати, парню!). И первое, во что я упираюсь - это, тупо, отсутствие триггеров в редакторе скриптов... То-есть я понимаю, что у него в показательной миссии триггеры не нужны, поскольку там триггером является уничтожение вражеской группы, которая всего одна. И когда на карте не остаётся ни одного противника, тут скрипт и срабатывает, порождая следующую группу. Ну а у меня-то вражин две группы ! Одна - бобёр-разведчик, а вторая - прикрывающая его пара ястребов... А зародиться должна более другая группа истребителей, ибо в прикрытии (по сценарию) лохи, колторые поджлежат попутному истреблению вместе с разведчиком...
    В общем, ребята, если вам не трудно, ну напишите несколько стандартных скриптов для таких ситуёвин, как:
    1) зарождение некой группы после уничтожения воздушной цели;
    2) зарождение некой группы после уничтожения наземной цели;
    3) зарождение некой группы после прохождения игроком или юнитом определённой точки на карте;
    4) зарождение некой группы по истечению определённого временного интервала;
    Ну и разумеется, осветите такие аспекты, как пошаговость действий. Ну, вроде: Выбираем группу, щёлкаем редактор скрипта, назначаем триггер, и присваеваем ему значение (и каким, кстати, образом мы должны указать это значение, чтобы программа связала триггер с нужным нам действом), запускающее то-то и то-то...
    Ведь все эти варианты присутствуют в списке триггеров скриптового редактора. Но использовать их могут только те, кто шарит в С#... Абыдно!
    Выручайте, пожалуйста)))!!!!!

  2. #2
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    40
    Сообщений
    4,245

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    Камрады програмисты! Если вам не трудно уважте: напишите стандартные скриптики для определённых сценарных ситуёвин (и обьяснялки типа "чтобы и дурак понял" к этим скриптикам).
    Пока кратко попробую. Нужно помаленьку осваивать основы самого c#, я начинал наоборот с БОБа и постепенно на сайте MS и здесь(задавая простые довольно вопросы, спасибо за терпение отвечавшим ) сам язык(он сравнительно простой, логичный и красивый на самом деле, особенно для скриптов). Я и сейчас помаленьку копаюсь в нем, программку первую осознанную начал лепить. Вот здесь неплохое руководство на английском - http://www.homeandlearn.co.uk/csharp/csharp.html. Написать универсальные скрипты практически невозможно, всегда будут варианты. Проще все-таки понять суть - кирпичики, из которых можно будет собрать нужное решение(из этих кирпичиков можно будет потом составлять логику миссий любой сложности). В твоем случае это:

    1. Зарождение группы самолетов по условию.
    2. Условие, при котором они зарождаются (уничтожение разведчика, хотя может быть любое другое - вэйпоинт, таймер).

    Триггеры я не использовал, т.к. они глючат и работают плохо, хотя их можно также отслеживать в скрипте. В Вики есть уроки на эту тему.
    Если нет - скачать удобные, бесплатные и полезные программы. Это обязательно, иначе будут лишние вопросы и мучения - ссылка ниже (Visual Studio 2010 Express-предпочтительней или SharpDevelop 4.1-на крайний случай) и подключить к ним библиотеки игры - http://forum.1cpublishing.eu/showthread.php?t=28997.
    Там содержатся все доступные методы/классы.
    Для редактирования брифингов и быстрой правки скриптов лучше использовать бесплатный текстовый редактор Notepad++.

    Начинаем допустим с этого:

    Код:
    using System;
    using maddox.game;
    using maddox.game.world;
    public class Mission : AMission 
    {
       public override void OnBattleStarted()
       {
           base.OnBattleStarted();
           MissionNumberListener = -1;
        }
    }
    Сначала создаем в папке missions(там же, гда лежат папки со стандартными миссиями Single и Dogfight) папку TEST, там будут храниться все миссии для опытов. Можно в ней же размещать другие папки(их даже можно создавать из скриптов, как и файлы миссий, текстовые файлы и т.п. для хранения сэйвов, параметров, статистики и т.д.). Допустим загружаем разведчик из подмиссии razvedchik.mis, используем метод OnActorDead для определения живы юниты или нет(здесь используется определение по номеру подмиссии, армии. Можно сохранять рожденные группы в списке и определять по нему, варианты разные могут быть. Здесь вариант именно с подмиссией. При уничтожении юнита - появится сообщение(потом можно добавить код для вызова рождения группы).

    Код:
    // Указываем нэймспэйсы - namespace, тут есть лишние, не могу без игры определить нужные
    using System;
    using System.IO;
    using System.Collections;
    using System.Collections.Generic;
    using System.Diagnostics;
    using maddox.game;
    using maddox.game.world;
    using maddox.GP;
    // далее идет код миссии
    
    public class Mission : AMission
    {
        public override void OnBattleStarted() //этод метод срабатывает после старта мисссии
        {
            base.OnBattleStarted();
            MissionNumberListener = -1;
            GamePlay.gpPostMissionLoad("missions\\TEST\\razvedchik.mis"); //01 подмиссия с разведчиком
        }
    
        public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages) //этод метод срабатывает после смерти любого юнита
        {
            base.OnActorDead(missionNumber, shortName, actor, damages);
            //сначала фильтруем сообщения о трупиках и проверяем на null, если все условия выполняютс, т.е. актор и есть тот самый разведчик - предпринимаем какие-либо действия
    
            if (actor != null) //проверка на null
            {
                //AiAircraft STATISTIC
                if (actor is AiAircraft) //проверяем самолет ли убитый актор
                {
                    if (missionNumber == 1) //проверяем из какой подмиссии убитый юнит(подмиссия номер 1). С номером ноль - главная миссия, хост-миссия которую мы запускаем.
                    {
                        AiAircraft aircraft = (actor as AiAircraft); 
                        if (aircraft != null)  //проверяем на null
                        {
    
                            if (aircraft.Army() == 1) //проверяем армию актора, 1 или 2
                            {                            
                                GamePlay.gpHUDLogCenter("Внимание! Разведчик уничтожен!"); //выводим сообщение о сбитом разведчике
                                GamePlay.gpPostMissionLoad("missions\\TEST\\patrol.mis"); // здесь вызываем рождение группы самолетов, например грузим подмиссию
                               
                            }
                        }
                    }
                }
            }//null
        }
    }
    После определения армии можно встроить определения типа(бомбер, истребитель, эсминец, танкер и т.д) или имя объекта(кажется совпадает с названием в файле миссии, точно не помню). Типы есть здесь и в архиве от Атаса. Здесь уже без игры не смогу сказать, но это все есть в подключаемых .dll. Условие будет похоже на это:
    Код:
    if (groundActor.Type() == AiGroundActorType.Tank)
      {
           GamePlay.gpHUDLogCenter("Внимание! Танк уничтожен!"); //выводим сообщение
      }
    В случае имени объекта будет кажется так: groundActor.Name()
    Крайний раз редактировалось podvoxx; 23.04.2012 в 12:08.

  3. #3
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    45
    Сообщений
    6,905
    Images
    51

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    В данном случае всё-же проще использовать триггеры, без скриптов, пример - trigger_sample.zip . Разведчик (He-115 ) прикрывается парой 109Е-1 новичков, атакуют его 3 спита(один из них игрока), после уничтожения разведчика, "вызываются" 4 109Е-4 опытных, которые нападают на спитов. Как сделано: сначала обычным образом расставлены группы самолётов и их действия - прикрышка, атака и т.д. Для группы появляющейся по триггеру, не забываем ставить галочку "рождение скриптом" - это значит, что пока не выполнится действие, группа не "родится". Потом выбираем триггеры, создаём новый с типом GroupDestroy и справа по кнопочке "выбрать группу" выбираем нашего "разведчика". Когда выбранный самолёт будет уничтожен - триггер сработает. Далее надо чтобы по срабатыванию триггера родилась новая группа. Копируем название триггера(в примере оно "оригинальное" - "trigger" ) и создаём в соседней вкладке экшн с таким же названием - этот экшн выполниться по срабатыванию триггера. В свойствах экшна выбираем рождение группы и по кнопке "выбрать группу" - выбираем группу "мстителей". Сохраняем всё, запускаем. При уничтожении "разведчика" срабатывает триггер и запускает экшн рождающий новую группу, они прилетают и пытаются отомстить спитам.

    Скрипты в такого рода миссиях не нужны особо - с ними получится сложнее и дольше, их стоит применять для более нетривиальных сцен.
    Don't happy, be worry

  4. #4
    Заявка на ПМЖ Аватар для =Svogris=Kranz
    Регистрация
    11.04.2012
    Возраст
    54
    Сообщений
    43

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от naryv Посмотреть сообщение
    В данном случае всё-же проще использовать триггеры, без скриптов...
    Скрипты в такого рода миссиях не нужны особо - с ними получится сложнее и дольше, их стоит применять для более нетривиальных сцен.
    Спасибо, naryv! Посмотрел твою миссию, выставил всё также у себя и обрадовался - заработало! Но потом пришла печалька - осмелев попробовал-было добавить ещё один триггер и обломался . Первый - продолжает срабатывать и запускает рождение "мстителей", а вот второй - не срабатывает... удаляю первый - второй начинает работать... Может конечно я чёй-то напахал, но вроде делал всё правильно... А ты не пробовал два триггера в миссию засунуть? Получалось? Или это у Бобки такая особенность?

    2 podvoxx. Спасибо, камрад! Попробую разобраться. И то верно, в самом деле - XXI Век на дворе, а я дуб дубом)))! Ежели чё - буду к тебе за советом обращаться, ладно?

  5. #5
    hehehe 111 Аватар для podvoxx
    Регистрация
    25.08.2008
    Адрес
    Барнаул - Питер
    Возраст
    40
    Сообщений
    4,245

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    2 podvoxx. Спасибо, камрад! Попробую разобраться. И то верно, в самом деле - XXI Век на дворе, а я дуб дубом)))! Ежели чё - буду к тебе за советом обращаться, ладно?
    Конечно)

  6. #6
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    45
    Сообщений
    6,905
    Images
    51

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    Спасибо, naryv! Посмотрел твою миссию, выставил всё также у себя и обрадовался - заработало! Но потом пришла печалька - осмелев попробовал-было добавить ещё один триггер и обломался . Первый - продолжает срабатывать и запускает рождение "мстителей", а вот второй - не срабатывает... удаляю первый - второй начинает работать... Может конечно я чёй-то напахал, но вроде делал всё правильно... А ты не пробовал два триггера в миссию засунуть? Получалось? Или это у Бобки такая особенность?
    конечно, два триггера работают - второй пример : trigger_sample2.zip добавлена группа 110-х, которая появляется при уничтожении прикрышки разведчика(оставил один Е1, чтобы побыстрее его сбить ) . Вы, скорее всего, добавив второй триггер не сделали экшн который должен запуститься по срабатыванию второго триггера, либо не назвали его так-же как этот второй триггер, а по умолчанию есть жёсткая связь - по срабатыванию триггера запускается экшн одноимённый со сработавшим триггером, это важно помнить. Если экшна одноимённого с триггером нет, ничего и не сработает .
    Don't happy, be worry

  7. #7
    Заявка на ПМЖ Аватар для =Svogris=Kranz
    Регистрация
    11.04.2012
    Возраст
    54
    Сообщений
    43

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от naryv Посмотреть сообщение
    конечно, два триггера работают - второй пример : trigger_sample2.zip добавлена группа 110-х, которая появляется при уничтожении прикрышки разведчика(оставил один Е1, чтобы побыстрее его сбить ) . Вы, скорее всего, добавив второй триггер не сделали экшн который должен запуститься по срабатыванию второго триггера, либо не назвали его так-же как этот второй триггер, а по умолчанию есть жёсткая связь - по срабатыванию триггера запускается экшн одноимённый со сработавшим триггером, это важно помнить. Если экшна одноимённого с триггером нет, ничего и не сработает .
    Да вроде сделал экшн и обозвал его также как триггер - "trigger_1" (без кавычек, разумеется), но видимо что-то всё-равно напутал . Сейчас буду изучать trigger_sample2, и разбеираться - где именно напахал... Заранее спасибо.
    ЗЫ. Может, если не против, меня на "ты" лучше ? А то я вроде-как, того... Перешёл без спросу... Неудобно теперь

    --- Добавлено ---

    Не. И в trigger_sample2 у меня не работает. Видимо что-то с моим Бобом. Вот гадство-то... Проверил в стиме целостность кеша и выяснилось, что два каких-то файла не прошли проверку и загружены по-новой, но один хрен - второй триггер не запускает действие... Чё теперь делать хрен его знает... naryv, есть какие-нибудь соображения?

  8. #8
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    45
    Сообщений
    6,905
    Images
    51

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    Да вроде сделал экшн и обозвал его также как триггер - "trigger_1" (без кавычек, разумеется), но видимо что-то всё-равно напутал . Сейчас буду изучать trigger_sample2, и разбеираться - где именно напахал... Заранее спасибо.
    ЗЫ. Может, если не против, меня на "ты" лучше ? А то я вроде-как, того... Перешёл без спросу... Неудобно теперь
    Хорошо, можно "на ты"

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    Не. И в trigger_sample2 у меня не работает. Видимо что-то с моим Бобом. Вот гадство-то... Проверил в стиме целостность кеша и выяснилось, что два каких-то файла не прошли проверку и загружены по-новой, но один хрен - второй триггер не запускает действие... Чё теперь делать хрен его знает... naryv, есть какие-нибудь соображения?
    Сейчас дома проверил - всё работает, чтобы сработал второй триггер - надо уничтожить один Е1 "прикрывающий разведчика". Попробуй в начале миссии (внешние виды лучше включёнными сделать для теста)правой кнопкой->посмотреть самолёт-> должно быть в списке Хе-115, 109Е1 и три спита, атаковать Е1 первым, дождаться, чтобы он совсем умер - упал в воду , на землю и взорвался и т.п. Потом - правой кнопкой->посмотреть самолёт-> в списке должны добавиться 4 110х. Тут вроде косякам неоткуда браться
    Don't happy, be worry

  9. #9
    Заявка на ПМЖ Аватар для =Svogris=Kranz
    Регистрация
    11.04.2012
    Возраст
    54
    Сообщений
    43

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Разобрался в чём дело. Действительно, всё работает. Просто я Е1 вообще не атаковал, а сцеплялся сразу с Е4-ми... И покончив с ними ждал, что 110-е народятся.
    Ну а в моём случае косяк был вот где - запускателем своего второго триггера я назначал группу, зародившуюся от первого триггера. Я кстати, поначалу думал, что и в твоём примере так, потому и ждал появления 110-х после уничтожения Е4-х, а Е1-го игнорил. Но похоже что (как это не грустно), если на группу, запущенную первым триггером (в твоём примере это Е4) повесить триггер, запускающий рождение новой группы (у тебя это 110-е), то этот второй триггер не сработает. По крайней мере, у мну не получилось... Жаль. Очень удобная фишка была бы.

  10. #10
    Старший Офицер Форума
    Регистрация
    15.02.2002
    Адрес
    Moscow
    Возраст
    45
    Сообщений
    6,905
    Images
    51

    Re: Тема для нубов в С#, которые всё-таки хотят использовать скрипты...

    Цитата Сообщение от =Svogris=Kranz Посмотреть сообщение
    Но похоже что (как это не грустно), если на группу, запущенную первым триггером (в твоём примере это Е4) повесить триггер, запускающий рождение новой группы (у тебя это 110-е), то этот второй триггер не сработает. По крайней мере, у мну не получилось... Жаль. Очень удобная фишка была бы.
    да, так не сработает - триггер "взводится" при старте миссии, а при старте группы, которая родится по первому триггеру ещё нет, соответственно и триггер на её уничтожение не сработает. Здесь уже надо скриптами пользоваться.
    Don't happy, be worry

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •