Project1
标题:
如果队员未满4个则直接加入,如满则询问要替换哪一个?
[打印本页]
作者:
影子骑士
时间:
2011-4-13 15:25
提示:
作者被禁止或删除 内容自动屏蔽
作者:
禾西
时间:
2011-4-13 15:50
有一個東西叫角色倉庫——在首頁上——當然或者并不完全合你心意,但是近來求寫腳本的大多都悲劇了~
作者:
影子骑士
时间:
2011-4-13 17:14
提示:
作者被禁止或删除 内容自动屏蔽
作者:
英顺的马甲
时间:
2011-4-13 18:13
本帖最后由 英顺的马甲 于 2011-4-13 18:20 编辑
是不是这样?
class Game_Party
def add_actor(actor_id)
actor = $game_actors[actor_id]
if @actors.size < 4 and not @actors.include?(actor)
@actors.push(actor)
$game_player.refresh
else not @actors.include?(actor)
a = []
@actors.each{|s|a.push(s.name)}
cmd_win = Window_Command.new(160,a)
cmd_win.x = 320 - cmd_win.width/2
cmd_win.y = 240 - cmd_win.height/2
hlp_win = Window_Base.new(cmd_win.x,cmd_win.y-64,160,64)
hlp_win.contents = Bitmap.new(128,32)
hlp_win.contents.draw_text(0,0,128,32,"要将谁替换掉?")
loop do
Graphics.update
Input.update
cmd_win.update
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
@actors.delete(@actors[cmd_win.index])
@actors.push(actor)
$game_player.refresh
break
end
end
cmd_win.dispose
hlp_win.dispose
end
end
end
复制代码
作者:
沙漠点灰
时间:
2011-4-13 18:16
本帖最后由 沙漠点灰 于 2011-4-13 18:21 编辑
回复
影子骑士
的帖子
#==============================================================================
# ■ Interpreter (分割定义 8)
#------------------------------------------------------------------------------
# 执行事件命令的解释器。本类在 Game_System 类
# 和 Game_Event 类的内部使用。
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ● 角色的替换
#--------------------------------------------------------------------------
def command_129
# 获取角色
actor = $game_actors[@parameters[0]]
# 角色有效的情况下
if actor != nil
# 操作分支
if @parameters[1] == 0
if @parameters[2] == 1
$game_actors[@parameters[0]].setup(@parameters[0])
end
if $game_party.actors.size < 4
$game_party.add_actor(@parameters[0])
else
# 执行替换
window_h = Window_Help.new
window_h.set_text("队伍已满,现在准备加入 #{$game_actors[@parameters[0]].name} ,请选择准备替换的人")
window_c = Window_Command.new(320,$game_party.actors.inject([]){|a,i|a<<i.name})
window_c.x = 320 / 2
window_c.y = 250
loop do
# 刷新游戏画面
Graphics.update
# 刷新输入信息
Input.update
# 刷新画面
window_c.update
if Input.trigger?(Input::B)
break
end
if Input.trigger?(Input::C)
$game_party.remove_actor($game_party.actors[window_c.index].id)
$game_party.add_actor(@parameters[0])
$game_temp.message_window_showing = true
$game_temp.message_text = "已经把#{$game_party.actors[window_c.index].name}]换为#{$game_actors[@parameters[0]].name}"
break
end
end
window_c.dispose
window_h.dispose
end
else
$game_party.remove_actor(@parameters[0])
end
end
# 继续
return true
end
end
复制代码
插在Main前
额,发现慢了半拍,不过我这个(较ls而言)要好得多
不过要在替换后,紧接着吐槽一句,不然又要开始替换
作者:
英顺的马甲
时间:
2011-4-13 18:34
$game_temp.message_text = "已经把#{$game_party.actors[window_c.index].name}
]
换为#{$game_actors[@parameters[0]].name}"
作者:
影子骑士
时间:
2011-4-13 19:00
提示:
作者被禁止或删除 内容自动屏蔽
作者:
英顺的马甲
时间:
2011-4-13 19:02
本帖最后由 英顺的马甲 于 2011-4-13 19:03 编辑
回复
影子骑士
的帖子
将
$game_temp.message_window_showing = true
$game_temp.message_text = "已经把#{$game_party.actors[window_c.index].name}]换为#{$game_actors[@parameters[0]].name}"
复制代码
加在“break”上面
作者:
影子骑士
时间:
2011-4-13 19:19
提示:
作者被禁止或删除 内容自动屏蔽
作者:
英顺的马甲
时间:
2011-4-13 19:29
本帖最后由 英顺的马甲 于 2011-4-13 19:36 编辑
回复
影子骑士
的帖子
sry,摆了个乌龙if Input.trigger?(Input::C)下面插入
name1 = @actors[cmd_win.index].name
复制代码
然后break上面替换为
hlp_win.visible=cmd_win.visible=false
$game_temp.message_window_showing = true
$game_temp.message_text = "已经把#{name1}]换为#{actor.name}"
复制代码
���
作者:
英顺的马甲
时间:
2011-4-13 19:38
回复
影子骑士
的帖子
最终脚本:
class Game_Party
def add_actor(actor_id)
actor = $game_actors[actor_id]
if @actors.size < 4 and not @actors.include?(actor)
@actors.push(actor)
$game_player.refresh
else not @actors.include?(actor)
a = []
@actors.each{|s|a.push(s.name)}
cmd_win = Window_Command.new(160,a)
cmd_win.x = 320 - cmd_win.width/2
cmd_win.y = 240 - cmd_win.height/2
hlp_win = Window_Base.new(cmd_win.x-80,cmd_win.y-64,320,64)
hlp_win.contents = Bitmap.new(288,32)
hlp_win.contents.draw_text(0,0,288,32,"要让#{actor.name}代替谁?")
loop do
Graphics.update
Input.update
cmd_win.update
if Input.trigger?(Input::C)
name1 = @actors[cmd_win.index].name
$game_system.se_play($data_system.decision_se)
@actors.delete(@actors[cmd_win.index])
@actors.push(actor)
$game_player.refresh
hlp_win.visible=cmd_win.visible=false
$game_temp.message_window_showing = true
$game_temp.message_text = "已经把#{name1}换为#{actor.name}"
break
end
end
cmd_win.dispose
hlp_win.dispose
end
end
end
复制代码
作者:
影子骑士
时间:
2011-4-13 19:43
提示:
作者被禁止或删除 内容自动屏蔽
作者:
影子骑士
时间:
2011-4-13 19:56
提示:
作者被禁止或删除 内容自动屏蔽
作者:
沙漠点灰
时间:
2011-4-14 17:00
回复
英顺的马甲
的帖子
个人认为加在 Game_Party 的 add_actor 比较方便
的确!不过要考虑到脚本之间的冲突的话,add_actor是很多人下手的目标,修改事件的
解释器冲突可能性很小
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1