Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Простейший журнал заданий

Простейший журнал заданий 9 года 3 мес. назад #77196

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • Проект месяца 2 местоПисатель 3 местоУчитель3 местоОрганизатор конкурсовВетеран1 место в ГотвПроект месяца 1 местоПрограммист Ruby
DE79's Quest System

Информация:

Автор: DeadElf79

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

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

Описание:

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

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

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

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

    Установка:

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

    Код:

    Сама квестовая система:
    #==================================================
    #--------------------------------------------------
    #
    #	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
    Аддон: меню к ней
    #==================================================
    #--------------------------------------------------
    #
    #	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
    Аддон: добавление кнопки во внутриигровое меню
    #==================================================
    #--------------------------------------------------
    #
    #	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
    Аддон: запись данных о квестах в сохранение
    #==================================================
    #--------------------------------------------------
    #
    #	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 МБ)
  • Последнее редактирование: 9 года 3 мес. назад от DeadElf79.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: I_LORD, Ren310, Jas6666, EvilWolf, zmeelov66, TheMaximGames, sondju

    Простейший журнал заданий 9 года 3 мес. назад #77197

    • DeadElf79
    • DeadElf79 аватар
    • Вне сайта
    • Звездный Страж
    • Сообщений: 3147
    • Спасибо получено: 2650
    • Проект месяца 2 местоПисатель 3 местоУчитель3 местоОрганизатор конкурсовВетеран1 место в ГотвПроект месяца 1 местоПрограммист Ruby
    Внимание: возможность сохранения и загрузки состояния квестов пока что не тестировалось! Прошу кого-нибудь это проверить хотя бы на демке!
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Последнее редактирование: 9 года 3 мес. назад от DeadElf79.
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: EvilWolf

    Простейший журнал заданий 9 года 3 мес. назад #77198

    • EvilWolf
    • EvilWolf аватар
    • Вне сайта
    • Просветлённый
    • Trap is Fap!
    • Сообщений: 426
    • Спасибо получено: 375
    • 3 место Готв
    Ну что же. В скаченном архиве нашел 2 папки. Одна называется Deadelf79's Quest System, а другая Final Fantasy. Демка из первой папки не запускается, пишут ошибка синтаксиса. Вторая демка из второй папки запускается, но пока оставляет жалать лучшего, описание квеста и даже название квеста в левом столбике не появляется, хотя в правой длинной графе с названием квеста название появляется, но пока что некорректно, при этом если полистать список то одно название накладывается прямо поверх другого и получаются какие-то смешанные буквы. Надеюсь что ты просто перепутал папки и выложил не то, в противном случае скрипт пока очень-очень сырой.
    Скриншот
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]


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

    Простейший журнал заданий 9 года 3 мес. назад #77200

    • DeadElf79
    • DeadElf79 аватар
    • Вне сайта
    • Звездный Страж
    • Сообщений: 3147
    • Спасибо получено: 2650
    • Проект месяца 2 местоПисатель 3 местоУчитель3 местоОрганизатор конкурсовВетеран1 место в ГотвПроект месяца 1 местоПрограммист Ruby
    Так как дописывал скрипт в половине второго ночи, то и тестировать последние мелочи, вроде сохранения, у меня не было решительно никакого желания, оставил это дело на утро. Вот, настало утро, пойду делать багфиксы).
    Update
    Идея с записью данных о квестах в файл данных о сохранении временно приостановлена, в связи с тем, что мне нужно глубже вчитаться в документацию по Marshal.dump.
    Последнее редактирование: 9 года 3 мес. назад от DeadElf79.
    Администратор запретил публиковать записи гостям.

    Простейший журнал заданий 9 года 3 мес. назад #77201

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

    Простейший журнал заданий 9 года 3 мес. назад #77203

    • EvilWolf
    • EvilWolf аватар
    • Вне сайта
    • Просветлённый
    • Trap is Fap!
    • Сообщений: 426
    • Спасибо получено: 375
    • 3 место Готв
    Все отлично работает, но теперь когда ты такаешь на журнал заданий когда он пустой он выдает ошибку. Т.е. если вначале демки на на табличку тыкнуть, а сразу в журнал полезть то будет ошибка. Не критично, но хотелось бы чтобы поправил.

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

    Простейший журнал заданий 9 года 3 мес. назад #77218

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 946
    • Спасибо получено: 1129
    • Программист RubyПроект месяца 2 местоДаритель СтимкеяУчительПроект месяца 3 местоПроект месяца 1 местоПаладинВетеранОраторПрограммист JavaScript
    С позволения Эльфа...Если нужен простенький фикс вылета без единого задания, то вот. Замените в скрипте de79_QuestSystem - Menu
    Код:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
    Администратор запретил публиковать записи гостям.
    За этот пост поблагодарили: Ren310

    Простейший журнал заданий 9 года 3 мес. назад #77221

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

    Простейший журнал заданий 9 года 3 мес. назад #77229

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 946
    • Спасибо получено: 1129
    • Программист RubyПроект месяца 2 местоДаритель СтимкеяУчительПроект месяца 3 местоПроект месяца 1 местоПаладинВетеранОраторПрограммист JavaScript
    Я могу, конечно, ошибаться, но все же: ваши методы загрузки/сохранения списка заданий конкретно описывают метод. По-моему, в таком случае, Вы просто затираете alias других разработчиков. Скажем, выше Вашего скрипта есть еще какие-то, где идет сохранение параметров. Если ниже вашего скрипта обратится к ним по символу, то их нельзя будет получить, точно также и с загрузкой.
    Вот, как я использовал (хотя может это и не правильно):
    		alias denis_kyznetsov_dt_mngr_make_save_contents make_save_contents
    		def make_save_contents
    			contents = denis_kyznetsov_dt_mngr_make_save_contents
    			# ваш код сохранения
    		end
    Загрузка:
    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
    Администратор запретил публиковать записи гостям.

    Простейший журнал заданий 9 года 3 мес. назад #77231

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

    Простейший журнал заданий 9 года 3 мес. назад #77232

    • DK
    • DK аватар
    • Вне сайта
    • Светлый дракон
    • DKPlugins
    • Сообщений: 946
    • Спасибо получено: 1129
    • Программист RubyПроект месяца 2 местоДаритель СтимкеяУчительПроект месяца 3 местоПроект месяца 1 местоПаладинВетеранОраторПрограммист JavaScript
    Но я ведь не передаю contents никуда больше, а использую, как локальную:
    На примере моего скрипта Game_Time:
    ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]

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

    Простейший журнал заданий 9 года 3 мес. назад #77233

    • DeadElf79
    • DeadElf79 аватар
    • Вне сайта
    • Звездный Страж
    • Сообщений: 3147
    • Спасибо получено: 2650
    • Проект месяца 2 местоПисатель 3 местоУчитель3 местоОрганизатор конкурсовВетеран1 место в ГотвПроект месяца 1 местоПрограммист Ruby
    Ага, я просто об этом не подумал. Ладно, дойдут вечером руки - поправлю, заодно посмотрю насчет ошибки с "удалением" из списка заданий, про которую мне вчера сказал волк.
    Администратор запретил публиковать записи гостям.

    Простейший журнал заданий 9 года 3 мес. назад #77705

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

    Простейший журнал заданий 9 года 3 мес. назад #77742

    • DeadElf79
    • DeadElf79 аватар
    • Вне сайта
    • Звездный Страж
    • Сообщений: 3147
    • Спасибо получено: 2650
    • Проект месяца 2 местоПисатель 3 местоУчитель3 местоОрганизатор конкурсовВетеран1 место в ГотвПроект месяца 1 местоПрограммист Ruby
    Добавил небольшое обновление в основной скрипт, теперь можно использовать метод QS.add без параметров вообще. Ссылка и обновленный скрипт в первом посту.
    Администратор запретил публиковать записи гостям.
    Модераторы: NeKotZima
    Время создания страницы: 0.326 секунд