Автор Тема: SkinSwitcher  (Прочитано 100 раз)

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 100
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
SkinSwitcher
« : Октябрь 27, 2019, 07:33:12 pm »
Всем привет! :) Недавно начал тут работать над небольшим модом по выбору и покупке одежды в VC, но столкнулся с небольшой проблемой. Изначально планировал сделать так, чтобы мод можно было расширять, добавляя новые точки на карте через опкод 05F5, но приходится каждую точку добавлять в отдельный файл. Пожалуйста, подскажите, может, как-то можно сделать лучше?

Вот сам скрипт
https://yadi.sk/d/xHQ3O1kNX6cxxw

Видео с демонстрацией работы
https://yadi.sk/i/dqBpTPBJTKpbaA
https://yadi.sk/i/MfTsm4fdaCz1ow

Кстати, делаю ещё небольшую штуку, типа небольшого фреймворка. Его код есть в архиве с модом. Суть его в том, чтобы абстрагироваться от опкодов и сделать набор функций делающий всё самое необходимое одним вызовом опкода 05F5 с параметрам или без.
« Последнее редактирование: Октябрь 27, 2019, 10:53:45 pm от Prographer »

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 614
  • Репутация: +20/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: SkinSwitcher
« Ответ #1 : Октябрь 27, 2019, 10:38:18 pm »
Классный мод!
но приходится каждую точку добавлять в отдельный файл. Пожалуйста, подскажите, может, как-то можно сделать лучше?
В теории, можно как-то задать и менять через CLEO строку и потом при помощи неё подгружать изменяемые данные из ini, где точки будут обозначены примерно так:
[MAIN]
SQUANT = 2 // quantity of spots

[SPOT1]
X = 230.9363
Y = -1262.4741
Z = 20.1103
COMMERC = 0

[SPOT2]
X = 409.886
Y = 1037.4531
Z = 25.2999
COMMERC = 1

- и т.д. Т.е. изменяемой строкой будет ключ секции "SPOTx":

Код: Text
  1. 0AF0: 0@ = get_int_from_ini_file "cleo\skin_switcher.ini" section "MAIN" key "SQUANT"  // получаем общее кол-во точек
  2. 0006: 5@ = 0
  3.  
  4. :CYCLE
  5. 001D:   0@ > 5@
  6. jf @END
  7. 000A: 5@ += 1
  8.  
  9. // тут, в зависимости от текущего значения 5@, меняется строка 15@, от "SPOT1" до "SPOTx"(где x = 0@)
  10.  
  11. 0AF2: 1@ = get_float_from_ini_file "cleo\skin_switcher.ini" section 15@ key "X"
  12. 0AF2: 2@ = get_float_from_ini_file "cleo\skin_switcher.ini" section 15@ key "X"
  13. 0AF2: 3@ = get_float_from_ini_file "cleo\skin_switcher.ini" section 15@ key "X"
  14. 0AF0: 4@ = get_int_from_ini_file "cleo\skin_switcher.ini" section 15@ key "COMMERC"
  15. 05F5: call_scm_func @CreateSkinSwitcher params_count 4  1@ 2@ 3@ 4@
  16. jump @CYCLE
  17.  
  18. :END
  19. end_thread


. Но я не знаю, как сделать самое интересное - как править строки через CLEO...

Кстати, делаю ещё небольшую штуку, типа небольшого фреймворка. Он его код есть в архиве с модом. Суть его в том, чтобы абстрагироваться от опкодов и сделать набор функций делающий всё самое необходимое одним вызовом опкода 05F5 с параметрам или без.

Вообще - хорошая идея, должна прокатить. У меня с функциями CarRec не прокатило(даже с моей помощью, людям было слишком сложно пользоваться, и они просто забивали) возможно потому, что функции лежали просто отдельным текстовиком. До инклудов я тогда как-то не догадался ¯\_(ツ)_/¯

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 100
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: SkinSwitcher
« Ответ #2 : Октябрь 27, 2019, 11:15:58 pm »
Цитировать
Вообще - хорошая идея, должна прокатить. У меня с функциями CarRec не прокатило(даже с моей помощью, людям было слишком сложно пользоваться, и они просто забивали) возможно потому, что функции лежали просто отдельным текстовиком. До инклудов я тогда как-то не догадался ¯\_(ツ)_/¯
По-моему, достаточно удобно будет, например, создать педа. Сейчас для его создания нужно написать достаточно кода: загрузить модель, проверить её, и только после этого создавать. Для новичка это не очевидно, поэтому одной функции будет достаточно, которая просто вернёт хендл готового педа. Также это решит проблему с количеством локальных переменных. Пожалуй, создам репу на GitHub, чтобы каждый смог внести свой вклад.

Цитировать
. Но я не знаю, как сделать самое интересное - как править строки через CLEO...
Пожалуй, да. Это самый главный вопрос :)

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 614
  • Репутация: +20/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: SkinSwitcher
« Ответ #3 : Октябрь 28, 2019, 12:19:22 am »
По-моему, достаточно удобно будет, например, создать педа. Сейчас для его создания нужно написать достаточно кода: загрузить модель, проверить её, и только после этого создавать. Для новичка это не очевидно, поэтому одной функции будет достаточно, которая просто вернёт хендл готового педа. Также это решит проблему с количеством локальных переменных. Пожалуй, создам репу на GitHub, чтобы каждый смог внести свой вклад.
   Ну да, только всё равно нужно всё хорошенько обдумать, чтобы не возникла ситуация, когда для новичков "слишком сложно", а для опытных "слишком упрощенно, без свободы"(тот же спавн педов в оригинальном своем виде хорош оптимизацией ресурсов. Функция, в свою очередь, будет для каждого педа вызывать load requested models, что выльется в лаги и/или другие проблемы с производительностью, если нужно заспавнить сразу много педов). В этом плане, усидеть на двух стульях крайне сложно. Я из-за этого всё-таки решил делать свои опкоды: и у меня больше свободы, и людям, в случае чего, будет проще это использовать.
   Т.е. тут проблема в "рынке". Многие скриптеры Вайса уходят в программирование либо вообще из моддинга. Те же, кто остались, в основном делятся на тех, кто не сможет использовать сложные(пусть и функциональные) решения и тех, кто сможет, но им это не нужно. И только единицы будут готовы заморочиться как угодно лишь ради того, чтобы получить нужный функционал(я таким был - потом всё же перешел в категорию "создателей решений").
   В итоге, готовые простые решения разлетаются как пирожки, а всё, что чуть сложнее ковыряния ini - не уходит дальше просмотров на Youtube.
   Сейчас есть взрыв популярности GTA 3d-эры в Латинской Америке и Индии, но им зачастую, опять же, проще перескакивать процесс углубленного скриптинга сразу в программирование.
   Если же говорить про совсем-совсем новичков - знаю, что определенно есть существенный спрос на аналог DYOM для Вайса. Но это довольно масштабная разработка - никто за неё, скорее всего, не возьмется.
   А вот чего я не знаю - так это того, что в этой ситуации делать. Лично я пару лет назад решил окончательно забить на это и делать всё только для себя(своих проектов). И выкатывать в паблик лишь те вещи, что, так уж вышло, подходят и для ванильного вайса.

P.S. Я ни в коем случае не пытаюсь тебя отговорить от создания подобного инструмента. Просто будь готов, что если не продумаешь вопрос "рынка" - ты можешь получить тысячи просмотров на YouTube и даже сотню закачек, но 0 практических использований(как было у меня с MMS и CarRec).

Пожалуй, да. Это самый главный вопрос
   Есть опкод 0AD3(есть и в CLEO Вайса), он как бы и позволяет форматировать строки(типа, там должно быть не 15@, а 15@v), а потом пихать их куда заблагорассудится. Но я совершенно не копал эту тему(видел лишь когда-то примеры использования в SA, но уже не помню, где), а сейчас и времени на это не находится...
   Будет круто, если ты сможешь разобраться и отпишешься о результатах. Приложил к сообщению хэлп-файл CLEO4, там есть простенькое описание.
« Последнее редактирование: Октябрь 28, 2019, 12:58:39 am от Shagg_E »

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 100
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: SkinSwitcher
« Ответ #4 : Ноябрь 04, 2019, 11:22:56 am »
Запилено. Милости прошу опробовать ;)
https://github.com/PrographerMan/skin-switcher

Оффлайн Shagg_E

  • Главный Модератор
  • Постоялец
  • *****
  • Сообщений: 614
  • Репутация: +20/-0
  • Изобретательный Рукожопъ
    • Просмотр профиля
    • NewRockstar
Re: SkinSwitcher
« Ответ #5 : Ноябрь 05, 2019, 03:24:24 pm »
Нашел минутку затестить. Всё работает здорово, но из-за того, что камера в отеле не строго фиксирована, а стоит относительно игрока - иногда(в зависимости от прогресса прохождения) одежда может перекрывать игрока, а иногда - нет(на освещение не обращай внимание - это мое баловство). Да и сам шкаф просвечивает даже на твоем видео. Наверное, лучше камеру расположить по другую сторону от игрока. Хотя - в этом случае усложняется процесс написания таких точек...
Есть один вариант: каждые 200-300 миллисекунд записываются координаты игрока в специальные переменные. Перезаписываются эти координаты только в случае, если игрок ушел от предыдущих координат на метр. Должно быть 2 тройки координат: первые сменяют вторые, а вторые - первые, т.е. поочередная запись. Так вот, при заходе на маркер скрипт должен оценить, какие из этой пары координат находятся дальше от игрока, и плюхнуть туда камеру. Таким образом, никогда не возникнет ситуации, что камера расположена там, где её не могло быть(за стеной, например), поскольку камера всегда будет там, где игрок физически бывал, на расстоянии 1-2 метра.
« Последнее редактирование: Ноябрь 05, 2019, 03:28:44 pm от Shagg_E »

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 100
  • Репутация: +9/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Re: SkinSwitcher
« Ответ #6 : Ноябрь 05, 2019, 09:54:29 pm »
Действительно, косяк. Спасибо, исправлю :)