Войти на сайт

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

ТЕМА: (XP) Save Your Items

(XP) Save Your Items 13 года 6 мес. назад #36056

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
Название: Save Your Items
Автор: srg91
Версия: 1.2
Дата выхода: 07-10-2010
Ссылка: Выложил код

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

Управление скриптом:
+ Загрузка инвентаря из ячейки с номером Index - $player_items.save(Index)
+ Сохранение инвентаря в ячейку с номером Index - $player_items.load(Index)
+ Очищение всего инвентаря игрока - $player_items.clear

[!] Может не работать с патчем от Riper'а

Огромная благодарность dark32 за помощь в освоении скриптов :)

Код:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Последнее редактирование: 13 года 6 мес. назад от srg91.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: Dr. Nick To, AnnTenna, Agckuu_Coceg

(XP) Save Your Items 13 года 6 мес. назад #36057

  • AnnTenna
  • AnnTenna аватар
  • Вне сайта
  • Администратор
  • ловлю волны настроения
  • Сообщений: 4543
  • Спасибо получено: 4694
  • Победитель конкурсаПроект месяца 1 местоОрганизатор конкурсовПобедитель Сбитой кодировкиПроект месяца 3 местоУчительПроект года 2 место2 место 2 место ГотвКоммерсант
srg91, респект. Во многих проектах этого не хватает, надеюсь, скрипт будет использован многими:) Что касается востребованности, точно помню, что раньше было нужно кому-то(и не одному), и, думаю, пригодится, никуда не денется.

Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

(XP) Save Your Items 13 года 6 мес. назад #36058

  • Sn@ke
  • Sn@ke аватар
  • Вне сайта
  • Светлый дракон
  • Три в одном
  • Сообщений: 936
  • Спасибо получено: 299
  • УчительПроект месяца 1 место
Да, вещь, безусловно, очень нужная. Мне бы этот скрипт пригодился. Только вопрос - а где, собственно, сам скрипт? Можешь выложить его в виде кода или спойлера?
"Люди, Ангелы, Демоны... Есть ли между ними разница? Я не согласен с теми, кто утверждает, что Демоны - это абсолютное зло. Бывают Люди, гораздо хуже Демонов.И бывают Демоны куда более великодушные, чем Ангелы. Важно не то, кто ты, а то, кем ты хочешь быть..."
- Найн, Высший Демон -
Dark Arts - The Wings of Angel
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ]
Администратор запретил публиковать записи гостям.

(XP) Save Your Items 13 года 6 мес. назад #36063

  • Agckuu_Coceg
  • Agckuu_Coceg аватар
  • Вне сайта
  • Архитектор Миров
  • Простой Гинтокист с огромной внутренней ленью.
  • Сообщений: 1549
  • Спасибо получено: 329
  • Организатор конкурсовПисатель 2 место3 место2 место ГотвПобедитель конкурса
Надо сказать, неплохо. Работа понравилась.

А вот код... Там ещё изменены Scene_Title, Scene_Load и Scene_Save - так что лучше взять демо.
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 13 года 6 мес. назад от Agckuu_Coceg.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

(XP) Save Your Items 13 года 6 мес. назад #36066

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
Там, в каждом, изменена одна строчка, я пометил ее комментарием.
Их можно скопировать и вставить в Scene_Title, Scene_Load и Scene_Save своего проекта.

Просто я пока не знаю, как все засунуть в один код.. )
Последнее редактирование: 13 года 6 мес. назад от srg91.
Администратор запретил публиковать записи гостям.

(XP) Save Your Items 13 года 6 мес. назад #36071

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
1. Патч от Riper'а, возможна не совместимость с другими скриптами
2. на лицо плохое знание синтаксиса языка, в следствие чего пустой код
for i in 1...$data_armors.size
   if $game_party.armor_number(i) > 0
      @armor_count = $game_party.armor_number(i)
      $game_party.lose_armor(i, @armor_count)
   end
end
можно сделать так
$data_armors.each_index { |i|
 $game_party.lose_armor(i, $game_party.armor_number(i)) if $game_party.armor_number(i) > 0 
}
for i in 1...$data_items.size
    if $game_party.item_number(i) > 0
       @items[index].push(@items[index].size)
       @items[index][@items[index].size-1] = Array.new(3)
       @items[index][@items[index].size-1][0] = i
       @items[index][@items[index].size-1][1] = $game_party.item_number(i)
       @items[index][@items[index].size-1][2] = 0
    end
 end
на
$data_items.each_index do |i|
    if $game_party.item_number(i) > 0
       @items[index].push(@items[index].size) # это можно оптимизировать, только я не понимаю что это делает
       @items[index].last = Array.new(3)
       @items[index].last[0] = i
       @items[index].last[1] = $game_party.item_number(i)
       @items[index].last[2] = 0
    end
 end
3. используем alias
4. вместо конструкции if elsif else end в данном случае логичней использовать case

[code type=php-brief]
if @items[index][2] == 0
$game_party.gain_item(@items[index][0], @items[index][1])
elsif @items[index][2] == 1
$game_party.gain_weapon(@items[index][0], @items[index][1])
elsif @items[index][2] == 2
$game_party.gain_armor(@items[index][0], @items[index][1])
end[/code]
на
[code type=php-brief]
case @items[index][2]
when 0: $game_party.gain_item(@items[index][0], @items[index][1])
when 1: $game_party.gain_weapon(@items[index][0], @items[index][1])
when 2: $game_party.gain_armor(@items[index][0], @items[index][1])
end[/code]

P.S.1. Скрипт понравился
P.S.2. Админ, сделай подсветку Ruby синтаксиса, а то php не полностью правильно подсвечивает.
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 13 года 6 мес. назад от dark32.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

(XP) Save Your Items 13 года 6 мес. назад #36087

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
Благодарен за оптимизацию, буду разбираться, улучшать.

И по пунктам:

1. Патч не влияет на работу инвентаря, разработал я его со старыми скриптами..
2. Ага, я не знаю Ruby, писал скрипт только основываясь на скриптах в RPGMaker XP и паре статей на Wiki.

Код
@items[index].push(@items[index].size)
создает новую ячейку в массиве @items[Index], для того чтобы к ней можно было обратится..
У меня иначе ошибку выдает.

3. используем alias
А где, и зачем?

4. Да, я тоже хотел так, но не знал, как использовать case, а потом забыл посмотреть )

---
И хотел бы улучшить конструкцию с помощью объектов, чтобы не создавать массив с 3мя параметрами
       @items[index][@items[index].size-1][0] = i
       @items[index][@items[index].size-1][1] = $game_party.item_number(i)
       @items[index][@items[index].size-1][2] = 0
Администратор запретил публиковать записи гостям.

(XP) Save Your Items 13 года 6 мес. назад #36088

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
2.2
создает новую ячейку в массиве @items[Index], для того чтобы к ней можно было обратится..
У меня иначе ошибку выдает.
Странно... никогда не сталкивался с таким... насколько мне известно массивы в Ruby динамические и расширяются автоматически...
ну тогда может так
@items[index]<<0
по сути мы добавляем новый элемент 0 в массив @items[index] (<< и .push равнозначны)
3. чтобы не изменять родные классы мы их переименуем и добавим в них новые функции. Я нашу позже подробнее.
4.1. а чем много мерные массивы не нравятся
4.2 вместо @items[index].size-1 можно использовать -1, индексация массива с конца, или .last - последний элемент
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

(XP) Save Your Items 13 года 6 мес. назад #36100

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
2.2 Я тоже читал, что это так, но, почему то, на практике так не получается.. Наверное у меня просто руки немножко, кхм, начинающего :)

да, кстати, потихоньку модифицирую и @items[index]<<0 работает, спасибо^^

3. Буду очень благодарен, если найдешь время объяснить, я немного не понимаю.

4.1 Да они то всем устраивают (особенно, когда их схему вообразить в 3д :) ). Просто думал, так будет быстрее, хотя не знаю )

4.2 Ой, а я забыл про это..
И заметил, что так @items[index].last = new Array(3) нельзя, в этом случае @items[index][-1].

---
Подредактировал, вроде все работает.
Понравился each_index, использую
Последнее редактирование: 13 года 6 мес. назад от srg91.
Администратор запретил публиковать записи гостям.

(XP) Save Your Items 13 года 6 мес. назад #36133

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
у массивов ещё .each есть, идёт по всем элементам массива.

если нужна помощь по скриптам, почитай тут rpg-maker.info/forum/rgss/32709-soobshhe...ripterov--akademiya-
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91

(XP) Save Your Items 13 года 6 мес. назад #36199

  • srg91
  • srg91 аватар
  • Вне сайта
  • Путник
  • Сообщений: 7
  • Спасибо получено: 3
Доделал скрипт, выложил только код. Спасибо большое, dark32 ^_^
Последнее редактирование: 13 года 6 мес. назад от srg91.
Администратор запретил публиковать записи гостям.

(XP) Save Your Items 13 года 6 мес. назад #36205

  • dark32
  • dark32 аватар
  • Вне сайта
  • Просветлённый
  • Тёмный
  • Сообщений: 361
  • Спасибо получено: 21
  • Организатор конкурсов
Ну что за многократно вложенные условия?
def load(index)
    if index <= @items.size
      if @items[index] != nil
        clear
 
        $game_party.gain_gold(@items[index][0])
 
        @items[index].each_index { |i| 
 
          case @items[index][i][2]
          when 0
            $game_party.gain_item(@items[index][i][0], @items[index][i][1])
          when 1
            $game_party.gain_weapon(@items[index][i][0], @items[index][i][1])
          when 2
            $game_party.gain_armor(@items[index][i][0], @items[index][i][1])
          end
 
        }
 
      end # end if
    end # end if
  end # end def

разве так нельзя?
def load(index)
# проверка на nil лишняя, ибо всё что не nil то истенно
# кажется даже проверка на вхождение индекса в массив лишняя, @items[index] от любого index существует, 
#ァ если же indexза пределами массива то вернёт nil
    if index <= @items.size && @items[index] # && почти and, только приоритет разный
        clear
        $game_party.gain_gold(@items[index][0])
        @items[index].each { |it| # зачем идти по всем индексам, если можно пройтись по всем элементам?
          case it[2]
          when 0: $game_party.gain_item   ( it[0], it[1])# если действие в одну строку, то можно написать его после when через :
          when 1: $game_party.gain_weapon ( it[0], it[1])
          when 2: $game_party.gain_armor  ( it[0], it[1])
          end
         }
      end # end if
  end # end def
Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Последнее редактирование: 13 года 6 мес. назад от dark32.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: srg91
Модераторы: NeKotZima
Время создания страницы: 0.551 секунд