Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: Chest System

  1. #1
    Новичок Аватар для Sirius
    Информация о пользователе
    Регистрация
    18.10.2009
    Адрес
    Москва
    Сообщений
    6
    Репутация: 0 Добавить или отнять репутацию

    По умолчанию Chest System

    Начал изучать Руби недавно. Решил написать простенький скрипт для VX.
    Простенький в плане изменений в игровом процессе, потому как добавляет он всего лишь сундуки( и другие обьекты, содержащие вещи). В сундуке может быть несколько предметов, может быть золото, с сундука можно брать вещи, можно класть вещи. Так же, можно выполнить определенное действие, если в сундуке окажется конкретный предмет.

    Спойлер Скрипт Сундука:
    Код:
      #==========================================================================
      # Скрипт СУНДУК  Автор: Sirius (Светлый) aka Naruto (GDSA~ПВЫФ)
      # Версия: 1.0  
      # Скрипт добавляет в игру хранилища предметов: 
      # сундуки, ящики, шкафы, NPC и т.д.
      #--------------------------------------------------------------------------
      # Другими словами, взаимодействие с сундуками происходит в двустороннем 
      # режиме. Как в BaldursGate, Neverwinter, Morrowind и т.п.
      # Из сундука можно как брать предметы, так и класть в него.
      # Добавленна возможность класть в сундук большие суммы золота.
      # При выборе предмета вы перемещаете ОДИН предмет. А вот золото 
      # перемещается все сразу.
      #--------------------------------------------------------------------------
      # Для открытия сундука вставьте код ==> $scene=Scene_Chest.new(X,Y)
      # Где X ID карты а У ID эвента Пример: $scene=Scene_Chest.new(10,36)
      # где 10 ID карты а 36 ID эвента
      #--------------------------------------------------------------------------
      # Для добавления предметов в сундук используйте следующий код для каждого
      # предмета : $chest[[X,Y,Z]]=[A,B,C] Где X ID карты, Y ID эвента, а Z
      # номер этого предмета в сундуке. Далее, А это тип предмета 0 - Item,
      # 1 - Weapon, 2 - Armor, B это ID предмета, и, наконец, С это количество 
      # этого предмета.
      # Например, давайте создадим сундук с двумя предметами: 
      # $chest[[1,4,1]]=[0,1,10]
      # $chest[[1,4,2]]=[1,8,1]
      # $scene=Scene_Chest.new(1,4)
      # Как вы уже догадались, мы создали сундук на карте с ID 1 и в Эвенте с ID 4
      # первый предмет простой, с ID 1 в количестве 10 штук, второй это оружие
      # с ID 8 в количестве одной штуки.
      #--------------------------------------------------------------------------
      # Теперь я расскажу про то, как создать золото:
      # 1. Что делать необязательно:
      # Создайте обычный предмет (Область действия: нет Доступность: никогда)
      # Назовите его "Золото" и вставьте описание для золота.
      # 2. Что делать обязательно:
      # Внесите ID этого предмета в переменную $chest_gold Например: 
      # $chest_gold = [22,23] 
      # И количество монет укажите в заметках (Note)
      # Данные=>База данных=>Вещи=>Заметки
      #===========================================================================
     
     $chest = {} #Это глобальная переменная Сундука
     $ch_key = [ ] #массив для проверки на  наличие ключевых предметов в сундуках.
     $chest_gold = [ ] # Здесь указывайте ID предметов, являющихся золотом
     
    class Scene_Chest < Scene_Base
      
      #--------------------------------------------------------------------------
      # * Object Initialization
      #   event :ID Эвента
      #   map_id:ID карты 
      #--------------------------------------------------------------------------
    
      def initialize( map_id, event_id)
        @event_id = event_id
        @map_id = map_id
        @k = 0
        @n = 0
        @temp = 0
        @item = 0
        @array = []
        @val = nil
      end
      
      def start
        super
        create_menu_background
        @help_window = Window_Help.new
        @Window_Chest = Window_Chest.new(@event_id)
        @Window_Actor = Window_Actor.new
        @Window_Chest_cont = Window_Chest_cont.new(@map_id, @event_id)
        @Window_Chest_cont.help_window = @help_window
        @Window_Actors_cont = Window_Actors_cont.new
        @Window_Chest_cont.active = true
        @Window_Actors_cont.active = false
        create_choise_window
        hide_choise_window    
      end 
      #--------------------------------------------------------------------------
      # * Return to Original Screen
      #--------------------------------------------------------------------------
      def return_scene
        $scene = Scene_Map.new
      end
      #--------------------------------------------------------------------------
      # * Termination Processing
      #--------------------------------------------------------------------------
      def terminate
        super
        dispose_menu_background
        @help_window.dispose
        @Window_Chest.dispose
        @Window_Actor.dispose
        @Window_Chest_cont.dispose
        @Window_Actors_cont.dispose
        @Window_choise.dispose
      end
    
      #--------------------------------------------------------------------------
      # * Update Frame
      #--------------------------------------------------------------------------
      def update
        super
        update_menu_background
        @help_window.update
        @Window_Chest_cont.update
        @Window_Actors_cont.update
        @Window_choise.update
        if @Window_Chest_cont.active
          @Window_Chest_cont.help_window = @help_window
          update_chest_item_selection
        elsif @Window_Actors_cont.active
          @Window_Actors_cont.help_window = @help_window
          update_party_item_selection
        elsif @Window_choise.active
          update_choise_selection
        end
      end
      #--------------------------------------------------------------------------
      # * Update Chest Item Selection
      #--------------------------------------------------------------------------
      def update_chest_item_selection
        if Input.trigger?(Input::B)
          Sound.play_cancel      
          @Window_choise.visible = true
          @Window_choise.active = true
          @Window_Chest_cont.active = false
        elsif Input.trigger?(Input::C)
          @item = @Window_Chest_cont.item
          chest_lose_item
        end
      end
      #--------------------------------------------------------------------------
      # * Update Party Item Selection
      #--------------------------------------------------------------------------
      def update_party_item_selection
        if Input.trigger?(Input::B)
          Sound.play_cancel
          @Window_choise.visible = true
          @Window_choise.active = true      
          @Window_Actors_cont.active = false
        elsif Input.trigger?(Input::C)
          @item = @Window_Actors_cont.item
          chest_gain_item
        end
      end
      #--------------------------------------------------------------------------
      # * Создание окна выбора
      #--------------------------------------------------------------------------
      def create_choise_window
        c1 = "Забрать"
        c2 = "Положить"
        @Window_choise = Window_choise.new([c1, c2])
        @Window_choise.index = 0
      end 
      #--------------------------------------------------------------------------
      # * Update Choise Selection
      #--------------------------------------------------------------------------
      def update_choise_selection
        if Input.trigger?(Input::B)
          Sound.play_cancel
          $scene = Scene_Map.new
        elsif Input.trigger?(Input::C)
          Sound.play_decision
          case @Window_choise.index
          when 0      # @Window_Chest_cont.active = true
            @Window_Chest_cont.active = true
            hide_choise_window
          when 1      # @Window_Actors_cont.active = true
            @Window_Actors_cont.active = true
            hide_choise_window        
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Hide Choise Window
      #--------------------------------------------------------------------------
      def hide_choise_window
        @Window_choise.active = false
        @Window_choise.visible = false
      end
      #--------------------------------------------------------------------------
      # * Взятие предмета из сундука
      #--------------------------------------------------------------------------
      def chest_lose_item
    #    p $chest.values
    #    p $chest.keys
        if @item != nil
          $game_party.last_item_id = @item.id
          $game_party.gain_item(@item, 1)
          Sound.play_equip
          for i in 0..$chest_items.size-1
            if $chest_items[i] == @item
              @n = i + 1
            end
          end
            @k = [@map_id, @event_id, @n]
            @temp = $chest[@k]
            if @temp[2] <= 1
              @array = []
              $chest.delete(@k)
              $chest.each_key{|key| if key[0]==@map_id and key[1]==@event_id and key[2] > @n then @array.push(key[2]) end}
              for i in @array.sort
                @key = [@map_id, @event_id, i]
                @new_key = [@map_id, @event_id, i-1]
                @value = $chest[@key]
                $chest[@new_key] = @value
                $chest.delete(@key)
              end  
            else
              @temp[2]-=1
              $chest[@k] = @temp
            end                
        @Window_Actors_cont.refresh
        @Window_Chest_cont.refresh
        end
      end  
      #--------------------------------------------------------------------------
      # * Перенос предмета в сундук
      #--------------------------------------------------------------------------
      def chest_gain_item
        if @item != nil
          $game_party.last_item_id = @item.id
          $game_party.lose_item(@item, 1)
          Sound.play_equip
          @val = nil
          for i in 0..$chest_items.size-1
            if $chest_items[i] == @item
              @temp_kv = [@map_id, @event_id, i+1]
              @val = $chest[@temp_kv]
            end
          end
          @array = []
          if @val == nil
            $chest.each_key{|key| if key[0]==@map_id and key[1]==@event_id then @array.push(key[2]) end}
            unless @array.empty?
              @temp = [@map_id, @event_id, @array.max+1]
            else
              @temp = [@map_id, @event_id, 1]
            end  
            if $data_items.include?(@item)
              @type = 0
            elsif $data_weapons.include?(@item)
              @type = 1
            elsif $data_armors.include?(@item)
              @type = 2
            end
            $chest[@temp] = [@type, @item.id, 1]
          else
            @val[2]+=1
            $chest[@temp_kv] = @val
          end  
          @Window_Actors_cont.refresh
          @Window_Chest_cont.refresh
        end
      end  
    end
    
    #----------------------------------------------------------------------
    #**ОКНО С ИМЕНЕМ ЭВЕНТА 
    #----------------------------------------------------------------------
    class Window_Chest < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #   event :ID Эвента   
      #--------------------------------------------------------------------------
    
      def initialize (event)    
        @event =$game_map.events[event]
    #    @cn = @event.character_name
    #    @ci = @event.character_index
        super(0, 56, 544, 56) 
        refresh
      end
      
      def refresh
    #   self.contents.clear
        self.contents.draw_text(0, 0, 500, 24, @event.event_name, 1)
    #   draw_character(@cn, @ci, 100, 30)
      end
      
    end
    
    #--------------------------------------------------------------------------
    # * Содержание сундука
    #--------------------------------------------------------------------------
    
    
    class Window_Chest_cont < Window_Selectable
      
      
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x      : window x-coordinate
      #     y      : window y-coordinate
      #     width  : window width
      #     height : window height
      #--------------------------------------------------------------------------
      def initialize( map_id, event_id)
        @map_id = map_id                  # ID Карты
        @event_id = event_id              # ID Эвента
        @chest_last_item_id = 0           # Номер последнего предмета
        $chest_items =[]
        super(0, 112, 544, 124)
        @column_max = 2
        self.index = 0
        refresh
      end
      #--------------------------------------------------------------------------
      # * Создание массива предметов
      #--------------------------------------------------------------------------
      def create_chest_item
        $chest_items =[]                         # Массив предметов в сундуке
        @numbers_hash ={}                        # Хэш количества предметов(Ключи сами предметы)      
        @chest_ietm_number = []                  # Массив, последовательности предметов в сундуке
        $chest.each_key {|k| if k[0]==@map_id && k[1]==@event_id then @chest_ietm_number.push(k[2]) end}
        @m = @chest_ietm_number.max              # @m максимальный номер предмета в сундуке (не ID!)
        for i in @chest_ietm_number.sort
        @t = [@map_id, @event_id, i]
        @temp = $chest[@t]                        #  @temp временная переменная
          unless @temp == nil
            case @temp.at(0)
            when 0
              $chest_items.push($data_items[@temp[1]])
              @numbers_hash [$data_items[@temp[1]]] = @temp[2]
              if i == @m
                @chest_last_item_id = $data_items[@temp[1]].id
              end
            when 1
              $chest_items.push($data_weapons[@temp[1]])
              @numbers_hash [$data_weapons[@temp[1]]] = @temp[2]
              if i == @m
                @chest_last_item_id = $data_weapons[@temp[1]].id
              end
            when 2
              $chest_items.push($data_armors[@temp[1]])
              @numbers_hash [$data_armors[@temp[1]]] = @temp[2]
              if i == @m
                @chest_last_item_id = $data_armors[@temp[1]].id
              end
            end
          end  
        end 
      end
      #--------------------------------------------------------------------------
      # * Get Item
      #--------------------------------------------------------------------------
      def item
        return @data[self.index]
      end
      #--------------------------------------------------------------------------
      # * Whether or not to include in item list
      #     item : item
      #--------------------------------------------------------------------------
      def include?(item)
        return false if item == nil
        return true
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        create_chest_item
        @data = []
        for item in $chest_items
          next unless include?(item)
          @data.push(item)
          if item.is_a?(RPG::Item) and item.id == @chest_last_item_id
            self.index = @data.size - 1
          end
        end
        @data.push(nil) if include?(nil)
        @item_max = @data.size
        create_contents
        for i in 0...@item_max
          draw_item(i)
        end
      end
      #--------------------------------------------------------------------------
      # * Draw Item
      #     index : item number
      #--------------------------------------------------------------------------
      def draw_item(index)
        rect = item_rect(index)
        self.contents.clear_rect(rect)
        item = @data[index]
        if item != nil
          number = @numbers_hash[item]
          enabled = true
          rect.width -= 4
          draw_item_name(item, rect.x, rect.y, enabled)
          if $chest_gold.include?(item.id)
            self.contents.draw_text(rect, sprintf(":%2d", item.note.to_i), 2)
          else
            self.contents.draw_text(rect, sprintf(":%2d", number), 2)
          end
        end
      end
      #--------------------------------------------------------------------------
      # * Update Help Text
      #--------------------------------------------------------------------------
      def update_help
        @help_window.set_text(item == nil ? "" : item.description)
      end
    end
    
    #----------------------------------------------------------------------
    #**ОКНО С ИМЕНЕМ ПЕРВОГО ЧЛЕНА ГРУППЫ 
    #----------------------------------------------------------------------
    
    class Window_Actor < Window_Base
      #--------------------------------------------------------------------------
      # * Object Initialization
      #--------------------------------------------------------------------------
    
        def initialize
        super(0, 236, 544, 56)
        @name= $game_party.members[0].name
    #    @actor = $game_player.main_actor.name
    
        refresh
        end
    
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
    #    self.contents.clear
    #     draw_actor_name(@actor, 4, 0)
        self.contents.draw_text(0, 0, 500, 24, @name, 1)
      end
      
    end
    
    
      #--------------------------------------------------------------------------
      # * Содержание инвентаря
      #--------------------------------------------------------------------------
    
    class Window_Actors_cont < Window_Selectable
      
      
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     x      : window x-coordinate
      #     y      : window y-coordinate
      #     width  : window width
      #     height : window height
      #--------------------------------------------------------------------------
      def initialize
        super(0, 292, 544, 124)
        @column_max = 2
        self.index = 0
        refresh
      end
      #--------------------------------------------------------------------------
      # * Get Item
      #--------------------------------------------------------------------------
      def item
        return @data[self.index]
      end
      #--------------------------------------------------------------------------
      # * Whether or not to include in item list
      #     item : item
      #--------------------------------------------------------------------------
      def include?(item)
        return false if item == nil
        if $game_temp.in_battle
          return false unless item.is_a?(RPG::Item)
        end
        return true
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        @data = []
        for item in $game_party.items
          next unless include?(item)
          @data.push(item)
          if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
            self.index = @data.size - 1
          end
        end
        @data.push(nil) if include?(nil)
        @item_max = @data.size
        create_contents
        for i in 0...@item_max
          draw_item(i)
        end
      end
      #--------------------------------------------------------------------------
      # * Draw Item
      #     index : item number
      #--------------------------------------------------------------------------
      def draw_item(index)
        rect = item_rect(index)
        self.contents.clear_rect(rect)
        item = @data[index]
        if item != nil
          number = $game_party.item_number(item)
          enabled = true
          rect.width -= 4
          draw_item_name(item, rect.x, rect.y, enabled)
          self.contents.draw_text(rect, sprintf(":%2d", number), 2)
        end
      end
      #--------------------------------------------------------------------------
      # * Update Help Text
      #--------------------------------------------------------------------------
      def update_help
        @help_window.set_text(item == nil ? "" : item.description)
      end
    end
    
    
    #--------------------------------------------------------------------------
    # * Окно выбора
    #--------------------------------------------------------------------------
    
    class Window_choise < Window_Selectable
       
      def initialize(commands, column_max = 1, row_max = 0, spacing = 32)
        super(178,158, 200, 2 * WLH + 32, spacing)
        @commands = commands
        @item_max = 2
        @column_max = 1
        refresh
        self.index = 0
      end
      #--------------------------------------------------------------------------
      # * Refresh
      #--------------------------------------------------------------------------
      def refresh
        self.contents.clear
        for i in 0...@item_max
          draw_item(i)
        end
      end
      #--------------------------------------------------------------------------
      # * Draw Item
      #     index   : item number
      #     enabled : enabled flag. When false, draw semi-transparently.
      #--------------------------------------------------------------------------
      def draw_item(index, enabled = true)
        rect = item_rect(index)
        rect.x += 4
        rect.width -= 8
        self.contents.clear_rect(rect)
        self.contents.font.color = normal_color
        self.contents.font.color.alpha = enabled ? 255 : 128
        self.contents.draw_text(rect, @commands[index],1)
      end
    end
    
    
      #--------------------------------------------------------------------------
      # Добавляет Метод Event_name     
      #--------------------------------------------------------------------------
    class Game_Event < Game_Character
      #--------------------------------------------------------------------------
      # * Public Instance Variables
      #--------------------------------------------------------------------------
      attr_reader   :trigger                  # trigger
      attr_reader   :list                     # list of event commands
      attr_reader   :starting                 # starting flag
      attr_reader   :event_name               # Имя эвента
      #--------------------------------------------------------------------------
      # * Object Initialization
      #     map_id : map ID
      #     event  : event (RPG::Event)
      #--------------------------------------------------------------------------
      
      alias initialize_A initialize
      
      def initialize(map_id, event)
        super()
        @map_id = map_id
        @event = event
        @id = @event.id
        @erased = false
        @starting = false
        @through = true
        moveto(@event.x, @event.y)            # Move to initial position
        refresh
        @event_name = event.name              # Event_name
      end
    end
    
    #==============================================================================
    # ** Game_Party
    #------------------------------------------------------------------------------
    #  This class handles the party. It includes information on amount of gold 
    # and items. The instance of this class is referenced by $game_party.
    #==============================================================================
    
    class Game_Party < Game_Unit
    
    
    
      #--------------------------------------------------------------------------
      # * Gain Items (or lose)
      #     item          : Item
      #     n             : Number
      #     include_equip : Include equipped items
      #--------------------------------------------------------------------------
      
      alias gain_item_new gain_item
      
      def gain_item(item, n, include_equip = false)
       if $chest_gold.include?(item.id)            # Если true то предмет является
          $game_party.gain_gold(item.note.to_i)    # золотом, и перечисляется
       else                                        # сразу в золото группы
        number = item_number(item)
        case item
        when RPG::Item
          @items[item.id] = [[number + n, 0].max, 99].min
        when RPG::Weapon
          @weapons[item.id] = [[number + n, 0].max, 99].min
        when RPG::Armor
          @armors[item.id] = [[number + n, 0].max, 99].min
        end
        n += number
        if include_equip and n < 0
          for actor in members
            while n < 0 and actor.equips.include?(item)
              actor.discard_equip(item)
              n += 1
            end
          end
        end
       end 
      end
    end 
    #==============================================================================
    # ** Scene_File
    #------------------------------------------------------------------------------
    #  Добавляем переменную $chest в методы сохранения и загрузки
    #  теперь при перезагрузке сундуки будут "помнить" что в них лежало 
    #==============================================================================
    class Scene_File < Scene_Base
    
      #--------------------------------------------------------------------------
      # * Write Save Data
      #     file : write file object (opened)
      #--------------------------------------------------------------------------
      
      alias write_save_data_new write_save_data
      
      def write_save_data(file)
        characters = []
        for actor in $game_party.members
          characters.push([actor.character_name, actor.character_index])
        end
        $game_system.save_count += 1
        $game_system.version_id = $data_system.version_id
        @last_bgm = RPG::BGM::last
        @last_bgs = RPG::BGS::last
        Marshal.dump(characters,           file)
        Marshal.dump(Graphics.frame_count, file)
        Marshal.dump(@last_bgm,            file)
        Marshal.dump(@last_bgs,            file)
        Marshal.dump($game_system,         file)
        Marshal.dump($game_message,        file)
        Marshal.dump($game_switches,       file)
        Marshal.dump($game_variables,      file)
        Marshal.dump($game_self_switches,  file)
        Marshal.dump($game_actors,         file)
        Marshal.dump($game_party,          file)
        Marshal.dump($game_troop,          file)
        Marshal.dump($game_map,            file)
        Marshal.dump($game_player,         file)
        Marshal.dump($chest,               file)
      end
      #--------------------------------------------------------------------------
      # * Read Save Data
      #     file : file object for reading (opened)
      #--------------------------------------------------------------------------
      
      alias read_save_data_new read_save_data
      
      def read_save_data(file)
        characters           = Marshal.load(file)
        Graphics.frame_count = Marshal.load(file)
        @last_bgm            = Marshal.load(file)
        @last_bgs            = Marshal.load(file)
        $game_system         = Marshal.load(file)
        $game_message        = Marshal.load(file)
        $game_switches       = Marshal.load(file)
        $game_variables      = Marshal.load(file)
        $game_self_switches  = Marshal.load(file)
        $game_actors         = Marshal.load(file)
        $game_party          = Marshal.load(file)
        $game_troop          = Marshal.load(file)
        $game_map            = Marshal.load(file)
        $game_player         = Marshal.load(file)
        $chest               = Marshal.load(file)
        if $game_system.version_id != $data_system.version_id
          $game_map.setup($game_map.map_id)
          $game_player.center($game_player.x, $game_player.y)
        end
      end
    end


    Как с ним работать сказанно в самом скрипте.

    Вот демка, демонстрирующая его работу:

    ДЕМО
    Последний раз редактировалось Sirius; 19.10.2009 в 15:35.
    В мире есть только две понастоящему важные вещи: знание и любовь...

  2. #2

    По умолчанию

    А если положить предмет в сундук, сохраниться и загрузить игру, он там останется?
    Помнится видел похожий скрипт и автор там такой недочёт допустил.

  3. #3
    Новичок Аватар для Sirius
    Информация о пользователе
    Регистрация
    18.10.2009
    Адрес
    Москва
    Сообщений
    6
    Репутация: 0 Добавить или отнять репутацию

    По умолчанию

    Хм... А ты прав, должно сохраняться... Но не сохраняется!!! Ща посмотрим в чем дело.

    ----------------------------------------------------------------

    Исправил баг, совсем забыл о сэйв/лоад Демку и скрипт перезалил.
    Теперь сундук, при перезагрузке, помнит что в нем было.

    Если еще какие баги будут пишите.
    Последний раз редактировалось Sirius; 18.10.2009 в 20:14.
    В мире есть только две понастоящему важные вещи: знание и любовь...

  4. #4
    Пользователь Аватар для Тайреш
    Информация о пользователе
    Регистрация
    19.05.2010
    Адрес
    Екатеринбург
    Сообщений
    39
    Репутация: 3 Добавить или отнять репутацию

    По умолчанию

    Если еще осталось у кого-нибудь, выложите пожалуйста демку, а то не могу разобраться =_=


  5. #5
    Местный Аватар для silverlexx
    Информация о пользователе
    Регистрация
    25.07.2011
    Адрес
    Украина, г. Харьков
    Сообщений
    215
    Записей в дневнике
    2
    Репутация: 19 Добавить или отнять репутацию

    По умолчанию

    Был бы признателен, если бы и со мной кто нибуть поделился этим скриптом.
    "Не можешь писать - не пиши. Можешь писать - не пиши. А вот если не можешь не писать - тогда пиши, что ж с тобой делать. Может тогда что-то путное выйдет."

  6. #6
    Мастер Форума Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    8,279
    Записей в дневнике
    2
    Репутация: 87 Добавить или отнять репутацию

    По умолчанию

    В первом посте сам код, есть. Там и инструкция есть. Я думаю вряд ли кто нибудь сейчас найдет демку.

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

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

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

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

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

Ваши права

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