From fe0d4455004eef1031b1d21237e44bd9229a1202 Mon Sep 17 00:00:00 2001 From: Aleos Date: Mon, 22 Nov 2021 15:49:28 -0500 Subject: [PATCH] Fixes HP/SP table issues (#6361) * Fixes #6360. * Adds missing HP/SP values for Rebellion, Baby Rebellion, Expanded Super Novice, Expanded Super Baby, Baby Summoner, Star Emperor, Baby Star Emperor, Soul Reaper, and Baby Soul Reaper. * Adds official HP/SP values for Summoner, Baby Summoner, Star Emperor, Baby Star Emperor, Soul Reaper, and Baby Soul Reaper. These are missing levels 176-200 though. * Fixes the BonusStats parser to properly check for the max job level. * Adds several logical checks for blocking level 0 during parse. * Adds several logical checks for skipping content over a job's max level for HP/SP and BEXP/JEXP. * Fixes the SP values being filled against the max job level instead of base level if the HP/SP Table wasn't being used. * The parser will now properly fill the HP/SP array with 0's so that the loadingFinished() function can properly calculate a value to insert if something is missing. * Adds a better solution to CSV2YAML when checking for the max base level when converting HP/SP. * Fixes the CSV2YAML generating bad job bonus stat conversions. Thanks to @kaninhot004 and @Lemongrass3110! Co-authored-by: Lemongrass3110 --- db/re/job_basepoints.yml | 1762 +++++++++++++++++++++++++++++++------- db/re/job_stats.yml | 167 ---- src/map/pc.cpp | 127 +-- src/tool/csv2yaml.cpp | 27 +- 4 files changed, 1553 insertions(+), 530 deletions(-) diff --git a/db/re/job_basepoints.yml b/db/re/job_basepoints.yml index 4218b07574..cef3b40e52 100644 --- a/db/re/job_basepoints.yml +++ b/db/re/job_basepoints.yml @@ -488,6 +488,208 @@ Body: Hp: 525 - Level: 99 Hp: 2530 + - Level: 100 + Hp: 2535 + - Level: 101 + Hp: 2540 + - Level: 102 + Hp: 2545 + - Level: 103 + Hp: 2550 + - Level: 104 + Hp: 2555 + - Level: 105 + Hp: 2560 + - Level: 106 + Hp: 2565 + - Level: 107 + Hp: 2570 + - Level: 108 + Hp: 2575 + - Level: 109 + Hp: 2580 + - Level: 110 + Hp: 2585 + - Level: 111 + Hp: 2590 + - Level: 112 + Hp: 2595 + - Level: 113 + Hp: 2600 + - Level: 114 + Hp: 2605 + - Level: 115 + Hp: 2610 + - Level: 116 + Hp: 2615 + - Level: 117 + Hp: 2620 + - Level: 118 + Hp: 2625 + - Level: 119 + Hp: 2630 + - Level: 120 + Hp: 2635 + - Level: 121 + Hp: 2640 + - Level: 122 + Hp: 2645 + - Level: 123 + Hp: 2650 + - Level: 124 + Hp: 2655 + - Level: 125 + Hp: 2660 + - Level: 126 + Hp: 2665 + - Level: 127 + Hp: 2670 + - Level: 128 + Hp: 2675 + - Level: 129 + Hp: 2680 + - Level: 130 + Hp: 2685 + - Level: 131 + Hp: 2690 + - Level: 132 + Hp: 2695 + - Level: 133 + Hp: 2700 + - Level: 134 + Hp: 2705 + - Level: 135 + Hp: 2710 + - Level: 136 + Hp: 2715 + - Level: 137 + Hp: 2720 + - Level: 138 + Hp: 2725 + - Level: 139 + Hp: 2730 + - Level: 140 + Hp: 2735 + - Level: 141 + Hp: 2740 + - Level: 142 + Hp: 2745 + - Level: 143 + Hp: 2750 + - Level: 144 + Hp: 2755 + - Level: 145 + Hp: 2760 + - Level: 146 + Hp: 2765 + - Level: 147 + Hp: 2770 + - Level: 148 + Hp: 2775 + - Level: 149 + Hp: 2780 + - Level: 150 + Hp: 4785 + - Level: 151 + Hp: 4790 + - Level: 152 + Hp: 4795 + - Level: 153 + Hp: 4800 + - Level: 154 + Hp: 4805 + - Level: 155 + Hp: 4810 + - Level: 156 + Hp: 4815 + - Level: 157 + Hp: 4820 + - Level: 158 + Hp: 4825 + - Level: 159 + Hp: 4830 + - Level: 160 + Hp: 4835 + - Level: 161 + Hp: 4840 + - Level: 162 + Hp: 4845 + - Level: 163 + Hp: 4850 + - Level: 164 + Hp: 4855 + - Level: 165 + Hp: 4860 + - Level: 166 + Hp: 4865 + - Level: 167 + Hp: 4870 + - Level: 168 + Hp: 4875 + - Level: 169 + Hp: 4880 + - Level: 170 + Hp: 4885 + - Level: 171 + Hp: 4890 + - Level: 172 + Hp: 4895 + - Level: 173 + Hp: 4900 + - Level: 174 + Hp: 4905 + - Level: 175 + Hp: 4910 + - Level: 176 + Hp: 4915 + - Level: 177 + Hp: 4920 + - Level: 178 + Hp: 4925 + - Level: 179 + Hp: 4930 + - Level: 180 + Hp: 4935 + - Level: 181 + Hp: 4940 + - Level: 182 + Hp: 4945 + - Level: 183 + Hp: 4950 + - Level: 184 + Hp: 4955 + - Level: 185 + Hp: 4960 + - Level: 186 + Hp: 4965 + - Level: 187 + Hp: 4970 + - Level: 188 + Hp: 4975 + - Level: 189 + Hp: 4980 + - Level: 190 + Hp: 4985 + - Level: 191 + Hp: 4990 + - Level: 192 + Hp: 4995 + - Level: 193 + Hp: 5000 + - Level: 194 + Hp: 5005 + - Level: 195 + Hp: 5010 + - Level: 196 + Hp: 5015 + - Level: 197 + Hp: 5020 + - Level: 198 + Hp: 5025 + - Level: 199 + Hp: 5030 + - Level: 200 + Hp: 5035 - Jobs: Swordman: true Swordman_High: true @@ -9312,9 +9514,10 @@ Body: Hp: 4254 - Jobs: Summoner: true + Baby_Summoner: true BaseHp: - Level: 1 - Hp: 60 + Hp: 40 - Level: 2 Hp: 69 - Level: 3 @@ -9512,207 +9715,158 @@ Body: - Level: 99 Hp: 5999 - Level: 100 - Hp: 6111 + Hp: 6120 - Level: 101 - Hp: 6225 + Hp: 6240 - Level: 102 - Hp: 6339 + Hp: 6360 - Level: 103 - Hp: 6455 + Hp: 6480 - Level: 104 - Hp: 6572 + Hp: 6600 - Level: 105 - Hp: 6690 + Hp: 6735 - Level: 106 - Hp: 6809 + Hp: 6870 - Level: 107 - Hp: 6929 + Hp: 7005 - Level: 108 - Hp: 7050 + Hp: 7140 - Level: 109 - Hp: 7172 + Hp: 7275 - Level: 110 - Hp: 7295 + Hp: 7425 - Level: 111 - Hp: 7419 + Hp: 7575 - Level: 112 - Hp: 7544 + Hp: 7725 - Level: 113 - Hp: 7670 + Hp: 7875 - Level: 114 - Hp: 7797 + Hp: 8025 - Level: 115 - Hp: 7926 + Hp: 8190 - Level: 116 - Hp: 8055 + Hp: 8355 - Level: 117 - Hp: 8186 + Hp: 8520 - Level: 118 - Hp: 8318 + Hp: 8685 - Level: 119 - Hp: 8450 + Hp: 8850 - Level: 120 - Hp: 8583 + Hp: 9030 - Level: 121 - Hp: 8718 + Hp: 9210 - Level: 122 - Hp: 8853 + Hp: 9390 - Level: 123 - Hp: 8990 + Hp: 9570 - Level: 124 - Hp: 9128 + Hp: 9750 - Level: 125 - Hp: 9267 + Hp: 9945 - Level: 126 - Hp: 9407 + Hp: 10140 - Level: 127 - Hp: 9548 + Hp: 10335 - Level: 128 - Hp: 9690 + Hp: 10530 - Level: 129 - Hp: 9833 + Hp: 10725 - Level: 130 - Hp: 9977 + Hp: 10935 - Level: 131 - Hp: 10122 + Hp: 11145 - Level: 132 - Hp: 10268 + Hp: 11355 - Level: 133 - Hp: 10415 + Hp: 11565 - Level: 134 - Hp: 10563 + Hp: 11775 - Level: 135 - Hp: 10713 + Hp: 12000 - Level: 136 - Hp: 10863 + Hp: 12225 - Level: 137 - Hp: 11015 + Hp: 12450 - Level: 138 - Hp: 11168 + Hp: 12675 - Level: 139 - Hp: 11321 + Hp: 12900 - Level: 140 - Hp: 11475 + Hp: 13140 - Level: 141 - Hp: 11631 + Hp: 13380 - Level: 142 - Hp: 11787 + Hp: 13620 - Level: 143 - Hp: 11945 + Hp: 13860 - Level: 144 - Hp: 12104 + Hp: 14100 - Level: 145 - Hp: 12264 + Hp: 14355 - Level: 146 - Hp: 12425 + Hp: 14610 - Level: 147 - Hp: 12587 + Hp: 14865 - Level: 148 - Hp: 12750 + Hp: 15120 - Level: 149 - Hp: 12914 + Hp: 15375 - Level: 150 - Hp: 13079 + Hp: 15645 - Level: 151 - Hp: 13245 + Hp: 15915 - Level: 152 - Hp: 13412 + Hp: 16185 - Level: 153 - Hp: 13580 + Hp: 16455 - Level: 154 - Hp: 13749 + Hp: 16725 - Level: 155 - Hp: 13920 + Hp: 17010 - Level: 156 - Hp: 14091 + Hp: 17295 - Level: 157 - Hp: 14264 + Hp: 17580 - Level: 158 - Hp: 14438 + Hp: 17865 - Level: 159 - Hp: 14612 + Hp: 18150 - Level: 160 - Hp: 14787 + Hp: 18450 - Level: 161 - Hp: 14964 + Hp: 18750 - Level: 162 - Hp: 15141 + Hp: 19050 - Level: 163 - Hp: 15320 + Hp: 19350 - Level: 164 - Hp: 15500 + Hp: 19650 - Level: 165 - Hp: 15681 + Hp: 19965 - Level: 166 - Hp: 15863 + Hp: 20280 - Level: 167 - Hp: 16046 + Hp: 20595 - Level: 168 - Hp: 16230 + Hp: 20910 - Level: 169 - Hp: 16415 + Hp: 21225 - Level: 170 - Hp: 16601 + Hp: 21555 - Level: 171 - Hp: 16788 + Hp: 21885 - Level: 172 - Hp: 16976 + Hp: 22215 - Level: 173 - Hp: 17165 + Hp: 22545 - Level: 174 - Hp: 17355 + Hp: 22875 - Level: 175 - Hp: 17547 - - Level: 176 - Hp: 17739 - - Level: 177 - Hp: 17931 - - Level: 178 - Hp: 18123 - - Level: 179 - Hp: 18315 - - Level: 180 - Hp: 18507 - - Level: 181 - Hp: 18699 - - Level: 182 - Hp: 18891 - - Level: 183 - Hp: 19083 - - Level: 184 - Hp: 19275 - - Level: 185 - Hp: 19467 - - Level: 186 - Hp: 19659 - - Level: 187 - Hp: 19851 - - Level: 188 - Hp: 20043 - - Level: 189 - Hp: 20235 - - Level: 190 - Hp: 20427 - - Level: 191 - Hp: 20619 - - Level: 192 - Hp: 20811 - - Level: 193 - Hp: 21003 - - Level: 194 - Hp: 21195 - - Level: 195 - Hp: 21387 - - Level: 196 - Hp: 21579 - - Level: 197 - Hp: 21771 - - Level: 198 - Hp: 21963 - - Level: 199 - Hp: 22155 - - Level: 200 - Hp: 22347 + Hp: 23220 + # Levels 176-200 are unknown - Jobs: Novice: true Super_Novice: true @@ -9920,6 +10074,208 @@ Body: Sp: 108 - Level: 99 Sp: 109 + - Level: 100 + Sp: 100 + - Level: 101 + Sp: 101 + - Level: 102 + Sp: 102 + - Level: 103 + Sp: 103 + - Level: 104 + Sp: 104 + - Level: 105 + Sp: 105 + - Level: 106 + Sp: 106 + - Level: 107 + Sp: 107 + - Level: 108 + Sp: 108 + - Level: 109 + Sp: 109 + - Level: 110 + Sp: 110 + - Level: 111 + Sp: 111 + - Level: 112 + Sp: 112 + - Level: 113 + Sp: 113 + - Level: 114 + Sp: 114 + - Level: 115 + Sp: 115 + - Level: 116 + Sp: 116 + - Level: 117 + Sp: 117 + - Level: 118 + Sp: 118 + - Level: 119 + Sp: 119 + - Level: 120 + Sp: 120 + - Level: 121 + Sp: 121 + - Level: 122 + Sp: 122 + - Level: 123 + Sp: 123 + - Level: 124 + Sp: 124 + - Level: 125 + Sp: 125 + - Level: 126 + Sp: 126 + - Level: 127 + Sp: 127 + - Level: 128 + Sp: 128 + - Level: 129 + Sp: 129 + - Level: 130 + Sp: 130 + - Level: 131 + Sp: 131 + - Level: 132 + Sp: 132 + - Level: 133 + Sp: 133 + - Level: 134 + Sp: 134 + - Level: 135 + Sp: 135 + - Level: 136 + Sp: 136 + - Level: 137 + Sp: 137 + - Level: 138 + Sp: 138 + - Level: 139 + Sp: 139 + - Level: 140 + Sp: 140 + - Level: 141 + Sp: 141 + - Level: 142 + Sp: 142 + - Level: 143 + Sp: 143 + - Level: 144 + Sp: 144 + - Level: 145 + Sp: 145 + - Level: 146 + Sp: 146 + - Level: 147 + Sp: 147 + - Level: 148 + Sp: 148 + - Level: 149 + Sp: 149 + - Level: 150 + Sp: 150 + - Level: 151 + Sp: 151 + - Level: 152 + Sp: 152 + - Level: 153 + Sp: 153 + - Level: 154 + Sp: 154 + - Level: 155 + Sp: 155 + - Level: 156 + Sp: 156 + - Level: 157 + Sp: 157 + - Level: 158 + Sp: 158 + - Level: 159 + Sp: 159 + - Level: 160 + Sp: 160 + - Level: 161 + Sp: 161 + - Level: 162 + Sp: 162 + - Level: 163 + Sp: 163 + - Level: 164 + Sp: 164 + - Level: 165 + Sp: 165 + - Level: 166 + Sp: 166 + - Level: 167 + Sp: 167 + - Level: 168 + Sp: 168 + - Level: 169 + Sp: 169 + - Level: 170 + Sp: 170 + - Level: 171 + Sp: 171 + - Level: 172 + Sp: 172 + - Level: 173 + Sp: 173 + - Level: 174 + Sp: 174 + - Level: 175 + Sp: 175 + - Level: 176 + Sp: 176 + - Level: 177 + Sp: 177 + - Level: 178 + Sp: 178 + - Level: 179 + Sp: 179 + - Level: 180 + Sp: 180 + - Level: 181 + Sp: 181 + - Level: 182 + Sp: 182 + - Level: 183 + Sp: 183 + - Level: 184 + Sp: 184 + - Level: 185 + Sp: 185 + - Level: 186 + Sp: 186 + - Level: 187 + Sp: 187 + - Level: 188 + Sp: 188 + - Level: 189 + Sp: 189 + - Level: 190 + Sp: 190 + - Level: 191 + Sp: 191 + - Level: 192 + Sp: 192 + - Level: 193 + Sp: 193 + - Level: 194 + Sp: 194 + - Level: 195 + Sp: 195 + - Level: 196 + Sp: 196 + - Level: 197 + Sp: 197 + - Level: 198 + Sp: 198 + - Level: 199 + Sp: 199 + - Level: 200 + Sp: 200 - Jobs: Swordman: true Swordman_High: true @@ -16714,6 +17070,208 @@ Body: Sp: 450 - Level: 99 Sp: 456 + - Level: 100 + Sp: 462 + - Level: 101 + Sp: 468 + - Level: 102 + Sp: 474 + - Level: 103 + Sp: 480 + - Level: 104 + Sp: 486 + - Level: 105 + Sp: 492 + - Level: 106 + Sp: 498 + - Level: 107 + Sp: 504 + - Level: 108 + Sp: 510 + - Level: 109 + Sp: 516 + - Level: 110 + Sp: 522 + - Level: 111 + Sp: 528 + - Level: 112 + Sp: 534 + - Level: 113 + Sp: 540 + - Level: 114 + Sp: 546 + - Level: 115 + Sp: 552 + - Level: 116 + Sp: 558 + - Level: 117 + Sp: 564 + - Level: 118 + Sp: 570 + - Level: 119 + Sp: 576 + - Level: 120 + Sp: 582 + - Level: 121 + Sp: 588 + - Level: 122 + Sp: 594 + - Level: 123 + Sp: 600 + - Level: 124 + Sp: 606 + - Level: 125 + Sp: 612 + - Level: 126 + Sp: 618 + - Level: 127 + Sp: 624 + - Level: 128 + Sp: 630 + - Level: 129 + Sp: 636 + - Level: 130 + Sp: 642 + - Level: 131 + Sp: 648 + - Level: 132 + Sp: 654 + - Level: 133 + Sp: 660 + - Level: 134 + Sp: 666 + - Level: 135 + Sp: 672 + - Level: 136 + Sp: 678 + - Level: 137 + Sp: 684 + - Level: 138 + Sp: 690 + - Level: 139 + Sp: 696 + - Level: 140 + Sp: 702 + - Level: 141 + Sp: 708 + - Level: 142 + Sp: 714 + - Level: 143 + Sp: 720 + - Level: 144 + Sp: 726 + - Level: 145 + Sp: 732 + - Level: 146 + Sp: 738 + - Level: 147 + Sp: 744 + - Level: 148 + Sp: 750 + - Level: 149 + Sp: 756 + - Level: 150 + Sp: 762 + - Level: 151 + Sp: 768 + - Level: 152 + Sp: 774 + - Level: 153 + Sp: 780 + - Level: 154 + Sp: 786 + - Level: 155 + Sp: 792 + - Level: 156 + Sp: 798 + - Level: 157 + Sp: 804 + - Level: 158 + Sp: 810 + - Level: 159 + Sp: 816 + - Level: 160 + Sp: 822 + - Level: 161 + Sp: 828 + - Level: 162 + Sp: 834 + - Level: 163 + Sp: 840 + - Level: 164 + Sp: 846 + - Level: 165 + Sp: 852 + - Level: 166 + Sp: 858 + - Level: 167 + Sp: 864 + - Level: 168 + Sp: 870 + - Level: 169 + Sp: 876 + - Level: 170 + Sp: 882 + - Level: 171 + Sp: 888 + - Level: 172 + Sp: 894 + - Level: 173 + Sp: 900 + - Level: 174 + Sp: 906 + - Level: 175 + Sp: 912 + - Level: 176 + Sp: 918 + - Level: 177 + Sp: 924 + - Level: 178 + Sp: 930 + - Level: 179 + Sp: 936 + - Level: 180 + Sp: 942 + - Level: 181 + Sp: 948 + - Level: 182 + Sp: 954 + - Level: 183 + Sp: 960 + - Level: 184 + Sp: 966 + - Level: 185 + Sp: 972 + - Level: 186 + Sp: 978 + - Level: 187 + Sp: 984 + - Level: 188 + Sp: 990 + - Level: 189 + Sp: 996 + - Level: 190 + Sp: 1002 + - Level: 191 + Sp: 1008 + - Level: 192 + Sp: 1014 + - Level: 193 + Sp: 1020 + - Level: 194 + Sp: 1026 + - Level: 195 + Sp: 1032 + - Level: 196 + Sp: 1038 + - Level: 197 + Sp: 1044 + - Level: 198 + Sp: 1050 + - Level: 199 + Sp: 1056 + - Level: 200 + Sp: 1062 - Jobs: Ninja: true BaseSp: @@ -18538,6 +19096,7 @@ Body: Sp: 703 - Jobs: Summoner: true + Baby_Summoner: true BaseSp: - Level: 1 Sp: 8 @@ -18738,204 +19297,795 @@ Body: - Level: 99 Sp: 253 - Level: 100 - Sp: 255 + Sp: 257 - Level: 101 - Sp: 258 + Sp: 261 - Level: 102 - Sp: 260 - - Level: 103 - Sp: 263 - - Level: 104 Sp: 265 - - Level: 105 - Sp: 268 - - Level: 106 - Sp: 270 - - Level: 107 + - Level: 103 + Sp: 269 + - Level: 104 Sp: 273 - - Level: 108 - Sp: 275 - - Level: 109 + - Level: 105 Sp: 278 - - Level: 110 - Sp: 280 - - Level: 111 + - Level: 106 Sp: 283 - - Level: 112 - Sp: 285 - - Level: 113 + - Level: 107 Sp: 288 - - Level: 114 - Sp: 290 - - Level: 115 + - Level: 108 Sp: 293 - - Level: 116 - Sp: 295 - - Level: 117 + - Level: 109 Sp: 298 - - Level: 118 - Sp: 300 - - Level: 119 - Sp: 303 - - Level: 120 - Sp: 305 - - Level: 121 - Sp: 308 - - Level: 122 + - Level: 110 + Sp: 304 + - Level: 111 Sp: 310 - - Level: 123 - Sp: 313 - - Level: 124 - Sp: 315 - - Level: 125 - Sp: 318 - - Level: 126 - Sp: 320 - - Level: 127 - Sp: 323 - - Level: 128 - Sp: 325 - - Level: 129 + - Level: 112 + Sp: 316 + - Level: 113 + Sp: 322 + - Level: 114 Sp: 328 - - Level: 130 - Sp: 330 - - Level: 131 - Sp: 333 - - Level: 132 + - Level: 115 Sp: 335 - - Level: 133 - Sp: 338 - - Level: 134 - Sp: 340 - - Level: 135 - Sp: 343 - - Level: 136 - Sp: 345 - - Level: 137 - Sp: 348 - - Level: 138 - Sp: 350 - - Level: 139 - Sp: 353 - - Level: 140 - Sp: 355 - - Level: 141 - Sp: 358 - - Level: 142 - Sp: 360 - - Level: 143 + - Level: 116 + Sp: 342 + - Level: 117 + Sp: 349 + - Level: 118 + Sp: 356 + - Level: 119 Sp: 363 - - Level: 144 - Sp: 365 - - Level: 145 - Sp: 368 - - Level: 146 - Sp: 370 - - Level: 147 - Sp: 373 - - Level: 148 - Sp: 375 - - Level: 149 - Sp: 378 - - Level: 150 - Sp: 380 - - Level: 151 - Sp: 383 - - Level: 152 - Sp: 385 - - Level: 153 - Sp: 388 - - Level: 154 - Sp: 390 - - Level: 155 - Sp: 393 - - Level: 156 + - Level: 120 + Sp: 371 + - Level: 121 + Sp: 379 + - Level: 122 + Sp: 387 + - Level: 123 Sp: 395 - - Level: 157 - Sp: 398 - - Level: 158 - Sp: 400 - - Level: 159 + - Level: 124 Sp: 403 - - Level: 160 - Sp: 405 - - Level: 161 - Sp: 408 - - Level: 162 - Sp: 410 - - Level: 163 - Sp: 413 - - Level: 164 - Sp: 415 - - Level: 165 - Sp: 418 - - Level: 166 - Sp: 420 - - Level: 167 - Sp: 423 - - Level: 168 - Sp: 425 - - Level: 169 - Sp: 428 - - Level: 170 + - Level: 125 + Sp: 412 + - Level: 126 + Sp: 421 + - Level: 127 Sp: 430 - - Level: 171 - Sp: 433 - - Level: 172 - Sp: 435 - - Level: 173 - Sp: 438 - - Level: 174 - Sp: 440 - - Level: 175 - Sp: 443 - - Level: 176 - Sp: 445 - - Level: 177 + - Level: 128 + Sp: 439 + - Level: 129 Sp: 448 - - Level: 178 - Sp: 450 - - Level: 179 - Sp: 453 - - Level: 180 - Sp: 455 - - Level: 181 + - Level: 130 Sp: 458 - - Level: 182 - Sp: 460 - - Level: 183 - Sp: 463 - - Level: 184 - Sp: 465 - - Level: 185 + - Level: 131 Sp: 468 - - Level: 186 - Sp: 470 - - Level: 187 - Sp: 473 - - Level: 188 - Sp: 475 - - Level: 189 + - Level: 132 Sp: 478 - - Level: 190 - Sp: 480 - - Level: 191 - Sp: 483 - - Level: 192 - Sp: 485 - - Level: 193 + - Level: 133 Sp: 488 - - Level: 194 - Sp: 490 - - Level: 195 - Sp: 493 - - Level: 196 - Sp: 495 - - Level: 197 + - Level: 134 Sp: 498 - - Level: 198 - Sp: 500 - - Level: 199 - Sp: 503 - - Level: 200 - Sp: 505 + - Level: 135 + Sp: 509 + - Level: 136 + Sp: 520 + - Level: 137 + Sp: 531 + - Level: 138 + Sp: 542 + - Level: 139 + Sp: 553 + - Level: 140 + Sp: 565 + - Level: 141 + Sp: 577 + - Level: 142 + Sp: 589 + - Level: 143 + Sp: 601 + - Level: 144 + Sp: 613 + - Level: 145 + Sp: 626 + - Level: 146 + Sp: 639 + - Level: 147 + Sp: 642 + - Level: 148 + Sp: 655 + - Level: 149 + Sp: 668 + - Level: 150 + Sp: 682 + - Level: 151 + Sp: 696 + - Level: 152 + Sp: 710 + - Level: 153 + Sp: 724 + - Level: 154 + Sp: 738 + - Level: 155 + Sp: 753 + - Level: 156 + Sp: 768 + - Level: 157 + Sp: 783 + - Level: 158 + Sp: 798 + - Level: 159 + Sp: 813 + - Level: 160 + Sp: 829 + - Level: 161 + Sp: 835 + - Level: 162 + Sp: 851 + - Level: 163 + Sp: 867 + - Level: 164 + Sp: 883 + - Level: 165 + Sp: 899 + - Level: 166 + Sp: 916 + - Level: 167 + Sp: 933 + - Level: 168 + Sp: 950 + - Level: 169 + Sp: 967 + - Level: 170 + Sp: 984 + - Level: 171 + Sp: 1002 + - Level: 172 + Sp: 1020 + - Level: 173 + Sp: 1038 + - Level: 174 + Sp: 1056 + - Level: 175 + Sp: 1074 + # Levels 176-200 are unknown + - Jobs: + Star_Emperor: true + Baby_Star_Emperor: true + Star_Emperor2: true + Baby_Star_Emperor2: true + BaseHp: + - Level: 99 + Hp: 4300 + - Level: 100 + Hp: 4426 + - Level: 101 + Hp: 4554 + - Level: 102 + Hp: 4684 + - Level: 103 + Hp: 4814 + - Level: 104 + Hp: 4945 + - Level: 105 + Hp: 5078 + - Level: 106 + Hp: 5213 + - Level: 107 + Hp: 5348 + - Level: 108 + Hp: 5484 + - Level: 109 + Hp: 5622 + - Level: 110 + Hp: 5762 + - Level: 111 + Hp: 5902 + - Level: 112 + Hp: 6043 + - Level: 113 + Hp: 6186 + - Level: 114 + Hp: 6331 + - Level: 115 + Hp: 6476 + - Level: 116 + Hp: 6622 + - Level: 117 + Hp: 6770 + - Level: 118 + Hp: 6920 + - Level: 119 + Hp: 7070 + - Level: 120 + Hp: 7221 + - Level: 121 + Hp: 7374 + - Level: 122 + Hp: 7529 + - Level: 123 + Hp: 7684 + - Level: 124 + Hp: 7840 + - Level: 125 + Hp: 7998 + - Level: 126 + Hp: 8158 + - Level: 127 + Hp: 8318 + - Level: 128 + Hp: 8479 + - Level: 129 + Hp: 8642 + - Level: 130 + Hp: 8807 + - Level: 131 + Hp: 8972 + - Level: 132 + Hp: 9138 + - Level: 133 + Hp: 9306 + - Level: 134 + Hp: 9476 + - Level: 135 + Hp: 9646 + - Level: 136 + Hp: 9817 + - Level: 137 + Hp: 9990 + - Level: 138 + Hp: 10165 + - Level: 139 + Hp: 10340 + - Level: 140 + Hp: 10516 + - Level: 141 + Hp: 10694 + - Level: 142 + Hp: 10874 + - Level: 143 + Hp: 11054 + - Level: 144 + Hp: 11235 + - Level: 145 + Hp: 11418 + - Level: 146 + Hp: 11603 + - Level: 147 + Hp: 11788 + - Level: 148 + Hp: 11974 + - Level: 149 + Hp: 12162 + - Level: 150 + Hp: 12352 + - Level: 151 + Hp: 12542 + - Level: 152 + Hp: 12733 + - Level: 153 + Hp: 12926 + - Level: 154 + Hp: 13121 + - Level: 155 + Hp: 13316 + - Level: 156 + Hp: 13512 + - Level: 157 + Hp: 13710 + - Level: 158 + Hp: 13910 + - Level: 159 + Hp: 14110 + - Level: 160 + Hp: 14311 + - Level: 161 + Hp: 14514 + - Level: 162 + Hp: 14719 + - Level: 163 + Hp: 14924 + - Level: 164 + Hp: 15130 + - Level: 165 + Hp: 15338 + - Level: 166 + Hp: 15548 + - Level: 167 + Hp: 15758 + - Level: 168 + Hp: 15969 + - Level: 169 + Hp: 16182 + - Level: 170 + Hp: 16397 + - Level: 171 + Hp: 16612 + - Level: 172 + Hp: 16828 + - Level: 173 + Hp: 17046 + - Level: 174 + Hp: 17266 + - Level: 175 + Hp: 17486 + # Levels 176-200 are unknown + - Jobs: + Soul_Reaper: true + Baby_Soul_Reaper: true + BaseHp: + - Level: 99 + Hp: 4300 + - Level: 100 + Hp: 4333 + - Level: 101 + Hp: 4412 + - Level: 102 + Hp: 4491 + - Level: 103 + Hp: 4570 + - Level: 104 + Hp: 4649 + - Level: 105 + Hp: 4728 + - Level: 106 + Hp: 4807 + - Level: 107 + Hp: 4886 + - Level: 108 + Hp: 4965 + - Level: 109 + Hp: 5044 + - Level: 110 + Hp: 5123 + - Level: 111 + Hp: 5202 + - Level: 112 + Hp: 5281 + - Level: 113 + Hp: 5360 + - Level: 114 + Hp: 5439 + - Level: 115 + Hp: 5518 + - Level: 116 + Hp: 5597 + - Level: 117 + Hp: 5676 + - Level: 118 + Hp: 5755 + - Level: 119 + Hp: 5834 + - Level: 120 + Hp: 5913 + - Level: 121 + Hp: 5992 + - Level: 122 + Hp: 6071 + - Level: 123 + Hp: 6150 + - Level: 124 + Hp: 6229 + - Level: 125 + Hp: 6308 + - Level: 126 + Hp: 6387 + - Level: 127 + Hp: 6466 + - Level: 128 + Hp: 6545 + - Level: 129 + Hp: 6624 + - Level: 130 + Hp: 6703 + - Level: 131 + Hp: 6782 + - Level: 132 + Hp: 6861 + - Level: 133 + Hp: 6940 + - Level: 134 + Hp: 7019 + - Level: 135 + Hp: 7098 + - Level: 136 + Hp: 7177 + - Level: 137 + Hp: 7256 + - Level: 138 + Hp: 7335 + - Level: 139 + Hp: 7414 + - Level: 140 + Hp: 7493 + - Level: 141 + Hp: 7572 + - Level: 142 + Hp: 7651 + - Level: 143 + Hp: 7730 + - Level: 144 + Hp: 7809 + - Level: 145 + Hp: 7888 + - Level: 146 + Hp: 7967 + - Level: 147 + Hp: 8046 + - Level: 148 + Hp: 8125 + - Level: 149 + Hp: 8204 + - Level: 150 + Hp: 8283 + - Level: 151 + Hp: 8362 + - Level: 152 + Hp: 8441 + - Level: 153 + Hp: 8520 + - Level: 154 + Hp: 8599 + - Level: 155 + Hp: 8678 + - Level: 156 + Hp: 8757 + - Level: 157 + Hp: 8836 + - Level: 158 + Hp: 8915 + - Level: 159 + Hp: 8994 + - Level: 160 + Hp: 9115 + - Level: 161 + Hp: 9276 + - Level: 162 + Hp: 9438 + - Level: 163 + Hp: 9601 + - Level: 164 + Hp: 9765 + - Level: 165 + Hp: 9930 + - Level: 166 + Hp: 10096 + - Level: 167 + Hp: 10263 + - Level: 168 + Hp: 10431 + - Level: 169 + Hp: 10600 + - Level: 170 + Hp: 10770 + - Level: 171 + Hp: 10941 + - Level: 172 + Hp: 11113 + - Level: 173 + Hp: 11286 + - Level: 174 + Hp: 11460 + - Level: 175 + Hp: 11635 + # Levels 176-200 are unknown + - Jobs: + Star_Emperor: true + Baby_Star_Emperor: true + Star_Emperor2: true + Baby_Star_Emperor2: true + BaseSp: + - Level: 99 + Sp: 522 + - Level: 100 + Sp: 530 + - Level: 101 + Sp: 538 + - Level: 102 + Sp: 546 + - Level: 103 + Sp: 554 + - Level: 104 + Sp: 562 + - Level: 105 + Sp: 570 + - Level: 106 + Sp: 578 + - Level: 107 + Sp: 586 + - Level: 108 + Sp: 594 + - Level: 109 + Sp: 602 + - Level: 110 + Sp: 610 + - Level: 111 + Sp: 618 + - Level: 112 + Sp: 626 + - Level: 113 + Sp: 634 + - Level: 114 + Sp: 642 + - Level: 115 + Sp: 650 + - Level: 116 + Sp: 658 + - Level: 117 + Sp: 666 + - Level: 118 + Sp: 674 + - Level: 119 + Sp: 682 + - Level: 120 + Sp: 690 + - Level: 121 + Sp: 698 + - Level: 122 + Sp: 706 + - Level: 123 + Sp: 714 + - Level: 124 + Sp: 722 + - Level: 125 + Sp: 730 + - Level: 126 + Sp: 738 + - Level: 127 + Sp: 746 + - Level: 128 + Sp: 754 + - Level: 129 + Sp: 762 + - Level: 130 + Sp: 770 + - Level: 131 + Sp: 778 + - Level: 132 + Sp: 786 + - Level: 133 + Sp: 794 + - Level: 134 + Sp: 802 + - Level: 135 + Sp: 810 + - Level: 136 + Sp: 818 + - Level: 137 + Sp: 826 + - Level: 138 + Sp: 834 + - Level: 139 + Sp: 842 + - Level: 140 + Sp: 850 + - Level: 141 + Sp: 858 + - Level: 142 + Sp: 866 + - Level: 143 + Sp: 874 + - Level: 144 + Sp: 882 + - Level: 145 + Sp: 890 + - Level: 146 + Sp: 898 + - Level: 147 + Sp: 906 + - Level: 148 + Sp: 914 + - Level: 149 + Sp: 922 + - Level: 150 + Sp: 930 + - Level: 151 + Sp: 958 + - Level: 152 + Sp: 976 + - Level: 153 + Sp: 994 + - Level: 154 + Sp: 1002 + - Level: 155 + Sp: 1014 + - Level: 156 + Sp: 1028 + - Level: 157 + Sp: 1046 + - Level: 158 + Sp: 1060 + - Level: 159 + Sp: 1082 + - Level: 160 + Sp: 1100 + - Level: 161 + Sp: 1108 + - Level: 162 + Sp: 1116 + - Level: 163 + Sp: 1124 + - Level: 164 + Sp: 1132 + - Level: 165 + Sp: 1140 + - Level: 166 + Sp: 1148 + - Level: 167 + Sp: 1156 + - Level: 168 + Sp: 1164 + - Level: 169 + Sp: 1172 + - Level: 170 + Sp: 1180 + - Level: 171 + Sp: 1188 + - Level: 172 + Sp: 1196 + - Level: 173 + Sp: 1204 + - Level: 174 + Sp: 1212 + - Level: 175 + Sp: 1220 + # Levels 176-200 are unknown + - Jobs: + Soul_Reaper: true + Baby_Soul_Reaper: true + BaseSp: + - Level: 99 + Sp: 900 + - Level: 100 + Sp: 910 + - Level: 101 + Sp: 919 + - Level: 102 + Sp: 928 + - Level: 103 + Sp: 937 + - Level: 104 + Sp: 946 + - Level: 105 + Sp: 955 + - Level: 106 + Sp: 964 + - Level: 107 + Sp: 973 + - Level: 108 + Sp: 982 + - Level: 109 + Sp: 991 + - Level: 110 + Sp: 1000 + - Level: 111 + Sp: 1009 + - Level: 112 + Sp: 1018 + - Level: 113 + Sp: 1027 + - Level: 114 + Sp: 1036 + - Level: 115 + Sp: 1045 + - Level: 116 + Sp: 1054 + - Level: 117 + Sp: 1063 + - Level: 118 + Sp: 1072 + - Level: 119 + Sp: 1081 + - Level: 120 + Sp: 1090 + - Level: 121 + Sp: 1099 + - Level: 122 + Sp: 1108 + - Level: 123 + Sp: 1117 + - Level: 124 + Sp: 1126 + - Level: 125 + Sp: 1135 + - Level: 126 + Sp: 1144 + - Level: 127 + Sp: 1153 + - Level: 128 + Sp: 1162 + - Level: 129 + Sp: 1171 + - Level: 130 + Sp: 1180 + - Level: 131 + Sp: 1189 + - Level: 132 + Sp: 1198 + - Level: 133 + Sp: 1207 + - Level: 134 + Sp: 1216 + - Level: 135 + Sp: 1225 + - Level: 136 + Sp: 1234 + - Level: 137 + Sp: 1243 + - Level: 138 + Sp: 1252 + - Level: 139 + Sp: 1261 + - Level: 140 + Sp: 1270 + - Level: 141 + Sp: 1279 + - Level: 142 + Sp: 1288 + - Level: 143 + Sp: 1297 + - Level: 144 + Sp: 1306 + - Level: 145 + Sp: 1315 + - Level: 146 + Sp: 1324 + - Level: 147 + Sp: 1333 + - Level: 148 + Sp: 1342 + - Level: 149 + Sp: 1351 + - Level: 150 + Sp: 1360 + - Level: 151 + Sp: 1369 + - Level: 152 + Sp: 1378 + - Level: 153 + Sp: 1387 + - Level: 154 + Sp: 1396 + - Level: 155 + Sp: 1405 + - Level: 156 + Sp: 1414 + - Level: 157 + Sp: 1423 + - Level: 158 + Sp: 1432 + - Level: 159 + Sp: 1441 + - Level: 160 + Sp: 1450 + - Level: 161 + Sp: 1460 + - Level: 162 + Sp: 1470 + - Level: 163 + Sp: 1480 + - Level: 164 + Sp: 1490 + - Level: 165 + Sp: 1500 + - Level: 166 + Sp: 1511 + - Level: 167 + Sp: 1522 + - Level: 168 + Sp: 1533 + - Level: 169 + Sp: 1544 + - Level: 170 + Sp: 1555 + - Level: 171 + Sp: 1567 + - Level: 172 + Sp: 1579 + - Level: 173 + Sp: 1591 + - Level: 174 + Sp: 1603 + - Level: 175 + Sp: 1615 + # Levels 176-200 are unknown diff --git a/db/re/job_stats.yml b/db/re/job_stats.yml index cc3eed278f..673573c795 100644 --- a/db/re/job_stats.yml +++ b/db/re/job_stats.yml @@ -8535,24 +8535,6 @@ Body: Str: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - - Level: 63 - Str: 1 - - Level: 64 - Str: 1 - - Level: 65 - Str: 1 - - Level: 66 - Str: 1 - - Level: 67 - Str: 1 - - Level: 68 - Str: 1 - - Level: 69 - Str: 1 - - Level: 70 - Str: 1 - Jobs: Oboro: true MaxWeight: 26000 @@ -8634,20 +8616,6 @@ Body: Str: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - - Level: 63 - Agi: 1 - - Level: 64 - Agi: 1 - - Level: 65 - Agi: 1 - - Level: 66 - Int: 1 - - Level: 68 - Vit: 1 - - Level: 70 - Vit: 1 - Jobs: Rebellion: true MaxWeight: 28000 @@ -8812,8 +8780,6 @@ Body: Agi: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - Jobs: Baby_Summoner: true HpFactor: 100 @@ -8892,8 +8858,6 @@ Body: Agi: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - Jobs: Baby_Ninja: true MaxWeight: 26000 @@ -9036,18 +9000,6 @@ Body: Str: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - - Level: 63 - Str: 1 - - Level: 64 - Str: 1 - - Level: 65 - Str: 1 - - Level: 69 - Agi: 1 - - Level: 70 - Agi: 1 - Jobs: Baby_Oboro: true MaxWeight: 26000 @@ -9129,20 +9081,6 @@ Body: Str: 1 - Level: 50 Dex: 1 - - Level: 59 - Str: 1 - - Level: 63 - Str: 1 - - Level: 64 - Str: 1 - - Level: 65 - Str: 1 - - Level: 66 - Str: 1 - - Level: 67 - Str: 1 - - Level: 68 - Str: 1 - Jobs: Baby_Taekwon: true MaxWeight: 28000 @@ -9915,108 +9853,3 @@ Body: Int: 1 - Level: 59 Int: 1 - MaxWeight: 28000 - HpFactor: 90 - HpMultiplicator: 650 - SpFactor: 470 - BaseASPD: - Fist: 40 - Dagger: 50 - 1hSword: 50 - 2hSword: 50 - 1hSpear: 50 - 2hSpear: 50 - 1hAxe: 50 - 2hAxe: 50 - Mace: 50 - 2hMace: 50 - Staff: 50 - Bow: 50 - Knuckle: 50 - Musical: 50 - Whip: 50 - Book: 50 - Katar: 50 - Revolver: 50 - Rifle: 50 - Gatling: 50 - Shotgun: 50 - Grenade: 50 - Huuma: 50 - 2hStaff: 50 - Shield: 6 - BonusStats: - - Level: 1 - Str: 1 - - Level: 2 - Dex: 1 - - Level: 5 - Agi: 1 - - Level: 7 - Int: 1 - - Level: 8 - Str: 1 - - Level: 9 - Luk: 1 - - Level: 11 - Dex: 1 - - Level: 12 - Str: 1 - - Level: 13 - Agi: 1 - - Level: 15 - Int: 1 - - Level: 16 - Luk: 1 - - Level: 17 - Vit: 1 - - Level: 19 - Str: 1 - - Level: 20 - Dex: 1 - - Level: 21 - Agi: 1 - - Level: 23 - Str: 1 - - Level: 24 - Vit: 1 - - Level: 25 - Int: 1 - - Level: 27 - Dex: 1 - - Level: 29 - Agi: 1 - - Level: 30 - Dex: 1 - - Level: 31 - Str: 1 - - Level: 34 - Dex: 1 - - Level: 35 - Agi: 1 - - Level: 36 - Luk: 1 - - Level: 37 - Vit: 1 - - Level: 38 - Dex: 1 - - Level: 39 - Str: 1 - - Level: 41 - Agi: 1 - - Level: 42 - Vit: 1 - - Level: 43 - Str: 1 - - Level: 45 - Dex: 1 - - Level: 47 - Agi: 1 - - Level: 48 - Str: 1 - - Level: 50 - Dex: 1 - - Level: 56 - Str: 1 - - Level: 59 - Agi: 1 diff --git a/src/map/pc.cpp b/src/map/pc.cpp index d3a1e618da..d723cfcaa6 100755 --- a/src/map/pc.cpp +++ b/src/map/pc.cpp @@ -12249,9 +12249,22 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { std::shared_ptr job = job_db.find(static_cast(job_id)); bool exists = job != nullptr; - if (!exists) + if (!exists) { job = std::make_shared(); + job->job_bonus.resize(MAX_LEVEL); + std::fill(job->job_bonus.begin(), job->job_bonus.end(), std::array { 0 }); + + job->base_hp.resize(MAX_LEVEL); + std::fill(job->base_hp.begin(), job->base_hp.end(), 0); + + job->base_sp.resize(MAX_LEVEL); + std::fill(job->base_sp.begin(), job->base_sp.end(), 0); + + job->base_ap.resize(MAX_LEVEL); + std::fill(job->base_ap.begin(), job->base_ap.end(), 0); + } + if (this->nodeExists(node, "MaxWeight")) { uint32 weight; @@ -12336,34 +12349,6 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { } } - if (this->nodeExists(node, "BonusStats")) { - const YAML::Node &bonusNode = node["BonusStats"]; - job->job_bonus.resize(MAX_LEVEL); - - for (const YAML::Node &levelNode : bonusNode) { - uint16 level; - - if (!this->asUInt16(levelNode, "Level", level)) - return 0; - - if (level > MAX_LEVEL) { - this->invalidWarning(levelNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); - return 0; - } - - for (uint8 idx = PARAM_STR; idx < PARAM_MAX; idx++) { - if (this->nodeExists(levelNode, parameter_names[idx])) { - int16 change; - - if (!this->asInt16(levelNode, parameter_names[idx], change)) - return 0; - - job->job_bonus[level - 1][idx] = change; - } - } - } - } - if (this->nodeExists(node, "MaxStats")) { const YAML::Node &statNode = node["MaxStats"]; @@ -12396,7 +12381,7 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { if (!this->asUInt16(node, "MaxBaseLevel", level)) return 0; - if (level > MAX_LEVEL) { + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(node["MaxBaseLevel"], "MaxBaseLevel must be between 1~MAX_LEVEL for %s, capping to MAX_LEVEL.\n", job_name.c_str()); level = MAX_LEVEL; } @@ -12414,7 +12399,10 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { if (!this->asUInt16(bexpNode, "Level", level)) return 0; - if (level < 1 || level > MAX_LEVEL) { + if (level > job->max_base_level) + continue; + + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(bexpNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); return 0; } @@ -12436,13 +12424,12 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { if (!this->asUInt16(node, "MaxJobLevel", level)) return 0; - if (level > MAX_LEVEL) { + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(node["MaxJobLevel"], "MaxJobLevel must be between 1~MAX_LEVEL for %s, capping to MAX_LEVEL.\n", job_name.c_str()); level = MAX_LEVEL; } job->max_job_level = level; - job->job_bonus.resize(level); } else { if (!exists) job->max_job_level = MAX_LEVEL; @@ -12455,7 +12442,10 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { if (!this->asUInt16(jexpNode, "Level", level)) return 0; - if (level < 1 || level > MAX_LEVEL) { + if (level > job->max_job_level) + continue; + + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(jexpNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); return 0; } @@ -12471,17 +12461,45 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { } } + if (this->nodeExists(node, "BonusStats")) { + const YAML::Node &bonusNode = node["BonusStats"]; + + for (const YAML::Node &levelNode : bonusNode) { + uint16 level; + + if (!this->asUInt16(levelNode, "Level", level)) + return 0; + + if (level == 0 || level > MAX_LEVEL) { + this->invalidWarning(levelNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); + return 0; + } + + for (uint8 idx = PARAM_STR; idx < PARAM_MAX; idx++) { + if (this->nodeExists(levelNode, parameter_names[idx])) { + int16 change; + + if (!this->asInt16(levelNode, parameter_names[idx], change)) + return 0; + + job->job_bonus[level - 1][idx] = change; + } + } + } + } + #ifdef HP_SP_TABLES if (this->nodeExists(node, "BaseHp")) { - job->base_hp.resize(job->max_base_level, 1); - for (const YAML::Node &bhpNode : node["BaseHp"]) { uint16 level; if (!this->asUInt16(bhpNode, "Level", level)) return 0; - if (level > MAX_LEVEL) { + if (level > job->max_base_level) + continue; + + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(bhpNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); return 0; } @@ -12498,15 +12516,16 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { } if (this->nodeExists(node, "BaseSp")) { - job->base_sp.resize(job->max_base_level, 1); - for (const YAML::Node &bspNode : node["BaseSp"]) { uint16 level; if (!this->asUInt16(bspNode, "Level", level)) return 0; - if (level > MAX_LEVEL) { + if (level > job->max_base_level) + continue; + + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(bspNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); return 0; } @@ -12523,15 +12542,16 @@ uint64 JobDatabase::parseBodyNode(const YAML::Node &node) { } if (this->nodeExists(node, "BaseAp")) { - job->base_ap.resize(job->max_base_level, 1); - for (const YAML::Node &bapNode : node["BaseAp"]) { uint16 level; if (!this->asUInt16(bapNode, "Level", level)) return 0; - if (level > MAX_LEVEL) { + if (level > job->max_base_level) + continue; + + if (level == 0 || level > MAX_LEVEL) { this->invalidWarning(bapNode["Level"], "Level must be between 1~MAX_LEVEL for %s.\n", job_name.c_str()); return 0; } @@ -12575,21 +12595,30 @@ void JobDatabase::loadingFinished() { ShowWarning("Class %s (%d) does not have a job exp table.\n", job_name(job_id), job_id); // Init and checking the empty value of Base HP/SP [Cydh] - if (job->base_hp.size() == 0) + if (job->base_hp.empty()) job->base_hp.resize(maxBaseLv); for (uint16 j = 0; j < maxBaseLv; j++) { if (job->base_hp[j] == 0) job->base_hp[j] = pc_calc_basehp(j + 1, job_id); } - if (job->base_sp.size() == 0) - job->base_sp.resize(maxJobLv); - for (uint16 j = 0; j < maxJobLv; j++) { + if (job->base_sp.empty()) + job->base_sp.resize(maxBaseLv); + for (uint16 j = 0; j < maxBaseLv; j++) { if (job->base_sp[j] == 0) job->base_sp[j] = pc_calc_basesp(j + 1, job_id); } - // Resize for the maximum job level - job->job_bonus.resize(maxJobLv); + // Resize to the maximum base level + if (job->base_hp.capacity() > maxBaseLv) + job->base_hp.erase(job->base_hp.begin() + maxBaseLv, job->base_hp.end()); + if (job->base_sp.capacity() > maxBaseLv) + job->base_sp.erase(job->base_sp.begin() + maxBaseLv, job->base_sp.end()); + if (job->base_ap.capacity() > maxBaseLv) + job->base_ap.erase(job->base_ap.begin() + maxBaseLv, job->base_ap.end()); + + // Resize to the maximum job level + if (job->job_bonus.capacity() > maxJobLv) + job->job_bonus.erase(job->job_bonus.begin() + maxJobLv, job->job_bonus.end()); for (uint16 parameter = PARAM_STR; parameter < PARAM_MAX; parameter++) { // Store total diff --git a/src/tool/csv2yaml.cpp b/src/tool/csv2yaml.cpp index ee0fe106f6..dbd01ef163 100644 --- a/src/tool/csv2yaml.cpp +++ b/src/tool/csv2yaml.cpp @@ -4162,8 +4162,11 @@ static bool read_constdb(char* fields[], int columns, int current) { static bool pc_readdb_job2(char* fields[], int columns, int current) { std::vector stats; + stats.resize(MAX_LEVEL); + std::fill(stats.begin(), stats.end(), 0); // Fill with 0 so we don't produce arbitrary stats + for (int i = 1; i < columns; i++) - stats.insert(stats.begin() + i - 1, atoi(fields[i])); + stats[i - 1] = atoi(fields[i]); job_db2.insert({ atoi(fields[0]), stats }); return true; @@ -4258,17 +4261,25 @@ static bool pc_readdb_job_basehpsp(char* fields[], int columns, int current) { body << YAML::BeginSeq; int j = 0, job_id = jobs[0], endlvl = 0; - auto it_level = exp_base_level.find(job_id); - if (it_level != exp_base_level.end()) - endlvl = it_level->second; - else { - ShowError("pc_readdb_job_basehpsp: The job_exp database needs to be imported into memory before converting the job_basehpsp_db database.\n"); - return false; + // Find the highest level in the group of jobs + for (int i = 0; i < job_count; i++) { + auto it_level = exp_base_level.find(jobs[i]); + int tmplvl; + + if (it_level != exp_base_level.end()) + tmplvl = it_level->second; + else { + ShowError("pc_readdb_job_basehpsp: The job_exp database needs to be imported into memory before converting the job_basehpsp_db database.\n"); + return false; + } + + if (endlvl < tmplvl) + endlvl = tmplvl; } // These jobs don't have values less than level 99 - if ((job_id >= JOB_RUNE_KNIGHT && job_id <= JOB_BABY_MECHANIC2) || job_id == JOB_KAGEROU || job_id == JOB_OBORO || job_id == JOB_REBELLION || job_id == JOB_BABY_KAGEROU || job_id == JOB_BABY_OBORO || job_id == JOB_BABY_REBELLION) + if ((job_id >= JOB_RUNE_KNIGHT && job_id <= JOB_BABY_MECHANIC2) || job_id == JOB_KAGEROU || job_id == JOB_OBORO || job_id == JOB_REBELLION || job_id == JOB_BABY_KAGEROU || job_id == JOB_BABY_OBORO || job_id == JOB_BABY_REBELLION || job_id >= JOB_STAR_EMPEROR) j = 98; if (type == 0) { // HP