mirror of
https://github.com/Shadowss/TravianZ.git
synced 2026-07-26 14:36:06 +00:00
Refactor GameEngine files
fix some GameEngine bugs and new improovements
This commit is contained in:
@@ -30,6 +30,91 @@ trait DatabaseBuildingQueries {
|
||||
return mysqli_query($this->dblink,$q);
|
||||
}
|
||||
|
||||
/**
|
||||
* B-W2: finalizeaza o cladire (nivel + tip) in fdata SI invalideaza cache-ul
|
||||
* de resource levels. Inlocuieste UPDATE-ul raw din Building::finishAll()
|
||||
* care ocolea invalidarea din Faza B - recountCP() citea nivelele vechi din
|
||||
* cache si persista un CP gresit in vdata.
|
||||
*/
|
||||
function finishBuildingLevel($wid, $field, $level, $type) {
|
||||
list($wid, $field, $level, $type) = $this->escape_input((int) $wid, (int) $field, (int) $level, (int) $type);
|
||||
|
||||
$q = "UPDATE " . TB_PREFIX . "fdata SET f" . $field . " = " . $level . ", f" . $field . "t = " . $type . " WHERE vref = " . $wid;
|
||||
$result = mysqli_query($this->dblink, $q);
|
||||
|
||||
// invalidare: urmatorul getResourceLevel()/getFieldLevel() reciteste din DB
|
||||
self::clearResourseLevelsCache();
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* B-W2: sterge joburi din bdata dupa id-uri SI invalideaza cache-ul de
|
||||
* joburi al satului. Inlocuieste DELETE-ul raw din Building::finishAll().
|
||||
*/
|
||||
function deleteBuildings($wid, array $ids) {
|
||||
$wid = (int) $wid;
|
||||
$ids = array_map('intval', $ids);
|
||||
|
||||
if (empty($ids)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
$result = mysqli_query($this->dblink, "DELETE FROM " . TB_PREFIX . "bdata WHERE id IN(" . implode(',', $ids) . ")");
|
||||
unset(self::$buildingsUnderConstructionCache[$wid]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* B-W2: promoveaza un job din coada de asteptare (loopcon = 1) in coada
|
||||
* activa SI invalideaza cache-ul de joburi al satului.
|
||||
*/
|
||||
function promoteLoopJob($wid, $id) {
|
||||
list($wid, $id) = $this->escape_input((int) $wid, (int) $id);
|
||||
|
||||
$result = mysqli_query($this->dblink, "UPDATE " . TB_PREFIX . "bdata SET loopcon = 0 WHERE id = " . $id);
|
||||
unset(self::$buildingsUnderConstructionCache[$wid]);
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* B-W2: actualizeaza numarul maxim de membri ai aliantei conduse de $leader
|
||||
* (efectul Embassy-ului). Inlocuieste UPDATE-ul raw din Building::finishAll().
|
||||
*/
|
||||
function updateAllianceMax($leader, $max) {
|
||||
list($leader, $max) = $this->escape_input((int) $leader, (int) $max);
|
||||
|
||||
return mysqli_query($this->dblink, "UPDATE " . TB_PREFIX . "alidata SET max = " . $max . " WHERE leader = " . $leader);
|
||||
}
|
||||
|
||||
/**
|
||||
* B-W2: log de gold (prepared statement). Inlocuieste INSERT-ul raw din
|
||||
* Building::finishAll(); acelasi format ca logger-ul din UserQueries.
|
||||
*/
|
||||
function addGoldFinLog($wid, $uid, $action, $gold, $details) {
|
||||
$stmt = $this->dblink->prepare(
|
||||
"INSERT INTO `" . TB_PREFIX . "gold_fin_log` (wid, uid, action, gold, time, details) VALUES (?, ?, ?, ?, ?, ?)"
|
||||
);
|
||||
|
||||
if (!$stmt) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$wid = (int) $wid;
|
||||
$uid = (int) $uid;
|
||||
$gold = (int) $gold;
|
||||
$now = time();
|
||||
|
||||
$stmt->bind_param("iisiis", $wid, $uid, $action, $gold, $now, $details);
|
||||
$ok = $stmt->execute();
|
||||
$stmt->close();
|
||||
|
||||
return $ok;
|
||||
}
|
||||
|
||||
|
||||
function getBuildLock($wid) {
|
||||
$wid = (int) $wid;
|
||||
$result = mysqli_query($this->dblink, "SELECT GET_LOCK('build_village_$wid', 10) AS locked");
|
||||
|
||||
@@ -288,4 +288,44 @@ References: User ID/Message ID, Mode
|
||||
$result = mysqli_query($this->dblink,$q);
|
||||
return $this->mysqli_fetch_all($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* UM-W1: numarul de mesaje trimise de $uid in ultimele $seconds secunde.
|
||||
* Muta flood-check-ul inline din Message::sendMessage()/sendAMessage().
|
||||
*/
|
||||
function countRecentMessages($uid, $seconds = 60) {
|
||||
list($uid, $seconds) = $this->escape_input((int) $uid, (int) $seconds);
|
||||
|
||||
$q = "SELECT COUNT(*) AS Total FROM " . TB_PREFIX . "mdata WHERE owner = $uid AND time > " . (time() - $seconds);
|
||||
$row = mysqli_fetch_assoc(mysqli_query($this->dblink, $q));
|
||||
return (int) ($row['Total'] ?? 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* UM-W1: id-urile membrilor unei aliante. Muta query-ul inline din
|
||||
* Message::sendAMessage().
|
||||
*/
|
||||
function getAllianceMemberIds($alliance) {
|
||||
list($alliance) = $this->escape_input((int) $alliance);
|
||||
|
||||
$q = "SELECT id FROM " . TB_PREFIX . "users WHERE alliance = $alliance";
|
||||
$result = mysqli_query($this->dblink, $q);
|
||||
$ids = [];
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
$ids[] = $row['id'];
|
||||
}
|
||||
return $ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* UM-W1: target + owner ale unui mesaj (pentru a decide modul de stergere).
|
||||
* Muta SELECT-ul inline din Message::removeMessage().
|
||||
*/
|
||||
function getMessageOwnership($id) {
|
||||
list($id) = $this->escape_input((int) $id);
|
||||
|
||||
$q = "SELECT target, owner FROM " . TB_PREFIX . "mdata WHERE id = $id LIMIT 1";
|
||||
$row = mysqli_fetch_assoc(mysqli_query($this->dblink, $q));
|
||||
return $row ?: ['target' => 0, 'owner' => 0];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user