ctgwglzc 发表于 2009-10-12 15:53:34

转族程序,PHP

<?php

include('./anti_inject.php');

parth1tr();
parth1('100%', 2, 'center');
echo 'Nation Transfer ';
parth2();
parth2tr();

if (isset($_SESSION['sesuser'])) {
    if ($_GET['Confirmed'] == 1) {
      $connect = odbc_connect("$dbname", "$dbuser", "$dbpass");
      $query = "SELECT strCharID1, strCharID2, strCharID3 FROM Account_Char WHERE strAccountID ='" . $_SESSION['sesuser'] . "' ";
      $results = odbc_exec($connect, $query);
      // Store all char names in var's.....
      while (odbc_fetch_row($results)) {
            $char1 = odbc_result($results, 1);
            $char2 = odbc_result($results, 2);
            $char3 = odbc_result($results, 3);
      }
      // Confirm they have a character
      if ((empty($char1)) && (empty($char2)) && (empty($char3))) {
            part1('100%', 1, 1, 'center');
            echo '</br>Your not part of a Nation, how do you expect to change it?';
            echo '</br></br><a href="./index.php">Back</a></br>';
            part2();
      } else {
            // Confirm none of the chars are logged in..
            // Updated during the for loop

            $query = "SELECT count(strCharID) FROM CURRENTUSER WHERE strCharID = '" . $char1 . "' OR strCharID = '" . $char2 . "' OR strCharID = '" . $char3 . "'";
            $results = odbc_exec($connect, $query);
            while (odbc_fetch_row($results)) {
                $online = odbc_result($results, 1);
            }
            if (strlen(trim($online != 0)) > 0) {
                part1('100%', 1, 1, 'center');
                echo '</br>All characters must be logged out of the game first!';
                echo '</br></br><a href="./index.php">Back</a></br>';
                part2();
                die();
            }
            // Check they aren't in a clan on any of 3 characters.
            
            $query = "SELECT count(Knights) FROM USERDATA WHERE strUserID = '" . $char1 . "' OR strUserID = '" . $char2 . "' OR strUserID = '" . $char3 . "'";
            $results = odbc_exec($connect, $query);
            while (odbc_fetch_row($results)) {
                $knights = odbc_result($results, 1);
            }
            if (trim($Knights) > 0) {
                part1('100%', 1, 1, 'center');
                echo '</br>All characters on account have to be clanless.';
                echo '</br></br><a href="./index.php">Back</a></br>';
                part2();
                die();
            }
            $query = "SELECT COUNT(*) FROM NT_LOG WHERE DATEDIFF(Hour,,GETDATE()) < 48 AND Account = '" . $_SESSION['sesuser'] . "'";
            $results = odbc_exec($connect, $query);
            while (odbc_fetch_row($results)) {
                $logcheck = odbc_result($results, 1);
            }
            if ($logcheck > 0) {
                part1('100%', 1, 1, 'center');
                echo '</br>You may only use this feature once every 48hours.';
                echo '</br></br><a href="./index.php">Back</a></br>';
                part2();
                die();
            } else {
                // Get the nation and calculate desired nation
                $query = "SELECT strAccountID, bNation FROM ACCOUNT_CHAR WHERE strAccountID = '" . $_SESSION['sesuser'] . "'";
                $results = odbc_exec($connect, $query);
                while (odbc_fetch_row($results)) {
                  $nation = odbc_result($results, 2);
                }
                if ($nation == 1) $desiredNation = 2;
                if ($nation == 2) $desiredNation = 1;
                // Test 1
                $check1 = odbc_exec($connect, "SELECT COUNT(*) FROM USERDATA WHERE Nation='" . $desiredNation . "'");
                $check2 = odbc_exec($connect, "SELECT COUNT(*) FROM USERDATA");

                $tot1 = odbc_result ($check1, 1);
                $tot2 = odbc_result($check2, 1);
                if ($tot1 / $tot2 > 0.6) {
                  part1('100%', 1, 1, 'center');
                  echo '</br>Sorry your desired nation has too many users.';
                  echo '</br>The desired population must be less than 60% Population!';
                  echo '</br></br><a href="./index.php">Back</a></br>';
                  part2();
                  die();
                }
                // Test 2
                $check3 = odbc_exec($connect, "SELECT SUM(Loyalty) AS nps FROM USERDATA WHERE Nation='" . $desiredNation . "'");
                $check4 = odbc_exec($connect, "SELECT SUM(Loyalty) AS totnps FROM USERDATA");
                $nps = odbc_result_all($check3);
                $totnps = odbc_result_all($check4);
                if ($nps / $totnps > 0.575) {
                  part1('100%', 1, 1, 'center');
                  echo '</br>Sorry your desired nation has too many National Points.';
                  echo '</br>The desired population must be less than 57% total National Points!';
                  echo '</br></br><a href="./index.php">Back</a></br>';
                  part2();
                  die();
                } else {
                  // Calculate the newrace + class of the characters..
                  foreach (array($char1, $char2, $char3) as $char) {
                        if ($char != "") {
                        $getuser = "SELECT strCharID FROM CURRENTUSER where strCharID = '" . $char . "'";
                        $getusere = odbc_exec($connect, $getuser);
                        $characterID = odbc_result($getusere, 1);

                        if (strlen(trim($characterID)) > 0) {
                        $killed = 1;
                        KillUserAndWait(trim($characterID), $connect);
                         }
                            $query = "SELECT strUserID, Race, Class FROM USERDATA WHERE strUserID = '" . $char . "'";
                            $results = odbc_exec($connect, $query);
                            while (odbc_fetch_row($results)) {
                              $race = odbc_result($results, 2);
                              $class = odbc_result($results, 3);
                            }

                            if ($race < 12) {
                              $hashmap = array (1 => 11, 2 => 12, 3 => 13, 4 => 13, 11 => 1);
                              $NewRace = $hashmap[$race];
                            } elseif (($race == 12) || ($race == 13) || ($race == 14)) {
                              if ($class == 201) $NewRace = 1;
                              elseif ($class == 202) $NewRace = 2;
                              elseif ($class == 203) $NewRace = 3;
                              elseif ($class == 204) $NewRace = 4;
                              elseif ($class == 205) $NewRace = 1;
                              elseif ($class == 207) $NewRace = 2;
                              elseif ($class == 209) $NewRace = 3;
                              elseif ($class == 211) $NewRace = 4;
                            }
                            if ($class >= 199) {
                              $NewClass = $class - 100;
                            } else {
                              $NewClass = $class + 100;
                            }
                            if (($NewRace == '') || ($NewClass == '')) {
                              part1('100%', 1, 1, 'center');
                              echo 'Error: (Char: ' . $char . ')</br> New Class:';
                              echo $NewClass;
                              echo '</br> New Race:';
                              echo $NewRace;
                              echo '</br> Old Class:';
                              echo $class;
                              echo '</br> Old Race:';
                              echo $race;
                              echo '</br></br><a href="./index.php">Back</a></br>';
                              part2();
                              die();
                            }
                            $query = "UPDATE USERDATA SET Nation = '" . $desiredNation . "', Race = '" . $NewRace . "', Class = '" . $NewClass . "', Zone = 21, PX = 33550, PZ = 38400, PY = 0 WHERE strUserID = '" . $char . "'";
                            $results = odbc_exec($connect, $query);
                        }
                  }
                  $query = "INSERT INTO NT_LOG(, Account, Char1, Char2, Char3, NationTo) VALUES (GETDATE(), '" . $_SESSION['sesuser'] . "', '" . $char1 . "', '" . $char2 . "', '" . $char3 . "', '" . $desiredNation . "')";
                  $results = odbc_exec($connect, $query);
                  $query = "UPDATE ACCOUNT_CHAR SET bNation = '" . $desiredNation . "' WHERE strAccountID = '" . $_SESSION['sesuser'] . "'";
                  $results = odbc_exec($connect, $query);
                }
                // Done
                part1tr();
                part1('100%', 1, 1, 'center');
                echo 'Done';
echo '</br></br><a href="./index.php">Back</a>';
                if ($killed == 1) { echo '</br>A character was disconnected during this process'; }
                part2();
                part2tr();
            }
      }
    } else {
      part1tr();
      part1('25%', 1, 1, 'center');
      echo 'Please confirm your transfer:</br></br></br>
      <li>You must be <b>logged out</b> of <b>all</b> characters</li>
      <li>You must be <b>Clanless</b> on <b>all</b> characters</li>
      <li>You may only use this feature <b>once</b> every 48hours</li>
      <li>The Desired Nation must be <b>Less Than</b> 60% Total Population </li>
      <li>The Desired Nation must be <b>Less Than</b> 57.5% Total National Points</li></br></br>
      <FORM method=post name=confirm action=index.php?act=NationTransfer&Confirmed=1>
            <input class="input" type="submit" value="Confirm">
            </form>';
      part2();
      part2tr();
    }
} else {
    part1('100%', 1, 1, 'center');
    echo 'You must login first!';
    part2();
}

?>
页: [1]
查看完整版本: 转族程序,PHP