You are not logged in.
Не, я про те статы, что в pedstats.dat записаны. Например, создаю я актёра и нужно ему силу удара изменить.
Offline
вот нашёл интересный адрес - CPed +0x47C = Указатель на структуру анимации
можно ли отсюда как-то узнать название анимации?
и вообще научите пожалуйста, как этими адресами с CPed пользоваться))
вот мне например надо вот это - CPed +0x15C = Некторые статусы анимации:
* 0 = прыгает от земли
* 61 = ударяет
* 102 = остановился
* 154 = спринт (бежит с ускорением)
* 205 = бежит
и как же мне узнать что из этого сейчас выполняется?))
Offline
Прочитать структуру педа, затем, к полученному адресу прибавить 0x15C.
Прочитать получившийся адрес, сравнивать результат со значениями которые ты привёл выше.
Offline
спс, разобрался, только тут вот кое что непонятно:
CPed +0x14 = Указатель на структуру позиции в XYZ (и угол вращения)
* (CPed+0x14) +0x0 to +0x2C = [dword] матрица вращения
что это за матрица вращения и как её получить?))
я прибавил к структуре педа +0x14 и потом нужно ещё +0x2C прибавить? тут какой-то промежуток чтоли? +0x0 to +0x2C
Offline
Матрица - это двумерный массив, или проще говоря, прямоугольная таблица чисел ( 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
Подскажите пожалуйста, был у меня спидометр, найденный в сети, код его вот такой:
// 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
Есть ли способ сделать так, чтоб педы не подходили к опр. Объекту? Обходили его или как бы боялись подойти?
В цикле брать случайного педа из этой зоны и... как-то заставить уйти...
Offline
... и если пед рядом с объектом - то заставить его уйти. другой вариант - тупо удалить.
Offline
Самый простой способ произвести действия над педами - пройтись по пулу, выбирая из всех существующих педов тех, которые удовлетворяют заданным условиям. Заготовка кода для перебора пула такая:
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
Да дело в том что у меня и так несколько потоков которые то и дело захватывают педов в этом месте, и пул я там и так уже перебираю.
Короче делаю костёр-ловушку, если актёра туда толкнуть, он загорается (здесь и действует перебор пула). Но сам пед не должен туда идти, но в панике убегать тоже не должен, потому что ему дана команда атаковать игрока.
Попробую 022B, но сомневаюсь что он сработает на педа, атакующего игрока.
Offline
узнай скриптовые размеры экрана(что-то чуть больше, чем 640х480) и подели на 2 - это и будет середина
Вот это меня и интересует, вот именно это как узнать точно, а не что-то чуть больше, 640х480? И вообще, это у всех одинаково или может зависеть от расширения? Можно как-то занести размер экрана в переменные, и их разделить на 2?
Offline
Скажите, а есть какой-нибудь условный опкод, который проверяет, находится ли игрок на улице или в интерьере?
ЗЫ: дело в том, что мне надо, чтобы скрипт начинал работать только тогда, когда игрок на улице
SNKillers.net - всё о взломе и защите социальных сетей
Offline
когда игрок на улице
: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
Ребята, я ничё ни понимаю об этом, но мне кажется вы сможете разьяснить мне 2 вопроса, которые меня оч сильно мучают. 1 Как правильно пользоваться sa limit adjuster? Как там правильно выставить пункт vehicles чтобы у меня были новые id для машин? Или хотябы какую нить ссылочку на tutorial дайте. За ранее спасибо!!!
2. Подскажите пожалуста, как можно поменять клавишу в cleo скрипте? Например, если у меня 2 скрипта использующих одну и ту же кнопку?
Всем за ранее огромное человеческое спасибо!!!
Offline
Подскажите пожалуста, как можно поменять клавишу в cleo скрипте? Например, если у меня 2 скрипта использующих одну и ту же кнопку?
В скрипте есть строка с key_pressed, обычно ближе к началу. перед key_pressed стоит опкод, например, 0AB0. Открываешь помощь по КЛЕО, слева выбираешь вкладку поиск и в поле вбиваешь опкод, нажимаешь поиск. Дальше, наверное, разберёшься.
P.S. Вся задача состоит в том, чтобы заменить число после key_pressed.
Offline
Во спасибо!!!! Домой приду поверю!!!!
Offline