/**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }
예제 #3
0
 /**
  * (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;
 }
예제 #4
0
/**
 * 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;
}