Страница 43 из 185 ПерваяПервая ... 3341424344455393143 ... ПоследняяПоследняя
Показано с 421 по 430 из 1847

Тема: Поиск скриптов

  1. #421

    По умолчанию

    Цитата Сообщение от Alex333 Посмотреть сообщение
    Это код Бэстиария,предметы внём отображаются сразу,текоторые даются за монстра.Можно ли переписать так что бы сначала в графе предметов стояли "???????" ,а после выпадения предмета из монстра он отображался.Помогите пожалуйста.
    Можно всё, но придется тебе это делать самому.
    Код:
    def draw_drop_item(first)
        item = (first ? @enemigo.drop_item1 : @enemigo.drop_item2)
        contents.draw_text((first ? 35 : 226), 260, 92, 92, FalVocab[1])
        if item.kind == 0
          contents.draw_text((first ? 0 : 200), 284, 92, 92, FalVocab[3])
          return
        end
        case item.kind
        when 1; drop_item = $data_items[item.item_id]
        when 2; drop_item = $data_weapons[item.weapon_id]
        when 3; drop_item = $data_armors[item.armor_id]
        end
        draw_icon(drop_item.icon_index,(first ? 94 : 300), 318)
        contents.draw_text((first ? 0 : 200), 284, 92, 92, drop_item.name)
      end
    Вот здесь мы отрисовали предметы, верно? Соответственно вводим дополнительную проверку - если предмет найден.
    Тут 90% кодеров предложат тебе сделать глобальный массив переключателей. Так вот - НИ В КОЕМ СЛУЧАЕ!
    Лезешь в справку по мейкеру и ищешь класс зловредного монстрюгана. Все встроенные классы, экземпляры которых грузятся из игровых баз, входят в модуль RPG. Соответственно. Ищешь RPG::Enemy - класс врагов.
    Внизу страницы увидишь код этого класса. Копируешь к себе в проект, вставляешь над Main. Если ты придерживаешься той парадигмы, которая настойчиво советует дополнять имеющиеся классы, а не переписывать их заново - то флаг тебе в руки, удаляй все, кроме объявления класса и добавляй новые свойства. Я терпеть не могу, когда код неполный и непонятно - в каких закромах искать тот или иной метод, поэтому оставил бы весь код целиком, опять же дополнив собственным свойствами:
    attr_accessor :isDropedItem1
    attr_accessor :isDropedItem2
    Что такое аттрибуты, более подробно можешь почитать в русской справке от Ripp3r и Warrior, но если в кратце - это локальные переменные класса, доступные на чтение/запись извне. accessor - можно записывать и считывать writter - только записывать reader - только считывать. Поскольку нам нужно и установить и считать - оставляем accessor. Если соблюдать правила, то неплохо бы добавить в код и выдранный из правки блок инициализации, установив твоим новым свойствам значения по-умолчанию в false.
    Мы определились - как хранить информацию о том выпали ли предметы. Теперь реализация. Где выпадают предметы? Правильно - в Scene_Battle => лезем туда. Сразу же загоняем в поиск уже знакомое свойство drop_item и тут же находим вызов метода display_drop_items. Лезем искать его самого, находим.
    Код:
    #--------------------------------------------------------------------------
      # * Display Gained Drop Items
      #--------------------------------------------------------------------------
      def display_drop_items
        drop_items = $game_troop.make_drop_items
        for item in drop_items
          $game_party.gain_item(item, 1)
          text = sprintf(Vocab::ObtainItem, item.name)
          $game_message.texts.push(text)
        end
        wait_for_message
      end
    Что мы видем? Что все очень грустно, и разработчики не взаимодействуют напрямую с врагами, при подборе предметов, а расчитывают их выпадение на всю группу. Впрочем, никакой катастрофы тут нет. Ведь подсчитываются они в одном случае - при победе в битве, а, значит. мы можем без зазрения совести изменить тот метод. Лезем в Game_Troop.

    Снова забиваем в поиск "drop" и находим очередной метод:
    Код:
    #--------------------------------------------------------------------------
      # * Create Array of Dropped Items
      #--------------------------------------------------------------------------
      def make_drop_items
        drop_items = []
        for enemy in dead_members
          for di in [enemy.drop_item1, enemy.drop_item2]
            next if di.kind == 0
            next if rand(di.denominator) != 0
            if di.kind == 1
              drop_items.push($data_items[di.item_id])
            elsif di.kind == 2
              drop_items.push($data_weapons[di.weapon_id])
            elsif di.kind == 3
              drop_items.push($data_armors[di.armor_id])
            end
          end
        end
        return drop_items
      end
    Итак, теперь у нас есть экземпляр врага и можно действовать.
    Сразу после строчки next if rand(di.denominator) != 0, которая определит - не выпал ли предмет, вставляем свой страшный код:
    Если di равно первому выпадающем предмету, установить $game_enemies[enemy.id].isDropedItem1 равным true, иначе - $game_enemies[enemy.id].isDropedItem2

    Наконец, последний штрих: возвращаясь к исходному методу, добавляем в самое начало условие: if (first ? @enemigo.isDropedItem1 : @enemigo.isDropedItem2) == true, то - выполняем старый код, иначе, contents.draw_text((first ? 0 : 200), 284, 92, 92, "?????????").

    Вот, собственно, и все. Действуй!

  2. #422
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    слушай Equilibrium Keeper еще маленький вопрос возник по поводу как убрать цифры в правом нижнем углу при ходе и уменьшить шрифт при выводи золота при убийстве монстров...

  3. #423

    По умолчанию

    Цитата Сообщение от Темный Посмотреть сообщение
    слушай Equilibrium Keeper еще маленький вопрос возник по поводу как убрать цифры в правом нижнем углу при ходе и уменьшить шрифт при выводи золота при убийстве монстров...
    Ленишься?
    Что есть золото? Это то, что мы указываем монстрам в графе Gold. Сложно представить, что параметр класса будет называться иначе, но можно и проверить - залезть в справку, в RPG::Enemy и убедиться - действительно gold. Лезем в Scene_Battle (скрипта, естественно, а не стандартную) и ищем gold (Ctrl+F). Чуть ниже первого же вхождения видим show_gold_gain if @gold > 0 - если денег больше 0, то показать количество. Ищем def show_gold_gain (если бы не нашли - смотрели бы в родительском классе, если таковой имеется, но мы нашли). Чудовищных размеров метод - даже лень разбираться чего туда автор понапихал, тем более что нас интересуют всего несколько строчек: bmp.font.size = 70 Меняй! Смотри - она там не одна. Не знаю зачем и мне лень думать. Может, тень или еще что. Но правишь все. Если поплывет что-то еще - возвращай как было и правь по одной.

    С этим разобрался. Теперь нижний угол... Это координаты. Но искать в коде coord дело гиблое - много их. Тогда следуем за кодом. Когда они обновляются? Правильно - при движениях влево-вправо\вверх-вниз. Следовательно ищем, скажем, Input::RIGHT (почему? если есть желание разобраться, то рекомендую разобраться в работе какой-нибудь простенькой сценки, исопльзуя русскую справку R&W, это будет не сложно; если что - помогу).
    Таких записей в коде несколько. Понятно, что установка активного "актёра" нас не интересует. А вот метод update_cursor - то что надо! И в конце этого метода мы видим:
    Код:
    @cur_location.bitmap.clear
        if @cursor_active
          @cur_location.bitmap.font.size = 30
          @cur_location.bitmap.draw_text(0,0,80,40,sprintf("%d, %d", @cursor.x, @cursor.y),2)
          @cur_location.bitmap.draw_text(0,24,80,40, sprintf("%d h", check_th(@cursor.x, @cursor.y)),2) if $game_map.iso?
        end
        @spriteset.cursor.moveto(@cursor.x, @cursor.y)
    @cur_location - название говорит само за себя. Что мы можем сделать с ним? Можем, к примеру, выкусить на корню. А можем сделать невидимым (ибо, если проследить от начала сцены, то ты увидешь, что это Sprite, а у спрайтов есть свойство visible. Но перед этим надо удостовериться, что автор нигде эту самую видимость не выставляет сам. Ищем @cur_location.visible
    И что же мы видим? Ты бессовестным образом не прочитал документацию по скрипту! :P
    @cur_location.visible = (not GTBS::HIDE_CURSOR_POSITION_INFO)
    Достаточно пройти в раздел GTBS_Engine_Settings, найти говорящую константу:
    Код:
    #-------------------------------------------------------------
      # Hide Cursor Position - Hide x,y,height info? (true or false)
      #-------------------------------------------------------------
      HIDE_CURSOR_POSITION_INFO = false
    И заменить значение false на true - все, больше ты координат не увидишь. (Правда, они продолжат отрисовываться, отжирая драгоценные FPS, за что автору неплохо бы надрать уши). Так что, если он не понадобится тебе вовсе, я бы полностью выкусил из кода помянутый @cur_location, просто пробежавшись по сцене и комментируя\удаляя любые упоминания о нем.

  4. #424
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    блин ты просто просветитель мой)) с тобой я подгоню ее под свои нужды. еще раз благодарность!)
    пойду все выкусывать)) а то не охото не настроенную на русский язык переводить)

  5. #425

    По умолчанию

    Давай-давай.
    Кстати, я бы посоветовал тебе заменить стандартный Window (не Window_Base, а именно Window). Вот то, что я делал для XP. Должен подойти и для VX ( с него писал):
    http://rpgmaker.su/showthread.php/11...Window?p=37502

    И изменить для окошка статуса (то самое, в углу) ox и oy.
    ox, скорее всего, поставить 2, oy - 4. Ну или как-то так - посмотри, как будет лучше смотреться.
    Это все для уменьшения отступа между границей окна и его содержимым (по-умолчанию, она аж 16). Окошко сразу станет маленьким и аккуратным. Кроме того, можешь еще поиграться с размерами и положением внутренних элементов. Немного уменьшить морду героя и т.д. В общем, чтобы эта хренотень не закрывала пол экрана, а была маленькой, удобной, и инфомративной. (если там еще место для статусов, то, наверное, с мордой не получится, но в любом случае - подумай).
    Последний раз редактировалось Equilibrium Keeper; 08.07.2011 в 22:12.

  6. #426
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    ага сейчас поставлю аосмотрю что тами как . кстати там же можно и морды противников ставить я как то находил эту функцию и потерял не подскажешь как ее найти?

  7. #427

    По умолчанию

    Бвахахаах. Смотрел твое, а нашел предыдущее:
    Вот здесь:
    lass Windows_Status_GTBS < Window_Base
    attr_accessor :attacker
    attr_accessor :skill
    #----------------------------------------------------------------------------
    # Constants
    #----------------------------------------------------------------------------
    Gauge_Width = 100
    #----------------------------------------------------------------------------
    # * Object Intialization
    # actor = Game_Actor/Game_Enemy/nil
    #----------------------------------------------------------------------------
    def initialize(actor = nil)

    Та самая злосчастная строчка. Меняй на left
    self.move_to("right")

    ---

    В том же коде есть скрипт:
    Код:
    def draw_actor_face(actor, x, y, size = 96)
        if GTBS::VX
          draw_face(actor.face_name, actor.face_index, x, y, size)
        else
          file = sprintf("Graphics/Pictures/Faces/%s.png", actor.name)
          if FileTest.exist?(file)
            bitmap = RPG::Cache.picture(sprintf('/Faces/%s',actor.name))
          else
            bitmap = Bitmap.new(1,1)
          end
          dest_rect = Rect.new(width-32-96,24,96,96)
          src_rect = Rect.new(0,0,bitmap.width, bitmap.height)
          self.stretch_blt(dest_rect, bitmap, src_rect, GTBS::CONTROL_OPACITY) 
        end
      end
      def draw_face(face_name, face_index, x, y, size = 96)
        bitmap = Cache.face(face_name) rescue bitmap = Bitmap.new(1,1)
        rect = Rect.new(0, 0, 0, 0)
        rect.x = face_index % 4 * 96 + (96 - size) / 2
        rect.y = face_index / 4 * 96 + (96 - size) / 2
        rect.width = size
        rect.height = size
        self.blt(x, y, bitmap, rect)
        bitmap.dispose
      end
    Попробуй для начала просто скинуть в указанную папку картинку с именем монстра. А там поглядим.

    ---
    Тэкс, ну, для начала, ты должен задать монстрам face_index и face_name. Второе - имя файла с лицами. Первое - порядковый номер лица в файле. Где - уже тебе виднее.
    Последний раз редактировалось Equilibrium Keeper; 09.07.2011 в 00:44.

  8. #428
    Хранитель Аватар для Темный
    Информация о пользователе
    Регистрация
    13.05.2011
    Сообщений
    2,449
    Записей в дневнике
    20
    Репутация: 50 Добавить или отнять репутацию

    По умолчанию

    нашел я где прописывать имена и картинки батлам врагов)) осталось последние там в начеле установлено изменение графики при смерти героев на зачеркнутую но жто не красиво(( как сделать чтоб они исчезали как враги?

  9. #429

    По умолчанию

    Смотри в той же сценке по слову dead. Там очень многое связано. Та же возможность воскрешения. Если она тебе не нужна - смотри, как это сделано для врагов (там полно проверок, аля is_enemy?) и делай тоже самое для игрока.

  10. #430
    Местный Аватар для Alex333
    Информация о пользователе
    Регистрация
    05.06.2011
    Адрес
    Старый Оскол,Белгородская обл.
    Сообщений
    146
    Репутация: 4 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Equilibrium Keeper Посмотреть сообщение
    Вот, собственно, и все. Действуй!
    Я собственно не особо скриптер и во всём что ты мне написал,так ладу и не дал.Помоги собрать его.

Страница 43 из 185 ПерваяПервая ... 3341424344455393143 ... ПоследняяПоследняя

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

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

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

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

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

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

Ваши права

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