/** * Removes inactive users. * * @return Bengine_Game_Cronjob_RemoveInactiveUser */ protected function removeInactiveUsers() { $deleteTime = TIME - Core::getConfig()->get("USER_DELETE_TIME") * 86400; $where = Core::getDB()->quoteInto("(u.last < ? OR (u.`delete` < '" . TIME . "' AND u.`delete` > '0')) AND ((u2g.usergroupid != '2' AND u2g.usergroupid != '4') OR u2g.usergroupid IS NULL)", $deleteTime); $result = Core::getQuery()->select("user u", "u.userid", "LEFT JOIN " . PREFIX . "user2group u2g ON (u2g.userid = u.userid)", $where); foreach ($result->fetchAll() as $row) { $userid = $row["userid"]; $_result = Core::getQuery()->select("planet", array("planetid", "ismoon"), "", Core::getDB()->quoteInto("userid = ?", $userid)); foreach ($_result->fetchAll() as $_row) { if (!$_row["ismoon"]) { deletePlanet($_row["planetid"], $userid, false); } } $_result->closeCursor(); $_result = Core::getQuery()->select("alliance", "aid", "", Core::getDB()->quoteInto("founder = ?", $userid)); if ($_row = $_result->fetchRow()) { deleteAlliance($_row["aid"]); } $_result->closeCursor(); Core::getQuery()->delete("user", "userid = ?", null, null, array($userid)); } $result->closeCursor(); return $this; }
/** * Shows form for planet options. * * @param string $planetname * @param boolean $abandon * @param string $password * * @return Bengine_Game_Controller_Index */ protected function changePlanetOptions($planetname, $abandon, $password) { $planetname = trim($planetname); Hook::event("SAVE_PLANET_OPTIONS", array(&$planetname, &$abandon)); if ($abandon == 1) { $ok = true; if (Game::getEH()->getPlanetFleetEvents()) { Logger::addMessage("CANNOT_DELETE_PLANET"); $ok = false; } if (Core::getUser()->get("hp") == Core::getUser()->get("curplanet")) { Logger::addMessage("CANNOT_DELETE_HOMEPLANET"); $ok = false; } $result = Core::getQuery()->select("password", "password", "", Core::getDB()->quoteInto("userid = ?", Core::getUser()->get("userid"))); $row = $result->fetchRow(); $result->closeCursor(); $encryption = Core::getOptions("USE_PASSWORD_SALT") ? "md5_salt" : "md5"; $password = Str::encode($password, $encryption); if (!Str::compare($row["password"], $password)) { Logger::addMessage("WRONG_PASSWORD"); $ok = false; } if ($ok) { deletePlanet(Game::getPlanet()->getPlanetId(), Core::getUser()->get("userid"), Game::getPlanet()->getData("ismoon")); Core::getQuery()->update("user", array("curplanet" => Core::getUser()->get("hp")), "userid = ?", array(Core::getUser()->get("userid"))); Core::getUser()->rebuild(); $this->redirect("game/" . SID . "/Index"); } } else { if (checkCharacters($planetname)) { Core::getQuery()->update("planet", array("planetname" => $planetname), "planetid = ?", array(Core::getUser()->get("curplanet"))); $this->redirect("game/" . SID . "/Index"); } else { Logger::addMessage("INVALID_PLANET_NAME"); } } return $this; }
/** * (non-PHPdoc) * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_execute($event, $data) */ protected function _execute(Bengine_Game_Model_Event $event, array $data) { Hook::event("EhMoonDestruction", array($event, &$data, $this)); // Start normal combat $assault = new Bengine_Game_Assault($event->getDestination(), $event->getDestinationUserId(), $event); $assault->addParticipant(1, $event->getUserid(), $event->getPlanetid(), $event->getTime(), $data); $assault->startAssault($data["galaxy"], $data["system"], $data["position"]); if ($assault->getData("result") == 1 || $assault->getData("result") == 0) { Core::getLanguage()->load("AutoMessages"); $defenders = $assault->getDefenders(); while ($defenders->next()) { $participant = $this->defenders->current(); if ($participant instanceof Bengine_Game_Assault_Participant) { $participant->finish($assault->getData("result")); } } $assault->updateMainDefender($assault->getData("lostunits_defender")); $attacker = $assault->getAttackers()->getFirst(); $select = new Recipe_Database_Select(); $select->from(array("f2a" => "fleet2assault"))->join(array("c" => "construction"), array("c" => "buildingid", "f2a" => "unitid"))->attributes(array("f2a" => array("unitid", "quantity"), "c" => array("basic_metal", "basic_silicon", "basic_hydrogen")))->where("f2a.participantid = ?", $attacker->getParticipantId()); $result = $select->getStatement(); $fleet = array(); foreach ($result->fetchAll() as $row) { $fleet[$row["unitid"]] = $row; } $rips = isset($fleet[self::DEATH_STAR_CONSTRUCTION_ID]["quantity"]) ? $fleet[self::DEATH_STAR_CONSTRUCTION_ID]["quantity"] : 0; $result->closeCursor(); $moon = $event->getDestinationPlanet(); $message = ""; // Chance to destroy the moon $diameter = min($moon->getDiameter(), 9999); $md = max(floor((100 - sqrt($diameter)) * sqrt($rips)), 1); $rand = mt_rand(0, 100); Core::getLang()->assign("moonName", $moon->getPlanetname()); Core::getLang()->assign("moonCoords", $moon->getCoords(true, true)); if ($rand <= $md) { $message = Core::getLang()->get("MD_MOON_DESTROYED"); Core::getQuery()->update("events", array("planetid" => null), "planetid = ?", array($moon->getId())); $sql = "UPDATE `" . PREFIX . "events` e, `" . PREFIX . "galaxy` g SET e.`destination` = g.`planetid` WHERE g.`moonid` = ? AND e.`destination` = ?"; Core::getDB()->query($sql, array($moon->getId(), $moon->getId())); deletePlanet($moon->getId(), $moon->getUserid(), 1); } else { $message = Core::getLang()->get("MD_MOON_SURVIVE"); } // Chance of fleet destruction $fd = floor(sqrt($diameter) / 2); $rand = mt_rand(0, 100); if ($rand <= $fd) { $points = 0; foreach ($fleet as $ship) { $points += $ship["quantity"] * ($ship["basic_metal"] + $ship["basic_silicon"] + $ship["basic_hydrogen"]); } Core::getDB()->query("UPDATE " . PREFIX . "user SET points = points - ? WHERE userid = ?", array($points / 1000, $event->getUserid())); $message .= "<br/><br/>" . Core::getLang()->get("MD_FLEET_DESTROYED"); } else { $attacker->finish($assault->getData("result")); } $msgAttacker = Application::getModel("game/message"); $msgAttacker->setReceiver($event->getDestinationUserId())->setMode(Bengine_Game_Model_Message::FLEET_REPORTS_FOLDER_ID)->setSubject(Core::getLang()->get("MD_SUBJECT"))->setMessage($message)->setSendToOutbox(false); $msgDefender = clone $msgAttacker; $msgDefender->setReceiver($event->getUserid()); $msgAttacker->send(); $msgDefender->send(); } else { $assault->finish(); } return $this; }
/** * Deletes all planet data. * * @param integer $id Planet id * @param integer $userid User id * @param boolean $ismoon Planet is moon * * @return void */ function deletePlanet($id, $userid, $ismoon) { $points = Bengine_Game_PointRenewer::getBuildingPoints($id); $points += Bengine_Game_PointRenewer::getFleetPoints($id); $fpoints = Bengine_Game_PointRenewer::getFleetPoints_Fleet($id); $dpoints = Bengine_Game_PointRenewer::getDefensePoints($id); if (!$ismoon) { $result = Core::getQuery()->select("galaxy", "moonid", "", Core::getDB()->quoteInto("planetid = ?", $id)); $row = $result->fetchRow(); if ($row["moonid"]) { deletePlanet($row["moonid"], $userid, 1); } } Core::getDB()->query("UPDATE " . PREFIX . "user SET points = points - ?, fpoints = fpoints - ?, dpoints = dpoints - ? WHERE userid = ?", array($points, $fpoints, $dpoints, $userid)); Core::getQuery()->update("planet", array("userid" => null), "planetid = ?", array($id)); if ($ismoon) { Core::getQuery()->update("galaxy", array("moonid" => null), "moonid = ?", array($id)); } else { Core::getQuery()->update("galaxy", array("destroyed" => 1), "planetid = ?", array($id)); } Hook::event("DeletePlanet", array($id, $userid, $ismoon)); return; }