SHOW:
|
|
- or go back to the newest paste.
1 | #============================================================================== | |
2 | # | |
3 | # ▼ Yanfly Engine Ace - Class System v1.10 | |
4 | # -- Last Updated: 2012.12.03 | |
5 | # -- Level: Normal, Hard | |
6 | # -- Requires: n/a | |
7 | # | |
8 | #============================================================================== | |
9 | ||
10 | $imported = {} if $imported.nil? | |
11 | $imported["YEA-ClassSystem"] = true | |
12 | ||
13 | #============================================================================== | |
14 | # ▼ Updates | |
15 | # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
16 | # 2012.12.03 - Added JP after the name of the class, in the class list. By SoundReaper. | |
17 | # 2012.08.06 - Leveling issue if class level exceeds actor level. | |
18 | # 2012.01.29 - Visual Bug: Disabled classes now have faded icons. | |
19 | # 2012.01.08 - Compatibility Update: Learn Skill Engine | |
20 | # 2012.01.05 - Bug Fixed: Equipment no longer gets duplicated. | |
21 | # 2012.01.04 - Update: Autobattle will no longer use skills not available to | |
22 | # that class for specific actors. | |
23 | # 2012.01.02 - Efficiency Update. | |
24 | # 2011.12.26 - Added custom command functionality. | |
25 | # 2011.12.23 - Compatibility Update: Class Specifics. | |
26 | # 2011.12.22 - Compatibility Update: Ace Menu Engine. | |
27 | # 2011.12.20 - Compatibility Update: Class Unlock Level. | |
28 | # 2011.12.19 - Started Script and Finished. | |
29 | # | |
30 | #============================================================================== | |
31 | # ▼ Introduction | |
32 | # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
33 | # This script adds the ability for your player to freely change the classes of | |
34 | # actors outside of battle from a menu. When changing classes, this script | |
35 | # gives the option for the developer to choose whether or not classes have | |
36 | # their own levels (causing the actor's level to reset back to the class's | |
37 | # level) or to maintain the current level. In addition to providing the ability | |
38 | # to change classes, equipping a subclass is also doable, and the mechanics of | |
39 | # having a subclass can also be defined within this script. | |
40 | # | |
41 | #============================================================================== | |
42 | # ▼ Instructions | |
43 | # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
44 | # To install this script, open up your script editor and copy/paste this script | |
45 | # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save. | |
46 | # | |
47 | # ----------------------------------------------------------------------------- | |
48 | # Actor Notetags - These notetags go in the actors notebox in the database. | |
49 | # ----------------------------------------------------------------------------- | |
50 | # <unlocked classes: x> | |
51 | # <unlocked classes: x, x> | |
52 | # This will set the default classes as unlocked for the actor. This does not | |
53 | # override the default classes unlocked in the module, but instead, adds on | |
54 | # to the number of unlocked classes. | |
55 | # | |
56 | # ----------------------------------------------------------------------------- | |
57 | # Class Notetags - These notetags go in the class notebox in the database. | |
58 | # ----------------------------------------------------------------------------- | |
59 | # <icon: x> | |
60 | # Sets the icon representing the class to x. | |
61 | # | |
62 | # <help description> | |
63 | # string | |
64 | # string | |
65 | # </help description> | |
66 | # Sets the text used for the help window in the class scene. Multiple lines in | |
67 | # the notebox will be strung together. Use | for a line break. | |
68 | # | |
69 | # ----------------------------------------------------------------------------- | |
70 | # Script Calls - These commands are used with script calls. | |
71 | # ----------------------------------------------------------------------------- | |
72 | # $game_actors[x].unlock_class(y) | |
73 | # This allows actor x to unlock class y, making it available for switching in | |
74 | # and out in the Class scene. | |
75 | # | |
76 | # $game_actors[x].remove_class(y) | |
77 | # This causes actor x to remove class y from being able to switch to and from. | |
78 | # If the actor is currently class y, the class will not be removed. If the | |
79 | # actor's current subclass is y, the subclass will be unequipped. | |
80 | # | |
81 | #============================================================================== | |
82 | # ▼ Compatibility | |
83 | # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
84 | # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that | |
85 | # it will run with RPG Maker VX without adjusting. | |
86 | # | |
87 | #============================================================================== | |
88 | ||
89 | module YEA | |
90 | module CLASS_SYSTEM | |
91 | ||
92 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
93 | # - General Class Settings - | |
94 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
95 | # These are the general settings regarding the whole script. They control | |
96 | # various rules and regulations that this script undergoes. These settings | |
97 | # will also determine what a subclass can do for a player. | |
98 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
99 | CLASS_MENU_TEXT = "Professions" # Text that appears in the Main Menu. | |
100 | MAINTAIN_LEVELS = false # Maintain through all classes. Default: false. | |
101 | DEFAULT_UNLOCKS = [] # Classes unlocked by default. | |
102 | ||
103 | # The display between a primary class and a subclass when written in a | |
104 | # window will appear as such. | |
105 | SUBCLASS_TEXT = "%s/%s" | |
106 | ||
107 | # This adjusts the stat rate inheritance for an actor if an actor has a | |
108 | # subclass equipped. If you want to disable this, set the rate to 0.0. | |
109 | SUBCLASS_STAT_RATE = 0.20 | |
110 | ||
111 | # This adds subclass skill types to the available skill types usable. | |
112 | SUBCLASS_SKILL_TYPES = true | |
113 | ||
114 | # This adds subclass weapons to equippable weapon types. | |
115 | SUBCLASS_WEAPON_TYPES = true | |
116 | ||
117 | # This adds subclass weapons to equippable armour types. | |
118 | SUBCLASS_ARMOUR_TYPES = true | |
119 | ||
120 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
121 | # - Class Scene Commands - | |
122 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
123 | # These settings adjust how the class scene appears. Here, you can adjust | |
124 | # the command list and the order at which items appear. These are mostly | |
125 | # visual settings. Adjust them as you see fit. | |
126 | # | |
127 | # ------------------------------------------------------------------------- | |
128 | # :command Description | |
129 | # ------------------------------------------------------------------------- | |
130 | # :primary Allows the player to change the primary class. | |
131 | # :subclass Allows the player to change the subclass. | |
132 | # | |
133 | # :learn_skill Requires YEA - Learn Skill Engine | |
134 | # | |
135 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
136 | COMMANDS =[ # The order at which the menu items are shown. | |
137 | # [ :command, "Display"], | |
138 | [ :primary, "Principale"], | |
139 | # [:subclass, "Secondaire"], | |
140 | [:learn_skill, "Apprentissage"], | |
141 | # [ :custom1, "Custom1"], | |
142 | # [ :custom2, "Custom2"], | |
143 | ] # Do not remove this. | |
144 | ||
145 | #-------------------------------------------------------------------------- | |
146 | # - Status Class Commands - | |
147 | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | |
148 | # For those who use scripts to that may produce unique effects for the | |
149 | # class menu, use this hash to manage the custom commands for the Class | |
150 | # Command Window. You can disable certain commands or prevent them from | |
151 | # appearing by using switches. If you don't wish to bind them to a switch, | |
152 | # set the proper switch to 0 for it to have no impact. | |
153 | #-------------------------------------------------------------------------- | |
154 | CUSTOM_CLASS_COMMANDS ={ | |
155 | # :command => [EnableSwitch, ShowSwitch, Handler Method, | |
156 | :custom1 => [ 0, 0, :command_name1], | |
157 | :custom2 => [ 0, 0, :command_name2], | |
158 | } # Do not remove this. | |
159 | ||
160 | # These settings adjust the colour displays for classes. | |
161 | CURRENT_CLASS_COLOUR = 17 # "Window" colour used for current class. | |
162 | SUBCLASS_COLOUR = 4 # "Window" colour used for subclass. | |
163 | ||
164 | # This adjusts the display for class levels if MAINTAIN_LEVELS is false. | |
165 | CLASS_LEVEL = "Niv.%s" # Text display for level. | |
166 | LEVEL_FONT_SIZE = 16 # Font size used for level. | |
167 | ||
168 | # This array sets the order of how classes are ordered in the class listing | |
169 | # window. Any class ID's unlisted will not be shown. | |
170 | CLASS_ORDER = [41..999, 1..40] | |
171 | ||
172 | # This adjusts the font size for the Parameters window. | |
173 | PARAM_FONT_SIZE = 20 | |
174 | ||
175 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
176 | # - Switch Settings - | |
177 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
178 | # These are the switches that govern whether or not certain menu items will | |
179 | # appear and/or will be enabled. By binding them to a Switch, you can just | |
180 | # set the Switch ON/OFF to show/hide or enable/disable a menu command. If | |
181 | # you do not wish to use this feature, set these commands to 0. | |
182 | #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
183 | SWITCH_SHOW_CLASS = 0 # Switch that shows Class in Main Menu. | |
184 | SWITCH_ENABLE_CLASS = 0 # Switch that enables Class in Main Menu. | |
185 | SWITCH_SHOW_PRIMARY = 0 # Switch that shows Subclass in Class Menu. | |
186 | SWITCH_ENABLE_PRIMARY = 0 # Switch that enables Subclass in Class Menu. | |
187 | SWITCH_SHOW_SUBCLASS = 0 # Switch that shows Subclass in Class Menu. | |
188 | SWITCH_ENABLE_SUBCLASS = 0 # Switch that enables Subclass in Class Menu. | |
189 | ||
190 | end # CLASS_SYSTEM | |
191 | end # YEA | |
192 | ||
193 | #============================================================================== | |
194 | # ▼ Editting anything past this point may potentially result in causing | |
195 | # computer damage, incontinence, explosion of user's head, coma, death, and/or | |
196 | # halitosis so edit at your own risk. | |
197 | #============================================================================== | |
198 | ||
199 | module YEA | |
200 | module CLASS_SYSTEM | |
201 | module_function | |
202 | #-------------------------------------------------------------------------- | |
203 | # convert_integer_array | |
204 | #-------------------------------------------------------------------------- | |
205 | def convert_integer_array(array) | |
206 | result = [] | |
207 | array.each { |i| | |
208 | case i | |
209 | when Range; result |= i.to_a | |
210 | when Integer; result |= [i] | |
211 | end } | |
212 | return result | |
213 | end | |
214 | #-------------------------------------------------------------------------- | |
215 | # converted_contants | |
216 | #-------------------------------------------------------------------------- | |
217 | DEFAULT_UNLOCKS = convert_integer_array(DEFAULT_UNLOCKS) | |
218 | CLASS_ORDER = convert_integer_array(CLASS_ORDER) | |
219 | end # CLASS_SYSTEM | |
220 | module REGEXP | |
221 | module ACTOR | |
222 | ||
223 | UNLOCKED_CLASSES = | |
224 | /<(?:UNLOCKED_CLASSES|unlocked classes):[ ]*(\d+(?:\s*,\s*\d+)*)>/i | |
225 | ||
226 | end # ACTOR | |
227 | module CLASS | |
228 | ||
229 | ICON_INDEX = /<(?:ICON_INDEX|icon index|icon):[ ](\d+)>/i | |
230 | HELP_DESCRIPTION_ON = /<(?:HELP_DESCRIPTION|help description)>/i | |
231 | HELP_DESCRIPTION_OFF = /<\/(?:HELP_DESCRIPTION|help description)>/i | |
232 | ||
233 | end # CLASS | |
234 | end # REGEXP | |
235 | end # YEA | |
236 | ||
237 | #============================================================================== | |
238 | # ■ Switch | |
239 | #============================================================================== | |
240 | ||
241 | module Switch | |
242 | ||
243 | #-------------------------------------------------------------------------- | |
244 | # self.class_show | |
245 | #-------------------------------------------------------------------------- | |
246 | def self.class_show | |
247 | return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_CLASS <= 0 | |
248 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_CLASS] | |
249 | end | |
250 | ||
251 | #-------------------------------------------------------------------------- | |
252 | # self.class_enable | |
253 | #-------------------------------------------------------------------------- | |
254 | def self.class_enable | |
255 | return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_CLASS <= 0 | |
256 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_CLASS] | |
257 | end | |
258 | ||
259 | #-------------------------------------------------------------------------- | |
260 | # self.primary_show | |
261 | #-------------------------------------------------------------------------- | |
262 | def self.primary_show | |
263 | return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_PRIMARY <= 0 | |
264 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_PRIMARY] | |
265 | end | |
266 | ||
267 | #-------------------------------------------------------------------------- | |
268 | # self.primary_enable | |
269 | #-------------------------------------------------------------------------- | |
270 | def self.primary_enable | |
271 | return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_PRIMARY <= 0 | |
272 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_PRIMARY] | |
273 | end | |
274 | ||
275 | #-------------------------------------------------------------------------- | |
276 | # self.subclass_show | |
277 | #-------------------------------------------------------------------------- | |
278 | def self.subclass_show | |
279 | return true if YEA::CLASS_SYSTEM::SWITCH_SHOW_SUBCLASS <= 0 | |
280 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_SHOW_SUBCLASS] | |
281 | end | |
282 | ||
283 | #-------------------------------------------------------------------------- | |
284 | # self.subclass_enable | |
285 | #-------------------------------------------------------------------------- | |
286 | def self.subclass_enable | |
287 | return true if YEA::CLASS_SYSTEM::SWITCH_ENABLE_SUBCLASS <= 0 | |
288 | return $game_switches[YEA::CLASS_SYSTEM::SWITCH_ENABLE_SUBCLASS] | |
289 | end | |
290 | ||
291 | end # Switch | |
292 | ||
293 | #============================================================================== | |
294 | # ■ Numeric | |
295 | #============================================================================== | |
296 | ||
297 | class Numeric | |
298 | ||
299 | #-------------------------------------------------------------------------- | |
300 | # new method: group_digits | |
301 | #-------------------------------------------------------------------------- | |
302 | unless $imported["YEA-CoreEngine"] | |
303 | def group; return self.to_s; end | |
304 | end # $imported["YEA-CoreEngine"] | |
305 | ||
306 | end # Numeric | |
307 | ||
308 | #============================================================================== | |
309 | # ■ DataManager | |
310 | #============================================================================== | |
311 | ||
312 | module DataManager | |
313 | ||
314 | #-------------------------------------------------------------------------- | |
315 | # alias method: load_database | |
316 | #-------------------------------------------------------------------------- | |
317 | class <<self; alias load_database_cs load_database; end | |
318 | def self.load_database | |
319 | load_database_cs | |
320 | load_notetags_cs | |
321 | end | |
322 | ||
323 | #-------------------------------------------------------------------------- | |
324 | # new method: load_notetags_cs | |
325 | #-------------------------------------------------------------------------- | |
326 | def self.load_notetags_cs | |
327 | groups = [$data_actors, $data_classes] | |
328 | for group in groups | |
329 | for obj in group | |
330 | next if obj.nil? | |
331 | obj.load_notetags_cs | |
332 | end | |
333 | end | |
334 | end | |
335 | ||
336 | end # DataManager | |
337 | ||
338 | #============================================================================== | |
339 | # ■ RPG::Actor | |
340 | #============================================================================== | |
341 | ||
342 | class RPG::Actor < RPG::BaseItem | |
343 | ||
344 | #-------------------------------------------------------------------------- | |
345 | # public instance variables | |
346 | #-------------------------------------------------------------------------- | |
347 | attr_accessor :unlocked_classes | |
348 | ||
349 | #-------------------------------------------------------------------------- | |
350 | # common cache: load_notetags_cs | |
351 | #-------------------------------------------------------------------------- | |
352 | def load_notetags_cs | |
353 | @unlocked_classes = [] | |
354 | #--- | |
355 | self.note.split(/[\r\n]+/).each { |line| | |
356 | case line | |
357 | #--- | |
358 | when YEA::REGEXP::ACTOR::UNLOCKED_CLASSES | |
359 | $1.scan(/\d+/).each { |num| | |
360 | @unlocked_classes.push(num.to_i) if num.to_i > 0 } | |
361 | #--- | |
362 | end | |
363 | } # self.note.split | |
364 | #--- | |
365 | end | |
366 | ||
367 | end # RPG::Actor | |
368 | ||
369 | #============================================================================== | |
370 | # ■ RPG::Class | |
371 | #============================================================================== | |
372 | ||
373 | class RPG::Class < RPG::BaseItem | |
374 | ||
375 | #-------------------------------------------------------------------------- | |
376 | # public instance variables | |
377 | #-------------------------------------------------------------------------- | |
378 | attr_accessor :icon_index | |
379 | ||
380 | #-------------------------------------------------------------------------- | |
381 | # common cache: load_notetags_cs | |
382 | #-------------------------------------------------------------------------- | |
383 | def load_notetags_cs | |
384 | @icon_index = 0 | |
385 | @help_description_on = false | |
386 | #--- | |
387 | self.note.split(/[\r\n]+/).each { |line| | |
388 | case line | |
389 | #--- | |
390 | when YEA::REGEXP::CLASS::ICON_INDEX | |
391 | @icon_index = $1.to_i | |
392 | #--- | |
393 | when YEA::REGEXP::CLASS::HELP_DESCRIPTION_ON | |
394 | @help_description_on = true | |
395 | when YEA::REGEXP::CLASS::HELP_DESCRIPTION_OFF | |
396 | @help_description_on = false | |
397 | #--- | |
398 | else | |
399 | @description += line.to_s if @help_description_on | |
400 | end | |
401 | } # self.note.split | |
402 | #--- | |
403 | @description.gsub!(/[|]/i) { "\n" } | |
404 | end | |
405 | ||
406 | end # RPG::Class | |
407 | ||
408 | #============================================================================== | |
409 | # ■ Game_Temp | |
410 | #============================================================================== | |
411 | ||
412 | class Game_Temp | |
413 | ||
414 | #-------------------------------------------------------------------------- | |
415 | # public instance variables | |
416 | #-------------------------------------------------------------------------- | |
417 | attr_accessor :scene_class_index | |
418 | attr_accessor :scene_class_oy | |
419 | ||
420 | end # Game_Temp | |
421 | ||
422 | #============================================================================== | |
423 | # ■ Game_Action | |
424 | #============================================================================== | |
425 | ||
426 | class Game_Action | |
427 | ||
428 | #-------------------------------------------------------------------------- | |
429 | # alias method: valid? | |
430 | #-------------------------------------------------------------------------- | |
431 | alias game_action_valid_cs valid? | |
432 | def valid? | |
433 | return false if check_auto_battle_class | |
434 | return game_action_valid_cs | |
435 | end | |
436 | ||
437 | #-------------------------------------------------------------------------- | |
438 | # new method: check_auto_battle_class | |
439 | #-------------------------------------------------------------------------- | |
440 | def check_auto_battle_class | |
441 | return false unless subject.actor? | |
442 | return false unless subject.auto_battle? | |
443 | return false if item.nil? | |
444 | return false if subject.added_skill_types.include?(item.stype_id) | |
445 | return false if item.id == subject.attack_skill_id | |
446 | return true | |
447 | end | |
448 | ||
449 | end # Game_Action | |
450 | ||
451 | #============================================================================== | |
452 | # ■ Game_BattlerBase | |
453 | #============================================================================== | |
454 | ||
455 | class Game_BattlerBase | |
456 | ||
457 | #-------------------------------------------------------------------------- | |
458 | # public instance variables | |
459 | #-------------------------------------------------------------------------- | |
460 | attr_accessor :temp_flag | |
461 | ||
462 | #-------------------------------------------------------------------------- | |
463 | # alias method: added_skill_types | |
464 | #-------------------------------------------------------------------------- | |
465 | alias game_battlerbase_added_skill_types_cs added_skill_types | |
466 | def added_skill_types | |
467 | result = game_battlerbase_added_skill_types_cs | |
468 | result |= subclass_skill_types | |
469 | return result | |
470 | end | |
471 | ||
472 | #-------------------------------------------------------------------------- | |
473 | # new method: subclass_skill_types | |
474 | #-------------------------------------------------------------------------- | |
475 | def subclass_skill_types; return []; end | |
476 | ||
477 | #-------------------------------------------------------------------------- | |
478 | # alias method: equip_wtype_ok? | |
479 | #-------------------------------------------------------------------------- | |
480 | alias game_battlerbase_equip_wtype_ok_cs equip_wtype_ok? | |
481 | def equip_wtype_ok?(wtype_id) | |
482 | return true if subclass_equip_wtype?(wtype_id) | |
483 | return game_battlerbase_equip_wtype_ok_cs(wtype_id) | |
484 | end | |
485 | ||
486 | #-------------------------------------------------------------------------- | |
487 | # new method: subclass_equip_wtype? | |
488 | #-------------------------------------------------------------------------- | |
489 | def subclass_equip_wtype?(wtype_id); return false; end | |
490 | ||
491 | #-------------------------------------------------------------------------- | |
492 | # alias method: equip_atype_ok? | |
493 | #-------------------------------------------------------------------------- | |
494 | alias game_battlerbase_equip_atype_ok_cs equip_atype_ok? | |
495 | def equip_atype_ok?(atype_id) | |
496 | return true if subclass_equip_atype?(atype_id) | |
497 | return game_battlerbase_equip_atype_ok_cs(atype_id) | |
498 | end | |
499 | ||
500 | #-------------------------------------------------------------------------- | |
501 | # new method: subclass_equip_atype? | |
502 | #-------------------------------------------------------------------------- | |
503 | def subclass_equip_atype?(atype_id); return false; end | |
504 | ||
505 | end # Game_BattlerBase | |
506 | ||
507 | #============================================================================== | |
508 | # ■ Game_Actor | |
509 | #============================================================================== | |
510 | ||
511 | class Game_Actor < Game_Battler | |
512 | ||
513 | #-------------------------------------------------------------------------- | |
514 | # alias method: setup | |
515 | #-------------------------------------------------------------------------- | |
516 | alias game_actor_setup_cs setup | |
517 | def setup(actor_id) | |
518 | game_actor_setup_cs(actor_id) | |
519 | init_unlocked_classes | |
520 | init_subclass | |
521 | end | |
522 | ||
523 | #-------------------------------------------------------------------------- | |
524 | # new method: init_unlocked_classes | |
525 | #-------------------------------------------------------------------------- | |
526 | def init_unlocked_classes | |
527 | @unlocked_classes = actor.unlocked_classes.clone | |
528 | @unlocked_classes.push(@class_id) if !@unlocked_classes.include?(@class_id) | |
529 | @unlocked_classes.sort! | |
530 | end | |
531 | ||
532 | #-------------------------------------------------------------------------- | |
533 | # new method: init_subclass | |
534 | #-------------------------------------------------------------------------- | |
535 | def init_subclass | |
536 | @subclass_id = 0 | |
537 | end | |
538 | ||
539 | #-------------------------------------------------------------------------- | |
540 | # new method: unlocked_classes | |
541 | #-------------------------------------------------------------------------- | |
542 | def unlocked_classes | |
543 | init_unlocked_classes if @unlocked_classes.nil? | |
544 | return @unlocked_classes | |
545 | end | |
546 | ||
547 | #-------------------------------------------------------------------------- | |
548 | # new method: unlock_class | |
549 | #-------------------------------------------------------------------------- | |
550 | def unlock_class(class_id) | |
551 | init_unlocked_classes if @unlocked_classes.nil? | |
552 | return if @unlocked_classes.include?(class_id) | |
553 | @unlocked_classes.push(class_id) | |
554 | learn_class_skills(class_id) | |
555 | end | |
556 | ||
557 | #-------------------------------------------------------------------------- | |
558 | # new method: remove_class | |
559 | #-------------------------------------------------------------------------- | |
560 | def remove_class(class_id) | |
561 | init_unlocked_classes if @unlocked_classes.nil? | |
562 | return if class_id == @class_id | |
563 | @unlocked_classes.delete(class_id) | |
564 | @subclass_id = 0 if class_id == @subclass_id | |
565 | refresh | |
566 | end | |
567 | ||
568 | #-------------------------------------------------------------------------- | |
569 | # new method: subclass | |
570 | #-------------------------------------------------------------------------- | |
571 | def subclass | |
572 | init_subclass if @subclass_id.nil? | |
573 | return $data_classes[@subclass_id] | |
574 | end | |
575 | ||
576 | #-------------------------------------------------------------------------- | |
577 | # alias method: change_class | |
578 | #-------------------------------------------------------------------------- | |
579 | alias game_actor_change_class_cs change_class | |
580 | def change_class(class_id, keep_exp = false) | |
581 | @subclass_id = 0 if @subclass_id == class_id | |
582 | game_actor_change_class_cs(class_id, keep_exp) | |
583 | learn_class_skills(class_id) | |
584 | unlock_class(class_id) | |
585 | end | |
586 | ||
587 | #-------------------------------------------------------------------------- | |
588 | # new method: learn_class_skills | |
589 | #-------------------------------------------------------------------------- | |
590 | def learn_class_skills(class_id) | |
591 | return if class_id <= 0 | |
592 | return if $data_classes[class_id].nil? | |
593 | $data_classes[class_id].learnings.each do |learning| | |
594 | learn_skill(learning.skill_id) if learning.level == class_level(class_id) | |
595 | end | |
596 | end | |
597 | ||
598 | #-------------------------------------------------------------------------- | |
599 | # new method: change_subclass | |
600 | #-------------------------------------------------------------------------- | |
601 | def change_subclass(class_id) | |
602 | return if class_id == @class_id | |
603 | unlock_class(class_id) | |
604 | @subclass_id = @subclass_id == class_id ? 0 : class_id | |
605 | learn_class_skills(@subclass_id) | |
606 | refresh | |
607 | end | |
608 | #————————————————————————– | |
609 | # new method: class_level Edited by DisturbedInside | |
610 | #————————————————————————– | |
611 | def class_level(class_id) | |
612 | return @level if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS | |
613 | temp_class = $data_classes[class_id] | |
614 | @exp[class_id] = 0 if @exp[class_id].nil? | |
615 | #declare a max level (using EXP) | |
616 | #If you can’t find it, go to the class database and select exp curve | |
617 | #then switch view to total at the top | |
618 | @exp[max_level] = 2547133 #This is the value to change. It declares a max level | |
619 | #You need to calculate how much exp for max level | |
620 | #Do it manually if using Yanfly-Adjusting Limits | |
621 | #To calculate max level exp if using Yanfly-adjusting limits is all math!! | |
622 | ||
623 | # Level 99 = 2547133 | |
624 | # to calculate past there…. have to add on multiples of 50744 | |
625 | # Level 110 = 3156061 | |
626 | # To go from 99 -> 110 have to add on 12 multiples of 50744. | |
627 | n = 1 | |
628 | loop do | |
629 | break if temp_class.exp_for_level(n+1) > @exp[class_id] | |
630 | n += 1 | |
631 | #add a restriction to “kick out” of loop if exp exceeds max level exp | |
632 | break if temp_class.exp_for_level(n+1) > @exp[max_level] | |
633 | end | |
634 | return n | |
635 | end | |
636 | ||
637 | #-------------------------------------------------------------------------- | |
638 | # new method: subclass_level | |
639 | #-------------------------------------------------------------------------- | |
640 | def subclass_level | |
641 | return 0 if @subclass_id == 0 | |
642 | return @level if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS | |
643 | return class_level(@subclass_id) | |
644 | end | |
645 | ||
646 | #-------------------------------------------------------------------------- | |
647 | # alias method: param_base | |
648 | #-------------------------------------------------------------------------- | |
649 | alias game_actor_param_base_cs param_base | |
650 | def param_base(param_id) | |
651 | result = game_actor_param_base_cs(param_id) | |
652 | unless subclass.nil? | |
653 | subclass_rate = YEA::CLASS_SYSTEM::SUBCLASS_STAT_RATE | |
654 | slevel = subclass_level | |
655 | result += subclass.params[param_id, slevel] * subclass_rate | |
656 | end | |
657 | return result.to_i | |
658 | end | |
659 | ||
660 | #-------------------------------------------------------------------------- | |
661 | # new method: subclass_skill_types | |
662 | #-------------------------------------------------------------------------- | |
663 | def subclass_skill_types | |
664 | return [] unless YEA::CLASS_SYSTEM::SUBCLASS_SKILL_TYPES | |
665 | return [] if subclass.nil? | |
666 | array = [] | |
667 | for feature in subclass.features | |
668 | next unless feature.code == FEATURE_STYPE_ADD | |
669 | next if features_set(FEATURE_STYPE_ADD).include?(feature.data_id) | |
670 | array.push(feature.data_id) | |
671 | end | |
672 | return array | |
673 | end | |
674 | ||
675 | #-------------------------------------------------------------------------- | |
676 | # new method: subclass_equip_wtype? | |
677 | #-------------------------------------------------------------------------- | |
678 | def subclass_equip_wtype?(wtype_id) | |
679 | return false unless YEA::CLASS_SYSTEM::SUBCLASS_WEAPON_TYPES | |
680 | return false if subclass.nil? | |
681 | for feature in subclass.features | |
682 | next unless feature.code == FEATURE_EQUIP_WTYPE | |
683 | return true if wtype_id == feature.data_id | |
684 | end | |
685 | return super | |
686 | end | |
687 | ||
688 | #-------------------------------------------------------------------------- | |
689 | # new method: subclass_equip_atype? | |
690 | #-------------------------------------------------------------------------- | |
691 | def subclass_equip_atype?(atype_id) | |
692 | return false unless YEA::CLASS_SYSTEM::SUBCLASS_ARMOUR_TYPES | |
693 | return false if subclass.nil? | |
694 | for feature in subclass.features | |
695 | next unless feature.code == FEATURE_EQUIP_ATYPE | |
696 | return true if atype_id == feature.data_id | |
697 | end | |
698 | return super | |
699 | end | |
700 | ||
701 | #-------------------------------------------------------------------------- | |
702 | # alias method: release_unequippable_items | |
703 | #-------------------------------------------------------------------------- | |
704 | alias game_actor_release_unequippable_items_cs release_unequippable_items | |
705 | def release_unequippable_items(item_gain = true) | |
706 | item_gain = false if @temp_flag | |
707 | game_actor_release_unequippable_items_cs(item_gain) | |
708 | end | |
709 | ||
710 | end # Game_Actor | |
711 | ||
712 | #============================================================================== | |
713 | # ■ Game_Interpreter | |
714 | #============================================================================== | |
715 | ||
716 | class Game_Interpreter | |
717 | ||
718 | #-------------------------------------------------------------------------- | |
719 | # overwrite method: command_321 | |
720 | #-------------------------------------------------------------------------- | |
721 | def command_321 | |
722 | actor = $game_actors[@params[0]] | |
723 | if actor && $data_classes[@params[1]] | |
724 | maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS | |
725 | actor.change_class(@params[1], maintain) | |
726 | end | |
727 | end | |
728 | ||
729 | end # Game_Interpreter | |
730 | ||
731 | #============================================================================== | |
732 | # ■ Window_Base | |
733 | #============================================================================== | |
734 | ||
735 | class Window_Base < Window | |
736 | ||
737 | #-------------------------------------------------------------------------- | |
738 | # overwrite method: draw_actor_class | |
739 | #-------------------------------------------------------------------------- | |
740 | def draw_actor_class(actor, x, y, width = 112) | |
741 | change_color(normal_color) | |
742 | if actor.subclass.nil? | |
743 | text = actor.class.name | |
744 | else | |
745 | fmt = YEA::CLASS_SYSTEM::SUBCLASS_TEXT | |
746 | text = sprintf(fmt, actor.class.name, actor.subclass.name) | |
747 | end | |
748 | draw_text(x, y, width, line_height, text) | |
749 | end | |
750 | ||
751 | end # Window_Base | |
752 | ||
753 | #============================================================================== | |
754 | # ■ Window_MenuCommand | |
755 | #============================================================================== | |
756 | ||
757 | class Window_MenuCommand < Window_Command | |
758 | ||
759 | #-------------------------------------------------------------------------- | |
760 | # alias method: add_formation_command | |
761 | #-------------------------------------------------------------------------- | |
762 | alias window_menucommand_add_formation_command_cs add_formation_command | |
763 | def add_formation_command | |
764 | add_class_command unless $imported["YEA-AceMenuEngine"] | |
765 | window_menucommand_add_formation_command_cs | |
766 | end | |
767 | ||
768 | #-------------------------------------------------------------------------- | |
769 | # new method: add_class_command | |
770 | #-------------------------------------------------------------------------- | |
771 | def add_class_command | |
772 | return unless Switch.class_show | |
773 | text = YEA::CLASS_SYSTEM::CLASS_MENU_TEXT | |
774 | add_command(text, :class, Switch.class_enable) | |
775 | end | |
776 | ||
777 | end # Window_MenuCommand | |
778 | ||
779 | #============================================================================== | |
780 | # ■ Window_ClassCommand | |
781 | #============================================================================== | |
782 | ||
783 | class Window_ClassCommand < Window_Command | |
784 | ||
785 | #-------------------------------------------------------------------------- | |
786 | # initialize | |
787 | #-------------------------------------------------------------------------- | |
788 | def initialize(x, y) | |
789 | super(x, y) | |
790 | @actor = nil | |
791 | end | |
792 | ||
793 | #-------------------------------------------------------------------------- | |
794 | # ● ウィンドウ幅の取得 | |
795 | #-------------------------------------------------------------------------- | |
796 | def window_width; return 160; end | |
797 | ||
798 | #-------------------------------------------------------------------------- | |
799 | # actor= | |
800 | #-------------------------------------------------------------------------- | |
801 | def actor=(actor) | |
802 | return if @actor == actor | |
803 | @actor = actor | |
804 | refresh | |
805 | end | |
806 | ||
807 | #-------------------------------------------------------------------------- | |
808 | # item_window= | |
809 | #-------------------------------------------------------------------------- | |
810 | def item_window=(window) | |
811 | @item_window = window | |
812 | end | |
813 | ||
814 | #-------------------------------------------------------------------------- | |
815 | # visible_line_number | |
816 | #-------------------------------------------------------------------------- | |
817 | def visible_line_number; return 4; end | |
818 | ||
819 | #-------------------------------------------------------------------------- | |
820 | # make_command_list | |
821 | #-------------------------------------------------------------------------- | |
822 | def make_command_list | |
823 | return if @actor.nil? | |
824 | for command in YEA::CLASS_SYSTEM::COMMANDS | |
825 | case command[0] | |
826 | when :primary | |
827 | next unless Switch.primary_show | |
828 | add_command(command[1], command[0], Switch.primary_enable) | |
829 | when :subclass | |
830 | next unless Switch.subclass_show | |
831 | add_command(command[1], command[0], Switch.subclass_enable) | |
832 | when :learn_skill | |
833 | next unless $imported["YEA-LearnSkillEngine"] | |
834 | add_learn_skill_command | |
835 | else | |
836 | process_custom_command(command) | |
837 | end | |
838 | end | |
839 | if !$game_temp.scene_class_index.nil? | |
840 | select($game_temp.scene_class_index) | |
841 | self.oy = $game_temp.scene_class_oy | |
842 | end | |
843 | $game_temp.scene_class_index = nil | |
844 | $game_temp.scene_class_oy = nil | |
845 | end | |
846 | ||
847 | #-------------------------------------------------------------------------- | |
848 | # process_ok | |
849 | #-------------------------------------------------------------------------- | |
850 | def process_ok | |
851 | $game_temp.scene_class_index = index | |
852 | $game_temp.scene_class_oy = self.oy | |
853 | super | |
854 | end | |
855 | ||
856 | #-------------------------------------------------------------------------- | |
857 | # process_custom_command | |
858 | #-------------------------------------------------------------------------- | |
859 | def process_custom_command(command) | |
860 | return unless YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS.include?(command[0]) | |
861 | show = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][1] | |
862 | continue = show <= 0 ? true : $game_switches[show] | |
863 | return unless continue | |
864 | text = command[1] | |
865 | switch = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][0] | |
866 | enabled = switch <= 0 ? true : $game_switches[switch] | |
867 | add_command(text, command[0], enabled) | |
868 | end | |
869 | ||
870 | #-------------------------------------------------------------------------- | |
871 | # update | |
872 | #-------------------------------------------------------------------------- | |
873 | def update | |
874 | super | |
875 | update_visible_windows | |
876 | end | |
877 | ||
878 | #-------------------------------------------------------------------------- | |
879 | # update_visible_windows | |
880 | #-------------------------------------------------------------------------- | |
881 | def update_visible_windows | |
882 | return if @current_index == current_symbol | |
883 | @current_index = current_symbol | |
884 | @item_window.refresh unless @item_window.nil? | |
885 | end | |
886 | ||
887 | #-------------------------------------------------------------------------- | |
888 | # add_learn_skill_command | |
889 | #-------------------------------------------------------------------------- | |
890 | def add_learn_skill_command | |
891 | return unless Switch.show_learn_skill | |
892 | name = YEA::LEARN_SKILL::COMMAND_NAME | |
893 | add_command(name, :learn_skill, true) | |
894 | end | |
895 | ||
896 | end # Window_ClassCommand | |
897 | ||
898 | #============================================================================== | |
899 | # ■ Window_ClassStatus | |
900 | #============================================================================== | |
901 | ||
902 | class Window_ClassStatus < Window_Base | |
903 | ||
904 | #-------------------------------------------------------------------------- | |
905 | # initialize | |
906 | #-------------------------------------------------------------------------- | |
907 | def initialize(dx, dy) | |
908 | super(dx, dy, window_width, fitting_height(4)) | |
909 | @actor = nil | |
910 | end | |
911 | ||
912 | #-------------------------------------------------------------------------- | |
913 | # window_width | |
914 | #-------------------------------------------------------------------------- | |
915 | def window_width; Graphics.width - 160; end | |
916 | ||
917 | #-------------------------------------------------------------------------- | |
918 | # actor= | |
919 | #-------------------------------------------------------------------------- | |
920 | def actor=(actor) | |
921 | return if @actor == actor | |
922 | @actor = actor | |
923 | refresh | |
924 | end | |
925 | ||
926 | #-------------------------------------------------------------------------- | |
927 | # refresh | |
928 | #-------------------------------------------------------------------------- | |
929 | def refresh | |
930 | contents.clear | |
931 | return if @actor.nil? | |
932 | draw_actor_face(@actor, 0, 0) | |
933 | draw_actor_simple_status(@actor, 108, line_height / 2) | |
934 | end | |
935 | ||
936 | end # Window_ClassStatus | |
937 | ||
938 | #============================================================================== | |
939 | # ■ Window_ClassParam | |
940 | #============================================================================== | |
941 | ||
942 | class Window_ClassParam < Window_Base | |
943 | ||
944 | #-------------------------------------------------------------------------- | |
945 | # initialize | |
946 | #-------------------------------------------------------------------------- | |
947 | def initialize(dx, dy) | |
948 | super(dx, dy, window_width, Graphics.height - dy) | |
949 | @actor = nil | |
950 | @temp_actor = nil | |
951 | refresh | |
952 | end | |
953 | ||
954 | #-------------------------------------------------------------------------- | |
955 | # window_width | |
956 | #-------------------------------------------------------------------------- | |
957 | def window_width; return Graphics.width * 2 / 5; end | |
958 | ||
959 | #-------------------------------------------------------------------------- | |
960 | # actor= | |
961 | #-------------------------------------------------------------------------- | |
962 | def actor=(actor) | |
963 | return if @actor == actor | |
964 | @actor = actor | |
965 | refresh | |
966 | end | |
967 | ||
968 | #-------------------------------------------------------------------------- | |
969 | # refresh | |
970 | #-------------------------------------------------------------------------- | |
971 | def refresh | |
972 | contents.clear | |
973 | 8.times {|i| draw_item(0, line_height * i, i) } | |
974 | end | |
975 | ||
976 | #-------------------------------------------------------------------------- | |
977 | # set_temp_actor | |
978 | #-------------------------------------------------------------------------- | |
979 | def set_temp_actor(temp_actor) | |
980 | return if @temp_actor == temp_actor | |
981 | @temp_actor = temp_actor | |
982 | refresh | |
983 | end | |
984 | ||
985 | #-------------------------------------------------------------------------- | |
986 | # draw_item | |
987 | #-------------------------------------------------------------------------- | |
988 | def draw_item(dx, dy, param_id) | |
989 | draw_background_colour(dx, dy) | |
990 | draw_param_name(dx + 4, dy, param_id) | |
991 | draw_current_param(dx + 4, dy, param_id) if @actor | |
992 | drx = (contents.width + 22) / 2 | |
993 | draw_right_arrow(drx, dy) | |
994 | draw_new_param(drx + 22, dy, param_id) if @temp_actor | |
995 | reset_font_settings | |
996 | end | |
997 | ||
998 | #-------------------------------------------------------------------------- | |
999 | # draw_background_colour | |
1000 | #-------------------------------------------------------------------------- | |
1001 | def draw_background_colour(dx, dy) | |
1002 | colour = Color.new(0, 0, 0, translucent_alpha/2) | |
1003 | rect = Rect.new(dx+1, dy+1, contents.width - 2, line_height - 2) | |
1004 | contents.fill_rect(rect, colour) | |
1005 | end | |
1006 | ||
1007 | #-------------------------------------------------------------------------- | |
1008 | # overwrite method: draw_param_name | |
1009 | #-------------------------------------------------------------------------- | |
1010 | def draw_param_name(dx, dy, param_id) | |
1011 | contents.font.size = YEA::CLASS_SYSTEM::PARAM_FONT_SIZE | |
1012 | change_color(system_color) | |
1013 | draw_text(dx, dy, contents.width, line_height, Vocab::param(param_id)) | |
1014 | end | |
1015 | ||
1016 | #-------------------------------------------------------------------------- | |
1017 | # overwrite method: draw_current_param | |
1018 | #-------------------------------------------------------------------------- | |
1019 | def draw_current_param(dx, dy, param_id) | |
1020 | change_color(normal_color) | |
1021 | dw = (contents.width + 22) / 2 | |
1022 | draw_text(0, dy, dw, line_height, @actor.param(param_id).group, 2) | |
1023 | reset_font_settings | |
1024 | end | |
1025 | ||
1026 | #-------------------------------------------------------------------------- | |
1027 | # draw_right_arrow | |
1028 | #-------------------------------------------------------------------------- | |
1029 | def draw_right_arrow(x, y) | |
1030 | change_color(system_color) | |
1031 | draw_text(x, y, 22, line_height, "→", 1) | |
1032 | end | |
1033 | ||
1034 | #-------------------------------------------------------------------------- | |
1035 | # draw_new_param | |
1036 | #-------------------------------------------------------------------------- | |
1037 | def draw_new_param(dx, dy, param_id) | |
1038 | contents.font.size = YEA::CLASS_SYSTEM::PARAM_FONT_SIZE | |
1039 | new_value = @temp_actor.param(param_id) | |
1040 | change_color(param_change_color(new_value - @actor.param(param_id))) | |
1041 | draw_text(0, dy, contents.width-4, line_height, new_value.group, 2) | |
1042 | reset_font_settings | |
1043 | end | |
1044 | ||
1045 | end # Window_ClassParam | |
1046 | ||
1047 | #============================================================================== | |
1048 | # ■ Window_ClassList | |
1049 | #============================================================================== | |
1050 | ||
1051 | class Window_ClassList < Window_Selectable | |
1052 | ||
1053 | #-------------------------------------------------------------------------- | |
1054 | # initialize | |
1055 | #-------------------------------------------------------------------------- | |
1056 | def initialize(dx, dy) | |
1057 | dw = Graphics.width - (Graphics.width * 2 / 5) | |
1058 | dh = Graphics.height - dy | |
1059 | super(dx, dy, dw, dh) | |
1060 | @actor = nil | |
1061 | @command_window = nil | |
1062 | @status_window | |
1063 | @data = [] | |
1064 | end | |
1065 | ||
1066 | #-------------------------------------------------------------------------- | |
1067 | # actor= | |
1068 | #-------------------------------------------------------------------------- | |
1069 | def actor=(actor) | |
1070 | return if @actor == actor | |
1071 | @actor = actor | |
1072 | @last_item = nil | |
1073 | refresh | |
1074 | self.oy = 0 | |
1075 | end | |
1076 | ||
1077 | #-------------------------------------------------------------------------- | |
1078 | # command_window= | |
1079 | #-------------------------------------------------------------------------- | |
1080 | def command_window=(command_window) | |
1081 | @command_window = command_window | |
1082 | end | |
1083 | ||
1084 | #-------------------------------------------------------------------------- | |
1085 | # status_window= | |
1086 | #-------------------------------------------------------------------------- | |
1087 | def status_window=(status_window) | |
1088 | @status_window = status_window | |
1089 | end | |
1090 | ||
1091 | #-------------------------------------------------------------------------- | |
1092 | # item_max | |
1093 | #-------------------------------------------------------------------------- | |
1094 | def item_max; return @data ? @data.size : 1; end | |
1095 | ||
1096 | #-------------------------------------------------------------------------- | |
1097 | # item | |
1098 | #-------------------------------------------------------------------------- | |
1099 | def item; return @data && index >= 0 ? @data[index] : nil; end | |
1100 | ||
1101 | #-------------------------------------------------------------------------- | |
1102 | # current_item_enabled? | |
1103 | #-------------------------------------------------------------------------- | |
1104 | def current_item_enabled?; return enable?(@data[index]); end | |
1105 | ||
1106 | #-------------------------------------------------------------------------- | |
1107 | # include? | |
1108 | #-------------------------------------------------------------------------- | |
1109 | def include?(item) | |
1110 | return true if YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS.include?(item.id) | |
1111 | return @actor.unlocked_classes.include?(item.id) | |
1112 | end | |
1113 | ||
1114 | #-------------------------------------------------------------------------- | |
1115 | # enable? | |
1116 | #-------------------------------------------------------------------------- | |
1117 | def enable?(item) | |
1118 | return false if item == @actor.class | |
1119 | return true | |
1120 | end | |
1121 | ||
1122 | #-------------------------------------------------------------------------- | |
1123 | # make_item_list | |
1124 | #-------------------------------------------------------------------------- | |
1125 | def make_item_list | |
1126 | @data = [] | |
1127 | for class_id in YEA::CLASS_SYSTEM::CLASS_ORDER | |
1128 | next if $data_classes[class_id].nil? | |
1129 | item = $data_classes[class_id] | |
1130 | @data.push(item) if include?(item) | |
1131 | end | |
1132 | end | |
1133 | ||
1134 | #-------------------------------------------------------------------------- | |
1135 | # select_last | |
1136 | #-------------------------------------------------------------------------- | |
1137 | def select_last | |
1138 | case @command_window.current_symbol | |
1139 | when :primary | |
1140 | select(@data.index(@actor.class)) | |
1141 | when :subclass | |
1142 | select(0) if @actor.subclass.nil? | |
1143 | select(@data.index(@actor.subclass)) unless @actor.subclass.nil? | |
1144 | else | |
1145 | select(0) | |
1146 | end | |
1147 | end | |
1148 | ||
1149 | #-------------------------------------------------------------------------- | |
1150 | # draw_item | |
1151 | #-------------------------------------------------------------------------- | |
1152 | def draw_item(index) | |
1153 | item = @data[index] | |
1154 | return if item.nil? | |
1155 | rect = item_rect(index) | |
1156 | rect.width -= 4 | |
1157 | reset_font_settings | |
1158 | set_item_colour(item) | |
1159 | draw_class_icon(item, rect) | |
1160 | draw_class_name(item, rect) | |
1161 | draw_class_level(item, rect) | |
1162 | draw_class_jp(item, rect) | |
1163 | end | |
1164 | ||
1165 | #-------------------------------------------------------------------------- | |
1166 | # set_item_colour | |
1167 | #-------------------------------------------------------------------------- | |
1168 | def set_item_colour(item) | |
1169 | if item == @actor.class | |
1170 | change_color(text_color(YEA::CLASS_SYSTEM::CURRENT_CLASS_COLOUR)) | |
1171 | elsif item == @actor.subclass | |
1172 | change_color(text_color(YEA::CLASS_SYSTEM::SUBCLASS_COLOUR)) | |
1173 | else | |
1174 | change_color(normal_color, enable?(item)) | |
1175 | end | |
1176 | end | |
1177 | ||
1178 | #-------------------------------------------------------------------------- | |
1179 | # draw_class_icon | |
1180 | #-------------------------------------------------------------------------- | |
1181 | def draw_class_icon(item, rect) | |
1182 | icon = item.icon_index | |
1183 | draw_icon(icon, rect.x, rect.y, enable?(item)) | |
1184 | end | |
1185 | ||
1186 | #-------------------------------------------------------------------------- | |
1187 | # draw_class_name | |
1188 | #-------------------------------------------------------------------------- | |
1189 | def draw_class_name(item, rect) | |
1190 | text = item.name | |
1191 | draw_text(24, rect.y, rect.width-24, line_height, text) | |
1192 | end | |
1193 | ||
1194 | #-------------------------------------------------------------------------- | |
1195 | # draw_class_level | |
1196 | #-------------------------------------------------------------------------- | |
1197 | def draw_class_level(item, rect) | |
1198 | return if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS | |
1199 | return if @actor.nil? | |
1200 | level = @actor.class_level(item.id) | |
1201 | contents.font.size = YEA::CLASS_SYSTEM::LEVEL_FONT_SIZE | |
1202 | text = sprintf(YEA::CLASS_SYSTEM::CLASS_LEVEL, level.group) | |
1203 | draw_text(rect, text, 2) | |
1204 | end | |
1205 | ||
1206 | #-------------------------------------------------------------------------- | |
1207 | # draw_class_jp | |
1208 | #-------------------------------------------------------------------------- | |
1209 | def draw_class_jp(item, rect) | |
1210 | return unless $imported["YEA-JPManager"] | |
1211 | draw_actor_jp_class(@actor, item.id, rect.x+rect.width/2, rect.y) | |
1212 | end | |
1213 | ||
1214 | #-------------------------------------------------------------------------- | |
1215 | # update_help | |
1216 | #-------------------------------------------------------------------------- | |
1217 | def update_help | |
1218 | @help_window.set_item(item) | |
1219 | return if @actor.nil? | |
1220 | return if @status_window.nil? | |
1221 | update_param_window | |
1222 | end | |
1223 | ||
1224 | #-------------------------------------------------------------------------- | |
1225 | # update_param_window | |
1226 | #-------------------------------------------------------------------------- | |
1227 | def update_param_window | |
1228 | return if @last_item == item | |
1229 | @last_item = item | |
1230 | class_id = item.nil? ? @actor.class_id : item.id | |
1231 | temp_actor = Marshal.load(Marshal.dump(@actor)) | |
1232 | temp_actor.temp_flag = true | |
1233 | case @command_window.current_symbol | |
1234 | when :primary | |
1235 | temp_actor.change_class(class_id, YEA::CLASS_SYSTEM::MAINTAIN_LEVELS) | |
1236 | when :subclass | |
1237 | temp_actor.change_subclass(class_id) | |
1238 | end | |
1239 | @status_window.set_temp_actor(temp_actor) | |
1240 | end | |
1241 | ||
1242 | #-------------------------------------------------------------------------- | |
1243 | # update_class | |
1244 | #-------------------------------------------------------------------------- | |
1245 | def update_class | |
1246 | @last_item = nil | |
1247 | update_help | |
1248 | refresh | |
1249 | activate | |
1250 | end | |
1251 | ||
1252 | #-------------------------------------------------------------------------- | |
1253 | # refresh | |
1254 | #-------------------------------------------------------------------------- | |
1255 | def refresh | |
1256 | make_item_list | |
1257 | create_contents | |
1258 | draw_all_items | |
1259 | end | |
1260 | ||
1261 | end # Window_ClassList | |
1262 | ||
1263 | #============================================================================== | |
1264 | # ■ Scene_Menu | |
1265 | #============================================================================== | |
1266 | ||
1267 | class Scene_Menu < Scene_MenuBase | |
1268 | ||
1269 | #-------------------------------------------------------------------------- | |
1270 | # alias method: create_command_window | |
1271 | #-------------------------------------------------------------------------- | |
1272 | alias scene_menu_create_command_window_cs create_command_window | |
1273 | def create_command_window | |
1274 | scene_menu_create_command_window_cs | |
1275 | @command_window.set_handler(:class, method(:command_personal)) | |
1276 | end | |
1277 | ||
1278 | #-------------------------------------------------------------------------- | |
1279 | # alias method: on_personal_ok | |
1280 | #-------------------------------------------------------------------------- | |
1281 | alias scene_menu_on_personal_ok_cs on_personal_ok | |
1282 | def on_personal_ok | |
1283 | case @command_window.current_symbol | |
1284 | when :class | |
1285 | SceneManager.call(Scene_Class) | |
1286 | else | |
1287 | scene_menu_on_personal_ok_cs | |
1288 | end | |
1289 | end | |
1290 | ||
1291 | end # Scene_Menu | |
1292 | ||
1293 | #============================================================================== | |
1294 | # ■ Scene_Class | |
1295 | #============================================================================== | |
1296 | ||
1297 | class Scene_Class < Scene_MenuBase | |
1298 | ||
1299 | #-------------------------------------------------------------------------- | |
1300 | # start | |
1301 | #-------------------------------------------------------------------------- | |
1302 | def start | |
1303 | super | |
1304 | create_help_window | |
1305 | create_command_window | |
1306 | create_status_window | |
1307 | create_param_window | |
1308 | create_item_window | |
1309 | relocate_windows | |
1310 | end | |
1311 | ||
1312 | #-------------------------------------------------------------------------- | |
1313 | # create_command_window | |
1314 | #-------------------------------------------------------------------------- | |
1315 | def create_command_window | |
1316 | wy = @help_window.height | |
1317 | @command_window = Window_ClassCommand.new(0, wy) | |
1318 | @command_window.viewport = @viewport | |
1319 | @command_window.help_window = @help_window | |
1320 | @command_window.actor = @actor | |
1321 | @command_window.set_handler(:cancel, method(:return_scene)) | |
1322 | @command_window.set_handler(:primary, method(:command_class_change)) | |
1323 | @command_window.set_handler(:subclass, method(:command_class_change)) | |
1324 | process_custom_class_commands | |
1325 | return if $game_party.in_battle | |
1326 | @command_window.set_handler(:pagedown, method(:next_actor)) | |
1327 | @command_window.set_handler(:pageup, method(:prev_actor)) | |
1328 | @command_window.set_handler(:learn_skill, method(:command_learn_skill)) | |
1329 | end | |
1330 | ||
1331 | #-------------------------------------------------------------------------- | |
1332 | # process_custom_class_commands | |
1333 | #-------------------------------------------------------------------------- | |
1334 | def process_custom_class_commands | |
1335 | for command in YEA::CLASS_SYSTEM::COMMANDS | |
1336 | next unless YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS.include?(command[0]) | |
1337 | called_method = YEA::CLASS_SYSTEM::CUSTOM_CLASS_COMMANDS[command[0]][2] | |
1338 | @command_window.set_handler(command[0], method(called_method)) | |
1339 | end | |
1340 | end | |
1341 | ||
1342 | #-------------------------------------------------------------------------- | |
1343 | # create_status_window | |
1344 | #-------------------------------------------------------------------------- | |
1345 | def create_status_window | |
1346 | wy = @help_window.height | |
1347 | @status_window = Window_ClassStatus.new(@command_window.width, wy) | |
1348 | @status_window.viewport = @viewport | |
1349 | @status_window.actor = @actor | |
1350 | end | |
1351 | ||
1352 | #-------------------------------------------------------------------------- | |
1353 | # create_param_window | |
1354 | #-------------------------------------------------------------------------- | |
1355 | def create_param_window | |
1356 | dx = Graphics.width - (Graphics.width * 2 / 5) | |
1357 | dy = @status_window.y + @status_window.height | |
1358 | @param_window = Window_ClassParam.new(dx, dy) | |
1359 | @param_window.viewport = @viewport | |
1360 | @param_window.actor = @actor | |
1361 | end | |
1362 | ||
1363 | #-------------------------------------------------------------------------- | |
1364 | # create_item_window | |
1365 | #-------------------------------------------------------------------------- | |
1366 | def create_item_window | |
1367 | dy = @status_window.y + @status_window.height | |
1368 | @item_window = Window_ClassList.new(0, dy) | |
1369 | @item_window.help_window = @help_window | |
1370 | @item_window.command_window = @command_window | |
1371 | @item_window.status_window = @param_window | |
1372 | @item_window.viewport = @viewport | |
1373 | @item_window.actor = @actor | |
1374 | @command_window.item_window = @item_window | |
1375 | @item_window.set_handler(:ok, method(:on_class_ok)) | |
1376 | @item_window.set_handler(:cancel, method(:on_class_cancel)) | |
1377 | end | |
1378 | ||
1379 | #-------------------------------------------------------------------------- | |
1380 | # relocate_windows | |
1381 | #-------------------------------------------------------------------------- | |
1382 | def relocate_windows | |
1383 | return unless $imported["YEA-AceMenuEngine"] | |
1384 | case Menu.help_window_location | |
1385 | when 0 # Top | |
1386 | @help_window.y = 0 | |
1387 | @command_window.y = @help_window.height | |
1388 | @param_window.y = @command_window.y + @command_window.height | |
1389 | when 1 # Middle | |
1390 | @command_window.y = 0 | |
1391 | @help_window.y = @command_window.height | |
1392 | @param_window.y = @help_window.y + @help_window.height | |
1393 | else # Bottom | |
1394 | @command_window.y = 0 | |
1395 | @param_window.y = @command_window.height | |
1396 | @help_window.y = @param_window.y + @param_window.height | |
1397 | end | |
1398 | @status_window.y = @command_window.y | |
1399 | @item_window.y = @param_window.y | |
1400 | end | |
1401 | ||
1402 | #-------------------------------------------------------------------------- | |
1403 | # on_actor_change | |
1404 | #-------------------------------------------------------------------------- | |
1405 | def on_actor_change | |
1406 | @command_window.actor = @actor | |
1407 | @status_window.actor = @actor | |
1408 | @param_window.actor = @actor | |
1409 | @item_window.actor = @actor | |
1410 | @command_window.activate | |
1411 | end | |
1412 | ||
1413 | #-------------------------------------------------------------------------- | |
1414 | # command_class_change | |
1415 | #-------------------------------------------------------------------------- | |
1416 | def command_class_change | |
1417 | @item_window.activate | |
1418 | @item_window.select_last | |
1419 | end | |
1420 | ||
1421 | #-------------------------------------------------------------------------- | |
1422 | # on_class_cancel | |
1423 | #-------------------------------------------------------------------------- | |
1424 | def on_class_cancel | |
1425 | @item_window.unselect | |
1426 | @command_window.activate | |
1427 | @param_window.set_temp_actor(nil) | |
1428 | end | |
1429 | ||
1430 | #-------------------------------------------------------------------------- | |
1431 | # on_class_ok | |
1432 | #-------------------------------------------------------------------------- | |
1433 | def on_class_ok | |
1434 | Sound.play_equip | |
1435 | class_id = @item_window.item.id | |
1436 | maintain = YEA::CLASS_SYSTEM::MAINTAIN_LEVELS | |
1437 | hp = @actor.hp * 1.0 / @actor.mhp | |
1438 | mp = @actor.mp * 1.0 / [@actor.mmp, 1].max | |
1439 | case @command_window.current_symbol | |
1440 | when :primary | |
1441 | @actor.change_class(class_id, maintain) | |
1442 | when :subclass | |
1443 | @actor.change_subclass(class_id) | |
1444 | else | |
1445 | @item_window.activate | |
1446 | return | |
1447 | end | |
1448 | @actor.hp = (@actor.mhp * hp).to_i | |
1449 | @actor.mp = (@actor.mmp * mp).to_i | |
1450 | @status_window.refresh | |
1451 | @item_window.update_class | |
1452 | end | |
1453 | ||
1454 | #-------------------------------------------------------------------------- | |
1455 | # new method: command_learn_skill | |
1456 | #-------------------------------------------------------------------------- | |
1457 | def command_learn_skill | |
1458 | return unless $imported["YEA-LearnSkillEngine"] | |
1459 | SceneManager.call(Scene_LearnSkill) | |
1460 | end | |
1461 | ||
1462 | #-------------------------------------------------------------------------- | |
1463 | # command_name1 | |
1464 | #-------------------------------------------------------------------------- | |
1465 | def command_name1 | |
1466 | # Do nothing. | |
1467 | end | |
1468 | ||
1469 | #-------------------------------------------------------------------------- | |
1470 | # command_name2 | |
1471 | #-------------------------------------------------------------------------- | |
1472 | def command_name2 | |
1473 | # Do nothing. | |
1474 | end | |
1475 | ||
1476 | end # Scene_Class | |
1477 | ||
1478 | #============================================================================== | |
1479 | # | |
1480 | # ▼ End of File | |
1481 | # | |
1482 | #============================================================================== |