#2726 13-11-2010 21:50

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

здесь статы не все

Посмотри СБ справку: документация по скм - гта са - статистика ИД.

тут только для игрока.

У других актёров статов нет. Есть только здоровье, броня и т.п.

Offline

#2727 13-11-2010 22:04

CraZZZy-GameRRR
From: Москва
Registered: 11-08-2009
Posts: 97
Website

Re: Один вопрос

Не, я про те статы, что в pedstats.dat записаны. Например, создаю я актёра и нужно ему силу удара изменить.

Offline

#2728 14-11-2010 10:45

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

вот нашёл интересный адрес - CPed +0x47C = Указатель на структуру анимации
можно ли отсюда как-то узнать название анимации?
и вообще научите пожалуйста, как этими адресами с CPed пользоваться))
вот мне например надо вот это - CPed +0x15C = Некторые статусы анимации:

    * 0 = прыгает от земли
    * 61 = ударяет
    * 102 = остановился
    * 154 = спринт (бежит с ускорением)
    * 205 = бежит
и как же мне узнать что из этого сейчас выполняется?))


userbar.png

Offline

#2729 14-11-2010 13:27

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Один вопрос

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

Offline

#2730 14-11-2010 18:06

BoPoH
From: Каушаны
Registered: 21-02-2009
Posts: 77

Re: Один вопрос

спс, разобрался, только тут вот кое что непонятно:

CPed +0x14 = Указатель на структуру позиции в XYZ (и угол вращения)

    * (CPed+0x14) +0x0 to +0x2C = [dword] матрица вращения
что это за матрица вращения и как её получить?))
я прибавил к структуре педа +0x14 и потом нужно ещё +0x2C прибавить? тут какой-то промежуток чтоли? +0x0 to +0x2C


userbar.png

Offline

#2731 14-11-2010 18:39

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Матрица - это двумерный массив, или проще говоря, прямоугольная таблица чисел ( http://ru.wikipedia.org/wiki/Матрица_(математика) ). Одно из применений матрицы - пересчёт координат из одной системы в другую (из локальной в глобальную или наоборот).
Что касается игры: сначала надо получить указатель на матрицу, прочитав адрес (CPed+0x14). Затем надо прибавить к полученному адресу смещение элемента матрицы и прочитать значение данного элемента.
Пример: выводим на экран значение X-координаты игрока

{$CLEO}
wait 1000
0A96: 0@ = actor $PLAYER_ACTOR struct
0@ += 0x14
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x30
while true
    wait 0
    0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0
    0092: 1@ = float 1@ to_integer
    03F0: enable_text_draw 1 
    045A: draw_text_1number 200.0 200.0 GXT 'NUMBER' number 1@  // ~1~ 
end

Last edited by Den_spb (14-11-2010 18:39)

Offline

#2732 16-11-2010 04:40

Sergey81
Registered: 19-12-2008
Posts: 654

Re: Один вопрос

Подскажите пожалуйста, был у меня спидометр, найденный в сети, код его вот такой:

// 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---------------
0000: NOP 
0A95: enable_thread_saving 

:Noname_4
wait 0 
if and
   Actor.Driving($PLAYER_ACTOR)
  $Active_Interior == 0 
84C8:   not actor $PLAYER_ACTOR driving_flying_vehicle 
84A7:   not actor $PLAYER_ACTOR driving_boat 
else_jump @Noname_4 
0811: 1@ = actor $PLAYER_ACTOR car // versionC 
0390: load_txd_dictionary "SPEED" 
038F: load_texture "STRELK" as 15 // Load dictionary with 0390 first 
038F: load_texture "CIF" as 16 // Load dictionary with 0390 first 
038F: load_texture "CIFN" as 17 // Load dictionary with 0390 first 
038F: load_texture "STRELKN" as 18 // Load dictionary with 0390 first 
038F: load_texture "GLASSC" as 19 // Load dictionary with 0390 first 
wait 2500 
jump @Noname_126 

:Noname_126
wait 0 
if and
   Actor.Driving($PLAYER_ACTOR)
  $Active_Interior == 0 
else_jump @Noname_582 
00BF: 12@ = current_time_hours, 13@ = current_time_minutes 
if and
  12@ >= 6 
  20 > 12@ 
else_jump @Noname_354 
02E3: 2@ = car 1@ speed 
2@ *= 4.0 
03F0: enable_text_draw 0 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 16 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
03E3: set_texture_to_be_drawn_antialiased 1 
074B: draw_texture 15 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255 
if 
03C9:   car 1@ damaged 
else_jump @Noname_126 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 19 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
jump @Noname_126 

:Noname_354
wait 0 
if and
   Actor.Driving($PLAYER_ACTOR)
  $Active_Interior == 0 
else_jump @Noname_582 
00BF: 12@ = current_time_hours, 13@ = current_time_minutes 
if or
  12@ >= 20 
  6 > 12@ 
else_jump @Noname_126 
02E3: 2@ = car 1@ speed 
2@ *= 4.0 
03F0: enable_text_draw 1 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 17 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
03E3: set_texture_to_be_drawn_antialiased 1 
074B: draw_texture 18 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255 
if 
03C9:   car 1@ damaged 
else_jump @Noname_354 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 19 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
jump @Noname_354 

:Noname_582
wait 0 
03F0: enable_text_draw 0 
0391: release_txd_dictionary 
jump @Noname_4

Я его привёл к такому виду:

{$CLEO .cs}
0000: NOP 
//0A95: enable_thread_saving
while true
wait 0
0AAA: 25@ = thread 'DSKOOL' pointer
if and  //textures
  30@ == 0
  25@ == 0
  Actor.Driving($PLAYER_ACTOR)
  $Active_Interior == 0 
84C8:   not actor $PLAYER_ACTOR driving_flying_vehicle 
84A7:   not actor $PLAYER_ACTOR driving_boat 
  80DD: not actor $PLAYER_ACTOR driving_car_with_model #TAXI
  80DD: not actor $PLAYER_ACTOR driving_car_with_model #CABBIE
then 
03C0: 1@ = actor $PLAYER_ACTOR car 
0390: load_txd_dictionary "SPEED" 
038F: load_texture "STRELK" as 15 // Load dictionary with 0390 first 
038F: load_texture "CIF" as 16 // Load dictionary with 0390 first 
038F: load_texture "CIFN" as 17 // Load dictionary with 0390 first 
038F: load_texture "STRELKN" as 18 // Load dictionary with 0390 first
30@ = 1
{else
03F0: enable_text_draw 0 
0391: release_txd_dictionary
30@ = 0  }
end //textures


while 30@ == 1
wait 0 
    gosub @CutsceneCheck
        gosub @WideScreenCheck
00BF: 12@ = current_time_hours, 13@ = current_time_minutes 
if and
056E:   car 1@ defined 
  29@ == FALSE
  28@ == FALSE
  12@ >= 6 
  12@ <= 20 
then 
02E3: 2@ = car 1@ speed 
2@ *= 4.0 
03F0: enable_text_draw 0 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 16 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
03E3: set_texture_to_be_drawn_antialiased 1 
074B: draw_texture 15 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255
end 

if and
  29@ == FALSE
  28@ == FALSE
  12@ >= 20
then 
02E3: 2@ = car 1@ speed 
2@ *= 4.0 
03F0: enable_text_draw 1 
03E3: set_texture_to_be_drawn_antialiased 1 
038D: draw_texture 17 position 550.0 360.0 size 191.25 170.0 RGBA 255 255 255 255 
03E3: set_texture_to_be_drawn_antialiased 1 
074B: draw_texture 18 position 550.0 360.0 scale 191.25 170.0 angle 2@ color_RGBA 255 255 255 255 
end   

if// or
//30@ == 2
80DF:   not actor $PLAYER_ACTOR driving 
then
03F0: enable_text_draw 0
wait 1 
0391: release_txd_dictionary
30@ = 0
end

if or
  00DD: actor $PLAYER_ACTOR driving_car_with_model #TAXI
  00DD: actor $PLAYER_ACTOR driving_car_with_model #CABBIE 
then
03F0: enable_text_draw 0
wait 1 
0391: release_txd_dictionary
30@ = 0
end

end//30@ == 1

end



:CutsceneCheck
if 
    06B9:   cutscene_data_loaded 
then
    if 
        82E9:   not cutscene_reached_end
    then
        29@ = TRUE 
    end
else
    29@ = FALSE 
end
return 

:WideScreenCheck
0A8D: 27@ = read_memory 0xB6F065 size 4 virtual_protect 0 
if 
    27@ == 1 
then
    28@ = TRUE 
else
    28@ = FALSE 
end
return

Всё работает нормально, но вопрос в том, нужно ли оставлять 0A95: enable_thread_saving во втором случае? Насколько я понимаю нет, но чтоб точно быть уверенным...

Offline

#2733 17-11-2010 09:48

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Есть ли способ сделать так, чтоб педы не подходили к опр. Объекту? Обходили его или как бы боялись подойти?

Offline

#2734 17-11-2010 11:54

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Один вопрос

d88 wrote:

Есть ли способ сделать так, чтоб педы не подходили к опр. Объекту? Обходили его или как бы боялись подойти?

В цикле брать случайного педа из этой зоны и... как-то заставить уйти...

Offline

#2735 17-11-2010 13:26

Sw[ee]t
From: Нижний Новгород
Registered: 16-02-2009
Posts: 686
Website

Re: Один вопрос

... и если пед рядом с объектом - то заставить его уйти. другой вариант - тупо удалить.

Offline

#2736 17-11-2010 14:00

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

Re: Один вопрос

если у объекта есть КОЛ, педы его и так обойдут...а если нужно радиус побольше - тут думать нада в сторону чего-то наподобие опкода 022B)


GIMS developer

Offline

#2737 17-11-2010 15:47

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Самый простой способ произвести действия над педами - пройтись по пулу, выбирая из всех существующих педов тех, которые удовлетворяют заданным условиям. Заготовка кода для перебора пула такая:

if
    0AE1: 0@ = random_actor_near_point 0.0 0.0 0.0 in_radius 20.0 find_next 0 pass_deads 1 //IF and SET
then
    repeat
        if
            // сюда пишем условие, которому должен соответствовать пед
        then
            // сюда пишем действие, которое надо произвести над педом
            break // команда выхода из цикла. Ставим её, если надо произвести действие только над одним педом
        end
    until 8AE1: not 0@ = random_actor_near_point 0.0 0.0 0.0 in_radius 20.0 find_next 1 pass_deads 1 //IF and SET
end

Для машин или объектов заготовка будет такая же (отличие только в опкодах поиска 0AE2 - поиск транспорта, 0AE3 - поиск объектов). Нужно обратить внимание на значения флагов next в опкоде.
Что касается конкретной задачи. Если надо, чтобы педы боялись объекта, то можно сделать так, что как только пед попадает в зону, примыкающую к объекту, он в панике убегает из неё:

if
    0AE1: 0@ = random_actor_near_point 0.0 0.0 0.0 in_radius 20.0 find_next 0 pass_deads 1 //IF and SET
then
    repeat
        actor.StorePos(0@ 1@ 2@ 3@)
        05DA: AS_actor 0@ run_away_in_panic_from 1@ 2@ 3@ away_radius 30.0 timelimit -1 
    until 8AE1: not 0@ = random_actor_near_point 0.0 0.0 0.0 in_radius 20.0 find_next 1 pass_deads 1 //IF and SET
end

Last edited by Den_spb (17-11-2010 15:50)

Offline

#2738 17-11-2010 20:03

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

Re: Один вопрос

всё-таки, в ЕХЕ это всё уже есть...forbidden_for_(cars/peds)_cube


GIMS developer

Offline

#2739 17-11-2010 21:04

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Да дело в том что у меня и так несколько потоков которые то и дело захватывают педов в этом месте, и пул я там и так уже перебираю.
Короче делаю костёр-ловушку, если актёра туда толкнуть, он загорается (здесь и действует перебор пула). Но сам пед не должен туда идти, но в панике убегать тоже не должен, потому что ему дана команда атаковать игрока.
Попробую 022B, но сомневаюсь что он сработает на педа, атакующего игрока.

Offline

#2740 21-11-2010 06:04

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Мне нужно вывести текстуры на экран так, чтоб их центры совпадал с центром экрана. Как это рассчитать? При этом текстуры разные по размеру. Или придётся вручную для каждой текстуры высчитывать?

Offline

#2741 21-11-2010 08:47

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

Re: Один вопрос

ты чё тупишь опять??

узнай скриптовые размеры экрана(что-то чуть больше, чем 640х480) и подели на 2 - это и будет середина
координаты вывода текстуры - это координаты её центра


GIMS developer

Offline

#2742 21-11-2010 10:33

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

3Doomer wrote:

узнай скриптовые размеры экрана(что-то чуть больше, чем 640х480) и подели на 2 - это и будет середина

Вот это меня и интересует, вот именно это как узнать точно, а не что-то чуть больше, 640х480? И вообще, это у всех одинаково или может зависеть от расширения? Можно как-то занести размер экрана в переменные, и их разделить на 2?

Offline

#2743 21-11-2010 12:27

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Один вопрос

Размер экрана не зависит от разрешения и всегда равен 640 * 480

Offline

#2744 22-11-2010 13:08

mr.Andrei
Registered: 03-07-2010
Posts: 38
Website

Re: Один вопрос

Скажите, а есть какой-нибудь условный опкод, который проверяет, находится ли игрок на улице или в интерьере?
ЗЫ: дело в том, что мне надо, чтобы скрипт начинал работать только тогда, когда игрок на улице


SNKillers.net - всё о взломе и защите социальных сетей

Offline

#2745 22-11-2010 13:29

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Один вопрос

mr.Andrei wrote:

когда игрок на улице

:LABEL
wait 100
077E: get_active_interior_to $Active_Interior 
if
  $Active_Interior == 0
jf @LABEL

Last edited by ~AquaZ~ (22-11-2010 13:29)

Offline

#2746 22-11-2010 15:07

d88
Registered: 15-12-2009
Posts: 254
Website

Re: Один вопрос

Можно просто

if
$ACTIVE_INTERIOR == 0

без 077E:.

Last edited by d88 (22-11-2010 15:08)

Offline

#2747 22-11-2010 15:57

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

Re: Один вопрос

нельзя, переменная сама по себе не поменяется


GIMS developer

Offline

#2748 23-11-2010 06:18

Hardcore7
From: ЕКБ
Registered: 22-11-2010
Posts: 10

Re: Один вопрос

Ребята, я ничё ни понимаю об этом, но мне кажется вы сможете разьяснить мне 2 вопроса, которые меня оч сильно мучают.  1 Как правильно пользоваться sa limit adjuster? Как там правильно выставить пункт vehicles чтобы у меня были новые id для машин? Или хотябы какую нить ссылочку на tutorial дайте. За ранее спасибо!!!
2. Подскажите пожалуста, как можно поменять клавишу в cleo скрипте? Например, если у меня 2 скрипта использующих одну и ту же кнопку?
Всем за ранее огромное человеческое спасибо!!!

Offline

#2749 23-11-2010 06:55

~AquaZ~
Registered: 01-03-2010
Posts: 726

Re: Один вопрос

Hardcore7 wrote:

Подскажите пожалуста, как можно поменять клавишу в cleo скрипте? Например, если у меня 2 скрипта использующих одну и ту же кнопку?

В скрипте есть строка с key_pressed, обычно ближе к началу. перед key_pressed стоит опкод, например, 0AB0. Открываешь помощь по КЛЕО, слева выбираешь вкладку поиск и в поле вбиваешь опкод, нажимаешь поиск. Дальше, наверное, разберёшься.
P.S. Вся задача состоит в том, чтобы заменить число после key_pressed.

Offline

#2750 23-11-2010 08:30

Hardcore7
From: ЕКБ
Registered: 22-11-2010
Posts: 10

Re: Один вопрос

Во спасибо!!!! Домой приду поверю!!!!

Offline

Board footer

Powered by FluxBB