Advertisement
dsiver144

DSI Card Trading System v1.1

Mar 24th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.71 KB | None | 0 0
  1. #==============================================================================
  2. # DSI Card Trading System v1.1
  3. # -- Last Updated: 2017.03.24
  4. # -- Author: dsiver144
  5. # -- Level: Normal
  6. # -- Requires: n/a
  7. #==============================================================================
  8. $imported = {} if $imported.nil?
  9. $imported["DSI-CardTrading"] = true
  10. #==============================================================================
  11. # + Updates
  12. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  13. # 2017.02.27 - Finish first version.
  14. # 2017.03.24 - Modify for checking the trade
  15. #==============================================================================
  16. # + Instructions
  17. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  18. # To install this script, open up your script editor and copy/paste this script
  19. # to an open slot below ?? Materials/?f?? but above ?? Main. Remember to save.
  20. # Remember to put this script below: DSI-Bitmap.
  21. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  22. # Script Call:
  23. # trade_card(your_card_id, their_card_id, switch_id)
  24. # ex: trade_card(28, 29, 7) # Trade your "Earth Throw" with their "Wood Hammer"
  25. # if the trade is successful then turn on switch 7 else do nothing to the
  26. # switch.
  27. # ------------------------------------------------------------------------------
  28. # latest_trade_result # Use in condition branches for checking latest trade result
  29. # Return value: True or False
  30. # ex: latest_trade_result == true
  31. #==============================================================================
  32. module DSIVER144
  33. module CARD_TRADING
  34.  
  35. SCROLLABLE_BACKGROUND = "BlueSky"
  36. SCROLL_X = 1
  37. SCROLL_Y = 1
  38.  
  39. MESSAGES = {}
  40. MESSAGES[:no_card] = "You don't have the card that I'm looking for!"
  41. MESSAGES[:has_card] = "Do you want to trade your card with mine?"
  42. MESSAGES[:cancel_trade] = "Well, if you change your mind later on, you know where to find me!"
  43. MESSAGES[:success_trade] = "Thanks for the trade!"
  44.  
  45. BEGIN_TRADE_SE = ["Flash2",70,100]
  46. TRADING_SE = ["Sound2",70,100]
  47. TRADE_COMPLETE_SE = ["Blue Magic (FF6)",70,100]
  48.  
  49. ACTOR_SPRITE_X = 25
  50. ACTOR_SPRITE_Y = 165
  51.  
  52. TRADER_SPRITE_X = 520
  53. TRADER_SPRITE_Y = 165
  54.  
  55. OTHER_BUTTONS_TEXT = "\\i[1600]:Confirm - \\i[1602]:Cancel"
  56. OTHER_BUTTONS_MARGIN = 176
  57.  
  58. end # CARD_TRADING
  59. end # DSIVER144
  60.  
  61. class Game_Interpreter
  62. #--------------------------------------------------------------------------
  63. # * new method: latest_trade_result
  64. #--------------------------------------------------------------------------
  65. def latest_trade_result
  66. $game_system.recently_trade_stt
  67. end
  68. #--------------------------------------------------------------------------
  69. # * new method: get_event
  70. #--------------------------------------------------------------------------
  71. def get_event
  72. return $game_map.events[@event_id]
  73. end
  74. #--------------------------------------------------------------------------
  75. # * new method: trade_card
  76. #--------------------------------------------------------------------------
  77. def trade_card(your_card, their_card, switch_id)
  78. SceneManager.call(Scene_CardTrading)
  79. SceneManager.scene.prepare(your_card, their_card, get_event, switch_id)
  80. Fiber.yield
  81. end
  82. end # Game_Interpreter
  83.  
  84. class Game_Interpreter2 < Game_Interpreter
  85. def initialize
  86. end
  87. end # Game_Interpreter2
  88.  
  89. include DSIVER144::CARD_TRADING
  90.  
  91. class Scene_CardTrading < Scene_Base
  92. #--------------------------------------------------------------------------
  93. # * new method: trade_card
  94. #--------------------------------------------------------------------------
  95. def prepare(*params) # (Player_Card, Their Card, Event)
  96. @interpreter = Game_Interpreter2.new
  97. @your_card_id = params[0]
  98. @their_card_id = params[1]
  99. if params[2].is_a?(Game_Event)
  100. @their_name = params[2].character_name
  101. @their_index = params[2].character_index
  102. @switch_id = params[3]
  103. end
  104. if params[2].is_a?(String)
  105. @their_name = params[2]
  106. @their_index = params[3].to_i
  107. @switch_id = params[4]
  108. end
  109. $game_system.recently_trade_stt = false
  110. #$game_switches[@switch_id] = false
  111. @has_card = @interpreter.has_card?(@your_card_id)
  112. end
  113. #--------------------------------------------------------------------------
  114. # * new method: start
  115. #--------------------------------------------------------------------------
  116. def start
  117. super
  118. create_background_image
  119. create_main_windows
  120. end
  121. #-------------------------------------------------------------------------
  122. # * new method: create_background_image
  123. #-------------------------------------------------------------------------
  124. def create_background_image
  125. @background_image = Plane.new
  126. if SCROLLABLE_BACKGROUND != false
  127. begin
  128. @background_image.bitmap = Cache.parallax(SCROLLABLE_BACKGROUND)
  129. @has_parallax = true
  130. rescue
  131. @background_image.bitmap = SceneManager.background_bitmap
  132. @background_image.color.set(16, 16, 16, 128)
  133. end
  134. else
  135. @background_image.bitmap = SceneManager.background_bitmap
  136. @background_image.color.set(16, 16, 16, 128)
  137. end
  138. end
  139. #--------------------------------------------------------------------------
  140. # * new method: draw_character
  141. #--------------------------------------------------------------------------
  142. def draw_character(character_name, character_index, x, y, des_bitmap)
  143. return unless character_name
  144. bitmap = Cache.character(character_name)
  145. sign = character_name[/^[\!\$]./]
  146. if sign && sign.include?('$')
  147. cw = bitmap.width / 3
  148. ch = bitmap.height / 4
  149. else
  150. cw = bitmap.width / 12
  151. ch = bitmap.height / 8
  152. end
  153. n = character_index
  154. src_rect = Rect.new((n%4*3+1)*cw, (n/4*4)*ch, cw, ch)
  155. des_bitmap.blt(x - cw / 2, y - ch, bitmap, src_rect)
  156. end
  157. #--------------------------------------------------------------------------
  158. # * new method: create_main_windows
  159. #--------------------------------------------------------------------------
  160. def create_main_windows
  161. @message_window = Window_CardTradeMessage.new(0,0,450,96)
  162. @message_window.x = 0.5*(Graphics.width - @message_window.width)
  163. @message_window.y = Graphics.height - @message_window.height - 4
  164. @command_window = Window_TradeCommand.new(0,0)
  165. @command_window.x = 0.5*(Graphics.width - @command_window.width)
  166. @command_window.y = 0.5*(Graphics.height - @command_window.height)
  167. @command_window.deactivate
  168. @command_window.openness = 0
  169. @command_window.set_handler(:ok, method(:process_trade))
  170. @command_window.set_handler(:cancel, method(:cancel_trade))
  171.  
  172. @spr_PlayerCard = Sprite.new
  173. @spr_PlayerCard.bitmap = Cache.picture("Card#{@your_card_id}")
  174. @spr_PlayerCard.x = @message_window.x
  175. @spr_PlayerCard.y = @message_window.y - @spr_PlayerCard.bitmap.height - 27
  176.  
  177. @spr_TheirCard = Sprite.new
  178. @spr_TheirCard.bitmap = Cache.picture("Card#{@their_card_id}")
  179. @spr_TheirCard.x = @message_window.x + @message_window.width - @spr_TheirCard.bitmap.width
  180. @spr_TheirCard.y = @spr_PlayerCard.y
  181.  
  182. @spr_chars = Sprite.new
  183. @spr_chars.bitmap = Bitmap.new(Graphics.width,Graphics.height)
  184.  
  185. @spr_texts = Sprite.new
  186. @spr_texts.bitmap = Bitmap.new(Graphics.width,Graphics.height)
  187. @spr_texts.bitmap.fill_rect(@spr_PlayerCard.x,@spr_PlayerCard.y - 24,@spr_PlayerCard.bitmap.width,20,Color.new(0,0,0,150))
  188. @spr_texts.bitmap.fill_rect(@spr_TheirCard.x,@spr_TheirCard.y - 24,@spr_TheirCard.bitmap.width,20,Color.new(0,0,0,150))
  189. @spr_texts.bitmap.draw_text(@spr_PlayerCard.x,@spr_PlayerCard.y - 25,@spr_PlayerCard.bitmap.width,24,"Your Card", 1)
  190. @spr_texts.bitmap.draw_text(@spr_TheirCard.x,@spr_TheirCard.y - 25,@spr_TheirCard.bitmap.width,24,"Their Card", 1)
  191. @spr_texts.x = 0
  192. @spr_texts.y = 0
  193. @spr_texts.z = 300
  194.  
  195. @spr_card_names = Sprite.new
  196. @spr_card_names.bitmap = Bitmap.new(Graphics.width,Graphics.height)
  197. yy = @spr_PlayerCard.y + @spr_PlayerCard.height + 1
  198. player_card_name = $data_skills[@your_card_id].name
  199. if !@has_card
  200. @spr_PlayerCard.tone = Tone.new(0,0,0,200)
  201. @spr_PlayerCard.opacity = 220
  202. player_card_name = "?????????????????????"
  203. end
  204. their_card_name = $data_skills[@their_card_id].name
  205. @spr_card_names.bitmap.fill_rect(@spr_PlayerCard.x,yy + 2,@spr_PlayerCard.bitmap.width,20,Color.new(0,0,0,150))
  206. @spr_card_names.bitmap.fill_rect(@spr_TheirCard.x,yy + 2,@spr_PlayerCard.bitmap.width,20,Color.new(0,0,0,150))
  207. @spr_card_names.bitmap.draw_text(@spr_PlayerCard.x,yy,@spr_PlayerCard.bitmap.width,24,player_card_name, 1)
  208. @spr_card_names.bitmap.draw_text(@spr_TheirCard.x,yy,@spr_TheirCard.bitmap.width,24,their_card_name, 1)
  209.  
  210. name = $game_actors[1].character_name
  211. index = $game_actors[1].character_index
  212. their_name = @their_name
  213. their_index = @their_index
  214. draw_character(name, index, ACTOR_SPRITE_X, ACTOR_SPRITE_Y, @spr_chars.bitmap)
  215. draw_character(their_name, their_index, TRADER_SPRITE_X, TRADER_SPRITE_Y, @spr_chars.bitmap)
  216. @spr_chars.x = 0
  217. @spr_chars.y = 0
  218. @spr_chars.z = 260
  219. if !@has_card
  220. @message_window.draw_message(MESSAGES[:no_card])
  221. else
  222. @message_window.draw_message(MESSAGES[:has_card])
  223. @command_window.activate
  224. @command_window.open
  225. end
  226. end
  227. #--------------------------------------------------------------------------
  228. # * new method: terminate
  229. #--------------------------------------------------------------------------
  230. def terminate
  231. super
  232. @background_image.bitmap.dispose
  233. @background_image.dispose
  234. @spr_chars.bitmap.dispose
  235. @spr_chars.dispose
  236. @spr_texts.bitmap.dispose
  237. @spr_texts.dispose
  238. @spr_card_names.bitmap.dispose
  239. @spr_card_names.dispose
  240. @spr_PlayerCard.bitmap.dispose
  241. @spr_PlayerCard.dispose
  242. @spr_TheirCard.bitmap.dispose
  243. @spr_TheirCard.dispose
  244. end
  245. #--------------------------------------------------------------------------
  246. # * new method: redraw_names
  247. #--------------------------------------------------------------------------
  248. def redraw_names
  249. yy = @spr_PlayerCard.y + @spr_PlayerCard.height + 1
  250. player_card_name = $data_skills[@their_card_id].name
  251. their_card_name = $data_skills[@your_card_id].name
  252. @spr_card_names.bitmap.fill_rect(@spr_PlayerCard.x,yy + 2,@spr_PlayerCard.bitmap.width,20,Color.new(0,0,0,150))
  253. @spr_card_names.bitmap.fill_rect(@spr_TheirCard.x,yy + 2,@spr_PlayerCard.bitmap.width,20,Color.new(0,0,0,150))
  254. @spr_card_names.bitmap.draw_text(@spr_PlayerCard.x,yy,@spr_PlayerCard.bitmap.width,24,player_card_name, 1)
  255. @spr_card_names.bitmap.draw_text(@spr_TheirCard.x,yy,@spr_TheirCard.bitmap.width,24,their_card_name, 1)
  256. end
  257. #--------------------------------------------------------------------------
  258. # * new method: process_trade
  259. #--------------------------------------------------------------------------
  260. def process_trade
  261. des_x1 = @spr_TheirCard.x + 20
  262. des_x2 = @spr_PlayerCard.x
  263. @command_window.close
  264. while @spr_card_names.opacity > 0
  265. @command_window.update
  266. @spr_card_names.opacity -= 10
  267. @spr_texts.opacity -= 10
  268. Graphics.update
  269. end
  270. @spr_card_names.bitmap.clear
  271. redraw_names
  272. @message_window.draw_message("TRADING...")
  273. RPG::SE.new(*BEGIN_TRADE_SE).play
  274. @spr_PlayerCard.flash(Color.new(255,255,255), 30)
  275. @spr_TheirCard.flash(Color.new(255,255,255), 30)
  276. 30.times do
  277. Graphics.update
  278. @spr_PlayerCard.update
  279. @spr_TheirCard.update
  280. end
  281. RPG::SE.new(*BEGIN_TRADE_SE).play
  282. @spr_PlayerCard.flash(Color.new(255,255,255), 60)
  283. @spr_TheirCard.flash(Color.new(255,255,255), 60)
  284. 60.times do
  285. @command_window.update
  286. Graphics.update
  287. @spr_PlayerCard.update
  288. @spr_TheirCard.update
  289. end
  290. RPG::SE.new(*TRADING_SE).play
  291. loop do
  292. @command_window.update
  293. Graphics.update
  294. x1 = des_x1 - @spr_PlayerCard.x
  295. x2 = des_x2 - @spr_TheirCard.x
  296. if Math.sqrt(des_x1**2 - @spr_PlayerCard.x**2) > 1
  297. @spr_PlayerCard.x += x1*0.05
  298. else
  299. complete_1 ||= true
  300. end
  301. if Math.sqrt((des_x2**2 - @spr_TheirCard.x**2).abs) > 1
  302. @spr_TheirCard.x += x2*0.05
  303. else
  304. complete_2 ||= true
  305. end
  306. if complete_1 || complete_2
  307. break
  308. end
  309. end
  310. RPG::SE.new(*TRADE_COMPLETE_SE).play
  311. @spr_PlayerCard.flash(Color.new(255,255,255), 60)
  312. @spr_TheirCard.flash(Color.new(255,255,255), 60)
  313. 60.times do
  314. @command_window.update
  315. Graphics.update
  316. @spr_PlayerCard.update
  317. @spr_TheirCard.update
  318. @spr_card_names.opacity += 10
  319. @spr_texts.opacity += 10
  320. end
  321. @message_window.draw_message(MESSAGES[:success_trade])
  322. $game_switches[@switch_id] = true
  323. $game_system.recently_trade_stt = true
  324. process_gain_lose_card
  325. @success_trade = true
  326. end
  327. #--------------------------------------------------------------------------
  328. # * new method: process_gain_lose_card
  329. #--------------------------------------------------------------------------
  330. def process_gain_lose_card
  331. @interpreter.add_card_to_coll(@their_card_id)
  332. @interpreter.remove_card?(@your_card_id)
  333. end
  334. #--------------------------------------------------------------------------
  335. # * new method: cancel_trade
  336. #--------------------------------------------------------------------------
  337. def cancel_trade
  338. @command_window.close
  339. @command_window.deactivate
  340. @message_window.draw_message(MESSAGES[:cancel_trade])
  341. @cancel_trade = true
  342. end
  343. #--------------------------------------------------------------------------
  344. # * new method: update_no_card_input
  345. #--------------------------------------------------------------------------
  346. def update_no_card_input
  347. while true
  348. Input.update
  349. Graphics.update
  350. if Input.trigger?(:B)
  351. break
  352. return_scene
  353. end
  354. end
  355. end
  356. #--------------------------------------------------------------------------
  357. # * new method: update_parallax
  358. #--------------------------------------------------------------------------
  359. def update_parallax
  360. return unless @has_parallax
  361. @background_image.ox += SCROLL_X if Graphics.frame_count % 3 == 0
  362. @background_image.oy += SCROLL_Y if Graphics.frame_count % 3 == 0
  363. end
  364. #--------------------------------------------------------------------------
  365. # * new method: update
  366. #--------------------------------------------------------------------------
  367. def update
  368. super
  369. update_parallax
  370. if !@has_card or @cancel_trade or @success_trade
  371. if Input.trigger?(:B)
  372. Sound.play_cancel
  373. return_scene
  374. end
  375. end
  376. end # update
  377. end # Scene_CardTrading
  378.  
  379. class Window_TradeCommand < Window_Command
  380. #--------------------------------------------------------------------------
  381. # * new method: trade_card
  382. #--------------------------------------------------------------------------
  383. def window_width
  384. return 150
  385. end
  386. #--------------------------------------------------------------------------
  387. # * new method: trade_card
  388. #--------------------------------------------------------------------------
  389. def alignment
  390. return 1
  391. end
  392. #--------------------------------------------------------------------------
  393. # * new method: trade_card
  394. #--------------------------------------------------------------------------
  395. def make_command_list
  396. add_command("Trade!", :ok)
  397. add_command("No!", :cancel)
  398. end
  399. end # Window_TradeCommand
  400.  
  401. class Game_System
  402. attr_accessor :recently_trade_stt
  403. alias_method(:dsi_recently_trade_stt_initialize, :initialize)
  404. #--------------------------------------------------------------------------
  405. # * alias method: initialize
  406. #--------------------------------------------------------------------------
  407. def initialize
  408. @recently_trade_stt = false
  409. dsi_recently_trade_stt_initialize # Call original method
  410. end
  411. end # Game_System
  412.  
  413. class Window_CardTradeMessage < Window_Base
  414. #--------------------------------------------------------------------------
  415. # * new method: draw_message
  416. #--------------------------------------------------------------------------
  417. def draw_message(message)
  418. contents.clear
  419. text_bitmap = Bitmap.new(contents_width,contents_height)
  420. text_bitmap.turn_on_wordwraping
  421. text_bitmap.draw_text_ex(0,0,message, false)
  422. contents.blt(0,0, text_bitmap, text_bitmap.rect)
  423. draw_text_ex(contents_width - OTHER_BUTTONS_MARGIN,contents_height - 24,OTHER_BUTTONS_TEXT)
  424. end
  425. end # Window_CardTradeMessage
  426. #===============================================================================
  427. # * END OF FILE
  428. #===============================================================================
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement