设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 716|回复: 5
打印 上一主题 下一主题

[已经解决] 几个问题请教下。

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
27 小时
注册时间
2009-7-23
帖子
21
跳转到指定楼层
1
发表于 2009-9-21 15:37:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
第一:装备
请问有什么可以增加武器属性的脚本,比如要加什么东西多少钱多少经验才能够让武器附上属性
XP版本的。  还有 那个日文的太变态了第一个加了2点攻击第二个0点第三个10点第四个8点,就是
找不到地方改这些属性值,金钱方面自己改了还可以不过一级加的属性值第一个差不多后面三个都太多了、、
第二:事件、变量
怎么使用变量限制事件。比如我要做个剧情不过等级不够要用变量限制住。
第三:脚本、加点
我本身有一个加点的脚本了,不过想设置些回答问题问答对的就给与1点加点的属性点。
回答错的就减掉他1点属性点这样。不过就是找不到有什么脚本可以减掉加点的那些点数
比如
体质:50
魔力:50
力量:50
防御:50
敏捷:50
潜能点:10    ←加的或减就是潜能点这个。
第三:武器、打孔、打宝石
有没有XP版本的打孔打宝石的。或者随即属性的武器打造就可以。

Lv3.寻梦者

梦石
0
星屑
1743
在线时间
485 小时
注册时间
2006-1-7
帖子
1073
2
发表于 2009-9-21 16:25:43 | 只看该作者
一、有脚本还是用脚本方便。把你用的那个脚本用【
  1. 插入代码
复制代码
】贴出来,我帮你看看。
二、事件有一个功能 “条件分歧” 具体使用方法,请看置顶新手教程
三、潜能点是用变量来记录的。如果要加,可以直接“变量操作”。要减的话,问题很多。
    直接“变量操作”可以。但是,如果这个时候潜能点为0时,就没有效果了。
    也就是说,人家把潜能点都加好了,再去答题,答对了就又有潜能点了,打错了也不会被扣走。
    其实可以这样操作,不去控制“潜能点”。事件有一个功能,事件指令第三页,“增减能力值”。
    不过这个还是要做复杂的判断,如果XX在队伍中,就减少或者增加;如果不在,就不做任何修改。
    总之,还是 “条件分歧”

【纠正一下】
你排列有问题,
第三:脚本、加点
第三:武器、打孔、打宝石

第三:武器、打孔、打宝石 应该是第四个了吧。

四、打孔脚本未见。不过你可以通过你问的第一个,那个来实现。其实说白了就是增加武器属性而已,打宝石或者武器升级都一样。
至于“随机属性的武器打造”,请在主站上搜索 “武器”
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
27 小时
注册时间
2009-7-23
帖子
21
3
 楼主| 发表于 2009-9-21 16:50:01 | 只看该作者
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. # ▼▲▼ XRXS24. システム?ウェポンプロパティXC. ver..01a ▼▲▼
  5. # by 桜雅 在土
  6. #
  7. # ※ XRXS.RGSS改良カスタマイズ が必要です。

  8. # --- 仕様 ---
  9. #
  10. # ◇装備武器のプロパティの変更
  11. #  ├◇例:actor(==Game_Actor)の装備武器の付与属性#1を 21 に設定
  12. # └◇スクリプト:actor.weapon_property[PROPERTY_ELEMENT_GRANT_1st] = 21
  13. #
  14. #==============================================================================
  15. # □ 定数
  16. #==============================================================================
  17. module Fixed_PropertyNumber
  18. # 現在のプロパティの総数
  19. PROPERTY_NUMBER = 8
  20. # 「属性」数(ダメージ倍率ようとして用いられる属性の数)
  21. ELEMENTS_NUMBER = 16
  22. # 以下のナンバーは 同値は指定不可能かつ0から個数-1までの整数
  23. PROPERTY_ROOM_FILLED = 0 # プロパティ:部屋が空いているかどうか
  24. PROPERTY_LEVEL = 1 # プロパティ:武器レベル
  25. PROPERTY_EXP = 2 # プロパティ:エクストラポイント
  26. PROPERTY_EXP_SECOND = 3 # プロ靴匹#亥ē攻去楗荪ぅ螗?ケタ目(32768進法)
  27. PROPERTY_ELEMENT_GRANT_1st = 4 # プロパティ:付与属性#1
  28. PROPERTY_ELEMENT_GRANT_2nd = 5 # プロパティ:付与属性#2
  29. PROPERTY_ELEMENT_GRANT_3rd = 6 # プロパティ:付与属性#3
  30. PROPERTY_ELEMENT_GRANT_4th = 7 # プロパティ:付与属性#4
  31. end
  32. #==============================================================================
  33. $xrxs24_weapon_property_system_work = true
  34. #==============================================================================
  35. # ■ Game_Party
  36. #==============================================================================
  37. class Game_Party
  38. #--------------------------------------------------------------------------
  39. # ◇ インクルード
  40. #--------------------------------------------------------------------------
  41. include Fixed_PropertyNumber
  42. #--------------------------------------------------------------------------
  43. # ● 公開インスタンス変数
  44. #--------------------------------------------------------------------------
  45. attr_accessor :weapons_table # ウェポンテーブル
  46. #--------------------------------------------------------------------------
  47. # ウェポンテーブル解説
  48. #--------------------------------------------------------------------------
  49. =begin
  50. @weapons_table[weapon_id, room_no, property]

  51. weapon_id は、武器のIDです。
  52. room_no は、部屋のNo.です。武器がここに格納されます。
  53. property は、プロパティです。

  54. property
  55. 0 部屋の空き情報。0が空き、1が埋まり。
  56. 1 EXP数値。数値が入ります。

  57. 例えば、@weapons_table[1, 0, 0] が1の場合、
  58. ID.1の武器がNo.0の部屋に存在する。ということ。
  59. =end
  60. def weapons_table
  61. @weapons_table
  62. end
  63. #--------------------------------------------------------------------------
  64. # ● オブジェクト初期化
  65. #--------------------------------------------------------------------------
  66. alias xrxs24_initialize initialize
  67. def initialize
  68. xrxs24_initialize
  69. # ウェポンテーブルを作成
  70. @weapons_table = Table.new(0,0,PROPERTY_NUMBER)
  71. end
  72. #--------------------------------------------------------------------------
  73. # ● 武器の入手 # ←武器の増加
  74. # weapon_id : 武器 ID
  75. # set_level : 初期武器レベル # ←元個数n
  76. #--------------------------------------------------------------------------
  77. def gain_weapon(weapon_id, set_level)
  78. # weapon_id が 0 の場合
  79. if weapon_id == 0
  80. return 0
  81. end
  82. # ハッシュの個数データを更新
  83. if weapon_id > 0
  84. @weapons[weapon_id] = [[weapon_number(weapon_id) + 1, 0].max, 99].min
  85. end
  86. # ウェポンテーブルに新規アイテムを追加
  87. # xsize(テーブルの武器IDの最大値)が足りない場合リサイズ
  88. if @weapons_table.xsize <= weapon_id
  89. @weapons_table.resize(weapon_id+1, @weapons_table.ysize, @weapons_table.zsize)
  90. end
  91. # ysize(テーブルの個数の最大値)が足りない場合リサイズ
  92. num = weapon_number(weapon_id)
  93. if @weapons_table.ysize <= num
  94. @weapons_table.resize(@weapons_table.xsize, num+1, @weapons_table.zsize)
  95. end
  96. # ウェポンテーブルから空き部屋No.を検索
  97. for i in 0...@weapons_table.ysize
  98. # 空き部屋である 0 を返した場合
  99. if @weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] != 1
  100. # 部屋を埋める
  101. @weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] = 1
  102. # 初期武器レベルを設定
  103. @weapons_table[weapon_id, i, PROPERTY_LEVEL] = set_level
  104. # EXPをレベルの三乗に設定
  105. expp = set_level ** 3
  106. # EXPの数値を設定
  107. @weapons_table[weapon_id, i, PROPERTY_EXP] = expp%32768
  108. @weapons_table[weapon_id, i, PROPERTY_EXP_SECOND] = (expp/32768).floor
  109. # 終了、部屋番号を返す
  110. return i
  111. end
  112. end
  113. # 空き部屋が無かった場合
  114. p "[空的房间!!" # 本来起こりえないはず # 起きたらプログラムミス
  115. end
  116. #--------------------------------------------------------------------------
  117. # ● 武器を捨てる # ←武器の減少
  118. # weapon_id : 武器 ID
  119. # room_no : ルームNo. # ※元?個数n
  120. #--------------------------------------------------------------------------
  121. def lose_weapon(weapon_id, room_no)
  122. # weapon_id が 0 の場合
  123. if weapon_id == 0
  124. return 0
  125. end
  126. # ハッシュの個数データを更新
  127. if weapon_id > 0
  128. @weapons[weapon_id] = [[weapon_number(weapon_id) - 1, 0].max, 99].min
  129. end
  130. # ウェポンテーブルに設定
  131. # 部屋を空き部屋にする
  132. @weapons_table[weapon_id, room_no, PROPERTY_ROOM_FILLED] = 0
  133. # 他全プロパティを 0 化
  134. for i in 0...PROPERTY_NUMBER
  135. @weapons_table[weapon_id, room_no, i] = 0
  136. end
  137. end
  138. end
  139. #==============================================================================
  140. # ■ Game_Actor
  141. #==============================================================================
  142. class Game_Actor < Game_Battler
  143. #--------------------------------------------------------------------------
  144. # ◇ インクルード
  145. #--------------------------------------------------------------------------
  146. include Fixed_PropertyNumber
  147. #--------------------------------------------------------------------------
  148. # ● 公開インスタンス変数
  149. #--------------------------------------------------------------------------
  150. attr_accessor :weapon_property # 装備中の武器のウェポンプロパティ
  151. #--------------------------------------------------------------------------
  152. # ● セットアップ
  153. #--------------------------------------------------------------------------
  154. alias xrxs24_setup setup
  155. def setup(actor_id)
  156. xrxs24_setup(actor_id)
  157. # 初期化
  158. @weapon_property = Table.new(PROPERTY_NUMBER)
  159. @weapon_property[PROPERTY_LEVEL] = 1 # 初期武器のレベルは1
  160. @equip_room_no = 0
  161. end
  162. #--------------------------------------------------------------------------
  163. # ● 通常攻撃の属性取得
  164. #--------------------------------------------------------------------------
  165. alias xrxs24_element_set element_set
  166. def element_set
  167. attack_element_set = xrxs24_element_set
  168. for i in 1..ELEMENTS_NUMBER
  169. for j in [PROPERTY_ELEMENT_GRANT_1st,
  170. PROPERTY_ELEMENT_GRANT_2nd,
  171. PROPERTY_ELEMENT_GRANT_3rd,
  172. PROPERTY_ELEMENT_GRANT_4th]
  173. if @weapon_property[j] == i and !attack_element_set.include?(i)
  174. attack_element_set.push(i)
  175. end
  176. end
  177. end
  178. return attack_element_set
  179. end
  180. #--------------------------------------------------------------------------
  181. # ● 装備変更予定の部屋番号
  182. # room_no : 装備する元のアイテムの部屋No.
  183. #--------------------------------------------------------------------------
  184. def equip_room_no(rn)
  185. @equip_room_no = rn
  186. end
  187. #--------------------------------------------------------------------------
  188. # ● 装備の変更
  189. # equip_type : 装備タイプ
  190. # id : 武器 or 防具 ID (0 なら装備解除)
  191. #--------------------------------------------------------------------------
  192. alias xrxs24_equip equip
  193. def equip(equip_type, id)
  194. case equip_type
  195. when 0 # 武器
  196. if id == 0 or $game_party.weapon_number(id) > 0
  197. # 現在装備武器
  198. if @weapon_id != 0
  199. # 現在装備を増やす
  200. used_room_no = $game_party.gain_weapon(@weapon_id, 1)
  201. # アクター現在武器のプロパティ
  202. for i in 0...PROPERTY_NUMBER
  203. # プロパティを部屋へコピー
  204. $game_party.weapons_table[@weapon_id, used_room_no, i] = @weapon_property[i]
  205. # コピー後に削除
  206. @weapon_property[i] = 0
  207. end
  208. # 部屋の空き状況は無条件で 1 にする
  209. $game_party.weapons_table[@weapon_id, used_room_no, PROPERTY_ROOM_FILLED] = 1
  210. #p "武器ID. " + @weapon_id.to_s + ", 部屋No." + used_room_no.to_s
  211. end
  212. # 新規装着
  213. if id != 0
  214. # 装備対象武器のプロパティ
  215. for i in 0...PROPERTY_NUMBER
  216. # プロパティをアクターへコピー
  217. @weapon_property[i] = $game_party.weapons_table[id, @equip_room_no, i]
  218. # コピー後に削除
  219. $game_party.weapons_table[id, @equip_room_no, i] = 0
  220. end
  221. # 装備対象のアイテムを消す
  222. $game_party.lose_weapon(id, @equip_room_no)
  223. # 外す場合
  224. else
  225. # アクタープロパティを初期化
  226. for i in 0...PROPERTY_NUMBER
  227. @weapon_property[i] = 0
  228. end
  229. end
  230. # 装備変更
  231. @weapon_id = id
  232. end
  233. return
  234. end
  235. xrxs24_equip(equip_type, id)
  236. end
  237. #--------------------------------------------------------------------------
  238. # ● 基本攻撃力の取得
  239. #--------------------------------------------------------------------------
  240. def base_atk
  241. weapon = $data_weapons[@weapon_id]
  242. if weapon == nil
  243. return 0
  244. else
  245. return weapon.atk * (100 + weapon.atk%10 * @weapon_property[PROPERTY_LEVEL]) /100
  246. end
  247. end
  248. end
  249. #==============================================================================
  250. # ■ Window_Item
  251. #==============================================================================
  252. class Window_Item < Window_Selectable
  253. #--------------------------------------------------------------------------
  254. # ◇ インクルード
  255. #--------------------------------------------------------------------------
  256. include Fixed_PropertyNumber
  257. #--------------------------------------------------------------------------
  258. # ● リフレッシュ
  259. #--------------------------------------------------------------------------
  260. alias xrxs24_refresh refresh
  261. def refresh
  262. @data_id = []
  263. xrxs24_refresh
  264. end
  265. #--------------------------------------------------------------------------
  266. # ● アイテムの部屋番号の取得
  267. #--------------------------------------------------------------------------
  268. def item_room_no
  269. return @data_id[self.index]
  270. end
  271. #--------------------------------------------------------------------------
  272. # ● 所有数が 1 以上の武器を @data に返す
  273. #--------------------------------------------------------------------------
  274. def set_own_weapon_data
  275. for i in 1...$data_weapons.size
  276. if $game_party.weapon_number(i) > 0
  277. # 武器の個別描写を行う
  278. for j in 0...$game_party.weapons_table.ysize
  279. if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
  280. # 武器をプッシュ
  281. @data.push($data_weapons[i])
  282. # 部屋No.を合わせる
  283. @data_id[@data.size-1] = j
  284. end
  285. end
  286. # ---
  287. end
  288. end
  289. end
  290. #--------------------------------------------------------------------------
  291. # ● 項目の描画
  292. #--------------------------------------------------------------------------
  293. alias xrxs24_draw_item draw_item
  294. def draw_item(index)
  295. item = @data[index]
  296. case item
  297. when RPG::Weapon
  298. room_no = @data_id[index].nil? ? 0 : @data_id[index]
  299. number = $game_party.weapon_number(item.id)
  300. x = 4 + index % @column_max * (288 + 32)
  301. y = index / @column_max * 32
  302. rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  303. self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  304. bitmap = RPG::Cache.icon(item.icon_name)
  305. if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
  306. opacity = 255
  307. else
  308. opacity = 128
  309. end
  310. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  311. if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
  312. self.contents.font.color = system_color
  313. self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
  314. self.contents.font.color = normal_color
  315. else
  316. self.contents.font.color = disabled_color
  317. self.contents.draw_text(x +224, y, 56, 32, "Lv. ")
  318. end
  319. level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
  320. self.contents.draw_text(x + 232, y, 48, 32, level, 2)
  321. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  322. else
  323. xrxs24_draw_item(index)
  324. end
  325. end
  326. end
  327. #==============================================================================
  328. # ■ Window_EquipRight
  329. #==============================================================================
  330. class Window_EquipRight < Window_Selectable
  331. #--------------------------------------------------------------------------
  332. # ◇ インクルード
  333. #--------------------------------------------------------------------------
  334. include Fixed_PropertyNumber
  335. #--------------------------------------------------------------------------
  336. # ● リフレッシュ
  337. #--------------------------------------------------------------------------
  338. alias xrxs24_refresh refresh
  339. def refresh
  340. xrxs24_refresh
  341. self.contents.font.color = system_color
  342. self.contents.draw_text(276, 0, 56, 32, "Lv. ")
  343. self.contents.font.color = normal_color
  344. level = @actor.weapon_property[PROPERTY_LEVEL].to_s
  345. self.contents.draw_text(284, 0, 48, 32, level, 2)
  346. end
  347. end
  348. #==============================================================================
  349. # ■ Window_EquipItem
  350. #==============================================================================
  351. class Window_EquipItem < Window_Selectable
  352. #--------------------------------------------------------------------------
  353. # ◇ インクルード
  354. #--------------------------------------------------------------------------
  355. include Fixed_PropertyNumber
  356. #--------------------------------------------------------------------------
  357. # ● アイテムの部屋番号の取得
  358. #--------------------------------------------------------------------------
  359. def item_room_no
  360. return @data_id[self.index]
  361. end
  362. #--------------------------------------------------------------------------
  363. # ● リフレッシュ
  364. #--------------------------------------------------------------------------
  365. alias xrxs24_refresh refresh
  366. def refresh
  367. @data_id = []
  368. xrxs24_refresh
  369. end
  370. #--------------------------------------------------------------------------
  371. # ● 指定クラスが装備可能、かつ所有している武器を @data に返す
  372. #--------------------------------------------------------------------------
  373. def set_equipable_weapon_data(class_id)
  374. weapon_set = $data_classes[class_id].weapon_set
  375. for i in 1...$data_weapons.size
  376. if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
  377. # 武器の個別描写を行う
  378. for j in 0...$game_party.weapons_table.ysize
  379. if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
  380. # 武器をプッシュ
  381. @data.push($data_weapons[i])
  382. # 部屋No.を合わせる
  383. @data_id[@data.size-1] = j
  384. end
  385. end
  386. # ---
  387. end
  388. end
  389. end
  390. #--------------------------------------------------------------------------
  391. # ● 項目の描画
  392. #--------------------------------------------------------------------------
  393. alias xrxs24_draw_item draw_item
  394. def draw_item(index)
  395. item = @data[index]
  396. x = 4 + index % @column_max * (288 + 32)
  397. y = index / @column_max * 32
  398. case item
  399. when RPG::Weapon
  400. room_no = @data_id[index].nil? ? 0 : @data_id[index]
  401. number = $game_party.weapon_number(item.id)
  402. bitmap = RPG::Cache.icon(item.icon_name)
  403. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  404. self.contents.font.color = system_color
  405. self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
  406. self.contents.font.color = normal_color
  407. level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
  408. self.contents.draw_text(x + 232, y, 48, 32, level, 2)
  409. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  410. else
  411. xrxs24_draw_item(index)
  412. end
  413. end
  414. #--------------------------------------------------------------------------
  415. # ● ヘルプテキスト更新
  416. #--------------------------------------------------------------------------
  417. def update_help
  418. if self.item.is_a?(RPG::Weapon)
  419. element_name = $data_system.elements[$game_party.weapons_table[self.item.id, self.item_room_no, PROPERTY_ELEMENT_GRANT_1st]]
  420. else
  421. element_name = ""
  422. end
  423. @help_window.set_text(self.item == nil ? "" : self.item.description + element_name)
  424. end
  425. end
  426. #==============================================================================
  427. # ■ Window_ShopSell
  428. #==============================================================================
  429. class Window_ShopSell < Window_Selectable
  430. #--------------------------------------------------------------------------
  431. # ◇ インクルード
  432. #--------------------------------------------------------------------------
  433. include Fixed_PropertyNumber
  434. #--------------------------------------------------------------------------
  435. # ● 公開インスタンス変数
  436. #--------------------------------------------------------------------------
  437. attr_accessor :column_max
  438. #--------------------------------------------------------------------------
  439. # ● リフレッシュ
  440. #--------------------------------------------------------------------------
  441. alias xrxs24_refresh refresh
  442. def refresh
  443. @data_id = []
  444. xrxs24_refresh
  445. end
  446. #--------------------------------------------------------------------------
  447. # ● 部屋No.の取得
  448. #--------------------------------------------------------------------------
  449. def item_room_no
  450. return @data_id[self.index]
  451. end
  452. #--------------------------------------------------------------------------
  453. # ● 所有数が 1 以上の武器を @data に返す
  454. #--------------------------------------------------------------------------
  455. def set_own_weapon_data
  456. for i in 1...$data_weapons.size
  457. if $game_party.weapon_number(i) > 0
  458. # 武器の個別描写を行う
  459. for j in 0...$game_party.weapons_table.ysize
  460. if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
  461. # 武器をプッシュ
  462. @data.push($data_weapons[i])
  463. # 部屋No.を合わせる
  464. @data_id[@data.size-1] = j
  465. end
  466. end
  467. # ---
  468. end
  469. end
  470. end
  471. #--------------------------------------------------------------------------
  472. # ● 項目の描画
  473. #--------------------------------------------------------------------------
  474. alias xrxs24_draw_item draw_item
  475. def draw_item(index)
  476. item = @data[index]
  477. x = 4 + index % @column_max * (288 + 32)
  478. y = index / @column_max * 32
  479. case item
  480. when RPG::Weapon
  481. room_no = @data_id[index].nil? ? 0 : @data_id[index]
  482. number = $game_party.weapon_number(item.id)
  483. bitmap = RPG::Cache.icon(item.icon_name)
  484. self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
  485. self.contents.font.color = system_color
  486. self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
  487. self.contents.font.color = normal_color
  488. level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
  489. self.contents.draw_text(x + 232, y, 48, 32, level, 2)
  490. self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  491. else
  492. xrxs24_draw_item(index)
  493. end
  494. end
  495. end
  496. #==============================================================================
  497. # ■ Scene_Equip
  498. #==============================================================================
  499. class Scene_Equip
  500. #--------------------------------------------------------------------------
  501. # ◇ インクルード
  502. #--------------------------------------------------------------------------
  503. include Fixed_PropertyNumber
  504. #--------------------------------------------------------------------------
  505. # ● リフレッシュ
  506. #--------------------------------------------------------------------------
  507. def refresh
  508. # アイテムウィンドウの可視状態設定
  509. @item_window1.visible = (@right_window.index == 0)
  510. @item_window2.visible = (@right_window.index == 1)
  511. @item_window3.visible = (@right_window.index == 2)
  512. @item_window4.visible = (@right_window.index == 3)
  513. @item_window5.visible = (@right_window.index == 4)
  514. # 現在装備中のアイテムを取得
  515. item1 = @right_window.item
  516. # 現在のアイテムウィンドウを @item_window に設定
  517. case @right_window.index
  518. when 0
  519. @item_window = @item_window1
  520. when 1
  521. @item_window = @item_window2
  522. when 2
  523. @item_window = @item_window3
  524. when 3
  525. @item_window = @item_window4
  526. when 4
  527. @item_window = @item_window5
  528. end
  529. # ライトウィンドウがアクティブの場合
  530. if @right_window.active
  531. # 装備変更後のパラメータを消去
  532. @left_window.set_new_parameters(nil, nil, nil)
  533. end
  534. # アイテムウィンドウがアクティブの場合
  535. if @item_window.active
  536. # 現在選択中のアイテムを取得
  537. item2 = @item_window.item
  538. # 部屋No.の取得
  539. room_no = @item_window.item_room_no
  540. # 装備は変更しない
  541. # 装備変更後のパラメータを取得
  542. if item2.is_a?(RPG::Weapon)
  543. # 現在の仕様では、アクター自体には物理攻撃力保持が有り得ないと考える。
  544. # この仕様が変更された場合は、ここの改造のこと。
  545. if item2 == nil
  546. new_atk = 0
  547. else
  548. level = $game_party.weapons_table[item2.id, room_no, PROPERTY_LEVEL]
  549. new_atk = item2.atk * (100 + item2.atk%10 * level) / 100
  550. end
  551. end
  552. new_pdef = @actor.pdef - (item1 == nil ? 0 : item1.pdef) + (item2 == nil ? 0 : item2.pdef)
  553. new_mdef = @actor.mdef - (item1 == nil ? 0 : item1.mdef) + (item2 == nil ? 0 : item2.mdef)
  554. # レフトウィンドウに描画
  555. @left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
  556. end
  557. end
  558. #--------------------------------------------------------------------------
  559. # ● フレーム更新 (アイテムウィンドウがアクティブの場合)
  560. #--------------------------------------------------------------------------
  561. def update_item
  562. # B ボタンが押された場合
  563. if Input.trigger?(Input::B)
  564. # キャンセル SE を演奏
  565. $game_system.se_play($data_system.cancel_se)
  566. # ライトウィンドウをアクティブ化
  567. @right_window.active = true
  568. @item_window.active = false
  569. @item_window.index = -1
  570. return
  571. end
  572. # C ボタンが押された場合
  573. if Input.trigger?(Input::C)
  574. # 装備 SE を演奏
  575. $game_system.se_play($data_system.equip_se)
  576. # アイテムウィンドウで現在選択されているデータを取得
  577. item = @item_window.item
  578. item_room_no = @item_window.item_room_no
  579. # 装備を変更------
  580. # ---部屋No.を先に教える
  581. @actor.equip_room_no(item_room_no != nil ? item_room_no : 0)
  582. # ---実際に装備を変更
  583. @actor.equip(@right_window.index, item == nil ? 0 : item.id)
  584. # ---------------
  585. # ライトウィンドウをアクティブ化
  586. @right_window.active = true
  587. @item_window.active = false
  588. @item_window.index = -1
  589. # ライトウィンドウ、アイテムウィンドウの内容を再作成
  590. @right_window.refresh
  591. @item_window.refresh
  592. return
  593. end
  594. end
  595. end
  596. #==============================================================================
  597. # ■ Scene_Shop
  598. #==============================================================================
  599. class Scene_Shop
  600. #--------------------------------------------------------------------------
  601. # ● メイン処理
  602. #--------------------------------------------------------------------------
  603. alias xrxs24_main main
  604. def main
  605. # 売却確認ウィンドウの作成
  606. @sell_check_window = Window_ShopSellCheck.new
  607. @sell_check_window.active = false
  608. @sell_check_window.visible = false
  609. # 呼び戻す
  610. xrxs24_main
  611. # ウィンドウを解放
  612. @sell_check_window.dispose
  613. end
  614. #--------------------------------------------------------------------------
  615. # ● フレーム更新
  616. #--------------------------------------------------------------------------
  617. alias xrxs24_update update
  618. def update
  619. # ウィンドウを更新
  620. @sell_check_window.update
  621. # 売却確認ウィンドウがアクティブの場合: update_sell_check を呼ぶ
  622. if @sell_check_window.active
  623. update_sell_check
  624. return
  625. end
  626. # 呼び戻す
  627. xrxs24_update
  628. end
  629. #--------------------------------------------------------------------------
  630. # ● フレーム更新 (売却ウィンドウがアクティブの場合)
  631. #--------------------------------------------------------------------------
  632. alias xrxs24_update_sell update_sell
  633. def update_sell
  634. # C ボタンが押された場合
  635. if Input.trigger?(Input::C) and @sell_window.item.is_a?(RPG::Weapon)
  636. # アイテムを取得
  637. @item = @sell_window.item
  638. # 部屋No.の取得
  639. sell_room_no = @sell_window.room_no
  640. # ステータスウィンドウのアイテムを設定
  641. @status_window.item = @item
  642. # アイテムが無効の場合、または価格が 0 (売却不可) の場合
  643. if @item == nil or @item.price == 0
  644. # ブザー SE を演奏
  645. $game_system.se_play($data_system.buzzer_se)
  646. return
  647. end
  648. # 決定 SE を演奏
  649. $game_system.se_play($data_system.decision_se)
  650. # ウィンドウの状態を売却確認モードへ
  651. @sell_window.active = false
  652. @sell_window.visible = false
  653. @sell_check_window.set(@item.id, sell_room_no)#,@item, max, @item.price / 2)
  654. @sell_check_window.active = true
  655. @sell_check_window.visible = true
  656. @status_window.visible = true
  657. return
  658. end
  659. xrxs24_update_sell
  660. end
  661. #--------------------------------------------------------------------------
  662. # ● フレーム更新 (売却確認ウィンドウがアクティブの場合)
  663. #--------------------------------------------------------------------------
  664. def update_sell_check
  665. # B ボタンが押された場合 / "やめる"で C ボタンが押された場合
  666. if Input.trigger?(Input::B) or
  667. (Input.trigger?(Input::C) and @sell_check_window.cursor_pos == 1)
  668. # キャンセル SE を演奏
  669. $game_system.se_play($data_system.cancel_se)
  670. # 売却確認ウィンドウを非アクティブ?不可視に設定
  671. @sell_check_window.active = false
  672. @sell_check_window.visible = false
  673. # ウィンドウの状態を売却モードへ
  674. @sell_window.active = true
  675. @sell_window.visible = true
  676. @status_window.visible = false
  677. return
  678. end
  679. # "売却"で C ボタンが押された場合
  680. if Input.trigger?(Input::C) and @sell_check_window.cursor_pos == 0
  681. # ショップ SE を演奏
  682. $game_system.se_play($data_system.shop_se)
  683. # 売却確認ウィンドウを非アクティブ?不可視に設定
  684. @sell_check_window.active = false
  685. @sell_check_window.visible = false
  686. # 売却処理
  687. $game_party.gain_gold(@sell_check_window.total_price)
  688. # room_noのアイテムを消す
  689. item_id = @sell_check_window.item_id
  690. room_no = @sell_check_window.room_no
  691. $game_party.lose_weapon(item_id, room_no)
  692. # 各ウィンドウをリフレッシュ
  693. @gold_window.refresh
  694. @sell_window.refresh
  695. @status_window.refresh
  696. # ウィンドウの状態を売却モードへ
  697. @sell_window.active = true
  698. @sell_window.visible = true
  699. @status_window.visible = false
  700. return
  701. end
  702. end
  703. end
  704. #==============================================================================
  705. # ■ Scene_Battle
  706. #==============================================================================
  707. class Scene_Battle
  708. #--------------------------------------------------------------------------
  709. # ◇ インクルード
  710. #--------------------------------------------------------------------------
  711. include Fixed_PropertyNumber
  712. #--------------------------------------------------------------------------
  713. # ● アフターバトルフェーズ開始
  714. #--------------------------------------------------------------------------
  715. alias xrxs24_start_phase5 start_phase5
  716. def start_phase5
  717. # EXPを初期化
  718. exp = 0
  719. # ループ
  720. for enemy in $game_troop.enemies
  721. # エネミーが隠れ状態でない場合
  722. unless enemy.hidden
  723. # 獲得 EXP、ゴールドを追加
  724. exp += enemy.exp
  725. end
  726. end
  727. # EXP 獲得
  728. for i in 0...$game_party.actors.size
  729. actor = $game_party.actors[i]
  730. #if actor.cant_get_exp? == false
  731. # アクターの武器に経験値獲得
  732. now_exp = actor.weapon_property[PROPERTY_EXP_SECOND] * 32768
  733. now_exp += actor.weapon_property[PROPERTY_EXP]
  734. now_exp += exp
  735. actor.weapon_property[PROPERTY_EXP] += now_exp%32768
  736. actor.weapon_property[PROPERTY_EXP_SECOND] +=(now_exp/32768).floor
  737. #end
  738. end
  739. xrxs24_start_phase5
  740. end
  741. end
  742. #==============================================================================
  743. # ■ Window_ShopSellCheck
  744. #------------------------------------------------------------------------------
  745. #  ショップ画面で、売却するアイテムを表示し、売却を選択するウィンドウです。
  746. #==============================================================================
  747. class Window_ShopSellCheck < Window_Base
  748. #--------------------------------------------------------------------------
  749. # ◇ インクルード
  750. #--------------------------------------------------------------------------
  751. include Fixed_PropertyNumber
  752. #--------------------------------------------------------------------------
  753. # ● 公開インスタンス変数
  754. #--------------------------------------------------------------------------
  755. attr_reader :total_price
  756. attr_reader :cursor_pos
  757. attr_reader :item_id
  758. attr_reader :room_no
  759. #--------------------------------------------------------------------------
  760. # ● オブジェクト初期化
  761. #--------------------------------------------------------------------------
  762. def initialize
  763. super(0, 128, 368, 352)
  764. self.contents = Bitmap.new(width - 32, height - 32)
  765. end
  766. #--------------------------------------------------------------------------
  767. # ● アイテムID、部屋No.
  768. #--------------------------------------------------------------------------
  769. def set(item_id, room_no)
  770. @item_id = item_id
  771. @room_no = room_no
  772. @cursor_pos = 0
  773. refresh
  774. end
  775. #--------------------------------------------------------------------------
  776. # ● リフレッシュ
  777. #--------------------------------------------------------------------------
  778. def refresh
  779. self.contents.clear
  780. # アイテム名描写
  781. draw_item_name($data_weapons[@item_id], 4, 32)
  782. # 武器レベルの取得と描写
  783. level = $game_party.weapons_table[@item_id, @room_no, PROPERTY_LEVEL]
  784. self.contents.font.color = system_color
  785. self.contents.draw_text(244, 32, 90, 32, "Lv. ")
  786. self.contents.font.color = normal_color
  787. self.contents.draw_text(244, 32, 90, 32, level.to_s, 2)
  788. # カーソル位置の更新
  789. self.cursor_rect.set(240, 224, 96, 32)
  790. # 選択肢の描写
  791. self.contents.draw_text(244, 224, 96, 32, "出售")
  792. self.contents.draw_text(244, 256, 96, 32, "取消")
  793. # 売却金額の計算
  794. @total_price = $data_weapons[@item_id].price * (10 + 1*level) / 20
  795. # 合計価格と通貨単位を描画
  796. domination = $data_system.words.gold
  797. cx = contents.text_size(domination).width
  798. self.contents.font.color = normal_color
  799. self.contents.draw_text(4, 160, 328-cx-2, 32, @total_price.to_s, 2)
  800. self.contents.font.color = system_color
  801. self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
  802. end
  803. #--------------------------------------------------------------------------
  804. # ● フレーム更新
  805. #--------------------------------------------------------------------------
  806. def update
  807. super
  808. if self.active
  809. # カーソル上下
  810. if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  811. $game_system.se_play($data_system.cursor_se)
  812. if @cursor_pos == 0
  813. @cursor_pos = 1
  814. else
  815. @cursor_pos = 0
  816. end
  817. # カーソル位置の更新
  818. self.cursor_rect.set(240, 224 + 32 * @cursor_pos, 96, 32)
  819. end
  820. end
  821. end
  822. end
  823. #==============================================================================
  824. # ■ Window_PartyWeapon
  825. #------------------------------------------------------------------------------
  826. #  鍛冶屋画面で、パーティ全員の現在装備している武器を表示するウィンドウです。
  827. #==============================================================================

  828. class Window_PartyWeapon < Window_Selectable
  829. #--------------------------------------------------------------------------
  830. # ◇ インクルード
  831. #--------------------------------------------------------------------------
  832. include Fixed_PropertyNumber
  833. #--------------------------------------------------------------------------
  834. # ● オブジェクト初期化
  835. #--------------------------------------------------------------------------
  836. def initialize
  837. super(0, 64, 368, 224)
  838. self.contents = Bitmap.new(width - 32, height - 32)
  839. refresh
  840. self.index = -1
  841. end
  842. #--------------------------------------------------------------------------
  843. # ● アイテムの取得
  844. #--------------------------------------------------------------------------
  845. def item
  846. return @data[self.index]
  847. end
  848. #--------------------------------------------------------------------------
  849. # ● リフレッシュ
  850. #--------------------------------------------------------------------------
  851. def refresh
  852. self.contents.clear
  853. @data = []
  854. self.contents.font.color = system_color
  855. self.contents.draw_text(4, 0, 192, 32, "全部武器")
  856. self.contents.draw_text(4, 160, 192, 32, "所有物品")
  857. for i in 0...$game_party.actors.size
  858. actor = $game_party.actors[i]
  859. next if actor == nil
  860. @data.push($data_weapons[actor.weapon_id])
  861. # キャラ顔
  862. draw_actor_facesquare($game_party.actors[i], 4, 32 + 32 * i+4)
  863. # 武器名
  864. self.contents.font.color = normal_color
  865. draw_item_name(@data[i], 36, 32 + 32 * i)
  866. level = $game_party.actors[i].weapon_property[PROPERTY_LEVEL]
  867. # レベル
  868. self.contents.draw_text(296, 32 + 32 * i, 24, 32, level.to_s, 2)
  869. self.contents.font.color = system_color
  870. self.contents.draw_text(260, 32 + 32 * i, 32, 32, "Lv.")
  871. end
  872. @item_max = @data.size
  873. end
  874. #--------------------------------------------------------------------------
  875. # ● グラフィック→顔&枠の描画
  876. # actor : アクター
  877. # x : 描画先 X 座標
  878. # y : 描画先 Y 座標
  879. #--------------------------------------------------------------------------
  880. def draw_actor_facesquare(actor, x, y, width = 24, height = 24)
  881. bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
  882. src_rect = Rect.new((bitmap.width/4 - width)/2, 0, width, height)
  883. self.contents.blt(x, y, bitmap, src_rect)
  884. self.contents.draw_polygon([[x,y],[x+width,y],[x+width,y+height],[x,y+height]], Color.new(255,255,255,128))
  885. end
  886. #--------------------------------------------------------------------------
  887. # ● ヘルプテキスト更新
  888. #--------------------------------------------------------------------------
  889. def update_help
  890. @help_window.set_text(self.item == nil ? "" : self.item.description)
  891. end
  892. #--------------------------------------------------------------------------
  893. # ● カーソルの矩形更新
  894. #--------------------------------------------------------------------------
  895. def update_cursor_rect
  896. if @index == -1
  897. self.cursor_rect.set(0, 0, 0,0)
  898. else
  899. self.cursor_rect.set(0, 32 + @index * 32, self.width - 32, 32)
  900. end
  901. end
  902. end
  903. #==============================================================================
  904. # ■ Window_WeaponInfo
  905. #------------------------------------------------------------------------------
  906. #  鍛冶屋画面で、武器のパラメータなどを表示するウィンドウです。
  907. #==============================================================================

  908. class Window_WeaponInfo < Window_Selectable
  909. #--------------------------------------------------------------------------
  910. # ◇ インクルード
  911. #--------------------------------------------------------------------------
  912. include Fixed_PropertyNumber
  913. #--------------------------------------------------------------------------
  914. # ● 公開インスタンス変数
  915. #--------------------------------------------------------------------------
  916. attr_reader :level # 表示中の武器のレベル
  917. attr_reader :property_elements # 属性
  918. #--------------------------------------------------------------------------
  919. # ● オブジェクト初期化
  920. # actor : アクター
  921. #--------------------------------------------------------------------------
  922. def initialize
  923. super(368, 64, 272, 416)
  924. self.contents = Bitmap.new(width - 32, height - 32)
  925. # 消去する
  926. set(nil)
  927. @item_max = 5
  928. end
  929. #--------------------------------------------------------------------------
  930. # ● レベルを上げられる状況にあるか
  931. #--------------------------------------------------------------------------
  932. def levelupable?
  933. return @levelupable
  934. end
  935. #--------------------------------------------------------------------------
  936. # ● 値をセットする
  937. #--------------------------------------------------------------------------
  938. def set(item, room_no = 0)
  939. # 初期化
  940. @levelupable = false
  941. case item
  942. when nil
  943. # nilの場合全てを消去
  944. self.contents.clear
  945. return
  946. when Game_Actor
  947. # アクターを指定した場合は装備中の武器の情報 使用例:set(actor)
  948. @actor = item
  949. @item = $data_weapons[@actor.weapon_id]
  950. else
  951. # アイテムを指定した場合
  952. @actor = nil
  953. @item = item
  954. @room_no = room_no
  955. end
  956. refresh
  957. end
  958. #--------------------------------------------------------------------------
  959. # ● リフレッシュ
  960. #--------------------------------------------------------------------------
  961. def refresh
  962. # 初期化
  963. @levelupable = false
  964. self.contents.clear
  965. # 武器名
  966. draw_item_name(@item, 4, 32)
  967. # 武器の場合、Lv: の描写
  968. if @item.is_a?(RPG::Weapon)
  969. # 武器のレベルと経験値の取得
  970. if @actor != nil
  971. @level = @actor.weapon_property[PROPERTY_LEVEL]
  972. exp_p = @actor.weapon_property[PROPERTY_EXP_SECOND]
  973. exp_p *= 32768
  974. exp_p += @actor.weapon_property[PROPERTY_EXP]
  975. else
  976. @level = $game_party.weapons_table[@item.id, @room_no, PROPERTY_LEVEL]
  977. exp_p = $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP_SECOND]
  978. exp_p *= 32768
  979. exp_p += $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP]
  980. end
  981. # 武器レベル
  982. self.contents.font.color = system_color
  983. self.contents.draw_text(140, 64, 32, 32, "Lv.")
  984. self.contents.font.color = normal_color
  985. self.contents.draw_text(216, 64, 24, 32, @level.to_s, 2)
  986. # 武器経験値
  987. self.contents.font.size = 8
  988. self.contents.font.color = system_color
  989. self.contents.draw_text(156, 88, 32, 16, "EXP.")
  990. # EXPメーター
  991. self.contents.draw_line(171, 96, 273, 96, Color.new(0,0,0,255), 3)
  992. now_level_exp = next_exp = ((@level) ** 3)
  993. next_level_exp = ((@level + 1) ** 3) # 次のレベルの所要EXPへの割合
  994. percentile = [[100 * (exp_p - now_level_exp) / (next_level_exp - now_level_exp), 0].max, 100].min
  995. if percentile < 100
  996. line_color = Color.new(255, 255, 0, 255)
  997. else
  998. line_color = Color.new( 0, 255, 0, 255)
  999. @levelupable = true
  1000. end
  1001. self.contents.draw_line(172, 96, 172 + percentile, 96, line_color, 1)
  1002. self.contents.font.size = 22
  1003. # 攻撃力
  1004. self.contents.font.color = system_color
  1005. self.contents.draw_text( 96, 128, 96, 32, $data_system.words.atk)
  1006. atk_p = @item.atk * (100 + @item.atk%10 * level)/100
  1007. self.contents.font.color = normal_color
  1008. self.contents.draw_text(192, 128, 48, 32, atk_p.to_s, 2)
  1009. # 武器属性
  1010. i_no = 0
  1011. for i in [PROPERTY_ELEMENT_GRANT_1st,
  1012. PROPERTY_ELEMENT_GRANT_2nd,
  1013. PROPERTY_ELEMENT_GRANT_3rd,
  1014. PROPERTY_ELEMENT_GRANT_4th]
  1015. if @actor != nil
  1016. element_id = @actor.weapon_property[i]
  1017. else
  1018. element_id = $game_party.weapons_table[@item.id, @room_no, i]
  1019. end
  1020. if element_id != 0 and element_id != nil
  1021. self.contents.font.color = normal_color
  1022. self.contents.draw_text(112, 160 + 32*i_no, 128, 32, $data_system.elements[element_id])
  1023. else
  1024. self.contents.font.color = disabled_color
  1025. self.contents.draw_text(112, 160 + 32*i_no, 128, 32, "---")
  1026. end
  1027. i_no += 1
  1028. end
  1029. end
  1030. # 可視状態にする
  1031. self.visible = true
  1032. end
  1033. #--------------------------------------------------------------------------
  1034. # ● カーソルの矩形更新
  1035. #--------------------------------------------------------------------------
  1036. def update_cursor_rect
  1037. if @index == -1
  1038. self.cursor_rect.set(0, 0, 0,0)
  1039. elsif @index == 0
  1040. self.cursor_rect.set(0, 64, self.width - 32, 32)
  1041. else
  1042. self.cursor_rect.set(0, 128 + @index * 32, self.width - 32, 32)
  1043. end
  1044. end
  1045. #--------------------------------------------------------------------------
  1046. # ● ヘルプテキスト更新
  1047. #--------------------------------------------------------------------------
  1048. def update_help
  1049. case self.index
  1050. when 0
  1051. @help_window.set_text("进行武器强化。")
  1052. else
  1053. @help_window.set_text("为武器附加属性。")
  1054. end
  1055. end
  1056. end
  1057. #==============================================================================
  1058. # ■ Window_CenterAsk
  1059. #------------------------------------------------------------------------------
  1060. #  画面中央で二択の質問を問い掛けるウィンドウです。
  1061. #==============================================================================

  1062. class Window_CenterAsk < Window_Selectable
  1063. #--------------------------------------------------------------------------
  1064. # ● オブジェクト初期化
  1065. #--------------------------------------------------------------------------
  1066. def initialize
  1067. super(320, 192, 160, 96)
  1068. self.contents = Bitmap.new(width - 32, height - 32)
  1069. self.visible = false
  1070. @first_choice = ""
  1071. @second_choice = ""
  1072. @helptext = ["", ""]
  1073. @disabled = []
  1074. self.z = 9999
  1075. @item_max = 2
  1076. self.index = 0
  1077. end
  1078. #--------------------------------------------------------------------------
  1079. # ● 選択肢の設定 first_choice,second_choice == String
  1080. #--------------------------------------------------------------------------
  1081. def set(first_choice, second_choice, help1 = "", help2 = "")
  1082. @disabled[0] = false
  1083. @disabled[1] = false
  1084. @first_choice = first_choice
  1085. @second_choice = second_choice
  1086. @helptext[0] = help1
  1087. @helptext[1] = help2
  1088. width1 = self.contents.text_size(@first_choice).width
  1089. width2 = self.contents.text_size(@second_choice).width
  1090. self.width = (width1 > width2 ? width1 : width2) + 40
  1091. self.x = 320 - self.width / 2
  1092. self.contents = Bitmap.new(width - 32, height - 32)
  1093. refresh
  1094. end
  1095. #--------------------------------------------------------------------------
  1096. # ● 選択肢無効化
  1097. #--------------------------------------------------------------------------
  1098. def disable(n)
  1099. @disabled[n] = true
  1100. refresh
  1101. end
  1102. #--------------------------------------------------------------------------
  1103. # ● 選択肢が無効化されているか?
  1104. #--------------------------------------------------------------------------
  1105. def disabled?(n)
  1106. return @disabled[n]
  1107. end
  1108. #--------------------------------------------------------------------------
  1109. # ● リフレッシュ
  1110. #--------------------------------------------------------------------------
  1111. def refresh
  1112. self.contents.clear
  1113. if @disabled[0]
  1114. self.contents.font.color = disabled_color
  1115. else
  1116. self.contents.font.color = normal_color
  1117. end
  1118. self.contents.draw_text(4, 0, self.width-8, 32, @first_choice)
  1119. if @disabled[1]
  1120. self.contents.font.color = disabled_color
  1121. else
  1122. self.contents.font.color = normal_color
  1123. end
  1124. self.contents.draw_text(4, 32, self.width-8, 32, @second_choice)
  1125. # カーソル位置も戻す
  1126. self.index = 0
  1127. end
  1128. #--------------------------------------------------------------------------
  1129. # ● ヘルプテキスト更新
  1130. #--------------------------------------------------------------------------
  1131. def update_help
  1132. @help_window.set_text(@helptext[self.index])
  1133. end
  1134. end
  1135. #==============================================================================
  1136. # ■ Window_SmithyItems
  1137. #------------------------------------------------------------------------------
  1138. #  鍛冶屋画面で、付与のための所持アイテムの一覧を表示するウィンドウです。
  1139. #==============================================================================

  1140. class Window_SmithyItems < Window_ShopSell
  1141. #--------------------------------------------------------------------------
  1142. # ● 公開インスタンス変数
  1143. #--------------------------------------------------------------------------
  1144. attr_reader :item_max
  1145. #--------------------------------------------------------------------------
  1146. # ● オブジェクト初期化
  1147. #--------------------------------------------------------------------------
  1148. def initialize
  1149. super
  1150. self.x = 32
  1151. self.y = 256
  1152. self.width = 336
  1153. self.height = 224
  1154. self.opacity = 0
  1155. self.back_opacity = 0
  1156. @column_max = 1
  1157. self.index = -1
  1158. refresh
  1159. end
  1160. #--------------------------------------------------------------------------
  1161. # ● 現在 @item の第一属性の取得
  1162. #--------------------------------------------------------------------------
  1163. def item_first_element
  1164. item = self.item
  1165. room_no = self.item_room_no
  1166. return 0 if item.nil? or item.id == 0
  1167. if item.is_a?(RPG::Armor)
  1168. element_set = item.guard_element_set
  1169. else
  1170. element_set = item.element_set
  1171. end
  1172. if element_set.size == 0 and item.is_a?(RPG::Weapon)
  1173. for i in [PROPERTY_ELEMENT_GRANT_1st,
  1174. PROPERTY_ELEMENT_GRANT_2nd,
  1175. PROPERTY_ELEMENT_GRANT_3rd,
  1176. PROPERTY_ELEMENT_GRANT_4th]
  1177. element_id = $game_party.weapons_table[item.id, room_no, i]
  1178. if element_id > 0
  1179. element_set = [element_id]
  1180. break
  1181. end
  1182. end
  1183. end
  1184. if element_set.size == 0
  1185. return 0
  1186. else
  1187. return element_set[0]
  1188. end
  1189. end
  1190. #--------------------------------------------------------------------------
  1191. # ● 所有数が 1 以上のアイテムを @data に返す &属性所有のみ
  1192. #--------------------------------------------------------------------------
  1193. def set_own_item_data
  1194. for i in 1...$data_items.size
  1195. if $game_party.item_number(i) > 0
  1196. if $data_items[i].element_set.size > 0
  1197. @data.push($data_items[i])
  1198. end
  1199. end
  1200. end
  1201. end
  1202. #--------------------------------------------------------------------------
  1203. # ● 所有数が 1 以上の武器を @data に返す &属性所有のみ
  1204. #--------------------------------------------------------------------------
  1205. def set_own_weapon_data
  1206. for i in 1...$data_weapons.size
  1207. if $game_party.weapon_number(i) > 0
  1208. # 武器の個別描写を行う
  1209. for j in 0...$game_party.weapons_table.ysize
  1210. if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
  1211. for k in [PROPERTY_ELEMENT_GRANT_1st,
  1212. PROPERTY_ELEMENT_GRANT_2nd,
  1213. PROPERTY_ELEMENT_GRANT_3rd,
  1214. PROPERTY_ELEMENT_GRANT_4th]
  1215. if ($data_weapons[i].element_set.size > 0) or
  1216. ($game_party.weapons_table[i, j, k] > 0)
  1217. # 武器をプッシュ
  1218. @data.push($data_weapons[i])
  1219. # 部屋No.を合わせる
  1220. @data_id[@data.size-1] = j
  1221. break
  1222. end
  1223. end
  1224. end
  1225. end
  1226. # ---
  1227. end
  1228. end
  1229. end
  1230. #--------------------------------------------------------------------------
  1231. # ● 所有数が 1 以上の防具を @data に返す &属性所有のみ
  1232. #--------------------------------------------------------------------------
  1233. def set_own_armor_data
  1234. for i in 1...$data_armors.size
  1235. if $game_party.armor_number(i) > 0
  1236. if $data_armors[i].guard_element_set.size > 0
  1237. @data.push($data_armors[i])
  1238. end
  1239. end
  1240. end
  1241. end
  1242. #--------------------------------------------------------------------------
  1243. # ● ヘルプテキスト更新
  1244. #--------------------------------------------------------------------------
  1245. def update_help
  1246. element_id = self.item_first_element
  1247. case element_id
  1248. when 0
  1249. @help_window.set_text("没有可以附加的属性")
  1250. else
  1251. @help_window.set_text("附加属性: " + $data_system.elements[element_id])
  1252. end
  1253. end
  1254. end
  1255. #==============================================================================
  1256. # ■ Scene_Map
  1257. #==============================================================================
  1258. class Scene_Map
  1259. #--------------------------------------------------------------------------
  1260. # ● フレーム更新
  1261. #--------------------------------------------------------------------------
  1262. alias xrxs24_update update
  1263. def update
  1264. xrxs24_update
  1265. # プレイヤーの移動中ではない場合
  1266. unless $game_player.moving?
  1267. # 鍛冶屋画面の呼び出しを実行
  1268. if $game_temp.smithy_calling
  1269. call_smithy
  1270. end
  1271. end
  1272. end
  1273. #--------------------------------------------------------------------------
  1274. # ● 鍛冶屋の呼び出し
  1275. #--------------------------------------------------------------------------
  1276. def call_smithy
  1277. # 鍛冶屋呼び出しフラグをクリア
  1278. $game_temp.smithy_calling = false
  1279. # プレイヤーの姿勢を矯正
  1280. $game_player.straighten
  1281. # 鍛冶屋画面に切り替え
  1282. $scene = Scene_Smithy.new
  1283. end
  1284. end
  1285. #==============================================================================
  1286. # ■ Game_Temp
  1287. #==============================================================================
  1288. class Game_Temp
  1289. #--------------------------------------------------------------------------
  1290. # ● 公開インスタンス変数
  1291. #--------------------------------------------------------------------------
  1292. attr_accessor :smithy_calling # 鍛冶屋 呼び出しフラグ
  1293. #--------------------------------------------------------------------------
  1294. # ● オブジェクト初期化
  1295. #--------------------------------------------------------------------------
  1296. alias xrxs24_initialize initialize
  1297. def initialize
  1298. xrxs24_initialize
  1299. @smithy_calling = false
  1300. end
  1301. end
  1302. #==============================================================================
  1303. # ■ Interpreter
  1304. #==============================================================================
  1305. class Interpreter
  1306. #--------------------------------------------------------------------------
  1307. # ◆ インクルード
  1308. #--------------------------------------------------------------------------
  1309. include Fixed_PropertyNumber
  1310. #--------------------------------------------------------------------------
  1311. # ◇ 鍛冶屋の処理
  1312. #--------------------------------------------------------------------------
  1313. def command_smithy
  1314. # バトル中断フラグをセット
  1315. $game_temp.battle_abort = true
  1316. # 鍛冶屋呼び出しフラグをセット
  1317. $game_temp.smithy_calling = true
  1318. # 商品リストに新しい項目を設定
  1319. $game_temp.shop_goods = [@parameters]
  1320. end
  1321. #--------------------------------------------------------------------------
  1322. # ◇ 武器経験値の取得
  1323. #--------------------------------------------------------------------------
  1324. def command_weapon_gain_exp(actor_id, exp)
  1325. now_exp = $game_party.actors[actor_id].weapon_property[PROPERTY_EXP_SECOND] * 32768
  1326. now_exp+= $game_party.actors[actor_id].weapon_property[PROPERTY_EXP]
  1327. now_exp+= exp
  1328. $game_party.actors[actor_id].weapon_property[PROPERTY_EXP] += now_exp%32768
  1329. $game_party.actors[actor_id].weapon_property[PROPERTY_EXP_SECOND] +=(now_exp/32768).floor
  1330. end
  1331. end
  1332. #==============================================================================
  1333. # ■ Scene_Smithy
  1334. #------------------------------------------------------------------------------
  1335. #  鍛冶屋画面の処理を行うクラスです。
  1336. #==============================================================================

  1337. class Scene_Smithy
  1338. #--------------------------------------------------------------------------
  1339. # ◇ インクルード
  1340. #--------------------------------------------------------------------------
  1341. include Fixed_PropertyNumber
  1342. #--------------------------------------------------------------------------
  1343. # ● メイン処理
  1344. #--------------------------------------------------------------------------
  1345. def main
  1346. # ヘルプウィンドウを作成
  1347. @help_window = Window_Help.new
  1348. # パーティ武器ウィンドウを作成
  1349. @partyweapon_window = Window_PartyWeapon.new
  1350. @partyweapon_window.help_window = @help_window
  1351. @partyweapon_window.height += 192
  1352. @partyweapon_window.active = true
  1353. @partyweapon_window.index = 0
  1354. # アイテムウィンドウを作成
  1355. @sellect_window = Window_SmithyItems.new
  1356. @sellect_window.help_window = @help_window
  1357. @sellect_window.z = @partyweapon_window.z + 1
  1358. @sellect_window.active = false
  1359. # 武器インフォウィンドウを作成
  1360. @weaponinfo_window = Window_WeaponInfo.new
  1361. @weaponinfo_window.set(nil)
  1362. @weaponinfo_window.active = false
  1363. @weaponinfo_window.index = -1
  1364. @weaponinfo_window.help_window = @help_window
  1365. # ゴールドウィンドウを作成
  1366. @gold_window = Window_Gold.new
  1367. @gold_window.x = 480
  1368. @gold_window.y = 416
  1369. @gold_window.z = @weaponinfo_window.z + 1
  1370. # 訪ねウィンドウを作成
  1371. @ask_window = Window_CenterAsk.new
  1372. @ask_window.active = false
  1373. @ask_window.help_window = @help_window
  1374. # トランジション実行
  1375. Graphics.transition
  1376. # メインループ
  1377. loop do
  1378. # ゲーム画面を更新
  1379. Graphics.update
  1380. # 入力情報を更新
  1381. Input.update
  1382. # フレーム更新
  1383. update
  1384. # 画面が切り替わったらループを中断
  1385. if $scene != self
  1386. break
  1387. end
  1388. end
  1389. # トランジション準備
  1390. Graphics.freeze
  1391. # ウィンドウを解放
  1392. @help_window.dispose
  1393. @gold_window.dispose
  1394. @partyweapon_window.dispose
  1395. @sellect_window.dispose
  1396. @weaponinfo_window.dispose
  1397. @ask_window.dispose
  1398. end
  1399. #--------------------------------------------------------------------------
  1400. # ● フレーム更新
  1401. #--------------------------------------------------------------------------
  1402. def update
  1403. # ウィンドウを更新
  1404. @help_window.update
  1405. @gold_window.update
  1406. @partyweapon_window.update
  1407. @sellect_window.update
  1408. @weaponinfo_window.update
  1409. @ask_window.update
  1410. # パーティ武器ウィンドウがアクティブの場合: update_partyweapon を呼ぶ
  1411. if @partyweapon_window.active
  1412. update_partyweapon
  1413. return
  1414. end
  1415. # 武器インフォウィンドウがアクティブの場合: update_weaponinfo を呼ぶ
  1416. if @weaponinfo_window.active
  1417. update_weaponinfo
  1418. return
  1419. end
  1420. # アイテム選択ウィンドウがアクティブの場合: update_sellect を呼ぶ
  1421. if @sellect_window.active
  1422. update_sellect
  1423. return
  1424. end
  1425. # 中央選択ウィンドウがアクティブの場合: update_ask を呼ぶ
  1426. if @ask_window.active
  1427. update_ask
  1428. return
  1429. end
  1430. end
  1431. #--------------------------------------------------------------------------
  1432. # ● フレーム更新 (パーティ武器ウィンドウがアクティブの場合)
  1433. #--------------------------------------------------------------------------
  1434. def update_partyweapon
  1435. # ステータスウィンドウのアイテムを設定
  1436. @weaponinfo_window.set($game_party.actors[@partyweapon_window.index])
  1437. # B ボタンが押された場合
  1438. if Input.trigger?(Input::B)
  1439. # 決定 SE を演奏
  1440. $game_system.se_play($data_system.decision_se)
  1441. # マップ画面に切り替え
  1442. $scene = Scene_Map.new
  1443. return
  1444. end
  1445. # C ボタンが押された場合
  1446. if Input.trigger?(Input::C)
  1447. # 決定 SE を演奏
  1448. $game_system.se_play($data_system.decision_se)
  1449. @weaponinfo_window.active = true
  1450. @weaponinfo_window.index = 0
  1451. @partyweapon_window.active = false
  1452. end
  1453. end
  1454. #--------------------------------------------------------------------------
  1455. # ● フレーム更新 (武器インフォウィンドウがアクティブの場合)
  1456. #--------------------------------------------------------------------------
  1457. def update_weaponinfo
  1458. # B ボタンが押された場合
  1459. if Input.trigger?(Input::B)
  1460. # キャンセル SE を演奏
  1461. $game_system.se_play($data_system.cancel_se)
  1462. @partyweapon_window.active = true
  1463. @weaponinfo_window.active = false
  1464. @weaponinfo_window.index = -1
  1465. end
  1466. # C ボタンが押された場合
  1467. if Input.trigger?(Input::C)
  1468. case @weaponinfo_window.index
  1469. when 0
  1470. # 決定 SE を演奏
  1471. $game_system.se_play($data_system.decision_se)
  1472. # レベルによる強化金額の設定はこちら(もう一箇所も)
  1473. price = (@weaponinfo_window.level ** 2).floor * 200
  1474. first_choice = "进行强化!! " + price.to_s + " " + $data_system.words.gold
  1475. if @weaponinfo_window.levelupable?
  1476. help1 = "支付强化武器所需的金钱。"
  1477. else
  1478. help1 = "武器经验值不足。"
  1479. end
  1480. if $game_party.gold < price
  1481. help1 = "现金不足。"
  1482. end
  1483. help2 = "中止强化。"
  1484. @ask_window.set(first_choice,"取消", help1, help2)
  1485. unless @weaponinfo_window.levelupable?
  1486. @ask_window.disable(0)
  1487. end
  1488. if $game_party.gold < price
  1489. @ask_window.disable(0)
  1490. end
  1491. @ask_window.active = true
  1492. @ask_window.visible = true
  1493. @weaponinfo_window.active = false
  1494. return
  1495. else
  1496. # 属性付与へ。まずはアイテムウィンドウへ移行
  1497. if @sellect_window.item_max <= 0
  1498. # ブザー SE を演奏
  1499. $game_system.se_play($data_system.buzzer_se)
  1500. return
  1501. end
  1502. # 決定 SE を演奏
  1503. $game_system.se_play($data_system.decision_se)
  1504. # ウィンドウの状態を売却モードへ
  1505. @weaponinfo_window.active = false
  1506. @sellect_window.index = 0
  1507. @sellect_window.active = true
  1508. @sellect_window.refresh
  1509. end
  1510. end
  1511. end
  1512. #--------------------------------------------------------------------------
  1513. # ● フレーム更新 (アイテム選択ウィンドウがアクティヴの場合)
  1514. #--------------------------------------------------------------------------
  1515. def update_sellect
  1516. # ステータスウィンドウのアイテムを設定
  1517. #@weaponinfo_window.set(@sellect_window.item, @sellect_window.item_room_no)
  1518. # B ボタンが押された場合
  1519. if Input.trigger?(Input::B)
  1520. # キャンセル SE を演奏
  1521. $game_system.se_play($data_system.cancel_se)
  1522. # ウィンドウの状態を初期モードへ
  1523. @weaponinfo_window.active = true
  1524. @sellect_window.active = false
  1525. @sellect_window.index = -1
  1526. return
  1527. end
  1528. # C ボタンが押された場合
  1529. if Input.trigger?(Input::C)
  1530. # 属性が一つ以上あるか、
  1531. if @sellect_window.item_first_element == 0
  1532. # ブザー SE を演奏
  1533. $game_system.se_play($data_system.buzzer_se)
  1534. return
  1535. end
  1536. # 決定 SE を演奏
  1537. $game_system.se_play($data_system.decision_se)
  1538. # 属性を付与確認
  1539. price = 50000
  1540. first_choice = "附加属性!! " + price.to_s + " " + $data_system.words.gold
  1541. help1 = $data_system.elements[@sellect_window.item_first_element] + " 武器。"
  1542. help2 = "中止附加。"
  1543. if @sellect_window.item.price == 0
  1544. first_choice = "不能附加属性。"
  1545. help1 = "该人物不能使用。"
  1546. elsif $game_party.gold < price
  1547. help1 = "现金不足。"
  1548. end
  1549. @ask_window.set(first_choice,"取消", help1, help2)
  1550. if @sellect_window.item.price == 0
  1551. @ask_window.disable(0)
  1552. elsif $game_party.gold < price
  1553. @ask_window.disable(0)
  1554. end
  1555. @ask_window.active = true
  1556. @ask_window.visible = true
  1557. @sellect_window.active = false
  1558. return
  1559. end
  1560. end
  1561. #--------------------------------------------------------------------------
  1562. # ● フレーム更新 (中央二択ウィンドウがアクティブの場合)
  1563. #--------------------------------------------------------------------------
  1564. def update_ask
  1565. # B ボタン or "やめる"で C ボタン が押された場合
  1566. if Input.trigger?(Input::B) or
  1567. (Input.trigger?(Input::C) and @ask_window.index == 1)
  1568. # キャンセル SE を演奏
  1569. $game_system.se_play($data_system.cancel_se)
  1570. # ウィンドウ
  1571. @ask_window.active = false
  1572. @ask_window.visible = false
  1573. if @sellect_window.index >= 0
  1574. @sellect_window.active = true
  1575. else
  1576. @weaponinfo_window.active = true
  1577. end
  1578. return
  1579. end
  1580. # "実行"で C ボタンが押された場合
  1581. if Input.trigger?(Input::C) and @ask_window.index == 0
  1582. if @ask_window.disabled?(0)
  1583. # ブザー SE を演奏
  1584. $game_system.se_play($data_system.buzzer_se)
  1585. return
  1586. end
  1587. # 決定 SE を演奏
  1588. $game_system.se_play($data_system.decision_se)
  1589. if @sellect_window.index >= 0
  1590. # 属性付与
  1591. price = 50000
  1592. # 属性付与 SE を演奏
  1593. Audio.se_stop
  1594. Audio.se_play("Audio/SE/027-Door04.ogg")
  1595. # 付与を実行
  1596. # IDNo.の取得
  1597. case @weaponinfo_window.index
  1598. when 1
  1599. set_id = PROPERTY_ELEMENT_GRANT_1st
  1600. when 2
  1601. set_id = PROPERTY_ELEMENT_GRANT_2nd
  1602. when 3
  1603. set_id = PROPERTY_ELEMENT_GRANT_3rd
  1604. when 4
  1605. set_id = PROPERTY_ELEMENT_GRANT_4th
  1606. end
  1607. # 代入
  1608. $game_party.actors[@partyweapon_window.index].weapon_property[set_id] =
  1609. @sellect_window.item_first_element
  1610. # 付与に使用したアイテムをなくす
  1611. if @sellect_window.item.is_a?(RPG::Weapon)
  1612. $game_party.lose_weapon(@sellect_window.item.id, @sellect_window.item_room_no)
  1613. else
  1614. $game_party.lose_item(@sellect_window.item.id, 1)
  1615. end
  1616. else
  1617. # 武器強化
  1618. # 武器レベルアップ ME を演奏
  1619. Audio.me_stop
  1620. Audio.me_play("Audio/ME/011-Item02.mid")
  1621. # 強化を実行
  1622. $game_party.actors[@partyweapon_window.index].weapon_property[PROPERTY_LEVEL] += 1
  1623. # レベルによる強化金額の設定はこちら(もう一箇所も)
  1624. price = (@weaponinfo_window.level ** 1.5).floor * 50
  1625. end
  1626. # 金額を支払う
  1627. $game_party.lose_gold(price)
  1628. # ウィンドウを戻す
  1629. @weaponinfo_window.active = true
  1630. @sellect_window.active = false
  1631. @sellect_window.index = -1
  1632. # ウィンドウを消す
  1633. @ask_window.active = false
  1634. @ask_window.visible = false
  1635. # 再描写する
  1636. @gold_window.refresh
  1637. @sellect_window.refresh
  1638. @partyweapon_window.refresh
  1639. @weaponinfo_window.refresh
  1640. end
  1641. end
  1642. end

  1643. #==============================================================================
  1644. # ◇ 外部ライブラリ
  1645. #==============================================================================
  1646. class Bitmap
  1647. #--------------------------------------------------------------------------
  1648. # ● ライン描画 by 桜雅 在土
  1649. #--------------------------------------------------------------------------
  1650. def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
  1651. # 描写距離の計算。大きめに直角時の長さ。
  1652. distance = (start_x - end_x).abs + (start_y - end_y).abs
  1653. # 描写開始
  1654. if end_color == start_color
  1655. for i in 1..distance
  1656. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  1657. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  1658. if width == 1
  1659. self.set_pixel(x, y, start_color)
  1660. else
  1661. self.fill_rect(x - (width-1)/2.floor, y - (width-1)/2.floor, width, width, start_color)
  1662. end
  1663. end
  1664. else
  1665. for i in 1..distance
  1666. x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
  1667. y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
  1668. r = start_color.red * (distance-i)/distance + end_color.red * i/distance
  1669. g = start_color.green * (distance-i)/distance + end_color.green * i/distance
  1670. b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
  1671. a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
  1672. if width == 1
  1673. self.set_pixel(x, y, Color.new(r, g, b, a))
  1674. else
  1675. self.fill_rect(x - (width-1)/2.floor, y - (width-1)/2.floor, width, width, Color.new(r, g, b, a))
  1676. end
  1677. end
  1678. end
  1679. end
  1680. #--------------------------------------------------------------------------
  1681. # ● 多角形の描画(塗りつぶしなし) by 和希
  1682. # peaks : 頂点座標の配列 [[x1,y1],[x2,y2],[x3,y3], ... ]
  1683. # color : 線の色
  1684. # width : 線の幅
  1685. #--------------------------------------------------------------------------
  1686. def draw_polygon(peaks, color, width = 1)
  1687. # 辺(=頂点)の個数分だけ辺を描く
  1688. for i in 0 ... (peaks.size - 1)
  1689. # 頂点同士を線で結ぶ
  1690. draw_line( peaks[i][0], peaks[i][1], peaks[i+1][0], peaks[i+1][1], color, width )
  1691. end
  1692. # 最後の頂点と最初の頂点を結ぶ
  1693. draw_line( peaks[peaks.size - 1][0], peaks[peaks.size - 1][1], peaks[0][0], peaks[0][1], color, width )
  1694. end
  1695. end

  1696. #==============================================================================
  1697. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  1698. #==============================================================================
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
27 小时
注册时间
2009-7-23
帖子
21
4
 楼主| 发表于 2009-9-21 16:51:11 | 只看该作者
本帖最后由 凌辰 于 2009-9-21 17:54 编辑

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================

# ▼▲▼ XRXS24. システム?ウェポンプロパティXC. ver..01a ▼▲▼
# by 桜雅 在土
#
# ※ XRXS.RGSS改良カスタマイズ が必要です。

# --- 仕様 ---
#
# ◇装備武器のプロパティの変更
#  ├◇例:actor(==Game_Actor)の装備武器の付与属性#1を 21 に設定
# └◇スクリプト:actor.weapon_property[PROPERTY_ELEMENT_GRANT_1st] = 21
#
#==============================================================================
# □ 定数
#==============================================================================
module Fixed_PropertyNumber
# 現在のプロパティの総数
PROPERTY_NUMBER = 8
# 「属性」数(ダメージ倍率ようとして用いられる属性の数)
ELEMENTS_NUMBER = 16
# 以下のナンバーは 同値は指定不可能かつ0から個数-1までの整数
PROPERTY_ROOM_FILLED = 0 # プロパティ:部屋が空いているかどうか
PROPERTY_LEVEL = 1 # プロパティ:武器レベル
PROPERTY_EXP = 2 # プロパティ:エクストラポイント
PROPERTY_EXP_SECOND = 3 # プロ靴匹#亥ē攻去楗荪ぅ螗?ケタ目(32768進法)
PROPERTY_ELEMENT_GRANT_1st = 4 # プロパティ:付与属性#1
PROPERTY_ELEMENT_GRANT_2nd = 5 # プロパティ:付与属性#2
PROPERTY_ELEMENT_GRANT_3rd = 6 # プロパティ:付与属性#3
PROPERTY_ELEMENT_GRANT_4th = 7 # プロパティ:付与属性#4
end
#==============================================================================
$xrxs24_weapon_property_system_work = true
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :weapons_table # ウェポンテーブル
#--------------------------------------------------------------------------
# ウェポンテーブル解説
#--------------------------------------------------------------------------
=begin
@weapons_table[weapon_id, room_no, property]

weapon_id は、武器のIDです。
room_no は、部屋のNo.です。武器がここに格納されます。
property は、プロパティです。

property
0 部屋の空き情報。0が空き、1が埋まり。
1 EXP数値。数値が入ります。

例えば、@weapons_table[1, 0, 0] が1の場合、
ID.1の武器がNo.0の部屋に存在する。ということ。
=end
def weapons_table
@weapons_table
end
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias xrxs24_initialize initialize
def initialize
xrxs24_initialize
# ウェポンテーブルを作成
@weapons_table = Table.new(0,0,PROPERTY_NUMBER)
end
#--------------------------------------------------------------------------
# ● 武器の入手 # ←武器の増加
# weapon_id : 武器 ID
# set_level : 初期武器レベル # ←元個数n
#--------------------------------------------------------------------------
def gain_weapon(weapon_id, set_level)
# weapon_id が 0 の場合
if weapon_id == 0
return 0
end
# ハッシュの個数データを更新
if weapon_id > 0
@weapons[weapon_id] = [[weapon_number(weapon_id) + 1, 0].max, 99].min
end
# ウェポンテーブルに新規アイテムを追加
# xsize(テーブルの武器IDの最大値)が足りない場合リサイズ
if @weapons_table.xsize <= weapon_id
@weapons_table.resize(weapon_id+1, @weapons_table.ysize, @weapons_table.zsize)
end
# ysize(テーブルの個数の最大値)が足りない場合リサイズ
num = weapon_number(weapon_id)
if @weapons_table.ysize <= num
@weapons_table.resize(@weapons_table.xsize, num+1, @weapons_table.zsize)
end
# ウェポンテーブルから空き部屋No.を検索
for i in 0...@weapons_table.ysize
# 空き部屋である 0 を返した場合
if @weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] != 1
# 部屋を埋める
@weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] = 1
# 初期武器レベルを設定
@weapons_table[weapon_id, i, PROPERTY_LEVEL] = set_level
# EXPをレベルの三乗に設定
expp = set_level ** 3
# EXPの数値を設定
@weapons_table[weapon_id, i, PROPERTY_EXP] = expp%32768
@weapons_table[weapon_id, i, PROPERTY_EXP_SECOND] = (expp/32768).floor
# 終了、部屋番号を返す
return i
end
end
# 空き部屋が無かった場合
p "[空的房间!!" # 本来起こりえないはず # 起きたらプログラムミス
end
#--------------------------------------------------------------------------
# ● 武器を捨てる # ←武器の減少
# weapon_id : 武器 ID
# room_no : ルームNo. # ※元?個数n
#--------------------------------------------------------------------------
def lose_weapon(weapon_id, room_no)
# weapon_id が 0 の場合
if weapon_id == 0
return 0
end
# ハッシュの個数データを更新
if weapon_id > 0
@weapons[weapon_id] = [[weapon_number(weapon_id) - 1, 0].max, 99].min
end
# ウェポンテーブルに設定
# 部屋を空き部屋にする
@weapons_table[weapon_id, room_no, PROPERTY_ROOM_FILLED] = 0
# 他全プロパティを 0 化
for i in 0...PROPERTY_NUMBER
@weapons_table[weapon_id, room_no, i] = 0
end
end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :weapon_property # 装備中の武器のウェポンプロパティ
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias xrxs24_setup setup
def setup(actor_id)
xrxs24_setup(actor_id)
# 初期化
@weapon_property = Table.new(PROPERTY_NUMBER)
@weapon_property[PROPERTY_LEVEL] = 1 # 初期武器のレベルは1
@equip_room_no = 0
end
#--------------------------------------------------------------------------
# ● 通常攻撃の属性取得
#--------------------------------------------------------------------------
alias xrxs24_element_set element_set
def element_set
attack_element_set = xrxs24_element_set
for i in 1..ELEMENTS_NUMBER
for j in [PROPERTY_ELEMENT_GRANT_1st,
PROPERTY_ELEMENT_GRANT_2nd,
PROPERTY_ELEMENT_GRANT_3rd,
PROPERTY_ELEMENT_GRANT_4th]
if @weapon_property[j] == i and !attack_element_set.include?(i)
attack_element_set.push(i)
end
end
end
return attack_element_set
end
#--------------------------------------------------------------------------
# ● 装備変更予定の部屋番号
# room_no : 装備する元のアイテムの部屋No.
#--------------------------------------------------------------------------
def equip_room_no(rn)
@equip_room_no = rn
end
#--------------------------------------------------------------------------
# ● 装備の変更
# equip_type : 装備タイプ
# id : 武器 or 防具 ID (0 なら装備解除)
#--------------------------------------------------------------------------
alias xrxs24_equip equip
def equip(equip_type, id)
case equip_type
when 0 # 武器
if id == 0 or $game_party.weapon_number(id) > 0
# 現在装備武器
if @weapon_id != 0
# 現在装備を増やす
used_room_no = $game_party.gain_weapon(@weapon_id, 1)
# アクター現在武器のプロパティ
for i in 0...PROPERTY_NUMBER
# プロパティを部屋へコピー
$game_party.weapons_table[@weapon_id, used_room_no, i] = @weapon_property
# コピー後に削除
@weapon_property = 0
end
# 部屋の空き状況は無条件で 1 にする
$game_party.weapons_table[@weapon_id, used_room_no, PROPERTY_ROOM_FILLED] = 1
#p "武器ID. " + @weapon_id.to_s + ", 部屋No." + used_room_no.to_s
end
# 新規装着
if id != 0
# 装備対象武器のプロパティ
for i in 0...PROPERTY_NUMBER
# プロパティをアクターへコピー
@weapon_property = $game_party.weapons_table[id, @equip_room_no, i]
# コピー後に削除
$game_party.weapons_table[id, @equip_room_no, i] = 0
end
# 装備対象のアイテムを消す
$game_party.lose_weapon(id, @equip_room_no)
# 外す場合
else
# アクタープロパティを初期化
for i in 0...PROPERTY_NUMBER
@weapon_property = 0
end
end
# 装備変更
@weapon_id = id
end
return
end
xrxs24_equip(equip_type, id)
end
#--------------------------------------------------------------------------
# ● 基本攻撃力の取得
#--------------------------------------------------------------------------
def base_atk
weapon = $data_weapons[@weapon_id]
if weapon == nil
return 0
else
return weapon.atk * (100 + weapon.atk%10 * @weapon_property[PROPERTY_LEVEL]) /100
end
end
end
#==============================================================================
# ■ Window_Item
#==============================================================================
class Window_Item < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
alias xrxs24_refresh refresh
def refresh
@data_id = []
xrxs24_refresh
end
#--------------------------------------------------------------------------
# ● アイテムの部屋番号の取得
#--------------------------------------------------------------------------
def item_room_no
return @data_id[self.index]
end
#--------------------------------------------------------------------------
# ● 所有数が 1 以上の武器を @data に返す
#--------------------------------------------------------------------------
def set_own_weapon_data
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
# 武器の個別描写を行う
for j in 0...$game_party.weapons_table.ysize
if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
# 武器をプッシュ
@data.push($data_weapons)
# 部屋No.を合わせる
@data_id[@data.size-1] = j
end
end
# ---
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
alias xrxs24_draw_item draw_item
def draw_item(index)
item = @data[index]
case item
when RPG::Weapon
room_no = @data_id[index].nil? ? 0 : @data_id[index]
number = $game_party.weapon_number(item.id)
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)
if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
opacity = 255
else
opacity = 128
end
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
if item.is_a?(RPG::Item) and $game_party.item_can_use?(item.id)
self.contents.font.color = system_color
self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
self.contents.draw_text(x +224, y, 56, 32, "Lv. ")
end
level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
self.contents.draw_text(x + 232, y, 48, 32, level, 2)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
else
xrxs24_draw_item(index)
end
end
end
#==============================================================================
# ■ Window_EquipRight
#==============================================================================
class Window_EquipRight < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
alias xrxs24_refresh refresh
def refresh
xrxs24_refresh
self.contents.font.color = system_color
self.contents.draw_text(276, 0, 56, 32, "Lv. ")
self.contents.font.color = normal_color
level = @actor.weapon_property[PROPERTY_LEVEL].to_s
self.contents.draw_text(284, 0, 48, 32, level, 2)
end
end
#==============================================================================
# ■ Window_EquipItem
#==============================================================================
class Window_EquipItem < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● アイテムの部屋番号の取得
#--------------------------------------------------------------------------
def item_room_no
return @data_id[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
alias xrxs24_refresh refresh
def refresh
@data_id = []
xrxs24_refresh
end
#--------------------------------------------------------------------------
# ● 指定クラスが装備可能、かつ所有している武器を @data に返す
#--------------------------------------------------------------------------
def set_equipable_weapon_data(class_id)
weapon_set = $data_classes[class_id].weapon_set
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
# 武器の個別描写を行う
for j in 0...$game_party.weapons_table.ysize
if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
# 武器をプッシュ
@data.push($data_weapons)
# 部屋No.を合わせる
@data_id[@data.size-1] = j
end
end
# ---
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
alias xrxs24_draw_item draw_item
def draw_item(index)
item = @data[index]
x = 4 + index % @column_max * (288 + 32)
y = index / @column_max * 32
case item
when RPG::Weapon
room_no = @data_id[index].nil? ? 0 : @data_id[index]
number = $game_party.weapon_number(item.id)
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = system_color
self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
self.contents.font.color = normal_color
level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
self.contents.draw_text(x + 232, y, 48, 32, level, 2)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
else
xrxs24_draw_item(index)
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
if self.item.is_a?(RPG::Weapon)
element_name = $data_system.elements[$game_party.weapons_table[self.item.id, self.item_room_no, PROPERTY_ELEMENT_GRANT_1st]]
else
element_name = ""
end
@help_window.set_text(self.item == nil ? "" : self.item.description + element_name)
end
end
#==============================================================================
# ■ Window_ShopSell
#==============================================================================
class Window_ShopSell < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :column_max
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
alias xrxs24_refresh refresh
def refresh
@data_id = []
xrxs24_refresh
end
#--------------------------------------------------------------------------
# ● 部屋No.の取得
#--------------------------------------------------------------------------
def item_room_no
return @data_id[self.index]
end
#--------------------------------------------------------------------------
# ● 所有数が 1 以上の武器を @data に返す
#--------------------------------------------------------------------------
def set_own_weapon_data
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
# 武器の個別描写を行う
for j in 0...$game_party.weapons_table.ysize
if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
# 武器をプッシュ
@data.push($data_weapons)
# 部屋No.を合わせる
@data_id[@data.size-1] = j
end
end
# ---
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
alias xrxs24_draw_item draw_item
def draw_item(index)
item = @data[index]
x = 4 + index % @column_max * (288 + 32)
y = index / @column_max * 32
case item
when RPG::Weapon
room_no = @data_id[index].nil? ? 0 : @data_id[index]
number = $game_party.weapon_number(item.id)
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = system_color
self.contents.draw_text(x + 224, y, 56, 32, "Lv. ")
self.contents.font.color = normal_color
level = $game_party.weapons_table[item.id, room_no, PROPERTY_LEVEL].to_s
self.contents.draw_text(x + 232, y, 48, 32, level, 2)
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
else
xrxs24_draw_item(index)
end
end
end
#==============================================================================
# ■ Scene_Equip
#==============================================================================
class Scene_Equip
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
# アイテムウィンドウの可視状態設定
@item_window1.visible = (@right_window.index == 0)
@item_window2.visible = (@right_window.index == 1)
@item_window3.visible = (@right_window.index == 2)
@item_window4.visible = (@right_window.index == 3)
@item_window5.visible = (@right_window.index == 4)
# 現在装備中のアイテムを取得
item1 = @right_window.item
# 現在のアイテムウィンドウを @item_window に設定
case @right_window.index
when 0
@item_window = @item_window1
when 1
@item_window = @item_window2
when 2
@item_window = @item_window3
when 3
@item_window = @item_window4
when 4
@item_window = @item_window5
end
# ライトウィンドウがアクティブの場合
if @right_window.active
# 装備変更後のパラメータを消去
@left_window.set_new_parameters(nil, nil, nil)
end
# アイテムウィンドウがアクティブの場合
if @item_window.active
# 現在選択中のアイテムを取得
item2 = @item_window.item
# 部屋No.の取得
room_no = @item_window.item_room_no
# 装備は変更しない
# 装備変更後のパラメータを取得
if item2.is_a?(RPG::Weapon)
# 現在の仕様では、アクター自体には物理攻撃力保持が有り得ないと考える。
# この仕様が変更された場合は、ここの改造のこと。
if item2 == nil
new_atk = 0
else
level = $game_party.weapons_table[item2.id, room_no, PROPERTY_LEVEL]
new_atk = item2.atk * (100 + item2.atk%10 * level) / 100
end
end
new_pdef = @actor.pdef - (item1 == nil ? 0 : item1.pdef) + (item2 == nil ? 0 : item2.pdef)
new_mdef = @actor.mdef - (item1 == nil ? 0 : item1.mdef) + (item2 == nil ? 0 : item2.mdef)
# レフトウィンドウに描画
@left_window.set_new_parameters(new_atk, new_pdef, new_mdef)
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アイテムウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_item
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ライトウィンドウをアクティブ化
@right_window.active = true
@item_window.active = false
@item_window.index = -1
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 装備 SE を演奏
$game_system.se_play($data_system.equip_se)
# アイテムウィンドウで現在選択されているデータを取得
item = @item_window.item
item_room_no = @item_window.item_room_no
# 装備を変更------
# ---部屋No.を先に教える
@actor.equip_room_no(item_room_no != nil ? item_room_no : 0)
# ---実際に装備を変更
@actor.equip(@right_window.index, item == nil ? 0 : item.id)
# ---------------
# ライトウィンドウをアクティブ化
@right_window.active = true
@item_window.active = false
@item_window.index = -1
# ライトウィンドウ、アイテムウィンドウの内容を再作成
@right_window.refresh
@item_window.refresh
return
end
end
end
#==============================================================================
# ■ Scene_Shop
#==============================================================================
class Scene_Shop
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias xrxs24_main main
def main
# 売却確認ウィンドウの作成
@sell_check_window = Window_ShopSellCheck.new
@sell_check_window.active = false
@sell_check_window.visible = false
# 呼び戻す
xrxs24_main
# ウィンドウを解放
@sell_check_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias xrxs24_update update
def update
# ウィンドウを更新
@sell_check_window.update
# 売却確認ウィンドウがアクティブの場合: update_sell_check を呼ぶ
if @sell_check_window.active
update_sell_check
return
end
# 呼び戻す
xrxs24_update
end
#--------------------------------------------------------------------------
# ● フレーム更新 (売却ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
alias xrxs24_update_sell update_sell
def update_sell
# C ボタンが押された場合
if Input.trigger?(Input::C) and @sell_window.item.is_a?(RPG::Weapon)
# アイテムを取得
@item = @sell_window.item
# 部屋No.の取得
sell_room_no = @sell_window.room_no
# ステータスウィンドウのアイテムを設定
@status_window.item = @item
# アイテムが無効の場合、または価格が 0 (売却不可) の場合
if @item == nil or @item.price == 0
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ウィンドウの状態を売却確認モードへ
@sell_window.active = false
@sell_window.visible = false
@sell_check_window.set(@item.id, sell_room_no)#,@item, max, @item.price / 2)
@sell_check_window.active = true
@sell_check_window.visible = true
@status_window.visible = true
return
end
xrxs24_update_sell
end
#--------------------------------------------------------------------------
# ● フレーム更新 (売却確認ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_sell_check
# B ボタンが押された場合 / "やめる"で C ボタンが押された場合
if Input.trigger?(Input::B) or
(Input.trigger?(Input::C) and @sell_check_window.cursor_pos == 1)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# 売却確認ウィンドウを非アクティブ?不可視に設定
@sell_check_window.active = false
@sell_check_window.visible = false
# ウィンドウの状態を売却モードへ
@sell_window.active = true
@sell_window.visible = true
@status_window.visible = false
return
end
# "売却"で C ボタンが押された場合
if Input.trigger?(Input::C) and @sell_check_window.cursor_pos == 0
# ショップ SE を演奏
$game_system.se_play($data_system.shop_se)
# 売却確認ウィンドウを非アクティブ?不可視に設定
@sell_check_window.active = false
@sell_check_window.visible = false
# 売却処理
$game_party.gain_gold(@sell_check_window.total_price)
# room_noのアイテムを消す
item_id = @sell_check_window.item_id
room_no = @sell_check_window.room_no
$game_party.lose_weapon(item_id, room_no)
# 各ウィンドウをリフレッシュ
@gold_window.refresh
@sell_window.refresh
@status_window.refresh
# ウィンドウの状態を売却モードへ
@sell_window.active = true
@sell_window.visible = true
@status_window.visible = false
return
end
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● アフターバトルフェーズ開始
#--------------------------------------------------------------------------
alias xrxs24_start_phase5 start_phase5
def start_phase5
# EXPを初期化
exp = 0
# ループ
for enemy in $game_troop.enemies
# エネミーが隠れ状態でない場合
unless enemy.hidden
# 獲得 EXP、ゴールドを追加
exp += enemy.exp
end
end
# EXP 獲得
for i in 0...$game_party.actors.size
actor = $game_party.actors
#if actor.cant_get_exp? == false
# アクターの武器に経験値獲得
now_exp = actor.weapon_property[PROPERTY_EXP_SECOND] * 32768
now_exp += actor.weapon_property[PROPERTY_EXP]
now_exp += exp
actor.weapon_property[PROPERTY_EXP] += now_exp%32768
actor.weapon_property[PROPERTY_EXP_SECOND] +=(now_exp/32768).floor
#end
end
xrxs24_start_phase5
end
end
#==============================================================================
# ■ Window_ShopSellCheck
#------------------------------------------------------------------------------
#  ショップ画面で、売却するアイテムを表示し、売却を選択するウィンドウです。
#==============================================================================
class Window_ShopSellCheck < Window_Base
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :total_price
attr_reader :cursor_pos
attr_reader :item_id
attr_reader :room_no
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 128, 368, 352)
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# ● アイテムID、部屋No.
#--------------------------------------------------------------------------
def set(item_id, room_no)
@item_id = item_id
@room_no = room_no
@cursor_pos = 0
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
# アイテム名描写
draw_item_name($data_weapons[@item_id], 4, 32)
# 武器レベルの取得と描写
level = $game_party.weapons_table[@item_id, @room_no, PROPERTY_LEVEL]
self.contents.font.color = system_color
self.contents.draw_text(244, 32, 90, 32, "Lv. ")
self.contents.font.color = normal_color
self.contents.draw_text(244, 32, 90, 32, level.to_s, 2)
# カーソル位置の更新
self.cursor_rect.set(240, 224, 96, 32)
# 選択肢の描写
self.contents.draw_text(244, 224, 96, 32, "出售")
self.contents.draw_text(244, 256, 96, 32, "取消")
# 売却金額の計算
@total_price = $data_weapons[@item_id].price * (10 + 1*level) / 20
# 合計価格と通貨単位を描画
domination = $data_system.words.gold
cx = contents.text_size(domination).width
self.contents.font.color = normal_color
self.contents.draw_text(4, 160, 328-cx-2, 32, @total_price.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(332-cx, 160, cx, 32, domination, 2)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if self.active
# カーソル上下
if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
$game_system.se_play($data_system.cursor_se)
if @cursor_pos == 0
@cursor_pos = 1
else
@cursor_pos = 0
end
# カーソル位置の更新
self.cursor_rect.set(240, 224 + 32 * @cursor_pos, 96, 32)
end
end
end
end
#==============================================================================
# ■ Window_PartyWeapon
#------------------------------------------------------------------------------
#  鍛冶屋画面で、パーティ全員の現在装備している武器を表示するウィンドウです。
#==============================================================================

class Window_PartyWeapon < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 64, 368, 224)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.index = -1
end
#--------------------------------------------------------------------------
# ● アイテムの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 192, 32, "全部武器")
self.contents.draw_text(4, 160, 192, 32, "所有物品")
for i in 0...$game_party.actors.size
actor = $game_party.actors
next if actor == nil
@data.push($data_weapons[actor.weapon_id])
# キャラ顔
draw_actor_facesquare($game_party.actors, 4, 32 + 32 * i+4)
# 武器名
self.contents.font.color = normal_color
draw_item_name(@data, 36, 32 + 32 * i)
level = $game_party.actors.weapon_property[PROPERTY_LEVEL]
# レベル
self.contents.draw_text(296, 32 + 32 * i, 24, 32, level.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(260, 32 + 32 * i, 32, 32, "Lv.")
end
@item_max = @data.size
end
#--------------------------------------------------------------------------
# ● グラフィック→顔&枠の描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_actor_facesquare(actor, x, y, width = 24, height = 24)
bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
src_rect = Rect.new((bitmap.width/4 - width)/2, 0, width, height)
self.contents.blt(x, y, bitmap, src_rect)
self.contents.draw_polygon([[x,y],[x+width,y],[x+width,y+height],[x,y+height]], Color.new(255,255,255,128))
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if @index == -1
self.cursor_rect.set(0, 0, 0,0)
else
self.cursor_rect.set(0, 32 + @index * 32, self.width - 32, 32)
end
end
end
#==============================================================================
# ■ Window_WeaponInfo
#------------------------------------------------------------------------------
#  鍛冶屋画面で、武器のパラメータなどを表示するウィンドウです。
#==============================================================================

class Window_WeaponInfo < Window_Selectable
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :level # 表示中の武器のレベル
attr_reader :property_elements # 属性
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize
super(368, 64, 272, 416)
self.contents = Bitmap.new(width - 32, height - 32)
# 消去する
set(nil)
@item_max = 5
end
#--------------------------------------------------------------------------
# ● レベルを上げられる状況にあるか
#--------------------------------------------------------------------------
def levelupable?
return @levelupable
end
#--------------------------------------------------------------------------
# ● 値をセットする
#--------------------------------------------------------------------------
def set(item, room_no = 0)
# 初期化
@levelupable = false
case item
when nil
# nilの場合全てを消去
self.contents.clear
return
when Game_Actor
# アクターを指定した場合は装備中の武器の情報 使用例:set(actor)
@actor = item
@item = $data_weapons[@actor.weapon_id]
else
# アイテムを指定した場合
@actor = nil
@item = item
@room_no = room_no
end
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
# 初期化
@levelupable = false
self.contents.clear
# 武器名
draw_item_name(@item, 4, 32)
# 武器の場合、Lv: の描写
if @item.is_a?(RPG::Weapon)
# 武器のレベルと経験値の取得
if @actor != nil
@level = @actor.weapon_property[PROPERTY_LEVEL]
exp_p = @actor.weapon_property[PROPERTY_EXP_SECOND]
exp_p *= 32768
exp_p += @actor.weapon_property[PROPERTY_EXP]
else
@level = $game_party.weapons_table[@item.id, @room_no, PROPERTY_LEVEL]
exp_p = $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP_SECOND]
exp_p *= 32768
exp_p += $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP]
end
# 武器レベル
self.contents.font.color = system_color
self.contents.draw_text(140, 64, 32, 32, "Lv.")
self.contents.font.color = normal_color
self.contents.draw_text(216, 64, 24, 32, @level.to_s, 2)
# 武器経験値
self.contents.font.size = 8
self.contents.font.color = system_color
self.contents.draw_text(156, 88, 32, 16, "EXP.")
# EXPメーター
self.contents.draw_line(171, 96, 273, 96, Color.new(0,0,0,255), 3)
now_level_exp = next_exp = ((@level) ** 3)
next_level_exp = ((@level + 1) ** 3) # 次のレベルの所要EXPへの割合
percentile = [[100 * (exp_p - now_level_exp) / (next_level_exp - now_level_exp), 0].max, 100].min
if percentile < 100
line_color = Color.new(255, 255, 0, 255)
else
line_color = Color.new( 0, 255, 0, 255)
@levelupable = true
end
self.contents.draw_line(172, 96, 172 + percentile, 96, line_color, 1)
self.contents.font.size = 22
# 攻撃力
self.contents.font.color = system_color
self.contents.draw_text( 96, 128, 96, 32, $data_system.words.atk)
atk_p = @item.atk * (100 + @item.atk%10 * level)/100
self.contents.font.color = normal_color
self.contents.draw_text(192, 128, 48, 32, atk_p.to_s, 2)
# 武器属性
i_no = 0
for i in [PROPERTY_ELEMENT_GRANT_1st,
PROPERTY_ELEMENT_GRANT_2nd,
PROPERTY_ELEMENT_GRANT_3rd,
PROPERTY_ELEMENT_GRANT_4th]
if @actor != nil
element_id = @actor.weapon_property
else
element_id = $game_party.weapons_table[@item.id, @room_no, i]
end
if element_id != 0 and element_id != nil
self.contents.font.color = normal_color
self.contents.draw_text(112, 160 + 32*i_no, 128, 32, $data_system.elements[element_id])
else
self.contents.font.color = disabled_color
self.contents.draw_text(112, 160 + 32*i_no, 128, 32, "---")
end
i_no += 1
end
end
# 可視状態にする
self.visible = true
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if @index == -1
self.cursor_rect.set(0, 0, 0,0)
elsif @index == 0
self.cursor_rect.set(0, 64, self.width - 32, 32)
else
self.cursor_rect.set(0, 128 + @index * 32, self.width - 32, 32)
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
case self.index
when 0
@help_window.set_text("进行武器强化。")
else
@help_window.set_text("为武器附加属性。")
end
end
end
#==============================================================================
# ■ Window_CenterAsk
#------------------------------------------------------------------------------
#  画面中央で二択の質問を問い掛けるウィンドウです。
#==============================================================================

class Window_CenterAsk < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(320, 192, 160, 96)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
@first_choice = ""
@second_choice = ""
@helptext = ["", ""]
@disabled = []
self.z = 9999
@item_max = 2
self.index = 0
end
#--------------------------------------------------------------------------
# ● 選択肢の設定 first_choice,second_choice == String
#--------------------------------------------------------------------------
def set(first_choice, second_choice, help1 = "", help2 = "")
@disabled[0] = false
@disabled[1] = false
@first_choice = first_choice
@second_choice = second_choice
@helptext[0] = help1
@helptext[1] = help2
width1 = self.contents.text_size(@first_choice).width
width2 = self.contents.text_size(@second_choice).width
self.width = (width1 > width2 ? width1 : width2) + 40
self.x = 320 - self.width / 2
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# ● 選択肢無効化
#--------------------------------------------------------------------------
def disable(n)
@disabled[n] = true
refresh
end
#--------------------------------------------------------------------------
# ● 選択肢が無効化されているか?
#--------------------------------------------------------------------------
def disabled?(n)
return @disabled[n]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @disabled[0]
self.contents.font.color = disabled_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(4, 0, self.width-8, 32, @first_choice)
if @disabled[1]
self.contents.font.color = disabled_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(4, 32, self.width-8, 32, @second_choice)
# カーソル位置も戻す
self.index = 0
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(@helptext[self.index])
end
end
#==============================================================================
# ■ Window_SmithyItems
#------------------------------------------------------------------------------
#  鍛冶屋画面で、付与のための所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_SmithyItems < Window_ShopSell
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :item_max
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
self.x = 32
self.y = 256
self.width = 336
self.height = 224
self.opacity = 0
self.back_opacity = 0
@column_max = 1
self.index = -1
refresh
end
#--------------------------------------------------------------------------
# ● 現在 @item の第一属性の取得
#--------------------------------------------------------------------------
def item_first_element
item = self.item
room_no = self.item_room_no
return 0 if item.nil? or item.id == 0
if item.is_a?(RPG::Armor)
element_set = item.guard_element_set
else
element_set = item.element_set
end
if element_set.size == 0 and item.is_a?(RPG::Weapon)
for i in [PROPERTY_ELEMENT_GRANT_1st,
PROPERTY_ELEMENT_GRANT_2nd,
PROPERTY_ELEMENT_GRANT_3rd,
PROPERTY_ELEMENT_GRANT_4th]
element_id = $game_party.weapons_table[item.id, room_no, i]
if element_id > 0
element_set = [element_id]
break
end
end
end
if element_set.size == 0
return 0
else
return element_set[0]
end
end
#--------------------------------------------------------------------------
# ● 所有数が 1 以上のアイテムを @data に返す &属性所有のみ
#--------------------------------------------------------------------------
def set_own_item_data
for i in 1...$data_items.size
if $game_party.item_number(i) > 0
if $data_items.element_set.size > 0
@data.push($data_items)
end
end
end
end
#--------------------------------------------------------------------------
# ● 所有数が 1 以上の武器を @data に返す &属性所有のみ
#--------------------------------------------------------------------------
def set_own_weapon_data
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0
# 武器の個別描写を行う
for j in 0...$game_party.weapons_table.ysize
if $game_party.weapons_table[i, j, PROPERTY_ROOM_FILLED] == 1
for k in [PROPERTY_ELEMENT_GRANT_1st,
PROPERTY_ELEMENT_GRANT_2nd,
PROPERTY_ELEMENT_GRANT_3rd,
PROPERTY_ELEMENT_GRANT_4th]
if ($data_weapons.element_set.size > 0) or
($game_party.weapons_table[i, j, k] > 0)
# 武器をプッシュ
@data.push($data_weapons)
# 部屋No.を合わせる
@data_id[@data.size-1] = j
break
end
end
end
end
# ---
end
end
end
#--------------------------------------------------------------------------
# ● 所有数が 1 以上の防具を @data に返す &属性所有のみ
#--------------------------------------------------------------------------
def set_own_armor_data
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0
if $data_armors.guard_element_set.size > 0
@data.push($data_armors)
end
end
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
element_id = self.item_first_element
case element_id
when 0
@help_window.set_text("没有可以附加的属性")
else
@help_window.set_text("附加属性: " + $data_system.elements[element_id])
end
end
end
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias xrxs24_update update
def update
xrxs24_update
# プレイヤーの移動中ではない場合
unless $game_player.moving?
# 鍛冶屋画面の呼び出しを実行
if $game_temp.smithy_calling
call_smithy
end
end
end
#--------------------------------------------------------------------------
# ● 鍛冶屋の呼び出し
#--------------------------------------------------------------------------
def call_smithy
# 鍛冶屋呼び出しフラグをクリア
$game_temp.smithy_calling = false
# プレイヤーの姿勢を矯正
$game_player.straighten
# 鍛冶屋画面に切り替え
$scene = Scene_Smithy.new
end
end
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :smithy_calling # 鍛冶屋 呼び出しフラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias xrxs24_initialize initialize
def initialize
xrxs24_initialize
@smithy_calling = false
end
end
#==============================================================================
# ■ Interpreter
#==============================================================================
class Interpreter
#--------------------------------------------------------------------------
# ◆ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ◇ 鍛冶屋の処理
#--------------------------------------------------------------------------
def command_smithy
# バトル中断フラグをセット
$game_temp.battle_abort = true
# 鍛冶屋呼び出しフラグをセット
$game_temp.smithy_calling = true
# 商品リストに新しい項目を設定
$game_temp.shop_goods = [@parameters]
end
#--------------------------------------------------------------------------
# ◇ 武器経験値の取得
#--------------------------------------------------------------------------
def command_weapon_gain_exp(actor_id, exp)
now_exp = $game_party.actors[actor_id].weapon_property[PROPERTY_EXP_SECOND] * 32768
now_exp+= $game_party.actors[actor_id].weapon_property[PROPERTY_EXP]
now_exp+= exp
$game_party.actors[actor_id].weapon_property[PROPERTY_EXP] += now_exp%32768
$game_party.actors[actor_id].weapon_property[PROPERTY_EXP_SECOND] +=(now_exp/32768).floor
end
end
#==============================================================================
# ■ Scene_Smithy
#------------------------------------------------------------------------------
#  鍛冶屋画面の処理を行うクラスです。
#==============================================================================

class Scene_Smithy
#--------------------------------------------------------------------------
# ◇ インクルード
#--------------------------------------------------------------------------
include Fixed_PropertyNumber
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# ヘルプウィンドウを作成
@help_window = Window_Help.new
# パーティ武器ウィンドウを作成
@partyweapon_window = Window_PartyWeapon.new
@partyweapon_window.help_window = @help_window
@partyweapon_window.height += 192
@partyweapon_window.active = true
@partyweapon_window.index = 0
# アイテムウィンドウを作成
@sellect_window = Window_SmithyItems.new
@sellect_window.help_window = @help_window
@sellect_window.z = @partyweapon_window.z + 1
@sellect_window.active = false
# 武器インフォウィンドウを作成
@weaponinfo_window = Window_WeaponInfo.new
@weaponinfo_window.set(nil)
@weaponinfo_window.active = false
@weaponinfo_window.index = -1
@weaponinfo_window.help_window = @help_window
# ゴールドウィンドウを作成
@gold_window = Window_Gold.new
@gold_window.x = 480
@gold_window.y = 416
@gold_window.z = @weaponinfo_window.z + 1
# 訪ねウィンドウを作成
@ask_window = Window_CenterAsk.new
@ask_window.active = false
@ask_window.help_window = @help_window
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@help_window.dispose
@gold_window.dispose
@partyweapon_window.dispose
@sellect_window.dispose
@weaponinfo_window.dispose
@ask_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@help_window.update
@gold_window.update
@partyweapon_window.update
@sellect_window.update
@weaponinfo_window.update
@ask_window.update
# パーティ武器ウィンドウがアクティブの場合: update_partyweapon を呼ぶ
if @partyweapon_window.active
update_partyweapon
return
end
# 武器インフォウィンドウがアクティブの場合: update_weaponinfo を呼ぶ
if @weaponinfo_window.active
update_weaponinfo
return
end
# アイテム選択ウィンドウがアクティブの場合: update_sellect を呼ぶ
if @sellect_window.active
update_sellect
return
end
# 中央選択ウィンドウがアクティブの場合: update_ask を呼ぶ
if @ask_window.active
update_ask
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (パーティ武器ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_partyweapon
# ステータスウィンドウのアイテムを設定
@weaponinfo_window.set($game_party.actors[@partyweapon_window.index])
# B ボタンが押された場合
if Input.trigger?(Input::B)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
@weaponinfo_window.active = true
@weaponinfo_window.index = 0
@partyweapon_window.active = false
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (武器インフォウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_weaponinfo
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
@partyweapon_window.active = true
@weaponinfo_window.active = false
@weaponinfo_window.index = -1
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
case @weaponinfo_window.index
when 0
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# レベルによる強化金額の設定はこちら(もう一箇所も)
price = (@weaponinfo_window.level ** 2).floor * 200
first_choice = "进行强化!! " + price.to_s + " " + $data_system.words.gold
if @weaponinfo_window.levelupable?
help1 = "支付强化武器所需的金钱。"
else
help1 = "武器经验值不足。"
end
if $game_party.gold < price
help1 = "现金不足。"
end
help2 = "中止强化。"
@ask_window.set(first_choice,"取消", help1, help2)
unless @weaponinfo_window.levelupable?
@ask_window.disable(0)
end
if $game_party.gold < price
@ask_window.disable(0)
end
@ask_window.active = true
@ask_window.visible = true
@weaponinfo_window.active = false
return
else
# 属性付与へ。まずはアイテムウィンドウへ移行
if @sellect_window.item_max <= 0
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ウィンドウの状態を売却モードへ
@weaponinfo_window.active = false
@sellect_window.index = 0
@sellect_window.active = true
@sellect_window.refresh
end
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アイテム選択ウィンドウがアクティヴの場合)
#--------------------------------------------------------------------------
def update_sellect
# ステータスウィンドウのアイテムを設定
#@weaponinfo_window.set(@sellect_window.item, @sellect_window.item_room_no)
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ウィンドウの状態を初期モードへ
@weaponinfo_window.active = true
@sellect_window.active = false
@sellect_window.index = -1
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 属性が一つ以上あるか、
if @sellect_window.item_first_element == 0
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 属性を付与確認
price = 50000
first_choice = "附加属性!! " + price.to_s + " " + $data_system.words.gold
help1 = $data_system.elements[@sellect_window.item_first_element] + " 武器。"
help2 = "中止附加。"
if @sellect_window.item.price == 0
first_choice = "不能附加属性。"
help1 = "该人物不能使用。"
elsif $game_party.gold < price
help1 = "现金不足。"
end
@ask_window.set(first_choice,"取消", help1, help2)
if @sellect_window.item.price == 0
@ask_window.disable(0)
elsif $game_party.gold < price
@ask_window.disable(0)
end
@ask_window.active = true
@ask_window.visible = true
@sellect_window.active = false
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (中央二択ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_ask
# B ボタン or "やめる"で C ボタン が押された場合
if Input.trigger?(Input::B) or
(Input.trigger?(Input::C) and @ask_window.index == 1)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ウィンドウ
@ask_window.active = false
@ask_window.visible = false
if @sellect_window.index >= 0
@sellect_window.active = true
else
@weaponinfo_window.active = true
end
return
end
# "実行"で C ボタンが押された場合
if Input.trigger?(Input::C) and @ask_window.index == 0
if @ask_window.disabled?(0)
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
if @sellect_window.index >= 0
# 属性付与
price = 50000
# 属性付与 SE を演奏
Audio.se_stop
Audio.se_play("Audio/SE/027-Door04.ogg")
# 付与を実行
# IDNo.の取得
case @weaponinfo_window.index
when 1
set_id = PROPERTY_ELEMENT_GRANT_1st
when 2
set_id = PROPERTY_ELEMENT_GRANT_2nd
when 3
set_id = PROPERTY_ELEMENT_GRANT_3rd
when 4
set_id = PROPERTY_ELEMENT_GRANT_4th
end
# 代入
$game_party.actors[@partyweapon_window.index].weapon_property[set_id] =
@sellect_window.item_first_element
# 付与に使用したアイテムをなくす
if @sellect_window.item.is_a?(RPG::Weapon)
$game_party.lose_weapon(@sellect_window.item.id, @sellect_window.item_room_no)
else
$game_party.lose_item(@sellect_window.item.id, 1)
end
else
# 武器強化
# 武器レベルアップ ME を演奏
Audio.me_stop
Audio.me_play("Audio/ME/011-Item02.mid")
# 強化を実行
$game_party.actors[@partyweapon_window.index].weapon_property[PROPERTY_LEVEL] += 1
# レベルによる強化金額の設定はこちら(もう一箇所も)
price = (@weaponinfo_window.level ** 1.5).floor * 50
end
# 金額を支払う
$game_party.lose_gold(price)
# ウィンドウを戻す
@weaponinfo_window.active = true
@sellect_window.active = false
@sellect_window.index = -1
# ウィンドウを消す
@ask_window.active = false
@ask_window.visible = false
# 再描写する
@gold_window.refresh
@sellect_window.refresh
@partyweapon_window.refresh
@weaponinfo_window.refresh
end
end
end

#==============================================================================
# ◇ 外部ライブラリ
#==============================================================================
class Bitmap
#--------------------------------------------------------------------------
# ● ライン描画 by 桜雅 在土
#--------------------------------------------------------------------------
def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color)
# 描写距離の計算。大きめに直角時の長さ。
distance = (start_x - end_x).abs + (start_y - end_y).abs
# 描写開始
if end_color == start_color
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
if width == 1
self.set_pixel(x, y, start_color)
else
self.fill_rect(x - (width-1)/2.floor, y - (width-1)/2.floor, width, width, start_color)
end
end
else
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
r = start_color.red * (distance-i)/distance + end_color.red * i/distance
g = start_color.green * (distance-i)/distance + end_color.green * i/distance
b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance
a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance
if width == 1
self.set_pixel(x, y, Color.new(r, g, b, a))
else
self.fill_rect(x - (width-1)/2.floor, y - (width-1)/2.floor, width, width, Color.new(r, g, b, a))
end
end
end
end
#--------------------------------------------------------------------------
# ● 多角形の描画(塗りつぶしなし) by 和希
# peaks : 頂点座標の配列 [[x1,y1],[x2,y2],[x3,y3], ... ]
# color : 線の色
# width : 線の幅
#--------------------------------------------------------------------------
def draw_polygon(peaks, color, width = 1)
# 辺(=頂点)の個数分だけ辺を描く
for i in 0 ... (peaks.size - 1)
# 頂点同士を線で結ぶ
draw_line( peaks[0], peaks[1], peaks[i+1][0], peaks[i+1][1], color, width )
end
# 最後の頂点と最初の頂点を結ぶ
draw_line( peaks[peaks.size - 1][0], peaks[peaks.size - 1][1], peaks[0][0], peaks[0][1], color, width )
end
end

#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
粘贴脚本请在更多设定处勾选禁用Smilies。
凌辰留
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
27 小时
注册时间
2009-7-23
帖子
21
5
 楼主| 发表于 2009-9-21 16:53:43 | 只看该作者
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================  
  4. # Sample master list for crafting script
  5. # written by Deke
  6. #============================================================================================
  7. # 简介:
  8. # 这是一个很不错的合成物品系统,可以通过游戏的过程,不断学习可以合成的
  9. # 物品方法。
  10. #
  11. # 使用方法:
  12. # 1、召唤界面:使用脚本$scene = Scene_Craft.new
  13. #
  14. # 2、学习合成:$game_party.learn_recipe(合成项目)
  15. #
  16. # 3、合成定义:
  17. # 这个合成脚本可以定义两种合成物品。一种是预先定义好了的,就像下面这样,
  18. # 直接写在这里就可以,另一种是在学习之前现场定义。
  19. #
  20. # 4、举例
  21. #  4.1、学会recipe_list[1]定义的合成:$game_party.learn_recipe($game_temp.recipe_list[1])
  22. #       注意,一行如果输入不下,在(的后面或[的后面按回车换行,否则可能出错
  23. #
  24. #  4.2、在游戏中临时定义一种合成,让玩家学会。使用事件中的脚本如下,   
  25. #  脚本:
  26. #    材料 = [$game_variables[1],$game_variables[2]]  #——材料编号是变量1、2的编号
  27. #    材料种类 = [0,0]                                #——材料是物品
  28. #    材料数量 = [$game_variables[3],$game_variables[4]]  #——需要材料数量是变量3、4的编号
  29. #    成品 = $game_variables[5]                       #——获得结果编号是5
  30. #    成品种类 = 1                                    #——成品是防具类
  31. #    $game_party.learn_recipe(Game_Recipe.new(材料,材料种类, 材料数量,成品,成品种类))
  32. #===========================================================================================
  33. class Game_Temp
  34.   attr_reader :recipe_list  
  35.   alias crafting_temp_initialize initialize
  36.   def initialize
  37.     crafting_temp_initialize
  38.     @recipe_list=[]
  39.     get_recipe_list
  40.   end  
  41.   def get_recipe_list   
  42.     ##########################################################################
  43.     # 0 号合成物品设定 (物品小药水×2 + 中药水 = 大药水)
  44.     ##########################################################################
  45.     材料 = [1, 2]             # 需要材料的数据库编号
  46.     材料种类 = [0, 0]         # 需要材料的种类,0是普通物品,1是防具,2是武器
  47.     材料数量 = [2, 1]         # 需要材料的数量
  48.     成品 = 3                  # 获得物品编号
  49.     成品种类 = 0              # 获得物品种类,0是普通物品,1是防具,2是武器
  50.     @recipe_list[1] = Game_Recipe.new(材料,材料种类, 材料数量,成品,成品种类)
  51.    
  52.     ##########################################################################
  53.     # 1 号合成物品设定 (武器铜剑、铁剑、钢剑各1 = 密切斯特剑)
  54.     ##########################################################################
  55.     材料 = [1, 2, 3]          # 需要材料的数据库编号
  56.     材料种类 = [2, 2, 2]      # 需要材料的种类,0是普通物品,1是防具,2是武器
  57.     材料数量 = [3, 2, 1]      # 需要材料的数量
  58.     成品 = 4                  # 获得物品编号
  59.     成品种类 = 2              # 获得物品种类,0是普通物品,1是防具,2是武器
  60.     @recipe_list[2] = Game_Recipe.new(材料,材料种类, 材料数量,成品,成品种类)
  61.    
  62.     ##########################################################################
  63.     # 2 号合成物品设定 (物品力量之石×2 + 防具钢盾×1 = 密切斯特盾)
  64.     ##########################################################################
  65.     材料 = [13, 3]            # 需要材料的数据库编号
  66.     材料种类 = [0, 1]         # 需要材料的种类,0是普通物品,1是防具,2是武器
  67.     材料数量 = [2, 1]         # 需要材料的数量
  68.     成品 = 4                  # 获得物品编号
  69.     成品种类 = 1              # 获得物品种类,0是普通物品,1是防具,2是武器
  70.     @recipe_list[3] = Game_Recipe.new(材料,材料种类, 材料数量,成品,成品种类)
  71.    
  72.   end # of get_recipe_list method
  73. end # of updates to Game_Temp Class
  74. #================================
  75. # CRAFTING PROGRAM
  76. #----------------------------------------------------------------
  77. #-written by Deke
  78. #-yes_no window code created by Phsylomortis
  79. #----------------------------------------------------------------
  80. #================================
  81. #updates to Game_Party class
  82. class Game_Party
  83.   
  84.   attr_accessor       :recipes
  85.   
  86.   alias crafting_party_initialize initialize
  87.   
  88.   def initialize
  89.     crafting_party_initialize
  90.     @recipes=[]
  91.   end
  92.   
  93.   #----------------------------------------------------------------------
  94.   def know?(recipe, version = 1)
  95.     unless recipe.is_a?(Game_Recipe)
  96.       recipe = get_recipe_from_master_list(recipe, version)
  97.     end
  98.     return $game_party.recipes.include?(recipe)
  99.   end
  100.   
  101. #----------------------------------------------------------------------
  102.   def learn_recipe(recipe , version = 1)
  103.     unless recipe.is_a?(Game_Recipe)
  104.       recipe = get_recipe_from_master_list(recipe, version)
  105.     end
  106.     if recipe.is_a?(Game_Recipe)
  107.       unless know?(recipe)
  108.         @recipes.push(recipe)
  109.       end
  110.     end
  111.   end
  112.   
  113. #----------------------------------------------------------------------
  114.   def forget_recipe(recipe , version = 1)
  115.     if !recipe.is_a?(Game_Recipe)
  116.       recipe = get_recipe_from_master_list(recipe, version)
  117.     end
  118.     if recipe.is_a?(Game_Recipe)
  119.       for i in [email protected]
  120.         if recipe == @recipes[i]
  121.           index = i
  122.           break
  123.         end
  124.       end
  125.       if index != nil
  126.         @recipes.delete(@recipes[index])
  127.       end
  128.     end
  129.   end
  130.   
  131. #----------------------------------------------------------------------
  132.   def get_recipe_from_master_list(item, version)
  133.     index = nil
  134.     for i in 0...$game_temp.recipe_list.size
  135.       if item[0] == $game_temp.recipe_list[i].result and item[1] ==$game_temp.recipe_list[i].result_type
  136.         version -= 1
  137.         if version == 0
  138.           index = i
  139.           break
  140.         end
  141.       end
  142.     end
  143.     if index.is_a?(Integer)
  144.       return ($game_temp.recipe_list[index])
  145.     else
  146.       return false
  147.     end
  148.   end
  149.   
  150. end # of Game_Party updates
  151. #================================
  152. class Game_Recipe
  153.   attr_reader :ingredients
  154.   attr_reader :quantities
  155.   attr_reader :result
  156.   attr_reader :result_type
  157.   attr_reader :ingredient_types
  158.   
  159. #----------------------------------------------------------------------
  160.   def initialize( ingredients, ingredient_types, quantities, result, result_type)
  161.     @ingredients = ingredients
  162.     @ingredient_types = ingredient_types
  163.     @quantities = quantities
  164.     @result = result
  165.     @result_type = result_type
  166.   end
  167.   
  168. #----------------------------------------------------------------------
  169.   def name
  170.     case @result_type
  171.       when 0
  172.         name = $data_items[@result].name
  173.       when 1
  174.         name = $data_armors[@result].name
  175.       when 2
  176.         name = $data_weapons[@result].name
  177.     end
  178.     return name
  179.   end

  180. #----------------------------------------------------------------------
  181.   def have
  182.     have_all = true
  183.     for i in [email protected]
  184.       case @ingredient_types[i]
  185.         when 0
  186.           if $game_party.item_number(@ingredients[i]) < @quantities[i]
  187.             have_all=false
  188.           end
  189.         when 1
  190.           if $game_party.armor_number(@ingredients[i]) < @quantities[i]
  191.             have_all=false
  192.           end
  193.         when 2
  194.           if $game_party.weapon_number(@ingredients[i]) < @quantities[i]
  195.             have_all=false
  196.           end
  197.       end
  198.     end
  199.     return have_all
  200.   end
  201. #----------------------------------------------------------------------
  202.   def decrement
  203.     for i in [email protected]
  204.       case @ingredient_types[i]
  205.       when 0
  206.         $game_party.lose_item(@ingredients[i], @quantities[i])
  207.       when 1
  208.         $game_party.lose_armor(@ingredients[i], @quantities[i])
  209.       when 2
  210.         $game_party.lose_weapon(@ingredients[i], @quantities[i])
  211.       end
  212.     end
  213.   end
  214. #----------------------------------------------------------------------
  215.   def make
  216.     if have
  217.       case @result_type
  218.       when 0
  219.         $game_party.gain_item(@result, 1)
  220.       when 1
  221.         $game_party.gain_armor(@result, 1)
  222.       when 2
  223.         $game_party.gain_weapon(@result, 1)
  224.       end
  225.       decrement
  226.     end
  227.   end
  228.   
  229. #----------------------------------------------------------------------
  230.   def == (recipe)
  231.     if recipe.is_a?(Game_Recipe)
  232.       equal = true
  233.       if recipe.ingredients != self.ingredients
  234.         equal = false
  235.       end
  236.       if recipe.ingredient_types != self.ingredient_types
  237.         equal = false
  238.       end
  239.       if recipe.quantities != self.quantities
  240.         equal = false
  241.       end
  242.       if recipe.result != self.result
  243.         equal=false
  244.       end
  245.       if recipe.result_type != self.result_type
  246.         equal = false
  247.       end
  248.     else
  249.       equal = false
  250.     end
  251.     return equal
  252.   end
  253.   
  254. end # of Game_Recipe class
  255. #===================================
  256. class Window_Craft < Window_Selectable
  257.   #--------------------------------------------------------------------------
  258.   def initialize
  259.     super(0, 64, 240, 416)
  260.     @column_max = 1
  261.     refresh
  262.     self.index = 0
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   def recipe
  266.     return @data[self.index]
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   def refresh
  270.     if self.contents != nil
  271.       self.contents.dispose
  272.       self.contents = nil
  273.     end
  274.     @data = []
  275.     for i in 0...$game_party.recipes.size
  276.         @data.push($game_party.recipes[i])
  277.     end
  278.     @item_max = @data.size
  279.     if @item_max > 0
  280.       self.contents = Bitmap.new(width - 32, row_max * 32)
  281.       self.contents.font.name = "黑体" # = "黑体"
  282.       self.contents.font.size = 18 # = 18
  283.       for i in 0...@item_max
  284.         draw_item(i)
  285.       end
  286.     end
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   def draw_item(index)
  290.     recipe = @data[index]
  291.     self.contents.font.color = recipe.have ? normal_color : disabled_color
  292.     x = 16
  293.     y = index * 32
  294.     self.contents.draw_text(x , y, self.width-32, 32, recipe.name, 0)
  295.   end
  296.   #--------------------------------------------------------------------------
  297.   def update_help
  298.     current_recipe = recipe
  299.     if current_recipe.is_a?(Game_Recipe)
  300.     case current_recipe.result_type
  301.       when 0
  302.         description = $data_items[current_recipe.result].description
  303.       when 1
  304.         description = $data_armors[current_recipe.result].description
  305.       when 2
  306.         description = $data_weapons[current_recipe.result].description
  307.       end
  308.     else
  309.       description = ""
  310.     end
  311.     @help_window.set_text(description)
  312.     @help_window.update
  313.   end
  314.   
  315. end # of Window_Craft
  316. #=======================================
  317. class Window_CraftResult < Window_Base
  318.   #--------------------------------------------------------------------------
  319.   def initialize
  320.     super(240, 64, 400, 184)
  321.     self.contents = Bitmap.new(width - 32, height - 32)
  322.     self.contents.font.name = "黑体" # = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  323.     self.contents.font.size = 18 # = 20
  324.     @result = nil
  325.     @type = nil
  326.   end
  327.   #--------------------------------------------------------------------------
  328.   def refresh
  329.     self.contents.clear
  330.     case @type
  331.       when 0
  332.         item = $data_items[@result]
  333.         if item.recover_hp_rate > item.recover_hp
  334.           hp_string = "HP回复率:"
  335.           hp_stat = item.recover_hp_rate
  336.         else
  337.           hp_string = "HP回复量:"
  338.           hp_stat = item.recover_hp
  339.         end
  340.         if item.recover_sp_rate > item.recover_sp
  341.           sp_string = "SP回复率:"
  342.           sp_stat = item.recover_sp_rate
  343.         else
  344.           sp_string = "SP回复量:"
  345.           sp_stat = item.recover_sp
  346.         end
  347.         @strings = [hp_string, sp_string, "物理防御:" , "魔法防御:", "命中率:", "分散度:"]
  348.         @stats = [hp_stat, sp_stat, item. pdef_f, item.mdef_f, item.hit, item.variance,
  349.                        $game_party.item_number(@result)]
  350.         @bitmap = RPG::Cache.icon(item.icon_name)
  351.       when 1
  352.         item = $data_armors[@result]
  353.         @strings = ["物理防御:", "魔法防御:", "回避修正:", "力量增加:", "灵巧增加:",
  354.                        "速度增加:", "魔力增加:"]
  355.         @stats = [item.pdef, item.mdef, item.eva, item.str_plus, item.dex_plus,
  356.                     item.agi_plus, item.int_plus, $game_party.armor_number(@result) ]
  357.         @bitmap = RPG::Cache.icon(item.icon_name)
  358.       when 2
  359.         item = $data_weapons[@result]
  360.         @strings =["攻击力:", "物理防御:", "魔法防御:", "力量增加:", "灵巧增加:",
  361.                     "速度增加:", "魔力增加:"]
  362.         @stats = [item.atk, item.pdef, item.mdef, item.str_plus, item.dex_plus,
  363.                     item.agi_plus, item.int_plus, $game_party.weapon_number(@result) ]
  364.         @bitmap = RPG::Cache.icon(item.icon_name)
  365.     end
  366.     for i in [email protected]
  367.       x = i%2 * 184
  368.       y = i /2 *28 +32
  369.       self.contents.font.color = normal_color
  370.       self.contents.draw_text(x,y,100, 28,@strings[i])
  371.       self.contents.font.color = system_color
  372.       self.contents.draw_text(x + 110, y, 45, 28, @stats[i].to_s)
  373.     end
  374.     self.contents.blt(0, 0, @bitmap, Rect.new(0, 0, 24, 24), 255)
  375.     self.contents.font.color= normal_color
  376.     self.contents.draw_text(40, 0, 300, 28, "待合成物品的现有数量:")
  377.     self.contents.font.color = system_color
  378.     count = @stats[@stats.size - 1].to_s
  379.     self.contents.draw_text(294, 0, 45, 28, count )
  380.   end
  381.    
  382. #----------------------------------------------------------------------
  383.   def set_result(result , type)
  384.     @result = result
  385.     @type = type
  386.     refresh
  387.   end
  388. end #of Window_CraftResult
  389. #=======================================
  390. class Window_CraftIngredients < Window_Base
  391.   #--------------------------------------------------------------------------
  392.   def initialize
  393.     super(240, 248, 400, 232)
  394.     self.contents = Bitmap.new(width - 32, height - 32)
  395.     self.contents.font.name = "黑体" # = $fontface.is_a?(String) ? $fontface : $defaultfonttype
  396.     self.contents.font.size = 18 # = 20
  397.     @ingredients = []
  398.     @types = []
  399.     @quantities = []
  400.     @item = nil
  401.     @count = 0
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   def refresh
  405.     self.contents.clear
  406.     for i in [email protected]
  407.       case @types[i]
  408.       when 0
  409.         @item = $data_items[@ingredients[i]]
  410.         @count = $game_party.item_number(@ingredients[i])
  411.       when 1
  412.         @item = $data_armors[@ingredients[i]]
  413.         @count = $game_party.armor_number(@ingredients[i])
  414.       when 2
  415.         @item = $data_weapons[@ingredients[i]]
  416.         @count = $game_party.weapon_number(@ingredients[i])
  417.       end
  418.       y = i *26
  419.       self.contents.blt(0, y, RPG::Cache.icon(@item.icon_name), Rect.new(0, 0, 24, 24), 255)
  420.       self.contents.font.color = @count >= @quantities[i] ? normal_color : disabled_color
  421.       self.contents.draw_text(30, y, 280, 28, @item.name)
  422.       self.contents.draw_text(300, y, 45, 28, @quantities[i].to_s)
  423.       self.contents.font.color = system_color
  424.       self.contents.draw_text(245, y, 45, 28, @count.to_s )     
  425.     end
  426.   end
  427.       
  428.   #--------------------------------------------------------------------------
  429.   def set_ingredients(ingredients , types, quantities)
  430.     @ingredients = ingredients
  431.     @types = types
  432.     @quantities = quantities
  433.     refresh
  434.   end
  435. end # of Window_CraftIngredients
  436. #======================================
  437. class Scene_Craft
  438.   #--------------------------------------------------------------------------
  439.   def initialize(craft_index=0)
  440.     @craft_index=craft_index
  441.   end
  442.   
  443.   #--------------------------------------------------------------------------
  444.   def main
  445.     @craft_window = Window_Craft.new
  446.     @craft_window.index=@craft_index
  447.     @confirm_window = Window_Base.new(120, 188, 400, 64)
  448.     @confirm_window.contents = Bitmap.new(368, 32)
  449.     @confirm_window.contents.font.name = "黑体"
  450.     @confirm_window.contents.font.size = 20
  451.     @help_window = Window_Help.new
  452.     @craft_window.help_window = @help_window
  453.     @result_window=Window_CraftResult.new
  454.     @ingredients_window=Window_CraftIngredients.new
  455.     @yes_no_window = Window_Command.new(100, ["确定", "放弃"])
  456.     @confirm_window.visible = false
  457.     @confirm_window.z = 1500
  458.     @yes_no_window.visible = false
  459.     @yes_no_window.active = false
  460.     @yes_no_window.index = 1
  461.     @yes_no_window.x = 270
  462.     @yes_no_window.y = 252
  463.     @yes_no_window.z = 1500
  464.     @label_window = Window_Base.new(450,200,190,52)
  465.     @label_window.contents=Bitmap.new(@label_window.width - 32,@label_window.height - 32)
  466.     @label_window.contents.font.size=20
  467.     @label_window.contents.font.color = @label_window.normal_color
  468.     @label_window.contents.font.name = "黑体"
  469.     @label_window.contents.draw_text(0, 0, @label_window.contents.width, 20, "  现有   需要")
  470.     Graphics.transition
  471.     loop do
  472.       Graphics.update
  473.       Input.update
  474.       update
  475.       if $scene != self
  476.         break
  477.       end
  478.     end
  479.     Graphics.freeze
  480.     @help_window.dispose
  481.     @craft_window.dispose
  482.     @result_window.dispose
  483.     @ingredients_window.dispose
  484.     @confirm_window.dispose
  485.     @yes_no_window.dispose
  486.     @label_window.dispose
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   def update
  490.     @craft_window.update
  491.     @ingredients_window.update
  492.     if $game_party.recipes.size > 0
  493.       @result_window.set_result(@craft_window.recipe.result, @craft_window.recipe.result_type)
  494.       @ingredients_window.set_ingredients(@craft_window.recipe.ingredients,
  495.                                                            @craft_window.recipe.ingredient_types,
  496.                                                            @craft_window.recipe.quantities)
  497.     end
  498.     if @craft_window.active
  499.       update_craft
  500.       return
  501.     end
  502.     if @yes_no_window.active
  503.       confirm_update
  504.       return
  505.     end
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   def update_craft
  509.     if Input.trigger?(Input::B)
  510.       $game_system.se_play($data_system.cancel_se)
  511.       $scene = Scene_Map.new
  512.       return
  513.     end
  514.     if Input.trigger?(Input::C) and $game_party.recipes.size != 0
  515.       @recipe = @craft_window.recipe
  516.       if @recipe.have
  517.         @yes_no_window.active = true
  518.         @craft_window.active = false
  519.       else
  520.         $game_system.se_play($data_system.buzzer_se)
  521.         return
  522.       end
  523.     end
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   def confirm_update
  527.     @craft_index = @craft_window.index
  528.     @confirm_window.visible = true
  529.     @confirm_window.z = 1500
  530.     @yes_no_window.visible = true
  531.     @yes_no_window.active = true
  532.     @yes_no_window.z = 1500
  533.     @yes_no_window.update
  534.     string = "合成 " + @recipe.name + "?"
  535.     cw = @confirm_window.contents.text_size(string).width
  536.     center = @confirm_window.contents.width/2 - cw /2
  537.     unless @drawn
  538.       @confirm_window.contents.draw_text(center, 0, cw, 30, string)
  539.       @drawn = true
  540.     end
  541.     if Input.trigger?(Input::C)
  542.       if @yes_no_window.index == 0
  543.         $game_system.se_play($data_system.decision_se)
  544.         @recipe.make
  545.         $game_system.se_play($data_system.save_se)
  546.         $scene=Scene_Craft.new(@craft_index)
  547.       else
  548.         $game_system.se_play($data_system.cancel_se)
  549.         $scene=Scene_Craft.new(@craft_index)
  550.       end
  551.     end
  552.     if Input.trigger?(Input::B)
  553.       $game_system.se_play($data_system.cancel_se)
  554.       $scene=Scene_Craft.new(@craft_index)
  555.     end
  556.   end
  557. end # of Scene_Craft
  558. #==============================================================================
  559. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  560. #==============================================================================
复制代码
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
27 小时
注册时间
2009-7-23
帖子
21
6
 楼主| 发表于 2009-9-21 16:55:05 | 只看该作者
5楼的和上面的是同一个脚本  原来开始不会用插入代码所以发上去就成这样了不好意思
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-8 06:41

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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