You are not logged in.
Исследуя опкод 080E, который обсуждался здесь, написал мод: штраф за превышение скорости. Никаких get_random_actor и пр. Основываясь только на событиях.
:SpeedLimitFine while true wait 0 if Player.Defined($PLAYER_CHAR) then if Actor.Driving($PLAYER_ACTOR) then 03C0: 0@ = actor $PLAYER_ACTOR car 02E3: 1@ = vehicle 0@ speed 080E: store_actor $PLAYER_ACTOR present_ped_event_to 2@ if and 2@ == 72 1@ > 30.0 // SPEED LIMIT then if 0154: actor $PLAYER_ACTOR in_zone 'SAN_AND' then Player.SetMinWantedLevel($PLAYER_CHAR, 2) end end end end end // while
Принцип работы: если вы едете в городе с превышением скорости (120 миль в час), и вас видят менты - ваш уровень розыска поднимается до двух звезд.
EDIT: Добавлена проверка Player.Defined
EDIT2: Изменена зона проверки
EDIT3: Исправлена ошибка в опкоде 080E
Last edited by Seemann (09-12-2006 15:53)
Offline
2Seemann:
Это
0154: actor $PLAYER_ACTOR in_zone 'LA' 0154: actor $PLAYER_ACTOR in_zone 'SF' 0154: actor $PLAYER_ACTOR in_zone 'VE'
можно заменить этим:
0154: actor $PLAYER_ACTOR in_zone 'SAN_AND'
Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ
Offline
Хорошо было бы заиметь карту, где отмечено какая зона где располагается.
Offline
Старый мумеппер(GTA3 и VC) показавал все зоны.
[small][/small]
Offline
а это
у меня я попробовал скопировал этот код в самый конец мэйна и скомпелировал
но сколько я не гонял на 120миль/час (мерил камхаком) перед ментами не одной зваезды не появилось
может я чтото не так сделал?
2 можно ли спустить лимит с 120 например на 60км/час и как это делается?
Offline
я попробовал скопировал этот код в самый конец мэйна и скомпелировал
Если ты добавляешь это в оригинальный main.scm то
1) код должен быть добавлен перед самой первой миссией (//-------------Mission 0---------------)
2) нужно добавить create_thread @SpeedLimitFine туда, где они идут подряд все (примерно 950 строка исходника).
можно ли спустить лимит с 120 например на 60км/час и как это делается?
Да. Нужно изменить вот эту строку
1@ > 30.0 // SPEED LIMIT
где 30.0 это значение лимита, деленное на 4. Тебе нужно поставить 15.0
Offline
сдеала как было сказано, скопировал весь скрипт перед //-------------Mission 0---------------
и добавил create_thread @SpeedLimitFine
но после начала новой игры всё работает пока не сажусь в машину
как только сиджей садится в машину игру выносит
и ещё вопрос после скрипта надо писать end_thread
Offline
Упс, моя вина. Нужно в опкоде
080E: 2@ = actor $PLAYER_ACTOR present_ped_event
поменять местами параметры.
end_thread не нужен, т.к. это бесконечный цикл, и игра никогда не выйдет за его пределы.
Offline
спасибо всё заработало
а можете пожалуйста написать какая строка что делает, как в учебнике
и огромный вам респект за учебник, прогу, помощи ид,
Offline
а можете пожалуйста написать какая строка что делает
все написано в Readme.
огромный вам респект за учебник
автор учебника не я, поэтому респекты идут либо Alexander'у, либо Subsistence и Hard'у в зависимости от того, чей учебник ты имеешь ввиду.
Offline
Ну мой конечно Кстати , Seemann , ты согласен разместить на этом сайте SB Manual 2.1 ?
Offline
2Alexander
Читай приват.
Offline
да к стати, в скрипте похоже ещё одна ощибка
лимит скорости от 1@ похоже не зависит, а зависит он от 2@
я проверял камхаком, гонятся начинают когда скорость 72миль/ч
извеняусь если не прав
Offline
а какой у тебя лимит поставлен? 30.0?
может быть проблема из-за разницы значений миль/час - км/час Миля в 1.6 раз больше километра, возможно от этого и разница.
К 2@ никакого отношения лимит не имеет, 72 это значение, указывающее, что игрока видят менты.
Offline
Код:
0154: actor $PLAYER_ACTOR in_zone 'LA'
0154: actor $PLAYER_ACTOR in_zone 'SF'
0154: actor $PLAYER_ACTOR in_zone 'VE'
лучше оставить, т.к. он действует именно на территории городов, что логично, и тебя не преследуют за превышение скорости вне черты города.
И вот именно к такому скрипту, Seemann, и нужна коробка передач
Уж тут она уместна как нигде.
Обрати внимание: мой пост в соседней теме, сделан точь-в-точь в такое же время, как этот
Last edited by Seemann (03-02-2007 14:35)
Offline
На мой пост никто не отозвался, ну и ладно. А между тем, если я ставлю:
0154: actor $PLAYER_ACTOR in_zone 'LA' и т.п. - полиция не обращает даже в городе на меня внимания!
Почему?!
Offline
А если SAN_AND, то работает?
попробуй проверить другим циклом, что ты точно в этом районе (LA)
while true
wait 250
if 0154: $player_char 'la'
then
inc($player_char.money)
end
end
Offline
2Seemann
Вобщем что получается.
После старта игры зона 'LA', как и зона 'SAN_AND' включаются после пересечения определенной метки на территории LA (это видно по каманде:
inc($player_char.money)). Но полиция меня (когда я 0154: actor $PLAYER_ACTOR in_zone 'LA' ) по прежнему игнорирует. Хотя судя по тому, что деньги на счетчик мне капают я нахожусь-таки на территории 'LA'.
Вот как это выглядит:
:NONAME_14
wait 0
if
Player.Defined($PLAYER_CHAR)
jf @NONAME_14_193
if
Actor.Driving($PLAYER_ACTOR)
jf @NONAME_14_193
03C0: 0@ = actor $PLAYER_ACTOR car
02E3: 1@ = car 0@ speed
080E: (unknown) $PLAYER_ACTOR 2@
if and
2@ == 72 // integer values
1@ > 20.0 // floating-point values
jf @NONAME_14_193
:NONAME_14_106
wait 250
if
0154: actor $PLAYER_ACTOR in_zone 'LA'
jf @NONAME_14_144
Player.Money($PLAYER_CHAR) += 1
:NONAME_14_144
jump @NONAME_14_106
0154: actor $PLAYER_ACTOR in_zone 'LA'
jf @NONAME_14_193
Player.SetMinWantedLevel($PLAYER_CHAR, 2)
:NONAME_14_193
jump @NONAME_14
Даже порог скорости снизила:
1@ > 20.0 // floating-point values
Полиция не реагирует.
Обрати внимание: мой пост в соседней теме, сделан точь-в-точь в такое же время, как этот smile
В какой теме?
Last edited by svetka (06-02-2007 09:04)
Offline
:NONAME_14_106 wait 250 if 0154: actor $PLAYER_ACTOR in_zone 'LA' jf @NONAME_14_144 Player.Money($PLAYER_CHAR) += 1 :NONAME_14_144 jump @NONAME_14_106 0154: actor $PLAYER_ACTOR in_zone 'LA' jf @NONAME_14_193 Player.SetMinWantedLevel($PLAYER_CHAR, 2)
ну, смотрим. Что у нас стоит после метки NONAME_14_144? Уж не джамп ли? И как игра придет на команду SetWantedLevel если ты не позволяешь ей это? Убери всю эту чушь после метки 14_144 и оставь только Player.SetMinWantedLevel($PLAYER_CHAR, 2)
В какой теме?
я про этот пост. Сравни время
Offline
:NONAME_14_106
wait 250
if
0154: actor $PLAYER_ACTOR in_zone 'SF'
jf @NONAME_14_144
Player.Money($PLAYER_CHAR) += 1
:NONAME_14_144
Player.SetMinWantedLevel($PLAYER_CHAR, 2)
При таком раскладе мне дают звезды в ЛА и Вегасе. Вобщем какую бы зону я не указала, мне в любом месте SA дают положенные скриптом 2 звезды. Игрушка игнорирует конкретную указанную зону.
Сравни время wink
Надо же! Секунда в секунду!
Offline
Ну в первом посте же написано все. Возьми код оттуда и просто поменяй имя зоны
if or 0154: actor $PLAYER_ACTOR in_zone 'LA' 0154: actor $PLAYER_ACTOR in_zone 'SF' 0154: actor $PLAYER_ACTOR in_zone 'VE' then Player.SetMinWantedLevel($PLAYER_CHAR, 2) end
Offline
Вобщем я всё поняла. Чтобы полиция реагировала корректно надо присутствие актера проверять в каждой зоне отдельно. Тогда всё работает нормально.
Offline
Модифицировал код из первого поста. Теперь звезды дают и за открытое ношение оружия (огнестрельного, гранаты и т.д.)
while true wait 0 if Player.Defined($PLAYER_CHAR) then 080E: store_actor $PLAYER_ACTOR present_ped_event_to 2@ if 2@ == 72 // COPS SEEN YOU then if Actor.Driving($PLAYER_ACTOR) then // TEST SPEED LIMIT 03C0: 0@ = actor $PLAYER_ACTOR car 02E3: 1@ = car 0@ speed if 1@ > 30.0 then // if 0154: actor $PLAYER_ACTOR in_zone 'SAN_AND' if or 0154: actor $PLAYER_ACTOR in_zone 'SF' 0154: actor $PLAYER_ACTOR in_zone 'LA' 0154: actor $PLAYER_ACTOR in_zone 'VE' then Player.SetMinWantedLevel($PLAYER_CHAR, 2) end end else // TEST FIRE GUNS 0470: 0@ = actor $PLAYER_ACTOR current_weapon if and 0@ >= 16 0@ <= 40 then Player.SetMinWantedLevel($PLAYER_CHAR, 2) end end end end end // while
Offline