#1 16-09-2006 08:25

Seemann
Registered: 07-08-2006
Posts: 2,155

[SA|REL] Штраф за превышение скорости в городе

Исследуя опкод 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

#2 17-09-2006 21:21

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: [SA|REL] Штраф за превышение скорости в городе

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

#3 18-09-2006 13:40

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

Хорошо было бы заиметь карту, где отмечено какая зона где располагается.

Offline

#4 19-09-2006 22:20

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: [SA|REL] Штраф за превышение скорости в городе

Карты наверное нет, но есть файл с координатами этих зон: info.zon ...
Можно и новые зоны создать.


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

#5 23-09-2006 12:49

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: [SA|REL] Штраф за превышение скорости в городе

Старый мумеппер(GTA3 и VC) показавал все зоны.


[small][/small]

Offline

#6 08-12-2006 20:59

reinstal
Registered: 08-12-2006
Posts: 45

Re: [SA|REL] Штраф за превышение скорости в городе

а это
у меня я попробовал скопировал этот код в самый конец мэйна и скомпелировал
но сколько я не гонял на 120миль/час (мерил камхаком) перед ментами не одной зваезды не появилось
может я чтото не так сделал?

2 можно ли спустить лимит с 120 например на 60км/час и как это делается?

Offline

#7 09-12-2006 04:09

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

reinstal wrote:

я попробовал скопировал этот код в самый конец мэйна и скомпелировал

Если ты добавляешь это в оригинальный main.scm то
1) код должен быть добавлен перед самой первой миссией (//-------------Mission 0---------------)
2) нужно добавить create_thread @SpeedLimitFine туда, где они идут подряд все (примерно 950 строка исходника).

reinstal wrote:

можно ли спустить лимит с 120 например на 60км/час и как это делается?

Да. Нужно изменить вот эту строку

1@ > 30.0 // SPEED LIMIT

где 30.0 это значение лимита, деленное на 4. Тебе нужно поставить 15.0

Offline

#8 09-12-2006 14:39

reinstal
Registered: 08-12-2006
Posts: 45

Re: [SA|REL] Штраф за превышение скорости в городе

сдеала как было сказано, скопировал весь скрипт перед //-------------Mission 0---------------
и добавил create_thread @SpeedLimitFine
но после начала новой игры всё работает пока не сажусь в машину
как только сиджей садится в машину игру выносит

и ещё вопрос после скрипта надо писать end_thread

Offline

#9 09-12-2006 15:52

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

Упс, моя вина. Нужно в опкоде

080E: 2@ = actor $PLAYER_ACTOR present_ped_event

поменять местами параметры.

end_thread не нужен, т.к. это бесконечный цикл, и игра никогда не выйдет за его пределы.

Offline

#10 09-12-2006 18:35

reinstal
Registered: 08-12-2006
Posts: 45

Re: [SA|REL] Штраф за превышение скорости в городе

спасибо всё заработало
а можете пожалуйста написать какая строка что делает, как в учебнике

и огромный вам респект за учебник, прогу, помощи ид,

Offline

#11 10-12-2006 06:59

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

reinstal wrote:

а можете пожалуйста написать какая строка что делает

все написано в Readme.

огромный вам респект за учебник

автор учебника не я, поэтому респекты идут либо Alexander'у,  либо Subsistence и Hard'у в зависимости от того, чей учебник ты имеешь ввиду.

Offline

#12 10-12-2006 10:03

Alexander
Registered: 19-08-2006
Posts: 184
Website

Re: [SA|REL] Штраф за превышение скорости в городе

Ну мой конечно smile Кстати , Seemann , ты согласен разместить на этом сайте SB Manual 2.1 ?

Offline

#13 10-12-2006 10:31

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

2Alexander
Читай приват.

Offline

#14 11-12-2006 23:28

reinstal
Registered: 08-12-2006
Posts: 45

Re: [SA|REL] Штраф за превышение скорости в городе

да к стати, в скрипте похоже ещё одна ощибка
лимит скорости от 1@ похоже не зависит, а зависит он от 2@
я проверял камхаком, гонятся начинают когда скорость 72миль/ч

извеняусь если не прав

Offline

#15 13-12-2006 16:15

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

а какой у тебя лимит поставлен? 30.0?

может быть проблема из-за разницы значений миль/час - км/час Миля в 1.6 раз больше километра, возможно от этого и разница.

К 2@ никакого отношения лимит не имеет, 72 это значение, указывающее, что игрока видят менты.

Offline

#16 03-02-2007 13:57

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Штраф за превышение скорости в городе

Код:

0154: actor $PLAYER_ACTOR in_zone 'LA'
0154: actor $PLAYER_ACTOR in_zone 'SF'
0154: actor $PLAYER_ACTOR in_zone 'VE'

лучше оставить, т.к. он действует именно на территории городов, что логично, и тебя не преследуют за превышение скорости вне черты города.

И вот именно к такому скрипту, Seemann, и нужна коробка передач smile
Уж тут она уместна как нигде.

Обрати внимание: мой пост в соседней теме, сделан точь-в-точь в такое же время, как этот smile

Last edited by Seemann (03-02-2007 14:35)

Offline

#17 05-02-2007 13:13

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Штраф за превышение скорости в городе

На мой пост никто не отозвался, ну и ладно. А между тем, если я ставлю:
0154: actor $PLAYER_ACTOR in_zone 'LA' и т.п. - полиция не обращает даже в городе на меня внимания!
Почему?!

Offline

#18 05-02-2007 13:38

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

А если SAN_AND, то работает?

попробуй проверить другим циклом, что ты точно в этом районе (LA)

while true
  wait 250
  if 0154: $player_char 'la'
  then
    inc($player_char.money)
  end
end

Offline

#19 06-02-2007 09:03

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Штраф за превышение скорости в городе

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
Полиция не реагирует.

Seemann wrote:

Обрати внимание: мой пост в соседней теме, сделан точь-в-точь в такое же время, как этот smile

В какой теме? smile

Last edited by svetka (06-02-2007 09:04)

Offline

#20 06-02-2007 10:10

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

: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)


В какой теме?

я про этот пост. Сравни время wink

Offline

#21 06-02-2007 12:10

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Штраф за превышение скорости в городе

: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

Надо же! Секунда в секунду! smile

Offline

#22 06-02-2007 12:33

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

Ну в первом посте же написано все. Возьми код оттуда и просто поменяй имя зоны

        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

#23 06-02-2007 18:22

svetka
Registered: 29-12-2006
Posts: 222

Re: [SA|REL] Штраф за превышение скорости в городе

Вобщем я всё поняла. Чтобы полиция реагировала корректно надо присутствие актера проверять в каждой зоне отдельно. Тогда всё работает нормально.

Offline

#24 27-05-2007 15:41

Seemann
Registered: 07-08-2006
Posts: 2,155

Re: [SA|REL] Штраф за превышение скорости в городе

Модифицировал код из первого поста. Теперь звезды дают и за открытое ношение оружия (огнестрельного, гранаты и т.д.)

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

#25 28-05-2007 00:18

Capushon
Registered: 13-08-2006
Posts: 350
Website

Re: [SA|REL] Штраф за превышение скорости в городе

2Seemann:
А если max_wanted_level в этот момент будет = 1, или 0 не будет ли проблем?


Сначала ты надежда и гордость,
Потом о спину ломают аршин. (c)БГ

Offline

Board footer

Powered by FluxBB