ГлавнаяФорумRPG MakerСкрипты/ПлагиныRPG Maker XPОстальные скриптыСкрипт касается лимита инвентаря.Помогите улучшить
Войти на сайт
×
|
ТЕМА: Скрипт касается лимита инвентаря.Помогите улучшить
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 1 мес. назад #28812
|
Слушай, друг Maximus, ты хоть свой скрипт пробовал запускать? Это ж ПЦ!
Во-первых, там синтаксические ошибки, из-за которых игра вообще не должна запуститься. Во-вторых, "if @items[item_id] = SynItemMax::Max_item[item_id]" - это ещё что такое? Присваивание вместо оператора сравнения, да ещё и в условии. В-третьих, ещё один бред в "else". def gain_weapon(weapon_id,n)
if weapon_id > 0
@weapons[weapon_id] = [weapon_number(weapon_id) + n, 0].max, SynItemMax::Max_weapon[weapon_id]].min
$game_switches[switch_id = 276] = true
$game_map.refresh
else
$game_switches[switch_id = 276] = false
$game_map.refresh
end
end Короче говоря, что-то ты странный какой-то скрипт привёл. Я думаю ты сам там что-то намутил и потом сюда выложил. И даже банально на ошибки не проверил. Ещё один момент. Из твоего сообщения совершенно не понятно, что тебе нужно. То ли чтобы вещи в сундуках оставались при превышении лимита, то ли чтобы сообщение показывалось, то ли ещё что-то. Короче говоря, чётко и ясно объясняй - что нужно. Чтобы сразу было понятно. И пользуйся тегом code. |
→ → ↓ ↑ Y
Последнее редактирование: 15 года 1 мес. назад от mephis.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 1 мес. назад #28813
|
mephis
Во-вторых, "if @items[item_id] = SynItemMax::Max_item[item_id]" - это ещё что такое? Присваивание вместо оператора сравнения, да ещё и в условии. Здесь ты не совсем прав. Такая конструкция допустима, я уже об этом писал. В развернутом видел эта строка будет выглядеть так:@items[item_id] = SynItemMax::Max_item[item_id] if (@items[item_id] != nil && @items[item_id] != false) Другое дело, что в нашем случае это не подходит и должен стоять именно оператор сравнения: == В-третьих, ещё один бред в "else". Тут все просто - аффтор копипастил блоки своего скрипта и делал это донельзя криво. Даже end'ы кое-гдн остались.Maximus Ошибок там конечно... Лучше бы ты сам скрипт написал, а не чужой какой пользовался... Да и не удобен он будет в использовании... Впрочем, ладно. Скрипт я исправил, теперь будет работать (протестил на предметах даже!). Теперь собственно, касательно самой работы. Сундук у тебя должен выглядить примерно так: Две страницы. Обе "on action button / по нажатию кнопки". На второй в качестве условия указываешь "Local Switch - A / Личный переключатель A". На первой вставляешь события: "Change Item(Armor, Weapon...) / Изменить количество предметов (Доспехов, оружия)": выдаешь нужный предмет. Далее создаешь условие "Conditional Branch / Условие": в качестве условия выбираешь "Switch / Переключатель" - Номер 276 - Это зарезервированный этим скриптом переключатель, что еще раз говорит о криворукости автора, не используй его в своей игре кроме сундуков. Поставь галочку на создание ветки "else". В действиях до else вызываешь "Change local switch / Переключить личный переключатель" - выбираешь A. Можешь вывести сообщение "Show Message / Показать сообщение": "Поздравляю! Вы нашли кокосы!" В действиях после else (до end) Выводишь сообщение "Show Message / Показать сообщение": "Количество кокосов в вашем инвентаре уже достигло максимума! Приходите позже!" Вот собственно и все. Добавлю, что данный скрипт жутко неудобен и, по сути, бесполезен. Больше возни с ним, чем пользы. А если ты выдаешь несколько предметов, то скрипт еще и попортит игроку нервы. Так что пользовать его я не рекомендую. Масамунэ - он все равно уникален. А если какого-то предмета уже накопилось 99, то я сомневаюсь, что они уже кончатся до самого конца игры. Можно использовать, для расширения или уменьшения количества предметов... но тогда убери из кода переключатель. Короче - скрипт на 2'йку с натягом. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #============================================================================
# *Syn's Maximum Item Limits*
#----------------------------------------------------------------------------
# Written by Synthesize
# Bugfix by Equilibrium Keeper
# Version 1.01
# October 10, 2009
#============================================================================
#----------------------------------------------------------------------------
# Compatability
# Rewrites:
# Game_Party::gain_item
# Game_Party::gain_weapon
# Game_Party::gain_armor
#----------------------------------------------------------------------------
# Begin Customization Section
#----------------------------------------------------------------------------
module SynItemMax
# Format = {item_id => maximum amount}
Max_item = {1=>32,
2=>7,
3=>10,
4=>7,
5=>32,
6=>7,
7=>5,
15=>32,
16=>7,
17=>7,
18=>7,
19=>10,
22=>20,
23=>30,
24=>32,
25=>30,
}
# Default Max Item Storage
Max_item.default = 9999
# Format = {weapon_id => maximum amount}
Max_weapon = {1=>5,
2=>5,
3=>5,
4=>5,
5=>5,
6=>5,
7=>5,
8=>5,
9=>5,
10=>5,
11=>5,
12=>5,
13=>5,
}
# Maximum Weapon storage
Max_weapon.default = 5
# Format = {armor_id => maximum amount}
Max_armor = {1=>10,
2=>10,
3=>10,
4=>10,
5=>10,
6=>10,
7=>10,
8=>10,
9=>10,
10=>10,
11=>10,
12=>10,
13=>10,
14=>10,
15=>10,
16=>10,
17=>10,
18=>10,
19=>10,
20=>10,
21=>10,
22=>10,
23=>10,
24=>10,
25=>10,
26=>10,
}
# Maximum storage space
Max_armor.default = 10
end
#----------------------------------------------------------------------------
# Begin Game_Party rewrite
#----------------------------------------------------------------------------
class Game_Party
#--------------------------------------------------------------------------
# Rewrite gain_item
#--------------------------------------------------------------------------
def gain_item(item_id,n)
if item_id > 0
@items[item_id] = [[item_number(item_id) + n, 0].max, SynItemMax::Max_item[item_id]].min
if @items[item_id] == SynItemMax::Max_item[item_id]
$game_switches[switch_id = 276] = true
$game_map.refresh
else
$game_switches[switch_id = 276] = false
$game_map.refresh
end
end
end
#--------------------------------------------------------------------------
# Rewrite gain_weapon
#--------------------------------------------------------------------------
def gain_weapon(weapon_id,n)
if weapon_id > 0
@weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, SynItemMax::Max_weapon[weapon_id]].min
if @weapons[weapon_id] == SynItemMax::Max_weapon[weapon_id]
$game_switches[switch_id = 276] = true
$game_map.refresh
else
$game_switches[switch_id = 276] = false
$game_map.refresh
end
end
end
#--------------------------------------------------------------------------
# Rewrite gain_armor
#--------------------------------------------------------------------------
def gain_armor(armor_id,n)
if armor_id > 0
@armors[armor_id] = [[armor_number(armor_id) + n, 0].max, SynItemMax::Max_armor[armor_id]].min
if @armors[armor_id] == SynItemMax::Max_armor[armor_id]
$game_switches[switch_id = 276] = true
$game_map.refresh
else
$game_switches[switch_id = 276] = false
$game_map.refresh
end
end
end
#============================================================================
# Written by Synthesize
# Version 1.00
# August 15, 2007
#----------------------------------------------------------------------------
# *Syns Maximum Item Limits*
#============================================================================
end |
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 1 мес. назад #28815
|
Equilibrium Keeper.
Здесь ты не совсем прав. Нет ты. Синтаксически правильная конструкция ещё ни о чём не говорит. Речь шла о логической ошибке использования присваивания в условии. Что должно было иметься в виду это и так ясно. По крайней мере мне и тебе.Кроме этого, мог бы ещё пару минусов заметить. Первое. По достижении максимума в какой-либо вещи невозможно будет взять любую другую вещь из сундука. Ибо блокирующий свитч всего один. Второе. Если проверять его в игре на торговце, то получится что можно покупать сверх лимита, хотя и в инвентаре будет лежать только установленный максимум. Очевидно, что требует переработки и Shop_Processing. Третье. Проверка на максимум вещей - фуфло. Возьмём например пули. Максимум в инвентаре - 100. У нас в кармане - 99. В сундуке - 50. Этот скрипт положит одну пулю нам в карман, а 49 выбросит на ветер. По условию, поставленному автором такого тоже происходить не должно. Скрипт убогий до невозможности. Поэтому я от автора и добиваюсь - чего ему надо-то. По хорошему тут вообще другой подход нужен. |
→ → ↓ ↑ Y
Последнее редактирование: 15 года 1 мес. назад от mephis.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 1 мес. назад #28820
|
Короче, в задницу этот скрипт. Можно попробовать это на другой модели, например на скрипте MogHunter'а. Тот явно таких глюков не предоставляет.
Я конечно, не сильно соображаю, как это можно сделать, но попробую пошерудить в нём. Если кто ещё захочет обработать, ссылку я даю. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] |
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28824
|
mephis писал(а):
Нет ты. Синтаксически правильная конструкция ещё ни о чём не говорит. Речь шла о логической ошибке использования присваивания в условии. Что должно было иметься в виду это и так ясно. По крайней мере мне и тебе. Извини, но ты слишком бурно отреагировал на это, и мне показалось, что тебе претит сама мысль о присваивании в условии, тогда, как иногда это в несколько раз ускоряет работу скрипта, а в случае с циклами, попрой, и вовсе единственный вариант (ибо перед if'ом можно задать переменную, а перед циклом, если она изменяется внутри него - нет[не поможет]).Кроме этого, мог бы ещё пару минусов заметить. Я и заметил, о чем и написал:Первое. По достижении максимума в какой-либо вещи невозможно будет взять любую другую вещь из сундука. Ибо блокирующий свитч всего один. А если ты выдаешь несколько предметов, то скрипт еще и попортит игроку нервы. Второе. Если проверять его в игре на торговце, то получится что можно покупать сверх лимита, хотя и в инвентаре будет лежать только установленный максимум. Очевидно, что требует переработки и Shop_Processing. Мимо. Существует множество способов получить предметы - трофеи с монстров, торговцы, кастомные системы крафта и прочее. Здесь обсуждались сундуки. о них и речь. Третье. Проверка на максимум вещей - фуфло. Возьмём например пули. Максимум в инвентаре - 100. У нас в кармане - 99. В сундуке - 50. Этот скрипт положит одну пулю нам в карман, а 49 выбросит на ветер. По условию, поставленному автором такого тоже происходить не должно. Да, ты прав. Этого не заметил. Agckuu_Coceg В следующий раз давай, пожалуйста, сам скрипт... Вот и он, кстати: ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #_______________________________________________________________________________
# MOG Item Limit V1.7
#_______________________________________________________________________________
# By Moghunter
# http://www.atelier-rgss.com
#_______________________________________________________________________________
# Permite definir o limite maximo para cada item, armas
# ou armaduras.
#_______________________________________________________________________________
module MOG
#-------------------------------------------------------------------------------
# Definição do limite padrão.
#-------------------------------------------------------------------------------
DEFAULT_LIMIT = 50
#-------------------------------------------------------------------------------
# A => B
#
# A = ID do item, armadura ou arma
# B = Quantidade de itens maximo.
#
#-------------------------------------------------------------------------------
#Definição do limite maximo de Itens.
#-------------------------------------------------------------------------------
ITEM_LIMIT = {
1=>60, #Potion
2=>35, #Hi Potion
3=>20, #Full Potion
4=>45, #Perfume
5=>30, #Hi Perfume
6=>15, #Full Perfume
7=>10, #Elixir
8=>5, #Full Elixir
9=>35, #Tonic
10=>15, #Full Tonic
11=>70 #Antidote
}
#-------------------------------------------------------------------------------
#Definição do limite maximo de armas.
#-------------------------------------------------------------------------------
WEAPON_LIMIT = {
1=>9, #Bronze Sword
2=>6, #Iron Sword
3=>3, #Steel Sword
4=>1, #Mythril Sword
5=>9, #Bronze Spear
6=>6, #Iron Spear
7=>3, #Steel Spear
8=>1 #Mythril Spear
}
#-------------------------------------------------------------------------------
#Definição do limite maximo de armaduras.
#-------------------------------------------------------------------------------
ARMOR_LIMIT = {
1=>20, #Bronze Shield
2=>15, #Iron Shield
5=>20, #Bronze Helm
13=>10 #Bronze Armor
}
#-------------------------------------------------------------------------------
#Definição do limite maximo de dinheiro
#-------------------------------------------------------------------------------
GOLD_LIMIT = 100000
#-------------------------------------------------------------------------------
end
$mogscript = {} if $mogscript == nil
$mogscript["Item_Limit"] = true
##############
# Game_Party #
##############
class Game_Party
alias mog45_gain_item gain_item
def gain_item(item_id, n)
if item_id > 0
item_limit = MOG::ITEM_LIMIT[item_id]
if item_limit != nil
@items[item_id] = [[item_number(item_id) + n, 0].max, item_limit].min
else
@items[item_id] = [[item_number(item_id) + n, 0].max, MOG::DEFAULT_LIMIT].min
end
end
return
mog45_gain_item(item_id, n)
end
alias mog45_gain_weapon gain_weapon
def gain_weapon(weapon_id, n)
if weapon_id > 0
weapon_limit = MOG::WEAPON_LIMIT[weapon_id]
if weapon_limit !=nil
@weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, weapon_limit].min
else
@weapons[weapon_id] = [[weapon_number(weapon_id) + n, 0].max, MOG::DEFAULT_LIMIT].min
end
end
return
mog45_gain_weapon(weapon_id, n)
end
alias mog45_gain_armor gain_armor
def gain_armor(armor_id, n)
if armor_id > 0
armor_limit = MOG::ARMOR_LIMIT[armor_id]
if armor_limit != nil
@armors[armor_id] = [[armor_number(armor_id) + n, 0].max, armor_limit].min
else
@armors[armor_id] = [[armor_number(armor_id) + n, 0].max, MOG::DEFAULT_LIMIT].min
end
end
return
mog45_gain_armor
end
def gain_gold(n)
@gold = [[@gold + n, 0].max, MOG::GOLD_LIMIT].min
end
end
##############
# Scene_Shop #
##############
class Scene_Shop
alias mog45_update update
def update
if @sell_window.active == true
$sell = true
else
$sell = false
end
mog45_update
end
alias mog45_update_buy update_buy
def update_buy
if Input.trigger?(Input::C)
@item = @buy_window.item
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
item_limit = MOG::ITEM_LIMIT[@item.id]
if item_limit != nil
if number >= item_limit
$game_system.se_play($data_system.buzzer_se)
return
end
else
if number == MOG::DEFAULT_LIMIT
$game_system.se_play($data_system.buzzer_se)
return
end
end
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
weapon_limit = MOG::WEAPON_LIMIT[@item.id]
if weapon_limit != nil
if number >= weapon_limit
$game_system.se_play($data_system.buzzer_se)
return
end
else
if number == MOG::DEFAULT_LIMIT
$game_system.se_play($data_system.buzzer_se)
return
end
end
when RPG::Armor
number = $game_party.armor_number(@item.id)
armor_limit = MOG::ARMOR_LIMIT[@item.id]
if armor_limit != nil
if number >= armor_limit
$game_system.se_play($data_system.buzzer_se)
return
end
else
if number == MOG::DEFAULT_LIMIT
$game_system.se_play($data_system.buzzer_se)
return
end
end
end
end
mog45_update_buy
end
end
#####################
# Window_ShopNumber #
#####################
class Window_ShopNumber < Window_Base
alias mog45_set set
def set(item, max, price)
@item = item
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
item_limit = MOG::ITEM_LIMIT[@item.id]
if item_limit!= nil
if $sell == true
valor = item_limit - number
@max = item_limit - valor
else
@max = item_limit - number
end
else
if $sell == true
valor = MOG::DEFAULT_LIMIT - number
@max = MOG::DEFAULT_LIMIT - valor
else
@max = MOG::DEFAULT_LIMIT - number
end
end
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
weapon_limit = MOG::WEAPON_LIMIT[@item.id]
if weapon_limit!= nil
if $sell == true
valor = weapon_limit - number
@max = weapon_limit - valor
else
@max = weapon_limit - number
end
else
if $sell == true
valor = MOG::DEFAULT_LIMIT - number
@max = MOG::DEFAULT_LIMIT - valor
else
@max = MOG::DEFAULT_LIMIT - number
end
end
when RPG::Armor
number = $game_party.armor_number(@item.id)
armor_limit = MOG::ARMOR_LIMIT[@item.id]
if armor_limit!= nil
if $sell == true
valor = armor_limit - number
@max = armor_limit - valor
else
@max = armor_limit - number
end
else
if $sell == true
valor = MOG::DEFAULT_LIMIT - number
@max = MOG::DEFAULT_LIMIT - valor
else
@max = MOG::DEFAULT_LIMIT - number
end
end
end
@price = price
@number = 1
refresh
return
mog45_set set(item, max, price)
end
end
###############
# Window_Item #
###############
class Window_Item < Window_Selectable
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
item_number = MOG::ITEM_LIMIT[item.id]
when RPG::Weapon
number = $game_party.weapon_number(item.id)
item_number = MOG::WEAPON_LIMIT[item.id]
when RPG::Armor
number = $game_party.armor_number(item.id)
item_number = MOG::ARMOR_LIMIT[item.id]
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
if item_number != nil
self.contents.draw_text(x + 220, y, 60, 32, number.to_s + " / " + item_number.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(x + 220, y, 60, 32, number.to_s + " / " + max_limit.to_s, 2)
end
end
end
##################
# Window_Item_Ex #
##################
class Window_Item_Ex < Window_Selectable
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
item_number = MOG::ITEM_LIMIT[item.id]
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 1 * (288 + 32)
y = index / 1 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.font.name = "Georgia"
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
if item_number != nil
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + item_number.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + max_limit.to_s, 2)
end
end
end
#################
# Window_Weapon #
#################
class Window_Weapon < Window_Selectable
def draw_item(index)
item = @data[index]
case item
when RPG::Weapon
number = $game_party.weapon_number(item.id)
item_number = MOG::WEAPON_LIMIT[item.id]
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 1 * (288 + 32)
y = index / 1 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.font.name = "Georgia"
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
if item_number != nil
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + item_number.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + max_limit.to_s, 2)
end
end
end
################
# Window_Armor #
################
class Window_Armor < Window_Selectable
def draw_item(index)
item = @data[index]
case item
when RPG::Armor
number = $game_party.armor_number(item.id)
item_number = MOG::ARMOR_LIMIT[item.id]
end
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 1 * (288 + 32)
y = index / 1 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.font.name = "Georgia"
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 190, 32, item.name, 0)
if item_number != nil
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + item_number.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(x + 195, y, 60, 32, number.to_s + " / " + max_limit.to_s, 2)
end
end
end
#####################
# Window_ShopStatus #
#####################
class Window_ShopStatus < Window_Base
alias mog45_refresh refresh
def refresh
if $mogscript["menu_shop"] == true
mog45_refresh
return false
end
self.contents.clear
if @item == nil
return
end
case @item
when RPG::Item
number = $game_party.item_number(@item.id)
item_max = MOG::ITEM_LIMIT[@item.id]
when RPG::Weapon
number = $game_party.weapon_number(@item.id)
item_max = MOG::WEAPON_LIMIT[@item.id]
when RPG::Armor
number = $game_party.armor_number(@item.id)
item_max = MOG::ARMOR_LIMIT[@item.id]
end
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, 32, "Stock")
self.contents.font.color = normal_color
if item_max != nil
self.contents.draw_text(155, 0, 80, 32, number.to_s + " / " + item_max.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(155, 0, 80, 32, number.to_s + " / " + max_limit.to_s, 2)
end
if @item.is_a?(RPG::Item)
return
end
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
if actor.equippable?(@item)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
self.contents.draw_text(4, 64 + 64 * i, 120, 32, actor.name)
if @item.is_a?(RPG::Weapon)
item1 = $data_weapons[actor.weapon_id]
elsif @item.kind == 0
item1 = $data_armors[actor.armor1_id]
elsif @item.kind == 1
item1 = $data_armors[actor.armor2_id]
elsif @item.kind == 2
item1 = $data_armors[actor.armor3_id]
else
item1 = $data_armors[actor.armor4_id]
end
if actor.equippable?(@item)
if @item.is_a?(RPG::Weapon)
atk1 = item1 != nil ? item1.atk : 0
atk2 = @item != nil ? @item.atk : 0
change = atk2 - atk1
end
if @item.is_a?(RPG::Armor)
pdef1 = item1 != nil ? item1.pdef : 0
mdef1 = item1 != nil ? item1.mdef : 0
pdef2 = @item != nil ? @item.pdef : 0
mdef2 = @item != nil ? @item.mdef : 0
change = pdef2 - pdef1 + mdef2 - mdef1
end
self.contents.draw_text(124, 64 + 64 * i, 112, 32,
sprintf("%+d", change), 2)
end
if item1 != nil
x = 4
y = 64 + 64 * i + 32
bitmap = RPG::Cache.icon(item1.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item1.name)
end
end
return true
mog45_refresh
end
end
###################
# Window_ShopSell #
###################
class Window_ShopSell < Window_Selectable
def initialize
if $mogscript["menu_shop"] == true
super(-10, 180, 305, 225)
self.opacity = 0
@column_max = 1
refresh
self.index = 0
else
super(0, 128, 640, 352)
@column_max = 2
refresh
self.index = 0
end
end
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
item_number = MOG::ITEM_LIMIT[item.id]
when RPG::Weapon
number = $game_party.weapon_number(item.id)
item_number = MOG::WEAPON_LIMIT[item.id]
when RPG::Armor
number = $game_party.armor_number(item.id)
item_number = MOG::ARMOR_LIMIT[item.id]
end
if item.price > 0
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
if $mogscript["menu_shop"] == nil
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
if item_number != nil
self.contents.draw_text(x + 220, y, 60, 32, number.to_s + " / " + item_number.to_s, 2)
else
max_limit = MOG::DEFAULT_LIMIT
self.contents.draw_text(x + 220, y, 60, 32, number.to_s + " / " + max_limit.to_s, 2)
end
else
self.contents.font.name = "Georgia"
x = 4 + index % 1 * (288 + 32)
y = index / 1 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 150, 32, item.name, 0)
self.contents.font.color = Color.new(50,250,150,255)
prc = item.price / 2
self.contents.draw_text(x + 180, y, 80, 32, "+G " + prc.to_s, 2)
end
end
end Скрипт поглядел. Выглядит довольно надежным... но мне не нравится. Аффтор мог бы снизойти до пробелов - отсутпы еще никого не убили. Да и слишком много лишнего кода. Вот только... он просто управляет максимумом предметов в инвентаре. Включая магазинные и трофейные... Замечательно... Но оставлять предметы в сундуке он и не думает. В общем, я соглашусь с mephis - ты чего собственно хочешь? P.S. А идея с сундуками взята на заметку. Будет свободное время - обязательно реализую! Если коротко, то уже давно хочу сделать скриптовые шаблоны событий. Типы будут указываться в первом комментарии. Там же, наверное, и параметры. По части этого примера, будет класс - Chest. У него будет свой инвентарь, на манер Game_Party... может наследником сделать?.. В общем, если действительно хочется полноценных сундуков из которых можно брать до определенного предмета в красивом окошке - копайте в эту сторону. А пляски с бубном вокруг стандартных классов не принесут ничего хорошего. |
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Последнее редактирование: 15 года 4 нед. назад от Equilibrium Keeper.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28835
|
Ребята по + 1 Вам.
Рад что на этом форуме есть ребята которые шарят в RGSS. Ну так ближе к делу. Попробую объяснить более конкретно. Хотя основную суть вы уже поняли! Что я хочу: 1. Да речь идёт о сундуках. Я заметил что, если делать сундуки на свитчах и вэрибалах, то при достижении лимита вмещаемости Вашего инвентаря, свитч перелистывает страницу эвента на пустой лист. А шмотки с первого листа эвента соответственно исчезают. Пример: У Вас в сундуке лежит ключь, для открытия двери, игрок - жадынй лутер. Собирает нужный и не нужный хлам. Инвентарь достиг лимита. Получается так, что игрок берёт ключь и ключик исчезает. Игрок вынужден загружать LOAD. Или вообще начинать сначало! Только из за того что игроку не пройти дальше, не открыть дверь. Тоесть по сути, я предложил один из методов закрытия этого глюка через теже свитчи! 2. Конечно, хотелось бы иметь красивое окошечко, с вещами в нём, при открытии сундучка или трупа. И конечно же было бы здорово иметь систему вмещаемости инвентаря, похожую как в Diablo или Fallout. Вообщем-то, я нашёл один из вариантов создания такой системы на Varibal и Common Events. Очень легко. 1. Создаёшь вещь, называешь её "ВЕС" например. 2. Создаешь для каждой вещи conditinl branch c словием "IF "название вещьи" in invetary = change item discrase "Вес"." Таким оброзом криэтится шмотка ВЕС у в инвентаре. 3. Устанавливаеи лимит. Создаём CONTROL VARIBL где ставим Varible = ВЕС in Inventary. 4. Создаём проверку лимита. Conditional Branch IF Varible == ВЕС >= 100 Switch 02 Запереть сундук On. Таким оброзом шмотки из сундуков сохряняются, за счёт того что сундук заперается, за счёт свитча. Вот собственно моя идея! Есть у Вас идеи по решению этой проблемы выкладывайте. Я скажу так, что идея скрипта возможно уникальна. Я не в одной игре на Мэйкере такого не видел. Возмодно только Baldurs Gate. |
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28839
|
Я себе это по другому представлял:
1. Игрок берет предмет. 2. Идет проверка заполнен ли инвентарь. 3. Если заполнен, то идет проверка предмет был в сундуке(или любом обьекте по типу сундука) или же нет(тоесть, просто лежал на земле или получен от нпц/oбъекта). 4. Если инвентарь заполнен, а предмет был в сундуке, то он там и остается. 5. Если инвентарь заполнен, а предмет был получен другим способом(см. выше) то он падает на землю в том месте где стоит ГГ. Сомневаюсь что на условиях такое можно сделать, а если и можно, то гемора будет предостаточно. А вот на RGSS я думаю можно. |
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28844
|
Sirius писал(а):
Я себе это по другому представлял: Можно, только есть одно "но". В RPG Maker 1 слой для событий. Ну и что будет, если игрок получил предмет стоя на каком-нибудь событии? Скажем, на том же сундуке? :dry: Можно, конечно, сделать 2ой слой событий, специально для тех ивентов, что подгружаются не с карты, а создаются во время работы, вот только... легче написать нормальные сундуки. 1. Игрок берет предмет. 2. Идет проверка заполнен ли инвентарь. 3. Если заполнен, то идет проверка предмет был в сундуке(или любом обьекте по типу сундука) или же нет(тоесть, просто лежал на земле или получен от нпц/oбъекта). 4. Если инвентарь заполнен, а предмет был в сундуке, то он там и остается. 5. Если инвентарь заполнен, а предмет был получен другим способом(см. выше) то он падает на землю в том месте где стоит ГГ. Сомневаюсь что на условиях такое можно сделать, а если и можно, то гемора будет предостаточно. А вот на RGSS я думаю можно. Maximus писал(а): 1. Да речь идёт о сундуках. Я заметил что, если делать сундуки на свитчах и вэрибалах, то при достижении лимита вмещаемости Вашего инвентаря, свитч перелистывает страницу эвента на пустой лист. А шмотки с первого листа эвента соответственно исчезают. Пример: У Вас в сундуке лежит ключь, для открытия двери, игрок - жадынй лутер. Собирает нужный и не нужный хлам. Инвентарь достиг лимита. Получается так, что игрок берёт ключь и ключик исчезает. Игрок вынужден загружать LOAD. Или вообще начинать сначало! Только из за того что игроку не пройти дальше, не открыть дверь. Тоесть по сути, я предложил один из методов закрытия этого глюка через теже свитчи! Хм, а что за систему инвентаря ты используешь? Дело все в том, что дефолтная система безразмерна и инвентарь может содержать абсолютно все предметы в игре в размере 99 штук. Так что единственной причиной, по которой ключ может "исчезнуть" из сундука - если у игрока уже 99 ключей.Что касается веса и инвентаря... JRPG не очень то приспоболены для этого, да и дополнительные параметры придется вводить. В PRGMakerVX, например, есть поле Note, в которое их можно вбить. В XP - нету. Следовательно, либо модуль, либо внешние базы... либо новый мейкер... P.S. Касательно шаблонов: делается это, примерно так... В маповском интерпретаторе создаем проверку на первое действие. Если комментарий - парсим его на предмет искомого имени шаблона. Например - [Box]. Если находим - переключаем на соответствующий метод (пишем сами), который согласно последующим действиям, создаст новый объект класса RPG::Box(пишем сами) и запишет его в хэш с сылкой на карту, координаты и имя события, если такого еще нет. Далее при проверке карты будем учитывать этот хэш, а при сохранении-загрузки - сохранять и его... Вот... Если кто понял - можете попробовать реализовать. У меня времени нет. =\ |
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28851
|
Можно, только есть одно "но". В RPG Maker 1 слой для событий. Ну и что будет, если игрок получил предмет стоя на каком-нибудь событии? Скажем, на том же сундуке? Можно, конечно, сделать 2ой слой событий, специально для тех ивентов, что подгружаются не с карты, а создаются во время работы, вот только... легче написать нормальные сундуки. Как на счетдополнительного условия, если ГГ стоит на событии предмет дропнется в ближайшую свободную клетку. (Не думаю, что карта может быть без свободных клеток, да и маловероятна ситуация получения больше 2х-3х предметов от нпц/объекта одновременно.) Кстати вспомни Балдурсгейт(если играл конечно), там лут лежащий в одной точке учитывался потипу сундука. И когда ты открывал меню, то видел список предметов которые лежали в этой куче. |
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28852
|
А ты не путай RPG Maker и BG
Вот на Game Maker - сколько угодно. Но не здесь. Ну, вот пример - сундук в укромном уголке, перед ним игрок, а сзади 3 из его комманды. А рядом стена с оградой и за ней - свободные клетки. А добираться до них через весь город. Ну и куда дропнется итем? И как это логически объяснить? А после перехода с карты он исчезнет. Надо сохранять. А если их много? Надо сохранять все содержимое. А значит мы возвращаемся к вышеозначенным шаблонным сундукам. |
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28854
|
Про шаблонные сундуки идея - круть! Я видел такие в одной демки, демо называется RE_Shooting_System для ХР. Там был написан один такой сундук, но как я понял автор просто использовал инвентарь $game_party.actors[0].data_box[index_L][1].
Что не позволяет использовать эту систему в моём проекте. =( |
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28855
|
Equilibrium Keeper, да теперь, я буду использовать твой скрипт который ты подфиксил. Кстати большое тебе спасибо за это! Я бы сказал что твой скрипт на 5. И мне он действительно помог.
|
Последнее редактирование: 15 года 4 нед. назад от Maximus.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28857
|
Помог - так помог. Удачи в творчестве. А сундучки я-таки сделаю...
|
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 4 нед. назад #28858
|
А между прочим, такой скрипт, как скрипт сундуков есть. Но выглядит он слегка геморройно и не слишком естественно. Хотя и его можно взять в оборот.
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] |
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28868
|
Agckuu_Coceg, где ты такой скрипт нарыл? Он по сути своей, то что нужно. Кстати я почему-то не нашёл ничего по добного на буржуйских сайтах. Спасибо тебе огромное, по ковыряю.
Equilibrium Keeper, а может тебе не стоит писать сундучки с нуля, вот поковряй этот уже готовый. Я посмотрел демку, помойму круть. Ну не идеал конечно! |
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28877
|
Maximus писал(а):
Agckuu_Coceg, где ты такой скрипт нарыл? Он по сути своей, то что нужно. Кстати я почему-то не нашёл ничего по добного на буржуйских сайтах. Спасибо тебе огромное, поковыряю. Профессия поисковика скриптов обязывает рыскать по всем местам... А нашёл я его на Хаосе, форуме Близзарда. Там порой хорошие скрипты встречаются, я тебе скажу. Только региться не вздумай, а то там такая анти-спамерская хрень стоит, что они потом тебя не допустят на сайт. А скрипты можно и за просто так брать. Ссылку я давал в теме с базами скриптов, но если тебе надо, вот, держи. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] |
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28901
|
Agckuu_Coceg писал(а):
Maximus писал(а): Agckuu_Coceg, где ты такой скрипт нарыл? Он по сути своей, то что нужно. Кстати я почему-то не нашёл ничего по добного на буржуйских сайтах. Спасибо тебе огромное, поковыряю. Профессия поисковика скриптов обязывает рыскать по всем местам... А нашёл я его на Хаосе, форуме Близзарда. Там порой хорошие скрипты встречаются, я тебе скажу. Только региться не вздумай, а то там такая анти-спамерская хрень стоит, что они потом тебя не допустят на сайт. А скрипты можно и за просто так брать. Ссылку я давал в теме с базами скриптов, но если тебе надо, вот, держи. ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] Agckuu_Coceg, плюс один, тебе ещё раз! И спасибо огромное! Я думаю тему можно закрыть, до того момента пока Equilibrium не накатает вышеупомянутые "Шаблонные сундучки" и не выложет их на обсуждение. Всем участникам БОЛЬШОЕ СПАСИБО! |
Последнее редактирование: 15 года 3 нед. назад от Maximus.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28915
|
Скрипт очень симпатичный и аккуратный. Мне нравится в нем все, кроме одного... База по сундукам выглядит вот так:
when 1 then return [[1, 998, 0], [1, 1, 1]]
when 2 then return [[1, 10, 0], [1, 1, 2], [1, 2, 1]]
when 3 then return [[1, 10, 2], [3, 1, 1], [9, 1, 1]] P.S. Блин, просил же - выкладывайте скрипты, а не ссылки на демки... -_- ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #===============================================================================
# Item Storage
# Author game_guy
# Version 1.2
#-------------------------------------------------------------------------------
# Intro:
# Okay. Well if you've played the Elder Scrolls Series or Fallout then you'd
# know that it has an item storage system. What it does is lets you open up
# closets, chests, ect and store and take items out of it.
#
# Features:
# Store and Take Items Out of Chests, Closets, ect
# Have Seperate Chests, Closets, ect
# Easy to Use
# Stores Chests into Game System Instead of Variables
# Have Max Amount of Items In Chest
# Set Default Items in Chest
#
# Instructions:
# First lets go over the syntaxes.
#
# Calling the Item Storage:
# $scene = Scene_Chest.new(chest_id, max_items)
# chest_id is the number chest you want open
# max_items is the max amount of any item the chest can hold
# you can just use this to
# $scene = Scene_Chest.new(chest_id)
# because in the config this ChestMaxItems is the default so if you dont use
# the long one, it'll use the default.
#
# Adding/Removing Items from Chest:
# This feature is still being worked on. But what it will allow you to do
# is add an item or remove it whithout actually opening the chest.
#
# Okay so thats done with the syntaxes. Now onto the configuration.
# Go down to Begin Config and do all your configuration there.
#
# Credits:
# game_guy ~ for making it
# MightyLink ~ requesting the system
#===============================================================================
module GameGuy
#============================================================================
# ChestMaxItems = The max amount of any item a chest can hold. So example
# Its 9999 so it can have 9999 of any item.
#============================================================================
ChestMaxItems = 9999
def self.chest_items(id)
case id
#==========================================================================
# Config Chest Items
# Use this
# when chest_id then return [[id, amount, type], [id, amount, type]]
# id = item, weapon, or armor id
# amount = the amount
# type = 0, 1, or 2 0 = item, 1 = weapon, 2 = armor
# Example:
# when 1 then return [[1, 3, 0], [1, 1, 1]]
# This has 3 potions, and 1 bronze sword. So when this is called
# $scene = Scene_Chest.new(1)
# it will have those items in the chest already.
#==========================================================================
when 1 then return [[1, 999, 0], [1, 1, 1]]
when 2 then return [[1, 10, 0], [1, 1, 2], [1, 2, 1]]
when 3 then return [[1, 10, 2], [3, 1, 1], [9, 1, 1]]
end
return []
end
end
#==============================================================================
# Game_System
#------------------------------------------------------------------------------
# Modded it so it makes it store every chest.
#==============================================================================
class Game_System
attr_accessor :chests
alias gg_add_item_storage initialize
def initialize
@chests = []
return gg_add_item_storage
end
def add_chest(chest)
@chests[chest] = $chest
end
end
#==============================================================================
# Game_Chest
#------------------------------------------------------------------------------
# Holds all the data for a single chest.
#==============================================================================
class Game_Chest
attr_accessor :max
def initialize(max)
@max = max
@items = {}
@weapons = {}
@armors = {}
end
def item_amount(item_id)
return @items.include?(item_id) ? @items[item_id] : 0
end
def weapon_amount(weapon_id)
return @weapons.include?(weapon_id) ? @weapons[weapon_id] : 0
end
def armor_amount(armor_id)
return @armors.include?(armor_id) ? @armors[armor_id] : 0
end
def add_item(item_id, n)
if item_id > 0
@items[item_id] = [[item_amount(item_id) + n, 0].max, @max].min
end
end
def add_weapon(weapon_id, n)
if weapon_id > 0
@weapons[weapon_id] = [[weapon_amount(weapon_id) + n, 0].max, @max].min
end
end
def add_armor(armor_id, n)
if armor_id > 0
@armors[armor_id] = [[armor_amount(armor_id) + n, 0].max, @max].min
end
end
def take_item(item_id, n)
add_item(item_id, -n)
end
def take_weapon(weapon_id, n)
add_weapon(weapon_id, -n)
end
def take_armor(armor_id, n)
add_armor(armor_id, -n)
end
end
#==============================================================================
# Window_Chest_Choices
#------------------------------------------------------------------------------
# The choices for the chest when the scene is opened.
#==============================================================================
class Window_Chest_Choices < Window_Selectable
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
@item_max = 3
@column_max = 3
@commands = ["Store Items", "Take Items", "Exit"]
self.z = 200
refresh
self.index = 0
end
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
def draw_item(index)
x = 4 + index * 215
self.contents.draw_text(x, 0, 128, 32, @commands[index], 1)
end
end
#==============================================================================
# Window_Chest_Item
#------------------------------------------------------------------------------
# Displays all items in the chest.
#==============================================================================
class Window_Chest_Item < Window_Selectable
def initialize
super(320, 64, 320, 416)
@column_max = 1
refresh
self.index = 0
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 1...$data_items.size
if $chest.item_amount(i) > 0
@data.push($data_items[i])
end
end
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $chest.weapon_amount(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $chest.armor_amount(i) > 0
@data.push($data_armors[i])
end
end
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $chest.item_amount(item.id)
when RPG::Weapon
number = $chest.weapon_amount(item.id)
when RPG::Armor
number = $chest.armor_amount(item.id)
end
x = 4 + index % @column_max * (288 + 32)
y = index / @column_max * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 216, y, 16, 32, ":", 1)
self.contents.draw_text(x + 224, y, 48, 32, number.to_s, 2)
end
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#==============================================================================
# Window_Party_Item
#------------------------------------------------------------------------------
# Displays all items the party has.
#==============================================================================
class Window_Party_Item < Window_Selectable
def initialize
super(0, 64, 320, 416)
@column_max = 1
refresh
self.index = 0
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
def item
return @data[self.index]
end
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
@data.push($data_items[i])
end
end
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
@data.push($data_armors[i])
end
end
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
x = 4 + index % @column_max * (288 + 32)
y = index / @column_max * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 216, y, 16, 32, ":", 1)
self.contents.draw_text(x + 224, y, 48, 32, number.to_s, 2)
end
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#==============================================================================
# Scene_Chest
#------------------------------------------------------------------------------
# The scene that controls storing and taking items.
#==============================================================================
class Scene_Chest
def initialize(chest=1, max=GameGuy::ChestMaxItems)
@chestid = chest
if $game_system.chests[chest] == nil
$chest = Game_Chest.new(max)
items = GameGuy.chest_items(chest)
for i in 0...items.size
item = items[i][2]
case item
when 0
$chest.add_item(items[i][0], items[i][1])
when 1
$chest.add_weapon(items[i][0], items[i][1])
when 2
$chest.add_armor(items[i][0], items[i][1])
else
$chest.add_item(items[i][0], items[i][1])
end
end
else
$chest = $game_system.chests[chest]
end
end
def main
@help_window = Window_Help.new
@help_window.visible = false
@command_window = Window_Chest_Choices.new
@party_window = Window_Party_Item.new
@party_window.active = false
@chest_window = Window_Chest_Item.new
@chest_window.active = false
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
@help_window.dispose
@command_window.dispose
@party_window.dispose
@chest_window.dispose
end
def update
@help_window.update
@command_window.update
@party_window.update
@chest_window.update
if @command_window.active
update_command
return
end
if @party_window.active
update_party
return
end
if @chest_window.active
update_chest
return
end
end
def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$game_system.add_chest(@chestid)
$scene = Scene_Map.new
return
end
if Input.trigger?(Input::C)
case @command_window.index
when 0
$game_system.se_play($data_system.decision_se)
@party_window.active = true
@party_window.help_window = @help_window
@command_window.active = false
@help_window.z = 500
@help_window.visible = true
when 1
$game_system.se_play($data_system.decision_se)
@chest_window.active = true
@chest_window.help_window = @help_window
@command_window.active = false
@help_window.z = 500
@help_window.visible = true
when 2
$game_system.se_play($data_system.cancel_se)
$game_system.add_chest(@chestid)
$scene = Scene_Map.new
end
return
end
end
def update_party
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@help_window.visible = false
@party_window.help_window = nil
@party_window.active = false
return
end
if Input.repeat?(Input::C)
@item = @party_window.item
unless @item.is_a?(RPG::Item) or @item.is_a?(RPG::Weapon) or
@item.is_a?(RPG::Armor)
$game_system.se_play($data_system.buzzer_se)
return
end
case @item
when RPG::Item
amount = $chest.item_amount(@item.id)
if amount < $chest.max
$game_system.se_play($data_system.decision_se)
$chest.add_item(@item.id, 1)
$game_party.lose_item(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
when RPG::Weapon
amount = $chest.weapon_amount(@item.id)
if amount < $chest.max
$game_system.se_play($data_system.decision_se)
$chest.add_weapon(@item.id, 1)
$game_party.lose_weapon(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
when RPG::Armor
amount = $chest.armor_amount(@item.id)
if amount < $chest.max
$game_system.se_play($data_system.decision_se)
$chest.add_armor(@item.id, 1)
$game_party.lose_armor(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
end
@party_window.refresh
@chest_window.refresh
return
end
end
def update_chest
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@command_window.active = true
@help_window.visible = false
@chest_window.help_window = nil
@chest_window.active = false
return
end
if Input.repeat?(Input::C)
@item = @chest_window.item
unless @item.is_a?(RPG::Item) or @item.is_a?(RPG::Weapon) or
@item.is_a?(RPG::Armor)
$game_system.se_play($data_system.buzzer_se)
return
end
case @item
when RPG::Item
amount = $game_party.item_number(@item.id)
if amount < 99
$game_system.se_play($data_system.decision_se)
$chest.take_item(@item.id, 1)
$game_party.gain_item(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
when RPG::Weapon
amount = $game_party.weapon_number(@item.id)
if amount < 99
$game_system.se_play($data_system.decision_se)
$chest.take_weapon(@item.id, 1)
$game_party.gain_weapon(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
when RPG::Armor
amount = $game_party.armor_number(@item.id)
if amount < 99
$game_system.se_play($data_system.decision_se)
$chest.take_armor(@item.id, 1)
$game_party.gain_armor(@item.id, 1)
else
$game_system.se_play($data_system.buzzer_se)
return
end
end
@party_window.refresh
@chest_window.refresh
return
end
end
end |
Истина там, во тьме, и во тьме ты иди - мыслящий бродит во тьме.
В себя самого загляни, открой свою дорогу в Ничто. В Ничто ты войди, во тьму, и пойми: Пока ты во тьме, не может она быть Ничем - ведь там ты.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28917
|
Кстати говоря, я тут недавно порыскал на RMVXP.com и нашёл ещё один интересный скрипт для создания шаблонных сундуков. Этот уже кажется получше, да и выглядит он позанятнее. Выкладываю ссылку на демо и сам скрипт (специально для Кипера).
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ][ Нажмите, чтобы скрыть ] #============================================================================== # Alisha's Storage Containers # # by DerVVulfman # version 1.0 # 07-23-2009 # RGSS / RMXP - Involves Rewrites #============================================================================== # INTRODUCTION: # # This system allows you to create re-usable chests and other forms of con- # tainers on your map. Rather than just finding a chest to get your loot, # you can return to the chest and put stuff back in for later. You can put # items, weapons, armor and even gold into these storage containers which # you can retrieve later. # # # INSTALLATION INSTRUCTIONS: # # Please remember that this system allows you to use script calls to change # Place below Scene_Debug and above Main to use. Please note that this sys- # tem does rewrite the 'read_save_data' method in Scene_Load, though it is # merely a single line of code. # # Should be easy to spot. ^_^ # # # HOW TO USE: # # This system doesn't make the actual container events on your map, so you # still have to use the map editor to draw your chests, bookshelves, safes, # barrels, or whatever. # # After you make your map, including these chests or whatnot, you insert a # comment into your desired map event containers. This comment is a single # line of text (or even just one word) that matches the CONTAINER_KEY value # in the configuration section. By default, this is set to 'container'. It # is this comment that helps to trigger your container menu. # # Once you add the CONTAINER_KEY value, you also take note or change the # name of your container's map event name. Typically, it is something like # 'EV003', but you will likely wish to change it to something fairly recog- # nizable. This 'new event name' will identify the exact contents of the # storage container in this system, and the related CONTAINERS array. # # ____________________________________________ Please note that the con- # | tainer's 'new event name' # | Name: must be unique. It is not # | [ EV-MyContainer-12 ] advised to have 2 map con- # | ______ tainers sharing the same # | | | name unless you want them # | | 1 | 2 | to use the same array. # | | |_____|____________________________ # | | List of Event ^_^ Could be fun though. # | | ______________ # | | -Conditions || Put stuff in one chest and # | | | || pick it up in the other. # # # # THE CONFIGURABLES: # # Actually, this isn't so hard. # # CONTAINER_KEY: # ============== # The first value in the configuration section is the CONTAINER_KEY. It is # part of the trigger mechanism that lets the system know that this event # can store your items. Whatever you have this value set must be an exact # match to the text in your event's comment. For simplicity, I merely have # it set to 'container'. # # CONTAINER_INPUT: # ================ # When you finally trigger a container (be it barrel or chest), you will # see a split screen. On the left is your current party's list of goods, # while the right side lists the items in the container. Now while the # select, cancel and arrow keys are already in use, I needed another key to # switch between target windows. Hence, the CONTAINER_INPUT feature. By # default, this is set to Input::A which is also the 'shift' button, but # it can be changed to suit your tastes. # # # CONTAINERS: # =========== # The final piece of the system. This is a complex array that creates each # and every container array used in your game. Each container array must # have a unique name, and any container 'event' in your game map(s) must # have a name that corresponds to the name of an array in CONTAINERS. # # The syntax for the CONTAINERS array is as follows: # # CONTAINERS = [ container_array, container_array,.... container_array ] # # And each of these 'container_array' values is in itself another array with # it's own syntax... as follows: # # [ 'container', [ itemlist ] ] # # The 'container' is a text string that matches the name of the map event # to become a storage container. So, if you have a map event named chest2, # then the text string in your container array would also be 'chest2'. # # When you finally trigger a container (be it barrel or chest), you will # Now, the itemlist inside the braces [] is a list of items, weapons and # even gold. that your container hold whtn the game starts. The information # you enter uses a form of shortcuts to identify the type of goods, the ID # number of the goods, and the quantity thereof. An example of an itemlist # is presented below: # # [ 'i2201', 'w201', 'g2332', 'a102', 'i104' ] # # As you can tell, every item within this itemlist is a string. This is # so you can use a simple and memorable series of prefixes in the itemlist. # The first character for each item string identifies whether the item is a # weapon, armor or whatever. As such, the following four prefixes are used: # # i = item * w = weapon * a = armor * g = gold # # Now, all items, with the exception of gold, follow the same rudimentary # rules: # # --Items Coding-- # Following the prefix, the text includes the ID number of your item, wea- # pon or armor. This ID number can be from 1 digit to 3 digits long. The # 3 digit limit is the imposed limit set by the RMXP editor. # # After the ID number of your item, you follow it up with a two-digit entry # which indicates the quantity of that item. While the number of digits for # the ID number is flexible, the number indicating the quantity is not. You # must use two characters to represent the quantity. # # As such, creating an entry for three bronze swords would be as follows: # # 'w103' .... ' w (for weapon) 1 (for the 1st ID) 03 (for 3 quantity) '. # # --Gold Coding-- # Slightly different, but easier to follow is the coding for gold stored in # your array. It's merely the 'g' prefix followed by a range of numbers # from 1 to 7 digits long (as set by the limits in RPGMaker XP). # # Just to let you know, it is pointless to have 'two' gold entries in a # single itemlist. So an entry like this is kind of useless: # # [ 'i2201', 'g2001', 'g432' ] # # The system will not combine the two 'gold' entries, but will opt to use # the last entry instead. In this case, 432 in gold will be in this chest. # # --Empty Coding-- # The system will not combine the two 'gold' entries, but will opt to use # What? You thought you HAD to have something in every container as the # game starts? Fat chance. You can have barrels that are dead empty. All # you have to do is have 'nothing' in the braces. Yep, just don't give it # a list of items, as this example shows: # # [ 'sample_container', [] ] # # And that's all there is to it. # # # # COMPATABILITY: # # Designed for use with RPGMakerXP, this system rewrites the read_save_data # method ing Scene_Load, but it is a common rewrite found in many scripts. # And I identified the... hehehe... lone line of code, for anyone who would # need to edit anything. # # # NOTES: # # Why didn't anyone make this until now??? # # # TERMS AND CONDITIONS: # # Free for use, even in commercial games. However, this is an exclusive to # the 'House Slashers' run by DerVVulfman, Kalier and Mea, and an exclusive # to the 'RMVXPUniverse' forum owned by PK8 (formerly Punk, Punkid89), and # run with Olivia and DerVVulfman. It is not for display or distribution # on any other site or forum. # #============================================================================== #====================================================================== # ** CONFIGURATION ** # #====================================================================== # Container Comment Key CONTAINER_KEY = 'container' # Container Window Switch Key CONTAINER_INPUT = Input::A # Storage Containers Array # # Name Item Array... # ======= ================== CONTAINERS = [ ], ], ] ] #============================================================================== # ** Game_Party # # This class handles the party. It includes information on amount of gold # and items. Refer to "$game_party" for the instance of this class. #============================================================================== class Game_Party # # * Public Instance Variables # attr_accessor :gold # amount of gold attr_accessor :items # number of items attr_accessor :weapons # number of weapons attr_accessor :armors # number of armor pieces # # * Initial Party Setup # alias setup_me setup_starting_members def setup_starting_members setup_me # Setup Game Containers at game start $game_containers.setup end end #============================================================================== # ** Game_Event # # This class deals with events. It handles functions including event page # switching via condition determinants, and running parallel process events. # It's used within the Game_Map class. #============================================================================== class Game_Event < Game_Character # # * Obtain name # def name return @event.nil? ? '' : @event.name end # # * Obtain container trigger value # def container_trigger container_flag = false # Checks to see if display text unless @list.nil? for i in [email protected] if @list.code == 108 container_flag = true if @list.parameters.include?(CONTAINER_KEY) end end end return container_flag end end #============================================================================== # ** Game_Player # # This class handles the player. Its functions include event starting # determinants and map scrolling. Refer to "$game_player" for the one # instance of this class. #============================================================================== class Game_Player < Game_Character # # * Frame Update # alias container_update update def update # Original Call container_update if Input.trigger?(Input::C) container_check end end # # * Detect container # def container_check # Calculate front event coordinates new_x = @x + (@direction == 6 ? 1 : @direction == 4 ? -1 : 0) new_y = @y + (@direction == 2 ? 1 : @direction == 8 ? -1 : 0) # All event loops for event in $game_map.events.values # If event coordinates and triggers are consistent if event.x == new_x and event.y == new_y # Obtain event name if properly triggered ev_name = event.name if event.container_trigger == true end end # Test if standing on event if ev_name == nil # All event loops for event in $game_map.events.values # If event coordinates and triggers are consistent if event.x == @x and event.y == @y # Obtain event name if properly triggered ev_name = event.name if event.container_trigger == true end end end # Sort through containers for matching event ID for i in 0..$game_containers.data.size-1 # Switch to Container Screen $scene = Scene_Container.new(i) if $game_containers.data[0] == ev_name end end end #============================================================================== # ** Game_Containers # # This class handles the container array. Refer to "$game_containers" for each # instance of this class. #============================================================================== class Game_Containers attr_accessor :data attr_accessor :tempgold # # * Object Initialization # def initialize @data = [] @tempgold = 0 end # # * Get Actor # actor_id : actor ID # def setup for i in 0..(CONTAINERS.size).to_i-1 @data.push(CONTAINERS) end end end $game_containers = Game_Containers.new #============================================================================== # ** Window_PartyItems # # This window displays items in possession on the item and battle screens. #============================================================================== class Window_PartyItems < Window_Selectable # # * Public Instance Variables # attr_accessor :data # list of party items # # * Object Initialization # def initialize super(0, 0, 320, 416) @column_max = 1 refresh self.index = 0 end # # * Get Item # def item return @data[self.index] end # # * Get Item Qty # def item_qty item = @data[self.index] case item when RPG::Item ; return $game_party.item_number(item.id) when RPG::Weapon ; return $game_party.weapon_number(item.id) when RPG::Armor ; return $game_party.armor_number(item.id) end end # # * Refresh # def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # Add item for i in 1...$data_items.size @data.push($data_items) if $game_party.item_number(i) > 0 end for i in 1...$data_weapons.size @data.push($data_weapons) if $game_party.weapon_number(i) > 0 end for i in 1...$data_armors.size @data.push($data_armors) if $game_party.armor_number(i) > 0 end # If item count is not 0, make a bit map and draw all items @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end end end # # * Draw Item # index : item number # def draw_item(index) item = @data[index] case item when RPG::Item number = $game_party.item_number(item.id) when RPG::Weapon number = $game_party.weapon_number(item.id) when RPG::Armor number = $game_party.armor_number(item.id) end if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id) self.contents.font.color = normal_color else self.contents.font.color = disabled_color end x = 4 + index y = index * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end end #============================================================================== # ** Window_Container # # This window displays items in storage containers found on the map. #============================================================================== class Window_Container < Window_Selectable attr_accessor :data # # * Object Initialization # def initialize(container_number) super(320, 0, 320, 416) @column_max = 1 @container_number = container_number refresh self.index = 0 end # # * Get Item # def item return @data[self.index][0] end # # * Get Item Qty # def item_qty return @data[self.index][1].to_i end # # * Refresh # def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # Add item newdata = [] newdata = $game_containers.data[@container_number][1] unless newdata == [] for i in 0..$game_containers.data[@container_number][1].size-1 itemname = newdata item_size = itemname.size-1 item_type = itemname.slice(0, 1) item_number = itemname.slice(1,item_size-2).to_i item_quantity = itemname.slice(item_size-1,2) case item_type when 'a' ; @data.push([$data_armors[item_number], item_quantity]) when 'i' ; @data.push([$data_items[item_number], item_quantity]) when 'w' ; @data.push([$data_weapons[item_number], item_quantity]) end end end # If item count is not 0, make a bit map and draw all items @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end end end # # * Draw Item # index : item number # def draw_item(index) # Retrieve item and Qty item = @data[index][0] number = @data[index][1] self.contents.font.color = normal_color x = 4 + index y = index * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = self.contents.font.color == normal_color ? 255 : 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end end #============================================================================== # ** Window_Party_Gold # # This window displays amount of gold. #============================================================================== class Window_Party_Gold < Window_Selectable # # * Object Initialization # def initialize super(0, 416, 320, 64) self.contents = Bitmap.new(width - 32, height - 32) self.index = 0 refresh end # # * Refresh # def refresh self.contents.clear cx = contents.text_size($data_system.words.gold).width self.contents.font.color = normal_color self.contents.draw_text(4, 0, 260-cx-2, 32, $game_party.gold.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(264-cx, 0, cx, 32, $data_system.words.gold, 2) end end #============================================================================== # ** Window_Container_Gold # # This window displays amount of gold in a container. #============================================================================== class Window_Container_Gold < Window_Selectable # # * Object Initialization # def initialize(container_number) super(320, 416, 320, 64) self.contents = Bitmap.new(width - 32, height - 32) self.index = 0 @container_number = container_number refresh end # # * Refresh # def refresh # Add item newdata = [] newdata = $game_containers.data[@container_number][1] unless newdata == [] for i in 0..$game_containers.data[@container_number][1].size-1 itemname = newdata item_size = itemname.size-1 item_type = itemname.slice(0, 1) item_number = itemname.slice(1,item_size) if item_type == 'g' $game_containers.tempgold = item_number.to_i end end end self.contents.clear cx = contents.text_size($data_system.words.gold).width self.contents.font.color = normal_color self.contents.draw_text(4, 0, 260-cx-2, 32, $game_containers.tempgold.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(264-cx, 0, cx, 32, $data_system.words.gold, 2) end end #============================================================================== # ** Scene_Save # # This class performs save screen processing. #============================================================================== class Scene_Save < Scene_File # # * Write Save Data # file : write file object (opened) # alias container_write_save_data write_save_data def write_save_data(file) container_write_save_data(file) Marshal.dump($game_containers, file) end end #============================================================================== # ** Scene_Load # # This class performs load screen processing. #============================================================================== class Scene_Load < Scene_File # # * Read Save Data # file : file object for reading (opened) # def read_save_data(file) # Read character data for drawing save file characters = Marshal.load(file) # Read frame count for measuring play time Graphics.frame_count = Marshal.load(file) # Read each type of game object $game_system = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_screen = 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) # Here's the one stupid edit, guys $game_containers = Marshal.load(file) # If magic number is different from when saving # (if editing was added with editor) if $game_system.magic_number != $data_system.magic_number # Load map $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end # Refresh party members $game_party.refresh end end #============================================================================== # ** Scene_Container # # This class performs container screen processing. #============================================================================== class Scene_Container # # * Object Initialization # container_index : container # def initialize(container_index = 0) @container_index = container_index end # # * Main Processing # def main # Make help window, item window @change = @qty1 = @qty2 = 0 $game_containers.tempgold = 0 @item_window = Window_PartyItems.new @item2_window = Window_Container.new(@container_index) @gold_window = Window_Party_Gold.new @gold2_window = Window_Container_Gold.new(@container_index) # Toggle between windows @item_window.active = true @item2_window.active = false @gold_window.active = false @gold2_window.active = false # Execute transition Graphics.transition # Main loop loop do # Update game screen Graphics.update # Update input information Input.update # Frame update update # Abort loop if screen is changed break if $scene != self end # Prepare for transition Graphics.freeze # Dispose of windows @item_window.dispose @item2_window.dispose @gold_window.dispose @gold2_window.dispose end # # * Frame Update # def update # Update windows @item_window.update @item2_window.update @gold_window.update @gold2_window.update # As long as Quantity Changer is off if @change == 0 # If item window is active: call update_item if @item_window.active update_item return end # If item window is active: call update_item if @item2_window.active update_item2 return end # If item window is active: call update_item if @gold_window.active update_gold return end # If item window is active: call update_item if @gold2_window.active update_gold2 return end # Otherwise, while quantity changer is active else update_quantity end end # # * Frame Update (when item window is active) # def update_item # If B button was pressed if Input.trigger?(Input:: # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to map screen $scene = Scene_Map.new return end # If A button was pressed if Input.trigger?(CONTAINER_INPUT) # Toggle between windows @item2_window.active = true @item_window.active = false @gold_window.active = false @gold2_window.active = false end # If C button was pressed if Input.trigger?(Input::C) # If no item is present if @item_window.item == nil # Play buzzer SE $game_system.se_play($data_system.buzzer_se) else # Play decision SE $game_system.se_play($data_system.decision_se) # Get currently selected data on the item window @item_window.active = false @item2_window.active = false @gold_window.active = false @gold2_window.active = false @item = @item_window.item @change = 1 # Setup Quantities @qty1 = 0 @qty1 = @item_window.item_qty if @item_window.item_qty != nil setup_quantity end end end # # * Frame Update (when 2nd item window is active) # def update_item2 # If B button was pressed if Input.trigger?(Input:: # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to map screen $scene = Scene_Map.new return end # If A button was pressed if Input.trigger?(CONTAINER_INPUT) # Toggle between windows @item2_window.active = false @item_window.active = false @gold_window.active = true @gold2_window.active = false end # If C button was pressed if Input.trigger?(Input::C) if @item2_window.data.size == 0 # Play buzzer SE $game_system.se_play($data_system.buzzer_se) else # Play decision SE $game_system.se_play($data_system.decision_se) # Get currently selected data on the item window @item = @item2_window.item @item_window.active = false @item2_window.active = false @gold_window.active = false @gold2_window.active = false @change = 2 # Setup Quantities @qty2 = 0 @qty2 = @item2_window.item_qty if @item2_window.item_qty != nil setup_quantity end end end # # * Frame Update (when gold window is active) # def update_gold # If B button was pressed if Input.trigger?(Input:: # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to map screen $scene = Scene_Map.new return end # If A button was pressed if Input.trigger?(CONTAINER_INPUT) # Toggle between windows @item2_window.active = false @item_window.active = false @gold_window.active = false @gold2_window.active = true end # If C button was pressed if Input.trigger?(Input::C) # Play decision SE $game_system.se_play($data_system.decision_se) # Get currently selected data on the item window @item_window.active = false @item2_window.active = false @gold_window.active = false @gold2_window.active = false @item = @item_window.item @change = 3 end end # # * Frame Update (when item window is active) # def update_gold2 # If B button was pressed if Input.trigger?(Input:: # Play cancel SE $game_system.se_play($data_system.cancel_se) # Switch to map screen $scene = Scene_Map.new return end # If A button was pressed if Input.trigger?(CONTAINER_INPUT) # Toggle between windows @item2_window.active = false @item_window.active = true @gold_window.active = false @gold2_window.active = false end # If C button was pressed if Input.trigger?(Input::C) # Play decision SE $game_system.se_play($data_system.decision_se) # Get currently selected data on the item window @item_window.active = false @item2_window.active = false @gold_window.active = false @gold2_window.active = false @item = @item_window.item @change = 4 end end # # * Frame Update (when qty window is active) # def update_quantity # If B button was pressed if Input.trigger?(Input:: $game_system.se_play($data_system.cancel_se) case @change when 1 ; @item_window.active = true when 2 ; @item2_window.active = true when 3 ; @gold_window.active = true when 4 ; @gold2_window.active = true end @change = 0 return end # If a gold click if @change > 2 if Input.repeat?(Input::LEFT) if $game_party.gold < 9999999 && $game_containers.tempgold > 0 $game_system.se_play($data_system.cursor_se) process_gold(1) else $game_system.se_play($data_system.buzzer_se) end end # If the right directional button was pressed if Input.repeat?(Input::RIGHT) if $game_containers.tempgold < 9999999 && $game_party.gold > 0 $game_system.se_play($data_system.cursor_se) process_gold(-1) else $game_system.se_play($data_system.buzzer_se) end end # Otherwise... else # Reset click click_dir = 0 # If the left directional button was pressed if Input.repeat?(Input::LEFT) if @qty1 < 99 && @qty2 > 0 $game_system.se_play($data_system.cursor_se) click_dir = 1 else $game_system.se_play($data_system.buzzer_se) end end # If the right directional button was pressed if Input.repeat?(Input::RIGHT) if @qty2 < 99 && @qty1 > 0 $game_system.se_play($data_system.cursor_se) click_dir = -1 else $game_system.se_play($data_system.buzzer_se) end end # Perform Item Change on Click unless click_dir == 0 # Locate item in chest container_location = locate_container_item # Process Party and Chest arrays process_party_item(click_dir) process_container_item(click_dir, container_location) # Update the windows @item_window.update @item2_window.update @item_window.refresh @item2_window.refresh # Break from list if Party Item is empty if @qty1 == 0 && @change == 1 @item_window.active = true @change = 0 end if @qty1 == 0 && @change == 2 @item2_window.active = true @change = 0 end end end end # # * Setup target quantity # def setup_quantity location = nil data = [] data = $game_containers.data[@container_index][1] case @change when 1 # Original - Party, find chest location = locate_container_item @qty2 = 0 unless location == nil itemname = data[location] item_size = itemname.size-1 @qty2 = itemname.slice(item_size-1,2).to_i end when 2 # Original - Chest, find the party item @qty1 = 0 case @item when RPG::Item @qty1 = $game_party.item_number(@item.id) when RPG::Weapon @qty1 = $game_party.weapon_number(@item.id) when RPG::Armor @qty1 = $game_party.armor_number(@item.id) end end end # # * Locate container item position # def locate_container_item returnval = nil data = [] data = $game_containers.data[@container_index][1] case @item when RPG::Item ; testval1 = 'i' when RPG::Weapon ; testval1 = 'w' when RPG::Armor ; testval1 = 'a' end testval2 = @item.id testval3 = testval1 + testval2.to_s for i in 0..data.size-1 itemname = data item_size = itemname.size-1 item_test = itemname.slice(0,item_size-1) returnval = i if item_test == testval3 end return returnval end # # * Process (Add/Remove) items from party list # def process_party_item(click_dir) @qty1 = 0 case @item when RPG::Item @qty1 = $game_party.item_number(@item.id) + click_dir $game_party.items[@item.id] = [[$game_party.item_number(@item.id) + click_dir, 0].max, 99].min when RPG::Weapon @qty1 = $game_party.weapon_number(@item.id) + click_dir $game_party.weapons[@item.id] = [[$game_party.weapon_number(@item.id) + click_dir, 0].max, 99].min when RPG::Armor @qty1 = $game_party.armor_number(@item.id) + click_dir $game_party.armors[@item.id] = [[$game_party.armor_number(@item.id) + click_dir, 0].max, 99].min end end # # * Process (Add/Remove) items in a container # def process_gold(click_dir) # Alter basic gold value $game_party.gold += click_dir # Add item newdata = [] newdata = $game_containers.data[@container_index][1] test_found = false for i in 0..$game_containers.data[@container_index][1].size-1 itemname = newdata item_size = itemname.size-1 item_type = itemname.slice(0, 1) item_number = itemname.slice(1,item_size) if item_type == 'g' test_found = true $game_containers.tempgold = item_number.to_i $game_containers.tempgold -= click_dir item_number = $game_containers.tempgold.to_s end itemname = item_type+item_number newdata = itemname end if test_found != true newdata.push('g1') end # Refresh gold windows @gold_window.update @gold2_window.update @gold_window.refresh @gold2_window.refresh end # # * Process (Add/Remove) items in a container # def process_container_item(click_dir, location) data = [] data = $game_containers.data[@container_index][1] if location == nil # Gotta be adding a new value case @item when RPG::Item ; testval1 = 'i' when RPG::Weapon ; testval1 = 'w' when RPG::Armor ; testval1 = 'a' end testval2 = @item.id testval3 = testval1 + testval2.to_s + '01' data.push(testval3) else itemname = data[location] item_size = itemname.size-1 item_type = itemname.slice(0, 1) item_number = itemname.slice(1,item_size-2) item_quantity = itemname.slice(item_size-1,2).to_i item_quantity -= click_dir @qty2 = item_quantity itemname = item_type + item_number + sprintf("%02d", item_quantity) itemname = nil if item_quantity == 0 data[location] = itemname $game_containers.data[@container_index][1] = data.compact end # Bread from list if chest quantity is zero if item_quantity == 0 @item2_window.active = true @change = 0 @qty1 = 0 if location == data.size - 1 @item2_window.index = location - 1 end end end end |
Огромный любитель среброволосых или пепельноволосых 2D-девушек с хорошим характером или со скрытыми привлекательными чертами.
Последнее редактирование: 15 года 3 нед. назад от Agckuu_Coceg.
Администратор запретил публиковать записи гостям.
|
Скрипт касается лимита инвентаря.Помогите улучшить 15 года 3 нед. назад #28921
|
Может вам и мой скриптик пригодится...
|
Последнее редактирование: 15 года 3 нед. назад от Sirius.
Администратор запретил публиковать записи гостям.
|
|
Модераторы: NeKotZima
Время создания страницы: 0.865 секунд