Войти на сайт

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

ТЕМА: Скрипт для переменных

Скрипт для переменных 8 года 9 мес. назад #83761

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 2 местоПроект месяца 1 место
Здравствуйте уважаемые пользователи данного ресурса.

Заранее проведя старательный поиск одного скрипа решил обратиться к вам так как не нашлось того что мне необходимо.

А ищу я скрипт казалось бы не сложный нужно выводить несколько переменных на экран и задавать их положение по X Y.

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

Скрипт для переменных 8 года 9 мес. назад #83763

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • Организатор конкурсов3 место2 место Сбитая кодировка2 место Победитель Сбитой кодировкиПроект месяца 1 место3 место ГотвПрограммист JavaScript Писатель 3 местоПроект месяца 2 место
rpg-maker.info/forum/projects/60152-v-poiskakh-internetov - вроде бы игра не зашифрована, посмотрите, удастся ли выдернуть механизм оттуда.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 9 мес. назад #83764

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 2 местоПроект месяца 1 место
Cerberus пишет:
rpg-maker.info/forum/projects/60152-v-poiskakh-internetov - вроде бы игра не зашифрована, посмотрите, удастся ли выдернуть механизм оттуда.
Данный скрипт уже ставил, там каждая новая переменная размещается ниже предыдущей без возможности разместить в другом месте.
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83770

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

Написано!
=begin
  Пример использования:
  1. Добавить в ивент команду "Вызвать скрипт"
  2. Скопировать туда следующий код:
    show_var 1,0,0,"Variables[1]=%d"
=end
class Scene_Base  
  def show_var(id,x,y,title="%d")
    puts "id is trying to show"
    @spr||=[]
    @spr[id]||={
      :sprite =>  nil,
      :title  =>  "%d",
      :value  =>  nil
    }
    @spr[id][:value] = $game_variables[id]
    @spr[id][:title] = format(title,@spr[id][:value])
 
    @spr[id][:sprite] = Sprite.new if @spr[id][:sprite].nil?
    @spr[id][:sprite].x = x
    @spr[id][:sprite].y = y
    @spr[id][:sprite].z = 250
 
    @spr[id][:sprite].bitmap.dispose if !@spr[id][:sprite].bitmap.nil?
    temp = Bitmap.new(640,480)
    w = temp.text_size(@spr[id][:title]).width
    h = temp.text_size(@spr[id][:title]).height
    temp.dispose
 
    @spr[id][:sprite].bitmap = Bitmap.new(w+2,h+2)    
    @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,w,h),@spr[id][:title])
  end
 
  alias before_vars_update update
  def update
    before_vars_update
    if !@spr.nil?
      for id in 1..999
        next if @spr[id].nil?
 
        if $game_variables[id]!=@spr[id][:value]
          @spr[id][:value] = $game_variables[id].clone
          @spr[id][:title] = format(title,@spr[id][:value])
          w = @spr[id][:sprite].bitmap.text_size(@spr[id][:title])
 
          if w > @spr[id][:sprite].bitmap.width
 
            temp = Bitmap.new(640,480)
            w = temp.text_size(@spr[id][:title]).width
            h = temp.text_size(@spr[id][:title]).height
            temp.dispose
 
            @spr[id][:sprite].bitmap = Bitmap.new(w+2,h+2)            
            @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,w,h),@spr[id][:title])
          end
 
          @spr[id][:sprite].bitmap.draw_text(@spr[id][:title])
        end
 
      end# end for
    end# end if
  end
end
 
class Game_Interpreter
  def show_var(*args)
    SceneManager.scene.show_var(*args)
  end
end

Пример использования:


Примечание к использованию: в строке title должно быть обязательно одно и только одно сочетание символов %d, туда вписывается значение переменной! (Подробнее о правилах форматирования строк читайте в справке по команде format или sprintf)

Метод show_var может быть использован в коде сцен или же вызван с помощью команды "Call Script" ("Вызвать скрипт") из события.

Да, кстати, размер шрифта и прочее в коде не настраивается, он просто берет шрифт и размер по умолчанию (у меня по умолчанию он мелкий, что легко заметить по скриншоту выше)
Последнее редактирование: 8 года 8 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: strelokhalfer, igo12

Скрипт для переменных 8 года 8 мес. назад #83773

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Даритель СтимкеяПрограммист RubyОрганизатор конкурсов2 место Переводчик2 место Сбитая кодировка
Эльф, можно сделать пресеты, и от них плясать с отображением.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83775

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 2 местоПроект месяца 1 место
Здравствуйте большое спасибо за отзывчивость и скрипт!
Правда возникла проблема с его использованием, когда значение переменной меняется, игра разрушается с ошибкой:
---------------------------
 
---------------------------
Script 'переменаая' line 42: TypeError occurred.
 
can't clone Fixnum
---------------------------
ОК   
---------------------------
Регулировка размера шрифта было бы безусловно очень полезна так как данным способом я хочу реализовать вывод параметров транспорта: количество топлива, снарядов, здоровья и т.п.
Последнее редактирование: 8 года 8 мес. назад от igo12.
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83776

  • Cerberus
  • Cerberus аватар
  • Вне сайта
  • Модератор
  • Собака злая
  • Сообщений: 2269
  • Спасибо получено: 1182
  • Организатор конкурсов3 место2 место Сбитая кодировка2 место Победитель Сбитой кодировкиПроект месяца 1 место3 место ГотвПрограммист JavaScript Писатель 3 местоПроект месяца 2 место
Просто уберите из этой строки clone, чтобы было
@spr[id][:value] = $game_variables[id]
- тогда всё должно заработать.
Жуть болотная, на лапках, в тапках и с пулемётом...
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83777

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 2 местоПроект месяца 1 место
Cerberus пишет:
Просто уберите из этой строки clone, чтобы было
@spr[id][:value] = $game_variables[id]
- тогда всё должно заработать.
---------------------------
 
---------------------------
Script 'переменаая' line 43: NameError occurred.
 
undefined local variable or method `title' for #<Scene_Map:0x959e60c>
---------------------------
ОК   
---------------------------
:ermm:
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83780

  • DeadElf79
  • DeadElf79 аватар
  • Вне сайта
  • Звездный Страж
  • Сообщений: 3147
  • Спасибо получено: 2650
  • ВетеранОрганизатор конкурсов1 место в ГотвПрограммист RubyПисатель 3 местоПроект месяца 2 местоУчитель3 местоПроект месяца 1 место
Церб, ты лепишь комментарии просто так, не разбираясь в коде, да? Тогда, цербер, просто удали это из main и твоя кербь выйдет сразу в десяти частях!
rgss_main { SceneManager.run }

igo12. виноват, проверил только отображение, а про отрисовку не посмотрел.
Upd. Добрался до компа и сел нормально. Все проверил, протестировал и поправил. Держите:
=begin
  Пример использования:
  1. Добавить в ивент команду "Вызвать скрипт"
  2. Скопировать туда следующий код:
    show_var 1,0,0,"Variables[1]=%d"
=end
class Scene_Base
  FONT_NAME = ["Times New Roman","Arial"]
  FONT_SIZE = 32
 
  def show_var(id,x,y,title="%d")
    puts "var id is trying to show"
    @spr||=[]
    @spr[id]||={
      :sprite     =>  nil,
      :origtitle  =>  "%d",
      :title      =>  "%d",
      :value      =>  nil
    }
    @spr[id][:value]      = $game_variables[id]
    @spr[id][:origtitle]  = title
    @spr[id][:title]      = format(@spr[id][:origtitle],@spr[id][:value])
 
    @spr[id][:sprite] = Sprite.new if @spr[id][:sprite].nil?
    @spr[id][:sprite].x = x
    @spr[id][:sprite].y = y
    @spr[id][:sprite].z = 250
 
    @spr[id][:sprite].bitmap.dispose if !@spr[id][:sprite].bitmap.nil?
    temp = Bitmap.new(640,480)
    w = temp.text_size(@spr[id][:title]).width
    h = temp.text_size(@spr[id][:title]).height
    temp.dispose
 
    @spr[id][:sprite].bitmap = Bitmap.new(w+2,h+2)
    @spr[id][:sprite].bitmap.font.name = FONT_NAME
    @spr[id][:sprite].bitmap.font.size = FONT_SIZE
    @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,w,h),@spr[id][:title])
  end
 
  alias before_vars_update update
  def update
    before_vars_update
    if !@spr.nil?
      for id in 1..999
        next if @spr[id].nil?
 
        if $game_variables[id]!=@spr[id][:value]
          puts $game_variables[id]
          @spr[id][:value] = $game_variables[id]
          @spr[id][:title] = format(@spr[id][:origtitle],@spr[id][:value])
          w = @spr[id][:sprite].bitmap.text_size(@spr[id][:title])
 
          if w.width > @spr[id][:sprite].bitmap.width
 
            temp = Bitmap.new(640,480)
            wb = temp.text_size(@spr[id][:title]).width
            hb = temp.text_size(@spr[id][:title]).height
            temp.dispose
 
            @spr[id][:sprite].bitmap = Bitmap.new(wb+2,hb+2)
            @spr[id][:sprite].bitmap.font.name = FONT_NAME
            @spr[id][:sprite].bitmap.font.size = FONT_SIZE
            @spr[id][:sprite].bitmap.draw_text(Rect.new(0,0,wb,hb),@spr[id][:title])
          end
        end
 
      end# end for
    end# end if
  end
 
  alias before_vars_terminate terminate
  def terminate
    before_vars_terminate
    return if @spr.nil?
    @spr.each{|spr|
      spr.bitmap.dispose
      spr.dispose
    }
  end
end
 
class Game_Interpreter
  def show_var(*args)
    SceneManager.scene.show_var(*args)
  end
end

Настройки шрифта и размера добавлены. Если нужен цвет - могу дополнить
Последнее редактирование: 8 года 8 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: igo12

Скрипт для переменных 8 года 8 мес. назад #83783

  • igo12
  • igo12 аватар
  • Вне сайта
  • Оседлый
  • Сообщений: 32
  • Спасибо получено: 32
  • Проект месяца 2 местоПроект месяца 1 место
Опять ошибка.
---------------------------
 
---------------------------
Script 'переменаая' line 43: NameError occurred.
 
undefined local variable or method `title' for #<Scene_Map:0x8e3cd3c>
---------------------------
ОК   
---------------------------
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83784

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Даритель СтимкеяПрограммист RubyОрганизатор конкурсов2 место Переводчик2 место Сбитая кодировка
А какой строкой выводится текст?
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83785

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

Скрипт для переменных 8 года 8 мес. назад #83786

  • strelokhalfer
  • strelokhalfer аватар
  • Вне сайта
  • Архитектор Миров
  • Знатный грамотей
  • Сообщений: 1640
  • Спасибо получено: 1078
  • Даритель СтимкеяПрограммист RubyОрганизатор конкурсов2 место Переводчик2 место Сбитая кодировка
Подозреваю, что пихается title=что то еще, т.е, не используются кавычки.
"Стрелок, что-то ты неочень похож на свой аватар..."(с)
Администратор запретил публиковать записи гостям.

Скрипт для переменных 8 года 8 мес. назад #83787

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

Да, эльф уже просто психанул, раз пилит демку к этому скрипту.
yadi.sk/d/C3vAhyWNiGZRq
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: igo12
Модераторы: NeKotZima
Время создания страницы: 0.355 секунд