function char_cleanup(int $id, int $type) : bool { $return = modulehook('delete_character', ['acctid' => $id, 'deltype' => $type, 'dodel' => true]); if (!$return['dodel']) { return false; } $accounts = db_prefix('accounts'); $accountsOutput = db_prefix('accounts_output'); $commentary = db_prefix('commentary'); $mail = db_prefix('mail'); $news = db_prefix('news'); $clans = db_prefix('clans'); db_query("DELETE FROM {$accountsOutput} WHERE acctid = '{$id}'"); db_query("DELETE FROM {$commentary} WHERE author = '{$id}'"); db_query("DELETE FROM {$mail} WHERE msgto = '{$id}' OR msgfrom = '{$id}'"); db_query("DELETE FROM {$news} WHERE accountid = '{$id}'"); module_delete_userprefs($id); $leader = CLAN_LEADER; $applicant = CLAN_APPLICANT; $sql = db_query("SELECT clanrank, clanid FROM {$accounts} WHERE acctid = '{$id}'"); $row = db_fetch_assoc($sql); if ($row['clanid'] != 0 && $row['clanrank'] == $leader) { $cid = $row['clanid']; $sql = db_query("SELECT acctid, clanrank\n FROM {$accounts}\n WHERE clanid = '{$row['clanid']}'\n AND clanrank > '{$applicant}'\n AND acctid != '{$id}'\n ORDER BY clanrank DESC, clanjoindate"); if (db_num_rows($sql)) { $row = db_fetch_assoc($sql); if ($row['clanrank'] != $leader) { db_query("UPDATE {$accounts} SET clanrank = '{$leader}' WHERE acctid = {$row['acctid']}"); } } else { db_query("DELETE FROM {$clans} WHERE clanid = '{$row['clanid']}'"); db_query("UPDATE {$accounts}\n SET clanid = '0',\n clanrank = '0',\n clanjoindate = '0000-00-00 00:00:00'\n WHERE clanid = '{$row['clanid']}'"); } } $sql = db_query("DELETE FROM {$accounts} WHERE acctid = '{$id}'"); if (!$sql) { return false; } return true; }
function char_cleanup($id, $type) { // this function handles the grunt work of character cleanup. // Run any modules hooks who want to deal with character deletion, or stop it $return = modulehook("delete_character", array("acctid" => $id, "deltype" => $type, "dodel" => true)); if (!$return['dodel']) { return false; } //erase the player's items require_once "lib/items.php"; items_delete_character($id); // delete the output field from the accounts_output table introduced in 1.1.1 db_query("DELETE FROM " . db_prefix("accounts_output") . " WHERE acctid={$id};"); // delete the comments the user posted, necessary to have the systemcomments with acctid 0 working db_query("DELETE FROM " . db_prefix("commentary") . " WHERE author={$id};"); // Clean up any clan positions held by this character $sql = "SELECT clanrank,clanid FROM " . db_prefix("accounts") . " WHERE acctid={$id}"; $res = db_query($sql); $row = db_fetch_assoc($res); if ($row['clanid'] != 0 && $row['clanrank'] == CLAN_LEADER) { $cid = $row['clanid']; // We need to auto promote or disband the clan. $sql = "SELECT name,acctid,clanrank FROM " . db_prefix("accounts") . " WHERE clanid={$cid} AND clanrank > " . CLAN_APPLICANT . " AND acctid<>{$id} ORDER BY clanrank DESC, clanjoindate"; $res = db_query($sql); if (db_num_rows($res)) { // Okay, we can promote if needed $row = db_fetch_assoc($res); if ($row['clanrank'] != CLAN_LEADER) { // No other leaders, promote this one $id1 = $row['acctid']; $sql = "UPDATE " . db_prefix("accounts") . " SET clanrank=" . CLAN_LEADER . " WHERE acctid={$id1}"; db_query($sql); } } else { // this clan needs to be disbanded. $sql = "DELETE FROM " . db_prefix("clans") . " WHERE clanid={$cid}"; db_query($sql); // And just in case we goofed, no players associated with a // deleted clan This shouldn't be important, but. $sql = "UPDATE " . db_prefix("accounts") . " SET clanid=0,clanrank=0,clanjoindate='0000-00-00 00:00;00' WHERE clanid={$cid}"; db_query($sql); } } // Delete any module user prefs module_delete_userprefs($id); return true; }