RyanBern 发表于 2016-7-24 23:05 忘了问了,该怎么设置安全袋物品呀,就是设置后的物品不会随机丢失 我还用了网上找的物品分类脚本,测试后不同分类的物品都会随机丢失;可以修改一下之后新增加一个分类叫“安全袋”,然后里面的东西不随机吗 下面是物品分类脚本,麻烦看下…… #============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 #============================================================================== #可以自定义设置物品分类,利用物品描述,每个描述后面添加@物品分类即可。 #============================================================================== # ■ Harts_Window_ItemTitle #============================================================================== class Harts_Window_ItemTitle < Window_Base def initialize super(0, 0, 160, 64) self.contents = Bitmap.new(width - 32, height - 32) self.contents.clear self.contents.font.color = normal_color self.contents.draw_text(4, 0, 120, 32, $data_system.words.item, 1) end end #============================================================================== # ■ Harts_Window_ItemCommand #============================================================================== class Harts_Window_ItemCommand < Window_Selectable attr_accessor :commands #-------------------------------------------------------------------------- # ● 初始化,生成commands窗口 #-------------------------------------------------------------------------- def initialize super(0, 64, 160, 352) @commands = [] #————————生成commands窗口 for i in 1...$data_items.size if $game_party.item_number(i) > 0 push = true for com in @commands if com == $data_items.desc push = false end end if push == true @commands.push($data_items.desc) end end end for i in 1...$data_weapons.size if $game_party.weapon_number(i) > 0 push = true for com in @commands if com == $data_weapons.desc push = false end end if push == true @commands.push($data_weapons.desc) end end end for i in 1...$data_armors.size if $game_party.armor_number(i) > 0 push = true for com in @commands if com == $data_armors.desc push = false end end if push == true @commands.push($data_armors.desc) end end end if @commands == [] @commands.push("普通物品") end @item_max = @commands.size self.contents = Bitmap.new(width - 32, @item_max * 32) refresh self.index = 0 end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@item_max draw_item(i, normal_color) end end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def draw_item(index, color) self.contents.font.color = color y = index * 32 self.contents.draw_text(4, y, 128, 32, @commands[index]) end #-------------------------------------------------------------------------- # 只描绘原文字 #-------------------------------------------------------------------------- def update_help @help_window.set_text(@commands[self.index]) end end #============================================================================== # ■ Window_Item #============================================================================== class Harts_Window_ItemList < Window_Selectable #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def initialize super(160, 0, 480, 416) refresh self.index = 0 end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def refresh if self.contents != nil self.contents.dispose self.contents = nil end @data = [] end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def set_item(command) refresh for i in 1...$data_items.size if $game_party.item_number(i) > 0 and $data_items.desc == command @data.push($data_items) end end for i in 1...$data_weapons.size if $game_party.weapon_number(i) > 0 and $data_weapons.desc == command @data.push($data_weapons) end end for i in 1...$data_armors.size if $game_party.armor_number(i) > 0 and $data_armors.desc == command @data.push($data_armors) end end @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) self.contents.clear for i in 0...@item_max draw_item(i) end end end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def item_number return @item_max 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 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 y = index * 32 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 + 400, y, 16, 32, ":", 1) self.contents.draw_text(x + 416, y, 24, 32, number.to_s, 2) end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def update_help @help_window.set_text(self.item == nil ? "" : self.item.description) end end #============================================================================== # ■ Harts_Scene_Item #============================================================================== class Scene_Item #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def main @itemtitle_window = Harts_Window_ItemTitle.new @itemcommand_window = Harts_Window_ItemCommand.new @command_index = @itemcommand_window.index @itemlist_window = Harts_Window_ItemList.new @itemlist_window.active = false @help_window = Window_Help.new @help_window.x = 0 @help_window.y = 416 @itemcommand_window.help_window = @help_window @itemlist_window.help_window = @help_window @target_window = Window_Target.new @target_window.visible = false @target_window.active = false @itemlist_window.set_item(@itemcommand_window.commands[@command_index]) Graphics.transition loop do Graphics.update Input.update update if $scene != self break end end Graphics.freeze @itemtitle_window.dispose @itemcommand_window.dispose @itemlist_window.dispose @help_window.dispose @target_window.dispose end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def update @itemtitle_window.update @itemcommand_window.update @itemlist_window.update @help_window.update @target_window.update if @command_index != @itemcommand_window.index @command_index = @itemcommand_window.index @itemlist_window.set_item(@itemcommand_window.commands[@command_index]) end if @itemcommand_window.active update_itemcommand return end if @itemlist_window.active update_itemlist return end if @target_window.active update_target return end end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def update_itemcommand if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) $scene = Scene_Menu.new(0) return end if Input.trigger?(Input::C) if @itemlist_window.item_number == 0 $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) @itemcommand_window.active = false @itemlist_window.active = true @itemlist_window.index = 0 return end end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def update_itemlist if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) @itemcommand_window.active = true @itemlist_window.active = false @itemlist_window.index = 0 @itemcommand_window.index = @command_index return end if Input.trigger?(Input::C) @item = @itemlist_window.item unless @item.is_a?(RPG::Item) $game_system.se_play($data_system.buzzer_se) return end unless $game_party.item_can_use?(@item.id) $game_system.se_play($data_system.buzzer_se) return end $game_system.se_play($data_system.decision_se) if @item.scope >= 3 @itemlist_window.active = false @target_window.x = 304 @target_window.visible = true @target_window.active = true if @item.scope == 4 || @item.scope == 6 @target_window.index = -1 else @target_window.index = 0 end else if @item.common_event_id > 0 $game_temp.common_event_id = @item.common_event_id $game_system.se_play(@item.menu_se) if @item.consumable $game_party.lose_item(@item.id, 1) @itemlist_window.draw_item(@itemlist_window.index) end $scene = Scene_Map.new return end end return end end #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- def update_target if Input.trigger?(Input::B) $game_system.se_play($data_system.cancel_se) unless $game_party.item_can_use?(@item.id) @itemlist_window.refresh end @itemlist_window.active = true @target_window.visible = false @target_window.active = false @itemlist_window.set_item(@itemcommand_window.commands[@command_index]) return end if Input.trigger?(Input::C) if $game_party.item_number(@item.id) == 0 $game_system.se_play($data_system.buzzer_se) return end if @target_window.index == -1 used = false for i in $game_party.actors used |= i.item_effect(@item) end end if @target_window.index >= 0 target = $game_party.actors[@target_window.index] used = target.item_effect(@item) end if used $game_system.se_play(@item.menu_se) if @item.consumable $game_party.lose_item(@item.id, 1) @itemlist_window.draw_item(@itemlist_window.index) @itemlist_window.set_item(@itemcommand_window.commands[@command_index]) end @target_window.refresh if $game_party.all_dead? $scene = Scene_Gameover.new return end if @item.common_event_id > 0 $game_temp.common_event_id = @item.common_event_id $scene = Scene_Map.new return end end unless used $game_system.se_play($data_system.buzzer_se) end return end end end #============================================================================== # ■ RPG追加定义,使用@符号分类 #============================================================================== module RPG class Weapon def description description = @description.split(/@/)[0] return description != nil ? description : '' end def desc desc = @description.split(/@/)[1] return desc != nil ? desc : "普通物品" end end class Item def description description = @description.split(/@/)[0] return description != nil ? description : '' end def desc desc = @description.split(/@/)[1] return desc != nil ? desc : "普通物品" end end class Armor def description description = @description.split(/@/)[0] return description != nil ? description : '' end def desc desc = @description.split(/@/)[1] return desc != nil ? desc : "普通物品" end end end #============================================================================== # 本脚本来自www.66RPG.com,使用和转载请保留此信息 #============================================================================== |
RyanBern 发表于 2016-7-24 23:05 完美解决~膜拜大神 |
本帖最后由 sirenke 于 2016-7-25 19:40 编辑 如果是考虑丢失几号物品的话,先随机数,有多少物品大概有多少个变量值,然后每个值对应任意某个物品或者范围值对应物品,再判断这个物品的开关是否关闭,关闭的话看是否持有,持有丢失,如有需要再随机个值判断他的丢失概率,但是光这样只丢一样,而且丢失概率好像有点低,多循环几次可能会好点,而且物品多设置量大,也许脚本更好 |
sirenke 发表于 2016-7-25 02:27 就是,先分别判断每一样物品,持有的话打开开关(安全口袋的并行事件关闭开关),变量1=随机数,再随机数(1~n,n=物品总数),再一个一个数字分别判断(变量1=1就丢失1号物品,还判断一下开关是否打开,未打开的循环回随机数的步骤……诸如此类),满足条件的丢失,是这样吗? (今天上网时间短,没有办法详细设置测试,我先问一下大致思路) |
本帖最后由 sirenke 于 2016-7-25 02:33 编辑 事件的话,先判断是否持有,持有的话,随机数,条件分歧满足时丢失。安全口袋的话可能多少物品多少开关。 |
本帖最后由 RyanBern 于 2016-7-25 21:43 编辑 王小錵 发表于 2016-7-24 14:58 第一段代码改成 RUBY 代码复制
试试 |
王小錵 发表于 2016-7-24 15:45 qwq只能说祝楼主早点解决问题啦……其实多用变量是可以在事件里做到的x |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2024-11-27 02:28
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.