Добрый день!
Есть такой мод, как "BusMod Beta V1.0.1.1 by rooft0p aka moochaka"
Если кратко, то это скрипт миссии "Водитель автобуса".
Очень интересуют следующие вопросы:
1. В нём реализована прокладка маршрута к заданной точке (как GPS), как в игровых миссиях.
<РЕШЕНО для данного мода, но пример ниже пока до конца не доковырял>
Поиски по сети вывели на такую информацию. Здесь рассматривается возможнось создания маршрута гоночного трека на карте и автор вроде как добивается требуемого результата.
В качестве решения даётся такой код (синтаксис vb.Net):
Native.Function.Call("SET_IGNORE_NO_GPS_FLAG", 1) Native.Function.Call("START_GPS_RACE_TRACK", 10) Native.Function.Call("RENDER_RACE_TRACK", 0) Dim tmpPointer As Native.Pointer = New Native.Pointer(GetType(Vector3)) For Each r As TRace.TRacePoint In RE_editRace.LoadedRacePoints r.blipPos = myNative.attachBlipToCoord(r.pos) r.blipPos.Icon = BlipIcon.Misc_Destination tmpPointer.SetValue(r.pos) Native.Function.Call("ADD_POINT_TO_GPS_RACE_TRACK", tmpPointer) Next Native.Function.Call("RENDER_RACE_TRACK", 1) 'i removed SET_IGNORE_NO_GPS_FLAG and still working, not sure what it does ^^ 'to clear the track we call Native.Function.Call("RENDER_RACE_TRACK", 0)
Суть в том, что я особо не шарю в программировании и полностью понять как это написать в рабочем сценарии не понял...
Вижу, что идёт работа с указателем (As Native.Pointer), что ему присваиваются свойства координатного типа данных (As Vector3), понятно, что идёт нативный вызов функции с указателем ("Native.Function.Call("ADD_POINT_TO_GPS_RACE_TRACK", tmpPointer), но вот какие параметры у tmpPointer и как они присвоены?
Если можно, приведите пример рабочего кода с пояснениями.
В принципе, <РЕШЕНО>.
2. <РЕШЕНО>
3. <РЕШЕНО>
4. Фиксируется проезд на красный свет светофора и столкновения с транспортными средствами. Через IS_CAR_STOPPED_AT_TRAFFIC_LIGHTS и IS_CAR_TOUCHING_CAR? Можно поподробнее?
И, в свете наличия в игре светофоров и возможности регистрации их сигналов, было бы интересно создать мод, который будет показывать сигнал впереди стоящего светофора. Это полезно, когда играешь с видом из кабины и не видно светофоров.
Далее, у меня есть вопросы относящиеся в целом к игре:
5. Есть скриптовые команды на открывание/закрывание дверей/капота/багажника транспортного средства.
Но! Открывание дверей/капота/багажника включает игровую анимацию этого действия, а закрывание запускает только действие без анимации.
Только у автобуса передняя дверь закрывается с анимацией, но только в момент, когда в него входит/выходит пэд.
Возможно это связано с выделением времени на операцию, т.е. на закрытие стоит ноль...
Как получить анимацию на закрывание?
<можно сказать РЕШЕНО, сделал подобие эмулятора данного действия, не задействуя анимацию>
6. <РЕШЕНО>
7. В игре стоит ограничение на количество мест в транспорте, равное 4. В автобусе, как таковом, мест естественно больше ;-) Я подозреваю, что методом, использованным listener вот здесь возможно добиться изменения данного ограничения и введения дополнительных аргументов для обозначения новых мест для посадки. Ну и правкой под это дело стандартной модели автобуса с разметкой новых мест.
Или может быть можно обойти это ограничение, виртуально прикрепив одно т/с к другому? Есть же команды типа .Attach применяемые к объекту и потом при посадке пассажиров использовать параметры рассадки от 2-х/3-х/4-х т/с?
Буду благодарен любым пояснениям, высказанным мыслям по данным вопросам.
P.S. был бы весьма признателен за любые исходники для изучения скриптинга GTA IV
P.P.S. Возник вопрос по назначению клавиш для скрипта, касательно использования модификаторов.
Вариант A:
e.KeyWithModifiers - Returns the key combined with modifier (Shift, Control, Alt) information. (As System.Windows.Forms.Keys)
Т.е. это, как я понял, для самостоятельного назначения модификатора (клавиша модификатора)
Построение использовал такое:
Private Sub Main_KeyDown(ByVal sender As Object, ByVal e As GTA.KeyEventArgs) Handles MyBase.KeyDown If e.KeyWithModifiers = Keys.Tab AndAlso e.Key = Keys.E Then Game.DisplayText("Keys [KeyWithModifiers]+[E] is Pressed", 1000) End Sub
Результат - игра скрипт съела, но результата не выдала. Пробовал по разному, но видимо чего-то не догнал...
Поисков по сети дали только один близкий ответ.
Вариант B:
Модификатор с конструкцией BindKey(Keys.E, AddressOf Deystvie1)
Нашёл в сети такое решение, где прописывается условие для работы вышеозначенной конструкции
Код получился такой:
BindKey(Keys.Alt,True, Keys.E,True, AddressOf Deystvie2)
Результат как и в предыдущем случае - игра схавала и ноль.
Подскажите, где неправ.
<РЕШЕНО>
Сообщение отредактировал vorotkov: 12 April 2015 - 23:25