You are not logged in.
Долго думал, куда - бы эту темку, решил в форум Sanny Builder.
Всем известно, что в Sanny Builder 3 есть директива $INCLUDE ($I) (подробности в справке SB3). Для чего она может применяться? Вот пример: для стандартных констант и для сборников scm функций. Это очень удобно: например, INTERCEPTOR можно сохранить как инклуд в папке SB и пользоваться им, всего-лишь набрав строчку {$I Interceptor.txt}. Я за сегодня сделал пример инклуд-файла в SB. Он добавляет стандартные константы кодов клавиш управления игры и клавиш virtual key codes (имена взяты из стд. констант Borland, так что тем, кто работал в Delphi или Borland C++ Builder будет привычно), а также несколько scm-функций для считывания из памяти некоторые данные об актёре. Пример вызова:
0AB1: call_scm_func @GetActorRunningstate 1 $Player_Actor 0@
.
Архив с инклудами прикреплён к сообщению.
Их надо скопировать в корневую папку Sanny Builder 3 или в папку SB3\data\sa. Для использования в начале скрипта нужно набрать {$I stdconsts.txt}, {$I ActorUtils.txt}, {$I CarUtils.txt}, {$I Math.txt}.
Last edited by VcSaJen (22-09-2008 08:15)
[small][/small]
Offline
Отлично!
Есть правда несколько замечаний.
1. Список констант и функции нужно выделить в отдельные файлы. Если я захочу использовать имена кнопок, то это приведет к тому что в скрипт добавятся и функции, которые, возможно мне не понадобятся. Если мне понадобятся функции, я просто подключу еще один файл.
2. В функциях остро необходима проверка после 0A96 на то, что 0@ > 0. Если я передам в функцию указатель на "левого" актера, эта проверка спасет от вылета. Мы же делаем универсальные функции, не так ли?
3. Сами функции я бы именовал со словом Get (GetActorState), а весь файл, например, PedUtils.txt. Но это имхо.
Сразу вспомнилось, что я хотел сделать, чтобы по нажатию Ctrl+Space в списке выводились константы или метки не только из текущего файла, но и из инклудов, но руки не дошли. Обещаю в ближайшем релизе исправить эту оплошность, тогда и функциями и константами будет проще пользоваться.
Да, и я предложил бы прикрепить файлы в архиве прямо здесь в первом сообщении, и по мере необходимости обновлять их (удалять старые, крепить новые).
Offline
@Seemann - спасибо . Поправил в соответствии с замечаниями (файлы stdconsts.txt и ActorUtils.txt). Ещё я вчера забыл кнопку "0", это поправил. Добавил константы номеров оружия. Метку функции actor_Weapon_you_killed переименовал в GetActorLastDamageWeapon.
И кто-нибудь знает полный список номеров оружия? Ведь если например ездить на мотоцикле по встречной полосе и при столкновении CJ упал, то номер оружия, которым актёр повредился, будет 54 (нет в списке, там только оружие и ракеты). И ещё как можно по Pointer'у получить хэндл актёра, например по этому:
CPed +0x764 = [dword] Pointer to the ped that killed you
.
[small][/small]
Offline
Посмотри этот мод
http://sannybuilder.com/forums/viewtopi … 3712#p3712
Там есть комментарии к номерам оружия и то, как из указателя актера получить его хендл.
Offline
Потестил, придумывая самые изощрённые способы погибнуть. Вот список
дополнительных номеров (остальные - номера оружия), который возвращает функция
@GetActorLastDamageWeapon
31 - Прострелен автоматом Seasparrow'а (не только M4) 37 - горит (не только при поджигании огнемётом) 38 - прострелен пулями Апача (Hunter) (не только minigun) 47 - ? 48 - ? 49 - сбила машина 50 - зарублен лопастями вертолёта 51 - взрыв 52 - пули полицейского вертолёта 53 - тонет 54 - упал
[---]
Добавление:
Посмотрю, спасибо.
Last edited by VcSaJen (27-06-2008 06:47)
[small][/small]
Offline
Я бы переименовал функцию в GetActorLastDamageID, ибо это не только weapon
В список констант можно вынести и всякие части тела, погоду и т.п. из хелпа.
Offline
@Seemann -
В список констант можно вынести и всякие части тела, погоду и т.п. из хелпа.
Не очень часто используемые вынести в stdconsts.txt или в отдельный extconsts.txt?
Обновил инклуды, добавил функции Seemann (из той темы), и в stdconsts.txt добавил педтипы.
[---]
Float это 4, 8 или 10 байтов?
Last edited by VcSaJen (27-06-2008 12:15)
[small][/small]
Offline
Float - это 4 байта.
И я не вижу обновления в первом посте. Скачивается старая версия.
Offline
Действительно...
Обновил. (+погода и части тела)
[small][/small]
Offline
Обновил. (В CarUtils.txt добавил set массу и get иммунитеты, в stdconsts.txt добавил PED_EVENTS, добавил math.txt).
[small][/small]
Offline
Отмечу, что в Math.txt особой нужды в блоке @BuildStrStep нет. Цифру преобразовать в символ очень просто (любой символ ведь может быть представлен как число):
if 1@ > 9 then 0A8E: 6@ = 1@ + 0x37 else 0A8E: 6@ = 1@ + 0x30 end
так мы получим, например, из 1@ = 0, 6@=0x30 ('0'); из 1@=11, 6@=0x42 ('B').
Поэтому константы, BuildStrStep и некоторые переменные можно убрать.
после этого можно изменить выходную строку:
098b: 10@v = 10@v + 6@v
Кстати, сейчас, просматривая твой код, я понял, как можно передавать строки в функции и новые потоки - передавать ее как числа по частям (для коротких строк через 2 переменные, для длинных - через четыре):
1@s = 'BJ_0' 0AB1: call_scm_func @Pass 2 1@ 2@ ... :Pass 03E5: text_box 0@s // 0@s = 'BJ_0' 0AB2: ret 0
Offline
Эвенты не все. У меня есть еще немножко выдранного из кода (пока не проверялось), названия оригинальные, от R*
// CEventVehicleDamage => 0
// CEventVehicleCollision => 1
// CEventPedCollisionWithPed => 2
// CEventPedCollisionWithPlayer => 3
// CEventPlayerCollisionWithPed => 4
// CEventBuildingCollision => 6
// CEventCopCarBeingStolen => 16
// CEventRevived => 18
// CEventPedToChase => 25
// CEventPedToFlee => 26
// CEventAttractor => 27
// CEventVehicleToSteal => 28
EVENT_GUN_AIMED_AT = 31 //Направленность ?прожектора? на игрока -- направленность ЧЕГО?
// CEventScriptCommand => 32 // создается при назначении любго действия из скрипта
// CEventCarUndriveable => 45
EVENT_SHOT_FIRED_WHIZZED_BY = 49 //Актёра фотографируют -- вообще-то, это если мимо пролетела пуля
// CEventPlayerLockOnTarget => 78
// CEventPedOnCarRoof => 83
// CEventStuckInAir => 93
POTENTIAL_WALK - есть опасность наступить куда-то не туда (наткнуться на объект, войти в огонь и т.д.)
Со ScriptedAttractor (и вообще с механизмом аттракторов) я еще не разобрался, но описание точно неверно.
Last edited by listener (03-07-2008 10:50)
Offline
@Seemann - О, спасибо!
@listener - Добавлю. Комментарии не мои, они из справки SB. Я уже заметил, что они мягко говоря, некорректны. (например, EVENT_ACQUAINTANCE_PED_DISLIKE был подписан как "Актёр в ярости и уже нападает"!)
[---]
Добавление:
Не согласен с EVENT #0: это EVENT_NONE.
Начинаю тестировать. Нашёл какой-то #64: случается, когда актёр падает от струи воды пожарной машины.
Last edited by VcSaJen (04-07-2008 07:23)
[small][/small]
Offline
Вышло долгожданное обновление Include-скриптов. Нововведений немного: добавил дополнительные Virtual Key Codes, выкопанные в новой MSDN (кнопки препинания и "медиа" кнопки); ped events обновил; math.txt убрал из архива. Скачать можно из прикреплённого файла в первом посте.
[small][/small]
Offline