repairlevels.pl
上传用户:tany51
上传日期:2013-06-12
资源大小:1397k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/usr/bin/perl
  2. $| = 1;
  3. use DBI;
  4. &header;
  5. if (scalar(@ARGV) < 5) {
  6. &usage;
  7. exit;
  8. }
  9. $levelxpfile = shift;
  10. $dbhost = shift;
  11. $dbname = shift;
  12. $dbuser = shift;
  13. $dbpass = shift;
  14. open LEVELFD, $levelxpfile or die "Could not open XP level file ($levelxpfile)";
  15. print "Reading from XP file ...n";
  16. while($line = <LEVELFD>) {
  17. $line =~ s/#.*//;
  18. if ($line !~ m/^s*$/) {
  19. ($level, $startxp, $neededxp, $lossfactor, $mingames) = split(/s+/,$line);
  20. print "level: $level startxp: $startxp neededxp: $neededxp lossfactor: $lossfactor mingames: $mingamesn";
  21. $xplevel[$level]->{startxp} = $startxp;
  22. $xplevel[$level]->{neededxp} = $neededxp;
  23. $xplevel[$level]->{lossfactor} = $lossfactor;
  24. $xplevel[$level]->{mingames} = $mingames;
  25. }
  26. }
  27. close LEVELFD;
  28. print "...donennConnecting to db...";
  29. $dbh = DBI->connect("dbi:mysql:$dbname;host=$dbhost", $dbuser, $dbpass) or die "Could not connect to db (mysql, db: $dbname, host: $dbhost, user: $dbuser, pass: $dbpass)";
  30. $sth = $dbh->prepare("SELECT uid, solo_xp, solo_level FROM Record WHERE uid > 0") or die "Error preparing query!";
  31. $sth->execute() or die "Error executing query!";
  32. while($row = $sth->fetchrow_hashref) {
  33. $level = $row->{solo_level};
  34. $xp = $row->{solo_xp};
  35. if ($level eq "" or $xp eq "" or $level < 1) { next; }
  36. for($i = $level; $i < 50 ; $i++) {
  37. if ($xplevel[$i]->{startxp} > $xp) { $i--;  last; }
  38. }
  39. $level = $i;
  40. for($i = $level; $i > 1; $i++) {
  41. if ($xplevel[$i]->{needed_xp} <= $xp) { last; }
  42. }
  43. $level = $i;
  44. if ($level < 1) {$level = 1;}
  45. if ($level != $row->{solo_level}) {
  46. print "Repaired $uid from (level: " , $row->{solo_level}, " xp: $xp) to (level: $level xp: $xp)n";
  47. $dbh->do("UPDATE profile SET solo_level = '$level' WHERE uid = '".$row->{uid}."'");
  48. }
  49. }
  50. $sth->finish();
  51. $dbh->disconnect();
  52. sub header {
  53.     print "Account db accounts XP levels repair tool.n";
  54.     print " Copyright (C) 2002 Mihai RUSU (dizzy@roedu.net)n";
  55.     print " People Versus People Gaming Network (www.pvpgn.org)nn";
  56. }
  57. sub usage {
  58.     print "Usage:nnrepairlevels.pl <xplevelfile> <dbhost> <dbname> <dbuser> <dbpass>nn";
  59.     print " <xplevelfile>t: path/name of the file with the XP level data (ex. bnxplevel.txt)n";
  60.     print " <dbhost>t: the database hostn";
  61.     print " <dbname>t: the database namen";
  62.     print " <dbuser>t: the database usern";
  63.     print " <dbpass>t: the database passwordn";
  64. }