幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1897|回复: 7

加点系统范本 完成版

[复制链接]

5

主题

32

帖子

542

积分

⑤进阶

积分
542
发表于 2004-10-26 21:46:53 | 显示全部楼层 |阅读模式
http://202.103.64.46/temp/upload/luvp2.rar

支持模拟加点
可以在加点时使用L和R键换人(默认的LR为page up/page down)
需要注意的是,本脚本需要占用了从101开始(包括101)到(100+出场角色数)的变量(比如有角色表中的前8位角色在游戏里登场,那么101~108就都不要用了)来存储角色的剩余点数,请不要使用这些变量(当然,如果是用事件特意去操作剩余点数例外)

最后说

感谢莫尼卡大姐汉化RMXP

本帖还发在EZ一份
众所周知,H是和平的拼音的第一个字母。 所以,让我们一起为H努力吧
回复

使用道具 举报

2

主题

68

帖子

1329

积分

⑥精研

追风者

积分
1329
发表于 2004-10-26 22:06:15 | 显示全部楼层
谢谢啦,抱走~
Samwise the Brave. \"If I take one more step, it’ll be the farthest away from home I’ve ever been.\"
回复 支持 反对

使用道具 举报

1

主题

6

帖子

142

积分

③业余

积分
142
发表于 2004-10-26 22:29:04 | 显示全部楼层
thanks
回复 支持 反对

使用道具 举报

1

主题

4

帖子

64

积分

②入门

积分
64
发表于 2004-10-26 22:30:13 | 显示全部楼层
[em02][em02]好东西,这才像RPG~[em02]
回复 支持 反对

使用道具 举报

1

主题

22

帖子

533

积分

⑤进阶

杀人皇帝

积分
533
发表于 2004-10-27 11:24:39 | 显示全部楼层
大人可不可以顺便把这个改了?》
“自己不会编程的说。。。搞了半天没达成。。汗。。。”
# ▼▲▼ XRXS_MP 6. リングメニュー導入 ▼▲▼
# by 和希
###############################################################################
# リングメニュー導入スクリプト
# writen by 和希
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# ▽導入
# 1.このスクリプトをMainセクションの上に作った新しいセクションにコピーする
# 2.Window_RingMenuの上部にある7つの RPG::Cache.icon(\"\") の \"\" の中に
# 右の説明に書いてあるコマンド用のアイコン名を書く。
# (一番下の使用禁止は選べないメニューに重ねるアイコンです。
# こんなのがいいかも→ φ )
# 3.アイコン設定のすぐ下にある SE_STARTUP = \"\" の \"\" の中にメニューを
# 開いたときに鳴らしたいのSEの名前を書く。
# ▽スクリプト触れる人へ
# とりあえず動く物を目標に作ったものなので(志低いw)、座標の調整などが不完全です。
# より正確にアクターの画面座標を取得する処理を追加したり、アクター一覧の位置を
# 変えたり、文字表示などなどを調整するといい感じに仕上がる気がします。
###############################################################################
#==============================================================================
# ■ Window_RingMenu
#==============================================================================
class Window_RingMenu < Window_Base
#--------------------------------------------------------------------------
# ○ クラス定数
#--------------------------------------------------------------------------
STARTUP_FRAMES = 20 # 初期アニメーションのフレーム数
MOVING_FRAMES = 5 # リングを回した時のフレーム数
RING_R = 64 # リングの半径
ICON_ITEM = RPG::Cache.icon(\"034-Item03\") # 「アイテム」メニューのアイコン
ICON_SKILL = RPG::Cache.icon(\"044-Skill01\") # 「スキル」メニューのアイコン
ICON_EQUIP = RPG::Cache.icon(\"001-Weapon01\") # 「装備」メニューのアイコン
ICON_STATUS = RPG::Cache.icon(\"050-Skill07\") # 「ステータス」メニューのアイコン
ICON_SAVE = RPG::Cache.icon(\"038-Item07\") # 「セーブ」メニューのアイコン
ICON_EXIT = RPG::Cache.icon(\"046-Skill03\") # 「終了」メニューのアイコン
ICON_POWER = RPG::Cache.icon(\"038-Item07\")
ICON_DISABLE= RPG::Cache.icon(\"\") # 使用禁止項目に付くアイコン
SE_STARTUP = \"056-Right02\" # メニューを開いたときに鳴らすSE
MODE_START = 1 # スタートアップアニメーション
MODE_WAIT = 2 # 待機
MODE_MOVER = 3 # 時計回り回転アニメーション
MODE_MOVEL = 4 # 反時計回り回転アニメーション
#--------------------------------------------------------------------------
# ○ アクセサ
#--------------------------------------------------------------------------
attr_accessor :index
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize( center_x, center_y )
super(0, 0, 640, 480)
self.contents = Bitmap.new(width-32, height-32)
self.opacity = 0
self.back_opacity = 0
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = \"状态\"
s5 = \"储存\"
s6 = \"结束\"
s7 = \"加点\"
@commands = [ s1, s2, s3, s4, s5, s6, s7 ]
@item_max = 7
@index = 0
@items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT, ICON_POWER ]
@disabled = [ false, false, false, false, false, false, false ]
@cx = center_x - 16
@cy = center_y - 16
setup_move_start
refresh
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
refresh
end
#--------------------------------------------------------------------------
# ● 画面再描画
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# アイコンを描画
case @mode
when MODE_START
refresh_start
when MODE_WAIT
refresh_wait
when MODE_MOVER
refresh_move(1)
when MODE_MOVEL
refresh_move(0)
end
# アクティブなコマンド名表示
rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
self.contents.draw_text(rect, @commands[@index],1)
end
#--------------------------------------------------------------------------
# ○ 画面再描画(初期化時)
#--------------------------------------------------------------------------
def refresh_start
d1 = 2.0 * Math:I / @item_max
d2 = 1.0 * Math:I / STARTUP_FRAMES
r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( r * Math.sin( d ) ).to_i
y = @cy - ( r * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#--------------------------------------------------------------------------
# ○ 画面再描画(待機時)
#--------------------------------------------------------------------------
def refresh_wait
d = 2.0 * Math:I / @item_max
for i in 0...@item_max
j = i - @index
x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
draw_item(x, y, i)
end
end
#--------------------------------------------------------------------------
# ○ 画面再描画(回転時)
# mode : 0=反時計回り 1=時計回り
#--------------------------------------------------------------------------
def refresh_move( mode )
d1 = 2.0 * Math:I / @item_max
d2 = d1 / MOVING_FRAMES
d2 *= -1 if mode != 0
for i in 0...@item_max
j = i - @index
d = d1 * j + d2 * @steps
x = @cx + ( RING_R * Math.sin( d ) ).to_i
y = @cy - ( RING_R * Math.cos( d ) ).to_i
draw_item(x, y, i)
end
@steps -= 1
if @steps < 1
@mode = MODE_WAIT
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# x :
# y :
# i : 項目番号
#--------------------------------------------------------------------------
def draw_item(x, y, i)
#p \"x=\" + x.to_s + \" y=\" + y.to_s + \" i=\" + @items.to_s
rect = Rect.new(0, 0, @items.width, @items.height)
if @index == i
self.contents.blt( x, y, @items, rect )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect )
end
else
self.contents.blt( x, y, @items, rect, 128 )
if @disabled[@index]
self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
end
end
end
#--------------------------------------------------------------------------
# ● 項目を無効にする
# index : 項目番号
#--------------------------------------------------------------------------
def disable_item(index)
@disabled[index] = true
end
#--------------------------------------------------------------------------
# ○ 初期化アニメーションの準備
#--------------------------------------------------------------------------
def setup_move_start
@mode = MODE_START
@steps = STARTUP_FRAMES
if SE_STARTUP != nil and SE_STARTUP != \"\"
Audio.se_play(\"Audio/SE/\" + SE_STARTUP, 80, 100)
end
end
#--------------------------------------------------------------------------
# ○ 回転アニメーションの準備
#--------------------------------------------------------------------------
def setup_move_move(mode)
if mode == MODE_MOVER
@index -= 1
@index = @items.size - 1 if @index < 0
elsif mode == MODE_MOVEL
@index += 1
@index = 0 if @index >= @items.size
else
return
end
@mode = mode
@steps = MOVING_FRAMES
end

男人掌握了世界,女人掌握了男人.
回复 支持 反对

使用道具 举报

1

主题

22

帖子

533

积分

⑤进阶

杀人皇帝

积分
533
发表于 2004-10-27 11:25:19 | 显示全部楼层
#--------------------------------------------------------------------------
# ○ アニメーション中かどうか
#--------------------------------------------------------------------------
def animation?
return @mode != MODE_WAIT
end
end
#==============================================================================
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
#  メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================class Window_RingMenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(204, 64, 232, 352)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
x = 80
y = 80 * i
actor = $game_party.actors
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_name(actor, x, y + 24)
end
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
end
end
end
#==============================================================================
# #■ Scene_RingMenu
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュー画面の処理を行うクラスです。
#==============================================================================
#class Scene_RingMenu
class Scene_Menu
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# スプライトセットを作成
@spriteset = Spriteset_Map.new
# コマンドウィンドウを作成
px = $game_player.screen_x - 15
py = $game_player.screen_y - 24
@command_window = Window_RingMenu.new(px,py)
@command_window.index = @menu_index
# パーティ人数が 0 人の場合
if $game_party.actors.size == 0
# アイテム、スキル、装備、ステータスを無効化
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
@command_window.z = 100
# セーブ禁止の場合
if $game_system.save_disabled
# セーブを無効にする
@command_window.disable_item(4)
end
# ステータスウィンドウを作成
@status_window = Window_RingMenuStatus.new
@status_window.x = 160
@status_window.y = 0
@status_window.z = 200
@status_window.visible = false
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# スプライトセットを解放
@spriteset.dispose
# ウィンドウを解放
@command_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
@status_window.update
# コマンドウィンドウがアクティブの場合: update_command を呼ぶ
if @command_window.active
update_command
return
end
# ステータスウィンドウがアクティブの場合: update_status を呼ぶ
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# パーティ人数が 0 人で、セーブ、ゲーム終了以外のコマンドの場合
if $game_party.actors.size == 0 and @command_window.index < 4
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 0 # アイテム
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# アイテム画面に切り替え
$scene = Scene_Item.new
when 1 # スキル
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 2 # 装備
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 3 # ステータス
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをアクティブにする
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0
when 4 # セーブ
# セーブ禁止の場合
if $game_system.save_disabled
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# セーブ画面に切り替え
$scene = Scene_Save.new
when 5 # ゲーム終了
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ゲーム終了画面に切り替え
$scene = Scene_End.new
end
return
end
# アニメーション中ならカーソルの処理を行わない
return if @command_window.animation?
# ↑or← ボタンが押された場合
if Input.press?(Input::UP) or Input.press?(Input:EFT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
return
end
# ↓or→ ボタンが押された場合
if Input.press?(Input:OWN) or Input.press?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
@command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_status
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# コマンドウィンドウをアクティブにする
@command_window.active = true
@status_window.active = false
@status_window.visible = false
@status_window.index = -1
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 1 # スキル
# このアクターの行動制限が 2 以上の場合
if $game_party.actors[@status_window.index].restriction >= 2
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# スキル画面に切り替え
$scene = Scene_Skill.new(@status_window.index)
when 2 # 装備
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 装備画面に切り替え
$scene = Scene_Equip.new(@status_window.index)
when 3 # ステータス
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス画面に切り替え
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end

男人掌握了世界,女人掌握了男人.
回复 支持 反对

使用道具 举报

3

主题

24

帖子

476

积分

④见习

黑奴啊黑奴

积分
476
发表于 2004-10-27 12:00:10 | 显示全部楼层
这个不是转盘菜单吗?
--艾泽拉斯--
回复 支持 反对

使用道具 举报

5

主题

32

帖子

542

积分

⑤进阶

积分
542
 楼主| 发表于 2004-10-27 19:20:28 | 显示全部楼层
在那个转盘菜单里加入的话
在410行加入
……
when 5 # ゲーム終了
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ゲーム終了画面に切り替え
$scene = Scene_End.new
#以下开始为添加的内容
when 6
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.visible = true
@status_window.index = 0

#添加完后,上面那行后面应该是下面的内容
end
return
end
# アニメーション中ならカーソルの処理を行わない
return if @command_window.animation?
……
然后再在471行处添加
……
when 3 # ステータス
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス画面に切り替え
$scene = Scene_Status.new(@status_window.index)
#此处开始为添加的内容
when 6
$game_system.se_play($data_system.decision_se)
$scene = Scene_Lvup.new(@status_window.index)
#后面的内容是
end
return
end
end
end
#此处是脚本结束
以上行数是直接复制你2个帖子的内容拼合后所表示的行数
另外这位大大的脚本一定要放到我的脚本后面,因为我也重新定义Scene_Menu了,如果放到我的前面,我的定义就覆盖他的定义了。
顺便…这个菜单很强……学习中…
众所周知,H是和平的拼音的第一个字母。 所以,让我们一起为H努力吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-8 14:08 , Processed in 0.012352 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表