RolePlay-S

RolePlay-S 0.4.7

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
AleDerXan AleDerXan, кончено, понимаю твою логику, но по-хорошему вообще бы перерисовать HUD и выделить там место для категорий или листать, как хотел.

Lazi Ness Lazi Ness, идея интересная, такое проворачивал на JS и PHP, скрипт для сканирования и автоматического добавления кода на основе результата, не то чтобы бы сложная задача, думаю даже для Ruby.

Вот читаю вас, даже порой появляется какое-то некое желание вернуться к программированию, но искра уже потухла. Даже не знай, стар что ли стал для всего этого, просто упиваюсь постным существованием в последние годы и медленно растекаюсь чёрной и липкой жижей. Чёрт побери, я же ни строчки кода уже более года не писал!
Я терпеть не могу программирование, и сразу его невзлюбил, скукота невероятная! Поэтому я просто представляю, что это магия такая, внутри игры,))) или вроде того. А работать с программированием как есть совершенно невыносимо.
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Привет! Пытаюсь код написать, хочу упростить загрузку скриптов. Вот исходный:
Ruby:
$mod_load_script["Data/Batch/Action_CHSH_Masturbation.rb"]    = "ModScripts/_Mods/RolePlayS/Batch/Action_CHSH_Masturbation.rb"
$mod_load_script["Data/Batch/Command_Bath.rb"]                = "ModScripts/_Mods/RolePlayS/Batch/Command_Bath.rb"
$mod_load_script["Data/Batch/cuming_control.rb"]            = "ModScripts/_Mods/RolePlayS/Batch/cuming_control.rb"
$mod_load_script["Data/Batch/overcuming_control.rb"]        = "ModScripts/_Mods/RolePlayS/Batch/overcuming_control.rb"

но строк будет сотни, и я пытаюсь понять, как мне сканируя папку отделать имена файлов? Вроде делал что-то похожее уже но все равно не понимаю -___-

а, да, я помню про твой метод с загрузкой текста, но не хочу его использовать, во-первых потому половину не понимаю, и во-вторых, потому что ты его потом же вроде расширял на 3 страницы.))
Есть решение у меня:
Вот:
Ruby:
        $corsys_mod_name = "Corruption System"
        $corsys_modFolder = "ModScripts/_Mods/#{$corsys_mod_name}"
 
        FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }
        FileGetter.getFileList("#{$corsys_modFolder}/Data/Batch/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }
        FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }

ПС. Не потеряйтесь в слешах (/). Их расположение - важно.
Таким способом можно даже свои кастомные скрипты с уникальными названиями засунуть, и в коде вызывать их так, будто они находятся в папках игры.
И да, метод про текст - он про строки текста из папки Text, а не про скрипты. Понимать надо. Это разные вещи, это не то, это другое.
И я его расширил. Но там просто. Метод тот же что и с arpgskills.
Код игры делает из папки Text - хеш строк.
Я сделал так, чтоб такой же хеш делался из строк папки текст мода. И потом merge хеши.
Основная часть - предохранители, и исключения, чтоб ошибки не вылезали, когда игра будет пытаться загрузить модовский файл не только из папки мода, но и из своей.
А UMM - поменял эти функции, добавив в них на вход не только путь к файлу, но еще и какую-то хрень (я не разбирался и оставил ее без изменений). И просто научил код понимать, когда в функцию поступило две переменных, а когда - одна. И если поступило две, то работать по методу UMM, а если одна, то как обычно.

Я там еще полазю… Может есть способ сделать проще.
Это про строки.
А есть еще метод точечной замены одного на другое. Но там нужно конкретно указывать где текст рисуется, какие поступили параметры, итд итп…
Чтоб заменяло только тот текст, который надо, а не кучу всего подряд. Ты же не хочешь, чтоб все строки стали «Вын»? Любой текст стал «Вын»? Потому и нужно указывать точное расположение текста.
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Есть решение у меня:
Вот:
Ruby:
        $corsys_mod_name = "Corruption System"
        $corsys_modFolder = "ModScripts/_Mods/#{$corsys_mod_name}"
 
        FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }
        FileGetter.getFileList("#{$corsys_modFolder}/Data/Batch/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }
        FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb").each{|file|
            $mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
        }

ПС. Не потеряйтесь в слешах (/). Их расположение - важно.
Таким способом можно даже свои кастомные скрипты с уникальными названиями засунуть, и в коде вызывать их так, будто они находятся в папках игры.
И да, метод про текст - он про строки текста из папки Text, а не про скрипты. Понимать надо. Это разные вещи, это не то, это другое.
И я его расширил. Но там просто. Метод тот же что и с arpgskills.
Код игры делает из папки Text - хеш строк.
Я сделал так, чтоб такой же хеш делался из строк папки текст мода. И потом merge хеши.
Основная часть - предохранители, и исключения, чтоб ошибки не вылезали, когда игра будет пытаться загрузить модовский файл не только из папки мода, но и из своей.
А UMM - поменял эти функции, добавив в них на вход не только путь к файлу, но еще и какую-то хрень (я не разбирался и оставил ее без изменений). И просто научил код понимать, когда в функцию поступило две переменных, а когда - одна. И если поступило две, то работать по методу UMM, а если одна, то как обычно.

Я там еще полазю… Может есть способ сделать проще.
язык один, но почему-то у всех код всегда разный))))
у меня свет вырубили, и пока читал книжку понял, как это примерно должно выглядеть:
Ruby:
    game_folder = "Data/Batch/"
    mods_folder = "ModScripts/_Mods/RolePlayS/Batch/"

    FileGetter.getFileList(File.join(game_folder, "*.rb")).each do |source_path|
        rel_path = source_path.sub(game_folder, "")
        des_path = File.join(mods_folder, rel_path)
        $mod_load_script[source_path] = des_path
    end
самое странно, что он работает... теперь пытаюсь понять - почему.))
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
язык один, но почему-то у всех код всегда разный))))
у меня свет вырубили, и пока читал книжку понял, как это примерно должно выглядеть:
Ruby:
    game_folder = "Data/Batch/"
    mods_folder = "ModScripts/_Mods/RolePlayS/Batch/"

    FileGetter.getFileList(File.join(game_folder, "*.rb")).each do |source_path|
        rel_path = source_path.sub(game_folder, "")
        des_path = File.join(mods_folder, rel_path)
        $mod_load_script[source_path] = des_path
    end
самое странно, что он работает... теперь пытаюсь понять - почему.))
Хз. У меня простой метод. А у тебя куча сложностей…
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Ща расскажу:
FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb").each{|file|
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
}

FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb") — получить список файлов в папке
"ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
file.split("#{$corsys_mod_name}/") - поделить строку пути к файлу на массив. [0] - то что до названия мода. [1] - то что после названия мода и слеша. А там:
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[0] → ModScripts/_Mods/
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[1] → Data/HCGframes/event/ИМЯФАЙЛА.rb
И получается, что у меня вот тут:
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
Слева "Data/HCGframes/event/ИМЯФАЙЛА.rb"", а справа "ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb"
И это делается для всех файлов в папке "ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
 

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Хз. У меня простой метод. А у тебя куча сложностей…
разве?)) я так же считаю, мне совсем не понятны все эти массивы.)))
Ruby:
    game_folder    = "Data/Batch/"
    mod_folder    = "ModScripts/_Mods/RolePlayS/Batch/"
    
    FileGetter.getFileList(File.join(mod_folder, "*.rb")).each do |path_mod|
        # path_mod    → путь + файл из мода / path + file mod
        file_name = path_mod.sub(mod_folder, "")
        # file_name    → имя файла / file name only
        path_game = File.join(game_folder, file_name)
        # path_game    → путь + файл из игры / path + file game
        $mod_load_script[path_game] = path_mod
    end
Понял, в чем была проблема, мне нужно сканировать и работать от папки с модом, о не от игровой. Я перевернул формулу и теперь все отлично!))
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Ща расскажу:
FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb").each{|file|
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
}

FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb") — получить список файлов в папке
"ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
file.split("#{$corsys_mod_name}/") - поделить строку пути к файлу на массив. [0] - то что до названия мода. [1] - то что после названия мода и слеша. А там:
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[0] → ModScripts/_Mods/
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[1] → Data/HCGframes/event/ИМЯФАЙЛА.rb
И получается, что у меня вот тут:
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
Слева "Data/HCGframes/event/ИМЯФАЙЛА.rb"", а справа "ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb"
И это делается для всех файлов в папке "ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
Спасибо за информацию, у меня туго с массивами... -___- попробую разобрать и может совмещу 2 метода.))

Понял как это работает, но читать однородный текст очень трудно. А "/" принимается как разделитель массива?
 
Последнее редактирование:

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Ща расскажу:
FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb").each{|file|
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
}

FileGetter.getFileList("#{$corsys_modFolder}/Data/HCGframes/event/*.rb") — получить список файлов в папке
"ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
file.split("#{$corsys_mod_name}/") - поделить строку пути к файлу на массив. [0] - то что до названия мода. [1] - то что после названия мода и слеша. А там:
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[0] → ModScripts/_Mods/
ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb→split→[1] → Data/HCGframes/event/ИМЯФАЙЛА.rb
И получается, что у меня вот тут:
$mod_load_script[file.split("#{$corsys_mod_name}/")[1]] = file
Слева "Data/HCGframes/event/ИМЯФАЙЛА.rb"", а справа "ModScripts/_Mods/Corruption System/Data/HCGframes/event/ИМЯФАЙЛА.rb"
И это делается для всех файлов в папке "ModScripts/_Mods/Corruption System/Data/HCGframes/event/"
кстати! ты видел скрипты в папке Batch? там куча файлов с примерно одинаковым содержимым, мне пришло почти все (47) их переписывать. Ну в смысле менять переменные... Я не программист, но мне кажется, все это можно было реализовать проще... 🙃 Примерно раз в тясячу...
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Спасибо за информацию, у меня туго с массивами... -___- попробую разобрать и может совмещу 2 метода.))

Понял как это работает, но читать однородный текст очень трудно. А "/" принимается как разделитель массива?
Нет. Сейчас покажу как работает деление строки на массив строк.
Есть
строка = "Жил да был старичок и был этот старичок весьма крут"
массив = строка.split("старичок")
массив == ["Жил да был ", " и был этот ", " весьма крут"]
массив[0] == "Жил да был "
массив[1] == " и был этот "
массив[2] == " весьма крут"
Что указано в split - то превращается в разделитель. И собственно вообще исчезает из массива в каком либо виде.
Я указал разделителем - название мода. Оно в пути к файлу скрипта встречается один раз. Что после него то массив[1], что до - то массив[0].
Я просто взял путь к файлу в папке мода, и разделил его так, чтоб в [1] массива был путь идентичный таковому пути в игре.
 
Последнее редактирование:

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
И кстати.
Я доработал систему динамического поля черт.
Усё.
Робит.
Теперь, оно может стать основой для других модов. (Главное, чтоб либо они использовали его как требующийся мод, либо копировали код в себя - не внося изменений в названия глобальных переменных, чтоб другие моды использующие этот метод - не конфликтовали, для чего конкретно этот код должен быть абсолютно идентичен в разных модах, чтоб мульти-поле на которое они ссылаются - было одно для всех.)
 

AleDerXan

Модостроитель
Автор модов
Регистрация
20.06.2024
Темы
6
Сообщения
464
Реакции
221
Возраст
32
Оно теперь даже не хавает очки черт. И вообще красиво все…
 

Вложения

Dynamic Trait Field.zip
8,2 KB · Просмотры: 0

Lazi Ness

Модостроитель
Автор модов
Регистрация
29.05.2024
Темы
1
Сообщения
341
Реакции
265
Нет. Сейчас покажу как работает деление строки на массив строк.
Есть
строка = "Жил да был старичок и был этот старичок весьма крут"
массив = строка.split("старичок")
массив == ["Жил да был ", " и был этот ", " весьма крут"]
массив[0] == "Жил да был "
массив[1] == " и был этот "
массив[2] == " весьма крут"
Что указано в split - то превращается в разделитель. И собственно вообще исчезает из массива в каком либо виде.
Я указал разделителем - название мода. Оно в пути к файлу скрипта встречается один раз. Что после него то массив[1], что до - то массив[0].
Я просто взял путь к файлу в папке мода, и разделил его так, чтоб в [1] массива был путь идентичный таковому пути в игре.
Понятно.

А $corsys_mod_name это глобальная переменная? может, для скриптов из Batсh их использовать? ну, такие переменные. Буду 47 файлов регулировать парой переменных.))
 
Сверху Снизу