Guest User

Untitled

a guest
Apr 25th, 2023
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 76.03 KB | None | 0 0
  1. <?php
  2. // TFS 1.0 functions ///
  3.  
  4. ////////END 1.0 ////////
  5.  
  6. // Fetch Images
  7. function fetchImages($status) {
  8.     $status = (int)$status;
  9.     return mysql_select_multi("SELECT `id`, `title`, `desc`, `date`, `status`, `image`, `delhash`, `account_id` FROM znote_images WHERE `status`='$status' ORDER BY `date` DESC;");
  10. }
  11.  
  12. // Insert image data
  13. function insertImage($account_id, $title, $desc, $image, $image_delete) {
  14.     $title = sanitize($title);
  15.     $desc = sanitize($desc);
  16.     $image = sanitize($image);
  17.     $image_delete = sanitize($image_delete);
  18.     $account_id = (int)$account_id;
  19.     $time = time();
  20.  
  21.     // Insert only if image dosn't already exist there
  22.     $exist = mysql_select_single("SELECT `id` FROM `znote_images` WHERE `image`='$image' LIMIT 1;");
  23.     if ($exist === false) {
  24.         mysql_insert("INSERT INTO `znote_images` (`title`, `desc`, `date`, `status`, `image`, `delhash`, `account_id`) VALUES ('$title', '$desc', '$time', '1', '$image', '$image_delete', '$account_id');");
  25.         return true;
  26.     }
  27.     return false;
  28. }
  29.  
  30. function updateImage($id, $status) {
  31.     $id = (int)$id;
  32.     $status = (int)$status;
  33.     mysql_update("UPDATE `znote_images` SET `status`='$status' WHERE `id`='$id';");
  34. }
  35.  
  36. // Fetch killers score
  37. function fetchMurders() {
  38.     return mysql_select_multi("SELECT `killed_by`, COUNT(`killed_by`) AS `kills` FROM `player_deaths` WHERE `is_player`='1' GROUP BY `killed_by` ORDER BY COUNT(`killed_by`) DESC LIMIT 0, 10;");
  39. }
  40.  
  41. // Fetch deaths score
  42. function fetchLoosers() {
  43.     $array = mysql_select_multi("SELECT `player_id`, (SELECT `name` FROM `players` WHERE `id` = `player_id`) AS `name`, COUNT(`player_id`) AS `Deaths` FROM `player_deaths` GROUP BY `player_id` ORDER BY COUNT(`player_id`) DESC LIMIT 0, 10;");
  44.     if ($array !== false) {
  45.         for ($i = 0; $i < count($array); $i++) {
  46.             unset($array[$i]['player_id']);
  47.         }
  48.     }
  49.     return $array;
  50. }
  51.  
  52. // Fetch latest deaths
  53. function fetchLatestDeaths($from = 0, $to = 30) {
  54.     return mysql_select_multi("SELECT `d`.`level`, `p`.`name` AS `victim`, `d`.`time`, `d`.`is_player`, `d`.`killed_by` FROM `player_deaths` AS `d` INNER JOIN `players` AS `p` ON `d`.`player_id` = `p`.`id` ORDER BY `time` DESC LIMIT $from, $to;");
  55. }
  56.  
  57. // latest deaths .3 (Based on code from Hauni@otland.net).
  58. function fetchLatestDeaths_03($rowz = 30, $killers = false) {
  59.     $countz = 0;
  60.     if ($rowz === false || $killers === true) $getdeaths = mysql_select_multi("SELECT * FROM player_deaths ORDER BY date DESC;");
  61.     else $getdeaths = mysql_select_multi("SELECT * FROM `player_deaths` ORDER BY `date` DESC LIMIT 0, $rowz;");
  62.     $data = false;
  63.     //while ($showdeaths = mysql_fetch_assoc($getdeaths)) {
  64.     if ($getdeaths !== false) {
  65.         for ($i = 0; $i < count($getdeaths); $i++) {
  66.             $pid = $getdeaths[$i]['player_id'];
  67.             $level = $getdeaths[$i]['level'];
  68.             $kid = user_get_kid($getdeaths[$i]['id']);
  69.  
  70.             $killedby = user_name(user_get_killer_id($kid));
  71.  
  72.             if ($killedby == false) {
  73.                 $killedby = user_get_killer_m_name($kid);
  74.                 $player = 0;
  75.             } else {
  76.                 $player = 1;
  77.             }
  78.             if ($killedby === false) {
  79.                 $player = 2;
  80.                 $killedby = "Deleted player.";
  81.             }
  82.             $getname = mysql_select_single("SELECT `name` FROM `players` WHERE `id` = '$pid' LIMIT 1;");
  83.             $name = $getname['name'];
  84.             $row = array();
  85.             $row['level'] = $level;
  86.             $row['victim'] = $name;
  87.             $row['time'] = $getdeaths[$i]['date'];
  88.             $row['is_player'] = $player;
  89.             $row['killed_by'] = $killedby;
  90.             if ($killers) {
  91.                 if ($player == 1) {
  92.                     if ($rowz !== false) {
  93.                         if ($countz < $rowz) {
  94.                             $data[] = $row;
  95.                             $countz++;
  96.                         }
  97.                     } else {
  98.                         $data[] = $row;
  99.                     }
  100.                 }
  101.             } else $data[] = $row;
  102.         }
  103.     }
  104.     return $data;
  105. }
  106.  
  107. // Support list
  108. function support_list() {
  109.     $TFS = Config('ServerEngine');
  110.     if ($TFS == 'TFS_10') $staffs = mysql_select_multi("SELECT `p`.`id`, `a`.`type` as `group_id`, `p`.`name`, `p`.`account_id` FROM `players` AS `p` INNER JOIN `accounts` AS `a` ON `p`.`account_id` = `a`.`id` WHERE `a`.`type` > 1 ORDER BY `p`.`account_id` DESC, `p`.`group_id` ASC, `p`.`level` ASC;");
  111.     else $staffs = mysql_select_multi("SELECT `a`.`type` as `group_id`, `p`.`name`, `p`.`online`, `p`.`account_id` FROM `players` AS `p` INNER JOIN `accounts` AS `a` ON `a`.`id` = `p`.`account_id` WHERE `a`.`type` > 1 ORDER BY `p`.`account_id` DESC, `p`.`group_id` ASC, `p`.`level` ASC;");
  112.     if ($staffs !== false) {
  113.         foreach($staffs as $k => $v)  {
  114.             foreach($staffs as $key => $value)  {
  115.                 if($k != $key && $v['account_id'] == $value['account_id']) {
  116.                     unset($staffs[$k]);
  117.                 }
  118.             }
  119.         }
  120.         $staffs = array_values($staffs);
  121.         if ($TFS == 'TFS_10') {
  122.             for ($i = 0; $i < count($staffs); $i++) {
  123.                 // Fix online status on TFS 1.0
  124.                 $staffs[$i]['online'] = (isset($staffs[$i]['id']) && user_is_online_10($staffs[$i]['id'])) ? 1 : 0;
  125.                 unset($staffs[$i]['id']);
  126.             }
  127.         }
  128.     }
  129.     return $staffs;
  130. }
  131.  
  132. function support_list03() {
  133.     $staffs = mysql_select_multi("SELECT `group_id`, `name`, `online`, `account_id` FROM `players` WHERE `group_id` > 1 ORDER BY `group_id` ASC;");
  134.  
  135.     if ($staffs !== false) {
  136.         for ($i = 0; $i < count($staffs); $i++) {
  137.             // $staffs[$i]['']
  138.             unset($staffs[$i]['account_id']);
  139.         }
  140.     }
  141.     return $staffs;
  142. }
  143.  
  144. // NEWS
  145. function fetchAllNews() {
  146.     return mysql_select_multi("SELECT `n`.`id`, `n`.`title`, `n`.`text`, `n`.`date`, `p`.`name` FROM `znote_news` AS `n` INNER JOIN `players` AS `p` ON `n`.`pid` = `p`.`id` ORDER BY `n`.`id` DESC;");
  147. }
  148.  
  149. // HOUSES
  150. function fetchAllHouses_03() {
  151.     return mysql_select_multi("SELECT * FROM `houses`;");
  152. }
  153.  
  154. // TFS Storage value functions (Warning, I think these things are saved in cache,
  155. // and thus require server to be offline, or affected players to be offline while using)
  156.  
  157. // Get player storage list
  158. function getPlayerStorageList($storage, $minValue) {
  159.     $minValue = (int)$minValue;
  160.     $storage = (int)$storage;
  161.     return mysql_select_multi("SELECT `player_id`, `value` FROM `player_storage` WHERE `key`='$storage' AND `value`>='$minValue' ORDER BY `value` DESC;");
  162. }
  163.  
  164. // Get global storage value
  165. function getGlobalStorage($storage) {
  166.     $storage = (int)$storage;
  167.     return mysql_select_single("SELECT `value` FROM `global_storage` WHERE `key`='$storage';");
  168. }
  169.  
  170. // Set global storage value
  171. function setGlobalStorage($storage, $value) {
  172.     $storage = (int)$storage;
  173.     $value = (int)$value;
  174.  
  175.     // If the storage does not exist yet
  176.     if (getGlobalStorage($storage) === false) {
  177.         mysql_insert("INSERT INTO `global_storage` (`key`, `world_id`, `value`) VALUES ('$storage', 0, '$value')");
  178.     } else {// If the storage exist
  179.         mysql_update("UPDATE `global_storage` SET `value`='$value' WHERE `key`='$storage'");
  180.     }
  181. }
  182.  
  183. // Get player storage value.
  184. function getPlayerStorage($player_id, $storage, $online = false) {
  185.     if ($online) $online = user_is_online($player_id);
  186.     if (!$online) {
  187.         // user is offline (false), we may safely proceed:
  188.         $player_id = (int)$player_id;
  189.         $storage = (int)$storage;
  190.         return mysql_select_single("SELECT `value` FROM `player_storage` WHERE `key`='$storage' AND `player_id`='$player_id';");
  191.     } else return false;
  192. }
  193.  
  194. // Set player storage value
  195. function setPlayerStorage($player_id, $storage, $value) {
  196.     $storage = (int)$storage;
  197.     $value = (int)$value;
  198.     $player_id = (int)$player_id;
  199.  
  200.     // If the storage does not exist yet
  201.     if (getPlayerStorage($storage) === false) {
  202.         mysql_insert("INSERT INTO `player_storage` (`player_id`, `key`, `value`) VALUES ('$player_id', '$storage', '$value')");
  203.     } else {// If the storage exist
  204.         mysql_update("UPDATE `player_storage` SET `value`='$value' WHERE `key`='$storage' AND `player_id`='$player_id'");
  205.     }
  206. }
  207.  
  208. // Is player online
  209. function user_is_online($player_id) {
  210.     $status = user_character_data($player_id, 'online');
  211.     if ($status !== false) {
  212.         if ($status['online'] == 1) $status = true;
  213.         else $status = false;
  214.     }
  215.     return $status;
  216. }
  217. // For TFS 1.0
  218. function user_is_online_10($player_id) {
  219.     $player_id = (int)$player_id;
  220.     $status = mysql_select_single("SELECT `player_id` FROM `players_online` WHERE `player_id`='$player_id' LIMIT 1;");
  221.     return !$status ? $status : true;
  222. }
  223.  
  224. // Shop
  225. // Gets a list of tickets and ticket ids
  226. function shop_delete_row_order($rowid) {
  227.     $rowid = (int)$rowid;
  228.     mysql_delete("DELETE FROM `znote_shop_orders` WHERE `id`='$rowid';");
  229. }
  230.  
  231. function shop_update_row_count($rowid, $count) {
  232.     $rowid = (int)$rowid;
  233.     $count = (int)$count;
  234.     mysql_update("UPDATE `znote_shop_orders` SET `count`='$count' WHERE `id`='$rowid'");
  235. }
  236.  
  237. function shop_account_gender_tickets($accid) {
  238.     $accid = (int)$accid;
  239.     return mysql_select_multi("SELECT `id`, `count` FROM `znote_shop_orders` WHERE `account_id`='$accid' AND `type`='3';");
  240. }
  241.  
  242. // GUILDS
  243. //
  244. function guild_remove_member($cid) {
  245.     $cid = (int)$cid;
  246.     mysql_update("UPDATE `players` SET `rank_id`='0', `guildnick`= NULL WHERE `id`=$cid");
  247. }
  248. function guild_remove_member_10($cid) {
  249.     $cid = (int)$cid;
  250.     mysql_update("DELETE FROM `guild_membership` WHERE `player_id`='$cid' LIMIT 1;");
  251. }
  252.  
  253. // Change guild rank name.
  254. function guild_change_rank($rid, $name) {
  255.     $rid = (int)$rid;
  256.     $name = sanitize($name);
  257.  
  258.     mysql_update("UPDATE `guild_ranks` SET `name`='$name' WHERE `id`=$rid");
  259. }
  260.  
  261. // Change guild leader (parameters: cid, new and old leader).
  262. function guild_change_leader($nCid, $oCid) {
  263.     $nCid = (int)$nCid;
  264.     $oCid = (int)$oCid;
  265.     $gid = guild_leader_gid($oCid);
  266.     $ranks = get_guild_rank_data($gid);
  267.     $leader_rid = 0;
  268.     $vice_rid = 0;
  269.  
  270.  
  271.     // Get rank id for leader and vice leader.
  272.     foreach ($ranks as $rank) {
  273.         if ($rank['level'] == 3) $leader_rid = $rank['id'];
  274.         if ($rank['level'] == 2) $vice_rid = $rank['id'];
  275.     }
  276.  
  277.     $status = false;
  278.     if ($leader_rid > 0 && $vice_rid > 0) $status = true;
  279.  
  280.     // Verify that we found the rank ids for vice leader and leader.
  281.     if ($status) {
  282.  
  283.         // Update players and set their new rank id
  284.         if (config('ServerEngine') !== 'TFS_10') {
  285.             mysql_update("UPDATE `players` SET `rank_id`='$leader_rid' WHERE `id`=$nCid LIMIT 1;");
  286.             mysql_update("UPDATE `players` SET `rank_id`='$vice_rid' WHERE `id`=$oCid LIMIT 1;");
  287.         } else {
  288.             mysql_update("UPDATE `guild_membership` SET `rank_id`='$leader_rid' WHERE `player_id`=$nCid LIMIT 1;");
  289.             mysql_update("UPDATE `guild_membership` SET `rank_id`='$vice_rid' WHERE `player_id`=$oCid LIMIT 1;");
  290.         }
  291.  
  292.         // Update guilds set new ownerid
  293.         guild_new_leader($nCid, $gid);
  294.     }
  295.  
  296.     return $status;
  297. }
  298.  
  299. // Changes leadership of aguild to player_id
  300. function guild_new_leader($new_leader, $gid) {
  301.     $new_leader = (int)$new_leader;
  302.     $gid = (int)$gid;
  303.     if (config('ServerEngine') !== 'OTHIRE')
  304.         mysql_update("UPDATE `guilds` SET `ownerid`='$new_leader' WHERE `id`=$gid");
  305.     else
  306.         mysql_update("UPDATE `guilds` SET `owner_id`='$new_leader' WHERE `id`=$gid");
  307. }
  308.  
  309. // Returns $gid of a guild leader($cid).
  310. function guild_leader_gid($leader) {
  311.     $leader = (int)$leader;
  312.     if (config('ServerEngine') !== 'OTHIRE')
  313.         $data = mysql_select_single("SELECT `id` FROM `guilds` WHERE `ownerid`='$leader';");
  314.     else
  315.         $data = mysql_select_single("SELECT `id` FROM `guilds` WHERE `owner_id`='$leader';");
  316.     return ($data === false) ? false : $data['id'];
  317. }
  318.  
  319. // Returns guild leader(charID) of a guild. (parameter: guild_ID)
  320. function guild_leader($gid) {
  321.     $gid = (int)$gid;
  322.     if (config('ServerEngine') !== 'OTHIRE')
  323.         $data = mysql_select_single("SELECT `ownerid` FROM `guilds` WHERE `id`='$gid';");
  324.     else
  325.         $data = mysql_select_single("SELECT `owner_id` FROM `guilds` WHERE `id`='$gid';");
  326.     return ($data !== false) ? $data['ownerid'] : false;
  327. }
  328.  
  329. // Disband guild
  330. function guild_remove_invites($gid) {
  331.     $gid = (int)$gid;
  332.     mysql_delete("DELETE FROM `guild_invites` WHERE `guild_id`='$gid';");
  333. }
  334.  
  335. // Remove guild invites
  336. function guild_delete($gid) {
  337.     $gid = (int)$gid;
  338.     mysql_delete("DELETE FROM `guilds` WHERE `id`='$gid';");
  339. }
  340.  
  341. // Player leave guild
  342. function guild_player_leave($cid) {
  343.     $cid = (int)$cid;
  344.     mysql_update("UPDATE `players` SET `rank_id`='0', `guildnick`= NULL WHERE `id`=$cid LIMIT 1;");
  345. }
  346. function guild_player_leave_10($cid) {
  347.     $cid = (int)$cid;
  348.     mysql_delete("DELETE FROM `guild_membership` WHERE `player_id`='$cid' LIMIT 1;");
  349. }
  350.  
  351. // Player join guild
  352. function guild_player_join($cid, $gid) {
  353.     $cid = (int)$cid;
  354.     $gid = (int)$gid;
  355.     // Create a status we can return depending on results.
  356.     $status = false;
  357.  
  358.     if (config('ServerEngine') !== 'TFS_10') {
  359.         // Get rank data
  360.         $ranks = get_guild_rank_data($gid);
  361.         // Locate rank id for regular member position in this guild
  362.         $rid = false;
  363.         foreach ($ranks as $rank) {
  364.             if ($rank['level'] == 1) $rid = $rank['id'];
  365.         }
  366.         // Add to guild if rank id was found:
  367.         if ($rid != false) {
  368.             // Remove the invite:
  369.             //guild_remove_invitation($cid, $gid);
  370.             guild_remove_all_invitations($cid);
  371.             // Add to guild:
  372.             mysql_update("UPDATE `players` SET `rank_id`='$rid' WHERE `id`=$cid");
  373.             $status = true;
  374.         }
  375.  
  376.     } else {
  377.         // Find rank id for regular member in this guild
  378.         $guildrank = mysql_select_single("SELECT `id` FROM `guild_ranks` WHERE `guild_id`='$gid' AND `level`='1' LIMIT 1;");
  379.         if ($guildrank !== false) {
  380.             $rid = $guildrank['id'];
  381.             // Remove invite
  382.             //guild_remove_invitation($cid, $gid);
  383.             guild_remove_all_invitations($cid);
  384.             // Add to guild
  385.             mysql_insert("INSERT INTO `guild_membership` (`player_id`, `guild_id`, `rank_id`, `nick`) VALUES ('$cid', '$gid', '$rid', '');");
  386.             // Return success
  387.             return true;
  388.         } return false;
  389.     }
  390.     return $status;
  391. }
  392.  
  393. // Remove cid invitation from guild (gid)
  394. function guild_remove_invitation($cid, $gid) {
  395.     $cid = (int)$cid;
  396.     $gid = (int)$gid;
  397.     mysql_delete("DELETE FROM `guild_invites` WHERE `player_id`='$cid' AND `guild_id`='$gid';");
  398. }
  399.  
  400. // Remove ALL invitations
  401. function guild_remove_all_invitations($cid) {
  402.     $cid = (int)$cid;
  403.     mysql_delete("DELETE FROM `guild_invites` WHERE `player_id`='$cid';");
  404. }
  405.  
  406. // Invite character to guild
  407. function guild_invite_player($cid, $gid) {
  408.     $cid = (int)$cid;
  409.     $gid = (int)$gid;
  410.     mysql_insert("INSERT INTO `guild_invites` (`player_id`, `guild_id`) VALUES ('$cid', '$gid')");
  411. }
  412.  
  413. // Gets a list of invited players to a particular guild.
  414. function guild_invite_list($gid) {
  415.     $gid = (int)$gid;
  416.     return mysql_select_multi("SELECT `gi`.`player_id`, `gi`.`guild_id`, `p`.`name` FROM `guild_invites` AS `gi` INNER JOIN `players` AS `p` ON `gi`.`player_id`=`p`.`id` WHERE `gi`.`guild_id`='$gid';");
  417. }
  418.  
  419. // Update player's guild position
  420. function update_player_guild_position($cid, $rid) {
  421.     $cid = (int)$cid;
  422.     $rid = (int)$rid;
  423.     mysql_update("UPDATE `players` SET `rank_id`='$rid' WHERE `id`=$cid");
  424. }
  425. function update_player_guild_position_10($cid, $rid) {
  426.     $cid = (int)$cid;
  427.     $rid = (int)$rid;
  428.     mysql_update("UPDATE `guild_membership` SET `rank_id`='$rid' WHERE `player_id`=$cid");
  429. }
  430.  
  431. // Update player's guild nick
  432. function update_player_guildnick($cid, $nick) {
  433.     $cid = (int)$cid;
  434.     $nick = sanitize($nick);
  435.     if (!empty($nick)) {
  436.         mysql_update("UPDATE `players` SET `guildnick`='$nick' WHERE `id`=$cid");
  437.     } else {
  438.         mysql_update("UPDATE `players` SET `guildnick`='' WHERE `id`=$cid");
  439.     }
  440. }
  441. function update_player_guildnick_10($cid, $nick) {
  442.     $cid = (int)$cid;
  443.     $nick = sanitize($nick);
  444.     if (!empty($nick)) {
  445.         mysql_update("UPDATE `guild_membership` SET `nick`='$nick' WHERE `player_id`=$cid");
  446.     } else {
  447.         mysql_update("UPDATE `guild_membership` SET `nick`='' WHERE `player_id`=$cid");
  448.     }
  449. }
  450.  
  451. // Get guild data, using guild id.
  452. function get_guild_rank_data($gid) {
  453.     $gid = (int)$gid;
  454.     return mysql_select_multi("SELECT `id`, `guild_id`, `name`, `level` FROM `guild_ranks` WHERE `guild_id`='$gid' ORDER BY `id` DESC LIMIT 0, 30");
  455. }
  456.  
  457. // Creates a guild, where cid is the owner of the guild, and name is the name of guild.
  458. function create_guild($cid, $name) {
  459.     $cid = (int)$cid;
  460.     $name = trim(preg_replace('/\s\s+/', ' ', str_replace("\n", " ", sanitize($name))));
  461.     $time = time();
  462.  
  463.     // Create the guild
  464.     if (config('ServerEngine') !== 'OTHIRE')
  465.         mysql_insert("INSERT INTO `guilds` (`name`, `ownerid`, `creationdata`, `motd`) VALUES ('$name', '$cid', '$time', '');");
  466.     else
  467.         mysql_insert("INSERT INTO `guilds` (`name`, `owner_id`, `creationdate`) VALUES ('$name', '$cid', '$time');");
  468.  
  469.     // Get guild id
  470.     $gid = get_guild_id($name);
  471.  
  472.     // Get rank id for guild leader
  473.     $data = mysql_select_single("SELECT `id` FROM `guild_ranks` WHERE `guild_id`='$gid' AND `level`='3' LIMIT 1;");
  474.     $rid = ($data !== false) ? $data['id'] : false;
  475.  
  476.     // Give player rank id for leader of his guild
  477.     if (config('ServerEngine') !== 'TFS_10') mysql_update("UPDATE `players` SET `rank_id`='$rid' WHERE `id`='$cid' LIMIT 1;");
  478.     else mysql_insert("INSERT INTO `guild_membership` (`player_id`, `guild_id`, `rank_id`, `nick`) VALUES ('$cid', '$gid', '$rid', '');");
  479. }
  480.  
  481. // Search player table on cid for his rank_id, returns rank_id
  482. function get_character_guild_rank($cid) {
  483.     $cid = (int)$cid;
  484.     if (config('ServerEngine') !== 'TFS_10') {
  485.         $data = mysql_select_single("SELECT `rank_id` FROM `players` WHERE `id`='$cid';");
  486.         return ($data !== false && $data['rank_id'] > 0) ? $data['rank_id'] : false;
  487.     } else {
  488.         $data = mysql_select_single("SELECT `rank_id` FROM `guild_membership` WHERE `player_id`='$cid' LIMIT 1;");
  489.         return ($data !== false) ? $data['rank_id'] : false;
  490.     }
  491. }
  492.  
  493. // Get a player guild rank, using his rank_id
  494. function get_player_guild_rank($rank_id) {
  495.     $rank_id = (int)$rank_id;
  496.     $data = mysql_select_single("SELECT `name` FROM `guild_ranks` WHERE `id`=$rank_id LIMIT 1;");
  497.     return ($data !== false) ? $data['name'] : false;
  498. }
  499.  
  500. // Get a player guild position ID, using his rank_id
  501. function get_guild_position($rid) {
  502.     $rid = (int)$rid;
  503.     $data = mysql_select_single("SELECT `level` FROM `guild_ranks` WHERE `id`=$rid;");
  504.     return ($data !== false) ? $data['level'] : false;
  505. }
  506.  
  507. // Get a players rank_id, guild_id, rank_level(ID), rank_name(string), using cid(player id)
  508. function get_player_guild_data($cid) {
  509.     $cid = (int)$cid;
  510.     if (config('ServerEngine') !== 'TFS_10') $playerdata = mysql_select_single("SELECT `rank_id` FROM `players` WHERE `id`='$cid' LIMIT 1;");
  511.     else $playerdata = mysql_select_single("SELECT `rank_id` FROM `guild_membership` WHERE `player_id`='$cid' LIMIT 1;");
  512.  
  513.     if ($playerdata !== false) {
  514.         $rankdata = mysql_select_single("SELECT `guild_id`, `level` AS `rank_level`, `name` AS `rank_name` FROM `guild_ranks` WHERE `id`='". $playerdata['rank_id'] ."' LIMIT 1;");
  515.         if ($rankdata !== false) {
  516.             $rankdata['rank_id'] = $playerdata['rank_id'];
  517.             return $rankdata;
  518.         } else return false;
  519.     } else return false;
  520. }
  521.  
  522. // Returns guild name of guild id
  523. function get_guild_name($gid) {
  524.     $gid = (int)$gid;
  525.     $guild = mysql_select_single("SELECT `name` FROM `guilds` WHERE `id`=$gid LIMIT 1;");
  526.     if ($guild !== false) return $guild['name'];
  527.     else return false;
  528. }
  529.  
  530. // Returns guild id from name
  531. function get_guild_id($name) {
  532.     $name = sanitize($name);
  533.     $data = mysql_select_single("SELECT `id` FROM `guilds` WHERE `name`='$name';");
  534.     return ($data !== false) ? $data['id'] : false;
  535. }
  536.  
  537. // Returns guild data from name
  538. function get_guild_data($name) {
  539.     $name = sanitize($name);
  540.     if (config('ServerEngine') !== 'OTHIRE')
  541.         return mysql_select_single("SELECT `id`, `name`, `ownerid`, `creationdata`, `motd` FROM `guilds` WHERE `name`='$name' LIMIT 1;");
  542.     else
  543.         return mysql_select_single("SELECT `id`, `name`, `owner_id`, `creationdate` FROM `guilds` WHERE `name`='$name' LIMIT 1;");
  544. }
  545.  
  546. // Get complete list of guilds
  547. function get_guilds_list() {
  548.     if (config('ServerEngine') !== 'OTHIRE')
  549.         return mysql_select_multi("SELECT `id`, `name`, `creationdata` FROM `guilds` ORDER BY `name`;");
  550.     else
  551.         return mysql_select_multi("SELECT `id`, `name`, `creationdate` FROM `guilds` ORDER BY `name`;");
  552. }
  553.  
  554. // Get array of player data related to a guild.
  555. function get_guild_players($gid) {
  556.     $gid = (int)$gid; // Sanitizing the parameter id
  557.     if (config('ServerEngine') !== 'TFS_10') return mysql_select_multi("SELECT `p`.`id`, `p`.`rank_id`, `p`.`name`, `p`.`level`, `p`.`guildnick`, `p`.`vocation`, `p`.`online`, `gr`.`name` AS `rank_name`, `gr`.`level` AS `rank_level` FROM `players` AS `p` LEFT JOIN `guild_ranks` AS `gr` ON `gr`.`id` = `p`.`rank_id` WHERE `gr`.`guild_id` ='$gid' ORDER BY `gr`.`id`, `p`.`name`;");
  558.     else return mysql_select_multi("SELECT `p`.`id`, `p`.`name`, `p`.`level`, `p`.`vocation`, `gm`.`rank_id`, `gm`.`nick` AS `guildnick`, `gr`.`name` AS `rank_name`, `gr`.`level` AS `rank_level` FROM `players` AS `p` LEFT JOIN `guild_membership` AS `gm` ON `gm`.`player_id` = `p`.`id` LEFT JOIN `guild_ranks` AS `gr` ON `gr`.`id` = `gm`.`rank_id` WHERE `gm`.`guild_id` = '$gid' ORDER BY `gm`.`rank_id`, `p`.`name`");
  559. }
  560.  
  561. // Get guild level data (avg level, total level, count of players)
  562. function get_guild_level_data($gid) {
  563.     $gid = (int)$gid;
  564.     $data = (config('ServerEngine') !== 'TFS_10') ? mysql_select_multi("SELECT p.level FROM players AS p LEFT JOIN guild_ranks AS gr ON gr.id = p.rank_id WHERE gr.guild_id ='$gid';") : mysql_select_multi("SELECT p.level FROM players AS p LEFT JOIN guild_membership AS gm ON gm.player_id = p.id WHERE gm.guild_id = '$gid' ORDER BY gm.rank_id, p.name;");
  565.     $members = 0;
  566.     $totallevels = 0;
  567.     if ($data !== false) {
  568.         foreach ($data as $player) {
  569.             $members++;
  570.             $totallevels += $player['level'];
  571.         }
  572.         return array('avg' => (int)($totallevels / $members), 'total' => $totallevels, 'players' => $members);
  573.     } else return false;
  574. }
  575.  
  576. // Returns total members in a guild (integer)
  577. function count_guild_members($gid) {
  578.     $gid = (int)$gid;
  579.     if (config('ServerEngine') !== 'TFS_10') {
  580.         $data = mysql_select_single("SELECT COUNT(p.id) AS total FROM players AS p LEFT JOIN guild_ranks AS gr ON gr.id = p.rank_id WHERE gr.guild_id =$gid");
  581.         return ($data !== false) ? $data['total'] : false;
  582.     } else {
  583.         $data = mysql_select_single("SELECT COUNT('guild_id') AS `total` FROM `guild_membership` WHERE `guild_id`='$gid';");
  584.         return ($data !== false) ? $data['total'] : false;
  585.     }
  586. }
  587.  
  588. //
  589. // GUILD WAR
  590. //
  591. // Returns guild war entry for id
  592. function get_guild_war($warid) {
  593.     $warid = (int)$warid; // Sanitizing the parameter id
  594.     return mysql_select_single("SELECT `id`, `guild1`, `guild2`, `name1`, `name2`, `status`, `started`, `ended` FROM `guild_wars` WHERE `id`=$warid ORDER BY `started`;");
  595. }
  596.  
  597. // TFS 0.3 compatibility
  598. function get_guild_war03($warid) {
  599.     $warid = (int)$warid; // Sanitizing the parameter id
  600.  
  601.     $war = mysql_select_single("SELECT `id`, `guild_id`, `enemy_id`, `status`, `begin`, `end`
  602.         FROM `guild_wars` WHERE `id`=$warid ORDER BY `begin` DESC LIMIT 0, 30");
  603.     if ($war !== false) {
  604.         $war['guild1'] = $war['guild_id'];
  605.         $war['guild2'] = $war['enemy_id'];
  606.         $war['name1'] = get_guild_name($war['guild_id']);
  607.         $war['name2'] = get_guild_name($war['enemy_id']);
  608.         $war['started'] = $war['begin'];
  609.         $war['ended'] = $war['end'];
  610.     }
  611.     return $war;
  612. }
  613.  
  614. // List all war entries
  615. function get_guild_wars() {
  616.     return mysql_select_multi("SELECT `id`, `guild1`, `guild2`, `name1`, `name2`, `status`, `started`, `ended` FROM `guild_wars` ORDER BY `started` DESC LIMIT 0, 30");
  617. }
  618.  
  619. // Untested. (TFS 0.3 compatibility)
  620. function get_guild_wars03() {
  621.     $array = mysql_select_multi("SELECT `id`, `guild_id`, `enemy_id`, `status`, `begin`, `end` FROM `guild_wars` ORDER BY `begin` DESC LIMIT 0, 30");
  622.     if ($array !== false) {
  623.         for ($i = 0; $i < count($array); $i++) {
  624.             // Generating TFS 0.2 key values for this 0.3 query for web cross compatibility
  625.             $array[$i]['guild1'] = $array[$i]['guild_id'];
  626.             $array[$i]['guild2'] = $array[$i]['enemy_id'];
  627.             $array[$i]['name1'] = get_guild_name($array[$i]['guild_id']);
  628.             $array[$i]['name2'] = get_guild_name($array[$i]['enemy_id']);
  629.             $array[$i]['started'] = $array[$i]['begin'];
  630.             $array[$i]['ended'] = $array[$i]['end'];
  631.         }
  632.     }
  633.     return $array;
  634. }
  635.  
  636. // List kill activity in wars.
  637. function get_war_kills($war_id) {
  638.     $war_id = (int)$war_id;// Sanitize - verify its an integer.
  639.     return mysql_select_multi("SELECT `id`, `killer`, `target`, `killerguild`, `targetguild`, `warid`, `time` FROM `guildwar_kills` WHERE `warid`=$war_id ORDER BY `time` DESC");
  640. }
  641.  
  642. // TFS 0.3 compatibility
  643. function get_war_kills03($war_id) {
  644.     $war_id = (int)$war_id;// Sanitize - verify its an integer.
  645.     return mysql_select_multi("SELECT `id`, `guild_id`, `war_id`, `death_id` FROM `guild_kills` WHERE `war_id`=$war_id ORDER BY `id` DESC LIMIT 0, 30");
  646. }
  647.  
  648. // Gesior compatibility port TFS .3
  649. function gesior_sql_death($warid) {
  650.     $warid = (int)$warid; // Sanitizing the parameter id
  651.     return mysql_select_multi('SELECT `pd`.`id`, `pd`.`date`, `gk`.`guild_id` AS `enemy`, `p`.`name`, `pd`.`level` FROM `guild_kills` gk LEFT JOIN `player_deaths` pd ON `gk`.`death_id` = `pd`.`id` LEFT JOIN `players` p ON `pd`.`player_id` = `p`.`id` WHERE `gk`.`war_id` = ' . $warid . ' AND `p`.`deleted` = 0 ORDER BY `pd`.`date` DESC');
  652. }
  653. function gesior_sql_killer($did) {
  654.     $did = (int)$did; // Sanitizing the parameter id
  655.     return mysql_select_multi('SELECT `p`.`name` AS `player_name`, `p`.`deleted` AS `player_exists`, `k`.`war` AS `is_war` FROM `killers` k LEFT JOIN `player_killers` pk ON `k`.`id` = `pk`.`kill_id` LEFT JOIN `players` p ON `p`.`id` = `pk`.`player_id` WHERE `k`.`death_id` = ' . $did . ' ORDER BY `k`.`final_hit` DESC, `k`.`id` ASC');
  656. }
  657. // end gesior
  658. // END GUILD WAR
  659.  
  660. // ADMIN FUNCTIONS
  661. function set_ingame_position($name, $acctype) {
  662.     $acctype = (int)$acctype;
  663.     $name = sanitize($name);
  664.  
  665.     $acc_id = user_character_account_id($name);
  666.     $char_id = user_character_id($name);
  667.  
  668.     $group_id = 1;
  669.     if ($acctype == 4) {
  670.         $group_id = 2;
  671.     } elseif ($acctype >= 5) {
  672.         $group_id = 3;
  673.     }
  674.     mysql_update("UPDATE `accounts` SET `type` = '$acctype' WHERE `id` =$acc_id;");
  675.     mysql_update("UPDATE `players` SET `group_id` = '$group_id' WHERE `id` =$char_id;");
  676. }
  677.  
  678. // .3
  679. function set_ingame_position03($name, $acctype) {
  680.     $acctype = (int)$acctype;
  681.     $name = sanitize($name);
  682.  
  683.     $acc_id = user_character_account_id($name);
  684.     $char_id = user_character_id($name);
  685.  
  686.     $group_id = 2;
  687.     if ($acctype == 1) {
  688.         $group_id = 1;
  689.     }
  690.     mysql_update("UPDATE `players` SET `group_id` = '$acctype' WHERE `id` =$char_id;");
  691. }
  692.  
  693. // Set rule violation.
  694. // Return true if success, query error die if failed, and false if $config['website_char'] is not recognized.
  695. function set_rule_violation($charname, $typeid, $actionid, $reasonid, $time, $comment) {
  696.     $charid = user_character_id($charname);
  697.     $typeid = (int)$typeid;
  698.     $actionid = (int)$actionid;
  699.     $reasonid = (int)$reasonid;
  700.     $time = (int)($time + time());
  701.  
  702.     $data = user_character_data($charid, 'account_id', 'lastip');
  703.  
  704.     $accountid = $data['account_id'];
  705.     $charip = $data['lastip'];
  706.  
  707.     $comment = sanitize($comment);
  708.  
  709.     // ...
  710.     $bannedby = config('website_char');
  711.     if (user_character_exist($bannedby)) {
  712.         $bannedby = user_character_id($bannedby);
  713.  
  714.         if (Config('ServerEngine') === 'TFS_02')
  715.         mysql_insert("INSERT INTO `bans` (`type` ,`ip` ,`mask` ,`player` ,`account` ,`time` ,`reason_id` ,`action_id` ,`comment` ,`banned_by`) VALUES ('$typeid', '$charip', '4294967295', '$charid', '$accountid', '$time', '$reasonid', '$actionid', '$comment', '$bannedby');");
  716.         elseif (Config('ServerEngine') === 'TFS_03') {
  717.             $now = time();
  718.             switch ($typeid) {
  719.                 case 1: // IP ban
  720.                     mysql_insert("INSERT INTO `bans` (`type`, `value`, `param`, `active`, `expires`, `added`, `admin_id`, `comment`) VALUES ('$typeid', '$charip', '4294967295', '1', '$time', '$now', '$bannedby', '$comment');");
  721.                 break;
  722.  
  723.                 case 2: // namelock
  724.                     mysql_insert("INSERT INTO `bans` (`type`, `value`, `param`, `active`, `expires`, `added`, `admin_id`, `comment`) VALUES ('$typeid', '$charid', '4294967295', '1', '$time', '$now', '$bannedby', '$comment');");
  725.                 break;
  726.  
  727.                 case 3: // acc ban
  728.                     mysql_insert("INSERT INTO `bans` (`type`, `value`, `param`, `active`, `expires`, `added`, `admin_id`, `comment`) VALUES ('$typeid', '$accountid', '4294967295', '1', '$time', '$now', '$bannedby', '$comment');");
  729.                 break;
  730.  
  731.                 case 4: // notation
  732.                     mysql_insert("INSERT INTO `bans` (`type`, `value`, `param`, `active`, `expires`, `added`, `admin_id`, `comment`) VALUES ('$typeid', '$charid', '4294967295', '1', '$time', '$now', '$bannedby', '$comment');");
  733.                 break;
  734.  
  735.                 case 5: // deletion
  736.                     mysql_insert("INSERT INTO `bans` (`type`, `value`, `param`, `active`, `expires`, `added`, `admin_id`, `comment`) VALUES ('$typeid', '$charid', '4294967295', '1', '$time', '$now', '$bannedby', '$comment');");
  737.                 break;
  738.             }
  739.         }
  740.         elseif (Config('ServerEngine') === 'TFS_10') {
  741.             $now = time();
  742.  
  743.             switch ($typeid) {
  744.                 case 1: // IP ban
  745.                     mysql_insert("INSERT INTO `ip_bans` (`ip`, `reason`, `banned_at`, `expires_at`, `banned_by`) VALUES ('$charip', '$comment', '$now', '$time', '$bannedby');");
  746.                 break;
  747.  
  748.                 case 2: // namelock
  749.                     mysql_insert("INSERT INTO `player_namelocks` (`player_id`, `reason`, `namelocked_at`, `namelocked_by`) VALUES ('$charid', 'comment', '$now', '$bannedby');");
  750.                 break;
  751.  
  752.                 case 3: // acc ban
  753.                     mysql_insert("INSERT INTO `account_bans` (`account_id`, `reason`, `banned_at`, `expires_at`, `banned_by`) VALUES ('$accountid', '$comment', '$now', '$time', '$bannedby');");
  754.                 break;
  755.  
  756.                 case 4: // notation
  757.                     data_dump(false, array('status' => false), "Function deprecated. Ban option does not exist in TFS 1.0.");
  758.                     die();
  759.                 break;
  760.  
  761.                 case 5: // deletion
  762.                     data_dump(false, array('status' => false), "Function deprecated. Ban option does not exist in TFS 1.0.");
  763.                     die();
  764.                 break;
  765.             }
  766.         }
  767.  
  768.         return true;
  769.     } else {
  770.         return false;
  771.     }
  772. }
  773.  
  774. // -- END admin
  775.  
  776. // Fetch deathlist
  777. function user_fetch_deathlist($char_id) {
  778.     $char_id = (int)$char_id;
  779.     return mysql_select_multi("SELECT * FROM `player_deaths` WHERE `player_id`='$char_id' order by `time` DESC LIMIT 0, 10");
  780. }
  781.  
  782. // TFS .3 compatibility
  783. function user_fetch_deathlist03($char_id) {
  784.     $char_id = (int)$char_id;
  785.     $data = mysql_select_multi("SELECT * FROM `player_deaths` WHERE `player_id`='$char_id' order by `date` DESC LIMIT 0, 10");
  786.     if ($data !== false) {
  787.         for ($i = 0; $i < count($data); $i++) {
  788.             $data[$i]['time'] = $data[$i]['date'];
  789.         }
  790.     }
  791.     return $data;
  792. }
  793.  
  794. // same (death id ---> killer id)
  795. function user_get_kid($did) {
  796.     $did = (int)$did;
  797.     $data = mysql_select_single("SELECT `id` FROM `killers` WHERE `death_id`='$did';");
  798.     return ($data !== false) ? $data['id'] : false;
  799. }
  800. // same (killer id ---> player id)
  801. function user_get_killer_id($kn) {
  802.     $kn = (int)$kn;
  803.     $data = mysql_select_single("SELECT `player_id` FROM `player_killers` WHERE `kill_id`='$kn';");
  804.     return ($data !== false) ? $data['player_id'] : false;
  805. }
  806. // same (killer id ---> monster name)
  807. function user_get_killer_m_name($mn) {
  808.     $mn = (int)$mn;
  809.     $data = mysql_select_single("SELECT `name` FROM `environment_killers` WHERE `kill_id`='$mn';");
  810.     return ($data !== false) ? $data['name'] : false;
  811. }
  812.  
  813. // Count character deaths. Counts up 10.
  814. function user_count_deathlist($char_id) {
  815.     $char_id = (int)$char_id;
  816.     $data = mysql_select_single("SELECT COUNT('id') AS `id` FROM `player_deaths` WHERE `player_id`='$char_id' order by `time` DESC LIMIT 0, 10");
  817.     return ($data !== false) ? $data['id'] : false;
  818. }
  819.  
  820. // MY ACCOUNT RELATED \\
  821. function user_update_comment($char_id, $comment) {
  822.     $char_id = sanitize($char_id);
  823.     $comment = sanitize($comment);
  824.     mysql_update("UPDATE `znote_players` SET `comment`='$comment' WHERE `player_id`='$char_id'");
  825. }
  826.  
  827. // Permamently delete character id. (parameter: character id)
  828. function user_delete_character($char_id) {
  829.     $char_id = (int)$char_id;
  830.     mysql_delete("DELETE FROM `players` WHERE `id`='$char_id';");
  831.     mysql_delete("DELETE FROM `znote_players` WHERE `player_id`='$char_id';");
  832. }
  833.  
  834. // Delete character with supplied id with a delay.
  835. function user_delete_character_soft($char_id) {
  836.     $char_id = (int)$char_id;
  837.  
  838.     $char_name = user_character_name($char_id);
  839.     $original_acc_id = user_character_account_id($char_name);
  840.     if(!user_character_pending_delete($char_name))
  841.         mysql_insert('INSERT INTO `znote_deleted_characters`(`original_account_id`, `character_name`, `time`, `done`) VALUES(' . $original_acc_id . ', "' . $char_name . '", (NOW() + INTERVAL ' . config('delete_character_interval') . '), 0)');
  842.     else
  843.         return false;
  844. }
  845.  
  846. // Check if character will be deleted soon.
  847. function user_character_pending_delete($char_name) {
  848.     $char_name = sanitize($char_name);
  849.     $result = mysql_select_single('SELECT `done` FROM `znote_deleted_characters` WHERE `character_name` = "' . $char_name . '"');
  850.     return ($result === false) ? false : !$result['done'];
  851. }
  852.  
  853. // Get pending character deletes for supplied account id.
  854. function user_pending_deletes($acc_id) {
  855.     $acc_id = (int)$acc_id;
  856.     return mysql_select_multi('SELECT `id`, `character_name`, `time` FROM `znote_deleted_characters` WHERE `original_account_id` = ' . $acc_id . ' AND `done` = 0');
  857. }
  858.  
  859. // Parameter: accounts.id returns: An array containing detailed information of every character on the account.
  860. function user_character_list($account_id) {
  861.     //$count = user_character_list_count($account_id);
  862.     $account_id = (int)$account_id;
  863.  
  864.     if (config('ServerEngine') == 'TFS_10') {
  865.         $characters = mysql_select_multi("SELECT `p`.`id`, `p`.`name`, `p`.`level`, `p`.`vocation`, `p`.`town_id`, `p`.`lastlogin`, `gm`.`rank_id`, `po`.`player_id` AS `online` FROM `players` AS `p` LEFT JOIN `guild_membership` AS `gm` ON `p`.`id`=`gm`.`player_id` LEFT JOIN `players_online` AS `po` ON `p`.`id`=`po`.`player_id` WHERE `p`.`account_id`='$account_id' ORDER BY `p`.`level` DESC");
  866.         if ($characters !== false) {
  867.             for ($i = 0; $i < count($characters); $i++) {
  868.                 $characters[$i]['online'] = ($characters[$i]['online'] > 0) ? 1 : 0;
  869.                 //unset($characters[$i]['id']);
  870.             }
  871.         }
  872.  
  873.     } else $characters = mysql_select_multi("SELECT `id`, `name`, `level`, `vocation`, `town_id`, `lastlogin`, `online`, `rank_id` FROM `players` WHERE `account_id`='$account_id' ORDER BY `level` DESC");
  874.  
  875.     if ($characters !== false) {
  876.         $count = count($characters);
  877.         for ($i = 0; $i < $count; $i++) {
  878.             $characters[$i]['vocation'] = vocation_id_to_name($characters[$i]['vocation']); // Change vocation id to vocation name
  879.             $characters[$i]['town_id'] = town_id_to_name($characters[$i]['town_id']); // Change town id to town name
  880.  
  881.             // Make lastlogin human read-able.
  882.             if ($characters[$i]['lastlogin'] != 0) {
  883.                 $characters[$i]['lastlogin'] = getClock($characters[$i]['lastlogin'], true, false);
  884.             } else {
  885.                 $characters[$i]['lastlogin'] = 'Never.';
  886.             }
  887.  
  888.             $characters[$i]['online'] = online_id_to_name($characters[$i]['online']); // 0 to "offline", 1 to "ONLINE".
  889.         }
  890.     }
  891.  
  892.     return $characters;
  893. }
  894.  
  895. // Returns an array containing all(up to 30) player_IDs an account have. (parameter: account_ID).
  896. function user_character_list_player_id($account_id) {
  897.     //$count = user_character_list_count($account_id);
  898.     $account_id = sanitize($account_id);
  899.     return mysql_select_multi("SELECT `id` FROM `players` WHERE `account_id`='$account_id' ORDER BY `level` DESC LIMIT 0, 30");
  900. }
  901.  
  902. // Parameter: accounts.id returns: number of characters on the account.
  903. function user_character_list_count($account_id) {
  904.     $account_id = sanitize($account_id);
  905.     $data = mysql_select_single("SELECT COUNT('id') AS `id` FROM `players` WHERE `account_id`='$account_id'");
  906.     return ($data !== false) ? $data['id'] : 0;
  907. }
  908.  
  909. // END MY ACCOUNT RELATED
  910.  
  911. // HIGHSCORE FUNCTIONS \\
  912. function fetchAllScores($rows, $tfs, $g, $vlist, $v = -1, $flags = false, $outfits = false) {
  913.     if (config('ServerEngine') !== 'OTHIRE') {
  914.         if (config('client') < 780) {
  915.             $outfits = ($outfits) ? ", `p`.`lookbody` AS `body`, `p`.`lookfeet` AS `feet`, `p`.`lookhead` AS `head`, `p`.`looklegs` AS `legs`, `p`.`looktype` AS `type`" : "";
  916.         } else {
  917.             $outfits = ($outfits) ? ", `p`.`lookbody` AS `body`, `p`.`lookfeet` AS `feet`, `p`.`lookhead` AS `head`, `p`.`looklegs` AS `legs`, `p`.`looktype` AS `type`, `p`.`lookaddons` AS `addons`" : "";
  918.         }
  919.     } else {
  920.         $outfits = ($outfits) ? ", `p`.`lookbody` AS `body`, `p`.`lookfeet` AS `feet`, `p`.`lookhead` AS `head`, `p`.`looklegs` AS `legs`, `p`.`looktype` AS `type`" : "";
  921.     }
  922.     // Return scores ordered by type and vocation (if set)
  923.     $data = array();
  924.  
  925.     // Add "all" as a simulated vocation in vocation_list to represent all vocations and loop through them.
  926.     $vocGroups = array(
  927.         'all' => array()
  928.     );
  929.     foreach ($vlist AS $vid => $vdata) {
  930.         // If this vocation does not have a fromVoc attribute
  931.         if ($vdata['fromVoc'] === false) {
  932.             // Add it as a group
  933.             $vocGroups[(string)$vid] = array();
  934.         } else {
  935.             // Add an extended group for both vocations
  936.             $sharedGroup = (string)$vdata['fromVoc'] . ", " . (string)$vid;
  937.             $vocGroups[$sharedGroup] = array();
  938.  
  939.             // Make the fromVoc group a reference to the extended group for both vocations
  940.             $vocGroups[(string)$vdata['fromVoc']] = $sharedGroup;
  941.             $vocGroups[(string)$vid] = $sharedGroup;
  942.         }
  943.     }
  944.  
  945.     foreach ($vocGroups as $voc_id => $key_or_arr) {
  946.  
  947.         $vGrp = $voc_id;
  948.         // Change to correct vocation group if this vocation id reference a shared vocation group
  949.         if (!is_array($key_or_arr)) $vGrp = $key_or_arr;
  950.  
  951.         // If this vocation group is empty (then we need to fill it with highscore SQL Data)
  952.         if (empty($vocGroups[$vGrp])) {
  953.  
  954.             // Generate SQL WHERE-clause for vocation if $v is set
  955.             $v = '';
  956.             if ($vGrp !== 'all')
  957.                 $v = (strpos($vGrp, ',') !== false) ? 'AND `p`.`vocation` IN ('. $vGrp . ')' : 'AND `p`.`vocation` = \''.intval($vGrp).'\'';
  958.  
  959.             if ($tfs == 'TFS_10') {
  960.  
  961.                 if ($flags === false) { // In this case we only need to query players table
  962.                     $v = str_replace('`p`.', '', $v);
  963.                     $outfits = str_replace('`p`.', '', $outfits);
  964.  
  965.                     $vocGroups[$vGrp][1] = mysql_select_multi("SELECT `name`, `vocation`, `skill_club` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_club` DESC LIMIT 0, $rows;");
  966.                     $vocGroups[$vGrp][2] = mysql_select_multi("SELECT `name`, `vocation`, `skill_sword` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_sword` DESC LIMIT 0, $rows;");
  967.                     $vocGroups[$vGrp][3] = mysql_select_multi("SELECT `name`, `vocation`, `skill_axe` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_axe` DESC LIMIT 0, $rows;");
  968.                     $vocGroups[$vGrp][4] = mysql_select_multi("SELECT `name`, `vocation`, `skill_dist` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_dist` DESC LIMIT 0, $rows;");
  969.                     $vocGroups[$vGrp][5] = mysql_select_multi("SELECT `name`, `vocation`, `skill_shielding` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_shielding` DESC LIMIT 0, $rows;");
  970.                     $vocGroups[$vGrp][6] = mysql_select_multi("SELECT `name`, `vocation`, `skill_fishing` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_fishing` DESC LIMIT 0, $rows;");
  971.                     $vocGroups[$vGrp][7] = mysql_select_multi("SELECT `name`, `vocation`, `experience`, `level` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `experience` DESC LIMIT 0, $rows;");
  972.                     $vocGroups[$vGrp][8] = mysql_select_multi("SELECT `name`, `vocation`, `maglevel` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `maglevel` DESC LIMIT 0, $rows;");
  973.                     $vocGroups[$vGrp][9] = mysql_select_multi("SELECT `name`, `vocation`, `skill_fist` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `skill_fist` DESC LIMIT 0, $rows;");
  974.                     $vocGroups[$vGrp][10] = mysql_select_multi("SELECT `name`, `vocation`, `reborns` AS `value` $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `reborns` DESC LIMIT 0, $rows;");
  975.  
  976.                 } else { // Inner join znote_accounts table to retrieve the flag
  977.                     $vocGroups[$vGrp][1] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_club` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_club` DESC LIMIT 0, $rows;");
  978.                     $vocGroups[$vGrp][2] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_sword` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_sword` DESC LIMIT 0, $rows;");
  979.                     $vocGroups[$vGrp][3] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_axe` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_axe` DESC LIMIT 0, $rows;");
  980.                     $vocGroups[$vGrp][4] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_dist` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_dist` DESC LIMIT 0, $rows;");
  981.                     $vocGroups[$vGrp][5] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_shielding` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_shielding` DESC LIMIT 0, $rows;");
  982.                     $vocGroups[$vGrp][6] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_fishing` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_fishing` DESC LIMIT 0, $rows;");
  983.                     $vocGroups[$vGrp][7] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`experience`, `level` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`experience` DESC LIMIT 0, $rows;");
  984.                     $vocGroups[$vGrp][8] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`maglevel` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`maglevel` DESC LIMIT 0, $rows;");
  985.                     $vocGroups[$vGrp][9] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`skill_fist` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`skill_fist` DESC LIMIT 0, $rows;");
  986.                     $vocGroups[$vGrp][10] = mysql_select_multi("SELECT `p`.`name`, `p`.`vocation`, `p`.`reborns` AS `value`, `za`.`flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`reborns` DESC LIMIT 0, $rows;");
  987.                 }
  988.             } else { // TFS 0.2, 0.3, 0.4
  989.  
  990.                 if ($flags === false) {
  991.                     $vocGroups[$vGrp][9] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 0 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  992.                     $vocGroups[$vGrp][1] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 1 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  993.                     $vocGroups[$vGrp][2] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 2 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  994.                     $vocGroups[$vGrp][3] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 3 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  995.                     $vocGroups[$vGrp][4] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 4 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  996.                     $vocGroups[$vGrp][5] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 5 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  997.                     $vocGroups[$vGrp][6] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation` $outfits FROM `player_skills` AS `s` LEFT JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` WHERE `s`.`skillid` = 6 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  998.                     $v = str_replace('`p`.', '', $v);
  999.                     $outfits = str_replace('`p`.', '', $outfits);
  1000.                     $vocGroups[$vGrp][7] = mysql_select_multi("SELECT `id`, `name`, `vocation`, `experience`, `level` AS `value` $outfits $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `experience` DESC limit 0, $rows;");
  1001.                     $vocGroups[$vGrp][8] = mysql_select_multi("SELECT `id`, `name`, `vocation`, `maglevel` AS `value` $outfits $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `maglevel` DESC limit 0, $rows;");
  1002.                     $vocGroups[$vGrp][10] = mysql_select_multi("SELECT `id`, `name`, `vocation`, `reborns` AS `value` $outfits $outfits FROM `players` WHERE `group_id` < $g $v ORDER BY `reborns` DESC limit 0, $rows;");
  1003.  
  1004.                 } else { // Inner join znote_accounts table to retrieve the flag
  1005.                     $vocGroups[$vGrp][9] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 0 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1006.                     $vocGroups[$vGrp][1] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 1 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1007.                     $vocGroups[$vGrp][2] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 2 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1008.                     $vocGroups[$vGrp][3] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 3 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1009.                     $vocGroups[$vGrp][4] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 4 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1010.                     $vocGroups[$vGrp][5] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 5 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1011.                     $vocGroups[$vGrp][6] = mysql_select_multi("SELECT `s`.`player_id` AS `id`, `s`.`value` AS `value`, `p`.`name` AS `name`, `p`.`vocation` AS `vocation`, `za`.`flag` AS `flag` $outfits FROM `player_skills` AS `s` INNER JOIN `players` AS `p` ON `s`.`player_id`=`p`.`id` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id`  WHERE `s`.`skillid` = 6 AND `p`.`group_id` < $g $v ORDER BY `s`.`value` DESC LIMIT 0, $rows;");
  1012.                     $vocGroups[$vGrp][7] = mysql_select_multi("SELECT `p`.`id`, `p`.`name`, `p`.`vocation`, `p`.`experience`, `p`.`level` AS `value`, `za`.`flag` AS `flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`experience` DESC limit 0, $rows;");
  1013.                     $vocGroups[$vGrp][8] = mysql_select_multi("SELECT `p`.`id`, `p`.`name`, `p`.`vocation`, `p`.`maglevel` AS `value`, `za`.`flag` AS `flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`maglevel` DESC limit 0, $rows;");
  1014.                     $vocGroups[$vGrp][10] = mysql_select_multi("SELECT `p`.`id`, `p`.`name`, `p`.`vocation`, `p`.`reborns` AS `value`, `za`.`flag` AS `flag` $outfits FROM `players` AS `p` INNER JOIN `znote_accounts` AS `za` ON `p`.`account_id`=`za`.`account_id` WHERE `p`.`group_id` < $g $v ORDER BY `p`.`reborns` DESC limit 0, $rows;");
  1015.                 }
  1016.             }
  1017.         }
  1018.     }
  1019.     return $vocGroups;
  1020. }
  1021. // END HIGHSCORE FUNCTIONS
  1022.  
  1023. function user_recover($mode, $edom, $email, $character, $ip) {
  1024. /* -- Lost account function - user_recovery --
  1025.  
  1026.     $mode = username/password recovery definition
  1027.     $edom = The remembered value. (if mode is username, edom is players password and vice versa)
  1028.     $email = email address
  1029.     $character = character name
  1030.     $ip = character IP
  1031. */
  1032.     // Structure verify array data correctly
  1033.     if (config('ServerEngine') !== 'OTHIRE') {
  1034.         if ($mode === 'username') {
  1035.             $verify_data = array(
  1036.                 'password' => sha1($edom),
  1037.                 'email' => $email
  1038.             );
  1039.         } else {
  1040.             $verify_data = array(
  1041.                 'name' => $edom,
  1042.                 'email' => $email
  1043.             );
  1044.         }
  1045.     } else {
  1046.         if ($mode === 'username') {
  1047.             $verify_data = array(
  1048.                 'password' => sha1($edom),
  1049.                 'email' => $email
  1050.             );
  1051.         } else {
  1052.             $verify_data = array(
  1053.                 'id' => $edom,
  1054.                 'email' => $email
  1055.             );
  1056.         }
  1057.     }
  1058.     // Determine if the submitted information is correct and herit from same account
  1059.     if (user_account_fields_verify_value($verify_data)) {
  1060.  
  1061.         // Structure account id fetch method correctly
  1062.         if ($mode == 'username') {
  1063.             $account_id = user_account_id_from_password($verify_data['password']);
  1064.         } else {
  1065.             if (config('ServerEngine') !== 'OTHIRE')
  1066.                 $account_id = user_id($verify_data['name']);
  1067.             else
  1068.                 $account_id = user_id($verify_data['id']);
  1069.         }
  1070.         // get account id from character name
  1071.         $player_account_id = user_character_account_id($character);
  1072.  
  1073.         //Verify that players.account_id matches account.id
  1074.         if ($player_account_id == $account_id) {
  1075.             // verify IP match (IP = accounts.email_new) \\
  1076.             // Fetch IP data
  1077.             $ip_data = user_znote_account_data($account_id, 'ip');
  1078.             if ($ip == $ip_data['ip']) {
  1079.                 // IP Match, time to stop verifying SHIT and get on
  1080.                 // With giving the visitor his goddamn username/password!
  1081.                 if ($mode == 'username') {
  1082.                     if (config('ServerEngine') !== 'OTHIRE') {
  1083.                         $name_data = user_data($account_id, 'name');
  1084.                         echo '<br><p>Your username is:</p> <h3>'. $name_data['name'] .'</h3>';
  1085.                     } else {
  1086.                         $name_data = user_data($account_id, 'id');
  1087.                         echo '<br><p>Your account number is:</p> <h3>'. $name_data['id'] .'</h3>';
  1088.                     }
  1089.                 } else {
  1090.                     $newpass = substr(sha1(rand(1000000, 99999999)), 8);
  1091.                     echo '<br><p>Your new password is:</p> <h3>'. $newpass .'</h3><p>Remember to login and change it!</p>';
  1092.                     user_change_password($account_id, $newpass);
  1093.                 }
  1094.                 // END?! no, but almost. :)
  1095.             } else { echo'IP does not match.'; }
  1096.         } else { echo'Account data does not match.'; }
  1097.     } else { echo'Account data does not match.'; }
  1098. }
  1099.  
  1100. // Get account id from password. This can be inaccurate considering several people may have same password.
  1101. function user_account_id_from_password($password) {
  1102.     $password = sanitize($password);
  1103.     $tmp = mysql_select_single("SELECT `id` FROM `accounts` WHERE `password`='".$password."' LIMIT 1;");
  1104.     return $tmp['id'];
  1105. }
  1106.  
  1107. // Get account name from id.
  1108. function user_account_id_from_name($id) {
  1109.     $id = (int)$id;;
  1110.     if (config('ServerEngine') !== 'OTHIRE') {
  1111.         $result = mysql_select_single("SELECT `name` FROM `accounts` WHERE `id` = '" . $id . "' LIMIT 1;");
  1112.         return $result['name'];
  1113.     } else {
  1114.         $result = mysql_select_single("SELECT `id` FROM `accounts` WHERE `id` = '" . $id . "' LIMIT 1;");
  1115.         return $result['id'];
  1116.     }
  1117. }
  1118.  
  1119. // Add additional premium days to account id
  1120. function user_account_add_premdays($accid, $days) {
  1121.     global $tfs_10_hasPremDays; // Initialized in engine/init.php
  1122.     $accid = (int)$accid;
  1123.     $days = (int)$days;
  1124.  
  1125.     if (config('ServerEngine') !== 'OTHIRE') {
  1126.         if ($tfs_10_hasPremDays) {
  1127.             if (mysql_select_single("SHOW COLUMNS from `accounts` WHERE `Field` = 'lastday'") === false) {
  1128.                 mysql_update("UPDATE `accounts` SET `premdays` = `premdays`+{$days} WHERE `id`='{$accid}'");
  1129.             } else {
  1130.                 mysql_update("  UPDATE `accounts`
  1131.                                 SET `premdays` = `premdays`+{$days}
  1132.                                 ,`lastday` = GREATEST(`lastday`,UNIX_TIMESTAMP()) + ({$days} * 86400)
  1133.                                 WHERE `id`='{$accid}'
  1134.                 ");
  1135.             }
  1136.         } else {
  1137.             mysql_update("  UPDATE `accounts`
  1138.                             SET `premium_ends_at` = GREATEST(`premium_ends_at`, UNIX_TIMESTAMP()) + ({$days} * 86400)
  1139.                             WHERE `id`='{$accid}';
  1140.             ");
  1141.         }
  1142.     } else {
  1143.         $data = mysql_select_single("SELECT `premend` FROM `accounts` WHERE `id`='$accid';");
  1144.         $tmp = $data['premend'];
  1145.         if($tmp == 0)
  1146.             $tmp = time() + ($days * 24 * 60 * 60);
  1147.         else
  1148.             $tmp = $tmp + ($days * 24 * 60 * 60);
  1149.         mysql_update("UPDATE `accounts` SET `premend`='$tmp' WHERE `id`='$accid'");
  1150.     }
  1151. }
  1152.  
  1153. // Name = char name. Changes from male to female & vice versa.
  1154. function user_character_change_gender($name) {
  1155.     $user_id = user_character_id($name);
  1156.     $data = mysql_select_single("SELECT `sex` FROM `players` WHERE `id`='$user_id';");
  1157.     $gender = $data['sex'];
  1158.     if ($gender == 1) mysql_update("UPDATE `players` SET `sex`='0' WHERE `id`='$user_id'");
  1159.     else mysql_update("UPDATE `players` SET `sex`='1' WHERE `id`='$user_id'");
  1160. }
  1161.  
  1162. // Fetch account ID from player NAME
  1163. function user_character_account_id($character) {
  1164.     $character = sanitize($character);
  1165.     $data = mysql_select_single("SELECT `account_id` FROM `players` WHERE `name`='$character';");
  1166.     return ($data !== false) ? $data['account_id'] : false;
  1167. }
  1168.  
  1169. // Verify data from accounts table. Parameter is an array of <columnName> - <data to verify>
  1170. // etc array('id' = 4, 'password' = 'test') will verify that logged in user have id 4 and password test.
  1171. function user_account_fields_verify_value($verify_data) {
  1172.     $verify = array();
  1173.     array_walk($verify_data, 'array_sanitize');
  1174.  
  1175.     foreach ($verify_data as $field=>$data) {
  1176.         $verify[] = '`'. $field .'` = \''. $data .'\'';
  1177.     }
  1178.     $data = mysql_select_single("SELECT COUNT('id') AS `count` FROM `accounts` WHERE ". implode(' AND ', $verify) .";");
  1179.     return ($data !== false && $data['count'] == 1) ? true : false;
  1180. }
  1181.  
  1182. // Update accounts, make sure user is logged in first.
  1183. function user_update_account($update_data) {
  1184.     $update = array();
  1185.     array_walk($update_data, 'array_sanitize');
  1186.  
  1187.     foreach ($update_data as $field=>$data) {
  1188.         $update[] = '`'. $field .'` = \''. $data .'\'';
  1189.     }
  1190.  
  1191.     $user_id = (int)getSession('user_id');
  1192.  
  1193.     mysql_update("UPDATE `accounts` SET ". implode(', ', $update) ." WHERE `id`=". $user_id .";");
  1194. }
  1195.  
  1196. // Update znote_accounts table, make sure user is logged in for this. This is used to etc update lastIP
  1197. function user_update_znote_account($update_data) {
  1198.     $update = array();
  1199.     array_walk($update_data, 'array_sanitize');
  1200.  
  1201.     foreach ($update_data as $field=>$data) {
  1202.         $update[] = '`'. $field .'` = \''. $data .'\'';
  1203.     }
  1204.  
  1205.     $user_id = (int)getSession('user_id');
  1206.  
  1207.     mysql_update("UPDATE `znote_accounts` SET ". implode(', ', $update) ." WHERE `account_id`=". $user_id .";");
  1208. }
  1209.  
  1210. // Change password on account_id (Note: You should verify that he knows the old password before doing this)
  1211. function user_change_password($user_id, $password) {
  1212.     $user_id = sanitize($user_id);
  1213.     $password = sha1($password);
  1214.  
  1215.     mysql_update("UPDATE `accounts` SET `password`='$password' WHERE `id`=$user_id");
  1216. }
  1217. // .3 compatibility
  1218. function user_change_password03($user_id, $password) {
  1219.     if (config('salt') === true) {
  1220.         $user_id = sanitize($user_id);
  1221.         $salt = user_data($user_id, 'salt');
  1222.         $password = sha1($salt['salt'].$password);
  1223.  
  1224.         mysql_update("UPDATE `accounts` SET `password`='$password' WHERE `id`=$user_id");
  1225.     } else {
  1226.         user_change_password($user_id, $password);
  1227.     }
  1228. }
  1229.  
  1230. // Parameter: players.id, value[0 or 1]. Togge hide.
  1231. function user_character_set_hide($char_id, $value) {
  1232.     $char_id = sanitize($char_id);
  1233.     $value = sanitize($value);
  1234.  
  1235.     mysql_update("UPDATE `znote_players` SET `hide_char`='$value' WHERE `player_id`=$char_id");
  1236. }
  1237.  
  1238. // CREATE ACCOUNT
  1239. function user_create_account($register_data, $maildata) {
  1240.     array_walk($register_data, 'array_sanitize');
  1241.  
  1242.     if (config('ServerEngine') == 'TFS_03' && config('salt') === true) {
  1243.         $register_data['salt'] = generate_recovery_key(18);
  1244.         $register_data['password'] = sha1($register_data['salt'].$register_data['password']);
  1245.     } else $register_data['password'] = sha1($register_data['password']);
  1246.  
  1247.     $ip = $register_data['ip'];
  1248.     $created = $register_data['created'];
  1249.     $flag = $register_data['flag'];
  1250.  
  1251.     unset($register_data['ip']);
  1252.     unset($register_data['created']);
  1253.     unset($register_data['flag']);
  1254.  
  1255.     if (config('ServerEngine') == 'TFS_10') $register_data['creation'] = $created;
  1256.  
  1257.     $fields = '`'. implode('`, `', array_keys($register_data)) .'`';
  1258.     $data = '\''. implode('\', \'', $register_data) .'\'';
  1259.  
  1260.     mysql_insert("INSERT INTO `accounts` ($fields) VALUES ($data)");
  1261.  
  1262.     $account_id = (isset($register_data['name'])) ? user_id($register_data['name']) : user_id($register_data['id']);
  1263.     $activeKey = rand(100000000,999999999);
  1264.     $active = ($maildata['register']) ? 0 : 1;
  1265.     mysql_insert("INSERT INTO `znote_accounts` (`account_id`, `ip`, `created`, `active`, `active_email`, `activekey`, `flag`) VALUES ('$account_id', '$ip', '$created', '$active', '0', '$activeKey', '$flag')");
  1266.  
  1267.     if ($maildata['register']) {
  1268.  
  1269.         $thisurl = config('site_url') . "$_SERVER[REQUEST_URI]";
  1270.         $thisurl .= "?authenticate&u=".$account_id."&k=".$activeKey;
  1271.  
  1272.         $mailer = new Mail($maildata);
  1273.  
  1274.         $title = "Please authenticate your account at $_SERVER[HTTP_HOST].";
  1275.  
  1276.         $body = "<h1>Please click on the following link to authenticate your account:</h1>";
  1277.         $body .= "<p><a href='$thisurl'>$thisurl</a></p>";
  1278.         $body .= "<p>Thank you for registering and enjoy your stay at $maildata[fromName].</p>";
  1279.         $body .= "<hr><p>I am an automatic no-reply e-mail. Any emails sent back to me will be ignored.</p>";
  1280.  
  1281.         $mailer->sendMail($register_data['email'], $title, $body, $register_data['name']);
  1282.     }
  1283. }
  1284.  
  1285. // CREATE CHARACTER
  1286. function user_create_character($character_data) {
  1287.     array_walk($character_data, 'array_sanitize');
  1288.     $cnf = fullConfig();
  1289.  
  1290.     $vocation = (int)$character_data['vocation'];
  1291.     $playercnf = $cnf['player'];
  1292.     $base = $playercnf['base'];
  1293.     $create = $playercnf['create'];
  1294.     $skills = $create['skills'][$vocation];
  1295.  
  1296.     $outfit = ($character_data['sex'] == 1) ? $create['male_outfit'] : $create['female_outfit'];
  1297.  
  1298.     $leveldiff = $create['level'] - $base['level'];
  1299.  
  1300.     $gains = $cnf['vocations_gain'][$vocation];
  1301.  
  1302.     $health = $base['health'] + ( $gains['hp']  * $leveldiff );
  1303.     $mana   = $base['mana']   + ( $gains['mp']  * $leveldiff );
  1304.     $cap    = $base['cap']    + ( $gains['cap'] * $leveldiff );
  1305.  
  1306.     // This is TFS 0.2 compatible import data with Znote AAC mysql schema
  1307.     if (config('ServerEngine') !== 'OTHIRE') {
  1308.         $import_data = array(
  1309.             'name' => $character_data['name'],
  1310.             'group_id' => 1,
  1311.             'account_id' => $character_data['account_id'],
  1312.             'level' => $create['level'],
  1313.             'vocation' => $vocation,
  1314.             'health' => $health,
  1315.             'healthmax' => $health,
  1316.             'experience' => level_to_experience($create['level']),
  1317.             'lookbody' => $outfit['body'], /* STARTER OUTFITS */
  1318.             'lookfeet' => $outfit['feet'],
  1319.             'lookhead' => $outfit['head'],
  1320.             'looklegs' => $outfit['legs'],
  1321.             'looktype' => $outfit['id'],
  1322.             'lookaddons' => 0,
  1323.             'maglevel' => $skills['magic'],
  1324.             'mana' => $mana,
  1325.             'manamax' => $mana,
  1326.             'manaspent' => 0,
  1327.             'soul' => $base['soul'],
  1328.             'town_id' => $character_data['town_id'],
  1329.             'posx' => $cnf['default_pos']['x'],
  1330.             'posy' => $cnf['default_pos']['y'],
  1331.             'posz' => $cnf['default_pos']['z'],
  1332.             'conditions' => '',
  1333.             'cap' => $cap,
  1334.             'sex' => $character_data['sex'],
  1335.             'lastlogin' => 0,
  1336.             'lastip' => $character_data['lastip'],
  1337.             'save' => 1,
  1338.             'skull' => 0,
  1339.             'skulltime' => 0,
  1340.             'rank_id' => 0,
  1341.             'guildnick' => '',
  1342.             'lastlogout' => 0,
  1343.             'blessings' => 0,
  1344.             'direction' => 0,
  1345.             'loss_experience' => 10,
  1346.             'loss_mana' => 10,
  1347.             'loss_skills' => 10,
  1348.             'premend' => 0,
  1349.             'online' => 0,
  1350.             'balance' => 0
  1351.         );
  1352.     } else {
  1353.         $import_data = array(
  1354.             'name' => $character_data['name'],
  1355.             'group_id' => 1,
  1356.             'account_id' => $character_data['account_id'],
  1357.             'level' => $create['level'],
  1358.             'vocation' => $vocation,
  1359.             'health' => $health,
  1360.             'healthmax' => $health,
  1361.             'experience' => level_to_experience($create['level']),
  1362.             'lookbody' => $outfit['body'], /* STARTER OUTFITS */
  1363.             'lookfeet' => $outfit['feet'],
  1364.             'lookhead' => $outfit['head'],
  1365.             'looklegs' => $outfit['legs'],
  1366.             'looktype' => $outfit['id'],
  1367.             'maglevel' => $skills['magic'],
  1368.             'mana' => $mana,
  1369.             'manamax' => $mana,
  1370.             'manaspent' => 0,
  1371.             'soul' => $base['soul'],
  1372.             'town_id' => $character_data['town_id'],
  1373.             'posx' => $cnf['default_pos']['x'],
  1374.             'posy' => $cnf['default_pos']['y'],
  1375.             'posz' => $cnf['default_pos']['z'],
  1376.             'conditions' => '',
  1377.             'cap' => $cap,
  1378.             'sex' => $character_data['sex'],
  1379.             'lastlogin' => 0,
  1380.             'lastip' => $character_data['lastip'],
  1381.             'save' => 1,
  1382.             'skull_type' => 0,
  1383.             'skull_time' => 0,
  1384.             'rank_id' => 0,
  1385.             'guildnick' => '',
  1386.             'lastlogout' => 0,
  1387.             'direction' => 0,
  1388.             'loss_experience' => 100,
  1389.             'loss_mana' => 100,
  1390.             'loss_skills' => 100,
  1391.             'loss_items' => 10,
  1392.             'online' => 0,
  1393.             'balance' => 0
  1394.         );
  1395.     }
  1396.  
  1397.     // Clients below 7.8 don't have outfit addons
  1398.     if (isset($import_data['lookaddons']) && config('client') < 780) {
  1399.         unset($import_data['lookaddons']);
  1400.     }
  1401.  
  1402.     // TFS 1.0 variations
  1403.     if ($cnf['ServerEngine'] === 'TFS_10') {
  1404.         unset($import_data['rank_id']);
  1405.         unset($import_data['guildnick']);
  1406.         unset($import_data['direction']);
  1407.         unset($import_data['loss_experience']);
  1408.         unset($import_data['loss_mana']);
  1409.         unset($import_data['loss_skills']);
  1410.         unset($import_data['premend']);
  1411.         unset($import_data['online']);
  1412.  
  1413.         // Skills can be added into the same query on TFS 1.0+
  1414.         $import_data['skill_fist'] = $skills['fist'];
  1415.         $import_data['skill_club'] = $skills['club'];
  1416.         $import_data['skill_sword'] = $skills['sword'];
  1417.         $import_data['skill_axe'] = $skills['axe'];
  1418.         $import_data['skill_dist'] = $skills['dist'];
  1419.         $import_data['skill_shielding'] = $skills['shield'];
  1420.         $import_data['skill_fishing'] = $skills['fishing'];
  1421.     }
  1422.  
  1423.     // If you are no vocation (id 0), use these details instead:
  1424.     if ($vocation === 0) {
  1425.         $import_data['level'] = $create['novocation']['level'];
  1426.         $import_data['experience'] = level_to_experience($create['novocation']['level']);
  1427.  
  1428.         if ($create['novocation']['forceTown'] === true) {
  1429.             $import_data['town_id'] = $create['novocation']['townId'];
  1430.         }
  1431.     }
  1432.  
  1433.     $fields = array_keys($import_data); // Fetch select fields
  1434.     $data = array_values($import_data); // Fetch insert data
  1435.  
  1436.     $fields_sql = implode("`, `", $fields); // Convert array into SQL compatible string
  1437.     $data_sql = implode("', '", $data); // Convert array into SQL compatible string
  1438.  
  1439.     mysql_insert("INSERT INTO `players`(`$fields_sql`) VALUES ('$data_sql');");
  1440.  
  1441.     $created = time();
  1442.     $charid = user_character_id($import_data['name']);
  1443.     mysql_insert("INSERT INTO `znote_players`(`player_id`, `created`, `hide_char`, `comment`) VALUES ('$charid', '$created', '0', '');");
  1444.  
  1445.     // Player skills TFS 0.2, 0.3/4. (TFS 1.0 is done above character creation)
  1446.     if ($cnf['ServerEngine'] != 'TFS_10') {
  1447.         mysql_delete("DELETE FROM `player_skills` WHERE `player_id`='{$charid}';");
  1448.         mysql_insert("INSERT INTO `player_skills` (`player_id`, `skillid`, `value`) VALUES ('{$charid}', '0', '".$skills['fist']."'), ('{$charid}', '1', '".$skills['club']."'), ('{$charid}', '2', '".$skills['sword']."'), ('{$charid}', '3', '".$skills['axe']."'), ('{$charid}', '4', '".$skills['dist']."'), ('{$charid}', '5', '".$skills['shield']."'), ('{$charid}', '6', '".$skills['fishing']."');");
  1449.     }
  1450. }
  1451.  
  1452. // Returns counted value of all players online
  1453. function user_count_online() {
  1454.     if (config('ServerEngine') == 'TFS_10') {
  1455.         $online = mysql_select_single("SELECT COUNT(`player_id`) AS `value` FROM `players_online`;");
  1456.         return ($online !== false) ? $online['value'] : 0;
  1457.     } else {
  1458.         $data = mysql_select_single("SELECT COUNT(`id`) AS `count` from `players` WHERE `online` = 1;");
  1459.         return ($data !== false) ? $data['count'] : 0;
  1460.     }
  1461. }
  1462.  
  1463. // Returns counted value of all accounts.
  1464. function user_count_accounts() {
  1465.     $result = mysql_select_single("SELECT COUNT(`id`) AS `id` from `accounts`;");
  1466.     return ($result !== false) ? $result['id'] : 0;
  1467. }
  1468.  
  1469. /* user_character_data (fetches whatever data you want from players table)!
  1470.     Usage:
  1471.     $player = user_data(player_ID, 'name', 'level');
  1472.     echo "Character name: ". $player['name'] .". Level: ". $player['level'];
  1473. */
  1474. function user_character_data($user_id) {
  1475.     $data = array();
  1476.     $user_id = (int)$user_id;
  1477.     $func_num_args = func_num_args();
  1478.     $func_get_args = func_get_args();
  1479.     if ($func_num_args > 1)  {
  1480.         unset($func_get_args[0]);
  1481.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1482.         $data = mysql_select_single("SELECT $fields FROM `players` WHERE `id` = $user_id;");
  1483.         return $data;
  1484.     }
  1485. }
  1486.  
  1487. // return query data from znote_players table
  1488. function user_znote_character_data($character_id) {
  1489.     $data = array();
  1490.     $charid = (int)$character_id;
  1491.  
  1492.     $func_num_args = func_num_args();
  1493.     $func_get_args = func_get_args();
  1494.  
  1495.     if ($func_num_args > 1)  {
  1496.         unset($func_get_args[0]);
  1497.  
  1498.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1499.         $data = mysql_select_single("SELECT $fields FROM `znote_players` WHERE `player_id` = $charid;");
  1500.         return $data;
  1501.     }
  1502. }
  1503.  
  1504. // return query data from znote table
  1505. // usage: $znoteAAC = user_znote_data('version');
  1506. // echo $znoteAAC['version'];
  1507. function user_znote_data() {
  1508.     $data = array();
  1509.  
  1510.     $func_num_args = func_num_args();
  1511.     $func_get_args = func_get_args();
  1512.  
  1513.     if ($func_num_args > 0)  {
  1514.  
  1515.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1516.         return mysql_select_single("SELECT $fields FROM `znote`;");
  1517.     } else return false;
  1518. }
  1519.  
  1520. // return query data from znote_accounts table
  1521. // See documentation on user_data. This fetches information from znote_accounts table.
  1522. function user_znote_account_data($account_id) {
  1523.     $data = array();
  1524.     $accid = (int)$account_id;
  1525.  
  1526.     $func_num_args = func_num_args();
  1527.     $func_get_args = func_get_args();
  1528.  
  1529.     if ($func_num_args > 1)  {
  1530.         unset($func_get_args[0]);
  1531.  
  1532.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1533.         return mysql_select_single("SELECT $fields FROM `znote_accounts` WHERE `account_id` = $accid LIMIT 1;");
  1534.     } else return false;
  1535. }
  1536.  
  1537. // return query data from znote_visitors table
  1538. // See documentation on user_data, but this uses $longip instead.
  1539. function user_znote_visitor_data($longip) {
  1540.     $data = array();
  1541.     $longip = (int)$longip;
  1542.  
  1543.     $func_num_args = func_num_args();
  1544.     $func_get_args = func_get_args();
  1545.  
  1546.     if ($func_num_args > 1)  {
  1547.         unset($func_get_args[0]);
  1548.  
  1549.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1550.         return mysql_select_single("SELECT $fields FROM `znote_visitors` WHERE `ip` = $longip;");
  1551.     } else return false;
  1552. }
  1553.  
  1554. // return query data from znote_visitors_details table
  1555. // See documentation on user_data, but this uses $longip instead.
  1556. function user_znote_visitor_details_data($longip) {
  1557.     $data = array();
  1558.     $longip = (int)$longip;
  1559.  
  1560.     $func_num_args = func_num_args();
  1561.     $func_get_args = func_get_args();
  1562.  
  1563.     if ($func_num_args > 1)  {
  1564.         unset($func_get_args[0]);
  1565.  
  1566.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1567.         return mysql_select_single("SELECT $fields FROM `znote_visitors_details` WHERE `ip` = $longip;");
  1568.     } else return false;
  1569. }
  1570.  
  1571. /* user_data (fetches whatever data you want from accounts table)!
  1572.     Usage:
  1573.     $account = user_data(account_ID, 'password', 'email');
  1574.     echo $account['email']; //Will then echo out that accounts mail address.
  1575. */
  1576. function user_data($user_id) {
  1577.     $data = array();
  1578.     $user_id = sanitize($user_id);
  1579.  
  1580.     $func_num_args = func_num_args();
  1581.     $func_get_args = func_get_args();
  1582.  
  1583.     if ($func_num_args > 1)  {
  1584.         unset($func_get_args[0]);
  1585.  
  1586.         $fields = '`'. implode('`, `', $func_get_args) .'`';
  1587.         return mysql_select_single("SELECT $fields FROM `accounts` WHERE `id` = $user_id LIMIT 1;");
  1588.     } else return false;
  1589. }
  1590.  
  1591. // Checks if user is activated (Not in use atm)
  1592. function user_activated($username) {
  1593.     $username = sanitize($username);
  1594.     // Deprecated, removed from DB.
  1595.     return false;
  1596. }
  1597.  
  1598. // Checks that username exist in database
  1599. function user_exist($username) {
  1600.     $username = sanitize($username);
  1601.     if (config('ServerEngine') !== 'OTHIRE')
  1602.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `name`='$username';");
  1603.     else
  1604.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `id`='$username';");
  1605.     return ($data !== false) ? true : false;
  1606. }
  1607.  
  1608. function user_name($id) { //USERNAME FROM PLAYER ID
  1609.     $id = (int)$id;
  1610.     $name = mysql_select_single("SELECT `name` FROM `players` WHERE `id`='$id';");
  1611.     if ($name !== false) return $name['name'];
  1612.     else return false;
  1613. }
  1614.  
  1615. // Checks that character name exist
  1616. function user_character_exist($username) {
  1617.     $username = sanitize($username);
  1618.     $player = mysql_select_single("SELECT `id` FROM `players` WHERE `name`='$username';");
  1619.     return ($player !== false) ? $player['id'] : false;
  1620. }
  1621.  
  1622. // Checks that this email exist.
  1623. function user_email_exist($email) {
  1624.     $email = sanitize($email);
  1625.     $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `email`='$email';");
  1626.     return ($data !== false) ? true : false;
  1627. }
  1628.  
  1629. // Fetch user account ID from registered email. (this is used by etc lost account)
  1630. function user_id_from_email($email) {
  1631.     $email = sanitize($email);
  1632.      $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `email`='$email';");
  1633.      return ($data !== false) ? $data['id'] : false;
  1634. }
  1635.  
  1636. // Checks that a password exist in the database.
  1637. function user_password_exist($password) {
  1638.     $password = sha1($password); // No need to sanitize passwords since we encrypt them.
  1639.     $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `password`='$password';");
  1640.     return ($data !== false) ? true : false;
  1641. }
  1642.  
  1643. // Verify that submitted password match stored password in account id
  1644. function user_password_match($password, $account_id) {
  1645.     $password = sha1($password); // No need to sanitize passwords since we encrypt them.
  1646.     $account_id = (int)$account_id;
  1647.     $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `password`='$password' AND `id`='$account_id';");
  1648.     return ($data !== false) ? true : false;
  1649. }
  1650.  
  1651. // Get user ID from name
  1652. function user_id($username) {
  1653.     $username = sanitize($username);
  1654.     if (config('ServerEngine') !== 'OTHIRE')
  1655.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `name`='$username' LIMIT 1;");
  1656.     else
  1657.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `id`='$username' LIMIT 1;");
  1658.     if ($data !== false) return $data['id'];
  1659.     else return false;
  1660. }
  1661.  
  1662. // Get user login ID from username and password
  1663. function user_login_id($username, $password) {
  1664.     $username = sanitize($username);
  1665.     $password = sha1($password);
  1666.     if (config('ServerEngine') !== 'OTHIRE')
  1667.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `name`='$username' AND `password`='$password' LIMIT 1;");
  1668.     else
  1669.         $data = mysql_select_single("SELECT `id` FROM `accounts` WHERE `id`='$username' AND `password`='$password' LIMIT 1;");
  1670.     if ($data !== false) return $data['id'];
  1671.     else return false;
  1672. }
  1673.  
  1674. // TFS 0.3+ compatibility.
  1675. function user_login_id_03($username, $password) {
  1676.     if (config('salt') === true) {
  1677.         if (user_exist($username)) {
  1678.             $user_id = user_id($username);
  1679.             $username = sanitize($username);
  1680.  
  1681.             $data = mysql_select_single("SELECT `salt`, `id`, `name`, `password` FROM `accounts` WHERE `id`='$user_id';");
  1682.             $salt = $data['salt'];
  1683.             if (!empty($salt)) $password = sha1($salt.$password);
  1684.             else $password = sha1($password);
  1685.             return ($data !== false && $data['name'] == $username && $data['password'] == $password) ? $data['id'] : false;
  1686.         } else return false;
  1687.     } else return user_login_id($username, $password);
  1688. }
  1689.  
  1690. // Get character ID from character name
  1691. function user_character_id($charname) {
  1692.     $charname = sanitize($charname);
  1693.     $char = mysql_select_single("SELECT `id` FROM `players` WHERE `name`='$charname';");
  1694.     if ($char !== false) return $char['id'];
  1695.     else return false;
  1696. }
  1697.  
  1698. // Get character name from character ID
  1699. function user_character_name($charID) {
  1700.     $charID = (int)$charID;
  1701.     $char = mysql_select_single('SELECT `name` FROM `players` WHERE `id` = ' . $charID);
  1702.     if ($char !== false) return $char['name'];
  1703.     else return false;
  1704. }
  1705.  
  1706. // Hide user character.
  1707. function user_character_hide($username) {
  1708.     $username = sanitize($username);
  1709.     $username = user_character_id($username);
  1710.     $char = mysql_select_single("SELECT `hide_char` FROM `znote_players` WHERE `player_id`='$username';");
  1711.     if ($char !== false) return $char['hide_char'];
  1712.     else return false;
  1713. }
  1714.  
  1715. // Login with a user. (TFS 0.2)
  1716. function user_login($username, $password) {
  1717.     $username = sanitize($username);
  1718.     $password = sha1($password);
  1719.     if (config('ServerEngine') !== 'OTHIRE')
  1720.         $data = mysql_select_single("SELECT `id` FROM accounts WHERE name='$username' AND password='$password';");
  1721.     else
  1722.         $data = mysql_select_single("SELECT `id` FROM accounts WHERE id='$username' AND password='$password';");
  1723.     return ($data !== false) ? $data['id'] : false;
  1724. }
  1725.  
  1726. // Login a user with TFS 0.3 compatibility
  1727. function user_login_03($username, $password) {
  1728.     if (config('salt') === true) {
  1729.         $username = sanitize($username);
  1730.         $data = mysql_select_single("SELECT `salt`, `id`, `password`, `name` FROM `accounts` WHERE `name`='$username';");
  1731.         $salt = $data['salt'];
  1732.         if (!empty($salt)) $password = sha1($salt.$password);
  1733.         else $password = sha1($password);
  1734.         return ($data !== false && $data['name'] == $username && $data['password'] == $password) ? $data['id'] : false;
  1735.     } else return user_login($username, $password);
  1736. }
  1737.  
  1738. // Verify that user is logged in
  1739. function user_logged_in() {
  1740.     return (getSession('user_id') !== false) ? true : false;
  1741. }
  1742.  
  1743. function guild_war_invitation($cid, $gid) {
  1744.     $cid = (int)$cid;
  1745.     $gid = (int)$gid;
  1746.     $gname = get_guild_name($cid);
  1747.     $ename = get_guild_name($gid);
  1748.     $time = time();
  1749.     mysql_insert("INSERT INTO `guild_wars` (`guild1`, `guild2`, `name1`, `name2`, `status`, `started`, `ended`) VALUES ('$cid', '$gid', '$gname', '$ename', '0', '$time', '0');");
  1750. }
  1751.  
  1752. function accept_war_invitation($cid, $gid) {
  1753.     $cid = (int)$cid;
  1754.     $gid = (int)$gid;
  1755.     mysql_update("UPDATE `guild_wars` SET `status` = 1 WHERE `guild1` = '$cid' AND `guild2` = '$gid' AND `status` = 0;");
  1756. }
  1757.  
  1758. function reject_war_invitation($cid, $gid) {
  1759.     $cid = (int)$cid;
  1760.     $gid = (int)$gid;
  1761.     $time = time();
  1762.     mysql_update("UPDATE `guild_wars` SET `status` = 2, `ended` = '$time' WHERE `guild1` = '$cid' AND `guild2` = '$gid';");
  1763. }
  1764.  
  1765. function cancel_war_invitation($cid, $gid) {
  1766.     $cid = (int)$cid;
  1767.     $gid = (int)$gid;
  1768.     $time = time();
  1769.     mysql_update("UPDATE `guild_wars` SET `status` = 3, `ended` = '$time' WHERE `guild2` = '$cid' AND `guild1` = '$gid';");
  1770. }
  1771.  
  1772. ?>
  1773.  
Add Comment
Please, Sign In to add comment