#1 23-10-2009 05:38

VcSaJen
Registered: 25-08-2006
Posts: 217

Езда по земле, горам, стенам, потолкам и др.

Тема: Езда по земле, горам, стенам, потолкам и др.
Мод, который позволяет ехать на любой поверхности - по отвесным стенам и даже по потолку. Включить/Выключить - буква Э, прыжок на стену - буква Ж. Как это работает? Как вы знаете из уроков физики, нет никакой разницы между ускорением и гравитацией. Т. е. если в невесомости комнате придать ускорение 9,8 м/с[sup]2[/sup], то нам будет казаться, что на нас действует гравитация.
Опкод

07D5: set_car 0@ acceleration_in_direction_XYZ 0.0 0.0 0.2 rotation_accelerationXY 9@ 8@ 0.0

придаёт машине ускорение по осям XYZ (первые три параметра) и момент силы по осям XYZ (последние параметры). и т.д.
К сожалению, этот опкод очень сильно зависит от FPS, так что нужно настроить константы ACC_VAL и ACC_VALNEG под себя (они должны быть равны по модулю), что бы машина не укатывалась вверх или вниз, а стояла на стене.

thread 'sticky'

{$CLEO}

const
  ACC_VAL=0.01107
  ACC_VALNEG=-0.01107
end
var
  $PLAYER_ACTOR: Actor
  $PLAYER_CHAR: Player
  0@: Car
  1@: Float
  2@: Float
  3@: Float
  4@: Float
  5@: Float
  6@: Float
end

while true 
  //0A8D: 20@ = read_memory 0xB7CD9C size 4 virtual_protect 0
  //0513: show_text_box_1number 'NUMBER' number 20@  // ~1~
  if $PLAYER_CHAR.Defined
  then
    if and 
      $PLAYER_ACTOR.Driving
      0AB0: key_pressed 222 // Э
    then
      00C0: set_current_time_hours_to 12 minutes_to 0 
      03C0: 0@ = actor $PLAYER_ACTOR car
      32@=0
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 1
      03E5: show_text_box 'CHEAT1'
      //0A8C: write_memory 0x863984 size 4 value 0.00001 virtual_protect 1
      while true    
        if $PLAYER_CHAR.Defined
        jf @clear
        if 056E: car 0@ defined 
        jf @clear
        if $PLAYER_ACTOR.InCar(0@)
        jf @clear
        if and
          32@>200
          0AB0: key_pressed 222 // Э
        then
          Break
        end
        if 0AB0: key_pressed 186
        then
          var
            7@: Float
            8@: Float
            9@: Float
          end
          7@ = 0@.Angle
          7@+=90.0
          02F6: 8@ = cosine 7@ // (float)
          02F7: 9@ = sine 7@ // (float)
          8@*=0.5
          9@*=0.5
          07D5: set_car 0@ acceleration_in_direction_XYZ 0.0 0.0 0.2 rotation_accelerationXY 9@ 8@  0.0//unk 0.0 
          //wait 500
          //07D5: set_car 0@ acceleration_in_direction_XYZ 0.0 0.0 0.01 rotation_accelerationXY 0.5 0.0 unk 0.0 
          wait 200
          Continue
        end        
        if or 
          81F3: not car 0@ in_air
          02BF: car 0@ sunk 
        then
          33@=0
        end                 
        if 33@>350
        then
          wait 0
          Continue
        end 
        0@.StorePos(1@, 2@, 3@)
        0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 0.0 ACC_VALNEG
        4@-=1@
        5@-=2@
        6@-=3@
        6@+=ACC_VAL
        07D5: set_car 0@ acceleration_in_direction_XYZ 4@ 5@ 6@ rotation_accelerationXY 0.0 0.0 unk 0.0 
        if and 
          6@>0.0045
          8185: not car 0@ health >= 350 
        then
          0@.Health = 350
        end
//        07D5: set_car 0@ velocity_in_direction_XYZ 0.0 0.0 0.01109 rotation_velocitiesXY 0.0 0.0 unk 0.0 
        wait 0
      end
      :clear
      0@.RemoveReferences
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 0
      03E5: show_text_box 'CHEAT8'
      wait 200
      //0A8C: write_memory 0x863984 size 4 value 0.008 virtual_protect 1
    end
  end
  wait 0
end

[small][/small]

Offline

#2 23-10-2009 06:26

GTASA
Registered: 13-09-2008
Posts: 476

Re: Езда по земле, горам, стенам, потолкам и др.

Круто сделал.

Offline

#3 23-10-2009 07:57

Alien
Registered: 12-10-2008
Posts: 564

Re: Езда по земле, горам, стенам, потолкам и др.

Можно проще. Чтобы на машину не действовала гравитация, надо отключить один флаг в ее структуре.

             0A97: 0@ = car 1@ struct
             0@ += 0x40
             0A8D: 2@ = read_memory 0@ size 4 virtual_protect 0
             08C3: clear 2@ bit 1  
             0A8C: write_memory 0@ size 4 value 2@ virtual_protect 0

Этот метод используется в чите "Cars Float Away when hit ".

Offline

#4 23-10-2009 14:56

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Езда по земле, горам, стенам, потолкам и др.

ездить не сможешь) оторвёшься и улетишь


GIMS developer

Offline

#5 31-10-2009 05:09

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Езда по земле, горам, стенам, потолкам и др.

@Alien -

Можно проще. Чтобы на машину не действовала гравитация, надо отключить один флаг в ее структуре.

Спасибо smile. Да, это частично решает проблему со скатыванием вниз (вверх) при низком (большом) FPS. Если ещё добавить задержку, то зависимости от FPS почти не будет, но машина будет ехать дёрганно.

Версия без задержки:

thread 'sticky'

{$CLEO}

const
  ACC_VALNEG=-0.01107
end
var
  $PLAYER_ACTOR: Actor
  $PLAYER_CHAR: Player
  0@: Car
  1@: Float
  2@: Float
  3@: Float
  4@: Float
  5@: Float
  6@: Float
  13@: Integer
end

while true 
  //0A8D: 20@ = read_memory 0xB7CD9C size 4 virtual_protect 0
  //0513: show_text_box_1number 'NUMBER' number 20@  // ~1~
  if $PLAYER_CHAR.Defined
  then
    if and 
      $PLAYER_ACTOR.Driving
      0AB0: key_pressed 222 // Э
    then
      00C0: set_current_time_hours_to 12 minutes_to 0 
      03C0: 0@ = actor $PLAYER_ACTOR car
      32@=0
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 1
      gosub @CarGravityOff      
      03E5: show_text_box 'CHEAT1'
      while true    
        if $PLAYER_CHAR.Defined
        jf @clear
        if 056E: car 0@ defined 
        jf @clear
        if $PLAYER_ACTOR.InCar(0@)
        jf @clear
        if and
          32@>200
          0AB0: key_pressed 222 // Э
        then
          Break
        end
        if 0AB0: key_pressed 186
        then
          var
            7@: Float
            8@: Float
            9@: Float
          end
          7@ = 0@.Angle
          7@+=90.0
          02F6: 8@ = cosine 7@ // (float)
          02F7: 9@ = sine 7@ // (float)
          8@*=0.5
          9@*=0.5
          07D5: set_car 0@ acceleration_in_direction_XYZ 0.0 0.0 0.2 rotation_accelerationXY 9@ 8@  0.0//unk 0.0 
          wait 200
          Continue
        end        
        if or 
          81F3: not car 0@ in_air
          02BF: car 0@ sunk 
        then
          33@=0
        end                 
        if 33@>350
        then
          wait 0
          if 13@==true
          then
            gosub @CarGravityOn
          end
          Continue
        end
        if 13@==false
        then
          gosub @CarGravityOff
        end         
        0@.StorePos(1@, 2@, 3@)
        0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 0.0 ACC_VALNEG
        4@-=1@
        5@-=2@
        6@-=3@
        //6@+=ACC_VAL
        07D5: set_car 0@ acceleration_in_direction_XYZ 4@ 5@ 6@ rotation_accelerationXY 0.0 0.0 unk 0.0 
        if and 
          6@>0.0045
          8185: not car 0@ health >= 350 
        then
          0@.Health = 350
        end
        wait 0
      end
      :clear
      gosub @CarGravityOn
      0@.RemoveReferences
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 0
      03E5: show_text_box 'CHEAT8'
      wait 200
    end
  end
  wait 0 // <<< НЕ МЕНЯТЬ ПАРАМЕТР!!!
end

:CarGravityOff
  0A97: 10@ = car 0@ struct
  10@ += 0x40
  0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0
  08C3: clear 11@ bit 1  
  0A8C: write_memory 10@ size 4 value 11@ virtual_protect 0
  13@=true
return

:CarGravityOn
  0A97: 10@ = car 0@ struct
  10@ += 0x40
  0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0
  08BD: set 11@ bit 1
  0A8C: write_memory 10@ size 4 value 11@ virtual_protect 0
  13@=false
return

Версия с задержкой:

thread 'sticky'

{$CLEO}

const
  ACC_VALNEG=-0.0275
end
var
  $PLAYER_ACTOR: Actor
  $PLAYER_CHAR: Player
  0@: Car
  1@: Float
  2@: Float
  3@: Float
  4@: Float
  5@: Float
  6@: Float
  13@: Integer
end

while true 
  //0A8D: 20@ = read_memory 0xB7CD9C size 4 virtual_protect 0
  //0513: show_text_box_1number 'NUMBER' number 20@  // ~1~
  if $PLAYER_CHAR.Defined
  then
    if and 
      $PLAYER_ACTOR.Driving
      0AB0: key_pressed 222 // Э
    then
      00C0: set_current_time_hours_to 12 minutes_to 0 
      03C0: 0@ = actor $PLAYER_ACTOR car
      32@=0
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 1
      gosub @CarGravityOff      
      03E5: show_text_box 'CHEAT1'
      while true    
        if $PLAYER_CHAR.Defined
        jf @clear
        if 056E: car 0@ defined 
        jf @clear
        if $PLAYER_ACTOR.InCar(0@)
        jf @clear
        if and
          32@>200
          0AB0: key_pressed 222 // Э
        then
          Break
        end
        if 0AB0: key_pressed 186
        then
          var
            7@: Float
            8@: Float
            9@: Float
          end
          7@ = 0@.Angle
          7@+=90.0
          02F6: 8@ = cosine 7@ // (float)
          02F7: 9@ = sine 7@ // (float)
          8@*=0.5
          9@*=0.5
          07D5: set_car 0@ acceleration_in_direction_XYZ 0.0 0.0 0.2 rotation_accelerationXY 9@ 8@  0.0//unk 0.0 
          wait 200
          Continue
        end        
        if or 
          81F3: not car 0@ in_air
          02BF: car 0@ sunk 
        then
          33@=0
        end                 
        if 33@>350
        then
          wait 0
          if 13@==true
          then
            gosub @CarGravityOn
          end
          Continue
        end
        if 13@==false
        then
          gosub @CarGravityOff
        end         
        0@.StorePos(1@, 2@, 3@)
        0407: store_coords_to 4@ 5@ 6@ from_car 0@ with_offset 0.0 0.0 ACC_VALNEG
        4@-=1@
        5@-=2@
        6@-=3@
        07D5: set_car 0@ acceleration_in_direction_XYZ 4@ 5@ 6@ rotation_accelerationXY 0.0 0.0 unk 0.0 
        if and 
          6@>0.0045
          8185: not car 0@ health >= 350 
        then
          0@.Health = 350
        end
        wait 50 // <<< НЕ МЕНЯТЬ ПАРАМЕТР!!!
      end
      :clear
      gosub @CarGravityOn
      0@.RemoveReferences
      08C6: set_actor $PLAYER_ACTOR stay_on_bike 0
      03E5: show_text_box 'CHEAT8'
      wait 200
    end
  end
  wait 0 
end

:CarGravityOff
  0A97: 10@ = car 0@ struct
  10@ += 0x40
  0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0
  08C3: clear 11@ bit 1  
  0A8C: write_memory 10@ size 4 value 11@ virtual_protect 0
  13@=true
return

:CarGravityOn
  0A97: 10@ = car 0@ struct
  10@ += 0x40
  0A8D: 11@ = read_memory 10@ size 4 virtual_protect 0
  08BD: set 11@ bit 1
  0A8C: write_memory 10@ size 4 value 11@ virtual_protect 0
  13@=false
return

[small][/small]

Offline

#6 05-11-2009 06:51

GTASA
Registered: 13-09-2008
Posts: 476

Re: Езда по земле, горам, стенам, потолкам и др.

VcSaJen, можно выложить его в интернете? Кто автор укажу, если это надо.

Offline

#7 19-11-2009 09:39

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Езда по земле, горам, стенам, потолкам и др.

Это где?
P.S. С указанием автора мои скрипты выкладывать можно всегда.


[small][/small]

Offline

#8 19-11-2009 09:47

3Doomer
From: КаZан
Registered: 14-05-2008
Posts: 659
Website

Re: Езда по земле, горам, стенам, потолкам и др.

ЛЮБАЯ работа должна выкладывать только с разрешения автора с указанием ника и контактной информации оного))


GIMS developer

Offline

#9 19-11-2009 10:13

VcSaJen
Registered: 25-08-2006
Posts: 217

Re: Езда по земле, горам, стенам, потолкам и др.

Не по теме smile . Прочитай внимательнее мой пост :

P.S. С указанием автора мои скрипты выкладывать можно всегда.

Не надо флудить sad.


[small][/small]

Offline

Board footer

Powered by FluxBB