You are not logged in.
1)
{$CLEO} 0000: while true wait 0 if player.Defined($player_char) then if actor.Driving($player_actor) then 03C0: 0@ = actor $PLAYER_ACTOR car 0441: 1@ = car 0@ model 0AA7: call_function 0x4C5C80 num_params 1 pop 1 1@ 2@ // _getModelType //0AA7: call_function 0x4C5B60 num_params 1 pop 1 1@ 2@ // isModelBike 03F0: enable_text_draw 1 045A: draw_text_1number 5.0 5.0 GXT 'NUMBER' number 2@ end end end
где значения 2@ после вызова _getModelType
0 - car 1 - mtruck 2 - quad 3 - heli 4 - plane 5 - boat 6 - train ... ... 9 - bike 10 - bmx 11 - trailer
2)
значения 2@ после вызова isModelBike
8766721 - если модель байк
Offline
@kenking -
значения 2@ после вызова isModelBike
8766721 - если модель байк
странное значение, уверен, что здесь нет ошибки?
Offline
0AA7: call_function 0x4C5B60 num_params 1 pop 1 1@ 2@ // isModelBike 0B10: 2@ = 2@ and 0xFF if 2@ == true then // model is a bike else // model isn't a bike end
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
странное значение, уверен, что здесь нет ошибки?
Такое значение выводится на экран для всех байков.
Ну с поправкой DK22Pac код будет лучше.
Offline
Всем спасибо за разъяснения...
А автора никто не знает? Там тройка-четверка лимитов ломается, IDE, collisionmodels, colfiles, buildings.
Полезная штука, мне очень пригодилась, а то единственный аджастер, который ломал лимит, был от Sacky, а он ломает лимиты не через asi, ну это известно...
I know everything and nothing...
Offline
Так Ryosuke вроде жеж.
P.S. Случайно нажал на кнопку report вместо quick reply
Offline
Хм, похоже, что он - автор. Ладно, буду иметь ввиду.
А, кстати заметил у тебя в моде, вывод названий районов, одну проблемку, в исходнике, если посмотреть, позиция по x скорости машины всегда будет 0, так как ты не передаешь внутрь scm функции нужное значение переменной, там ты пишешь 14@, хотя ясное дело, по умолчанию, все переменные при начале функции обнуляются и 14@ становится 0.
I know everything and nothing...
Offline
@mfisto - Да, было такое, но я вроде исправил добавлением 0085: 14@ = 0@ в последней версии под widescreen fix.
Last edited by Sergey81 (15-06-2013 05:36)
Offline
@mfisto - Да, давно уже: http://www.gtagarage.com/mods/show.php?id=22187
Правда я так и не разобрался до конца с позиционированием текста в VC, поэтому на разных разрешениях эта самая позиция может немного отличаться. С текстурами эта проблема была решена scm-функцией, а тут лень было возиться, вроде работает около дела да и ладно.
Offline
@mfisto - В zonetext для gta 3 есть scm функция, вот она:
:getLabelOffset { Example: 05F5: call_scm_func @getLabelOffset 1 label @lbl store_to 0@ } if 0@ <> 0 then 05EC: 1@ = current_thread_pointer 1@ += 0x98 05E0: 1@ = read_memory 1@ size 4 virtual_protect 0 000C: 1@ -= 0@ else 1@ = 0 end 05F6: ret 1 1@
Last edited by Sergey81 (15-06-2013 19:49)
Offline
Хм, а в Васе тоже такое же смещение 0x98, иными словами, совпадают ли структуры потоков для 3 и Vice. Если да, то в базе, которую делал Alien, размер структуры вообще 0x88. Как ты это нашел тогда?
I know everything and nothing...
Offline
@mfisto - В VC незнаю, не проверял, но скорее всего различается смещение. А нашел обычным перебором.
Last edited by Sergey81 (16-06-2013 11:07)
Offline
Прочитать углы поворота машины можно стандартными опкодами, а установить - с помощью метода поворота матрицы:
0A97: 1@ = car 0@ struct 1@ += 0x14 0A8D: 1@ = read_memory 1@ size 4 virtual_protect 0 // получили адрес матрицы 1@ += 48 0A8D: 2@ = read_memory 1@ size 4 virtual_protect 0 // сохраняем значения эл-тов +48, +52, +56 в памяти т.к. метод поворота матрицы их обнуляет 1@ += 4 0A8D: 3@ = read_memory 1@ size 4 virtual_protect 0 1@ += 4 0A8D: 4@ = read_memory 1@ size 4 virtual_protect 0 1@ -= 56 0AA6: call_method 0x59B120 struct 1@ num_params 3 pop 0 0.0 0.0 1.57 // rot Z rot Y rot X (radians) - метод поворота матрицы 1@ += 48 0A8C: write_memory 1@ size 4 value 2@ virtual_protect 0 // восстанавливаем старое значение X-position 1@ += 4 0A8C: write_memory 1@ size 4 value 3@ virtual_protect 0 // восстанавливаем старое значение Y-position 1@ += 4 0A8C: write_memory 1@ size 4 value 4@ virtual_protect 0 // восстанавливаем старое значение Z-position
Offline
Спасибо за ответ. Ведь почти опкодами можно было обойтись, но нет, опкода для записи x к сожалению нет...
Вот тогда еще вопрос, можно ли для точки пути или может для любой на земле узнать подобное? Т.е. узнать углы x y z.
Last edited by mfisto (20-06-2013 15:48)
I know everything and nothing...
Offline
У точки углов нет, углы можно измерить либо между отрезками, либо между плоскостями.
Можно прочитать координаты текущей точки и следующей, а затем вычислить углы между отрезком, соединяющим эти точки и мировыми осями координат с помощью опкода 0604:
0604: get_angle_between_vectors_{a,b} 0@ 1@ and_{0,1}_store_to 2@
Вот как определяет ориентацию отрезка, соединяющего две соседние точки ж/д пути скрипт "animtrain":
if 09E3: train 0_Train on_forward_direction then 0087: 0_XResult = 0_X2 // (float) X1 Y1 Z1 - текущая точка, X2 Y2 Z2 - следующая точка 0087: 0_YResult = 0_Y2 // (float) 0087: 0_ZResult = 0_Z1 // (float) 0063: 0_XResult -= 0_X1 // (float) 0063: 0_YResult -= 0_Y1 // (float) 0063: 0_ZResult -= 0_Z2 // (float) else 0087: 0_XResult = 0_X1 // (float) 0087: 0_YResult = 0_Y1 // (float) 0087: 0_ZResult = 0_Z2 // (float) 0063: 0_XResult -= 0_X2 // (float) 0063: 0_YResult -= 0_Y2 // (float) 0063: 0_ZResult -= 0_Z1 // (float) end 0604: get_angle_between_vectors_{x,y} 0_XResult 0_YResult and_{0,1}_store_to 0_ZAngle // Z_angle 006B: 0_XResult *= 0_XResult // (float) 006B: 0_YResult *= 0_YResult // (float) 005B: 0_XResult += 0_YResult // (float) 01FB: 0_XResult = square_root 0_XResult 0604: get_angle_between_vectors_{z,a} 0_ZResult 0_XResult and_{0,1}_store_to 0_XAngle // X_angle
Ориентация отрезка, соединяющего две точки пути, задаётся только двумя углами - X и Z.
Last edited by Den_spb (20-06-2013 19:41)
Offline
знаю, в exe'шнике игры имеется процедура, могущая выполнять ассемблерный код, и адрес которой можно заменить на собственный. раньше всегда ей пользовался, но за год отсутствия практики, забыл ее адрес :-) кто-нибудь подскажет?
Offline
Offline
а как отнесется игра, ели в конструкции hex...end использовать команды процессоров i8086-i80286? (старый добрый DOS)
Offline
@Procion - какие например?
Offline
Ну, например, прерывания DOS, такие как int 20, int 27 и т.д.? ну а подавляющая часть команд оставлена для преемственности поколений
Offline