You are not logged in.
Хммм... Я один заметил, что в некоторых ситуациях на стоящей на месте машине без водителя (например, спавненной автосалоном) включается правый поворотник?
Извиняюсь за даблпост, между постами прошло восемь месяцев
-----
Повыбрасывал вэйты откуда можно, добвил пару фич - всё в первом посте.
Есть возможность включать поворотники машинам педов, перестраивающихся на шоссе?
И как насчёт дополнительных оффсетов для мотоциклов? Например, задние поворотники в 99% случаев сливаются посередине.
Лучше конечно, один поток, чем два. Необходимо снизить число wait-ов к минимуму (желательно до 1). После каждой метки wait-ы ставить не надо
Спасибо, потом может верну в один поток.
Обновил первый пост. Плавности камере не хватает, задний вид срабатывает с задержкой, но и так хорошо. Позже могу добавить ещё разных функций.
А не мог бы файл прикрепить , у меня инет только на теле , не переписывать же мне все по одному символу
Всё доставим
После стольких месяцев забития на моддинг меня втянуло обратно
Решение с плавностью нашёл - разбил код на два потока, первый - включает камеру, считывает нажатия и т.п., после чего через глобальные клео-переменные передаёт их во второй, который просчитывает доп. смещения и ставит камеру. Сейчас довожу до ума их работу, не сегодня - завтра выложу код.
I'm afraid that is impossible
Насколько я знаю, можно с серва делать ботов, но ИИ от них дпже не тянет - все комманды заранее, так что о педах в САМП можно только мечтать...
Кажется понял. Но уточню: если я захочу сдетектировать провал миссии, то этот лэйбл нужен или проверки кол-ва начатых и выполненных миссий в статистике будет достаточно?
Понятно, а лэйбл с hex зачем?
Вопрос: какая часть вышеописанного кода ответственна за сам сейв, а какая - за детектирование фейла миссии? Если я правильно понял, то "0AA5: call 0x619060 num_params 1 pop 0 6" - это сэйв, а каую роль играет :lbl?
По поводу провала предлагаю сделать как в Driver - Parallel Lines: после провала внизу экрана появляется надпись "Press Backspace to restart" и девятисекундный обратный отсчёт. Правда, там по нажатии бэкспейса миссия начиналась сразу же и с последнего чекпоинта, но это не столь важно...
А точнее "Это видео содержит материалы от партнера Sony Music Entertainment, который заблокировал это содержание для показа в вашей стране в целях соблюдения авторских прав. "
Спасибо. То-то я его не мог найти ни на car, ни на vehicle=).
После пар сделаю автокалибровку по размеру машины.
Обновил первый пост. Ещё раз прошу помощи с тем, как заставить камеру плавно менять оффсет относительно машины.
Служу Родному Скриптингу
Слегка обновил код. Теперь всегда прислоняется к стене, если она есть, и не прислоняется, если нет.
Позже обновлю анимации, чтоб из укрытия выходил быстрее и дальше.
Да, и нельзя ли всё-таки убарть незатекстуренный прямоугольник вместо курсора?:blush: Конечно, мелочь, но всё-таки смотрится неэстетично...
Не вопрос (ну ясное дело=) ), зааттачил в первом посте.
Заметил баг. При попытке загрузить другой сейв, не выйдя из машины, игра продолжается с отключенным звуком. Если ГГ не находится в машине, то всё нормально грузится, звук появляется снова.
Если имеем от 3 до 5 звёзд, то в игру время от времени будет вступать полицейская машина, замаскированная под обычную (ЗАМАСКИРОВАННАЯ!!, а не просто чёрная без обозначений, как делали раньше), вместе с полицейскими в штатском. Скины у полицейских могут быть разные, машины - Примо, Премьер, обе такси. Водитель вооружён дрободаном, напарник - обычным пистолетом.
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- thread "UNDERCOVER" 2@ = 0 :UNDERCOVER_4 wait 0 if Player.Defined($PLAYER_CHAR) jf @UNDERCOVER_4 if and Player.WantedLevel($PLAYER_CHAR) > 2 not Player.WantedLevel($PLAYER_CHAR) > 5 // 8@ == 0 jf @UNDERCOVER_4 0209: 0@ = random_int_in_ranges 2000 5000 wait 0@ 0209: 0@ = random_int_in_ranges 0 3 14@ = 90.0 15@ = 0.0 16@ = -20 17@ = 15.0 0871: init_jump_table 0@ total_jumps 4 default_jump 0 @UNDERCOVER_9 jumps 0 @UNDERCOVER_12 1 @UNDERCOVER_14 2 @UNDERCOVER_17 3 @UNDERCOVER_20 -1 @UNDERCOVER_9 -1 @UNDERCOVER_9 -1 @UNDERCOVER_9 :UNDERCOVER_9 wait 0 if and Player.WantedLevel($PLAYER_CHAR) > 2 not Player.WantedLevel($PLAYER_CHAR) > 5 jf @UNDERCOVER_4 if Actor.Driving($PLAYER_ACTOR) then 04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 15@ 14@ 0.0 03D3: get_route_nearest_for 11@ 12@ 13@ store_to 11@ 12@ 13@ Z_angle_to 4@ 068D: get_camera_position_to 17@ 18@ 19@ Model.Load(#WHEEL_OR1) while not Model.Available(#WHEEL_OR1) wait 0 end 13@ += 0.6 0@ = Object.Create(#WHEEL_OR1, 11@, 12@, 13@) 0750: set_object 0@ visibility 0 wait 10 if or 86BD: not no_obstacles_between 11@ 12@ 13@ and 17@ 18@ 19@ solid 1 car 1 actor 0 object 1 particle 0 82CC: not object 0@ bounding_sphere_visible then Object.Destroy(0@) Model.Destroy(#WHEEL_OR1) else Object.Destroy(0@) Model.Destroy(#WHEEL_OR1) if 16@ = -20 then 15@ = -30.0 14@ = 75.0 16@ = 0 jump @UNDERCOVER_9 end if 16@ == 0 then 15@ = 0.0 14@ = 90.0 16@ = 20 jump @UNDERCOVER_9 end if 16@ == 20 then 15@ = 30.0 14@ = 75.0 16@ = 1 jump @UNDERCOVER_9 end if 16@ == 1 then 15@ = 0.0 14@ = 90.0 16@ = -20 jump @UNDERCOVER_9 end jump @UNDERCOVER_9 end else 04C4: store_coords_to 11@ 12@ 13@ from_actor $PLAYER_ACTOR with_offset 0.0 14@ 0.0 03D3: get_route_nearest_for 11@ 12@ 13@ store_to 11@ 12@ 13@ Z_angle_to 4@ Model.Load(#WHEEL_OR1) while not Model.Available(#WHEEL_OR1) wait 0 end 13@ += 0.6 0@ = Object.Create(#WHEEL_OR1, 11@, 12@, 13@) 0750: set_object 0@ visibility 0 wait 10 if 82CC: not object 0@ bounding_sphere_visible then Object.Destroy(0@) Model.Destroy(#WHEEL_OR1) else Object.Destroy(0@) Model.Destroy(#WHEEL_OR1) 14@ *= -1.0 17@ *= -1.0 jump @UNDERCOVER_9 end end 0209: 0@ = random_int_in_ranges 0 6 0871: init_jump_table 0@ total_jumps 7 default_jump 0 @UNDERCOVER_11 jumps 0 @UNDERCOVER_26 1 @UNDERCOVER_27 2 @UNDERCOVER_28 3 @UNDERCOVER_29 4 @UNDERCOVER_30 5 @UNDERCOVER_31 6 @UNDERCOVER_32 :UNDERCOVER_11 wait 0 0085: 1@ = 0@ 2@ = 1 0209: 0@ = random_int_in_ranges 0 6 0871: init_jump_table 0@ total_jumps 7 default_jump 0 @UNDERCOVER_35 jumps 0 @UNDERCOVER_26 1 @UNDERCOVER_27 2 @UNDERCOVER_28 3 @UNDERCOVER_29 4 @UNDERCOVER_30 5 @UNDERCOVER_31 6 @UNDERCOVER_32 :UNDERCOVER_12 wait 0 9@ = #PREMIER jump @UNDERCOVER_9 :UNDERCOVER_14 wait 0 9@ = #PRIMO jump @UNDERCOVER_9 :UNDERCOVER_17 wait 0 9@ = #TAXI jump @UNDERCOVER_9 :UNDERCOVER_20 wait 0 9@ = #CABBIE jump @UNDERCOVER_9 :UNDERCOVER_26 wait 0 0@ = #SBMYRI if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_27 wait 0 0@ = #OMYRI if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_28 wait 0 0@ = #OMYST if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_29 wait 0 0@ = #SOMYST if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_30 wait 0 0@ = #SWMYCR if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_31 wait 0 0@ = #SWMYST if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_32 wait 0 0@ = #HMYRI if 2@ == 0 then jump @UNDERCOVER_11 else jump @UNDERCOVER_35 end :UNDERCOVER_35 wait 0 2@ = 0 Model.Load(9@) while not Model.Available(9@) wait 0 end Model.Load(0@) while not Model.Available(0@) wait 0 end Model.Load(1@) while not Model.Available(1@) wait 0 end Model.Load(#CHROMEGUN) while not Model.Available(#CHROMEGUN) wait 0 end 5@ = Car.Create(9@, 11@, 12@, 13@) Car.Angle(5@) = 4@ 0129: 6@ = create_actor_pedtype 6 model 0@ in_car 5@ driverseat 01B2: give_actor 6@ weapon 25 ammo 9999 // Load the weapon model before using this 01C8: 7@ = create_actor_pedtype 6 model 1@ in_car 5@ passenger_seat 0 Model.Destroy(0@) Model.Destroy(1@) Model.Destroy(9@) Model.Destroy(#CHROMEGUN) Car.SetDriverBehaviour(5@, 5) Car.SetSpeedInstantly(5@, 33.0) Car.SetMaxSpeed(5@, 150.0) :UNDERCOVER_43 wait 0 if or not Player.Defined($PLAYER_CHAR) not Player.WantedLevel($PLAYER_CHAR) > 0 jf @UNDERCOVER_45 Car.SetToNormalDriver(5@) Car.RemoveReferences(5@) Actor.RemoveReferences(6@) Actor.RemoveReferences(7@) wait 3000 jump @UNDERCOVER_4 :UNDERCOVER_45 wait 0 if Car.Defined(5@) jf @UNDERCOVER_49 if 0202: actor $PLAYER_ACTOR near_car 5@ radius 5.0 5.0 flag 0 jf @UNDERCOVER_49 if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 02E3: 10@ = car 0@ speed if 10@ <= 5.0 jf @UNDERCOVER_47 end if Actor.Defined(6@) then 0633: AS_actor 6@ exit_car 05E2: actor 6@ kill_actor $PLAYER_ACTOR Actor.RemoveReferences(6@) 01B9: set_actor 6@ armed_weapon_to 25 end if Actor.Defined(7@) then 0633: AS_actor 7@ exit_car 05E2: actor 7@ kill_actor $PLAYER_ACTOR Actor.RemoveReferences(7@) end Car.RemoveReferences(5@) wait 3000 jump @UNDERCOVER_4 :UNDERCOVER_47 wait 0 if and Actor.Defined(6@) Actor.Defined(7@) then if and 80F2: not actor 6@ near_actor $PLAYER_ACTOR radius 25.0 25.0 0 80F2: not actor 7@ near_actor $PLAYER_ACTOR radius 25.0 25.0 0 Actor.Driving($PLAYER_ACTOR) then if and not Car.Wrecked(5@) 0202: actor 6@ near_car 5@ radius 35.0 35.0 flag 0 0202: actor 7@ near_car 5@ radius 35.0 35.0 flag 0 then else wait 3000 jump @UNDERCOVER_4 end 05CB: AS_actor 6@ enter_car 5@ as_driver -1 ms 05CA: AS_actor 7@ enter_car 5@ passenger_seat 0 -1 ms Car.SetDriverBehaviour(5@, 0) while not Actor.InCar(7@, 5@) while not Actor.InCar(6@, 5@) wait 0 end wait 0 end Car.SetDriverBehaviour(5@, 6) Car.SetMaxSpeed(5@, 150.0) end else if Actor.Defined(6@) then Actor.RemoveReferences(6@) end if Actor.Defined(7@) then Actor.RemoveReferences(7@) end if Car.Defined(5@) then Car.RemoveReferences(5@) end end :UNDERCOVER_49 wait 0 if Actor.Defined(7@) then if or Actor.Dead(7@) 80F2: not actor 7@ near_actor $PLAYER_ACTOR radius 150.0 150.0 0 then Actor.RemoveReferences(7@) end if or Actor.Dead(6@) 80F2: actor 6@ near_actor $PLAYER_ACTOR radius 150.0 150.0 0 then Actor.RemoveReferences(6@) Actor.RemoveReferences(7@) Car.RemoveReferences(5@) jump @UNDERCOVER_4 end end if not Car.Defined(5@) then Actor.RemoveReferences(6@) Actor.RemoveReferences(7@) Car.RemoveReferences(5@) Actor.DestroyInstantly(6@) Actor.DestroyInstantly(7@) jump @UNDERCOVER_4 if Actor.InCar($PLAYER_ACTOR, 5@) then Car.RemoveReferences(5@) if Actor.Defined(6@) then Actor.RemoveReferences(6@) end if Actor.Defined(7@) then Actor.RemoveReferences(7@) end end end if 8202: not actor $PLAYER_ACTOR near_car 5@ radius 150.0 150.0 flag 0 then Actor.RemoveReferences(6@) Actor.RemoveReferences(7@) Car.RemoveReferences(5@) Car.Destroy(5@) Actor.DestroyInstantly(6@) Actor.DestroyInstantly(7@) jump @UNDERCOVER_4 end jump @UNDERCOVER_43
Тестим, оцениваем, комментируем
Раз уж так, нельзя ли исправить это? Запоминать патроны в магазине, чтобы этот читерский метод не работал...
Работу программы могут блокировать антивирусник и/или фаервол.
Это первое, о чём я подумал.
В авасте! в исключениях он был, а про файрволл я забыл... Спасибо, что напомнили:blush:
--------------------
Ага, прекрасно, снова накрылся. Все исключения проставлены.
Теперь, если есть лётная лицензия, то можно отремонировать самолёт в любом из аэропортов. Стоимость ремонта зависит от степени повреждений и от того, не управляете ли вы часом Боингом/Андромедой;-).
Ремонтироваться в своём аэропорту можно будет только после выполнения "Зелёной Жижи"
// This file was decompiled using sascm.ini published by Seemann (http://sannybuilder.com/files/SASCM.rar) on 13.10.2007 {$VERSION 3.1.0027} {$CLEO .cs} //-------------MAIN--------------- thread "AIRREPAIR" :AIRREPAIR_2 wait 0 if $TORENO_TOTAL_PASSED_MISSIONS >= 9 jf @AIRREPAIR_17 6@ = 365.3785 7@ = 2537.1365 8@ = 16.6647 gosub @AIRREPAIR_6 jump @AIRREPAIR_17 :AIRREPAIR_6 wait 0 if Player.Defined($PLAYER_CHAR) jf @AIRREPAIR_6 if not Actor.Driving($PLAYER_ACTOR) then return end if 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle then return end if 80EC: not actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 350.0 350.0 then return end 03C0: 3@ = actor $PLAYER_ACTOR car if not Car.Defined(3@) then return end 4@ = Car.Health(3@) if not 4@ < 1000 then return end 03BC: 0@ = create_sphere_at 6@ 7@ 8@ radius 14.0 :AIRREPAIR_8 wait 0 if and 00EF: actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 19.0 19.0 stopped 3@ <> -1 Car.Defined(3@) then jump @AIRREPAIR_11 end 4@ = Car.Health(3@) if or 80EC: not actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 360.0 360.0 84C8: not actor $PLAYER_ACTOR driving_flying_vehicle 4@ >= 1000 then 03BD: destroy_sphere 0@ return end jump @AIRREPAIR_8 :AIRREPAIR_11 wait 0 00BF: 1@ = current_time_hours, 2@ = current_time_minutes 4@ = Car.Health(3@) 0A8F: 4@ = 1000 - 4@ // int 4@ *= 20 if or Car.Model(3@) == #AT400 Car.Model(3@) == #ANDROM then 4@ *= 20 end 4@ -= 1 if not Player.Money($PLAYER_ACTOR) > 4@ then else 00BC: show_text_highpriority GXT 'IE07' time 2000 flag 1 // ~r~You don't have enough cash! 03BD: destroy_sphere 0@ while 00EC: actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 19.0 19.0 wait 0 end return end if Player.WantedLevel($PLAYER_CHAR) > 1 then 03BD: destroy_sphere 0@ 00BC: show_text_highpriority GXT 'TUNERR2' time 2000 flag 1 // ~r~Lose the cops! while 00EC: actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 19.0 19.0 wait 0 end return end 03BD: destroy_sphere 0@ Player.CanMove($PLAYER_CHAR) = False 0169: set_fade_color_RGB 0 0 0 fade 0 600 wait 600 0A30: repair_car 3@ 1@ += 3 00C0: set_current_time_hours_to 1@ minutes_to 2@ wait 1500 fade 1 600 4@ += 1 4@ *= -1 0109: player $PLAYER_CHAR money += 4@ //Player.Money($PLAYER_ACTOR) += 4@ wait 800 Player.CanMove($PLAYER_CHAR) = True while 00EC: actor $PLAYER_ACTOR 0 near_point 6@ 7@ radius 19.0 19.0 wait 0 end return :AIRREPAIR_17 wait 0 if $PILOT_LICENSE_OBTAINED == 1 jf @AIRREPAIR_21 6@ = -1254.0619 7@ = -105.8971 8@ = 14.144 gosub @AIRREPAIR_6 jump @AIRREPAIR_21 :AIRREPAIR_21 wait 0 if $PILOT_LICENSE_OBTAINED == 1 jf @AIRREPAIR_24 6@ = 1609.3596 7@ = 1625.1526 8@ = 10.8203 gosub @AIRREPAIR_6 jump @AIRREPAIR_24 :AIRREPAIR_24 wait 0 if $PILOT_LICENSE_OBTAINED == 1 jf @AIRREPAIR_2 6@ = 1980.9952 7@ = -2381.9631 8@ = 13.5469 gosub @AIRREPAIR_6 jump @AIRREPAIR_2
Нормально работал до сегодняшнего дня, теперь если сан не запущен, то, как и положено, пишет GTA SA is not running. Если сан запущен - не реагирует никак.
Sw[ee]t, я однажды поставил клео4, сильно пожалел - последствия проявляются до сих пор (слава богу, только на моём компе, всымысле если перекинуть всю гта со всеми модами на другой комп, то появившихся багов не наблюдаю... вроде).
kenking, в опкоде 014C: я нисколь не сомневался. Удалить транспорт без его захвата... Но всё равно каким-то образом надо проверять, создался "припаркованный" ли верт. Просто создавать через Car.Create... Проверить, находится ли игрок рядом, загрузить модель, спавнить, выгрузить модель, remove_references... Ну, учитывая трудности с отловом вертолёта, так будет проще:D
---------------------
Ладно, один верт я припарковал на его законном месте. Только вот всякой хрени наспавнить мне нужно будет по всему штату, поэтому создавать под каждую машину клео-скрип мне не кажется хорошей идеей.
Пока попробую через gosub, если всё устроить не через нижнюю палату, то вопрос решён.
Да ставил я эту проверку, сути не меняет.