[1444] | 1 | # IRPG db conversion tool; converts db version 2.4 -> 3.0
|
---|
| 2 | # Jon Honeycutt, jotun@idlerpg.net, http://idlerpg.net
|
---|
| 3 | # Free for all use, public and private, with retention of copyright notice.
|
---|
| 4 |
|
---|
| 5 | use strict;
|
---|
| 6 | use IO::Socket;
|
---|
| 7 |
|
---|
| 8 | my %rps = ();
|
---|
| 9 | my $temp;
|
---|
| 10 |
|
---|
| 11 | $|=1;
|
---|
| 12 |
|
---|
| 13 | print "\nIRPG db conversion tool; version 2.4 -> 3.0\n\n";
|
---|
| 14 |
|
---|
| 15 | do {
|
---|
| 16 | print "Read from file [irpg.db]: ";
|
---|
| 17 | chomp($temp=<STDIN>);
|
---|
| 18 | $temp ||= "irpg.db";
|
---|
| 19 | if (! -e $temp) { print "Error: No such file\n"; }
|
---|
| 20 | } until (-e $temp);
|
---|
| 21 |
|
---|
| 22 | loaddb($temp);
|
---|
| 23 |
|
---|
| 24 | print "Loaded ".scalar(keys(%rps))." accounts from $temp.\n";
|
---|
| 25 |
|
---|
| 26 | do {
|
---|
| 27 | print "\nBackup old irpg.db file? [yes]: ";
|
---|
| 28 | chomp($temp=<STDIN>);
|
---|
| 29 | $temp||="yes";
|
---|
| 30 | $temp=lc($temp);
|
---|
| 31 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 32 |
|
---|
| 33 | if ($temp eq "yes") {
|
---|
| 34 | do {
|
---|
| 35 | print "\nBackup filename [irpg.db.old]: ";
|
---|
| 36 | chomp($temp=<STDIN>);
|
---|
| 37 | $temp||="irpg.db.old";
|
---|
| 38 | } until (defined($temp));
|
---|
| 39 | open(RPS,">$temp") or die("Cannot write $temp: $!");
|
---|
| 40 | print RPS "# username\tpass\tlevel\tclass\tnext\tnick\tuserhost\tonline\t".
|
---|
| 41 | "idled\tpen_mesg\tpen_nick\tpen_part\tpen_kick\tpen_quit\t".
|
---|
| 42 | "pen_quest\tpen_logout\tcreated\tlast login\tamulet\tcharm\t".
|
---|
| 43 | "helm\tboots\tgloves\tring\tleggings\tshield\ttunic\tweapon\n";
|
---|
| 44 | for my $k (keys %rps) {
|
---|
| 45 | print RPS join("\t",
|
---|
| 46 | $k,
|
---|
| 47 | $rps{$k}{pass},
|
---|
| 48 | $rps{$k}{level},
|
---|
| 49 | $rps{$k}{class},
|
---|
| 50 | $rps{$k}{next},
|
---|
| 51 | $rps{$k}{nick}||"",
|
---|
| 52 | $rps{$k}{userhost}||"",
|
---|
| 53 | $rps{$k}{online}||0,
|
---|
| 54 | $rps{$k}{idled}||0,
|
---|
| 55 | $rps{$k}{pen_mesg}||0,
|
---|
| 56 | $rps{$k}{pen_nick}||0,
|
---|
| 57 | $rps{$k}{pen_part}||0,
|
---|
| 58 | $rps{$k}{pen_kick}||0,
|
---|
| 59 | $rps{$k}{pen_quit}||0,
|
---|
| 60 | $rps{$k}{pen_quest}||0,
|
---|
| 61 | $rps{$k}{pen_logout}||0,
|
---|
| 62 | $rps{$k}{created},
|
---|
| 63 | $rps{$k}{lastlogin},
|
---|
| 64 | $rps{$k}{item}{amulet}||0,
|
---|
| 65 | $rps{$k}{item}{charm}||0,
|
---|
| 66 | $rps{$k}{item}{helm}||0,
|
---|
| 67 | $rps{$k}{item}{"pair of boots"}||0,
|
---|
| 68 | $rps{$k}{item}{"pair of gloves"}||0,
|
---|
| 69 | $rps{$k}{item}{ring}||0,
|
---|
| 70 | $rps{$k}{item}{"set of leggings"}||0,
|
---|
| 71 | $rps{$k}{item}{shield}||0,
|
---|
| 72 | $rps{$k}{item}{tunic}||0,
|
---|
| 73 | $rps{$k}{item}{weapon}||0)."\n";
|
---|
| 74 | }
|
---|
| 75 | close(RPS);
|
---|
| 76 | print "Wrote $temp.\n";
|
---|
| 77 | }
|
---|
| 78 |
|
---|
| 79 | do {
|
---|
| 80 | print "\nReset all user levels to 0, all times to level to 0, all items ".
|
---|
| 81 | "to 0, all penalties to 0, all online flags to 0, all idled times ".
|
---|
| 82 | "to 0, all creation dates and last login times to today (i.e., ".
|
---|
| 83 | "reset game)? [no]: ";
|
---|
| 84 | chomp($temp=<STDIN>);
|
---|
| 85 | $temp||="no";
|
---|
| 86 | $temp=lc($temp);
|
---|
| 87 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 88 |
|
---|
| 89 | if ($temp eq "yes") {
|
---|
| 90 | for my $k (keys(%rps)) {
|
---|
| 91 | $rps{$k}{next}=0;
|
---|
| 92 | $rps{$k}{level}=0;
|
---|
| 93 | $rps{$k}{online}=0;
|
---|
| 94 | $rps{$k}{idled}=0;
|
---|
| 95 | $rps{$k}{item}{amulet}=0;
|
---|
| 96 | $rps{$k}{item}{charm}=0;
|
---|
| 97 | $rps{$k}{item}{helm}=0;
|
---|
| 98 | $rps{$k}{item}{"pair of boots"}=0;
|
---|
| 99 | $rps{$k}{item}{"pair of gloves"}=0;
|
---|
| 100 | $rps{$k}{item}{ring}=0;
|
---|
| 101 | $rps{$k}{item}{"set of leggings"}=0;
|
---|
| 102 | $rps{$k}{item}{shield}=0;
|
---|
| 103 | $rps{$k}{item}{tunic}=0;
|
---|
| 104 | $rps{$k}{item}{weapon}=0;
|
---|
| 105 | $rps{$k}{pen_mesg}=0;
|
---|
| 106 | $rps{$k}{pen_nick}=0;
|
---|
| 107 | $rps{$k}{pen_part}=0;
|
---|
| 108 | $rps{$k}{pen_kick}=0;
|
---|
| 109 | $rps{$k}{pen_quit}=0;
|
---|
| 110 | $rps{$k}{pen_quest}=0;
|
---|
| 111 | $rps{$k}{pen_logout}=0;
|
---|
| 112 | $rps{$k}{created}=time();
|
---|
| 113 | $rps{$k}{lastlogin}=time();
|
---|
| 114 | }
|
---|
| 115 | print "Game reset.\n";
|
---|
| 116 | }
|
---|
| 117 |
|
---|
| 118 | do {
|
---|
| 119 | print "\nStrip all control codes from character names and classes? [no]: ";
|
---|
| 120 | chomp($temp=<STDIN>);
|
---|
| 121 | $temp ||="no";
|
---|
| 122 | $temp=lc($temp);
|
---|
| 123 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 124 |
|
---|
| 125 | if ($temp eq "yes") {
|
---|
| 126 | my(@usernames,@classes);
|
---|
| 127 | for my $k (keys(%rps)) {
|
---|
| 128 | if ($k =~ /[[:cntrl:]]/) {
|
---|
| 129 | my $newusername = $k;
|
---|
| 130 | $newusername =~ s/[[:cntrl:]]//g;
|
---|
| 131 | if (exists($rps{$newusername}) || !defined($newusername) ||
|
---|
| 132 | !length($newusername)) {
|
---|
| 133 | print "\nError: While trying to strip control codes from $k, ".
|
---|
| 134 | "found stripped version ($newusername) already exists ".
|
---|
| 135 | "in database or is undefined. Skipping this user, so ".
|
---|
| 136 | "sorry.\n";
|
---|
| 137 | }
|
---|
| 138 | else {
|
---|
| 139 | $rps{$newusername}=delete($rps{$k});
|
---|
| 140 | push(@usernames,"$k is now: $newusername");
|
---|
| 141 | $k = $newusername;
|
---|
| 142 | }
|
---|
| 143 | }
|
---|
| 144 | if ($rps{$k}{class} =~ /[[:cntrl:]]/) {
|
---|
| 145 | $rps{$k}{class} =~ s/[[:cntrl:]]//g;
|
---|
| 146 | push(@classes,"$k is now: $rps{$k}{class}");
|
---|
| 147 | }
|
---|
| 148 | }
|
---|
| 149 | if (@usernames) {
|
---|
| 150 | print "\nUsernames changed (would be good to alert these users):\n";
|
---|
| 151 | print "User $_\n" for @usernames;
|
---|
| 152 | print "\n";
|
---|
| 153 | }
|
---|
| 154 | if (@classes) {
|
---|
| 155 | print "\nClass names changed (might be good to alert these users):\n";
|
---|
| 156 | print "User $_\n" for @classes;
|
---|
| 157 | print "\n";
|
---|
| 158 | }
|
---|
| 159 | }
|
---|
| 160 |
|
---|
| 161 | do {
|
---|
| 162 | print "\nStrip all non-printable characters from character names and ".
|
---|
| 163 | "classes? [no]: ";
|
---|
| 164 | chomp($temp=<STDIN>);
|
---|
| 165 | $temp ||="no";
|
---|
| 166 | $temp=lc($temp);
|
---|
| 167 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 168 |
|
---|
| 169 | if ($temp eq "yes") {
|
---|
| 170 | my(@usernames,@classes);
|
---|
| 171 | for my $k (keys(%rps)) {
|
---|
| 172 | if ($k =~ /[[:^print:]]/) {
|
---|
| 173 | my $newusername = $k;
|
---|
| 174 | $newusername =~ s/[[:^print:]]//g;
|
---|
| 175 | if (exists($rps{$newusername}) || !defined($newusername) ||
|
---|
| 176 | !length($newusername)) {
|
---|
| 177 | print "\nError: While trying to strip non-printable chars ".
|
---|
| 178 | "from $k, found stripped version ($newusername) already ".
|
---|
| 179 | "exists in database or is undefined. Skipping this ".
|
---|
| 180 | "user, so sorry.\n";
|
---|
| 181 | }
|
---|
| 182 | else {
|
---|
| 183 | $rps{$newusername}=delete($rps{$k});
|
---|
| 184 | push(@usernames,"$k is now: $newusername");
|
---|
| 185 | $k = $newusername;
|
---|
| 186 | }
|
---|
| 187 | }
|
---|
| 188 | if ($rps{$k}{class} =~ /[[:^print:]]/) {
|
---|
| 189 | $rps{$k}{class} =~ s/[[:^print:]]//g;
|
---|
| 190 | push(@classes,"$k\'s class is now: $rps{$k}{class}");
|
---|
| 191 | }
|
---|
| 192 | }
|
---|
| 193 | if (@usernames) {
|
---|
| 194 | print "\nUsernames changed (would be good to alert these users):\n";
|
---|
| 195 | print "User $_\n" for @usernames;
|
---|
| 196 | print "\n";
|
---|
| 197 | }
|
---|
| 198 | if (@classes) {
|
---|
| 199 | print "\nClass names changed (might be good to alert these users):\n";
|
---|
| 200 | print "User $_\n" for @classes;
|
---|
| 201 | print "\n";
|
---|
| 202 | }
|
---|
| 203 | }
|
---|
| 204 |
|
---|
| 205 | do {
|
---|
| 206 | print "\nVersion 3.0 supports 'named items,' or a method of marking ".
|
---|
| 207 | "unique items as being unique. Attempt to name existing items that ".
|
---|
| 208 | "are known uniques? [yes]: ";
|
---|
| 209 | chomp($temp=<STDIN>);
|
---|
| 210 | $temp ||="yes";
|
---|
| 211 | $temp=lc($temp);
|
---|
| 212 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 213 |
|
---|
| 214 | if ($temp eq "yes") {
|
---|
| 215 | for my $k (keys(%rps)) {
|
---|
| 216 | for my $item (keys(%{$rps{$k}{item}})) {
|
---|
| 217 | if ($rps{$k}{item}{$item} > int(1.5*$rps{$k}{level})) {
|
---|
| 218 | if ($item eq "helm") {
|
---|
| 219 | print "$k\'s $item named as Mattt's Omniscience.\n";
|
---|
| 220 | $rps{$k}{item}{$item} .= "a";
|
---|
| 221 | }
|
---|
| 222 | elsif ($item eq "tunic") {
|
---|
| 223 | print "$k\'s $item named as Res0's Protectorate.\n";
|
---|
| 224 | $rps{$k}{item}{$item} .= "b";
|
---|
| 225 | }
|
---|
| 226 | elsif ($item eq "amulet") {
|
---|
| 227 | print "$k\'s $item named as Dwyn's Storm.\n";
|
---|
| 228 | $rps{$k}{item}{$item} .= "c";
|
---|
| 229 | }
|
---|
| 230 | elsif ($item eq "weapon" && $rps{$k}{item}{$item} < 175) {
|
---|
| 231 | print "$k\'s $item named as Jotun's Fury.\n";
|
---|
| 232 | $rps{$k}{item}{$item} .= "d";
|
---|
| 233 | }
|
---|
| 234 | elsif ($item eq "weapon" && $rps{$k}{item}{$item} > 175 &&
|
---|
| 235 | $rps{$k}{item}{$item} < 201) {
|
---|
| 236 | print "$k\'s $item named as Drdink's Cane of Blind Rage.\n";
|
---|
| 237 | $rps{$k}{item}{$item} .= "e";
|
---|
| 238 | }
|
---|
| 239 | else {
|
---|
| 240 | print "$k has unknown unique of level ".
|
---|
| 241 | "$rps{$k}{item}{$item}.\n";
|
---|
| 242 | }
|
---|
| 243 | }
|
---|
| 244 | }
|
---|
| 245 | }
|
---|
| 246 | }
|
---|
| 247 |
|
---|
| 248 | do {
|
---|
| 249 | print "\nThere exist new items in version 3.0 that some of your clients ".
|
---|
| 250 | "may already have had the chance to find. I.E., there is a new item ".
|
---|
| 251 | "with a required level of 48. Simulate an item find for all users ".
|
---|
| 252 | "above 48 for this and other new items to make the game fair for ".
|
---|
| 253 | "older users? [yes]: ";
|
---|
| 254 | chomp($temp=<STDIN>);
|
---|
| 255 | $temp ||="yes";
|
---|
| 256 | $temp=lc($temp);
|
---|
| 257 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 258 |
|
---|
| 259 | if ($temp eq "yes") {
|
---|
| 260 | for my $k (keys(%rps)) {
|
---|
| 261 | if ($rps{$k}{level} >= 48) {
|
---|
| 262 | for (48..$rps{$k}{level}) {
|
---|
| 263 | # approximately equal to normal item find, i believe
|
---|
| 264 | if (rand(100) < 2.25) {
|
---|
| 265 | my $ulevel = 250+int(rand(51));
|
---|
| 266 | if ($ulevel > int($rps{$k}{item}{"pair of boots"})) {
|
---|
| 267 | print "$k found level $ulevel Mrquick's Magical Boots ".
|
---|
| 268 | "of Swiftness.\n";
|
---|
| 269 | $rps{$k}{item}{"pair of boots"} = $ulevel."f";
|
---|
| 270 | }
|
---|
| 271 | }
|
---|
| 272 | }
|
---|
| 273 | }
|
---|
| 274 | if ($rps{$k}{level} >= 52) {
|
---|
| 275 | for (52..$rps{$k}{level}) {
|
---|
| 276 | # approximately equal to normal item find, i believe
|
---|
| 277 | if (rand(100) < 2.15) {
|
---|
| 278 | my $ulevel = 300+int(rand(51));
|
---|
| 279 | if ($ulevel > int($rps{$k}{item}{weapon})) {
|
---|
| 280 | print "$k found level $ulevel Jeff's Cluehammer of ".
|
---|
| 281 | "Doom.\n";
|
---|
| 282 | $rps{$k}{item}{weapon} = $ulevel."g";
|
---|
| 283 | }
|
---|
| 284 | }
|
---|
| 285 | }
|
---|
| 286 | }
|
---|
| 287 | if ($rps{$k}{level} >= 25) {
|
---|
| 288 | for (25..$rps{$k}{level}) {
|
---|
| 289 | # approximately equal to normal item find, i believe
|
---|
| 290 | if (rand(100) < 2.43) {
|
---|
| 291 | my $ulevel = 50+int(rand(25));
|
---|
| 292 | if ($ulevel > int($rps{$k}{item}{ring})) {
|
---|
| 293 | print "$k found level $ulevel Juliet's Glorious Ring ".
|
---|
| 294 | "of Sparkliness.\n";
|
---|
| 295 | $rps{$k}{item}{ring} = $ulevel."h";
|
---|
| 296 | }
|
---|
| 297 | }
|
---|
| 298 | }
|
---|
| 299 | }
|
---|
| 300 | }
|
---|
| 301 | }
|
---|
| 302 |
|
---|
| 303 | for my $k (keys(%rps)) {
|
---|
| 304 | $rps{$k}{x} = int(rand(500));
|
---|
| 305 | $rps{$k}{y} = int(rand(500));
|
---|
| 306 | $rps{$k}{isadmin}=0;
|
---|
| 307 | $rps{$k}{alignment}="n";
|
---|
| 308 | }
|
---|
| 309 |
|
---|
| 310 | print "\nUsernames that you would like to have admin status (separate with ".
|
---|
| 311 | "commas, use proper CaSe): ";
|
---|
| 312 | chomp($temp=<STDIN>);
|
---|
| 313 | $temp =~ s/\s//g;
|
---|
| 314 | for my $k (split(/,/,$temp)) {
|
---|
| 315 | if (!exists($rps{$k})) {
|
---|
| 316 | print "\nError: Account name '$k' does not exist. Remember that ".
|
---|
| 317 | "account names are case sensitive. Skipping this username. Edit ".
|
---|
| 318 | "the database manually, or use the MKADMIN command after the ".
|
---|
| 319 | "bot connects to add this user.\n\n";
|
---|
| 320 | }
|
---|
| 321 | else {
|
---|
| 322 | print "$k is now admin.\n";
|
---|
| 323 | $rps{$k}{isadmin}=1;
|
---|
| 324 | }
|
---|
| 325 | }
|
---|
| 326 | print "\nYou can add more admins later with the MKADMIN command.\n";
|
---|
| 327 |
|
---|
| 328 | do {
|
---|
| 329 | print "\nWrite to new db file [irpg.db]: ";
|
---|
| 330 | chomp($temp=<STDIN>);
|
---|
| 331 | $temp ||= "irpg.db";
|
---|
| 332 | } until (defined($temp));
|
---|
| 333 |
|
---|
| 334 | open(RPS,">$temp") or die "Cannot open $temp: $!";
|
---|
| 335 |
|
---|
| 336 | print RPS join("\t","# username",
|
---|
| 337 | "pass",
|
---|
| 338 | "is admin",
|
---|
| 339 | "level",
|
---|
| 340 | "class",
|
---|
| 341 | "next ttl",
|
---|
| 342 | "nick",
|
---|
| 343 | "userhost",
|
---|
| 344 | "online",
|
---|
| 345 | "idled",
|
---|
| 346 | "x pos",
|
---|
| 347 | "y pos",
|
---|
| 348 | "pen_mesg",
|
---|
| 349 | "pen_nick",
|
---|
| 350 | "pen_part",
|
---|
| 351 | "pen_kick",
|
---|
| 352 | "pen_quit",
|
---|
| 353 | "pen_quest",
|
---|
| 354 | "pen_logout",
|
---|
| 355 | "created",
|
---|
| 356 | "last login",
|
---|
| 357 | "amulet",
|
---|
| 358 | "charm",
|
---|
| 359 | "helm",
|
---|
| 360 | "boots",
|
---|
| 361 | "gloves",
|
---|
| 362 | "ring",
|
---|
| 363 | "leggings",
|
---|
| 364 | "shield",
|
---|
| 365 | "tunic",
|
---|
| 366 | "weapon",
|
---|
| 367 | "alignment")."\n";
|
---|
| 368 |
|
---|
| 369 | for my $k (keys(%rps)) {
|
---|
| 370 | print RPS join("\t",
|
---|
| 371 | $k,
|
---|
| 372 | $rps{$k}{pass},
|
---|
| 373 | $rps{$k}{isadmin},
|
---|
| 374 | $rps{$k}{level},
|
---|
| 375 | $rps{$k}{class},
|
---|
| 376 | $rps{$k}{next},
|
---|
| 377 | $rps{$k}{nick},
|
---|
| 378 | $rps{$k}{userhost},
|
---|
| 379 | $rps{$k}{online},
|
---|
| 380 | $rps{$k}{idled},
|
---|
| 381 | $rps{$k}{x},
|
---|
| 382 | $rps{$k}{y},
|
---|
| 383 | $rps{$k}{pen_mesg},
|
---|
| 384 | $rps{$k}{pen_nick},
|
---|
| 385 | $rps{$k}{pen_part},
|
---|
| 386 | $rps{$k}{pen_kick},
|
---|
| 387 | $rps{$k}{pen_quit},
|
---|
| 388 | $rps{$k}{pen_quest},
|
---|
| 389 | $rps{$k}{pen_logout},
|
---|
| 390 | $rps{$k}{created},
|
---|
| 391 | $rps{$k}{lastlogin},
|
---|
| 392 | $rps{$k}{item}{amulet},
|
---|
| 393 | $rps{$k}{item}{charm},
|
---|
| 394 | $rps{$k}{item}{helm},
|
---|
| 395 | $rps{$k}{item}{"pair of boots"},
|
---|
| 396 | $rps{$k}{item}{"pair of gloves"},
|
---|
| 397 | $rps{$k}{item}{ring},
|
---|
| 398 | $rps{$k}{item}{"set of leggings"},
|
---|
| 399 | $rps{$k}{item}{shield},
|
---|
| 400 | $rps{$k}{item}{tunic},
|
---|
| 401 | $rps{$k}{item}{weapon},
|
---|
| 402 | $rps{$k}{alignment})."\n";
|
---|
| 403 | }
|
---|
| 404 | close(RPS);
|
---|
| 405 |
|
---|
| 406 | do {
|
---|
| 407 | print "\nDone writing $temp! Thanks for your interest in the Idle RPG. May ".
|
---|
| 408 | "I send an (anonymous) user count to idlerpg.net? jotun is ".
|
---|
| 409 | "interested in knowing how many people play his game :^) [yes]: ";
|
---|
| 410 | chomp($temp=<STDIN>);
|
---|
| 411 | $temp||="yes";
|
---|
| 412 | $temp=lc($temp);
|
---|
| 413 | } until ($temp eq "yes" || $temp eq "no");
|
---|
| 414 |
|
---|
| 415 | if ($temp eq "yes") {
|
---|
| 416 | print "Sending...\n";
|
---|
| 417 | my $sock = IO::Socket::INET->new(PeerAddr=>"jotun.ultrazone.org:80");
|
---|
| 418 | if ($sock) {
|
---|
| 419 | print $sock "GET /g7/count.php?converted=".scalar(keys(%rps)).
|
---|
| 420 | " HTTP/1.1\r\n".
|
---|
| 421 | "Host: jotun.ultrazone.org:80\r\n\r\n";
|
---|
| 422 | 1 while <$sock>;
|
---|
| 423 | }
|
---|
| 424 | print "\nDone! Thanks a million! Enjoy Idle RPG. :^)\n";
|
---|
| 425 | }
|
---|
| 426 | else {
|
---|
| 427 | print "\nI'm setting your chance of evil HoG to 100%, then. Just kidding. ".
|
---|
| 428 | "Thanks anyway.\n";
|
---|
| 429 | }
|
---|
| 430 |
|
---|
| 431 | sub loaddb { # load the players database
|
---|
| 432 | open(RPS,shift(@_)) or die("loaddb() failed: $!");
|
---|
| 433 | while (my $l=<RPS>) {
|
---|
| 434 | chomp $l;
|
---|
| 435 | next if $l =~ /^#/; # skip comments
|
---|
| 436 | my @i = split("\t",$l);
|
---|
| 437 | print Dumper @i if @i != 28;
|
---|
| 438 | die("Anomaly in loaddb(); line $. of database has wrong fields (".
|
---|
| 439 | scalar(@i).")") if @i != 28;
|
---|
| 440 | ($rps{$i[0]}{pass},
|
---|
| 441 | $rps{$i[0]}{level},
|
---|
| 442 | $rps{$i[0]}{class},
|
---|
| 443 | $rps{$i[0]}{next},
|
---|
| 444 | $rps{$i[0]}{nick},
|
---|
| 445 | $rps{$i[0]}{userhost},
|
---|
| 446 | $rps{$i[0]}{online},
|
---|
| 447 | $rps{$i[0]}{idled},
|
---|
| 448 | $rps{$i[0]}{pen_mesg},
|
---|
| 449 | $rps{$i[0]}{pen_nick},
|
---|
| 450 | $rps{$i[0]}{pen_part},
|
---|
| 451 | $rps{$i[0]}{pen_kick},
|
---|
| 452 | $rps{$i[0]}{pen_quit},
|
---|
| 453 | $rps{$i[0]}{pen_quest},
|
---|
| 454 | $rps{$i[0]}{pen_logout},
|
---|
| 455 | $rps{$i[0]}{created},
|
---|
| 456 | $rps{$i[0]}{lastlogin},
|
---|
| 457 | $rps{$i[0]}{item}{amulet},
|
---|
| 458 | $rps{$i[0]}{item}{charm},
|
---|
| 459 | $rps{$i[0]}{item}{helm},
|
---|
| 460 | $rps{$i[0]}{item}{"pair of boots"},
|
---|
| 461 | $rps{$i[0]}{item}{"pair of gloves"},
|
---|
| 462 | $rps{$i[0]}{item}{ring},
|
---|
| 463 | $rps{$i[0]}{item}{"set of leggings"},
|
---|
| 464 | $rps{$i[0]}{item}{shield},
|
---|
| 465 | $rps{$i[0]}{item}{tunic},
|
---|
| 466 | $rps{$i[0]}{item}{weapon}) = (@i[1..$#i]);
|
---|
| 467 | }
|
---|
| 468 | close RPS;
|
---|
| 469 | }
|
---|