|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Quests::Plugins & Mods Completed plugins for public use as well as modifications. |
|
|
|
12-25-2013, 12:02 AM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Auto NPC Scale Engine/System (Must Read for Server Devs)
WARNING: Before you read this, prepare to absorb a bunch of information and understand this before trying to paste it into your source and try and make it work without reading.
Here is another mod that I've spent a lot of time baking, making sure that it works using in running a live server. It was a seriously amazing thing once I got this built to where this was realistic and now I am sharing it with everyone.
Akka's Funhouse has ran entirely successfully in every single zone using this system, it is the bread and butter to saving yourself tons of development time by using very accuracte and precise math to scale your encounters. It gives a lot of options even for being a system I built for a lot of proprietary purposes, it is extremely flexible.
This system has a lot to it, however once you understand it, it is very easy to maintain and WILL save you many many hours. I will try to break it down the best that I can.
----------------------------
Required: Perl DBI - See Google for installing Perl DBI/DBD for Mysql, until I create an article explaining otherwise.
Required: plugin::LoadMysql(); - See thread HERE
Required: Mysql tables cust_npc_scaling & cust_npc_scale_static & cust_npc_zonescale_static - DOWNLOAD HERE
----------------------------
It allows you to insert your own 'definitions' data for the way NPC's are scaled on the fly. You can adjust values, reload the zone and your scaling takes effective IMMEDIATELY.
There are 3 custom Mysql tables involved - cust_npc_scaling - This has the 'base' NPC data for Trash/Named/Raid encounters
- cust_npc_scale_static - This table contains 'static' entries that override scaling for all of the dynamic scaling. The values in this table are NOT multipliers
- cust_npc_zonescale_static - This table is topical to that of cust_npc_scaling, entries that are in this table are multipliers of the base data that exists in cust_npc_scaling. More on this later.
High Level Breakdown:- In each zone there is an invisible NPC that gets spawned, this is called your zonecontroller, this NPC simply sits and listens for signals and NPC pops and responds to them accordingly. This NPC and script is responsible for all of the magic that occurs here.
- When the zonecontroller pops, the first step it takes is to load scaling data from all three tables, this is pushed into memory and stays in memory until Perl is reloaded with #reloadpl
- Within the first 5 seconds that the zonecontroller is spawned, it will load everything into memory, and then iterate through all of the spawned entities in the zone and scale them with all of the data presented in the Mysql tables
- Whenever an NPC spawns, it will signal the zonecontroller to say 'Hey, scale me' and the zonecontroller will respond to the request by scaling only that NPC that had just popped, given the exact criteria that is once again presented in the tables
Rules:- Keep in mind when this system is active, it assumes the place of scaling every single NPC in every zone. There are other methods explained later that will allow you to bypass the normal scaling system. There is currently no way to just say 'Don't scale' currently. If you truly wanted to over ride, you could do the same thing the zonecontroller script is doing inside the NPC script itself by setting the stats on the fly
- Any invisible NPC is set to invulnerable, not attack
- Any invisible NPC that is NOT a shadowed man, their name is set to blank or ""
Datasets:- The zonecontroller once again is fed a list of scaling data, this base scaling data is retrieved from `cust_npc_scaling` and the copy I have made for everyone today contains 300 entries, representing 1-100 NPC's based on data queried from averages of the current PEQ `npc_types` table, this is not the table that I use but should work relatively similar to current PEQ scaling. My server supported 250 levels so I had 750 entries.
- There are 100 entries for each NPC TYPE, I have broken down NPC types into Trash, Named and Raid encounters
Typically, trash NPC's do not have a # in their name, so that zonecontroller literally will categorize a target end NPC by their name. The convention is as follows: - Trash - No # in the name
- Named - Only 1 # in the name
- Raid - 2 x '##' in the NPC Name
In PEQ's database table, currently raid targets do not go by the raid convention that I had made up, so this part is improvised due to a lack of a better way to differentiate a raid target given the data that we have. You could try to match special attack flags but that is also unreliable. This is up to you as the content creator to understand this and manipulate this to your advantage.
Here is a visual example of what data in `cust_npc_scaling` looks like:
Keys: Level, Type
Once again this is the base dataset, there are other tables I will explain that can multiply these values depending on your desire to scale content.
Code:
+-------+------+---------+------+--------+--------+--------------+------+------+------+------+------+------+------+------+------+------+------+------+------+----------+------------+-----------+-----------------+
| level | type | hp | mana | mindmg | maxdmg | attack_speed | AC | STR | STA | DEX | AGI | _INT | WIS | CHA | MR | CR | DR | FR | PR | hp_regen | spellscale | healscale | npcspecialattks |
+-------+------+---------+------+--------+--------+--------------+------+------+------+------+------+------+------+------+------+------+------+------+------+----------+------------+-----------+-----------------+
| 1 | 0 | 11 | 0 | 1 | 2 | 0 | 25 | 79 | 79 | 79 | 79 | 79 | 79 | 79 | 1 | 1 | 1 | 1 | 1 | 0 | 100 | 100 | |
| 2 | 0 | 24 | 0 | 1 | 4 | 0 | 32 | 81 | 81 | 81 | 81 | 81 | 81 | 81 | 1 | 1 | 1 | 1 | 1 | 0 | 100 | 100 | |
| 3 | 0 | 39 | 0 | 1 | 6 | 0 | 38 | 84 | 84 | 84 | 84 | 84 | 84 | 84 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 4 | 0 | 56 | 0 | 1 | 8 | 0 | 45 | 86 | 86 | 86 | 86 | 86 | 86 | 86 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 5 | 0 | 75 | 0 | 1 | 10 | 0 | 51 | 87 | 87 | 87 | 87 | 87 | 87 | 87 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 6 | 0 | 96 | 0 | 1 | 12 | 0 | 58 | 89 | 89 | 89 | 89 | 89 | 89 | 89 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 7 | 0 | 119 | 0 | 1 | 14 | 0 | 64 | 91 | 91 | 91 | 91 | 91 | 91 | 91 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 8 | 0 | 144 | 0 | 1 | 16 | 0 | 71 | 92 | 92 | 92 | 92 | 92 | 92 | 92 | 3 | 3 | 3 | 3 | 3 | 0 | 100 | 100 | |
| 9 | 0 | 171 | 0 | 1 | 18 | 0 | 77 | 93 | 93 | 93 | 93 | 93 | 93 | 93 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 10 | 0 | 200 | 0 | 1 | 20 | 0 | 84 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 4 | 4 | 4 | 4 | 4 | 1 | 100 | 100 | |
| 11 | 0 | 231 | 0 | 1 | 22 | 0 | 90 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 1 | 100 | 100 | |
| 12 | 0 | 264 | 0 | 1 | 24 | 0 | 97 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 13 | 0 | 299 | 0 | 1 | 26 | 0 | 103 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 5 | 5 | 5 | 5 | 5 | 1 | 100 | 100 | |
| 14 | 0 | 336 | 0 | 1 | 28 | 0 | 110 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 15 | 0 | 375 | 0 | 1 | 30 | 0 | 116 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 2 | 100 | 100 | |
| 16 | 0 | 416 | 0 | 1 | 32 | 0 | 123 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 17 | 0 | 459 | 0 | 1 | 34 | 0 | 129 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 7 | 7 | 7 | 7 | 7 | 0 | 100 | 100 | |
| 18 | 0 | 504 | 0 | 1 | 36 | 0 | 136 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 11 | 11 | 11 | 11 | 11 | 0 | 100 | 100 | |
| 19 | 0 | 551 | 0 | 1 | 38 | 0 | 142 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 20 | 0 | 600 | 0 | 1 | 40 | 0 | 149 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 21 | 0 | 651 | 0 | 1 | 42 | 0 | 155 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 22 | 0 | 704 | 0 | 1 | 44 | 0 | 162 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 9 | 9 | 9 | 9 | 9 | 4 | 100 | 100 | |
| 23 | 0 | 759 | 0 | 1 | 46 | 0 | 168 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 9 | 9 | 9 | 9 | 9 | 0 | 100 | 100 | |
| 24 | 0 | 816 | 0 | 1 | 48 | 0 | 175 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 10 | 10 | 10 | 10 | 10 | 4 | 100 | 100 | |
| 25 | 0 | 875 | 0 | 1 | 50 | 0 | 181 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 10 | 10 | 10 | 10 | 10 | 1 | 100 | 100 | |
| 26 | 0 | 936 | 0 | 1 | 52 | 0 | 188 | 102 | 102 | 102 | 102 | 102 | 102 | 102 | 10 | 10 | 10 | 10 | 10 | 1 | 100 | 100 | |
| 27 | 0 | 999 | 0 | 1 | 54 | 0 | 194 | 103 | 103 | 103 | 103 | 103 | 103 | 103 | 11 | 11 | 11 | 11 | 11 | 5 | 100 | 100 | |
| 28 | 0 | 1064 | 0 | 11 | 56 | 0 | 201 | 104 | 104 | 104 | 104 | 104 | 104 | 104 | 11 | 11 | 11 | 11 | 11 | 5 | 100 | 100 | |
| 29 | 0 | 1131 | 0 | 11 | 58 | 0 | 207 | 105 | 105 | 105 | 105 | 105 | 105 | 105 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 30 | 0 | 1200 | 0 | 12 | 60 | -7 | 214 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 31 | 0 | 1271 | 0 | 13 | 62 | -7 | 220 | 108 | 108 | 108 | 108 | 108 | 108 | 108 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 32 | 0 | 1344 | 0 | 13 | 64 | -7 | 227 | 109 | 109 | 109 | 109 | 109 | 109 | 109 | 13 | 13 | 13 | 13 | 13 | 7 | 100 | 100 | |
| 33 | 0 | 1419 | 0 | 13 | 66 | -7 | 233 | 111 | 111 | 111 | 111 | 111 | 111 | 111 | 13 | 13 | 13 | 13 | 13 | 1 | 100 | 100 | |
| 34 | 0 | 1496 | 0 | 14 | 68 | -8 | 240 | 113 | 113 | 113 | 113 | 113 | 113 | 113 | 14 | 14 | 14 | 14 | 14 | 7 | 100 | 100 | |
| 35 | 0 | 1575 | 0 | 14 | 70 | -8 | 246 | 116 | 116 | 116 | 116 | 116 | 116 | 116 | 14 | 14 | 14 | 14 | 14 | 8 | 100 | 100 | |
| 36 | 0 | 1656 | 0 | 14 | 72 | -8 | 253 | 118 | 118 | 118 | 118 | 118 | 118 | 118 | 14 | 14 | 14 | 14 | 14 | 8 | 100 | 100 | |
| 37 | 0 | 1739 | 0 | 14 | 74 | -8 | 259 | 121 | 121 | 121 | 121 | 121 | 121 | 121 | 14 | 14 | 14 | 14 | 14 | 9 | 100 | 100 | |
| 38 | 0 | 1824 | 0 | 15 | 76 | -8 | 266 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 15 | 15 | 15 | 15 | 15 | 9 | 100 | 100 | |
| 39 | 0 | 1911 | 0 | 16 | 78 | -9 | 272 | 128 | 128 | 128 | 128 | 128 | 128 | 128 | 15 | 15 | 15 | 15 | 15 | 1 | 100 | 100 | |
| 40 | 0 | 2000 | 0 | 32 | 120 | -9 | 279 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 16 | 16 | 16 | 16 | 16 | 1 | 100 | 100 | |
| 41 | 0 | 2091 | 0 | 33 | 123 | -9 | 285 | 136 | 136 | 136 | 136 | 136 | 136 | 136 | 16 | 16 | 16 | 16 | 16 | 10 | 100 | 100 | |
| 42 | 0 | 2184 | 0 | 34 | 126 | -9 | 292 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 17 | 17 | 17 | 17 | 17 | 2 | 100 | 100 | |
| 43 | 0 | 2279 | 0 | 34 | 129 | -10 | 298 | 145 | 145 | 145 | 145 | 145 | 145 | 145 | 18 | 18 | 18 | 18 | 18 | 1 | 100 | 100 | |
| 44 | 0 | 4900 | 0 | 35 | 132 | -10 | 381 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 18 | 18 | 18 | 18 | 18 | 3 | 100 | 100 | |
| 45 | 0 | 2475 | 0 | 36 | 135 | -10 | 311 | 156 | 156 | 156 | 156 | 156 | 156 | 156 | 18 | 18 | 18 | 18 | 18 | 12 | 100 | 100 | |
| 46 | 0 | 6000 | 0 | 37 | 138 | -10 | 318 | 162 | 162 | 162 | 162 | 162 | 162 | 162 | 18 | 18 | 18 | 18 | 18 | 4 | 100 | 100 | |
| 47 | 0 | 6500 | 0 | 38 | 141 | -10 | 324 | 169 | 169 | 169 | 169 | 169 | 169 | 169 | 18 | 18 | 18 | 18 | 18 | 32 | 100 | 100 | |
| 48 | 0 | 7000 | 0 | 38 | 144 | -11 | 331 | 176 | 176 | 176 | 176 | 176 | 176 | 176 | 19 | 19 | 19 | 19 | 19 | 35 | 100 | 100 | |
| 49 | 0 | 7500 | 0 | 39 | 147 | -11 | 421 | 183 | 183 | 183 | 183 | 183 | 183 | 183 | 19 | 19 | 19 | 19 | 19 | 4 | 100 | 100 | |
| 50 | 0 | 8750 | 0 | 74 | 200 | -15 | 344 | 191 | 191 | 191 | 191 | 191 | 191 | 191 | 20 | 20 | 20 | 20 | 20 | 6 | 100 | 100 | |
| 51 | 0 | 9750 | 0 | 75 | 203 | -16 | 350 | 200 | 100 | 200 | 200 | 200 | 200 | 200 | 21 | 21 | 21 | 21 | 21 | 6 | 100 | 100 | |
| 52 | 0 | 10750 | 0 | 76 | 206 | -16 | 446 | 209 | 209 | 209 | 209 | 209 | 209 | 209 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 53 | 0 | 11750 | 0 | 77 | 209 | -16 | 454 | 218 | 218 | 218 | 218 | 218 | 218 | 218 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 54 | 0 | 12750 | 0 | 78 | 212 | -16 | 462 | 228 | 228 | 228 | 228 | 228 | 228 | 228 | 21 | 21 | 21 | 21 | 21 | 9 | 100 | 100 | |
| 55 | 0 | 13750 | 0 | 78 | 215 | -17 | 376 | 239 | 139 | 239 | 239 | 239 | 239 | 239 | 22 | 22 | 22 | 22 | 22 | 8 | 100 | 100 | |
| 56 | 0 | 14750 | 0 | 79 | 218 | -17 | 478 | 250 | 250 | 250 | 250 | 250 | 250 | 250 | 22 | 22 | 22 | 22 | 22 | 10 | 100 | 100 | |
| 57 | 0 | 15750 | 0 | 80 | 221 | -17 | 486 | 261 | 261 | 261 | 261 | 261 | 261 | 261 | 22 | 22 | 22 | 22 | 22 | 11 | 100 | 100 | |
| 58 | 0 | 16750 | 0 | 81 | 224 | -18 | 494 | 274 | 274 | 274 | 274 | 274 | 274 | 274 | 23 | 23 | 23 | 23 | 23 | 12 | 100 | 100 | |
| 59 | 0 | 17000 | 0 | 62 | 177 | 0 | 402 | 287 | 287 | 287 | 287 | 287 | 287 | 287 | 24 | 24 | 24 | 24 | 24 | 7 | 100 | 100 | |
| 60 | 0 | 19000 | 0 | 142 | 280 | -19 | 409 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 24 | 24 | 24 | 24 | 24 | 11 | 100 | 100 | |
| 61 | 0 | 20000 | 0 | 143 | 283 | -19 | 415 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 24 | 24 | 24 | 24 | 24 | 100 | 100 | 100 | |
| 62 | 0 | 23000 | 0 | 450 | 1400 | -26 | 1328 | 225 | 225 | 225 | 225 | 225 | 225 | 225 | 65 | 65 | 65 | 65 | 65 | 15 | 100 | 100 | |
| 63 | 0 | 23500 | 0 | 450 | 1400 | -26 | 1348 | 225 | 225 | 225 | 225 | 225 | 225 | 225 | 65 | 65 | 65 | 65 | 65 | 15 | 100 | 100 | |
| 64 | 0 | 24000 | 0 | 450 | 1400 | -26 | 1369 | 225 | 225 | 225 | 225 | 225 | 225 | 225 | 87 | 87 | 87 | 87 | 87 | 15 | 100 | 100 | |
| 65 | 0 | 28500 | 0 | 226 | 445 | -24 | 441 | 378 | 378 | 378 | 378 | 378 | 378 | 378 | 26 | 26 | 26 | 26 | 26 | 142 | 100 | 100 | |
| 66 | 0 | 25000 | 0 | 450 | 1400 | -26 | 1410 | 225 | 225 | 225 | 225 | 225 | 225 | 225 | 65 | 65 | 65 | 65 | 65 | 15 | 100 | 100 | |
| 67 | 0 | 28000 | 0 | 360 | 800 | -18 | 568 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 27 | 27 | 27 | 27 | 27 | 250 | 100 | 100 | |
| 68 | 0 | 21760 | 0 | 272 | 524 | -22 | 1266 | 452 | 452 | 372 | 452 | 222 | 372 | 222 | 36 | 36 | 36 | 36 | 36 | 15 | 100 | 100 | |
| 69 | 0 | 28000 | 0 | 360 | 800 | -18 | 584 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 27 | 27 | 27 | 27 | 27 | 250 | 100 | 100 | |
| 70 | 0 | 30000 | 0 | 262 | 445 | 0 | 474 | 378 | 378 | 378 | 378 | 378 | 378 | 378 | 26 | 26 | 26 | 26 | 26 | 14 | 100 | 100 | |
| 71 | 0 | 10000 | 0 | 1 | 1 | 0 | 600 | 192 | 192 | 192 | 192 | 192 | 192 | 192 | 28 | 28 | 28 | 28 | 28 | 500 | 100 | 100 | |
| 72 | 0 | 82800 | 0 | 162 | 731 | -25 | 1216 | 347 | 347 | 72 | 222 | 72 | 347 | 347 | 38 | 38 | 38 | 38 | 38 | 10 | 100 | 100 | |
| 73 | 0 | 60000 | 0 | 675 | 2125 | -22 | 1479 | 325 | 325 | 325 | 325 | 325 | 325 | 325 | 38 | 38 | 38 | 38 | 38 | 35 | 100 | 100 | |
| 74 | 0 | 61000 | 0 | 675 | 2125 | -22 | 1499 | 325 | 325 | 325 | 325 | 325 | 325 | 325 | 39 | 39 | 39 | 39 | 39 | 35 | 100 | 100 | |
| 75 | 0 | 10875 | 0 | 234 | 750 | -33 | 759 | 590 | 590 | 590 | 590 | 590 | 590 | 590 | 40 | 40 | 40 | 40 | 40 | 8 | 100 | 100 | |
| 76 | 0 | 49046 | 0 | 406 | 1360 | -21 | 1187 | 412 | 412 | 359 | 387 | 362 | 414 | 417 | 36 | 36 | 36 | 36 | 36 | 62 | 100 | 100 | |
| 77 | 0 | 51373 | 0 | 417 | 1432 | -21 | 1228 | 423 | 423 | 366 | 396 | 371 | 426 | 431 | 36 | 36 | 36 | 36 | 36 | 52 | 100 | 100 | |
| 78 | 0 | 53700 | 0 | 429 | 1505 | -21 | 1270 | 434 | 434 | 373 | 404 | 381 | 438 | 446 | 36 | 36 | 36 | 36 | 36 | 43 | 100 | 100 | |
| 79 | 0 | 56027 | 0 | 441 | 1578 | -21 | 1312 | 444 | 444 | 380 | 412 | 391 | 450 | 461 | 36 | 36 | 36 | 36 | 36 | 34 | 100 | 100 | |
| 80 | 0 | 58354 | 0 | 453 | 1651 | -22 | 1354 | 455 | 455 | 387 | 421 | 401 | 462 | 476 | 36 | 36 | 36 | 36 | 36 | 25 | 100 | 100 | |
| 81 | 0 | 60681 | 0 | 465 | 1724 | -22 | 1396 | 465 | 465 | 394 | 429 | 410 | 474 | 490 | 36 | 36 | 36 | 36 | 36 | 16 | 100 | 100 | |
| 82 | 0 | 63007 | 0 | 477 | 1797 | -22 | 1437 | 476 | 476 | 401 | 437 | 420 | 486 | 505 | 36 | 36 | 36 | 36 | 36 | 7 | 100 | 100 | |
| 83 | 0 | 65334 | 0 | 489 | 1870 | -23 | 1479 | 486 | 486 | 408 | 445 | 430 | 498 | 520 | 36 | 36 | 36 | 36 | 36 | -2 | 100 | 100 | |
| 84 | 0 | 67661 | 0 | 500 | 1942 | -23 | 1521 | 497 | 497 | 415 | 454 | 439 | 510 | 534 | 36 | 36 | 36 | 36 | 36 | -11 | 100 | 100 | |
| 85 | 0 | 69988 | 0 | 512 | 2015 | -23 | 1563 | 507 | 507 | 422 | 462 | 449 | 522 | 549 | 36 | 36 | 36 | 36 | 36 | -20 | 100 | 100 | |
| 86 | 0 | 72315 | 0 | 524 | 2088 | -23 | 1604 | 518 | 518 | 429 | 470 | 459 | 534 | 564 | 36 | 36 | 36 | 36 | 36 | -29 | 100 | 100 | |
| 87 | 0 | 74642 | 0 | 536 | 2161 | -24 | 1646 | 529 | 529 | 436 | 479 | 469 | 546 | 579 | 36 | 36 | 36 | 36 | 36 | -38 | 100 | 100 | |
| 88 | 0 | 76969 | 0 | 548 | 2234 | -24 | 1688 | 539 | 539 | 443 | 487 | 478 | 558 | 593 | 36 | 36 | 36 | 36 | 36 | -47 | 100 | 100 | |
| 89 | 0 | 79295 | 0 | 560 | 2307 | -24 | 1730 | 550 | 550 | 450 | 495 | 488 | 570 | 608 | 36 | 36 | 36 | 36 | 36 | -56 | 100 | 100 | |
| 90 | 0 | 81622 | 0 | 572 | 2380 | -24 | 1771 | 560 | 560 | 457 | 503 | 498 | 582 | 623 | 36 | 36 | 36 | 36 | 36 | -65 | 100 | 100 | |
| 91 | 0 | 83949 | 0 | 584 | 2453 | -25 | 1813 | 571 | 571 | 464 | 512 | 508 | 594 | 638 | 36 | 36 | 36 | 36 | 36 | -74 | 100 | 100 | |
| 92 | 0 | 86276 | 0 | 595 | 2525 | -25 | 1855 | 581 | 581 | 471 | 520 | 517 | 606 | 652 | 36 | 36 | 36 | 36 | 36 | -83 | 100 | 100 | |
| 93 | 0 | 88603 | 0 | 607 | 2598 | -25 | 1897 | 592 | 592 | 478 | 528 | 527 | 618 | 667 | 36 | 36 | 36 | 36 | 36 | -92 | 100 | 100 | |
| 94 | 0 | 90930 | 0 | 619 | 2671 | -25 | 1939 | 602 | 602 | 485 | 536 | 537 | 630 | 682 | 36 | 36 | 36 | 36 | 36 | -101 | 100 | 100 | |
| 95 | 0 | 93257 | 0 | 631 | 2744 | -26 | 1980 | 613 | 613 | 492 | 545 | 547 | 642 | 697 | 36 | 36 | 36 | 36 | 36 | -110 | 100 | 100 | |
| 96 | 0 | 95583 | 0 | 643 | 2817 | -26 | 2022 | 624 | 624 | 499 | 553 | 556 | 654 | 711 | 36 | 36 | 36 | 36 | 36 | -119 | 100 | 100 | |
| 97 | 0 | 97910 | 0 | 655 | 2890 | -26 | 2064 | 634 | 634 | 506 | 561 | 566 | 666 | 726 | 36 | 36 | 36 | 36 | 36 | -128 | 100 | 100 | |
| 98 | 0 | 100237 | 0 | 667 | 2963 | -26 | 2106 | 645 | 645 | 513 | 570 | 576 | 678 | 741 | 36 | 36 | 36 | 36 | 36 | -137 | 100 | 100 | |
| 99 | 0 | 102564 | 0 | 679 | 3035 | -27 | 2147 | 655 | 655 | 520 | 578 | 586 | 690 | 756 | 37 | 37 | 37 | 37 | 37 | -147 | 100 | 100 | |
| 100 | 0 | 104891 | 0 | 690 | 3108 | -27 | 2189 | 666 | 666 | 527 | 586 | 595 | 702 | 770 | 37 | 37 | 37 | 37 | 37 | -156 | 100 | 100 | |
| 1 | 1 | 11 | 0 | 1 | 2 | 0 | 34 | 79 | 79 | 79 | 79 | 79 | 79 | 79 | 1 | 1 | 1 | 1 | 1 | 0 | 100 | 100 | |
| 2 | 1 | 60 | 0 | 1 | 10 | 0 | 35 | 93 | 93 | 93 | 93 | 93 | 93 | 93 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 3 | 1 | 39 | 0 | 1 | 6 | 0 | 52 | 84 | 84 | 84 | 84 | 84 | 84 | 84 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 4 | 1 | 58 | 0 | 1 | 10 | 0 | 49 | 75 | 75 | 75 | 75 | 20 | 20 | 75 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 5 | 1 | 75 | 0 | 2 | 12 | 0 | 56 | 75 | 75 | 75 | 75 | 80 | 75 | 75 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 6 | 1 | 96 | 0 | 1 | 12 | 0 | 63 | 89 | 89 | 89 | 89 | 89 | 89 | 89 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 7 | 1 | 119 | 0 | 1 | 14 | 0 | 70 | 91 | 91 | 91 | 91 | 91 | 91 | 91 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 8 | 1 | 144 | 0 | 1 | 16 | 0 | 78 | 92 | 92 | 92 | 92 | 92 | 92 | 92 | 3 | 3 | 3 | 3 | 3 | 0 | 100 | 100 | |
| 9 | 1 | 171 | 0 | 9 | 20 | 0 | 85 | 82 | 82 | 77 | 82 | 76 | 77 | 72 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 10 | 1 | 200 | 0 | 1 | 20 | 0 | 92 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 11 | 1 | 231 | 0 | 1 | 22 | 0 | 124 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 12 | 1 | 264 | 0 | 1 | 24 | 0 | 106 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 13 | 1 | 299 | 0 | 1 | 26 | 0 | 113 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 14 | 1 | 336 | 0 | 1 | 28 | 0 | 120 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 15 | 1 | 375 | 0 | 1 | 30 | 0 | 128 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 16 | 1 | 416 | 0 | 1 | 32 | 0 | 135 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 17 | 1 | 459 | 0 | 1 | 34 | 0 | 142 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 7 | 7 | 7 | 7 | 7 | 0 | 100 | 100 | |
| 18 | 1 | 504 | 0 | 8 | 36 | 0 | 186 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 7 | 7 | 7 | 7 | 7 | 0 | 100 | 100 | |
| 19 | 1 | 551 | 0 | 1 | 38 | 0 | 156 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 20 | 1 | 600 | 0 | 8 | 42 | -5 | 163 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 21 | 1 | 651 | 0 | 1 | 42 | 0 | 213 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 22 | 1 | 704 | 0 | 1 | 44 | 0 | 178 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 9 | 9 | 9 | 9 | 9 | 0 | 100 | 100 | |
| 23 | 1 | 759 | 0 | 1 | 46 | 0 | 185 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 9 | 9 | 9 | 9 | 9 | 1 | 100 | 100 | |
| 24 | 1 | 816 | 0 | 1 | 48 | 0 | 192 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 25 | 1 | 875 | 0 | 1 | 50 | 0 | 199 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 10 | 10 | 10 | 10 | 10 | 1 | 100 | 100 | |
| 26 | 1 | 936 | 0 | 1 | 52 | 0 | 206 | 102 | 102 | 102 | 102 | 102 | 102 | 102 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 27 | 1 | 999 | 0 | 1 | 54 | 0 | 213 | 103 | 103 | 103 | 103 | 103 | 103 | 103 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 28 | 1 | 1064 | 0 | 11 | 56 | 0 | 221 | 104 | 104 | 104 | 104 | 104 | 104 | 104 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 29 | 1 | 1131 | 0 | 11 | 58 | 0 | 228 | 105 | 105 | 105 | 105 | 105 | 105 | 105 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 30 | 1 | 1200 | 0 | 12 | 60 | -7 | 235 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 31 | 1 | 1271 | 0 | 13 | 62 | -7 | 242 | 108 | 108 | 108 | 108 | 108 | 108 | 108 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 32 | 1 | 1344 | 0 | 13 | 64 | -7 | 249 | 109 | 109 | 109 | 109 | 109 | 109 | 109 | 13 | 13 | 13 | 13 | 13 | 1 | 100 | 100 | |
| 33 | 1 | 1419 | 0 | 13 | 66 | -7 | 256 | 111 | 111 | 111 | 111 | 111 | 111 | 111 | 13 | 13 | 13 | 13 | 13 | 1 | 100 | 100 | |
| 34 | 1 | 1496 | 0 | 14 | 68 | -8 | 263 | 113 | 113 | 113 | 113 | 113 | 113 | 113 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | |
| 35 | 1 | 559 | 0 | 2 | 32 | -8 | 271 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 14 | 14 | 14 | 14 | 14 | 0 | 100 | 100 | |
| 36 | 1 | 1656 | 0 | 14 | 72 | -8 | 278 | 118 | 118 | 118 | 118 | 118 | 118 | 118 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | |
| 37 | 1 | 1739 | 0 | 14 | 74 | -8 | 285 | 121 | 121 | 121 | 121 | 121 | 121 | 121 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | |
| 38 | 1 | 1824 | 0 | 15 | 76 | -8 | 365 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 15 | 15 | 15 | 15 | 15 | 1 | 100 | 100 | |
| 39 | 1 | 1911 | 0 | 16 | 78 | -9 | 374 | 128 | 128 | 128 | 128 | 128 | 128 | 128 | 15 | 15 | 15 | 15 | 15 | 1 | 100 | 100 | |
| 40 | 1 | 3250 | 0 | 32 | 120 | 0 | 306 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 16 | 16 | 16 | 16 | 16 | 2 | 100 | 100 | |
| 41 | 1 | 2091 | 0 | 33 | 123 | -9 | 314 | 136 | 136 | 136 | 136 | 136 | 136 | 136 | 16 | 16 | 16 | 16 | 16 | 1 | 100 | 100 | |
| 42 | 1 | 2184 | 0 | 34 | 126 | -9 | 401 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 17 | 17 | 17 | 17 | 17 | 1 | 100 | 100 | |
| 43 | 1 | 2279 | 0 | 34 | 129 | -10 | 410 | 145 | 145 | 145 | 145 | 145 | 145 | 145 | 18 | 18 | 18 | 18 | 18 | 2 | 100 | 100 | |
| 44 | 1 | 2376 | 0 | 35 | 132 | -10 | 419 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 18 | 18 | 18 | 18 | 18 | 2 | 100 | 100 | |
| 45 | 1 | 2475 | 0 | 36 | 135 | -10 | 428 | 156 | 156 | 156 | 156 | 156 | 156 | 156 | 18 | 18 | 18 | 18 | 18 | 2 | 100 | 100 | |
| 46 | 1 | 6000 | 0 | 37 | 138 | -10 | 349 | 162 | 162 | 162 | 162 | 162 | 162 | 162 | 18 | 18 | 18 | 18 | 18 | 4 | 100 | 100 | |
| 47 | 1 | 6500 | 0 | 38 | 141 | -10 | 446 | 169 | 169 | 169 | 169 | 169 | 169 | 169 | 18 | 18 | 18 | 18 | 18 | 5 | 100 | 100 | |
| 48 | 1 | 759 | 0 | 6 | 42 | -11 | 364 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 19 | 19 | 19 | 19 | 19 | 0 | 100 | 100 | |
| 49 | 1 | 7500 | 0 | 39 | 147 | -11 | 463 | 183 | 183 | 183 | 183 | 183 | 183 | 183 | 19 | 19 | 19 | 19 | 19 | 5 | 100 | 100 | |
| 50 | 1 | 8750 | 0 | 74 | 200 | -15 | 378 | 191 | 191 | 191 | 191 | 191 | 191 | 191 | 20 | 20 | 20 | 20 | 20 | 4 | 100 | 100 | |
| 51 | 1 | 9750 | 0 | 75 | 203 | -16 | 481 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 21 | 21 | 21 | 21 | 21 | 7 | 100 | 100 | |
| 52 | 1 | 10750 | 0 | 76 | 206 | -16 | 490 | 209 | 209 | 209 | 209 | 209 | 209 | 209 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 53 | 1 | 11000 | 0 | 57 | 159 | 0 | 399 | 218 | 218 | 218 | 218 | 218 | 218 | 218 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 54 | 1 | 12000 | 0 | 58 | 162 | 0 | 406 | 228 | 228 | 228 | 228 | 228 | 228 | 228 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 55 | 1 | 13750 | 0 | 78 | 215 | -17 | 414 | 239 | 239 | 239 | 239 | 239 | 239 | 239 | 22 | 22 | 22 | 22 | 22 | 10 | 100 | 100 | |
| 56 | 1 | 14000 | 0 | 59 | 168 | 0 | 421 | 250 | 250 | 250 | 250 | 250 | 250 | 250 | 22 | 22 | 22 | 22 | 22 | 10 | 100 | 100 | |
| 57 | 1 | 15750 | 0 | 80 | 221 | -17 | 535 | 261 | 261 | 261 | 261 | 261 | 261 | 261 | 22 | 22 | 22 | 22 | 22 | 8 | 100 | 100 | |
| 58 | 1 | 16000 | 0 | 61 | 174 | 0 | 435 | 274 | 274 | 274 | 274 | 274 | 274 | 274 | 23 | 23 | 23 | 23 | 23 | 6 | 100 | 100 | |
| 59 | 1 | 17000 | 0 | 62 | 177 | 0 | 442 | 287 | 287 | 287 | 287 | 287 | 287 | 287 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 60 | 1 | 19000 | 0 | 142 | 280 | -19 | 449 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 61 | 1 | 20000 | 0 | 143 | 283 | -19 | 457 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 24 | 24 | 24 | 24 | 24 | 100 | 100 | 100 | |
| 62 | 1 | 21000 | 0 | 144 | 286 | -20 | 580 | 329 | 329 | 329 | 329 | 329 | 329 | 329 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 63 | 1 | 32000 | 0 | 164 | 255 | -25 | 471 | 305 | 305 | 305 | 305 | 305 | 305 | 305 | 25 | 25 | 25 | 25 | 25 | 22 | 100 | 100 | |
| 64 | 1 | 36000 | 0 | 156 | 420 | -25 | 478 | 350 | 350 | 350 | 350 | 350 | 350 | 350 | 26 | 26 | 26 | 26 | 26 | 25 | 100 | 100 | |
| 65 | 1 | 28500 | 0 | 226 | 445 | -24 | 485 | 378 | 378 | 378 | 378 | 378 | 378 | 378 | 26 | 26 | 26 | 26 | 26 | 20 | 100 | 100 | |
| 66 | 1 | 31500 | 0 | 161 | 414 | -22 | 615 | 396 | 396 | 396 | 396 | 396 | 396 | 396 | 26 | 26 | 26 | 26 | 26 | 22 | 100 | 100 | |
| 67 | 1 | 35817 | 0 | 215 | 455 | -29 | 543 | 396 | 396 | 396 | 396 | 396 | 396 | 396 | 27 | 27 | 27 | 27 | 27 | 31 | 100 | 100 | |
| 68 | 1 | 38024 | 0 | 229 | 484 | -31 | 551 | 410 | 410 | 410 | 410 | 410 | 410 | 410 | 27 | 27 | 27 | 27 | 27 | 33 | 100 | 100 | |
| 69 | 1 | 40232 | 0 | 244 | 513 | -33 | 560 | 423 | 423 | 423 | 423 | 423 | 423 | 423 | 28 | 28 | 28 | 28 | 28 | 34 | 100 | 100 | |
| 70 | 1 | 42439 | 0 | 259 | 542 | -35 | 569 | 437 | 437 | 437 | 437 | 437 | 437 | 437 | 28 | 28 | 28 | 28 | 28 | 36 | 100 | 100 | |
| 71 | 1 | 44647 | 0 | 273 | 571 | -38 | 578 | 451 | 451 | 451 | 451 | 451 | 451 | 451 | 28 | 28 | 28 | 28 | 28 | 38 | 100 | 100 | |
| 72 | 1 | 46855 | 0 | 288 | 599 | -40 | 586 | 465 | 465 | 465 | 465 | 465 | 465 | 465 | 29 | 29 | 29 | 29 | 29 | 39 | 100 | 100 | |
| 73 | 1 | 49062 | 0 | 303 | 628 | -42 | 595 | 479 | 479 | 479 | 479 | 479 | 479 | 479 | 29 | 29 | 29 | 29 | 29 | 41 | 100 | 100 | |
| 74 | 1 | 51270 | 0 | 317 | 657 | -44 | 604 | 493 | 493 | 493 | 493 | 493 | 493 | 493 | 30 | 30 | 30 | 30 | 30 | 42 | 100 | 100 | |
| 75 | 1 | 53477 | 0 | 332 | 686 | -46 | 612 | 507 | 507 | 507 | 507 | 507 | 507 | 507 | 30 | 30 | 30 | 30 | 30 | 44 | 100 | 100 | |
| 76 | 1 | 55685 | 0 | 347 | 715 | -48 | 621 | 520 | 520 | 520 | 520 | 520 | 520 | 520 | 31 | 31 | 31 | 31 | 31 | 45 | 100 | 100 | |
| 77 | 1 | 57892 | 0 | 361 | 744 | -51 | 630 | 534 | 534 | 534 | 534 | 534 | 534 | 534 | 31 | 31 | 31 | 31 | 31 | 47 | 100 | 100 | |
| 78 | 1 | 60100 | 0 | 376 | 773 | -53 | 639 | 548 | 548 | 548 | 548 | 548 | 548 | 548 | 31 | 31 | 31 | 31 | 31 | 49 | 100 | 100 | |
| 79 | 1 | 62308 | 0 | 391 | 802 | -55 | 647 | 562 | 562 | 562 | 562 | 562 | 562 | 562 | 32 | 32 | 32 | 32 | 32 | 50 | 100 | 100 | |
| 80 | 1 | 64515 | 0 | 405 | 831 | -57 | 656 | 576 | 576 | 576 | 576 | 576 | 576 | 576 | 32 | 32 | 32 | 32 | 32 | 52 | 100 | 100 | |
| 81 | 1 | 66723 | 0 | 420 | 860 | -59 | 665 | 590 | 590 | 590 | 590 | 590 | 590 | 590 | 33 | 33 | 33 | 33 | 33 | 53 | 100 | 100 | |
| 82 | 1 | 68930 | 0 | 435 | 889 | -61 | 673 | 604 | 604 | 604 | 604 | 604 | 604 | 604 | 33 | 33 | 33 | 33 | 33 | 55 | 100 | 100 | |
| 83 | 1 | 71138 | 0 | 449 | 918 | -64 | 682 | 618 | 618 | 618 | 618 | 618 | 618 | 618 | 34 | 34 | 34 | 34 | 34 | 56 | 100 | 100 | |
| 84 | 1 | 73345 | 0 | 464 | 947 | -66 | 691 | 631 | 631 | 631 | 631 | 631 | 631 | 631 | 34 | 34 | 34 | 34 | 34 | 58 | 100 | 100 | |
| 85 | 1 | 75553 | 0 | 479 | 976 | -68 | 700 | 645 | 645 | 645 | 645 | 645 | 645 | 645 | 34 | 34 | 34 | 34 | 34 | 60 | 100 | 100 | |
| 86 | 1 | 77761 | 0 | 493 | 1005 | -70 | 708 | 659 | 659 | 659 | 659 | 659 | 659 | 659 | 35 | 35 | 35 | 35 | 35 | 61 | 100 | 100 | |
| 87 | 1 | 79968 | 0 | 508 | 1034 | -72 | 717 | 673 | 673 | 673 | 673 | 673 | 673 | 673 | 35 | 35 | 35 | 35 | 35 | 63 | 100 | 100 | |
| 88 | 1 | 82176 | 0 | 523 | 1063 | -74 | 726 | 687 | 687 | 687 | 687 | 687 | 687 | 687 | 36 | 36 | 36 | 36 | 36 | 64 | 100 | 100 | |
| 89 | 1 | 84383 | 0 | 537 | 1092 | -77 | 735 | 701 | 701 | 701 | 701 | 701 | 701 | 701 | 36 | 36 | 36 | 36 | 36 | 66 | 100 | 100 | |
| 90 | 1 | 86591 | 0 | 552 | 1121 | -79 | 743 | 715 | 715 | 715 | 715 | 715 | 715 | 715 | 36 | 36 | 36 | 36 | 36 | 67 | 100 | 100 | |
| 91 | 1 | 88798 | 0 | 567 | 1150 | -81 | 752 | 728 | 728 | 728 | 728 | 728 | 728 | 728 | 37 | 37 | 37 | 37 | 37 | 69 | 100 | 100 | |
| 92 | 1 | 91006 | 0 | 581 | 1179 | -83 | 761 | 742 | 742 | 742 | 742 | 742 | 742 | 742 | 37 | 37 | 37 | 37 | 37 | 71 | 100 | 100 | |
| 93 | 1 | 93214 | 0 | 596 | 1207 | -85 | 769 | 756 | 756 | 756 | 756 | 756 | 756 | 756 | 38 | 38 | 38 | 38 | 38 | 72 | 100 | 100 | |
| 94 | 1 | 95421 | 0 | 611 | 1236 | -87 | 778 | 770 | 770 | 770 | 770 | 770 | 770 | 770 | 38 | 38 | 38 | 38 | 38 | 74 | 100 | 100 | |
| 95 | 1 | 97629 | 0 | 625 | 1265 | -90 | 787 | 784 | 784 | 784 | 784 | 784 | 784 | 784 | 39 | 39 | 39 | 39 | 39 | 75 | 100 | 100 | |
| 96 | 1 | 99836 | 0 | 640 | 1294 | -92 | 796 | 798 | 798 | 798 | 798 | 798 | 798 | 798 | 39 | 39 | 39 | 39 | 39 | 77 | 100 | 100 | |
| 97 | 1 | 102044 | 0 | 655 | 1323 | -94 | 804 | 812 | 812 | 812 | 812 | 812 | 812 | 812 | 39 | 39 | 39 | 39 | 39 | 78 | 100 | 100 | |
| 98 | 1 | 104252 | 0 | 669 | 1352 | -96 | 813 | 826 | 826 | 826 | 826 | 826 | 826 | 826 | 40 | 40 | 40 | 40 | 40 | 80 | 100 | 100 | |
| 99 | 1 | 106459 | 0 | 684 | 1381 | -98 | 822 | 839 | 839 | 839 | 839 | 839 | 839 | 839 | 40 | 40 | 40 | 40 | 40 | 82 | 100 | 100 | |
| 100 | 1 | 108667 | 0 | 699 | 1410 | -100 | 830 | 853 | 853 | 853 | 853 | 853 | 853 | 853 | 41 | 41 | 41 | 41 | 41 | 83 | 100 | 100 | |
| 1 | 2 | 11 | 0 | 1 | 2500 | 0 | 28 | 79 | 79 | 79 | 79 | 79 | 79 | 79 | 1 | 1 | 1 | 1 | 1 | 0 | 100 | 100 | ABH |
| 2 | 2 | 60 | 0 | 1 | 10 | 0 | 35 | 93 | 93 | 93 | 93 | 93 | 93 | 93 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 3 | 2 | 39 | 0 | 1 | 6 | 0 | 52 | 84 | 84 | 84 | 84 | 84 | 84 | 84 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 4 | 2 | 56 | 0 | 1 | 8 | 0 | 61 | 86 | 86 | 86 | 86 | 86 | 86 | 86 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | S |
| 5 | 2 | 75 | 0 | 2 | 12 | 0 | 56 | 75 | 75 | 75 | 75 | 80 | 75 | 75 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 6 | 2 | 96 | 0 | 1 | 12 | 0 | 63 | 89 | 89 | 89 | 89 | 89 | 89 | 89 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 7 | 2 | 119 | 0 | 1 | 14 | 0 | 70 | 91 | 91 | 91 | 91 | 91 | 91 | 91 | 2 | 2 | 2 | 2 | 2 | 0 | 100 | 100 | |
| 8 | 2 | 144 | 0 | 1 | 16 | 0 | 78 | 92 | 92 | 92 | 92 | 92 | 92 | 92 | 3 | 3 | 3 | 3 | 3 | 0 | 100 | 100 | f |
| 9 | 2 | 171 | 0 | 9 | 20 | 0 | 85 | 82 | 82 | 77 | 82 | 76 | 77 | 72 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 10 | 2 | 200 | 0 | 1 | 20 | 0 | 92 | 94 | 94 | 94 | 94 | 94 | 94 | 94 | 4 | 4 | 4 | 4 | 4 | 0 | 100 | 100 | |
| 11 | 2 | 231 | 0 | 1 | 22 | 0 | 124 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 12 | 2 | 264 | 0 | 1 | 24 | 0 | 106 | 95 | 95 | 95 | 95 | 95 | 95 | 95 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 13 | 2 | 299 | 0 | 1 | 26 | 0 | 113 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 5 | 5 | 5 | 5 | 5 | 0 | 100 | 100 | |
| 14 | 2 | 336 | 0 | 1 | 28 | 0 | 120 | 96 | 96 | 96 | 96 | 96 | 96 | 96 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 15 | 2 | 375 | 0 | 1 | 30 | 0 | 128 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 16 | 2 | 416 | 0 | 1 | 32 | 0 | 135 | 97 | 97 | 97 | 97 | 97 | 97 | 97 | 6 | 6 | 6 | 6 | 6 | 0 | 100 | 100 | |
| 17 | 2 | 459 | 0 | 1 | 34 | 0 | 142 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 7 | 7 | 7 | 7 | 7 | 0 | 100 | 100 | |
| 18 | 2 | 504 | 0 | 8 | 36 | 0 | 186 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 7 | 7 | 7 | 7 | 7 | 0 | 100 | 100 | |
| 19 | 2 | 551 | 0 | 1 | 38 | 0 | 156 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 20 | 2 | 600 | 0 | 8 | 42 | -5 | 163 | 98 | 98 | 98 | 98 | 98 | 98 | 98 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 21 | 2 | 651 | 0 | 1 | 42 | 0 | 213 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 8 | 8 | 8 | 8 | 8 | 0 | 100 | 100 | |
| 22 | 2 | 704 | 0 | 1 | 44 | 0 | 178 | 99 | 99 | 99 | 99 | 99 | 99 | 99 | 9 | 9 | 9 | 9 | 9 | 0 | 100 | 100 | |
| 23 | 2 | 759 | 0 | 1 | 46 | 0 | 185 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 9 | 9 | 9 | 9 | 9 | 1 | 100 | 100 | |
| 24 | 2 | 816 | 0 | 1 | 48 | 0 | 192 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 25 | 2 | 875 | 0 | 1 | 50 | 0 | 199 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 10 | 10 | 10 | 10 | 10 | 1 | 100 | 100 | |
| 26 | 2 | 936 | 0 | 1 | 52 | 0 | 206 | 102 | 102 | 102 | 102 | 102 | 102 | 102 | 10 | 10 | 10 | 10 | 10 | 0 | 100 | 100 | |
| 27 | 2 | 999 | 0 | 1 | 54 | 0 | 213 | 103 | 103 | 103 | 103 | 74 | 103 | 103 | 11 | 11 | 11 | 11 | 11 | 0 | 100 | 100 | f |
| 28 | 2 | 1064 | 0 | 11 | 56 | 0 | 221 | 104 | 104 | 104 | 104 | 104 | 104 | 104 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 29 | 2 | 1131 | 0 | 11 | 58 | 0 | 228 | 105 | 105 | 105 | 105 | 105 | 105 | 105 | 11 | 11 | 11 | 11 | 11 | 1 | 100 | 100 | |
| 30 | 2 | 1200 | 0 | 12 | 60 | -7 | 235 | 106 | 106 | 106 | 106 | 106 | 106 | 106 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 31 | 2 | 1271 | 0 | 13 | 62 | -7 | 242 | 108 | 108 | 108 | 108 | 108 | 108 | 108 | 12 | 12 | 12 | 12 | 12 | 1 | 100 | 100 | |
| 32 | 2 | 1344 | 0 | 13 | 64 | -7 | 249 | 109 | 109 | 109 | 109 | 109 | 109 | 109 | 13 | 13 | 13 | 13 | 13 | 1 | 100 | 100 | |
| 33 | 2 | 1419 | 0 | 13 | 66 | -7 | 256 | 111 | 111 | 111 | 111 | 74 | 111 | 111 | 13 | 13 | 13 | 13 | 13 | 1 | 100 | 100 | f |
| 34 | 2 | 1496 | 0 | 14 | 68 | -8 | 263 | 113 | 113 | 113 | 113 | 113 | 113 | 113 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | |
| 35 | 2 | 559 | 0 | 2 | 32 | -8 | 271 | 101 | 101 | 101 | 101 | 101 | 101 | 101 | 14 | 14 | 14 | 14 | 14 | 0 | 100 | 100 | |
| 36 | 2 | 1656 | 0 | 14 | 72 | -8 | 278 | 118 | 118 | 118 | 118 | 118 | 118 | 118 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | |
| 37 | 2 | 1739 | 0 | 14 | 74 | -8 | 285 | 121 | 121 | 121 | 121 | 121 | 121 | 121 | 14 | 14 | 14 | 14 | 14 | 1 | 100 | 100 | I |
| 38 | 2 | 1824 | 0 | 15 | 76 | -8 | 365 | 124 | 124 | 124 | 124 | 124 | 124 | 124 | 15 | 15 | 15 | 15 | 15 | 1 | 100 | 100 | |
| 39 | 2 | 1911 | 0 | 16 | 78 | -9 | 374 | 128 | 128 | 128 | 128 | 128 | 128 | 128 | 15 | 15 | 15 | 15 | 15 | 1 | 100 | 100 | |
| 40 | 2 | 3250 | 0 | 32 | 120 | 0 | 306 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 16 | 16 | 16 | 16 | 16 | 2 | 100 | 100 | |
| 41 | 2 | 2091 | 0 | 33 | 123 | -9 | 314 | 136 | 136 | 136 | 136 | 136 | 136 | 136 | 16 | 16 | 16 | 16 | 16 | 1 | 100 | 100 | |
| 42 | 2 | 2184 | 0 | 34 | 126 | -9 | 321 | 140 | 140 | 140 | 140 | 140 | 140 | 140 | 17 | 17 | 17 | 17 | 17 | 1 | 100 | 100 | I |
| 43 | 2 | 2279 | 0 | 34 | 129 | -10 | 410 | 145 | 145 | 145 | 145 | 145 | 145 | 145 | 18 | 18 | 18 | 18 | 18 | 2 | 100 | 100 | N |
| 44 | 2 | 2376 | 0 | 35 | 132 | -10 | 335 | 151 | 151 | 151 | 151 | 151 | 151 | 151 | 18 | 18 | 18 | 18 | 18 | 1 | 100 | 100 | I |
| 45 | 2 | 2475 | 0 | 36 | 135 | -10 | 428 | 156 | 156 | 156 | 156 | 156 | 156 | 156 | 18 | 18 | 18 | 18 | 18 | 2 | 100 | 100 | |
| 46 | 2 | 8000 | 0 | 80 | 130 | 15 | 349 | 169 | 169 | 169 | 169 | 169 | 169 | 169 | 18 | 18 | 18 | 18 | 18 | 6 | 100 | 100 | MCID |
| 47 | 2 | 6500 | 0 | 38 | 141 | -10 | 446 | 169 | 169 | 169 | 169 | 169 | 169 | 169 | 18 | 18 | 18 | 18 | 18 | 5 | 100 | 100 | |
| 48 | 2 | 7000 | 0 | 38 | 144 | -11 | 331 | 176 | 176 | 176 | 176 | 74 | 176 | 176 | 19 | 19 | 19 | 19 | 19 | 35 | 100 | 100 | f |
| 49 | 2 | 7500 | 0 | 39 | 147 | -11 | 463 | 183 | 183 | 183 | 183 | 183 | 183 | 183 | 19 | 19 | 19 | 19 | 19 | 5 | 100 | 100 | |
| 50 | 2 | 8750 | 0 | 74 | 200 | -15 | 378 | 191 | 191 | 191 | 191 | 191 | 191 | 191 | 20 | 20 | 20 | 20 | 20 | 4 | 100 | 100 | |
| 51 | 2 | 9750 | 0 | 75 | 203 | -16 | 481 | 200 | 200 | 200 | 200 | 200 | 200 | 200 | 21 | 21 | 21 | 21 | 21 | 7 | 100 | 100 | |
| 52 | 2 | 10750 | 0 | 76 | 206 | -16 | 490 | 209 | 209 | 209 | 209 | 209 | 209 | 209 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 53 | 2 | 11000 | 0 | 57 | 159 | 0 | 399 | 218 | 218 | 218 | 218 | 218 | 218 | 218 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 54 | 2 | 12000 | 0 | 58 | 162 | 0 | 406 | 228 | 228 | 228 | 228 | 228 | 228 | 228 | 21 | 21 | 21 | 21 | 21 | 8 | 100 | 100 | |
| 55 | 2 | 13750 | 0 | 78 | 215 | -17 | 414 | 239 | 239 | 239 | 239 | 239 | 239 | 239 | 22 | 22 | 22 | 22 | 22 | 10 | 100 | 100 | |
| 56 | 2 | 14000 | 0 | 59 | 168 | 0 | 421 | 250 | 250 | 250 | 250 | 250 | 250 | 250 | 22 | 22 | 22 | 22 | 22 | 10 | 100 | 100 | |
| 57 | 2 | 15750 | 0 | 80 | 221 | -17 | 535 | 261 | 261 | 261 | 261 | 261 | 261 | 261 | 22 | 22 | 22 | 22 | 22 | 8 | 100 | 100 | |
| 58 | 2 | 16000 | 0 | 61 | 174 | 0 | 435 | 274 | 274 | 274 | 274 | 274 | 274 | 274 | 23 | 23 | 23 | 23 | 23 | 6 | 100 | 100 | |
| 59 | 2 | 17000 | 0 | 62 | 177 | 0 | 442 | 287 | 287 | 287 | 287 | 287 | 287 | 287 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 60 | 2 | 19000 | 0 | 142 | 280 | -19 | 449 | 300 | 300 | 300 | 300 | 300 | 300 | 300 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 61 | 2 | 20000 | 0 | 143 | 283 | -19 | 457 | 314 | 314 | 314 | 314 | 314 | 314 | 314 | 24 | 24 | 24 | 24 | 24 | 100 | 100 | 100 | |
| 62 | 2 | 21000 | 0 | 144 | 286 | -20 | 580 | 329 | 329 | 329 | 329 | 329 | 329 | 329 | 24 | 24 | 24 | 24 | 24 | 8 | 100 | 100 | |
| 63 | 2 | 20750 | 0 | 28 | 200 | -25 | 471 | 239 | 239 | 239 | 239 | 239 | 239 | 239 | 25 | 25 | 25 | 25 | 25 | 8 | 100 | 100 | SE |
| 64 | 2 | 22542 | 0 | 320 | 900 | -21 | 478 | 361 | 361 | 361 | 361 | 361 | 361 | 361 | 74 | 74 | 74 | 74 | 74 | 386 | 100 | 100 | SEUMCfS |
| 65 | 2 | 23561 | 0 | 226 | 445 | -24 | 485 | 378 | 378 | 378 | 378 | 378 | 378 | 378 | 26 | 26 | 26 | 26 | 26 | 20 | 100 | 100 | |
| 66 | 2 | 24580 | 0 | 161 | 414 | -22 | 615 | 396 | 396 | 396 | 396 | 396 | 396 | 396 | 26 | 26 | 26 | 26 | 26 | 22 | 100 | 100 | SEFTMCNID |
| 67 | 2 | 25599 | 0 | 273 | 924 | -22 | 624 | 414 | 414 | 414 | 414 | 74 | 414 | 414 | 59 | 59 | 59 | 59 | 59 | 25 | 100 | 100 | SERNDf |
| 68 | 2 | 26619 | 0 | 636 | 1344 | -40 | 1266 | 450 | 450 | 450 | 450 | 450 | 450 | 450 | 51 | 51 | 77 | 51 | 77 | 70 | 100 | 100 | SEMCIDf |
| 69 | 2 | 27638 | 0 | 286 | 984 | -23 | 642 | 453 | 453 | 453 | 453 | 74 | 453 | 453 | 60 | 60 | 60 | 60 | 60 | 30 | 100 | 100 | SFf |
| 70 | 2 | 28657 | 0 | 440 | 2000 | -35 | 521 | 473 | 473 | 473 | 473 | 473 | 473 | 473 | 27 | 27 | 27 | 27 | 27 | 5 | 100 | 100 | |
| 71 | 2 | 1007751 | 0 | 560 | 3000 | -25 | 1663 | 496 | 496 | 496 | 496 | 496 | 496 | 496 | 283 | 283 | 283 | 283 | 283 | 5 | 100 | 100 | ERUMCIf |
| 72 | 2 | 1207751 | 0 | 520 | 1875 | -25 | 1070 | 518 | 518 | 518 | 518 | 74 | 518 | 518 | 298 | 298 | 298 | 298 | 298 | 186 | 100 | 100 | SERTMCNIDf |
| 73 | 2 | 1407751 | 0 | 1625 | 3600 | -15 | 2096 | 355 | 355 | 355 | 355 | 355 | 355 | 355 | 136 | 136 | 136 | 136 | 136 | 0 | 100 | 100 | SERFQUMCNIDf |
| 74 | 2 | 1607751 | 0 | 1072 | 1942 | -24 | 1648 | 565 | 565 | 565 | 565 | 565 | 565 | 565 | 90 | 90 | 90 | 90 | 90 | 600 | 100 | 100 | SEFTMCNIDf |
| 75 | 2 | 1657451 | 0 | 248 | 750 | -33 | 696 | 590 | 590 | 590 | 590 | 590 | 590 | 590 | 144 | 144 | 144 | 144 | 144 | 52 | 100 | 100 | |
| 76 | 2 | 1707151 | 0 | 918 | 1670 | -40 | 1550 | 616 | 616 | 616 | 616 | 616 | 616 | 616 | 362 | 362 | 362 | 362 | 362 | 72 | 100 | 100 | STMCNDf |
| 77 | 2 | 1756851 | 0 | 788 | 2050 | -32 | 1570 | 637 | 637 | 637 | 637 | 637 | 637 | 637 | 110 | 110 | 110 | 110 | 110 | 500 | 100 | 100 | SERrFQMCNIDf |
| 78 | 2 | 1806551 | 0 | 195 | 546 | -29 | 2235 | 670 | 670 | 670 | 670 | 670 | 670 | 670 | 87 | 87 | 87 | 87 | 87 | 7 | 100 | 100 | If |
| 79 | 2 | 1856251 | 0 | 563 | 2440 | -35 | 2181 | 729 | 729 | 729 | 729 | 729 | 729 | 729 | 205 | 205 | 205 | 205 | 205 | 800 | 100 | 100 | SERTQMCNIDf |
| 80 | 2 | 1905951 | 0 | 82 | 340 | -25 | 1256 | 891 | 891 | 891 | 891 | 891 | 891 | 891 | 45 | 45 | 45 | 45 | 45 | 6 | 100 | 100 | |
| 81 | 2 | 1955651 | 0 | -60 | 728 | -24 | 1765 | 901 | 901 | 901 | 901 | 901 | 901 | 901 | 0 | 0 | 0 | 0 | 0 | 327 | 100 | 100 | SERFTQUMCNIDf |
| 82 | 2 | 2005351 | 0 | -250 | 501 | -21 | 1768 | 965 | 965 | 965 | 965 | 965 | 965 | 965 | -54 | -54 | -54 | -54 | -54 | 344 | 100 | 100 | SERFTQUMCNIDf |
| 83 | 2 | 2055051 | 0 | -439 | 274 | -19 | 1770 | 1030 | 1030 | 1030 | 1030 | 1030 | 1030 | 1030 | -108 | -108 | -108 | -108 | -108 | 361 | 100 | 100 | SERFTQUMCNIDf |
| 84 | 2 | 2104751 | 0 | -629 | 47 | -16 | 1772 | 1094 | 1094 | 1094 | 1094 | 1094 | 1094 | 1094 | -162 | -162 | -162 | -162 | -162 | 378 | 100 | 100 | SERFTQUMCNIDf |
| 85 | 2 | 2154451 | 0 | -819 | -180 | -13 | 1775 | 1158 | 1158 | 1158 | 1158 | 1158 | 1158 | 1158 | -216 | -216 | -216 | -216 | -216 | 395 | 100 | 100 | SERFTQUMCNIDf |
| 86 | 2 | 2204151 | 0 | -1008 | -407 | -11 | 1777 | 1222 | 1222 | 1222 | 1222 | 1222 | 1222 | 1222 | -269 | -269 | -269 | -269 | -269 | 411 | 100 | 100 | SERFTQUMCNIDf |
| 87 | 2 | 2253851 | 0 | -1198 | -634 | -8 | 1779 | 1286 | 1286 | 1286 | 1286 | 1286 | 1286 | 1286 | -323 | -323 | -323 | -323 | -323 | 428 | 100 | 100 | SERFTQUMCNIDf |
| 88 | 2 | 2303551 | 0 | -1388 | -861 | -5 | 1781 | 1351 | 1351 | 1351 | 1351 | 1351 | 1351 | 1351 | -377 | -377 | -377 | -377 | -377 | 445 | 100 | 100 | SERFTQUMCNIDf |
| 89 | 2 | 2353251 | 0 | -1578 | -1088 | -3 | 1784 | 1415 | 1415 | 1415 | 1415 | 1415 | 1415 | 1415 | -431 | -431 | -431 | -431 | -431 | 462 | 100 | 100 | SERFTQUMCNIDf |
| 90 | 2 | 2402951 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDf |
| 91 | 2 | 2452651 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 92 | 2 | 2502351 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 93 | 2 | 2552051 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 94 | 2 | 2601751 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 95 | 2 | 2651451 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 96 | 2 | 2701151 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 97 | 2 | 2750851 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 98 | 2 | 2800551 | 0 | 86 | 360 | -26 | 1328 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1079 | 1033 | 1033 | 1033 | 1033 | 1033 | 210 | 100 | 100 | SERFTQUMCNIDfW |
| 99 | 2 | 3500000 | 0 | 2000 | 6999 | -50 | 696 | 590 | 590 | 590 | 590 | 590 | 590 | 590 | 192 | 192 | 192 | 192 | 192 | 500 | 100 | 100 | SERFTQUMCNIDfW |
| 100 | 2 | 3500000 | 0 | 2000 | 6999 | -50 | 696 | 590 | 590 | 590 | 590 | 590 | 590 | 590 | 192 | 192 | 192 | 192 | 192 | 500 | 100 | 100 | SERFTQUMCNIDfW |
+-------+------+---------+------+--------+--------+--------------+------+------+------+------+------+------+------+------+------+------+------+------+------+----------+------------+-----------+-----------------+
300 rows in set
Now, this is what NPC's in any zone will recieve, they will get this base scaling data as long as they have a level and their name follows one of the conventions. You could create a brand new NPC, give it level 90, save, repop the zone and the zonecontroller will take care of its scaling numbers within about 5 seconds.
Topical Multipliers
You can set per zone multipliers by simply creating an entry in the table `cust_npc_zonescale_static`, this information is keyed with some simple information: - zonesn - This is the zones short name in which you want to set custom multipliers for
- Version - the Version (Instance) in which you want these rules to apply, meaning you could have varied difficulties of a zone
- Type - The convention that was listed above with names
This is an example of the table from my server. The beauty of this is that when you start to know what feels right to your players, you can use the similar multipliers for another zone but adjust the numbers up a bit.
To give you an idea, if you had a NPC that was level 90, and had a named name (#Boogabooga). Not only would he get base scaling data for Type 1, you could then add multipliers to his type in the zone. Let's say this guy is in crushbone, and I set the maxdmg multiplier for this zone to 6, it would be whatever the base data is for that dataset, multiplied by 6. Pretty easy to understand. To narrow it down, #Boogabooga would be affected by this row value here:
Code:
+----------------+---------+----+------+--------+--------+--------------+----+-----------+------------+---------+----------------+------+----------+
| zonesn | version | hp | mana | mindmg | maxdmg | attack_speed | ac | healscale | spellscale | hpregen | specialattacks | type | accuracy |
+----------------+---------+----+------+--------+--------+--------------+----+-----------+------------+---------+----------------+------+----------+
| crushbone | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 1 | 100 |
The only field that obviously isn't a multiplier is the accuracy field and the special attacks field, that is pretty self explanatory. If this is empty, it will let the existing NPC special attacks exist. I'm not sure how the special attacks will work with the new system since it was all changed up, you might be able to simply replace the field with the new convention values and it would be set the same way.
Code:
mysql> SELECT * FROM `cust_npc_zonescale_static` order by type, zonesn
;
+----------------+---------+----+------+--------+--------+--------------+----+-----------+------------+---------+----------------+------+----------+
| zonesn | version | hp | mana | mindmg | maxdmg | attack_speed | ac | healscale | spellscale | hpregen | specialattacks | type | accuracy |
+----------------+---------+----+------+--------+--------+--------------+----+-----------+------------+---------+----------------+------+----------+
| alkabormare | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 0 |
| atiiki | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 0 |
| crushbone | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 100 |
| gukbottom | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 200 |
| karnor | 1 | 2 | 1 | 2 | 7 | 1 | 2 | 1 | 1 | 3 | | 0 | 300 |
| oldblackburrow | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 100 |
| soldungb | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 0 |
| soldungb | 2 | 5 | 1 | 4 | 9 | 1 | 2 | 5 | 5 | 8 | | 0 | 100 |
| somnium | 0 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 0 |
| thulelibrary | 1 | 2 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 0 | 0 |
| alkabormare | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 1 | 0 |
| atiiki | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 3 | | 1 | 0 |
| crushbone | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 1 | 100 |
| gukbottom | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 3 | | 1 | 200 |
| karnor | 1 | 5 | 1 | 2 | 8 | 1 | 2 | 1 | 1 | 8 | | 1 | 100 |
| oldblackburrow | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 1 | 100 |
| soldungb | 2 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 3 | | 1 | 100 |
| soldungb | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 3 | | 1 | 0 |
| somnium | 0 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 3 | | 1 | 0 |
| thulelibrary | 1 | 3 | 1 | 2 | 6 | 1 | 2 | 1 | 1 | 5 | | 1 | 0 |
| soldungb | 2 | 3 | 1 | 1 | 1 | 1 | 2 | 10 | 10 | 3 | | 2 | 0 |
| somnium | 0 | 3 | 1 | 3 | 1 | 2 | 2 | 1 | 1 | 3 | SERFTQUMCNDf | 2 | 0 |
+----------------+---------+----+------+--------+--------+--------------+----+-----------+------------+---------+----------------+------+----------+
22 rows in set
The last table I will explain is an under used one by myself, but may come in useful for others. It is a table that allows someone to set manual static entries for an NPC that will be placed very last in the scaling process. You could set a raid mob to be set at special numbers with this table using very similar rules of the table before it.
Code:
mysql> SELECT * FROM `cust_npc_scale_static`
order by zonesn;
+-------------+--------+------+------+--------+--------+--------------+------+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+----------+------------+-----------+-----------------+---------------+----------------+
| name | zonesn | hp | mana | mindmg | maxdmg | attack_speed | AC | STR | STA | DEX | AGI | _INT | WIS | CHA | MR | CR | DR | FR | PR | hp_regen | spellscale | healscale | npcspecialattks | usediabloloot | localloottable |
+-------------+--------+------+------+--------+--------+--------------+------+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+----------+------------+-----------+-----------------+---------------+----------------+
| Storm_Fury | atiiki | 4545 | 100 | 100 | 998458 | 1 | 1000 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 500 | 2000 | 100 | 100 | SEFMCNIDf | 0 | 331 |
+-------------+--------+------+------+--------+--------+--------------+------+-----+-----+-----+-----+------+-----+-----+-----+-----+-----+-----+-----+----------+------------+-----------+-----------------+---------------+----------------+
1 row in set
----------------------------------------------
The Code:
You will need to have an entry in global_player.pl that essentially spawns the zonecontroller if it doesn't already exist.
First, here is the zonecontroller npc_types data, it assumed NPC ID 50 since it is not used in PEQ.
Code:
INSERT INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `mana`, `gender`, `texture`, `helmtexture`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `alt_currency_id`,
`npc_spells_id`, `npc_faction_id`, `adventure_template_id`, `trap_template`, `mindmg`, `maxdmg`, `attack_count`, `npcspecialattks`, `aggroradius`, `face`, `luclin_hairstyle`, `luclin_haircolor`, `luclin_eyecolor`, `luclin_eyecolor2`, `luclin_beardcolor`,
`luclin_beard`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `armortint_id`, `armortint_red`, `armortint_green`, `armortint_blue`, `d_meele_texture1`, `d_meele_texture2`, `prim_melee_type`, `sec_melee_type`, `runspeed`, `MR`, `CR`,
`DR`, `FR`, `PR`, `Corrup`, `see_invis`, `see_invis_undead`, `qglobal`, `AC`, `npc_aggro`, `spawn_limit`, `attack_speed`, `findable`, `STR`, `STA`, `DEX`, `AGI`, `_INT`, `WIS`, `CHA`, `see_hide`, `see_improved_hide`, `trackable`, `isbot`,
`exclude`, `ATK`, `Accuracy`, `slow_mitigation`, `version`, `maxlevel`, `scalerate`, `private_corpse`, `unique_spawn_by_name`, `underwater`, `isquest`, `emoteid`) VALUES (50, 'zonecontroller', NULL, 1, 240, 1, 11, 31, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -1, 'ZiGH', 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 1.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 80, 75, 75, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0);
global_player.pl :: This makes sure the controller is spawned when a player enters the zone, if not, spawn it.
Code:
sub EVENT_ENTERZONE{
if(!$entity_list->GetNPCByNPCTypeID(50)){ quest::spawn2(50, 0, 0, 0, 0, 0, 0); $client->NPCSpawn($entity_list->GetNPCByNPCTypeID(50), "add", 1); } #::: Automatic Scaling
}
zonecontroller.pl :: This goes in your global or templates folder
Code:
#::: Akkadius
#::: Zonecontroller
#::: This Entity sits in every zone ready to accept signals to handle scaling requests
#::: First use of this will be to handle automatic scaling of the zone if desired
#::: Insert Zone Controller into database
#::: SQL: (Assumes NPC ID 50)
#::: INSERT INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `mana`, `gender`, `texture`, `helmtexture`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `alt_currency_id`,
`npc_spells_id`, `npc_faction_id`, `adventure_template_id`, `trap_template`, `mindmg`, `maxdmg`, `attack_count`, `npcspecialattks`, `aggroradius`, `face`, `luclin_hairstyle`, `luclin_haircolor`, `luclin_eyecolor`, `luclin_eyecolor2`, `luclin_beardcolor`,
`luclin_beard`, `drakkin_heritage`, `drakkin_tattoo`, `drakkin_details`, `armortint_id`, `armortint_red`, `armortint_green`, `armortint_blue`, `d_meele_texture1`, `d_meele_texture2`, `prim_melee_type`, `sec_melee_type`, `runspeed`, `MR`, `CR`,
`DR`, `FR`, `PR`, `Corrup`, `see_invis`, `see_invis_undead`, `qglobal`, `AC`, `npc_aggro`, `spawn_limit`, `attack_speed`, `findable`, `STR`, `STA`, `DEX`, `AGI`, `_INT`, `WIS`, `CHA`, `see_hide`, `see_improved_hide`, `trackable`, `isbot`,
`exclude`, `ATK`, `Accuracy`, `slow_mitigation`, `version`, `maxlevel`, `scalerate`, `private_corpse`, `unique_spawn_by_name`, `underwater`, `isquest`, `emoteid`) VALUES (50, 'zonecontroller', NULL, 1, 240, 1, 11, 31, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, -1, 'ZiGH', 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 28, 1.25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 75, 75, 75, 80, 75, 75, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0);
sub EVENT_SPAWN{
$npc->TempName("");
#$Debug = " ";
quest::gmsay("[Zonecontroller] [ALIVE] Zone: $zonesn Instance Version: $instanceversion InstID $instanceversion", 15);
LoadStaticNPCScaling($zonesn); #::: Load NPC Static Scaling
LoadStaticZoneScaling(); #::: Load Zone Static Scaling
quest::settimer("scaleall", 1); #::: Run Scaling routine
quest::settimer("scaleall", 3); #::: Run Scaling routine
$ScalingLoaded = "";
}
sub EVENT_TIMER{
if($timer eq "scaleall"){ ScaleProcedure(); quest::stoptimer("scaleall"); quest::gmsay("Scaling routine complete", 15); }
if($timer eq "levelset"){
@ent = $entity_list->GetNPCList();
$Level = $npc->GetEntityVariable("queuesetlevel2");
$Variance = $npc->GetEntityVariable("queuesetlevel3");
foreach $NPC (@ent){
if($NPC->GetNPCTypeID() > 1000){
if($Variance > 0){ } else{ $Variance = 0; }
$NPC->SetLevel($Level + (RandomRange(0 - $Variance, $Variance)));
}
}
$npc->SetEntityVariable("queuesetlevel", 0);
$npc->SetEntityVariable("queuesetlevel2", 0);
$npc->SetEntityVariable("queuesetlevel3", 0);
quest::gmsay("Level Scaling Done...", 15);
quest::stoptimer("levelset");
}
}
sub EVENT_SIGNAL{
if($signal == 10){ ScaleProcedure(); }
if($signal == 11){ $npc->SetEntityVariable("queuesetlevel", 1); return; }
if($npc->GetEntityVariable("queuesetlevel") > 0 && $npc->GetEntityVariable("queuesetlevel2") == 0){ $npc->SetEntityVariable("queuesetlevel2", $signal); quest::settimer("levelset", 1); }
if($npc->GetEntityVariable("queuesetlevel2") > 0){ $npc->SetEntityVariable("queuesetlevel3", $signal); }
#::: Getting Signal from Spawned NPC #:::
if($signal == 21){ $npc->SetEntityVariable("queuesetnpc", 1); return; }
if($npc->GetEntityVariable("queuesetnpc") eq "1" && $ScalingLoaded == 3){ $npc->SetEntityVariable("queuesetnpc", 0); ScaleProcedure($signal); }
if($signal == 23){ $Debug = 1; }
}
sub ScaleProcedure{
#::: Read from DB
if(!$SD[1][0][0]){ LoadScaling(); } #::: Scaling Vars Empty, reload them from DB
$NPC = 0; $pop = "";
if($_[0]){
@ent = $entity_list->GetNPCByNPCTypeID($_[0]);
$pop = " POP";
# quest::gmsay("Scaling NPC ID " . $_[0], 15);
}
else{ @ent = $entity_list->GetNPCList(); $ScalingLoaded = 2; }
foreach $NPC (@ent){
#::: Hide Invis NPC Names
if(($NPC->GetRace() == 127 || $NPC->GetRace() == 240) && $NPC->GetLevel() < 100 && $NPC->GetNPCTypeID() > 1000){ if($NPC->GetCleanName()=~/shadowed/i){} else{ $NPC->TempName(""); $NPC->ModifyNPCStat("special_attacks", "AZ"); } }
if($NPC->GetEntityVariable("Scaled") != 1){
#Static NPC Scaling
$n_name = $NPC->GetCleanName(); $n_name =~ tr/ /_/;
if($N_SD{$n_name}[0]){ ScaleNPCStatic($NPC, $n_name); }
}
#::: SCALING
if($NPC->GetPetSpellID() == 0 && $NPC->GetRace() != 127 && $NPC->GetRace() != 240 && $NPC->GetClass() < 20 && $NPC->GetNPCTypeID() > 1000 && $NPC->GetEntityVariable("Scaled") != 1){
$NTYPE = 0; $NN = "NPC";
if(substr($NPC->GetName(), 0, 1) eq "#" && substr($NPC->GetName(), 1, 2) ne "#"){ $NTYPE = 1; $NN = "Named"; }
if(substr($NPC->GetName(), 0, 2) eq "##" && substr($NPC->GetName(), 2, 3) ne "#"){ $NTYPE = 2; $NN = "Raid"; }
$NPC->ModifyNPCStat("max_hp", $SD[$NPC->GetLevel()][$NTYPE][2] * $SZD{$zonesn}[$instanceversion][$NTYPE][2]);
$NPC->ModifyNPCStat("max_mana", $SD[$NPC->GetLevel()][$NTYPE][3] * $SZD{$zonesn}[$instanceversion][$NTYPE][3]);
$NPC->ModifyNPCStat("min_hit", $SD[$NPC->GetLevel()][$NTYPE][4] * $SZD{$zonesn}[$instanceversion][$NTYPE][4]);
$NPC->ModifyNPCStat("max_hit", $SD[$NPC->GetLevel()][$NTYPE][5] * $SZD{$zonesn}[$instanceversion][$NTYPE][5]);
$NPC->ModifyNPCStat("attack_speed", $SD[$NPC->GetLevel()][$NTYPE][6] * $SZD{$zonesn}[$instanceversion][$NTYPE][6]);
$NPC->ModifyNPCStat("ac", $SD[$NPC->GetLevel()][$NTYPE][7] * $SZD{$zonesn}[$instanceversion][$NTYPE][7]);
$NPC->ModifyNPCStat("str", $SD[$NPC->GetLevel()][$NTYPE][8]);
$NPC->ModifyNPCStat("sta", $SD[$NPC->GetLevel()][$NTYPE][9]);
$NPC->ModifyNPCStat("dex", $SD[$NPC->GetLevel()][$NTYPE][10]);
$NPC->ModifyNPCStat("agi", $SD[$NPC->GetLevel()][$NTYPE][11]);
$NPC->ModifyNPCStat("int", $SD[$NPC->GetLevel()][$NTYPE][12]);
$NPC->ModifyNPCStat("wis", $SD[$NPC->GetLevel()][$NTYPE][13]);
$NPC->ModifyNPCStat("cha", $SD[$NPC->GetLevel()][$NTYPE][14]);
$NPC->ModifyNPCStat("mr", $SD[$NPC->GetLevel()][$NTYPE][15]);
$NPC->ModifyNPCStat("cr", $SD[$NPC->GetLevel()][$NTYPE][16]);
$NPC->ModifyNPCStat("dr", $SD[$NPC->GetLevel()][$NTYPE][17]);
$NPC->ModifyNPCStat("fr", $SD[$NPC->GetLevel()][$NTYPE][18]);
$NPC->ModifyNPCStat("pr", $SD[$NPC->GetLevel()][$NTYPE][19]);
if($SZD{$zonesn}[$instanceversion][$NTYPE][13]){
$NPC->ModifyNPCStat("accuracy", $SZD{$zonesn}[$instanceversion][$NTYPE][13]);
}
#::: Is there a static zone entry?
if($SZD{$zonesn}[$instanceversion][$NTYPE][11] != 1){
$NPC->ModifyNPCStat("special_attacks", $SZD{$zonesn}[$instanceversion][$NTYPE][11]);
}else{
$NPC->ModifyNPCStat("special_attacks", $SD[$NPC->GetLevel()][$NTYPE][21]);
}
$NPC->ModifyNPCStat("hp_regen", $SD[$NPC->GetLevel()][$NTYPE][20] * $SZD{$zonesn}[$instanceversion][$NTYPE][10]);
$NPC->SetEntityVariable("hpregen", $SD[$NPC->GetLevel()][$NTYPE][20] * $SZD{$zonesn}[$instanceversion][$NTYPE][10]);
$NPC->ModifyNPCStat("spellscale", $SD[$NPC->GetLevel()][$NTYPE][22] * $SZD{$zonesn}[$instanceversion][$NTYPE][9]);
$NPC->ModifyNPCStat("healscale", $SD[$NPC->GetLevel()][$NTYPE][23] * $SZD{$zonesn}[$instanceversion][$NTYPE][8]);
#::: Proprietary Loot Assignment - Leaving here for others reference
# $LID = (200000 + ($NTYPE * 1000) + $NPC->GetLevel());
# if($NPC->GetLoottableID() != $LID){
# $NPC->ModifyNPCStat("loottable_id", (210000 + ($NTYPE * 1000) + $NPC->GetLevel())); $NPC->AddLootTable();
# $NPC->ModifyNPCStat("loottable_id", (200000 + ($NTYPE * 1000) + $NPC->GetLevel())); $NPC->AddLootTable();
# }
$NPC->SetHP($NPC->GetMaxHP());
$NPC->SetEntityVariable("Scaled", 1); if($Debug){ $NPC->SetEntityVariable("ScaledType", 1); }
if($Debug){
quest::gmsay("Scaling $pop $NN [" . $NPC->GetCleanName() . "]
HP:[". $SD[$NPC->GetLevel()][$NTYPE][2] * $SZD{$zonesn}[$instanceversion][$NTYPE][2] . "]
hp_regen:[". ($SD[$NPC->GetLevel()][$NTYPE][20] * $SZD{$zonesn}[$instanceversion][$NTYPE][10]) . "]
min_hit:[". ($SD[$NPC->GetLevel()][$NTYPE][4] * $SZD{$zonesn}[$instanceversion][$NTYPE][4]) . "]
max_hit:[".( $SD[$NPC->GetLevel()][$NTYPE][5] * $SZD{$zonesn}[$instanceversion][$NTYPE][5]) . "]
spec:[". $SD[$NPC->GetLevel()][$NTYPE][21] . "]
NTYPE:[". $NTYPE . "]
", 15);
}
if(!$SD[$NPC->GetLevel()][$NTYPE][0]){ quest::gmsay($NPC->GetCleanName() . ": ERROR! Missing Scaling Entry! For level " . $NPC->GetLevel() . " Type: $NTYPE", 13); }
}
# Level 255 NPC's are considered quest NPC's and shall not be attacked #
if($NPC->GetLevel() == 255){ $NPC->ModifyNPCStat("special_attacks", "AHGZ"); $NPC->SetEntityVariable("max_hp", 100000); }
}
if($ScalingLoaded == 2){ $ScalingLoaded = 3; }
}
#::: Loading routines....
sub LoadScaling{
$connect = plugin::LoadMysql();
$query = "SELECT
cust_npc_scaling.level,
cust_npc_scaling.type,
cust_npc_scaling.hp,
cust_npc_scaling.mana,
cust_npc_scaling.mindmg,
cust_npc_scaling.maxdmg,
cust_npc_scaling.attack_speed,
cust_npc_scaling.AC,
cust_npc_scaling.STR,
cust_npc_scaling.STA,
cust_npc_scaling.DEX,
cust_npc_scaling.AGI,
cust_npc_scaling._INT,
cust_npc_scaling.WIS,
cust_npc_scaling.CHA,
cust_npc_scaling.MR,
cust_npc_scaling.CR,
cust_npc_scaling.DR,
cust_npc_scaling.FR,
cust_npc_scaling.PR,
cust_npc_scaling.hp_regen,
cust_npc_scaling.npcspecialattks,
cust_npc_scaling.spellscale,
cust_npc_scaling.healscale
FROM
cust_npc_scaling
ORDER BY cust_npc_scaling.level, cust_npc_scaling.type";
$query_handle = $connect->prepare($query);
$query_handle->execute();
$NTYPE = 0;
while (@row = $query_handle->fetchrow_array()){ $SD[$row[0]][$row[1]] = [@row]; }
}
sub LoadStaticZoneScaling{
#::: Load Static Zone Scaling Data #:::
$connect = plugin::LoadMysql();
#::: Default empty values to 1
for($i = 2; $i < 17; $i++){
for($t = 0; $t < 3; $t++){
if(!$SZD{$zonesn}[$instanceversion][$t][$i] || $SZD{$zonesn}[$instanceversion][$t][$i] == 0){
$SZD{$zonesn}[$instanceversion][$t][$i] = 1;
}
}
}
$query = "SELECT `zonesn`, `version`, `hp`, `mana`, `mindmg`, `maxdmg`, `attack_speed`, `ac`, `healscale`, `spellscale`, `hpregen`, `specialattacks`, `type`, `accuracy` FROM `cust_npc_zonescale_static` WHERE `zonesn` = '" . $zonesn . "'"; $query_handle = $connect->prepare($query); $query_handle->execute(); my @SZD;
while (@row = $query_handle->fetchrow_array()){
$SZD{$row[0]}[$row[1]][$row[12]] = [@row];
if($SZD{$zonesn}[$instanceversion][0]){
$Mod = $SZD{$zonesn}[$instanceversion][2]; $npc->SetEntityVariable("ScaleMod", $Mod);
quest::gmsay("[Zonecontroller] (Static Data) [Type] : " . $row[12] . " Zone Data: HP=" . ($SZD{$zonesn}[$instanceversion][$row[12]][2] * 100) . "(%%) Mana=" . ($SZD{$zonesn}[$instanceversion][$row[12]][3] * 100) . "(%%) MINDMG=" . ($SZD{$zonesn}[$instanceversion][$row[12]][4] * 100) . "(%%) MAXDMG=" . ($SZD{$zonesn}[$instanceversion][$row[12]][5] * 100) . "(%%) ATK_SPD=" . ($SZD{$zonesn}[$instanceversion][$row[12]][6] * 100) . "(%%) AC=" . ($SZD{$zonesn}[$instanceversion][$row[12]][7] * 100) . "(%%) SPELLSCALE=" . ($SZD{$zonesn}[$instanceversion][$row[12]][8] * 100) . "(%%) HEALSCALE=" . ($SZD{$zonesn}[$instanceversion][$row[12]][9] * 100) . "(%%) HPREGEN=" . ($SZD{$zonesn}[$instanceversion][$row[12]][10] * 100) . "(%%)", 15);
}
}
}
sub LoadStaticNPCScaling{
$connect = plugin::LoadMysql();
$query = "SELECT
cust_npc_scale_static.`name`,
cust_npc_scale_static.zonesn,
cust_npc_scale_static.hp,
cust_npc_scale_static.mana,
cust_npc_scale_static.mindmg,
cust_npc_scale_static.maxdmg,
cust_npc_scale_static.attack_speed,
cust_npc_scale_static.AC,
cust_npc_scale_static.STR,
cust_npc_scale_static.STA,
cust_npc_scale_static.DEX,
cust_npc_scale_static.AGI,
cust_npc_scale_static._INT,
cust_npc_scale_static.WIS,
cust_npc_scale_static.CHA,
cust_npc_scale_static.MR,
cust_npc_scale_static.CR,
cust_npc_scale_static.DR,
cust_npc_scale_static.FR,
cust_npc_scale_static.PR,
cust_npc_scale_static.hp_regen,
cust_npc_scale_static.spellscale,
cust_npc_scale_static.healscale,
cust_npc_scale_static.npcspecialattks,
cust_npc_scale_static.usediabloloot,
cust_npc_scale_static.localloottable
FROM
cust_npc_scale_static
WHERE cust_npc_scale_static.zonesn = '" . $_[0] . "' OR cust_npc_scale_static.zonesn = 'global'";
$query_handle = $connect->prepare($query);
$query_handle->execute();
$NTYPE = 0;
while (@row = $query_handle->fetchrow_array()){ $N_SD{$row[0]} = [@row]; quest::gmsay("[Zonecontroller]: Loading static NPC data for NPC: '" . $row[0] ."'", 15); }
}
sub ScaleNPCStatic{
my $SS = $_[0];
quest::shout("Found data for NPC " . $SS->GetCleanName() . ' - ' . $_[1]);
$NTYPE = 0; $NN = "NPC";
if(substr($SS->GetName(), 0, 1) eq "#" && substr($SS->GetName(), 1, 2) ne "#"){ $NTYPE = 1; $NN = "Named"; }
if(substr($SS->GetName(), 0, 2) eq "##" && substr($SS->GetName(), 2, 3) ne "#"){ $NTYPE = 2; $NN = "Raid"; }
$SS->ModifyNPCStat("max_hp", $N_SD{$_[1]}[2]);
$SS->ModifyNPCStat("max_mana", $N_SD{$_[1]}[3]);
$SS->ModifyNPCStat("min_hit", $N_SD{$_[1]}[4]);
$SS->ModifyNPCStat("max_hit", $N_SD{$_[1]}[5]);
$SS->ModifyNPCStat("attack_speed", $N_SD{$_[1]}[6]);
$SS->ModifyNPCStat("ac", $N_SD{$_[1]}[7]);
$SS->ModifyNPCStat("str", $N_SD{$_[1]}[8]);
$SS->ModifyNPCStat("sta", $N_SD{$_[1]}[9]);
$SS->ModifyNPCStat("dex", $N_SD{$_[1]}[10]);
$SS->ModifyNPCStat("agi", $N_SD{$_[1]}[11]);
$SS->ModifyNPCStat("int", $N_SD{$_[1]}[12]);
$SS->ModifyNPCStat("wis", $N_SD{$_[1]}[13]);
$SS->ModifyNPCStat("cha", $N_SD{$_[1]}[14]);
$SS->ModifyNPCStat("mr", $N_SD{$_[1]}[15]);
$SS->ModifyNPCStat("cr", $N_SD{$_[1]}[16]);
$SS->ModifyNPCStat("dr", $N_SD{$_[1]}[17]);
$SS->ModifyNPCStat("fr", $N_SD{$_[1]}[18]);
$SS->ModifyNPCStat("pr", $N_SD{$_[1]}[19]);
$SS->ModifyNPCStat("hp_regen", $N_SD{$_[1]}[20]);
$SS->ModifyNPCStat("spellscale", $N_SD{$_[1]}[21]);
$SS->ModifyNPCStat("healscale", $N_SD{$_[1]}[22]);
$SS->ModifyNPCStat("special_attacks", $N_SD{$_[1]}[23]);
#::: Dynamic Loot assignment, proprietary
# if($N_SD{$_[1]}[24] == 1){ #::: Tells Static Entry to use Diablo Loot
# $LID = (200000 + ($NTYPE * 1000) + $SS->GetLevel());
# if($SS->GetLoottableID() != $LID){
# $SS->ModifyNPCStat("loottable_id", (210000 + ($NTYPE * 1000) + $SS->GetLevel())); $SS->AddLootTable();
# $SS->ModifyNPCStat("loottable_id", (200000 + ($NTYPE * 1000) + $SS->GetLevel())); $SS->AddLootTable();
# }
# }
if($N_SD{$_[1]}[25] > 0){ #::: Add an additional Loot table
$SS->ModifyNPCStat("loottable_id", $N_SD{$_[1]}[25]); $SS->AddLootTable();
}
$SS->SetEntityVariable("Scaled", 1); if($Debug){ $SS->SetEntityVariable("ScaledType", 2); }
}
sub RandomRange {
my $MinRandom = $_[0];
my $MaxRandom = $_[1];
my $RandomResult = int(rand(($MaxRandom + 1) - $MinRandom)) + $MinRandom;
if ($RandomResult > $MaxRandom) { return $MaxRandom; }
return $RandomResult;
}
global_npc.pl :: Tells zonecontroller to scale NPC upon spawn
Code:
sub EVENT_SPAWN{
if($npc->GetEntityVariable("Scaled") != 1){ #::: If not flagged as scaled, then scale the NPC
quest::signalwith(50, 21, 0);
quest::signalwith(50, $npc->GetNPCTypeID(), 0);
}
}
Enjoy!
Let me know if you have questions.
Last edited by Akkadius; 12-25-2013 at 12:26 AM..
|
|
|
|
12-25-2013, 02:03 AM
|
|
Demi-God
|
|
Join Date: May 2007
Location: b
Posts: 1,447
|
|
I have a question: How many percentage are you?
|
12-25-2013, 02:59 AM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Quote:
Originally Posted by Secrets
I have a question: How many percentage are you?
|
200
/10 char
|
04-30-2014, 12:40 AM
|
|
Discordant
|
|
Join Date: Apr 2014
Posts: 279
|
|
For anybody interested in using decimals in the cust_npc_zonescale_static table. (The table that overrides and multiplies the baseline of the original scaling table).
Simply go to Design Table and go to the "Fields" tab.. There you will see a column called "Type". Change whatever you want to scale as a decimal to "float" and change "Decimals" to 1.
|
09-01-2014, 10:30 PM
|
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 9
|
|
Is there something special that I need to do to get this to work with DiabloLoot? One works without the other and vise versa, but not together.
|
09-01-2014, 10:42 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
What are you running into?
|
09-02-2014, 04:09 PM
|
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 9
|
|
No errors or anything, scaling works perfect, but when it is on there is no random loot on the npcs via diablo loot. If I don't have scaling, the npcs have all the random loot.
|
09-02-2014, 04:16 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Quote:
Originally Posted by pennywse
No errors or anything, scaling works perfect, but when it is on there is no random loot on the npcs via diablo loot. If I don't have scaling, the npcs have all the random loot.
|
How are you applying random loot?
|
09-02-2014, 05:17 PM
|
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 9
|
|
I used your DiabloLoot script. I made no changes after that.
|
09-02-2014, 05:20 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Quote:
Originally Posted by pennywse
I used your DiabloLoot script. I made no changes after that.
|
Yes but you need to actually apply the loot to NPC's are you doing that via the global_npc.pl ?
|
|
|
|
09-02-2014, 05:27 PM
|
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 9
|
|
Quote:
Originally Posted by Akkadius
Yes but you need to actually apply the loot to NPC's are you doing that via the global_npc.pl ?
|
Yes I am
global_npc.pl
Code:
sub EVENT_SPAWN{
#::: START: Akka's Diablo Loot Handler :::#
$NTYPE = 0; #::: TRASH
if(substr($npc->GetName(), 0, 1) eq "#" && substr($npc->GetName(), 1, 2) ne "#"){ $NTYPE = 1; } #::: NAMED
if(substr($npc->GetName(), 0, 2) eq "##" && substr($npc->GetName(), 2, 3) ne "#"){ $NTYPE = 2; } #::: RAID
$LID = (200000 + ($NTYPE * 1000) + $npc->GetLevel());
if($npc->GetLoottableID() != $LID){
$npc->ModifyNPCStat("loottable_id", (200000 + ($NTYPE * 1000) + $npc->GetLevel())); $npc->AddLootTable();
$npc->ModifyNPCStat("loottable_id", (210000 + ($NTYPE * 1000) + $npc->GetLevel())); $npc->AddLootTable();
}
#::: END: Akka's Diablo Loot Handler :::#
}
sub EVENT_SPAWN{
if($npc->GetEntityVariable("Scaled") != 1){ #::: If not flagged as scaled, then scale the NPC
quest::signalwith(50, 21, 0);
quest::signalwith(50, $npc->GetNPCTypeID(), 0);
}
}
global_player.pl
Code:
sub EVENT_ENTERZONE { #message only appears in Cities / Pok and wherever the Wayfarer Camps (LDON) is in. This message won't appear in the player's home city.
if($ulevel >= 15 && !defined($qglobals{Wayfarer})) {
if($client->GetStartZone()!=$zoneid && ($zoneid == 1 || $zoneid == 2 || $zoneid == 3 || $zoneid == 8 || $zoneid == 9 || $zoneid == 10 || $zoneid == 19 || $zoneid == 22 || $zoneid == 23 || $zoneid == 24 || $zoneid == 29 || $zoneid == 30 || $zoneid == 34 || $zoneid == 35 || $zoneid == 40 || $zoneid == 41 || $zoneid == 42 || $zoneid == 45 || $zoneid == 49 || $zoneid == 52 || $zoneid == 54 || $zoneid == 55 || $zoneid == 60 || $zoneid == 61 || $zoneid == 62 || $zoneid == 67 || $zoneid == 68 || $zoneid == 75 || $zoneid == 82 || $zoneid == 106 || $zoneid == 155 || $zoneid == 202 || $zoneid == 382 || $zoneid == 383 || $zoneid == 392 || $zoneid == 393 || $zoneid == 408)) {
$client->Message(15,"A mysterious voice whispers to you, 'If you can feel me in your thoughts, know this -- something is changing in the world and I reckon you should be a part of it. I do not know much, but I do know that in every home city and the wilds there are agents of an organization called the Wayfarers Brotherhood. They are looking for recruits . . . If you can hear this message, you are one of the chosen. Rush to your home city, or search the West Karanas and Rathe Mountains for a contact if you have been exiled from your home for your deeds, and find out more. Adventure awaits you, my friend.'");
}
}
}
sub EVENT_COMBINE_SUCCESS
{
if ($recipe_id =~ /^1090[4-7]$/) {
$client->Message(1,
"The gem resonates with power as the shards placed within glow unlocking some of the stone's power. ".
"You were successful in assembling most of the stone but there are four slots left to fill, ".
"where could those four pieces be?"
);
}
elsif ($recipe_id =~ /^10(903|346|334)$/) {
my %reward = (
melee => {
10903 => 67665,
10346 => 67660,
10334 => 67653
},
hybrid => {
10903 => 67666,
10346 => 67661,
10334 => 67654
},
priest => {
10903 => 67667,
10346 => 67662,
10334 => 67655
},
caster => {
10903 => 67668,
10346 => 67663,
10334 => 67656
}
);
my $type = plugin::ClassType($class);
quest::summonitem($reward{$type}{$recipe_id});
quest::summonitem(67704);
$client->Message(1,"Success");
}
}
sub EVENT_ENTERZONE{
if(!$entity_list->GetNPCByNPCTypeID(50)){ quest::spawn2(50, 0, 0, 0, 0, 0, 0); $client->NPCSpawn($entity_list->GetNPCByNPCTypeID(50), "add", 1); } #::: Automatic Scaling
}
|
|
|
|
09-02-2014, 05:28 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
You can't have two sub EVENT_SPAWN's, you need the code inside of each to be combined. That would be your issue.
|
09-02-2014, 05:30 PM
|
|
Fire Beetle
|
|
Join Date: Sep 2012
Posts: 9
|
|
Quote:
Originally Posted by Akkadius
You can't have two sub EVENT_SPAWN's, you need the code inside of each to be combined. That would be your issue.
|
Awesome, I will give that a try. Thank you very much. That was the problem.
|
09-02-2014, 06:50 PM
|
|
Administrator
|
|
Join Date: Feb 2009
Location: MN
Posts: 2,071
|
|
Quote:
Originally Posted by pennywse
Awesome, I will give that a try. Thank you very much. That was the problem.
|
Very good.
/10 char
|
09-23-2014, 01:43 PM
|
Fire Beetle
|
|
Join Date: May 2010
Posts: 21
|
|
Getting into this a bit late, maybe ...
Is there any point to updating the npcspecialattks field(s) to the 07/11/2013 'n^1' format and/or adding such as special_abilities field(s)?
|
Posting Rules
|
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is Off
|
|
|
All times are GMT -4. The time now is 06:25 AM.
|
|
|
|
|
|
|
|
|
|
|
|
|