You are not logged in.
А ты смотрел, как в моем CarSpawner'е сделано?
Не проверял в клео, но должно работать...
В 0@ окажется указатель на нуль-детерминированную строку с именем машины. Со строкой в ее первозданном виде работать не получится. Используй функции вывода или заменяй через память GXT.
Э-ээ, попробую (в моем CarSpawner'е - в исходниках?)
0AB1: call_scm_func @CarNameByID 1 #landstal 0@
#landstal - что это, я так понял, изначально ид модели содержится в переменной 0@ и 0AB1: call_scm_func @CarNameByID выдаст указатель на эту строку ?
А выводить в клео через (например) text_1number ? так?
Offline
Э-ээ, попробую (в моем CarSpawner'е - в исходниках?)
да, которые я по твоей "заявке" менял. То есть, которые на C++ Builder.
0AB1: call_scm_func @CarNameByID 1 #landstal 0@
#landstal - что это, я так понял, изначально ид модели содержится в переменной 0@ и 0AB1: call_scm_func @CarNameByID выдаст указатель на эту строку ?
#landstal - это ID модели (входной параметр в функцию), просто число, в данном случае равное 400. После этой операции в 0@ окажется указатель на нуль-терминированную строку с именем машины ('Landstalker').
А выводить в клео через (например) text_1number ? так?
Выводить в клео при помощи функций, работающих со строками, а не с 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
Может не совсем в тему вопрос =
Вот нашелся адрес структуры TARGET PEDа (из скрипта в 1м посте).
1. Как определить это пешеход или созданный актор ?
2. Если это пешеход, то как получить его хэндл и отменить все его ПЕДовские задачи ?
Как будто он создан CreateActor. ("Родить" на его месте другого актора с такой же
моделью, не подходит, т.к. это будет бросаться в глаза)
Offline
Может не совсем в тему вопрос =
Вот нашелся адрес структуры 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
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
PIT:
$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
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@
у симана в консоли без хендлов все организовано, но спросить его кому-нибудь стоит
100 постов - 27 августа;
Offline
тут я сравниваю Z координату педа под целью и z координату
Как они могут быть равны? Пед вообще-то движется (анимация поднятых рук) и они не всегда совпадают.
Offline
тут я сравниваю Z координату педа под целью и z координату
Как они могут быть равны? Пед вообще-то движется (анимация поднятых рук) и они не всегда совпадают.
они будут равны, если пед один и тот же то есть случайный пед равен нацеленному, вернее их угол Z, хотя можно туда больше структур включить, лишь бы они были более уникальными, чем например здоровье, которое у всех педов в начале 100
100 постов - 27 августа;
Offline
По координатам в маленьком радиусе можно его хендл найти через 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
@Deniska - а если 05B9?
Получить актера под прицелом можно, но разбираться нужно. 073F не все педтипы отлавливает.
ЗЫ Есть один человек с готовым решением вопроса "как получить хэндл случайного педа". Этот человек - автор библиотеки клео и в частности опкода 0AB5, а также соавтор Interceptor'а.
Offline
Можно попробовать такой вариант:
: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
Возвращаясь к статусной строке, которую я просил... миссия "Лос сепулкросс", когда свит и наёмники перелазают через забор, вылет:
Сигнатура проблемы: Имя события проблемы: 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