(XP) Save Your Items

Больше
15 года 7 мес. назад - 15 года 6 мес. назад #36056 от srg91
srg91 создал тему: (XP) Save Your Items
Название: Save Your Items
Автор: srg91
Версия: 1.2
Дата выхода: 07-10-2010
Ссылка: Выложил код

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

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

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

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

Код:
ВНИМАНИЕ: Спойлер!
Последнее редактирование: 15 года 6 мес. назад пользователем srg91.
Спасибо сказали: Dr. Nick To, AnnTenna, Agckuu_Coceg

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Разработчик Коммерсант Проект месяца 1 место Проект месяца 2 место 3 место в Кодировке Ветеран Учитель Организатор конкурсов Даритель Стимкея Проект месяца 3 место 2 место Готв Победитель Сбитой кодировки 2 место Победитель конкурса 3 место
Больше
15 года 7 мес. назад #36057 от AnnTenna
AnnTenna ответил в теме (XP) Save Your Items
srg91, респект. Во многих проектах этого не хватает, надеюсь, скрипт будет использован многими:) Что касается востребованности, точно помню, что раньше было нужно кому-то(и не одному), и, думаю, пригодится, никуда не денется.
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Проект месяца 1 место Учитель
Больше
15 года 7 мес. назад #36058 от Sn@ke
Sn@ke ответил в теме (XP) Save Your Items
Да, вещь, безусловно, очень нужная. Мне бы этот скрипт пригодился. Только вопрос - а где, собственно, сам скрипт? Можешь выложить его в виде кода или спойлера?

"Люди, Ангелы, Демоны... Есть ли между ними разница? Я не согласен с теми, кто утверждает, что Демоны - это абсолютное зло. Бывают Люди, гораздо хуже Демонов.И бывают Демоны куда более великодушные, чем Ангелы. Важно не то, кто ты, а то, кем ты хочешь быть..."
- Найн, Высший Демон -
Dark Arts - The Wings of Angel
ВНИМАНИЕ: Спойлер!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

2 место Готв Писатель 2 место 3 место Победитель конкурса Организатор конкурсов
Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36063 от Agckuu_Coceg
Agckuu_Coceg ответил в теме (XP) Save Your Items
Надо сказать, неплохо. Работа понравилась.

А вот код... Там ещё изменены Scene_Title, Scene_Load и Scene_Save - так что лучше взять демо.

Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 15 года 7 мес. назад пользователем Agckuu_Coceg.
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36066 от srg91
srg91 ответил в теме (XP) Save Your Items
Там, в каждом, изменена одна строчка, я пометил ее комментарием.
Их можно скопировать и вставить в Scene_Title, Scene_Load и Scene_Save своего проекта.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36071 от dark32
dark32 ответил в теме (XP) Save Your Items
1. Патч от Riper'а, возможна не совместимость с другими скриптами
2. на лицо плохое знание синтаксиса языка, в следствие чего пустой код
Code:
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
можно сделать так
Code:
$data_armors.each_index { |i| $game_party.lose_armor(i, $game_party.armor_number(i)) if $game_party.armor_number(i) > 0 }
Code:
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
на
Code:
$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:
if @items[index][i][2] == 0 $game_party.gain_item(@items[index][i][0], @items[index][i][1]) elsif @items[index][i][2] == 1 $game_party.gain_weapon(@items[index][i][0], @items[index][i][1]) elsif @items[index][i][2] == 2 $game_party.gain_armor(@items[index][i][0], @items[index][i][1]) end
на
Code:
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

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

Тьма, тьма, и ничего кроме тьмы...

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 7 мес. назад #36087 от srg91
srg91 ответил в теме (XP) Save Your Items
Благодарен за оптимизацию, буду разбираться, улучшать.

И по пунктам:

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

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

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

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

---
И хотел бы улучшить конструкцию с помощью объектов, чтобы не создавать массив с 3мя параметрами
Code:
@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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 7 мес. назад #36088 от dark32
dark32 ответил в теме (XP) Save Your Items
2.2

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

Странно... никогда не сталкивался с таким... насколько мне известно массивы в Ruby динамические и расширяются автоматически...
ну тогда может так
Code:
@items[index]<<0
по сути мы добавляем новый элемент 0 в массив @items[index] (<< и .push равнозначны)
3. чтобы не изменять родные классы мы их переименуем и добавим в них новые функции. Я нашу позже подробнее.
4.1. а чем много мерные массивы не нравятся
4.2 вместо @items[index].size-1 можно использовать -1, индексация массива с конца, или .last - последний элемент

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 7 мес. назад - 15 года 7 мес. назад #36100 от srg91
srg91 ответил в теме (XP) Save Your Items
2.2 Я тоже читал, что это так, но, почему то, на практике так не получается.. Наверное у меня просто руки немножко, кхм, начинающего :)

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

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

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

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

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 7 мес. назад #36133 от dark32
dark32 ответил в теме (XP) Save Your Items
у массивов ещё .each есть, идёт по всем элементам массива.

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

Тьма, тьма, и ничего кроме тьмы...

ПОМОГИТЕ!!! или как быстро получить бан!
Спасибо сказали: srg91

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36199 от srg91
srg91 ответил в теме (XP) Save Your Items
Доделал скрипт, выложил только код. Спасибо большое, dark32 ^_^
Последнее редактирование: 15 года 6 мес. назад пользователем srg91.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Организатор конкурсов
Больше
15 года 6 мес. назад - 15 года 6 мес. назад #36205 от dark32
dark32 ответил в теме (XP) Save Your Items
Ну что за многократно вложенные условия?
Code:
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

разве так нельзя?
Code:
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

Тьма, тьма, и ничего кроме тьмы...

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.128 секунд
Работает на Kunena форум