#1 Re: Вопросы по скриптингу » Один вопрос » 14-12-2010 01:04

Когда то задавал этот вопрос.
Есть пед из трафика. Как промыть ему мозг ? Что бы он встал как вкопаный, как после
actor.create() и пустого DM.
Дело в том, что после любого задания, которое ему даётся (типа пойти туда-сюда,
проиграть аниму...) он всё равно прёт по своим делам. Вроде как к нему применили
05DE: AS_actor 54@ walk_around_ped_path
Как то можно закрыть ему все TASKи, которые он получил при генерации ?
Пробовал следующее:
1. Нашел нужного педа в трафике
2. Присвоил ему флаг уникальности
3. поставил ему EMPTY_DM (0) - нифига не помогло, он просто перестал реагировать
на плеера и остальных педов, но как пёр по своим педовским делам - так и пёр.
4. Пробовал 0687: clear_actor 0@ task = ессно тоже не помогло (я так понял этот
опкод отбивает у него желание исполнять только скриптовые TASKи)

Просто в некоторых ситуациях приходится создавать нового актора, причем чтоб он не был
виден в момент создания, т.к. это сильно бросается в глаза т.е. в 90% случаев за спиной плеера.
А по идее это должен быть пед из трафика.

#2 Re: Вопросы по скриптингу » Один вопрос » 12-12-2010 05:44

Если последний в логе - wait, то значит в момент вылета ни один скрипт (или поток мейна) не выполнялся. Скрипт в данном случае может быть косвенной причиной вылета (например, если написать и установить скрипт, удаляющий ближайшие к игроку объекты, а затем попытаться выстрелить из ракетницы, то игра вылетит, т.к. скрипт удалит ракету и возникнет ошибка в процессе, управляющем ракетами).

Да уж, косвенные причины тяжелее найти...
Ну ты прям ясновидящий на тему ракет. Как раз в этом месте они обильно юзаются акторами...
Спасибки - будем искать.

#3 Re: Вопросы по скриптингу » Один вопрос » 12-12-2010 01:18

Игра вылетает - вот лог.
Я так понял, что если запись заканчивается Waitом , то вылет, возможно не из за мэйна ?
Причем игра вылетает не на конкретном месте. А в любое время выполнения
одного из потоков. (кстати в лог этот поток почемто не записался)...

********************************************
 thread main
 Local variables dump:
 354189 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
********************************************

00048040: 00D6
  get numeric params: 1
    param 1 = 0

00048044: 0256
  get numeric params: 1
    param 1 = 0

00048049: 004D (&IFresult = True)
  get numeric params: 1
    param 1 = 48064 (&label: 00BF)

00048056: 09E8
  get numeric params: 1
    param 1 = 1

00048064: 00BF

00048072: 01BD

00048077: 008D

00048085: 008D

00048093: 0086

00048101: 0011
  get numeric params: 1
    param 1 = 30.00

00048111: 0011
  get numeric params: 1
    param 1 = 6.00

00048121: 0011
  get numeric params: 1
    param 1 = 0.50

00048131: 0059

00048139: 0002
  get numeric params: 1
    param 1 = 48036 (&label: 0001)

00048036: 0001
  get numeric params: 1
    param 1 = 0

*********************************
> Total opcodes: 24983560
> Logging finished: 1:01:59
  Powered by SCMLog v1.04
*********************************

#5 Re: Работа с памятью, EXE » Вопрос по памяти » 03-12-2010 04:52

Есть ли в структуре педов неиспользуемые игрой байты ?
Это нужно для отсечения ранее найденых педов + для записи туда каких либо данных.

И еще вопрос - как узнать был ли найденный актор создан из скрипта или это пед из трафика ?

#6 Re: Вопросы по скриптингу » Один вопрос » 31-10-2010 19:35

BoPoH wrote:

я в курсе что она превышает указанное значение, дело не в этом...как же объяснить понятнее...тут только показывать надо)) короче говоря, мне это нужно для моего мода...паркур мода...чтобы можно было перепрыгивать сальтами через заборы и не только, я придаю движение игроку опкодом 083С, а анимацию обездвиживаю...но проблема в том, что у меня анимация начинается с замаха, движение которого я оставляю, и убираю когда он должен подлетать...подлетание обеспечиваю тем самым опкодом (083С), через время замаха...время замаха подсчитать несложно, но если поставить wait с тем временем, то очень часто не попадает вовремя, а если фпс опустится скажем до 15, то он половину замаха сделает и подлетит, короче говоря опкод 083C сработает раньше чем надо...ну вобщем если непонятно, я могу скинуть примерчик))

А зачем тут время подсчитывать = жди до конца анимации замаха.

// тут начинаешь аниму замаха

while player.Defined($PLAYER_CHAR)
    wait 0
    if
     actor.Animation($PLAYER_ACTOR) == "ANIMA"
    jf break
    0613: 26@ = actor $PLAYER_ACTOR animation "ANIMA" time // от 0.0 до 1.0
    if
     not 26@ == 1.0 //  или можно например not 26@ > 0.98
    jf break
end

#7 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 17-07-2010 00:03

И еще о звуках = (ибо без них моды получаются пресными)
хорошо бы еще иметь проверку типа  "audiostream $AUDIO exist"  (существует ли аудио)
во извежании глюков после загрузки сэйвов. Без этого, конечно, можно обойтись,
но неплохо иметь в арсенале.
Ну и еще расширить опкод "0AAE: release_audiostream $AUDIO", чтоб с параметром -1
он выгружал все загруженые звуки. Это мелочь, но приятно.
Полным шиком был бы опкод типа "audiostream $AUDIO fade 1.0 to 0.0   1000 ms"
(типа сменить громкость от  1.0 до  0.0 за 1000 мс).

#8 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 16-07-2010 01:56

Вот спасибо. Теперь есть почти всё что надо для звуков.
И всётаки, если будет время, добавь возможность проиграть файл с определённого места.

кстати - версию ты обновил, но в меню СА осталось 4.1.1.25

#9 Re: Sanny Builder и CLEO » CLEO 4 для GTA San Andreas » 12-07-2010 00:33

Не срабатывает формат текст, например

0ACF: show_formatted_styled_text "%d + %d = %d" time 2000 style 1  2 2 4
выдаёт на экране "d + d = d"

а вот этот работает
0ACF: show_formatted_styled_text "This is %.4X opcode" time 2000 style 1 0x0ACF

(КЛЕО4.1.1.25 , ЕХЕ 14 383 616 байт)

--
+ маловато возможностей AudioStream. Например нельзя проиграть файл с
определённого места.

А еще не работает (или я не понял как использовать) зацикливание звука
0AC0: loop_audiostream $hMP3 flag 1

#10 Re: Модификации » снайперская винтовка » 06-10-2009 17:20

_Luft_ wrote:

Дениска а чето за файлы еще какието (3D_sound.aps , voice.aps и тд.) для работы скрипта со звуком?

Это файлы аудиоплеера для СА от Vityok SA MODer.

http://gtamaps.net/forum/index.php?showtopic=11969

#11 Модификации » снайперская винтовка » 29-09-2009 14:26

Deniska
Replies: 14

Модифицированная снайперская винтовка (GTA SA)

Стреляем с зажатым ШИФТОМ разрывательными зарядами (текст-подсказка присутствует).
Так же есть звуки выстрела и перезарядки.
Без ШИФТА - обычная винтовка.

http://denis-malina.narod.ru/mods/X_SNIPER.7z

#12 Re: Вопросы по скриптингу » Cleo 3 » 28-09-2009 16:50

Да, но перед тем как задать вопрос, я перепробовал все DM = не помогло.
А ЕХЕ для меня тёмный лес.

#13 Re: Вопросы по скриптингу » Cleo 3 » 28-09-2009 01:16

Kostyan wrote:

И ещё, когда я записываю в переменную прохожего и пытаюсь совершить с ним некоторые операции(заставить стоять и смотреть на Гг), он на мгновение поворачивается лицом к Гг, потом разворачивается и продолжает свой путь, как это исправить? (установка времени того сколько должен пед стоять и смотреть на Гг не помогает)

Пед на улице отличается от созданного актора.
Но наверняка можно из педа сделать актора.
Я как то задавал такой вопрос, но ответа не получил.
Так что присоединюсь к вопросу. Очень надо узнать.
(а пока выхожу из положения так = удаляю педа и на его месте
создаю актора с тойже моделью и углом поворота...
Плохо, т.к. если пед рядом и видим, то переход очень заметен)

#14 Re: Вопросы по скриптингу » Один вопрос » 11-09-2009 21:34

CraZZZy-GameRRR wrote:

Существует ли проверка момента выхода актёра из машины?

А может через адрес памяти ?

CPed +0x530 = [dword] Статус:
0 = покидает машину, падает с байка или что-то в этом роде

....
0A96: 0@ = actor $PLAYER_ACTOR struct
inc(0@,0x530)
0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0
if
 0@ == 0
then
    // Аокидает машину
end
....

Или может тут найдёшь http://gtamodding.ru/wiki/Адреса_Памяти … 0.B4.D1.8B

#15 Re: Вопросы по скриптингу » Помогите сделать дверь гаража. » 10-09-2009 14:50

lekar wrote:

Я сделал свой остров, поставил туда дом с гаражом(без двери, пока). Прописал гараж в IPL. Машины
сохраняются. Но как сделать что бы дверь открывалась когда к ней подходишь, как в других гаражах?
Тоесть мне нужен опкод который может двигать обьекты. И если можно пример скрипта с дверью.

Скриптинг тут НЕ нужен. (не совсем по адресу вопрос).
Если ты прописал сам гараж и тачки в нём сохраняются, то осталось сделать дверь.
1. В IDE дверь должна быть прорисана с флагом 2048 (например "5555, DVER, DVER_TXD, 120, 2048")
2. Дверь надо прописать в файле objects.dat = посмотри как прописана любая дверь СА и
сделай так еж.
3. Очень важно. При моделировании дверь должна быть сделана так, чтобы тачка
въезжала слева-направо при виде сверху. Потом уже в ИПЛ её можно вращать и
ставить к входу в гараж.
4. Тип её открывания прописан там, где прописан сам гараж (см. описание ИПЛ)

Теперь она должна открываться автоматически без всяких скриптов.
Скриптами можно её насильно заблокировать, разблокировать, открыть, закрыть и еще
разные примочки.Но для её работы скриптинг не нужен

#16 Re: Вопросы по скриптингу » Нужно осуществить лазерный прицел на снайперскую винтовку » 06-09-2009 20:56

Тоже интересно как это сделать без мат вычислений.
А так, вот примерный алгоритм вычислений, если
известна точка откуда будет выстрел и направление.
(примерно так у меня реализована лазерная пушка)

Основан на методе деления на 2. Но это больше
подходит для одиночного выстрела, иначе
будет притормаживать при высокой точности.

const
ITERATIONS = 8 // Точность 2^(ITERATIONS+1)
end

04C4: store_coords_to 1@ 2@ 3@ from_actor $PLAYER_ACTOR with_offset 0.0 1.0 0.6 // BULLET START POINT
04C4: store_coords_to 7@ 8@ 9@ from_actor $PLAYER_ACTOR with_offset 0.0 500.0 0.6 // BULLET MAX POINT

if
86BD:   not no_obstacles_between 1@ 2@ 3@ and 7@ 8@ 9@ solid 1 car 0 actor 0 object 0 particle 0
then
    for 0@ = 1 to ITERATIONS
        0087: 4@ = 1@  // Находим центр отрезка 
        005B: 4@ += 7@
        4@ /= 2.0
        0087: 5@ = 2@
        005B: 5@ += 8@
        5@ /= 2.0
        0087: 6@ = 3@
        005B: 6@ += 9@
        6@ /= 2.0  
        if
        86BD:   not no_obstacles_between 1@ 2@ 3@ and 4@ 5@ 6@ solid 1 car 0 actor 0 object 0 particle 0
        then
            0087: 7@ = 4@ // Если пересекается на 1й половине
            0087: 8@ = 5@ // То дальше берём 1й отрезок
            0087: 9@ = 6@
        else
            0087: 1@ = 4@ // Иначе берём 2й отрезок
            0087: 2@ = 5@
            0087: 3@ = 6@      
        end            
    end
    
    0087: 4@ = 1@ // Еще раз делим на 2 для большей точности
    005B: 4@ += 7@
    4@ /= 2.0
    0087: 5@ = 2@
    005B: 5@ += 8@
    5@ /= 2.0
    0087: 6@ = 3@
    005B: 6@ += 9@
    6@ /= 2.0  

    // Координаты =  4@,5@,6@
else
// Нет пересечений
end

#17 Re: Модификации » Консоль. Вывод полезной информации » 06-09-2009 14:54

По координатам в маленьком радиусе можно его хендл найти через 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 ? (А то вдруг это уже актор...)

#18 Re: Модификации » Консоль. Вывод полезной информации » 05-09-2009 15:41

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

Board footer

Powered by FluxBB