Advertisement
Wuppertaler93

Advanced Recipe Crafting v1.2

Feb 2nd, 2020
263
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.64 KB | None | 0 0
  1. #Advanced Recipe Crafting v1.2
  2. #----------#
  3. #Features: Advanced Recipe crafting! Hold on tight!
  4. #
  5. #Usage: Set up your recipes, learn recipes, make items! Yay!
  6. # $crafting_category = :craft - call before Scene, craft is category
  7. # SceneManager.call(Scene_Crafting) - opens the Crafting menu
  8. # SceneManager.call(Scene_CraftingAll)- opens the category Crafting menu
  9. # learn_recipe(id) - teaches that recipe
  10. # forget_recipe(id) - forgets that recipe
  11. #
  12. #----------#
  13. #-- Script by: V.M of D.T
  14. #
  15. #- Questions or comments can be:
  16. # given by email: sumptuaryspade@live.ca
  17. # provided on facebook: http://www.facebook.com/DaimoniousTailsGames
  18. # All my other scripts and projects can be found here: http://daimonioustails.weebly.com/
  19. #
  20. #- Free to use in any project with credit given, donations always welcome!
  21.  
  22. module ADV_RECIPE
  23. #Whether or not crafted items use Weapon/Armor Randomization
  24. USE_WA_RANDOMIZATION = false
  25. #The names of the categories for All Crafting Menu, use :All for all recipes
  26. CATEGORIES = [:Kochen,:Alchimi]
  27. DESCRIPTIONS = {
  28. :Alchimi => "Stelle diesen und jenen Trank her.",
  29. :Kochen => "Deine Kochkünste auf einem blick.",
  30. }
  31. #The icons for categories, same order as above
  32. CATEGORY_ICONS = [291,192]
  33. #The icon for player level
  34. LEVEL_ICON = 117
  35. #Xp needed for crafting level, lvl is used for current level
  36. XP_NEEDED_EQUATION = "100 * lvl"
  37. #Allow the crafting of multiple items
  38. CRAFT_MULTIPLE = true
  39. #Allow or disallow menu access to the crafting scene
  40. ENABLE_MENU_ACCESS = true
  41. #Disable crafting from menu (turning it into a recipe viewer)
  42. DISABLE_MENU_CRAFT = true
  43. #Font Size of Detail window, smaller font size creates more room for materials
  44. DETAIL_FONT_SIZE = 18
  45.  
  46.  
  47. #The following options disable the display of certain features. They still work
  48. # however if declared in recipes, so edit recipes accordingly.
  49. #Removes Gold Cost
  50. DISABLE_GOLD_COST = false
  51. #Removes success rate
  52. DISABLE_SUCCESS = true
  53. #Removes player level requirement
  54. DISABLE_PLAYER_LEVEL = true
  55. #Removes crafting level requirement and gauge
  56. DISABLE_CRAFT_LEVEL = true
  57. #Auto-learn all skills (can use forget_recipe to forget certain ones for later)
  58. AUTO_LEARN_RECIPES = false
  59.  
  60.  
  61. #The fun (read: complicated) part!
  62. #Recipe symbols:
  63. #
  64. #The crafted item, type is 0 for item, 1 for weapon, 2 for armor
  65. # :result => [type,id,amount]
  66. #
  67. #The materials required, same style as result.
  68. # :materials => [ [type,id,amount,consumed?],[type,id,amount] ... ],
  69. #
  70. # All the following are optional:
  71. # :gold_cost => amount - amount of gold to craft, can be 0
  72. # :success => percent - base percent chance of successful craft
  73. # :success_gain => percent - percent gain on success per crafting level
  74. # :level => value - Hero level required to craft
  75. # :craft_level => value - Crafting level required to craft
  76. # :category => :category - Crafting category (:Alchemy, :Tailor, etc)
  77. # :multiple => false - disallows multiple crafts
  78. # :xp => amount - base Crafting xp gained per craft
  79. # :xp_deprac => amount - Xp lost per crafting level
  80. # :pxp => amount - Player xp gainer per craft
  81.  
  82. # Formula for xp gained is as follows and is never negative:
  83. # xp gain = xp - (current_level - recipe_level) * xp_deprac
  84.  
  85. RECIPES = {
  86. 0 => { :result => [0,24,1], #Gekochte Kartoffel
  87. :materials => [[0,23,1],[0,25,1]],
  88. #Zutaten: 1x Kartoffel, 1x Holz
  89. :gold_cost => 100,
  90. :success => 100,
  91. :success_gain => 0,
  92. :level => 1,
  93. :craft_level => 1,
  94. :category => :Kochen,
  95. :xp => 0,
  96. :xp_deprac => 0,},
  97.  
  98. 1 => { :result => [0,2,1],
  99. :materials => [[1,4,1],[0,5,2,false]],
  100. :gold_cost => 50,
  101. :success => 90,
  102. :success_gain => 2,
  103. :level => 15,
  104. :craft_level => 1,
  105. :category => :Alchemy,
  106. :xp => 150,
  107. :xp_deprac => 20,},
  108.  
  109. 2 => { :result => [0,3,1],
  110. :materials => [[0,4,1],[0,5,1],[0,6,2],[0,7,1],[0,8,1],[0,9,2]],
  111. :gold_cost => 150,
  112. :success => 85,
  113. :success_gain => 3,
  114. :level => 25,
  115. :craft_level => 1,
  116. :category => :Alchemy,
  117. :xp => 250,
  118. :xp_deprac => 25,},
  119.  
  120. }
  121.  
  122. end
  123.  
  124. $crafting_category = :All
  125. class Recipe
  126. attr_accessor :result
  127. attr_accessor :materials
  128. attr_accessor :known
  129. attr_accessor :id
  130. attr_accessor :gold_cost
  131. attr_accessor :level
  132. attr_accessor :category
  133. attr_accessor :xp
  134. def initialize(id,recipe_hash)
  135. @id = id
  136. @result = Material.new(recipe_hash[:result])
  137. @materials = []
  138. for item in recipe_hash[:materials]
  139. @materials.push(Material.new(item))
  140. end
  141. @known = false
  142. recipe_hash[:gold_cost] ? @gold_cost = recipe_hash[:gold_cost] : @gold_cost = 0
  143. recipe_hash[:success] ? @rate = recipe_hash[:success] : @rate = 100
  144. recipe_hash[:success_gain] ? @rated = recipe_hash[:success_gain] : @rated = 0
  145. recipe_hash[:level] ? @level = recipe_hash[:level] : @level = 1
  146. recipe_hash[:category] ? @category = recipe_hash[:category] : @category = CATEGORIES[0]
  147. recipe_hash[:xp] ? @xp = recipe_hash[:xp] : @xp = 0
  148. recipe_hash[:xp_deprac] ? @xpd = recipe_hash[:xp_deprac] : @xpd = 0
  149. recipe_hash[:craft_level] ? @clevel = recipe_hash[:craft_level] : @clevel = 0
  150. recipe_hash[:pxp] ? @pxp = recipe_hash[:pxp] : @pxp = 0
  151. !recipe_hash[:multiple].nil? ? @mult = recipe_hash[:multiple] : @mult = true
  152. @known = ADV_RECIPE::AUTO_LEARN_RECIPES
  153. end
  154. def name
  155. return @result.item.name
  156. end
  157. def multiple?
  158. @mult
  159. end
  160. def has_materials?
  161. for item in @materials
  162. return false unless $game_party.item_number(item.item) >= item.amount
  163. end
  164. return true
  165. end
  166. def has_gold?
  167. $game_party.gold >= @gold_cost
  168. end
  169. def has_craft_level?
  170. craft_level <= $game_party.craft_level_sym(@category)
  171. end
  172. def has_level?
  173. @level <= $game_party.highest_level && has_craft_level?
  174. end
  175. def craftable?
  176. has_gold? && has_materials? && has_level?
  177. end
  178. def craft_level
  179. @clevel
  180. end
  181. def amount_craftable?
  182. mat_amount = []
  183. for item in @materials
  184. mat_amount.push($game_party.item_number(item.item) / item.amount)
  185. end
  186. if @gold_cost > 0
  187. return [$game_party.gold / @gold_cost,mat_amount.min].min
  188. else
  189. return mat_amount.min
  190. end
  191. end
  192. def craft(fail = 0)
  193. remove_materials
  194. if fail < success_rate
  195. return add_result
  196. else
  197. return nil
  198. end
  199. end
  200. def remove_materials
  201. for item in @materials
  202. next unless item.consumed?
  203. $game_party.gain_item(item.item,-item.amount)
  204. end
  205. $game_party.gain_gold(-@gold_cost)
  206. end
  207. def add_result
  208. if ADV_RECIPE::USE_WA_RANDOMIZATION
  209. item = $game_party.add_weapon(@result.item.id,@result.amount) if @result.item.is_a?(RPG::Weapon)
  210. item = $game_party.add_armor(@result.item.id,@result.amount) if @result.item.is_a?(RPG::Armor)
  211. item = $game_party.add_item(@result.item.id,@result.amount) if @result.item.is_a?(RPG::Item)
  212. else
  213. $game_party.gain_item(@result.item,@result.amount)
  214. item = @result.item
  215. end
  216. $game_party.gain_craft_exp(category_id, xp_gain)
  217. $game_party.members.each do |actor|
  218. actor.gain_exp(@pxp)
  219. end
  220. item
  221. end
  222. def category_id
  223. ADV_RECIPE::CATEGORIES.index(@category)
  224. end
  225. def xp_gain
  226. level_diff = $game_party.craft_level(category_id) - @clevel
  227. [@xp - @xpd * level_diff,0].max
  228. end
  229. def success_rate
  230. level_diff = $game_party.craft_level(category_id) - @clevel
  231. [@rate + @rated * level_diff,100].min
  232. end
  233. end
  234.  
  235. class Material
  236. attr_accessor :item
  237. attr_accessor :amount
  238. def initialize(mat)
  239. @item = $data_items[mat[1]] if mat[0] == 0
  240. @item = $data_weapons[mat[1]] if mat[0] == 1
  241. @item = $data_armors[mat[1]] if mat[0] == 2
  242. @amount = mat[2]
  243. @consumed = mat[3].nil? ? true : mat[3]
  244. end
  245. def consumed?
  246. @consumed
  247. end
  248. end
  249.  
  250. class Game_Party
  251. alias recipe_init initialize
  252. def initialize
  253. recipe_init
  254. @crafting_level = [1]*ADV_RECIPE::CATEGORIES.size
  255. @craft_exp = [0]*ADV_RECIPE::CATEGORIES.size
  256. end
  257. def craft_level(id)
  258. @crafting_level[id]
  259. end
  260. def craft_level_sym(sym)
  261. @crafting_level[ADV_RECIPE::CATEGORIES.index(sym)]
  262. end
  263. def craft_exp(id)
  264. @craft_exp[id]
  265. end
  266. def craft_exp_next(id)
  267. lvl = craft_level(id)
  268. return eval(ADV_RECIPE::XP_NEEDED_EQUATION)
  269. end
  270. def gain_craft_exp(id, val)
  271. @craft_exp[id] += val
  272. while craft_exp(id) >= craft_exp_next(id)
  273. @craft_exp[id] -= craft_exp_next(id)
  274. @crafting_level[id] += 1
  275. end
  276. end
  277. end
  278.  
  279. module DataManager
  280. class << self
  281. alias rec_cgo create_game_objects
  282. alias rec_msc make_save_contents
  283. alias rec_esc extract_save_contents
  284. end
  285. def self.create_game_objects
  286. rec_cgo
  287. $game_recipes = create_recipes
  288. end
  289. def self.make_save_contents
  290. contents = rec_msc
  291. contents[:recipe] = $game_recipes
  292. contents
  293. end
  294. def self.extract_save_contents(contents)
  295. rec_esc(contents)
  296. $game_recipes = contents[:recipe]
  297. end
  298. def self.create_recipes
  299. recipes = {}
  300. ADV_RECIPE::RECIPES.each_pair do |key, val|
  301. recipes[key] = Recipe.new(key,val)
  302. end
  303. recipes
  304. end
  305. end
  306.  
  307. class Game_Interpreter
  308. def learn_recipe(id)
  309. return if $game_recipes[id].nil?
  310. $game_recipes[id].known = true
  311. end
  312. def forget_recipe(id)
  313. return if $game_recipes[id].nil?
  314. $game_recipes[id].known = false
  315. end
  316. end
  317.  
  318. class Window_RecipeList < Window_Selectable
  319. def initialize(x,y,w,h)
  320. super
  321. @data = $game_recipes.values.select {|recipe| include?(recipe)}
  322. refresh
  323. end
  324. def item_max
  325. @data ? @data.size : 1
  326. end
  327. def item
  328. @data && index >= 0 ? @data[index] : nil
  329. end
  330. def current_item_enabled?
  331. enable?(@data[index])
  332. end
  333. def include?(item)
  334. return false unless item.has_craft_level?
  335. return false unless item.known
  336. return true if @category == :All
  337. return @category == item.category
  338. end
  339. def set_category(cat)
  340. return if cat == @category
  341. @category = cat
  342. @data = $game_recipes.values.select {|recipe| include?(recipe)}
  343. refresh
  344. end
  345. def enable?(item)
  346. return false if item.nil?
  347. return false if $temp_disable_crafting
  348. item.craftable?
  349. end
  350. def draw_item(index)
  351. item = @data[index]
  352. if item
  353. rect = item_rect(index)
  354. rect.width -= 4
  355. enabled = $temp_disable_crafting ? true : enable?(item)
  356. draw_item_name(item.result.item, rect.x, rect.y, enabled)
  357. if item.amount_craftable? > 0
  358. draw_text(rect.x,rect.y,contents.width,24,"x"+item.amount_craftable?.to_s,2)
  359. end
  360. end
  361. end
  362. def current_item
  363. index >= 0 ? @data[index] : nil
  364. end
  365. def process_ok
  366. if current_item_enabled?
  367. Sound.play_ok
  368. Input.update
  369. call_ok_handler
  370. else
  371. Sound.play_buzzer
  372. end
  373. end
  374. def refresh
  375. create_contents
  376. super
  377. end
  378. def content_heights
  379. item_max * 24
  380. end
  381. end
  382.  
  383. class Window_RecipeDetail < Window_Base
  384. def initialize(x,y,w,h)
  385. super
  386. @recipe = nil
  387. end
  388. def set_recipe(recipe)
  389. @recipe = recipe
  390. refresh
  391. end
  392. def refresh
  393. contents.clear
  394. contents.font.size = ADV_RECIPE::DETAIL_FONT_SIZE
  395. return if @recipe.nil?
  396. draw_craft_level unless ADV_RECIPE::DISABLE_PLAYER_LEVEL && ADV_RECIPE::DISABLE_CRAFT_LEVEL
  397. draw_materials
  398. draw_success_rate unless ADV_RECIPE::DISABLE_SUCCESS
  399. draw_gold_cost unless ADV_RECIPE::DISABLE_GOLD_COST
  400. end
  401. def draw_craft_level
  402. change_color(system_color, @recipe.has_level?)
  403. draw_text(0,0,contents.width,contents.font.size,"Craft Level:")
  404. change_color(normal_color, @recipe.has_level?)
  405. xx = 0
  406. if !ADV_RECIPE::DISABLE_PLAYER_LEVEL
  407. draw_text(0,0,contents.width,contents.font.size,@recipe.level,2)
  408. draw_icon(ADV_RECIPE::LEVEL_ICON,contents.width - 48,0)
  409. xx += 48
  410. text = @recipe.craft_level.to_s + "/"
  411. else
  412. text = @recipe.craft_level.to_s
  413. end
  414. if !ADV_RECIPE::DISABLE_CRAFT_LEVEL
  415. draw_text(0,0,contents.width - xx,contents.font.size,text,2)
  416. draw_icon(ADV_RECIPE::CATEGORY_ICONS[ADV_RECIPE::CATEGORIES.index(@recipe.category)],contents.width - 56 - xx,0)
  417. end
  418. end
  419. def draw_materials
  420. if ADV_RECIPE::DISABLE_CRAFT_LEVEL && ADV_RECIPE::DISABLE_PLAYER_LEVEL
  421. yy = 0
  422. else
  423. yy = contents.font.size
  424. end
  425. change_color(system_color, @recipe.craftable?)
  426. draw_text(0,yy,self.width,contents.font.size,"Required:")
  427. yy += contents.font.size
  428. for item in @recipe.materials
  429. change_color(normal_color, $game_party.item_number(item.item) >= item.amount)
  430. draw_icon(item.item.icon_index,0,yy)
  431. draw_text(24,yy,self.width,contents.font.size,item.item.name)
  432. string = $game_party.item_number(item.item).to_s + "/" + item.amount.to_s
  433. draw_text(0,yy,self.contents.width,contents.font.size,string,2)
  434. yy += contents.font.size
  435. end
  436. end
  437. def draw_success_rate
  438. change_color(system_color, @recipe.craftable?)
  439. draw_text(0,contents.height-contents.font.size,contents.width,contents.font.size,"Success Rate:")
  440. change_color(normal_color, @recipe.craftable?)
  441. draw_text(0,contents.height-contents.font.size,contents.width,contents.font.size,@recipe.success_rate.to_s + "%",2)
  442. end
  443. def draw_gold_cost
  444. if @recipe.gold_cost > 0
  445. change_color(system_color, @recipe.has_gold?)
  446. draw_text(0,contents.height-contents.font.size*2,contents.width,contents.font.size,"Crafting Cost:")
  447. change_color(normal_color, @recipe.has_gold?)
  448. draw_currency_value(@recipe.gold_cost,Vocab::currency_unit,0,contents.height-contents.font.size*2,contents.width)
  449. end
  450. end
  451. def draw_currency_value(value, unit, x, y, width)
  452. cx = text_size(unit).width
  453. change_color(normal_color,$game_party.gold >= value)
  454. draw_text(x, y, width - cx - 2, contents.font.size, value, 2)
  455. change_color(system_color)
  456. draw_text(x, y, width, contents.font.size, unit, 2)
  457. end
  458. end
  459.  
  460. class Window_RecipeConfirm < Window_Selectable
  461. attr_accessor :amount
  462. def initialize(x,y,w,h)
  463. super
  464. @amount = 1
  465. refresh
  466. end
  467. def item_max; 1; end;
  468. def enable?(item); true; end;
  469. def refresh
  470. super
  471. draw_text(0,0,self.contents.width,line_height,"Craft",1)
  472. return unless @recipe && @recipe.craftable?
  473. draw_text(0,0,contents.width,line_height,"x"+@amount.to_s,2)
  474. end
  475. def activate
  476. super
  477. select(0)
  478. end
  479. def deactivate
  480. super
  481. select(-1)
  482. end
  483. def set_recipe(rec)
  484. return if rec == @recipe
  485. @recipe = rec
  486. @amount = 1
  487. refresh
  488. end
  489. def cursor_movable?
  490. active && open? && ADV_RECIPE::CRAFT_MULTIPLE && @recipe.multiple?
  491. end
  492. def cursor_down(wrap = false)
  493. change_amount(-10)
  494. end
  495. def cursor_up(wrap = false)
  496. change_amount(10)
  497. end
  498. def cursor_right(wrap = false)
  499. change_amount(1)
  500. end
  501. def cursor_left(wrap = false)
  502. change_amount(-1)
  503. end
  504. def change_amount(val)
  505. Sound.play_cursor
  506. @amount += val
  507. @amount = [[@amount,1].max,@recipe.amount_craftable?].min
  508. refresh
  509. end
  510. end
  511.  
  512. class Scene_CraftingAll < Scene_Base
  513. def start
  514. super
  515. @help_window = Window_Help.new
  516. width = Graphics.width / 2
  517. height = Graphics.height - @help_window.height - 48
  518. @list_window = Window_RecipeList.new(0,@help_window.height+48,width,height-48)
  519. @list_window.set_handler(:ok, method(:list_success))
  520. @list_window.set_handler(:cancel, method(:cancel))
  521. @list_window.height += 48 if ADV_RECIPE::DISABLE_CRAFT_LEVEL
  522. @list_window.create_contents
  523. @detail_window = Window_RecipeDetail.new(width,@list_window.y,width,height-48*2)
  524. @detail_window.height += 48 if ADV_RECIPE::DISABLE_GOLD_COST
  525. @detail_window.create_contents
  526. height = @detail_window.y + @detail_window.height
  527. @confirm_window = Window_RecipeConfirm.new(width,height,width,48)
  528. @confirm_window.set_handler(:ok, method(:craft_success))
  529. @confirm_window.set_handler(:cancel, method(:confirm_cancel))
  530. if !ADV_RECIPE::DISABLE_GOLD_COST
  531. @gold_window = Window_Gold.new
  532. @gold_window.width = width
  533. @gold_window.y = Graphics.height - 48
  534. @gold_window.x = width
  535. end
  536. @popup_window = Window_RecPopup.new
  537. @popup_window.set_handler(:ok, method(:popup_ok))
  538. @popup_window.set_handler(:cancel, method(:popup_ok))
  539. @command_window = Window_RecCategory.new
  540. @command_window.set_handler(:ok, method(:command_ok))
  541. @command_window.set_handler(:cancel, method(:command_cancel))
  542. @gauge_window = Window_RecGauge.new unless ADV_RECIPE::DISABLE_CRAFT_LEVEL
  543. end
  544. def popup_ok
  545. @popup_window.deactivate
  546. @popup_window.close
  547. @list_window.activate
  548. end
  549. def update
  550. super
  551. @help_window.set_text(@list_window.current_item.result.item.description) if !@list_window.current_item.nil?
  552. if @command_window.active
  553. category = ADV_RECIPE::CATEGORIES[@command_window.index]
  554. @help_window.set_text(ADV_RECIPE::DESCRIPTIONS[category])
  555. end
  556. @detail_window.set_recipe(@list_window.current_item)
  557. @confirm_window.set_recipe(@list_window.current_item)
  558. @list_window.set_category(ADV_RECIPE::CATEGORIES[@command_window.index])
  559. @gauge_window.set_category(ADV_RECIPE::CATEGORIES[@command_window.index]) unless ADV_RECIPE::DISABLE_CRAFT_LEVEL
  560. return unless @list_window.current_item
  561. if @list_window.current_item.craftable?
  562. @confirm_window.opacity = 255
  563. @confirm_window.contents_opacity = 255
  564. else
  565. @confirm_window.opacity = 75
  566. @confirm_window.contents_opacity = 75
  567. end
  568. end
  569. def list_success
  570. @list_window.deactivate
  571. @confirm_window.activate
  572. end
  573. def craft_success
  574. amount = 0
  575. item = nil
  576. @confirm_window.amount.times do
  577. item2 = @list_window.current_item.craft(rand(100))
  578. if item2
  579. amount += 1
  580. item = item2
  581. end
  582. end
  583. if item
  584. @popup_window.set_text(item, amount)
  585. else
  586. @popup_window.set_text_fail
  587. end
  588. @confirm_window.change_amount(-1000)
  589. @gold_window.refresh unless ADV_RECIPE::DISABLE_GOLD_COST
  590. @list_window.refresh
  591. @gauge_window.refresh unless ADV_RECIPE::DISABLE_CRAFT_LEVEL
  592. @popup_window.activate
  593. end
  594. def confirm_cancel
  595. @confirm_window.deactivate
  596. @list_window.activate
  597. end
  598. def command_cancel
  599. $temp_disable_crafting = false
  600. SceneManager.return
  601. end
  602. def cancel
  603. @list_window.select(-1)
  604. @help_window.set_text("")
  605. @command_window.activate
  606. end
  607. def command_ok
  608. @list_window.select(0)
  609. @list_window.activate
  610. end
  611. end
  612.  
  613. class Scene_Crafting < Scene_CraftingAll
  614. def start
  615. super
  616. @command_window.index = ADV_RECIPE::CATEGORIES.index($crafting_category)
  617. @command_window.deactivate
  618. @command_window.visible = false
  619. @list_window.height += 48
  620. @list_window.y -= 48
  621. @detail_window.height += 48
  622. @detail_window.y -= 48
  623. @list_window.create_contents
  624. @detail_window.create_contents
  625. @list_window.select(0)
  626. @list_window.activate
  627. end
  628. def cancel
  629. SceneManager.return
  630. end
  631. end
  632.  
  633. class Window_RecCategory < Window_HorzCommand
  634. def initialize
  635. super(0,72)
  636. end
  637. def window_width; Graphics.width; end
  638. def window_height; 48; end
  639. def make_command_list
  640. ADV_RECIPE::CATEGORIES.each do |command|
  641. add_command(command.to_s,command)
  642. end
  643. end
  644. def item_width
  645. 120
  646. end
  647. def draw_item(index)
  648. change_color(normal_color, command_enabled?(index))
  649. rect = item_rect_for_text(index)
  650. draw_text(rect, command_name(index))
  651. draw_icon(ADV_RECIPE::CATEGORY_ICONS[index],rect.x-24,rect.y)
  652. end
  653. def item_rect_for_text(index)
  654. rect = item_rect(index)
  655. rect.x += 28
  656. rect.width -= 28
  657. rect
  658. end
  659. end
  660.  
  661. class Window_RecPopup < Window_Selectable
  662. def initialize
  663. super(Graphics.width/2-window_width/2,Graphics.height/2-window_height/2,120,48)
  664. self.openness = 0
  665. deactivate
  666. end
  667. def window_width; 120; end
  668. def window_height; 48; end
  669. def set_text(item, amount)
  670. contents.clear
  671. text = amount.to_s + "x " + item.name + " crafted!"
  672. width = contents.text_size(text).width
  673. self.width = width + padding*2
  674. self.x = Graphics.width/2-width/2
  675. create_contents
  676. draw_text(24,0,contents.width,line_height,text)
  677. draw_icon(item.icon_index,0,0)
  678. open
  679. end
  680. def set_text_fail
  681. contents.clear
  682. text = "Crafting failed!"
  683. width = contents.text_size(text).width
  684. self.width = width + padding*2
  685. self.x = Graphics.width/2-width/2
  686. create_contents
  687. draw_text(12,0,contents.width,line_height,text)
  688. open
  689. end
  690. def process_ok
  691. if current_item_enabled?
  692. Input.update
  693. deactivate
  694. call_ok_handler
  695. else
  696. Sound.play_buzzer
  697. end
  698. end
  699. end
  700.  
  701. class Window_RecGauge < Window_Base
  702. def initialize
  703. super(0,Graphics.height-48,Graphics.width/2,48)
  704. @category = :All
  705. end
  706. def refresh
  707. contents.clear
  708. return if @category == :All
  709. draw_icon(ADV_RECIPE::CATEGORY_ICONS[cat_index],0,0)
  710. draw_text(24,0,contents.width,24,$game_party.craft_level(cat_index))
  711. rate = $game_party.craft_exp(cat_index).to_f / $game_party.craft_exp_next(cat_index)
  712. draw_gauge(48, -3, contents.width-48, rate, tp_gauge_color1, tp_gauge_color2)
  713. if Module.const_defined?(:SPECIAL_GAUGES)
  714. @gauges[[48,-3]].set_extra("XP",$game_party.craft_exp(cat_index),$game_party.craft_exp_next(cat_index))
  715. else
  716. text = $game_party.craft_exp(cat_index).to_s+"/"+$game_party.craft_exp_next(cat_index).to_s
  717. draw_text(0,0,contents.width,24,text,2)
  718. end
  719. end
  720. def set_category(cat)
  721. return if cat == @category
  722. @category = cat
  723. refresh
  724. end
  725. def cat_index
  726. ADV_RECIPE::CATEGORIES.index(@category)
  727. end
  728. end
  729.  
  730. class Window_MenuCommand < Window_Command
  731. alias recipe_aoc add_original_commands
  732. def add_original_commands
  733. recipe_aoc
  734. add_command("Rezepte", :recipe) if ADV_RECIPE::ENABLE_MENU_ACCESS
  735. end
  736. end
  737.  
  738. class Scene_Menu < Scene_MenuBase
  739. alias recipe_create_command_window create_command_window
  740. def create_command_window
  741. recipe_create_command_window
  742. @command_window.set_handler(:recipe, method(:command_recipe))
  743. end
  744. def command_recipe
  745. $temp_disable_crafting = ADV_RECIPE::DISABLE_MENU_CRAFT
  746. SceneManager.call(Scene_CraftingAll)
  747. end
  748. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement