-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathSkillTree_v2beta.js
3556 lines (3457 loc) · 129 KB
/
SkillTree_v2beta.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
"use strict";
/*:
@target MV MZ
@plugindesc スキルツリー v2.0.0-b1
@author うなぎおおとろ
@url https://raw.githubusercontent.com/unagiootoro/RPGMZ/master/SkillTree.js
@help
【使用方法】
■ スキルツリーの設定
スキルツリーの設定は、「SkillTreeConfig.js」ファイルを編集することで行います。
基本的な設定としては、アクターごとにスキルツリーのタイプ(剣スキルや魔法スキルなど)を設定し、
そしてタイプごとにスキルツリーを構築します。
スキルツリーの構築は、スキルの派生設定(ファイアⅠを取得したらファイアⅡが取得可能になるなど)によって行います。
■ SPの入手設定
スキルの習得には、SPが必要となります。
SPの入手方法としては
・戦闘終了による獲得
・レベルアップによるSP獲得
の二通りの設定を行うことができます。
・戦闘終了時に得られるSPの設定方法
敵キャラのメモ欄に
<battleEndGainSp: SP>
の形式で記載します。
・レベルアップによるSP獲得方法の設定
コンフィグの「levelUpGainSp」によって設定を行います。
■ イベントでSPを獲得する方法
スクリプトで
skt_gainSp(アクターID, 獲得するSP値)
と記載することで、該当のアクターが指定したSPを獲得することができます。
例えば、アクターIDが1のアクターが5SPを獲得する場合、
skt_gainSp(1, 5);
と記載します。
■ 割り振った累計SPの取得
skt_totalSp(アクターID, 累計SP格納先変数ID)
と記載することで、該当のアクターが今までに割り振ったSPを指定した変数に代入することができます。
例えば、アクターIDが1のアクターの累計SPをID2の変数に代入する場合、
skt_totalSp(1, 2);
と記載します。
■ スキルリセット
スクリプトで
skt_skillReset(アクターID);
と記載することで、一度習得したスキルをリセットすることができます。
例えば、アクターIDが1のアクターのスキルリセットを行う場合、
skt_skillReset(1);
と記載します。
■ スキルツリータイプの有効/無効
スクリプトで
skt_enableType(アクターID, "タイプ名");
と記載することで、タイプを有効にします。
無効にする場合は、
skt_disableType(アクターID, "タイプ名")
と記載します。
無効にしたタイプは、スキルツリーのタイプ一覧には表示されません。
■ タイプの引継ぎ
特定の条件を満たすとスキルツリーに新たなスキルが追加されるようにしたい場合、「タイプの引継ぎ」を使用します。
例えば、タイプ「下位魔法」を「上位魔法」に変更したい場合、あらかじめ両方のタイプをコンフィグに登録した上で、
「上位魔法」は無効化しておきます。そして、タイプの引継ぎ機能を用いて、「下位魔法」を「上位魔法」に引き継がせます。
タイプの引継ぎを行う場合、スクリプトで
skt_migrationType(アクターID, "引継ぎ元タイプ名", "引継ぎ先タイプ名", リセット有無);
と記載します。リセット有無については、引継ぎ後、引継ぎ元のタイプのスキルツリーをリセットする場合、trueを、
リセットしない場合、falseを指定します。
例えば、アクターIDが1のアクターが、タイプ「下位魔法」を「上位魔法」に引き継がせ、さらにスキルリセットを行う場合、
skt_migrationType(アクターID, "下位魔法", "上位魔法", true);
と記載します。
■ マップからスキルツリーを読み込む
マップからスキルツリーの各スキルの配置座標を読み込むことで、ある程度自由なレイアウトのスキルツリーを
作成することができます。この機能によって設定可能なのはスキルの座標のみであり、スキル間の線はプラグイン側で描画します。
・スキル座標の設定
マップ上のイベントにて、設定を行います。
例えば、"ファイア"というスキルがある場合、スキルを配置したい座標に空のイベントを作成し、
イベントのメモ欄に
ファイア
と記載します。すると、"ファイア"とメモ欄に記載したイベントのXY座標がスキルのXY座標として使用されます。
■ スクリプトからスキルツリーを起動
スクリプトで
skt_open(アクターID);
と記載することで、指定したアクターのスキルツリーを起動することができます。
■ スクリプトからスキルツリーのスキルを取得する
スクリプトで
skt_learn(アクターID, "タイプ名", スキル名, 強制取得有無(省略可));
と記載することで、指定したスキルを取得することができます。
スキル名は「skillTreeInfo」で指定したものを使用してください。
強制取得有無にtrueを設定した場合、習得可能か否かの判定を無視して強制的にスキルを取得します。
また、この場合SPは消費されません。
強制取得有無にfalseを設定した場合は通常通りの方法でスキルを取得します。この場合はSPも消費されます。
なおこの項目については省略可能です。省略した場合はfalseが適用されます。
例: アクターID1のキャラクターで、タイプ「剣技」のスキルツリーの「強撃」を取得する場合
skt_learn(1, "剣技", "強撃", false);
■ スキルツリーの横配置と縦配置
プラグインパラメータ「ビューレイアウト」内の「ビューモード」を設定することで、
スキルツリーを横方向に展開させるか縦方向に展開させるかを選択することができます。
■ スキル習得時の代わりにコモンイベントを実行する。
スキルのメモ欄に「LearnCommonEventId」を設定することで、
スキル習得時にスキルを覚える代わりにコモンイベントを実行することができます。
例えば、スキルのメモ欄に
<LearnCommonEventId: 1>
と記載すると、スキル習得時にID1のコモンイベントが実行されます。
また、
<ForgetCommonEventId: 2>
と記載した場合は、スキルリセットでスキルを忘れる代わりにID2のコモンイベントが実行されます。
■ プラグインコマンド
ツクールMZの場合、上記で解説したスクリプトを使用する代わりに
プラグインコマンドを使用することが可能です。
詳細については各種プラグインコマンドの説明を参照してください。
【ライセンス】
このプラグインは、MITライセンスの条件の下で利用可能です。
@command StartSkillTreeScene
@text スキルツリーシーン開始
@desc
スキルツリーシーンを開始します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
スキルツリーシーン開始対象のアクターIDを指定します。
@command SkillLearn
@text スキル習得
@desc
指定したスキルツリーのスキルを習得します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
アクターIDを指定します。
@arg TypeName
@text タイプ名
@type string
@desc
タイプ名を指定します。
@arg SkillId
@text スキルID
@type number
@desc
習得するスキルIDを指定します。
@command GainSp
@text SP獲得
@desc
SPを獲得します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
SP獲得対象のアクターIDを指定します。
@arg SpValue
@text SP値
@type number
@min -9999
@default 1
@desc
獲得するSP値を指定します。マイナスの値を指定するとSPを減らすことができます。
@arg SpValueVariableId
@text SP値(変数)
@type number
@default 0
@desc
変数で指定したSPを獲得します。SP値を直接指定した場合、このパラメータには0を指定してください。
@command GetTotalSp
@text トータルSP取得
@desc
割り振った全SPの値を取得します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
トータルSP取得対象のアクターIDを指定します。
@arg DestVariableId
@text 格納先変数
@type variable
@default 1
@desc
取得したトータルSPを格納する変数IDを指定します。
@command SkillReset
@text スキルリセット
@desc
スキルリセットを実行します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
スキルリセット実行対象のアクターIDを指定します。
@command SetTypeEnableOrDisable
@text タイプ有効/無効設定
@desc
スキルツリータイプの有効/無効を設定します。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
タイプ設定対象のアクターIDを指定します。
@arg TypeName
@text タイプ名
@type string
@desc
タイプ名を指定します。
@arg EnableOrDisable
@text 有効/無効
@type boolean
@desc
trueを設定するとタイプを有効にします。falseを設定するとタイプを無効にします。
@command MigrationType
@text タイプ引継ぎ
@desc
指定したスキルツリータイプを別のタイプに引き継ぎます。
@arg ActorId
@text アクターID
@type actor
@default 1
@desc
タイプ引継ぎ対象のアクターIDを指定します。
@arg SrcTypeName
@text 引継ぎ元タイプ名
@type string
@desc
タイプ名を指定します。
@arg DestTypeName
@text 引継ぎ先タイプ名
@type string
@desc
タイプ名を指定します。
@arg Reset
@text リセット有無
@type boolean
@default false
@desc
trueを指定すると、スキル引継ぎ後に引継ぎ元タイプのスキルツリーをリセットします。
@param MaxSp
@text 最大SP
@type number
@default 9999
@desc
取得可能なSPの最大値を設定します。
@param EnabledSkillTreeSwitchId
@text メニュースキルツリー有効化スイッチID
@type switch
@default 0
@desc
メニューコマンドでスキルツリーを有効/無効を設定するスイッチのIDを指定します。0を指定すると常にスキルツリーは有効になります。
@param EnableGetSpWhenBattleEnd
@text 戦闘終了時SP入手有効化
@type boolean
@default true
@desc
trueを設定すると、戦闘終了時にSPを入手できるようになります。
@param EnableGetSpWhenLevelUp
@text レベルアップ時SP入手有効化
@type boolean
@default true
@desc
trueを設定すると、レベルアップ時にSPを入手できるようになります。
@param SkillTreeManagementByClasses
@text 職業別スキルツリー管理
@type boolean
@default true
@desc
trueを設定すると、アクターごとの職業ごとにスキルツリーを管理するようにします。
@param ViewLayout
@text ビューレイアウト
@type struct<ViewLayout>
@desc
スキルツリービューのレイアウトに関するパラメータを設定します。
@param WindowLayout
@text ウィンドウレイアウト
@type struct<WindowLayout>
@default {"SkillTreeNodeInfoWidowHeight":"110","ActorInfoWindowHeight":"200","ActorInfoWindowFaceHeight":"100"}
@desc
ウィンドウのレイアウトに関するパラメータを設定します。
@param LearnSkillSe
@text スキル取得SE
@type struct<SE>
@default
@desc
スキルを習得したときに再生するSEを指定します。
@param IconXOfs
@text 拡張表示アイコンX座標オフセット
@type number
@default 5
@desc
拡張表示のアイコンのX座標オフセットを指定します。
@param OpenedImage
@text オープン済み画像
@type struct<OpenedImage>
@desc
習得済みスキルに追加する画像を設定します。
@param ChangeOpenedTextColor
@text 拡張表示オープン済みテキスト色
@type boolean
@default true
@desc
trueを設定すると、習得済みスキルの文字の色を変更します。
@param IconFontSize
@text 拡張表示アイコンフォントサイズ
@type number
@default 20
@desc
スキルの文字のフォントサイズを指定します。
@param BackgroundImage
@text 背景画像
@type struct<BackgroundImage>
@default {"FileName":"","BackgroundImage2":"[]","BackgroundImage2XOfs":"240","BackgroundImage2YOfs":"300"}
@desc
スキルツリーシーンの背景画像を設定します。
@param Text
@text テキスト一覧
@type struct<Text>
@default
@desc
各種テキストを指定します。
*/
/*~struct~ViewLayout:
@param ViewMode
@text ビューモード
@type select
@option ワイド
@value wide
@option ロング
@value long
@default wide
@desc
ワイドを設定すると、横にスキルツリーを表示します。ロングを設定すると、縦にスキルツリーを表示します。
@param EnableMZLayout
@text MZレイアウト有効化
@type boolean
@default false
@desc
trueを設定すると、RPGツクールMZのレイアウト形式に合わせます。(MZ限定)
@param IconWidth
@text アイコン横幅
@type number
@default 32
@desc
アイコンの横幅を指定します。
@param IconHeight
@text アイコン縦幅
@type number
@default 32
@desc
アイコンの縦幅を指定します。
@param IconSpaceWidth
@text アイコン間横スペース
@type number
@default 32
@desc
アイコン間のスペースの横幅を指定します。
@param IconSpaceHeight
@text アイコン間縦スペース
@type number
@default 32
@desc
アイコン間のスペースの縦幅を指定します。
@param ViewLineWidth
@text ビューライン幅
@type number
@default 2
@desc
ラインの幅を指定します。
@param ViewLineColorBase
@text スキル未収得ラインカラー
@type string
@default #000000
@desc
スキル未習得の線の色を指定します。
@param ViewLineColorLearned
@text スキル習得済みラインカラー
@type string
@default #00aaff
@desc
スキル習得済みの線の色を指定します。
@param ViewBeginXOffset
@text 描画開始X座標
@type number
@default 24
@desc
スキルツリーの描画開始X座標を指定します。
@param ViewBeginYOffset
@text 描画開始Y座標
@type number
@default 24
@desc
スキルツリーの描画開始Y座標を指定します。
@param ViewCursorOfs
@text カーソル座標オフセット
@type number
@default 6
@desc
スキルツリーのアイコンに対するカーソルの座標オフセットを指定します。
@param ViewRectColor
@text 取得済み矩形枠線色
@type string
@default #ffff00
@desc
取得済みスキルのアイコンを囲む枠線の色を指定します。
@param ViewRectOfs
@text 取得済み矩形座標オフセット
@type number
@default 1
@desc
取得済みスキルのアイコンを囲む枠線または枠画像の座標オフセットを指定します。
*/
/*~struct~WindowLayout:
@param SkillTreeNodeInfoWidowHeight
@text スキルツリーノード情報ウィンドウ縦幅
@type number
@default 110
@desc
スキルツリーノード情報ウィンドウの縦幅を指定します。
@param ActorInfoWindowHeight
@text アクター情報ウィンドウ縦幅
@type number
@default 200
@desc
アクター情報ウィンドウの縦幅を指定します。
@param ActorInfoWindowFaceHeight
@text アクター情報ウィンドウ顔グラフィック縦幅
@type number
@default 100
@desc
アクター情報ウィンドウに表示する顔グラフィックの縦幅を指定します。
*/
/*~struct~SE:
@param FileName
@text SEファイル名
@type file
@dir audio/se
@default Skill1
@desc
再生するSEのファイル名を指定します。
@param Volume
@text SE音量
@type number
@default 90
@desc
再生するSEのvolumeを指定します。
@param Pitch
@text SEピッチ
@type number
@default 100
@desc
再生するSEのpitchを指定します。
@param Pan
@text SE位相
@type number
@default 0
@desc
再生するSEのpanを指定します。
*/
/*~struct~Text:
@param MenuSkillTreeText
@text メニュースキルツリーテキスト
@type string
@default スキルツリー
@desc
メニューコマンドに表示するスキルツリーのコマンド名を指定します。
@param SpName
@text SP名称
@type string
@default SP
@desc
ゲーム中でのSPの名称を指定します。
@param NeedSpText
@text 必要SPテキスト
@type string
@default 必要%1:
@desc
スキルツリーウィンドウに表示する必要SPのテキストを指定します。%1:SP名
@param NeedGoldText
@text 必要ゴールドテキスト
@type string
@default 必要%1:
@desc
スキルツリーウィンドウに表示する必要ゴールドのテキストを指定します。%1:ゴールド名
@param OpenedNodeText
@text オープン済みテキスト
@type string
@default 取得済み
@desc
スキルが取得済みの場合に必要SPの代わりに表示するテキストを指定します。
@param NodeOpenConfirmationText
@text オープン確認テキスト
@type string
@default %1%2を消費して%3を取得しますか?
@desc
スキル取得有無の選択画面で、確認用のテキストを表示します。%1:消費するSP値, %2:SP名, %3:取得するスキル名
@param NodeOpenYesText
@text オープンYesテキスト
@type string
@default 習得する
@desc
スキル取得有無の選択画面で、スキルを取得する場合のテキストを指定します。
@param NodeOpenNoText
@text オープンNoテキスト
@type string
@default 習得しない
@desc
スキル取得有無の選択画面で、スキルを取得しない場合のテキストを指定します。
@param BattleEndGetSpText
@text バトル終了時SP入手テキスト
@type string
@default %1%2を入手した。
@desc
戦闘終了時にSPを入手したときに表示するテキストを指定します。%1:入手するSP値, %2:SP名
@param LevelUpGetSpText
@text レベルアップ時SP入手テキスト
@type string
@default %1%2を入手した。
@desc
レベルアップ時にSPを入手したときに表示するテキストを指定します。%1:入手するSP値, %2:SP名
*/
/*~struct~OpenedImage:
@param EnableOpenedImage
@text オープン済み画像有効化
@type boolean
@default false
@desc
trueを設定すると、習得済みスキルに画像を追加します。
@param FileName
@text ファイル名
@type file
@dir img
@desc
習得済みスキルに追加する画像のファイル名を指定します。
@param XOfs
@text X座標オフセット
@type number
@default 0
@desc
習得済みスキルに追加する画像のX座標オフセットを指定します。
@param YOfs
@text Y座標オフセット
@type number
@default 0
@desc
習得済みスキルに追加する画像のY座標オフセットを指定します。
*/
/*~struct~BackgroundImage:
@param FileName
@text ファイル名
@type file
@dir img
@desc
スキルツリーシーンの背景画像のファイル名を指定します。
@param BackgroundImage2
@text 背景画像2
@type struct<BackgroundImage2>[]
@default []
@dir img
@desc
スキルツリーシーンの背景画像に追加する画像のファイル名を指定します。
@param BackgroundImage2XOfs
@text 背景画像2 X座標オフセット
@type number
@default 240
@desc
スキルツリーシーンの背景画像に追加する画像のX座標オフセットを指定します。
@param BackgroundImage2YOfs
@text 背景画像2 Y座標オフセット
@type number
@default 300
@desc
スキルツリーシーンの背景画像に追加する画像のY座標オフセットを指定します。
*/
/*~struct~BackgroundImage2:
@param FileName
@text ファイル名
@type file
@dir img
@desc
スキルツリーシーンの背景画像のファイル名を指定します。
@param ActorId
@text アクターID
@type actor
@desc
アクターIDを指定します。
*/
const SkillTreePluginName = document.currentScript ? decodeURIComponent(document.currentScript.src.match(/^.*\/(.+)\.js$/)[1]) : "SkillTree";
let $skillTreeData;
let $skillTreeConfigLoader;
const $skillTreeMapLoaders = new Map();
function skt_open(actorId) {
$gameParty.setMenuActor($gameActors.actor(actorId));
SceneManager.push(SkillTreeClassAlias.Scene_SkillTree);
}
function skt_gainSp(actorId, value) {
const actor = $gameParty.members().find((actor) => actor.actorId() === actorId);
if (actor)
actor.gainSp(value);
}
function skt_skillReset(actorId) {
const totalSp = $skillTreeData.totalSpAllTypes(actorId);
$skillTreeData.skillResetAllTypes(actorId);
$skillTreeData.gainSp(actorId, totalSp);
}
function skt_totalSp(actorId, variableId) {
const totalSp = $skillTreeData.totalSpAllTypes(actorId);
$gameVariables.setValue(variableId, totalSp);
}
function skt_learn(actorId, typeName, skillId, force = false) {
const types = $skillTreeData.types(actorId);
const findedType = types.find((type) => type.skillTreeName() === typeName);
if (!findedType)
return;
if (force) {
$skillTreeData.forceOpenNode(findedType, skillId);
}
else {
$skillTreeData.openNode(findedType, skillId);
}
}
function skt_enableType(actorId, typeName) {
const types = $skillTreeData.types(actorId);
let targetType = null;
for (const type of types) {
if (type.skillTreeName() === typeName) {
targetType = type;
}
}
if (!targetType)
return;
targetType.setEnabled(true);
}
function skt_disableType(actorId, typeName) {
const types = $skillTreeData.types(actorId);
let targetType = null;
for (const type of types) {
if (type.skillTreeName() === typeName) {
targetType = type;
}
}
if (!targetType)
return;
targetType.setEnabled(false);
}
function skt_migrationType(actorId, fromTypeName, toTypeName, reset) {
let dstType = null;
let srcType = null;
const types = $skillTreeData.types(actorId);
for (const type of types) {
if (type.skillTreeName() === fromTypeName) {
srcType = type;
}
else if (type.skillTreeName() === toTypeName) {
dstType = type;
}
}
if (!dstType || !srcType)
return;
srcType.setEnabled(false);
dstType.setEnabled(true);
if (reset) {
const resetSp = $skillTreeData.totalSp(srcType);
$skillTreeData.skillReset(srcType);
$skillTreeData.gainSp(actorId, resetSp);
}
else {
$skillTreeData.copyTree(dstType, srcType);
$skillTreeData.skillReset(srcType);
}
}
var SkillTree;
(function (SkillTree) {
class PluginParamsParser {
constructor(predictEnable = true) {
this._predictEnable = predictEnable;
}
static parse(params, typeData, predictEnable = true) {
return new PluginParamsParser(predictEnable).parse(params, typeData);
}
parse(params, typeData, loopCount = 0) {
if (++loopCount > 255)
throw new Error("endless loop error");
const result = {};
for (const name in typeData) {
if (params[name] === "" || params[name] === undefined) {
result[name] = null;
}
else {
result[name] = this.convertParam(params[name], typeData[name], loopCount);
}
}
if (!this._predictEnable)
return result;
if (typeof params === "object" && !(params instanceof Array)) {
for (const name in params) {
if (result[name])
continue;
const param = params[name];
const type = this.predict(param);
result[name] = this.convertParam(param, type, loopCount);
}
}
return result;
}
convertParam(param, type, loopCount) {
if (typeof type === "string") {
return this.cast(param, type);
}
else if (typeof type === "object" && type instanceof Array) {
const aryParam = JSON.parse(param);
if (type[0] === "string") {
return aryParam.map((strParam) => this.cast(strParam, type[0]));
}
else {
return aryParam.map((strParam) => this.parse(JSON.parse(strParam), type[0]), loopCount);
}
}
else if (typeof type === "object") {
return this.parse(JSON.parse(param), type, loopCount);
}
else {
throw new Error(`${type} is not string or object`);
}
}
cast(param, type) {
switch (type) {
case "any":
if (!this._predictEnable)
throw new Error("Predict mode is disable");
return this.cast(param, this.predict(param));
case "string":
return param;
case "number":
if (param.match(/^\-?\d+\.\d+$/))
return parseFloat(param);
return parseInt(param);
case "boolean":
return param === "true";
default:
throw new Error(`Unknow type: ${type}`);
}
}
predict(param) {
if (param.match(/^\-?\d+$/) || param.match(/^\-?\d+\.\d+$/)) {
return "number";
}
else if (param === "true" || param === "false") {
return "boolean";
}
else {
return "string";
}
}
}
const typeDefine = {
ViewLayout: {},
WindowLayout: {},
Text: {},
LearnSkillSe: {},
OpenedImage: {},
BackgroundImage: {
BackgroundImage2: [{}]
},
};
const PP = PluginParamsParser.parse(PluginManager.parameters(SkillTreePluginName), typeDefine);
const MaxSp = PP.MaxSp;
const EnableGetSpWhenBattleEnd = PP.EnableGetSpWhenBattleEnd;
const EnableGetSpWhenLevelUp = PP.EnableGetSpWhenLevelUp;
const SkillTreeManagementByClasses = PP.SkillTreeManagementByClasses;
const EnabledSkillTreeSwitchId = PP.EnabledSkillTreeSwitchId;
const EnableMZLayout = PP.EnableMZLayout;
const ViewMode = PP.ViewLayout.ViewMode;
const IconWidth = PP.ViewLayout.IconWidth;
const IconHeight = PP.ViewLayout.IconHeight;
const IconSpaceWidth = PP.ViewLayout.IconSpaceWidth;
const IconSpaceHeight = PP.ViewLayout.IconSpaceHeight;
const ViewLineWidth = PP.ViewLayout.ViewLineWidth;
const ViewLineColorBase = PP.ViewLayout.ViewLineColorBase;
const ViewLineColorLearned = PP.ViewLayout.ViewLineColorLearned;
const ViewBeginXOffset = PP.ViewLayout.ViewBeginXOffset;
const ViewBeginYOffset = PP.ViewLayout.ViewBeginYOffset;
const ViewCursorOfs = PP.ViewLayout.ViewCursorOfs;
const ViewRectOfs = PP.ViewLayout.ViewRectOfs;
const ViewRectColor = PP.ViewLayout.ViewRectColor;
const SkillTreeNodeInfoWidowHeight = PP.WindowLayout.SkillTreeNodeInfoWidowHeight;
const ActorInfoWindowHeight = PP.WindowLayout.ActorInfoWindowHeight;
const ActorInfoWindowFaceHeight = PP.WindowLayout.ActorInfoWindowFaceHeight;
const LearnSkillSeFileName = PP.LearnSkillSe.FileName;
const LearnSkillSeVolume = PP.LearnSkillSe.Volume;
const LearnSkillSePitch = PP.LearnSkillSe.Pitch;
const LearnSkillSePan = PP.LearnSkillSe.Pan;
const SpName = PP.Text.SpName;
const MenuSkillTreeText = PP.Text.MenuSkillTreeText;
const NeedSpText = PP.Text.NeedSpText;
const NeedGoldText = PP.Text.NeedGoldText;
const OpenedNodeText = PP.Text.OpenedNodeText;
const NodeOpenConfirmationText = PP.Text.NodeOpenConfirmationText;
const NodeOpenYesText = PP.Text.NodeOpenYesText;
const NodeOpenNoText = PP.Text.NodeOpenNoText;
const BattleEndGetSpText = PP.Text.BattleEndGetSpText;
const LevelUpGetSpText = PP.Text.LevelUpGetSpText;
const OpenedImage = PP.OpenedImage;
const BackgroundImage = PP.BackgroundImage;
const ChangeOpenedTextColor = PP.ChangeOpenedTextColor;
const IconXOfs = PP.IconXOfs;
const IconFontSize = PP.IconFontSize;
class HttpResponse {
constructor(result, xhr) {
this._result = result;
this._xhr = xhr;
}
result() {
return this._result;
}
status() {
return this._xhr.status;
}
response() {
return this._xhr.response;
}
}
class HttpRequest {
constructor(path, method, opt = {}) {
this._path = path;
this._method = method;
this._mimeType = opt.mimeType == null ? null : opt.mimeType;
}
static get(path, opt = {}) {
const req = new HttpRequest(path, "GET", opt);
return req.send();
}
static post(path, params, opt = {}) {
const req = new HttpRequest(path, "POST", opt);
return req.send(params);
}
send(params = null) {
const xhr = new XMLHttpRequest();
xhr.open(this._method, this._path);
if (this._mimeType)
xhr.overrideMimeType(this._mimeType);
let json = null;
if (params)
json = JSON.stringify(params);
const promise = new Promise((resolve, reject) => {
xhr.addEventListener("load", (e) => {
resolve(new HttpResponse("load", xhr));
});
xhr.addEventListener("error", (e) => {
reject(new HttpResponse("error", xhr));
});
});
xhr.send(json);
return promise;
}
}
// Register plugin command.
if (Utils.RPGMAKER_NAME === "MZ") {
PluginManager.registerCommand(SkillTreePluginName, "StartSkillTreeScene", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number" });
$gameParty.setMenuActor($gameActors.actor(params.ActorId));
SceneManager.push(Scene_SkillTree);
});
PluginManager.registerCommand(SkillTreePluginName, "SkillLearn", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number", TypeName: "string", SkillId: "number" });
skt_learn(params.ActorId, params.TypeName, params.SkillId);
});
PluginManager.registerCommand(SkillTreePluginName, "GainSp", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number", SpValue: "number", SpValueVariableId: "number" });
let spValue;
if (params.SpValueVariableId === 0) {
spValue = params.SpValue;
}
else {
spValue = $gameVariables.value(params.SpValueVariableId);
}
skt_gainSp(params.ActorId, spValue);
});
PluginManager.registerCommand(SkillTreePluginName, "GetTotalSp", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number", DestVariableId: "number" });
skt_totalSp(params.ActorId, params.DestVariableId);
});
PluginManager.registerCommand(SkillTreePluginName, "SkillReset", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number" });
skt_skillReset(params.ActorId);
});
PluginManager.registerCommand(SkillTreePluginName, "SetTypeEnableOrDisable", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number", TypeName: "string", EnableOrDisable: "boolean" });
if (params.EnableOrDisable) {
skt_enableType(params.ActorId, params.TypeName);
}
else {
skt_disableType(params.ActorId, params.TypeName);
}
});
PluginManager.registerCommand(SkillTreePluginName, "MigrationType", (args) => {
const params = PluginParamsParser.parse(args, { ActorId: "number", SrcTypeName: "string", DestTypeName: "string", Reset: "boolean" });
skt_migrationType(params.ActorId, params.SrcTypeName, params.DestTypeName, params.Reset);
});
}
class ItemInfo {
constructor(type, id) {
this._type = type;
this._id = id;
}
get type() { return this._type; }
set type(_type) { this._type = _type; }
get id() { return this._id; }
set id(_id) { this._id = _id; }