Плохо! Плохо!:  0
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Механики, идеи от Джифорса.

  1. #1
    Местный Аватар для Gforce_Vtk
    Информация о пользователе
    Регистрация
    04.04.2016
    Адрес
    Волгоград.
    Сообщений
    171
    Записей в дневнике
    18
    Репутация: 26 Добавить или отнять репутацию

    По умолчанию Механики, идеи от Джифорса.

    Переношу всё из дневников из-за лимита символов... Чорт.

    Данные статьи рекомендуется читать новичкам, или тем, у кого нет идей.


    Магазин, использующий HP главного героя
    Можно использовать для каких нибудь баффов или улучшений. Основная задача - сделать проверку HP. Создать общее событие с проверки переменной, привязанной к HP. Дальше осталось делать магазины, отнимающая некоторое кол-во HP, а переменная требуется для создания лимита и чтобы герой не умер. Данная фича будет в IIW.


    Механика собственности
    Заезжанная, но нестандартная для roguelike. Если игрок покупает собственность, он будет получать некоторые бонусы после окончания подземелий. Например, купив кузницу, можно получить рандомный меч, или новую броню. Купив медпункт, каждый заход будет даваться некоторое кол-во аптечек. Ну можно и башню мага, где можно обучиться магии. Идей полно, нужно только подумать.


    "Рандомная генерация" снаряжения
    На мейкере без скриптов нельзя сделать генерацию, но можно сделать псевдомодель этой фичи. В пример берём пистолет. Разможаем его на 20 штук, и начинаем давать ему префиксы и менять характеристики. Проблема будет при получении этого оружия, ведь в обычной боёвке можно позволить 3 разных вещи. Можно это решить с помощью коробки с рандомным оружием. Выглядит данная механика не очень, но она нестандартная для мейкера.


    Сохранения из метройдваний.
    Не видел таких на мейкере, потому что не искал, но не суть)
    Они заключаются в расстановке в некоторых точках и невозможностью сохранится в любом месте. Для удобства, вам следует лучше взять два скрипта, которые позже выложу. Сначало берем скрипт на автосохранения
    Спойлер Скрипт:
    Код:
    #===============================================================================
    #
    # DT's Autosave
    # Author: DoctorTodd
    # Date (06/22/2012)
    # Version: (1.0.0) (VXA)
    # Level: (Simple)
    # Email: Todd@beacongames.com
    #
    #===============================================================================
    #
    # NOTES: 1)This script will only work with ace.
    #
    #===============================================================================
    #
    # Description: Saves the game when transferring the map, before battle,
    # and opening the menu (all optional).
    #
    # Credits: Me (DoctorTodd)
    #
    #===============================================================================
    #
    # Instructions
    # Paste above main.
    # Call using Autosave.call
    #
    #===============================================================================
    #
    # Free for any use as long as I'm credited.
    #
    #===============================================================================
    #
    # Editing begins 37 and ends on 50.
    #
    #===============================================================================
    module ToddAutoSaveAce
    
    	  #Max files (without autosave).
    	  MAXFILES = 2
    
    	  #Autosave file name.
    	  AUTOSAVEFILENAME = "Autosave"
    
    	  #Autosave before battle?
    	  AUTOSAVEBB =  false
    
    	  #Autosave when menu opened?
    	  AUTOSAVEM =  false
    
    	  #Autosave when changing map?
    	  AUTOSAVETM =  false
    	end
    #==============================================================================
    # ** Autosave
    #------------------------------------------------------------------------------
    # This module contains the autosave method. This is allows you to use the
    # "Autosave.call" command.
    #==============================================================================
    
    module Autosave
      #--------------------------------------------------------------------------
      # * Call method
      #--------------------------------------------------------------------------
      def self.call
      DataManager.save_game_without_rescue(0)
    end
    end
    #==============================================================================
    # ** DataManager
    #------------------------------------------------------------------------------
    #  This module manages the database and game objects. Almost all of the
    # global variables used by the game are initialized by this module.
    #==============================================================================
    
    module DataManager
      #--------------------------------------------------------------------------
      # * Maximum Number of Save Files
      #--------------------------------------------------------------------------
      def self.savefile_max
    	return ToddAutoSaveAce::MAXFILES + 1
      end  
    end
    #==============================================================================
    # ** Scene_Map
    #------------------------------------------------------------------------------
    #  This class performs the map screen processing.
    #==============================================================================
    
    class Scene_Map < Scene_Base
      #--------------------------------------------------------------------------
      # * Preprocessing for Battle Screen Transition
      #--------------------------------------------------------------------------
      def pre_battle_scene
    	Graphics.update
    	Graphics.freeze
    	@spriteset.dispose_characters
    	BattleManager.save_bgm_and_bgs
    	BattleManager.play_battle_bgm
    	Sound.play_battle_start
      Autosave.call if ToddAutoSaveAce::AUTOSAVEBB
    end
      #--------------------------------------------------------------------------
      # * Call Menu Screen
      #--------------------------------------------------------------------------
      def call_menu
    	Sound.play_ok
    	SceneManager.call(Scene_Menu)
    	Window_MenuCommand::init_command_position
      Autosave.call if ToddAutoSaveAce::AUTOSAVEM
    end
      #--------------------------------------------------------------------------
      # * Post Processing for Transferring Player
      #--------------------------------------------------------------------------
      def post_transfer
    	case $game_temp.fade_type
    	when 0
    	  Graphics.wait(fadein_speed / 2)
    	  fadein(fadein_speed)
    	when 1
    	  Graphics.wait(fadein_speed / 2)
    	  white_fadein(fadein_speed)
    	end
    	@map_name_window.open
      Autosave.call if ToddAutoSaveAce::AUTOSAVETM
    end
    end

    Дальше в местах "сохранения" добавляем выполнение скрипта Autosave.call . Рекомендую ставить её после всех действий, кроме полного восстановления. И вы скажете, что игрокам будет скучно бегать за сохранялками в жопу мира. Тут два решения. Или делайте сохранялки по системе (начало, середина, конец) или добавьте какие нибудь порталы (как Кастлваниях, да). И ещё одна проблема, "я спешу, и я не успею добежать до сохранения!" И тут вбегает второй скрипт. Он позволит сохранить игру один раз и выйти из игры. После входа предложат продолжить из этого сохранения. Данная фича взята из Castlevania: Aria of Sorrow (где я её в первый раз увидел).
    Спойлер Скрипт 2:
    Код:
    #===============================================================================
    # RGSS3: Quicksave v.1.1
    #===============================================================================
    # by Cryranos/Metatron
    #===============================================================================
    # Instructions:  Paste In the Materials section.  Edit Module if desired.
    #===============================================================================
    # This script allows the player to quickly save and quit the game.  Upon
    # reopening the game, the player will be prompted to load the game.  If it is
    # loaded or declined, the quicksave file will be deleted.
    #===============================================================================
    
    module CryQuicksave
      QSFile  = "Qsave.qsav"  # Filename for the quicksave.
      MenuOp  = true         # Add a quicksave command to the menu?
      QSVNam  = "Перерыв"  # This is what the menu command will show up as
      # These are the Quicksave help and the Quickload help.  Insert the second line
      # with \n.
      QSVMess  = "Выходим?\nТвой прогресс будет сохранен."
      QSVLoad  = "Входим?\nМожешь отменить свой выбор и выйти."
      # These are for those who wish to bind the quicksave function to a key rather
      # than to the menu.
      UseKey   = true
      QSVKey   = Input::F5
    end
    
    module DataManager
      def self.quicksave_file_exists?
        !Dir.glob(CryQuicksave::QSFile).empty?
      end
      def self.make_quicksave_filename
        sprintf(CryQuicksave::QSFile)
      end
      def self.quicksave_game
        self.quicksave_game_without_rescue
      end
      def self.quicksave_game_without_rescue
        File.open(make_quicksave_filename, "wb") do |file|
          $game_system.on_before_save
          Marshal.dump(make_save_header, file)
          Marshal.dump(make_save_contents, file)
        end
      end
      def self.quickload_game
        self.load_quicksave_without_rescue
        self.dispose_quicksave
      end
      def self.load_quicksave_without_rescue
        File.open(make_quicksave_filename, "rb") do |file|
          Marshal.load(file)
          extract_save_contents(Marshal.load(file))
          reload_map_if_updated
        end
      end
      def self.dispose_quicksave
        File.delete(make_quicksave_filename) rescue nil
      end
    end
    
    module SceneManager
      def self.first_scene_class
        if $BTEST 
          Scene_Battle 
        elsif DataManager.quicksave_file_exists?
          Scene_QuickLoadTitle
        else
          Scene_Title
        end
      end 
    end
    
    if CryQuicksave::UseKey
    class Game_Player < Game_Character  
      alias quicksave_update update
      def update
        quicksave_update
        if Input.trigger?(CryQuicksave::QSVKey)
          SceneManager.call(Scene_Quicksave)
        end
      end
    end
    end
    
    class Window_QuicksaveCommand < Window_Command
      def initialize
        super(0, 0)
        update_placement
      end
      def window_width
        return 160
      end
      def update_placement
        self.x = (Graphics.width - width) / 2
        self.y = (Graphics.height * 1.6 - height) / 2
      end
      def make_command_list
        add_command("Да", :confirm)
        add_command("Нет", :decline)
      end
    end
    
    class Scene_Quicksave < Scene_MenuBase
      def start
        super
        create_command_window
        create_help_window
      end
      def help_window_text
        CryQuicksave::QSVMess
      end
      def create_command_window
        @command_window = Window_QuicksaveCommand.new
        @command_window.set_handler(:confirm,      method(:command_quicksave))
        @command_window.set_handler(:decline,     method(:command_decline))
        @command_window.set_handler(:cancel,    method(:return_scene))
      end
    
      def create_help_window
        @help_window = Window_Help.new(2)
        @help_window.set_text(help_window_text)
      end
      def command_quicksave
        DataManager.quicksave_game
        fadeout_all
        SceneManager.exit
      end
      def command_decline
        SceneManager.return
      end
      def return_scene
        SceneManager.return
      end
    end
    
    class Scene_QuickLoadTitle < Scene_Title
      def start
        super
        SceneManager.clear
        Graphics.freeze
        create_background
        create_foreground
        create_command_window
        play_title_music
        create_help_window
      end
      def help_window_text
        CryQuicksave::QSVLoad
      end
      def create_command_window
        @command_window = Window_QuicksaveCommand.new
        @command_window.set_handler(:confirm,      method(:command_quickload))
        @command_window.set_handler(:decline,     method(:command_decline))
        @command_window.set_handler(:cancel,    method(:return_scene))
      end
      def create_help_window
        @help_window = Window_Help.new(2)
        @help_window.set_text(help_window_text)
      end
      def command_quickload
        close_command_window
        DataManager.quickload_game
        Sound.play_load
        fadeout_all
        $game_system.on_after_load
        SceneManager.goto(Scene_Map)
      end
      def command_decline
        DataManager.dispose_quicksave
        close_windows
        SceneManager.goto(Scene_Title)
      end
      def return_scene
        fadeout_all
        SceneManager.exit
      end
    end
    
    if CryQuicksave::MenuOp
    class Window_MenuCommand
      alias add_qsv_command add_save_command
      def add_save_command
        add_qsv_command
        add_command(CryQuicksave::QSVNam, :qsav)
      end
    end
    
    class Scene_Menu
      alias add_qsv_to_commands create_command_window
      def create_command_window
        add_qsv_to_commands
        @command_window.set_handler(:qsav,      method(:command_quicksave))    
      end  
      def command_quicksave 
        SceneManager.call(Scene_Quicksave)
      end
    end
    end



    Генерация партии (классы,имена)
    Итак, мы хотим сделать РПГ? Мы хотим создать партию с разными классами и героями? Пожалуйста!
    В качестве демки я выбрал LW Rpg. Я чуть чуть её изменил и добавил "генерацию" партии. Можете посмотреть (и поиграть ( нет)). https://yadi.sk/d/SZqjibCx34Jx6b.


    Генерация персонажа (внешний вид)
    Вы это видели в IIW... Но всё равно расскажу.
    Берем две переменных. Одна будет "голова", а другая "туловище". На каждую переменную ставим условие и смену графики гг. При туловище нужно учитывать что нужно иметь точно (или не очень) такую же голову. Это решается проверкой переменной "голова". А при смене головы лучше и проверять переменную "туловище"
    Скрины нихрена не загрузились, так что скачивайте I in Wastland (знаю что там ошибка, но всё же...) и ищите генерацию там)


    Эффект холода
    Вероятно, не очень интересная, но возможная идея. Она заключается в баффе, который вы создаёте сами, и места, где холод будет царствовать. Не будем делать настолько жестокий холод, как в Заморозке, но он будет не полезен ГГ. Итак, во всех дверях и проходах на улицу(или холодильник) мы ставим этот бафф и переключатель на включение холода. Если надо создать фазы холода, вам потребуется несколько баффов, и общее событие с Ждать, и когда период пройдёт, накладывается вторая фаза. Додумывать не буду, это дело за вами.


    Исследование или обучение использования оружия
    Вы никогда не задумывались, что в некоторых играх, герои могут носить любое оружие, без практики в его использовании. Сейчас попробуем сделать навык владения оружием. Есть два способа - группой или одиночное. Группой легче, но нелогично, а одиночным тяжело и логично. Надеюсь вы поняли, о чем я? Итак... Группа - одна переменная, которая означает мастерство владения одним видом оружия. Например, изучив дробовик, ГГ будет одинаково хорошо стрелять из всех дробовиков. Одиночное - (кол-во переменных = кол-ву оружия) на каждое оружие своя переменная. Фактически, гг изучает каждое оружие по новой, что не даст игроку сосредоточится на основной цели, практически гринд опыта. Данные механики можно скомбинировать, например похожее оружие гг будет использовать исскуснее, чем оружие другого подтипа.
    Спойлер Как сделать на практике?:
    Итак, делаем переменные. И делаем или бафф, или по три-четыре копии вашего оружия. Дальше требуется после любого боя (или в условиях боя) давать в плюс к той переменной, к которой привязан вид (оружие). Дальше делаем общее событие, в котором будут все условия. Условия в основном будут на смену оружия на копию, или снятие и смену баффа.



    Наемники
    Два раза видел, что об этом спрашивали в группе Вк. Напишу свою версию здесь.
    Наемник - это что-то типо временного помощника в партии, и нужно сначала придумать, через сколько времени соскачит наш помощник.
    Можно сделать самым легким и действенным способом - через некоторое количество боёв. И логично, и легко. К тому же можно сделать так, что бы "продлить" защиту. Итак давайте сделаем это на практике. Делаем в героях наёмника, даем имя, спрайт, ставим класс. Дальше ставим событие в том месте, где его можно нанять. И делаем условие по деньгам. Дальше тупо после каждого боя прибавляем к переменной в которой будет периуд действия защиты наёмника. Дальше делаем наёмнику (через общие события) фразу, например: "Продлевать?" и выбор. Нужно отметить то, что наёмником наверное нельзя будет помыкать и ему можно сделать автобой.


    Массив на переменных
    Данная механика нестабильна и узконаправленная, но она сокращает количество переключателей и переменных.
    Основная фишка этой механики, сократить количество переключателей. Она может применятся в крафте (и его производных, типо алхимии) различных основанных на диалогах или выборах играх (например визуальные новеллы (кому сбрендит это делать на мейкере)) ну и просто сгруппировать внутренности событий.
    Как это сделать?
    Сначало нужно посмотреть на переменную в таком виде (00000000) каждый ноль это отдельный переключатель. И нужно понять, что каждая единица это первая переменная, каждая десятка это вторая переменная и сотня третья переменная, и так далее...
    Нужно запомнить что мы должны прибавлять и вычитать а не приравнивать к нужному числу, и иначе весь массив перестанет работать. Используйте это на свой страх и риск.
    Последний раз редактировалось Gforce_Vtk; 23.11.2017 в 12:18.
    Мой проект

  2. #2
    Супер-модератор Аватар для Fox
    Информация о пользователе
    Регистрация
    21.04.2008
    Адрес
    Москва
    Сообщений
    1,800
    Записей в дневнике
    13
    Репутация: 105 Добавить или отнять репутацию

    По умолчанию

    Сперто!... тьфу, продано!... тьфу, засчитано... бл... короче, молодец.
    YouTube-канал Мэйкерского Засланца - http://www.youtube.com/channel/UCCny...MakerZaslanetz
    Группа в ВК - https://vk.com/public120874868

    Спойлер :

    Ну и немного большой и чистой любви
    Спойлер :
    Гость - Так! Мы отошли от темы! Ваши предложения, кого нужно забанить, чтобы не было срачей и тралей?

    Kerloeda - сосало завали, не с тобой говорю, ты уже показал какой ты собеседник.

    Алюка - «Нам насрать на низшие существа!» — раздался пронзительный голос со стороны параши.
    Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье.

    Доктор СИД - же в который раз захожу на форум и вижу одну флудоту, срачи, троллоту жирности 100%, бессмысленные или идиотские темы, и безыгорье. Всё в говне, всё засрали, черт вас дери!

  3. #3

    По умолчанию

    Механика собственности заезженная, но я раньше не додумывался. Выражаю мою благодарность.

  4. #4
    Местный Аватар для Gforce_Vtk
    Информация о пользователе
    Регистрация
    04.04.2016
    Адрес
    Волгоград.
    Сообщений
    171
    Записей в дневнике
    18
    Репутация: 26 Добавить или отнять репутацию

    По умолчанию

    Обновилось (нет)
    Мой проект

  5. #5
    Познающий Аватар для Naarassusi
    Информация о пользователе
    Регистрация
    29.03.2015
    Адрес
    Дома
    Сообщений
    409
    Записей в дневнике
    5
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Спойлер Тогда тема будет похожа на заброшенный Саратов...:

  6. #6
    Местный Аватар для Gforce_Vtk
    Информация о пользователе
    Регистрация
    04.04.2016
    Адрес
    Волгоград.
    Сообщений
    171
    Записей в дневнике
    18
    Репутация: 26 Добавить или отнять репутацию

    По умолчанию

    Тема обновлена. (Сообщения о обновлении будут после каждых трёх новых записей...)
    Мой проект

  7. #7
    Супер-модератор Аватар для Fox
    Информация о пользователе
    Регистрация
    21.04.2008
    Адрес
    Москва
    Сообщений
    1,800
    Записей в дневнике
    13
    Репутация: 105 Добавить или отнять репутацию

    По умолчанию

    Все это подходит под РПГ с обычными додиками в пати, которые либо сделаны совсем уж посредственными либо генерятся вначале игры.
    YouTube-канал Мэйкерского Засланца - http://www.youtube.com/channel/UCCny...MakerZaslanetz
    Группа в ВК - https://vk.com/public120874868

    Спойлер :

    Ну и немного большой и чистой любви
    Спойлер :
    Гость - Так! Мы отошли от темы! Ваши предложения, кого нужно забанить, чтобы не было срачей и тралей?

    Kerloeda - сосало завали, не с тобой говорю, ты уже показал какой ты собеседник.

    Алюка - «Нам насрать на низшие существа!» — раздался пронзительный голос со стороны параши.
    Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье.

    Доктор СИД - же в который раз захожу на форум и вижу одну флудоту, срачи, троллоту жирности 100%, бессмысленные или идиотские темы, и безыгорье. Всё в говне, всё засрали, черт вас дери!

  8. #8
    Маститый Аватар для Yuryol
    Информация о пользователе
    Регистрация
    06.03.2014
    Адрес
    Красноярск
    Сообщений
    1,420
    Записей в дневнике
    44
    Репутация: 60 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Gforce_Vtk Посмотреть сообщение
    Сохранения из метройдваний.
    Не видел таких на мейкере, потому что не искал, но не суть)
    Они заключаются в расстановке в некоторых точках и невозможностью сохранится в любом месте.
    в светлой рыцаре есть

    Генерация персонажа (внешний вид)
    Я за создание внешнего вида самим игроком.

    Ничего полезного для себя не подчерпнул но в любом случае поддерживаю,когда излагают свои мысли и стараются придумать что-нибудь оригинальное а не лепить одно и то же по шаблонам

  9. #9

    По умолчанию

    Незнаю, было ли это здесь, но caveman ещё в 2013 писал об этом на светлой.

    Общая механика боя - стандартна для тактик. Вид сверху, юниты отдельно, action points, движение-атака-защита. Дьявол, как всегда, в деталях.

    Механика боя.
    1) Мораль. Влияет на параметры юнита и на возможность побега или выхода из-под контроля игрока. Зависит от глобального отношения к командиру или от локальных условий (убили половину наших – какая, нафиг, мораль)
    2) Местность. Влияет на атаку, защиту, параметры, дальность стрелков, мораль (посиди-ка в болоте).
    3) Построения. Солдатские построения, при образовании боевой фигуры (типа квадрат 2*2, фигура T и прочее), могут давать бонус всем, участвующим в ней.
    4) Состояния. Солдаты, в зависимости от характера, могут переходить в разные состояния. Например, у одного убили друга – он начинает атаковать с удвоенной силой, не заботясь о защите. А другой будет следить за своей защитой.
    5) Классы. Будет несколько классов солдат, которые влияют на механику битвы (дальность, возможность защиты и прочее). Доступны следующие базовые классы: воин, ловкач, маг, лекарь. Они, в свою очередь порождают или делятся на специализированные классы, типа мечник, стрелок, темный маг, целитель.

    Механика вне боя.
    1) Солдаты различны по характеру и параметрам, качаются отдельно. Но класс таки накладывает ограничения.
    2) Мораль солдата может понизиться из-за неугодных миссий или разногласий с начальством; повыситься за счет прибавки к жалованию или повышения.
    3) Опыт солдат, уровни – повышают параметры и открывают новые возможности.
    4) Солдат можно одеть и экипировать оружием, в том числе уникальным.
    5) Медали – за отвагу на поле боя солдату можно присвоить медаль. Она поднимает параметры солдата (а как же, теперь он лучше бьется, типа ветеран) но также требует прибавки к жалованию.
    6) Уникальные задания по некоторым условиям от солдат. Естественно, зеленых новичков слушать никто не будет, а вот на просьбу заветераненного мужика можно и ответить.
    7) Смерть солдата – это навсегда и влечет за собой компенсацию семье. Впрочем, на поле боя павшего солдата врагам еще надо добить.
    8) У командира есть лидерство, у солдат – количество требуемого лидерства, причем с повышением класса может повыситься требование к лидерству – наглость и требования к командиру у крутого товарища повышаются.
    9) У командира есть репутация в мире, которая влияет на доступность заданий и желание околачивающихся в стране солдафонов присоединиться к отряду. На репутацию влияют связи и реакции на разные события. Например, отказ оплатить компенсацию за погибшего солдата понизит репутацию, а внеочередная премия заставит задуматься некоторых о присоединении к вам. Отрицательная репутация не значит, что все плохо, а значит то, что к вам будут обращаться «другие» заказчики.
    10) Командир тоже прокачивается, но на поле боя не появляется. От прокачки зависит лидерство, «скиллы» (например команды подчиненным, повышающие параметры или запугивающие врагов действия) и доступные построения.
    11) Кроме боевых действий, конечно же бывают мирные действия. Сначала народ тусит и ночует в трактирах, потом можно растратиться на свой дом-казарму, с тренировочным залом и прочими прелестями солдатской жизни. Между боями, командир может болтать с подчиненными, узнавать больше про них, покупать им оружие и доспехи и получать новые задания от разных личностей.
    12) Общего сюжета нет, это скорее, небольшие ветки – линии, как в Legend of Mana.

    13) По сути, игра – симулятор фентезийного командира отряда праздношатающихся наемников, готовых наняться почти кому угодно были бы деньги и совесть позволила.

  10. #10
    Администратор Аватар для Пётр
    Информация о пользователе
    Регистрация
    24.04.2014
    Адрес
    Краснодар
    Сообщений
    3,940
    Записей в дневнике
    6
    Репутация: 132 Добавить или отнять репутацию

    По умолчанию

    Что, Егорова Нога? Две недели долгий срок? Али совесть проснулась? Еще и лайк мне поставил...
    Наказание есть наказание.
    Этот акк блокирую навсегда. Дабл акки запрещены.
    Зайдешь со старого, как срок наказания выйдет.



Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Механики, идеи от Джифорса.