Простейший журнал заданий

Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
Больше
11 года 3 мес. назад - 11 года 3 мес. назад #77196 от DeadElf79
DE79's Quest System

Информация:

Автор: DeadElf79

Версия скрипта: 1.0.1

Версия мейкера: RPG Maker VX Ace

Описание:

Собственно, перенос моего же скрипта, написанного для XP (он используется в моем проекте, пока не публикую), на VX Ace.
Скрипт является простейшим потому как использует только стандартные окна и средства RGSS, требует для своей работы
минимум переключателей (можно использовать один для всех квестов) и не проверяет ход выполнения задания.

Особенности:

  • позволяет посмотреть полученные квесты

  • добавляет кнопочку во внутриигровое меню

    Установка:

    Установите весь приведенный ниже код на страницы, следующие друг за другом.

    Код:

    Сама квестовая система:
    Code:
    #================================================== #-------------------------------------------------- # # DE79 QUEST SYSTEM MODULE # #-------------------------------------------------- # Автор: DeadElf79 # Версия: 1.0.4 # История версий: # 1.0 # - Первая публикация # 1.0.1 # - Добавлено возвращение массива заданий # для сохранения # - Добавлена загрузка из хэш-таблицы # для загрузки из сохраненной игры # 1.0.2 # - Исправлена проверка видимости задания # - Добавлен метод set_switch # 1.0.3 # - Добавлен метод index, возвращающий # номер заданий по метке shrt # 1.0.4 # - Удалена необходимость обязательного # ввода хэш-таблицы в QS.add #-------------------------------------------------- # Простейший скрипт для добав- # ления квестов и проверки их # завершенности. # Скрипт не включает в себя моди- # фикацию для Scene_Menu. # ------------------------------------------------- # Пример добавления квеста: # QS.add({ # :name=>'Спасти принцессу', # :desc=>'Она находится в плену у коварного злодея', # :swit=>40, # :comp=>false, # :town=>'Корнелия', # :recv=>'Король' # }) # Просмотр данных о квесте: # QS[0][:shrt] # возвращает метку квеста (она используется при поиске) # QS[0][:name] # возвращает название квеста # QS[0][:desc] # возвращает описаниее квеста # QS[0][:swit] # возвращает номер переключателя, который отвечает за показ задания # QS[0][:comp] # возвращает статус готовности задания (true или false) # QS[0][:town] # возвращает город, в котором нужно сдавать задание # QS[0][:recv] # возвращает имя персонажа, который принимает выполненное задание # Примечания: # 1. Параметры :town и :recv могут использоваться для хранения # другого текста (не относящегося к их предназначению), # но при использовании DE79_QuestSystemMenu вам нужно # будет поменять соответствующие текстовые строки # для отображения нужной вам информации. # 2. Параметр :swit отвечает за то, будет ли # при использованиия DE79_QuestSystemMenu отображаться # задание в списке или же нет. Скрипт не проверяет, # выполнено ли задание на самом деле, делайте # эту проверку в соответствии со своими предпочтениями # и используйте QS[*НОМЕР КВЕСТА][:comp]=true, # в событии тогда, когда посчитаете, что задание # действительно завершено. # 3. Из пункта 2 следует, что переменная :comp не зависит от значения # какого-либо переключателя и ее значение хранится внутри модуля. # 4. Вы можете добавлять или изменять данные о квесте по условию в событии так: # QS.add({:name=>'Спаси принцессу!'}) # далее добавить условие, спасена ли принцесса (какой-нибудь переключатель) # QS[QS.last][:name]='Спас? Верни ее в замок!' # В данном случае QS.last возвращает номер последнего занесенного в систему # квеста. Будьте осторожны с этим. Используйте QS.find[*МЕТКА КВЕСТА (:shrt)*], # если между получением последнего задания и его измением может быть получение # какого-нибудь другого задания: # QS.find('qu_0')[:name]='Спас? Верни ее в замок!' #-------------------------------------------------- #================================================== # Добавляет метод to_b для простейшей конвертации # в булевые значения (true и false) class Fixnum def to_b return self!=0 ? true : false end end # Добавляет метод для совместимости class TrueClass def to_b true end end # Добавляет метод для совместимости class FalseClass def to_b false end end # Основной модуль для работы с системой # квестов от DeadElf79 module QS class << self # Возвращает хэш-таблицу данных о задании # под номером, указанным в параметре index # Если элемента массива под номером index # не существует, возвращает пустую # хэш-таблицу {} def [](index) @data||=[] return {} if @data.nil? return {} if !index.between?(0,@data.size-1) return @data[index] end # Добавляет новое задание. Переменная hash принимает # значение, относящееся к классу Hash и ничего более. def add(hash={}) return if !hash.is_a? Hash @data||=[] @data<<{ :shrt=>(hash.include?(:shrt) ? hash[:shrt].to_s : "qu_#{@data.size}"), :name=>(hash.include?(:name) ? hash[:name].to_s : '' ), :desc=>(hash.include?(:desc) ? hash[:desc].to_s : '' ), :swit=>(hash.include?(:swit) ? hash[:swit].to_i : 001 ), :comp=>(hash.include?(:comp) ? hash[:comp].to_b : false ), :town=>(hash.include?(:town) ? hash[:town].to_s : '' ), :recv=>(hash.include?(:recv) ? hash[:recv].to_s : '' ), } end # Удаляет задание по указанным номеру или метке (переменная :shrt). def remove(ios) return if @data.nil? case ios.class when Fixnum return if !ios.between?(0,@data.size-1) @data-=[@data[ios]] when String return if !include?(ios) index=0 @data.each{|hash| index+=1 break if hash[:shrt]==shrt } @data-=[@data[index]] end end # Проверяет наличие задания в общем списке заданий по его метке. def include?(shrt) return false if @data.nil? return false if @data.size==0 @data.each{|hash| return true if hash[:shrt]==shrt.to_s } false end # Возвращает значение TRUE, если задание было выполнено # (то есть переменная :comp приняла значение TRUE). def complete?(shrt) return false if @data.nil? return false if @data.size==0 @data.each{|hash| if hash[:shrt]==shrt.to_s return true if hash[:comp]==true end } false end # Возвращает true, если переключатель, номер которого указан в :swit # принял состояние TRUE (ВКЛ). def show?(index) return false if !global_variables.include?(:$game_switches) return false if $game_switches.nil? return if @data.nil? @data.each{|q| if q[:shrt]==index[:shrt] return true if $game_switches[q[:swit].to_i]==true end } false end # Задает номер переключателя, при включении которого # задание будет показано в списке. def set_switch(index,switch) return false if @data.nil? return if !index.between?(0,@data.size-1) @data[index][:swit]=switch.to_b end # Задает город, в котором нужно сдать задание под номером, указанным # в переменной index. def set_town(index,string) return false if @data.nil? return if !index.between?(0,@data.size-1) @data[index][:town]=string.to_s end # Задает имя персонажа, который будет принимать выполенное задание # под номером, указанным в переменной index. def set_receiver(index,string) return false if @data.nil? return if !index.between?(0,@data.size-1) @data[index][:recv]=string.to_s end # Возвращает номер последнего элемента в списке заданий. def last @data.index(@data.last) end # Метод находит задание по соответствующей метке (:shrt) # и возвращает хэш-таблицу найденного задания. # Если задание найдено не было, возвращает # пустую хэш-таблицу. def find(shrt) return {} if @data.nil? if include?(shrt) @data.each{|hash| return @data[@data.index(hash)] if hash[:shrt]==shrt.to_s } end {} end # Метод находит задание по соответствующей метке (:shrt) # и возвращает номер задания в списке. # Если задание найдено не было, возвращает -1. def index(shrt) return {} if @data.nil? if include?(shrt) @data.each{|hash| return @data.index(hash) if hash[:shrt]==shrt.to_s } end -1 end # Метод, аналогичный Array.each, позволяет производить # работу над всеми заданиями, существующими в модуле. # Два примера кода действуют одинакова: # for index in 0...QS.last # QS[index][:comp]=true # end # # QS.each{|qu| # qu[:comp]=true # } # Метод может принимать блок в качестве параметра. def each return if @data.nil? @data.compact.each {|hash| yield hash } if block_given? end # Метод возвращает все # созданные задания, # которые имеются в модуле. def save array=[] @data||=[] @data.each{|hash| array<<hash } array end # Загружает данные о созданных заданиях # из массива. Применяется при загрузке # сохраненной ранее игры. def load(d) @data.clear if !@data.nil? @data=d end end end
    Аддон: меню к ней
    Code:
    #================================================== #-------------------------------------------------- # # DE79 QUEST SYSTEM MODULE # Addon: Menu # #-------------------------------------------------- # Автор: DeadElf79 # Версия: 1.0.1 # История версий: # 1.0 # - Первая публикация # 1.0.1 # - Устранен вылет при пустом списке # заданий (спасибо, Subzeroy) # Требует для работы: # * DE79 QUEST SYSTEM MODULE # Желательно для использования с: # * DE79 QUEST SYSTEM MODULE Addon: Menu #-------------------------------------------------- # Добавляет меню для показа # списка заданий. Не требует # настроек. #-------------------------------------------------- #================================================== # Добавленяет аттрибут "чтение/запись" # для переменной list в составе класса class Window_Selectable < Window_Base attr_accessor :list end # Добавляет строки для окна # описания выбранного задания # для убодной замены на свои # Форматирование(цвет) поддерживается, # но имеет одну специфическую деталь: # символ \c в двойных кавычках # обычно превращается в нечто непонятное. # Используйте \\c для того, чтобы # не возникало проблемы с указанием цвета # текста. Или же заключайте строку # в одинарные кавычки. module Vocab DE79_qs_town = '\c[2]Куда сдавать:\c[0]' # одинарные кавычки DE79_qs_recv = "\\c[2]Кому сдавать:\\c[0]" # двойные кавычки DE79_qs_desc = "\\c[2]Описание:\\c[0]" end # Этот класс реализует отображение # отдельного меню со списком всех # заданий, для которых включены # указанные переключатели. # По умолчанию задание будет показано, # если включен переключатель # под номером один, если номер # переключателя не был задан отдельно. class DE79_QuestSystemMenu < Scene_MenuBase # Старт сцены с меню, # запуск создания всех окон def start super @last_index=0 create_quest_list_window create_quest_name_window create_quest_info_window end # Создание окна со списком заданий def create_quest_list_window @quest_list_window = Window_Command.new(0,0) @quest_list_window.width=240 @quest_list_window.height = Graphics.height @quest_list_window.back_opacity = 160 @quest_list_window.set_handler(:cancel, method(:return_scene)) index=0 QS.each{|qu| if QS.show?(QS.find(qu[:shrt])) @quest_list_window.add_command(qu[:name],qu[:shrt].to_sym,true) end index+=1 } @quest_list_window.create_contents @quest_list_window.draw_all_items @quest_list_window.select 0 end # Создание окна для отображения # названия выбранного задания def create_quest_name_window @quest_name_window = Window_Base.new(0,0,160,48) @quest_list_window.back_opacity = 160 @quest_name_window.x = @quest_list_window.width @quest_name_window.width = Graphics.width - @quest_list_window.width @quest_name_window.create_contents draw_quest_name end # Отрисовка информации # в окно, которое отображает # название текущего задания def draw_quest_name return if @quest_list_window.item_max==0 @quest_name_window.contents.clear @quest_name_window.draw_text(0,0,@quest_name_window.contents_width, @quest_name_window.contents.height,@quest_list_window.command_name( @quest_list_window.index)) end # Создает окно для вывода # описания задания, а также # информации о городе # и персонаже, если они были # указаны при создании квеста def create_quest_info_window @quest_info_window = Window_Base.new(0,0,160,48) @quest_info_window.back_opacity = 160 @quest_info_window.x = @quest_list_window.width @quest_info_window.y = @quest_name_window.height @quest_info_window.width = Graphics.width - @quest_list_window.width @quest_info_window.height = Graphics.height - @quest_name_window.height @quest_info_window.create_contents draw_quest_info end # Отрисовка описания # выбранного задания def draw_quest_info @quest_info_window.contents.clear return if @quest_list_window.list == [] hash=QS.find(@quest_list_window.list[@quest_list_window.index][:symbol]) offset=0 if hash[:town]!='' @quest_info_window.draw_text_ex(0,offset,Vocab::DE79_qs_town) @quest_info_window.draw_text_ex(0,offset+20,hash[:town]) offset+=40 end if hash[:recv]!='' @quest_info_window.draw_text_ex(0,offset,Vocab::DE79_qs_recv) @quest_info_window.draw_text_ex(0,offset+20,hash[:recv]) offset+=40 end @quest_info_window.draw_text_ex(0,offset,Vocab::DE79_qs_desc) @quest_info_window.draw_text_ex(0,offset+20,hash[:desc]) end # Обновление меню def update super update_info end # Обновление окон # с название и описанием # выбранного задания def update_info if @quest_list_window.index!=@last_index draw_quest_name draw_quest_info @last_index=@quest_list_window.index end end # Завершение сцены def terminate super dispose_all_quest_windows end # Удаление всех окон def dispose_all_quest_windows @quest_list_window.dispose @quest_name_window.dispose @quest_info_window.dispose end end
    Аддон: добавление кнопки во внутриигровое меню
    Code:
    #================================================== #-------------------------------------------------- # # DE79 QUEST SYSTEM MODULE # Addon: MainMenu # #-------------------------------------------------- # Автор: DeadElf79 # Версия: 1.0.0 # Требует для работы: # * DE79 QUEST SYSTEM MODULE # * DE79 QUEST SYSTEM MODULE Addon: Menu #-------------------------------------------------- # Добавляет команду вызова # меню заданий в основное меню # (класс Scene_Menu). #-------------------------------------------------- #================================================== # Измените значение на false, # если вы не хотите, чтобы меню заданий # было доступно для вызова из меню. # Эта настройка только выключает кнопку, # не удаляя ее из меню! ENABLE_DE79_QS_MENU = true # Добавляет название кнопки в общий словарь # для убодной замены module Vocab DE79_qs = 'Задания' end # Добавляет кнопку в окно общего меню class Window_MenuCommand < Window_Command # Создает алиас метода для обеспечения совместимости alias before_qs_add_original_commands add_original_commands # Метод, который был создан специально для # для добавления кнопок, вызывающих # меню из нестандартных скриптов def add_original_commands before_qs_add_original_commands add_command(Vocab::DE79_qs, :de79_qs, ENABLE_DE79_QS_MENU) end end # Добавляет обработку нажатия кнопки class Scene_Menu < Scene_MenuBase # Создает алиас метода для обеспечения совместимости alias before_qs_create_command_window create_command_window # Добавляет метод, который вызывается # при нажатии кнопки вызова меню заданий # (см. de79_QuestSystem - Menu) def create_command_window before_qs_create_command_window @command_window.set_handler(:de79_qs, method(:command_de79_qs)) end # Вызывает меню из скрипта # de79_QuestSystem - Menu def command_de79_qs SceneManager.call(DE79_QuestSystemMenu) end end
    Аддон: запись данных о квестах в сохранение
    Code:
    #================================================== #-------------------------------------------------- # # DE79 QUEST SYSTEM MODULE # Addon: Save/Load # #-------------------------------------------------- # Автор: DeadElf79 # Версия: 1.0.2 # История версий: # 1.0 # - Первая публикация # 1.0.1 # - Исправлены сохранение и загрузка # 1.0.2 # - Скрипт совместим с другими скриптами, # меняющими сохранение # Требует для работы: # * DE79 QUEST SYSTEM MODULE #-------------------------------------------------- # Добавляет возможность сохранения/загрузки # игры вместе с текущим состоянием квестов. #-------------------------------------------------- #================================================== module DataManager class <<self # Модификация метода сохранения alias de79qs_make_save_contents make_save_contents def make_save_contents contents = de79qs_make_save_contents contents[:de79_qs] = QS.save contents end # Модификация метода загрузки alias de79qs_extract_save_contents extract_save_contents def extract_save_contents(contents) de79qs_extract_save_contents(contents) QS.load contents[:de79_qs] end end end

    Скриншоты:
    Можно добавлять задания и форматировать их текст стандартными тегами

    А еще можно отключать видимость заданий и менять их описание прямо в процессе игры


    Скачать:
    Архив ZIP (1,3 МБ)
  • Последнее редактирование: 11 года 3 мес. назад пользователем DeadElf79.
    Спасибо сказали: I_LORD, Ren310, Jas6666, EvilWolf, zmeelov66, TheMaximGames, sondju

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77197 от DeadElf79
    Внимание: возможность сохранения и загрузки состояния квестов пока что не тестировалось! Прошу кого-нибудь это проверить хотя бы на демке!
    ВНИМАНИЕ: Спойлер!
    Последнее редактирование: 11 года 3 мес. назад пользователем DeadElf79.
    Спасибо сказали: EvilWolf

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    3 место Готв
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77198 от EvilWolf
    Ну что же. В скаченном архиве нашел 2 папки. Одна называется Deadelf79's Quest System, а другая Final Fantasy. Демка из первой папки не запускается, пишут ошибка синтаксиса. Вторая демка из второй папки запускается, но пока оставляет жалать лучшего, описание квеста и даже название квеста в левом столбике не появляется, хотя в правой длинной графе с названием квеста название появляется, но пока что некорректно, при этом если полистать список то одно название накладывается прямо поверх другого и получаются какие-то смешанные буквы. Надеюсь что ты просто перепутал папки и выложил не то, в противном случае скрипт пока очень-очень сырой.
    Скриншот
    ВНИМАНИЕ: Спойлер!


    Вести с полей. Прошло ещё 20 минут. Мне удалось запустить демку из первой папки. Пришлось удалить скрипт который отвечал за загрузку сохранений,сам я, увы, ничего в нем не понял по этому просто удалил. Демка запустилась, все отображается корректно. Но вот со скриптом сохранений тебе что-то придумать надо.
    Последнее редактирование: 11 года 3 мес. назад пользователем EvilWolf.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77200 от DeadElf79
    Так как дописывал скрипт в половине второго ночи, то и тестировать последние мелочи, вроде сохранения, у меня не было решительно никакого желания, оставил это дело на утро. Вот, настало утро, пойду делать багфиксы).
    Update
    Идея с записью данных о квестах в файл данных о сохранении временно приостановлена, в связи с тем, что мне нужно глубже вчитаться в документацию по Marshal.dump.
    Последнее редактирование: 11 года 3 мес. назад пользователем DeadElf79.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад #77201 от DeadElf79
    Загрузка и сохранение квестов в файл сохранения выполнены, демка обновлена, нужные кодовые страницы в шапке обновлены. А заодно я теперь чуть больше знаю о том, как происходит дамп в рубях ^_^

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    3 место Готв
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77203 от EvilWolf
    Все отлично работает, но теперь когда ты такаешь на журнал заданий когда он пустой он выдает ошибку. Т.е. если вначале демки на на табличку тыкнуть, а сразу в журнал полезть то будет ошибка. Не критично, но хотелось бы чтобы поправил.

    Взялся я за скрипт ещё раз, не понял как отключать квесты, у меня либо все квесты пропадают, либо ни одного не пропадает. Эльф сделай пожалуйста демку которая будет демонстрировать все функции скрипта, ну или хотя бы самые основные, а то непонятно пока как их отключать и почему они не отключаются. Справку читал, да.
    Последнее редактирование: 11 года 3 мес. назад пользователем EvilWolf.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
    Больше
    11 года 3 мес. назад #77218 от DK
    С позволения Эльфа...Если нужен простенький фикс вылета без единого задания, то вот. Замените в скрипте de79_QuestSystem - Menu
    Код:
    ВНИМАНИЕ: Спойлер!
    Спасибо сказали: Ren310

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад #77221 от DeadElf79
    О, кстати, я думал, что поборол этот вылет, добавив подобную проверку в основной скрипт, но оказалось, что и тут нужно было поставить. Спасибо, Subzeroy! Пойду обновлю в шапке)
    Спасибо сказали: DK

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
    Больше
    11 года 3 мес. назад #77229 от DK
    Я могу, конечно, ошибаться, но все же: ваши методы загрузки/сохранения списка заданий конкретно описывают метод. По-моему, в таком случае, Вы просто затираете alias других разработчиков. Скажем, выше Вашего скрипта есть еще какие-то, где идет сохранение параметров. Если ниже вашего скрипта обратится к ним по символу, то их нельзя будет получить, точно также и с загрузкой.
    Вот, как я использовал (хотя может это и не правильно):
    Code:
    alias denis_kyznetsov_dt_mngr_make_save_contents make_save_contents def make_save_contents contents = denis_kyznetsov_dt_mngr_make_save_contents # ваш код сохранения end
    Загрузка:
    Code:
    alias denis_kyznetsov_dt_mngr_extract_save_contents extract_save_contents def extract_save_contents(contents) denis_kyznetsov_dt_mngr_extract_save_contents(contents) # ваш код загрузки end

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77231 от DeadElf79
    subzeroy, а теперь внимательно прочитай, как написан метод сохранения в оригинальном коде. чтобы обойти их алиас, необходимо переписать метод в дружелюбном к алиасу виде (переменная contents в методе make_save_contents является сугубо локальной и алиасом ее уже не поймёшь, пробовал).
    Насчет загрузки - написать алиас вполне возможно. Но пока не будет поправлено сохранение, трогать не стану.
    Последнее редактирование: 11 года 3 мес. назад пользователем DeadElf79.
    Спасибо сказали: DK

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Разработчик Программист JavaScript Проект месяца 3 место Проект месяца 1 место Проект месяца 2 место Учитель Оратор Ветеран Даритель Стимкея 2 место Программист Ruby Паладин
    Больше
    11 года 3 мес. назад #77232 от DK
    Но я ведь не передаю contents никуда больше, а использую, как локальную:
    На примере моего скрипта Game_Time:
    ВНИМАНИЕ: Спойлер!

    в contents записываю contents полученный из предыдущей версии функции. Там же последняя строчка состоит из contents. Вот предыдущая функция и возвращает мне его, потом я записываю свое и опять даю возможность прочитать весь contents. Не очень я Вас понял.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад #77233 от DeadElf79
    Ага, я просто об этом не подумал. Ладно, дойдут вечером руки - поправлю, заодно посмотрю насчет ошибки с "удалением" из списка заданий, про которую мне вчера сказал волк.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад - 11 года 3 мес. назад #77705 от DeadElf79
    Этот день настал, эльф поправил ошибки и перезалил демку: Архив ZIP (1,3 МБ)
    Скрипты в первом посте будут обновлены в ближайшие пару минут.
    Upd: скрипты обновлены тоже :laugh: пользуйтесь на здоровье
    Последнее редактирование: 11 года 3 мес. назад пользователем DeadElf79.
    Спасибо сказали: Nalia, Ren310

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Проект месяца 1 место Программист Ruby Писатель 3 место 3 место Учитель Организатор конкурсов 1 место в Готв Ветеран Проект месяца 2 место
    Больше
    11 года 3 мес. назад #77742 от DeadElf79
    Добавил небольшое обновление в основной скрипт, теперь можно использовать метод QS.add без параметров вообще. Ссылка и обновленный скрипт в первом посту.

    Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

    Время создания страницы: 0.131 секунд
    Работает на Kunena форум