#26 27-08-2009 21:19

reute70
From: Средняя Волга
Registered: 22-08-2009
Posts: 182

Re: Консоль. Вывод полезной информации

Alien wrote:

А ты смотрел, как в моем CarSpawner'е сделано?
Не проверял в клео, но должно работать...
В 0@ окажется указатель на нуль-детерминированную строку с именем машины. Со строкой в ее первозданном виде работать не получится. Используй функции вывода или заменяй через память GXT.

Э-ээ, попробую (в моем CarSpawner'е - в исходниках?)
0AB1: call_scm_func @CarNameByID 1 #landstal 0@
#landstal - что это, я так понял, изначально ид модели содержится в переменной 0@ и 0AB1: call_scm_func @CarNameByID выдаст указатель на эту строку ?
  А выводить в клео через (например) text_1number ? так? smile

Offline

#27 03-09-2009 12:30

Alien
Registered: 12-10-2008
Posts: 564

Re: Консоль. Вывод полезной информации

reute70 wrote:

Э-ээ, попробую (в моем CarSpawner'е - в исходниках?)

да, которые я по твоей "заявке" менял. То есть, которые на C++ Builder.

reute70 wrote:

0AB1: call_scm_func @CarNameByID 1 #landstal 0@
#landstal - что это, я так понял, изначально ид модели содержится в переменной 0@ и 0AB1: call_scm_func @CarNameByID выдаст указатель на эту строку ?

#landstal - это ID модели (входной параметр в функцию), просто число, в данном случае равное 400. После этой операции в 0@ окажется указатель на нуль-терминированную строку с именем машины ('Landstalker').

reute70 wrote:

А выводить в клео через (например) text_1number ? так? smile

Выводить в клео при помощи функций, работающих со строками, а не с GXT. Смотреть этот пост.

EDIT
Хотя не, вру. Можно и через GXT.

:CarNameGXTByID
0@ *= 4
0@ += 0xA9B0C8
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
0@ += 0x32
0AB2: ret 1 0@
0AB1: call_scm_func @CarNameByID 1 #landstal 0@

Тогда в 0@ окажется указатель на GXT с именем машины. То есть в данном случае на "LANDSTAL".
Потом нужно записать GXT в стринговую переменную и можно выводить при помощи стандартных опкодов.

Last edited by Alien (03-09-2009 12:46)

Offline

#28 05-09-2009 15:41

Deniska
Registered: 23-08-2009
Posts: 18

Re: Консоль. Вывод полезной информации

Может не совсем в тему вопрос =
Вот нашелся адрес структуры TARGET PEDа (из скрипта в 1м посте).
1. Как определить это пешеход или созданный актор ?
2. Если это пешеход, то как получить его хэндл и отменить все его ПЕДовские задачи ?
Как будто он создан CreateActor. ("Родить" на его месте другого актора с такой же
моделью, не подходит, т.к. это будет бросаться в глаза)

Offline

#29 05-09-2009 17:40

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Консоль. Вывод полезной информации

Deniska wrote:

Может не совсем в тему вопрос =
Вот нашелся адрес структуры TARGET PEDа (из скрипта в 1м посте).
1. Как определить это пешеход или созданный актор ?
2. Если это пешеход, то как получить его хэндл и отменить все его ПЕДовские задачи ?
Как будто он создан CreateActor. ("Родить" на его месте другого актора с такой же
моделью, не подходит, т.к. это будет бросаться в глаза)

Можно попробовать записать ближайшего педа и проверить его pedtype
089F: get_actor 0@ pedtype_to 13@
00D6: if
84A4:   not  13@ == 7 // @ == any
004D: jump_if_false @

Offline

#30 05-09-2009 18:27

PIT
Registered: 08-09-2008
Posts: 224

Re: Консоль. Вывод полезной информации

yelmi wrote:
Deniska wrote:

Может не совсем в тему вопрос =
Вот нашелся адрес структуры TARGET PEDа (из скрипта в 1м посте).
1. Как определить это пешеход или созданный актор ?
2. Если это пешеход, то как получить его хэндл и отменить все его ПЕДовские задачи ?
Как будто он создан CreateActor. ("Родить" на его месте другого актора с такой же
моделью, не подходит, т.к. это будет бросаться в глаза)

Можно попробовать записать ближайшего педа и проверить его pedtype
089F: get_actor 0@ pedtype_to 13@
00D6: if
84A4:   not  13@ == 7 // @ == any
004D: jump_if_false @

парень спрашивает  про совсем другое. Я и Alien разбирали это в Один вопрос, но логичного решения как получить его хендл не нашли. Так что приходиться использовать структуры и call scm func , которые лучше спрашивать у listenerа или seemannа. Но наверняка есть способ превращения его в актёра.
Вот например вызов нападения педа на кого-то - AS_Actor_Attack                          .text    00620E30

Last edited by PIT (05-09-2009 18:42)


100 постов - 27 августа;

Offline

#31 05-09-2009 22:18

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Консоль. Вывод полезной информации

PIT:

Типы данных wrote:

$ActorHandle = Actor.Create(CivMale, #MALE01, 0.0, 0.0, 0.0)
Теперь хендл актера хранится в переменной $ActorHandle, и вы можете, используя ее, делать с ним все, что угодно. Хендл можно получить не только создавая нового актера (или еще что-нибудь). В игре существуют специальные опкоды, позволяющие "захватить" случайного прохожего и превратить его таким образом в актера.

Например, 089E: get_actor_in_sphere 3@ 4@ 5@ radius 5.0 handle_as 11@
Или клео вариант 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@.
Можно также воспользоваться кодом, Seemann на этом форуме где-то выкладывал. Целишься в прохожего, получаешь его хендл, а дальше уже с ним делаешь, что тебе угодно. В том числе и проверить его педтайп.
P.S. Если ты под понятием «получить хендл» подразумеваешь что-то другое, описывай подробнее, что именно.

Offline

#32 05-09-2009 23:13

PIT
Registered: 08-09-2008
Posts: 224

Re: Консоль. Вывод полезной информации

yelmi wrote:

PIT:

Типы данных wrote:

$ActorHandle = Actor.Create(CivMale, #MALE01, 0.0, 0.0, 0.0)
Теперь хендл актера хранится в переменной $ActorHandle, и вы можете, используя ее, делать с ним все, что угодно. Хендл можно получить не только создавая нового актера (или еще что-нибудь). В игре существуют специальные опкоды, позволяющие "захватить" случайного прохожего и превратить его таким образом в актера.

Например, 089E: get_actor_in_sphere 3@ 4@ 5@ radius 5.0 handle_as 11@
Или клео вариант 0AB5: store_actor $PLAYER_ACTOR closest_vehicle_to 0@ closest_ped_to 1@.
Можно также воспользоваться кодом, Seemann на этом форуме где-то выкладывал. Целишься в прохожего, получаешь его хендл, а дальше уже с ним делаешь, что тебе угодно. В том числе и проверить его педтайп.
P.S. Если ты под понятием «получить хендл» подразумеваешь что-то другое, описывай подробнее, что именно.

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

3@ = 2@ + 0x558
02DD: 4@ = get_random_ped_in_zone 'SAN_AND' with_pedtype_civilian -1 gang 1 criminal/prostitute 1 
if
4@ <> -1
then
0A96: 5@ = actor 4@ struct
6@ = 5@ + 0x558
0A8D: 7@ = read_memory 3@ size 4 virtual_protect 0
0A8D: 8@ = read_memory 6@ size 4 virtual_protect 0
if
7@ == 8@
then

код конечно нуждается в серьёзной доработке, к актёру обращаемся хендлом 4@
тут я сравниваю Z координату педа под целью и z координату случайного педа на улице, если они равны, значит хендл педа - 4@
у симана в консоли без хендлов все организовано, но спросить его кому-нибудь стоит smile


100 постов - 27 августа;

Offline

#33 05-09-2009 23:26

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

Re: Консоль. Вывод полезной информации

тут я сравниваю Z координату педа под целью и z координату

Как они могут быть равны? Пед вообще-то  движется (анимация поднятых рук) и они не всегда совпадают. crazy

Offline

#34 06-09-2009 08:15

PIT
Registered: 08-09-2008
Posts: 224

Re: Консоль. Вывод полезной информации

Sw[ee]t wrote:

тут я сравниваю Z координату педа под целью и z координату

Как они могут быть равны? Пед вообще-то  движется (анимация поднятых рук) и они не всегда совпадают. crazy

они будут равны, если пед один и тот же tongue то есть случайный пед равен нацеленному, вернее их угол Z, хотя можно туда больше структур включить, лишь бы они были более уникальными, чем например здоровье, которое у всех педов в начале 100 lol


100 постов - 27 августа;

Offline

#35 06-09-2009 14:54

Deniska
Registered: 23-08-2009
Posts: 18

Re: Консоль. Вывод полезной информации

По координатам в маленьком радиусе можно его хендл найти через 073F:......
(просто я думал можно проще это сделать)

.........
0@ = 300694          // TARGET
0085: 0@ = &0(0@,1i)
inc(0@, 0x79C)
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0

if
0@ > 0
then
    0085: 1@ = 0@ // (int) 
    inc(1@, 0x14)
    0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0
    inc(1@, 0x30)
    0A8D: 20@ = read_memory 1@ size 4 virtual_protect 0
    inc(1@, 0x04)
    0A8D: 21@ = read_memory 1@ size 4 virtual_protect 0
    inc(1@, 0x04)
    0A8D: 22@ = read_memory 1@ size 4 virtual_protect 0 
    073F: get_actor_in_sphere 20@ 21@ 22@ radius 0.4 with_pedtype_civilian 1 gang 1 criminal/prostitute 1 handle_as 2@
end
..........

Но основной вопрос не в этом.
А как "превратить" его в актора ? (А то после "073F: get_actor_in_sphere..." пешеход продолжает
вести себя как ПЕД т.е. прёт по своим делам. Присвоение ему всяких DecisionMaker не помогает,
ClearTask не помогает... Вобщем много чего пробовал)
И где в его сруктуре записано есть ли у него reference ? (А то вдруг это уже актор...)

Offline

#36 06-09-2009 17:59

Alien
Registered: 12-10-2008
Posts: 564

Re: Консоль. Вывод полезной информации

@Deniska - а если 05B9?
Получить актера под прицелом можно, но разбираться нужно. 073F не все педтипы отлавливает.
ЗЫ Есть один человек с готовым решением вопроса "как получить хэндл случайного педа". Этот человек - автор библиотеки клео и в частности опкода 0AB5, а также соавтор Interceptor'а.

Offline

#37 06-09-2009 18:10

yelmi
Registered: 10-12-2006
Posts: 134
Website

Re: Консоль. Вывод полезной информации

Можно попробовать такой вариант:

:FUCKU_ped
wait 0
00D6: if
0256:   player $PLAYER_CHAR defined 
004D: jump_if_false @FUCKU_ped
if
80DF:   not actor $PLAYER_ACTOR driving 
004D: jump_if_false @FUCKU_ped
04C4: store_coords_to 0@ 1@ 2@ from_actor $PLAYER_ACTOR with_offset 0.0 2.0 -0.5 
0A3E: unknown_get_actor_in_sphere 0@ 1@ 2@ radius 0.6 0.6 1.0 handle_as 17@ 
00D6: if 
8039:   17@ == -1 
004D: jump_if_false @FUCKU_ped
if
8611:   actor 17@ performing_animation "FUCKU" 
004D: jump_if_false @FUCKU_ped
0812: AS_actor 17@ perform_animation "FUCKU" IFP_file "PED" 4.0 loopA 1 lockX 0 lockY 0 lockF 0 time -1
09D5: unknown_get_actor 17@ unknown 345 flags 1 0 0 store_to 13@
jump @FUCKU_ped

правда у 0A3E: есть ограничения, на работает с педами в транспорте. Полученного педа не нужно удалять, игра сама об этом позаботится.

Offline

#38 04-11-2009 14:59

WinuX
Registered: 06-03-2009
Posts: 138

Re: Консоль. Вывод полезной информации

Возвращаясь к статусной строке, которую я просил... миссия "Лос сепулкросс", когда свит и наёмники перелазают через забор, вылет:

Сигнатура проблемы:
  Имя события проблемы:  APPCRASH
  Имя приложения:  gta_sa.exe
  Версия приложения:  0.0.0.0
  Отметка времени приложения:  427101ca
  Имя модуля с ошибкой:  cleo.asi
  Версия модуля с ошибкой:  3.0.9.50
  Отметка времени модуля с ошибкой:  2a425e19
  Код исключения:  c0000005
  Смещение исключения:  00016204
  Версия ОС:  6.1.7600.2.0.0.256.1
  Код языка:  1049
  Дополнительные сведения 1:  d68b
  Дополнительные сведения 2:  d68bd3b8282f5e72182bbd7e42e4d6c7
  Дополнительные сведения 3:  6c49
  Дополнительные сведения 4:  6c49d494190589b8dc6d7b57ccb74dfb

методом исключения установлено, что это из-за строки статуса.
Как исправить?

Offline

Board footer

Powered by FluxBB