You are not logged in.
{$CLEO} 0A95: enable_thread_saving #MINIGUN.Load() 038B: load_requested_models 032B: 0@ = create_weapon_pickup #MINIGUN type 15 ammo 9999 at -2014.4376 155.6977 27.6875 #MINIGUN.Destroy() 0A93: end_custom_thread
1) 038B принудительно загружает обьявленные модели. После его применения, проверять модели на загруженность не нужно.
2) В CLEO-скриптах нужно использовать 0A93: вместо end_thread.
3) Именовать скрипт не обязательно. CLEO именует скрипт названием cs-файла.
4) В CLEO-скриптах не желательно использовать свои глобальные переменные.
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
Народ, не подскажете, как реализовать кое-что?
Нужно подсчитать количество зон, подконтрольных определённой банде, и записать в переменную. Каким образом это сделать? И ещё, если можно, как узнать, кому принадлежит определённая зона?
Offline
@MrGROX - в памяти игры, начиная с 00BA1DF0 идет массив структур, 17 байтов каждая, в которых хранится информация о каждой зоне. Структура примерно следующая:
.data:00BA1DF0 ZoneExtraInfo db ? ; DATA XREF: sub_443B00+5Fr .data:00BA1DF0 ; sub_443B00+13Br ... .data:00BA1DF0 ; Size(17) * Count (380) = 6460 .data:00BA1DF0 ; +00 gang density[10] .data:00BA1DF0 ; +10 wealth? .data:00BA1DF0 ; +11 RGBA .data:00BA1DF0 ; +15 pedgroup .data:00BA1DF0 ; +16 unknown
Нужный(?) параметр это первое поле структуры +00 gang density[10]. Это десятибайтовый массив, в котором прописываются значения density для каждой банды в данной зоне. Эти значения устанавливаются опкодом
076C: set_zone 'ELCO1' gang 2 density_to 40
Подсчет примерно следующий. Начальный адрес для чтения равен 00BA1DF0 + ID нужной банды (есть в справке F12). Читаем 1 байт, сверяем с нужным значением (100(?)), если равно, то текущая зона принадлежит этой банде. Прибавляем к адресу 17 и повторяем все заново.
Offline
Так, а у меня почти нубский вопрос...
Как организована загрузка игры с точки зрения текстур и использования памяти?
Вот текстуры (интересуют прежде всего текстуры карты) в игре бывают в .txd контейнерах и .img архивах... Про загрузку .img писали в теме по mpack'ам, если не ошибаюсь, что они сами не грузятся, а только их заголовки (содержание)... А как с .txd дела обстоят? Они динамически подгружаются в зависимости от того, где игрок? Или они (ссылки на них) постоянно где-то в памяти висят?
Я это к чему, собственно... Я вот тут вычитал неведомый мне до того способ... И возник у меня вопрос, а нельзя ли всю карту по наследству generic сделать (то есть сделать-то можно, но что с игрой и fps будет мне не понятно)...
И, встати, вообще, что дает этот самый generic?
upd. Надеюсь использование латиницы сделает вопрос понятнее... И ссылку позаметнее сделал...
Last edited by Yoda (26-08-2013 20:40)
Try not. Do or do not, there is no try.
Offline
Offline
Ну, загрузка текстур происходит один раз в память. Интенсивное использование текстур не означает их постоянную загрузку. Они уже есть в памяти и к ним игра обращается в нужное время.
Хм... Есть у меня сомнения по этому поводу... зачем тогда игре стрим функции карты, если всё уже в памяти? Ну да ладно...
У меня очередной нубский вопрос... Просто интересно стало, без каких-либо претензий или что-то такое... Вопрос к Seemann'у...
Я старый уже и других языков программирования, кроме бейзика, в школе не изучал... В советской школе в 80-х учили именно бейзик. Да и управляющие файлы ОС того времени - мс-дос писались на нём... Вот я на gtamodding.com вычитал, что прародителем SCM языка был бейзик. Так вот, в нём были командные слова и конструкции, которые сплошь и рядом встречаются в скриптинге для ГТА с использованием Санни... Но слова в нём изменены... Ну, например вместо GoTo используется Jump, или вместо On... используется If... Собственно вопрос: что это за язык лёг в основу Санни Билдера или почему слова изменены? Еще раз - нубский вопрос (гуманитарий я) из простого любопытства...
Try not. Do or do not, there is no try.
Offline
@Yoda - Первоначально Sanny Builder был калькой с Mission Builder. Весь язык был заимствован оттуда без каких-либо изменений (для совместимости со старыми скриптами).
Язык Mission Builder - это один из вариаций бейсика. На это указывает много признаков. Почему был взят именно такой вариант, я не знаю, собственно я пришел в скриптинг в 2003 году, когда уже был VCMB. Видимо, бейсик показался наиболее подходящим по духу "опкодным" скриптам игры. Оригинальные скрипты авторства R*, кстати, не сильно отличаются от бейсика.
Отдельные различия в наименовании команд вряд ли существенны. Вообще в чистом "опкодном" варианте, скрипты скорее ближе к ассемблеру, где также есть jmp, jf.
Между прочим, Mission Builder использовал не собственную IDE, а модифицированную IDE Powerbasic.
В Sanny Builder v2 язык скриптов изменялся в направлении Pascal (Delphi). Сейчас это смешение Basic+Pascal.
Offline
Я это к чему, собственно... Я вот тут вычитал неведомый мне до того способ... И возник у меня вопрос, а нельзя ли всю карту по наследству generic сделать (то есть сделать-то можно, но что с игрой и fps будет мне не понятно)...
И, встати, вообще, что дает этот самый generic?
Всю карту - можно. Можешь создать сотню TXD и прописать их как генерик. Все текстуры всё равно загрузятся единым массивом в память. Главное, чтобы на это памяти хватило. Это единственный минус. На стриминг особо не влияет (поиск текстуры в памяти компенсируется поиском TXD в IMG архиве, может быть поиск в оперативе будет происходить чуточку быстрее, х.з.).
Польза:
1. Не нужно лезть в IMG, его ребилдить при редактировании текстур.
2. Если карта содержит много повторяющихся текстур, то не нужно их дублировать в TXD.
3. Выигрыш в рендере всей карты целиком (при дальности свыше 800 у.е.)
4. Можно пихать всё что угодно - текстуры каров, педов, оружия и т.д. У меня карпак ЛСС на двиге ГТА3 полностью сидит на генерике (заняты все 70 слотов), никаких проблем с рендерингом не выявлено.
Offline
Не вопрос, но так, для справки: похоже что с драйверами 326.80(nvidia, beta) GTA SA не запускается совсем.
Offline
@Sergey81 - это последняя версия?
Offline
@Seemann - Пока что да, в статусе beta, я для SC Blacklist ставил. Хотя с 326.41 тоже не могу запустить.
UPD. Ан нет, был не прав, чистая SA запустилась. А с модами не хочет. Надо разбираться в чем причина.
UPD2. Помогло удаление set файла. Видимо что-то поломалось.
Last edited by Sergey81 (03-09-2013 12:15)
Offline
На стриминг особо не влияет (поиск текстуры в памяти компенсируется поиском TXD в IMG архиве, может быть поиск в оперативе будет происходить чуточку быстрее, х.з.).
А вот это ты зря. Если сравнивать скорости жёсткого диска и оперативной памяти, то разница выйдет примерно в 30 раз. Пропускная способность SATA 2.0 - 300 МБайт/сек. Пропускная способность DDR3 - около 10 ГБайт/сек. Всё завязывается на количестве оперативной памяти и файле подкачки - абсолютно всё в оперативной памяти не хранится - то, что не используется, сливается в файл подкачки на жёстком диске. Когда слитое снова необходимо - оно подгружается обратно в оперативную память. Поэтому, чем меньше объём оперативной памяти, тем чаще компьютеру приходится обращаться к жёсткому диску, что существенно снижает скорость работы приложения - возникают зависания в "тяжёлых" играх и т.п.
Википедия о файле подкачки
Offline
Если сравнивать скорости жёсткого диска и оперативной памяти, то разница выйдет примерно в 30 раз.
Ты не оцениваешь всю систему в целом. Во первых есть ещё видеокарта и ЦП, ОС с дровами и прочей всячиной. Во вторых указанные тобой теоретические значения скоростей интерфейсов на всю катушку используются крайне редко по понятным причинам. В третьих стриминг закорочен в экзэшнике под минимальную конфигурацию ПК, на топовом ПК и середнячке GTA3 будет работать одинаково (например известны случаи, когда GTA3 устанавливалась на крутой игровой комп и безбожно на нём тормозила).
Last edited by XEPOMAHT007 (04-09-2013 15:19)
Offline
Во вторых указанные тобой теоретические значения скоростей интерфейсов на всю катушку используются крайне редко по понятным причинам.
Даже несмотря на это, скорость работы оперативной памяти значительно превышает скорость работы жёсткого диска. При чём, практические скорости жёсткого диска уменьшаются сильнее, нежели практические скорости оперативной памяти. Кстати, часть из замедления работы с файловой системой составляет её фрагментация.
Во первых есть ещё видеокарта и ЦП, ОС с дровами и прочей всячиной.
Скорости, на которых способны работать ЦП и видеокарта, значительно превышают скорость работы того же жёсткого диска.
В третьих стриминг закорочен в экзэшнике под минимальную конфигурацию ПК, на топовом ПК и середнячке GTA3 будет работать одинаково (например известны случаи, когда GTA3 устанавливалась на крутой игровой комп и безбожно на нём тормозила).
Я тебе указал на твою неправоту относительно скорости поиска в оперативной памяти и скорости поиска в файловой системе, а не на то, что игра оптимизирована как-то не так.
Offline
@Seemann Спасибо.
@Voron295, @XEPOMAHT007
"Вы ещё подеритесь, горячие финские парни..."
Короче, если я правильно понимаю, лично на моём компе (P4, 2GHz, 1,25Gb Ram, NVidia 6200 512 Mb, WinXp SP3) всё это не имеет смысла... Даже перенос всех повторяющихся текстур карты San Andreas'а (а речь шла именно о нём) в один общий txd'шник прироста особого не даст... Скорее наоборот, ибо стриму в .exe'шнике быстрее подгружать картинки из разных txd'шников в img архиве, чем загружать оперативу одним generic... Единственное преимущество, которое я вижу, - экономия нескольких мегобайт места на жёстком диске, но с парой терабайтных винтов - это не имеет смысла...
Вопрос был вызван моим желанием сделать чистую и вычещенную от мусора установку SA. С удалением всех ненужных файлов, контейнеров, архивов и прочей лабуды от консольной версии, а также оптимизацией остающихся и нужных для игры файлов... Теперь этот вопрос закрыт. Спасибо.
Last edited by Yoda (05-09-2013 02:51)
Try not. Do or do not, there is no try.
Offline
Подброшу немного дров...
А зачем нужна вобще установка, если не учитывает конфигурацию компа (т.е. оптимизирует для него) для данной игры (компиляция промежду прочим позволяет учитывать только особенности данного проца (и то, я не уверен, что конкретного, а только данной серии/поколения)) ?
_А так-то все игры гта портативны...
Last edited by reute70 (05-09-2013 09:28)
Offline
Есть несколько задумок, но сам я плохо разбираюсь в работе с памятью игры. Если кто-нибудь знает, как можно это реализовать, ответьте, пожалуйста.
1. Можно ли отключить звуки, хранящиеся в определённом архиве? Хочу отключить выкрики CJ-я, которые звучат, когда он дерётся, выкидывает человека из машины и т.п. Все эти звуки находятся в audio\SFX\ SPC_PA. Внутри архива есть ещё несколько архивов - Bank_001, Bank_002 и т.д. до Bank_020. В них и находятся звуковые файлы с голосом CJ-я. Так вот, есть ли способ заглушить весь SPC_PA либо только некоторые Bank?
2. Можно ли убрать тень у определённого актёра и у игрока?
3. Можно ли у созданного актёра заменить модель на другую?
Заранее спасибо.
Offline
За правильность не ручаюсь, но так я делал в моде бензина под iOS:
:open_mainland 057C: (unknown) 0 016C: restart_if_wasted at -822.7 1157.9 10.1 4.0 016D: restart_if_busted at -659.5 760.4 10.5 133.0 016C: restart_if_wasted at -885.2 -470.4 12.1 276.0 016D: restart_if_busted at -871.9 -682.3 10.2 328.1 022A: remove_forbidden_for_peds_cube 189.8 230.3 0.0 248.0 258.5 30.0 022A: remove_forbidden_for_peds_cube -38.0 84.3 0.0 -102.3 95.1 30.0 01E7: remove_forbidden_for_cars_cube 189.8 230.3 0.0 248.0 258.5 30.0 01E7: remove_forbidden_for_cars_cube -38.0 84.3 0.0 -102.3 95.1 30.0 01E7: remove_forbidden_for_cars_cube 175.0 236.1 0.0 161.0 242.4 30.0 01E7: remove_forbidden_for_cars_cube 149.8 231.4 0.0 136.0 235.3 30.0 01E7: remove_forbidden_for_cars_cube 63.4 188.6 0.0 49.4 189.7 30.0 Object.Destroy($2183) 022A: remove_forbidden_for_peds_cube -214.6 -948.8 0.0 -258.7 -920.6 30.0 01E7: remove_forbidden_for_cars_cube -214.6 -948.8 0.0 -258.7 -920.6 30.0 Object.Destroy($2184) 022A: remove_forbidden_for_peds_cube -787.8 -519.4 10.0 -657.5 -475.2 20.0 01E7: remove_forbidden_for_cars_cube -787.8 -519.4 10.0 -657.5 -475.2 20.0 Object.Destroy($2180) $2180 = Object.Init(2444, -712.524, -489.428, 12.549) Object.RemoveFromMissionCleanupList($2180) Object.Destroy($2185) 022A: remove_forbidden_for_peds_cube -99.8 1041.9 0.0 -129.0 1097.4 30.0 01E7: remove_forbidden_for_cars_cube -99.8 1041.9 0.0 -129.0 1097.4 30.0 Object.Destroy($2182) 057D: play_bridge_status_mp3 1 014C: set_parked_car_generator $2245 cars_to_generate_to 101 014C: set_parked_car_generator $2268 cars_to_generate_to 101 014C: set_parked_car_generator $2243 cars_to_generate_to 101 014C: set_parked_car_generator $2244 cars_to_generate_to 101 022A: remove_forbidden_for_peds_cube -230.0 -464.5 10.0 56.85 -459.8 20.0 01E7: remove_forbidden_for_cars_cube -230.0 -464.5 10.0 165.85 -459.8 20.0 Object.Destroy($2181) return
Offline
@d88
по поводу первого пункта:
поищи опкод mute_actor и в качестве аргумента укажи игрока
помню, что такой есть, в SB среди наименованных должен быть
Last edited by arrd_0x (14-09-2013 09:34)
Offline
@d88
по поводу первого пункта:
поищи опкод mute_actor и в качестве аргумента укажи игрока
помню, что такой есть, в SB среди наименованных должен быть
Спасибо, мне это тоже пригодится, но в данном случае я хотел отключить только звуки из файла SPC_PA. Крики боли хранятся в другом файле, и мне надо, чтоб они остались, а этот код их тоже заглушает.
Offline