コード例 #1
0
 /**
  * (non-PHPdoc)
  * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_remove($event, $data)
  */
 protected function _remove(Bengine_Game_Model_Event $event, array $data)
 {
     $result = Core::getQuery()->select("events", array("eventid", "planetid", "destination", "start"), "", Core::getDB()->quoteInto("parent_id = ?", $event->get("eventid")));
     foreach ($result->fetchAll() as $row) {
         Core::getQuery()->update("events", array("mode" => 20, "planetid" => $row["destination"], "destination" => $row["planetid"], "time" => TIME + (TIME - $row["start"])), "eventid = ?", array($row["eventid"]));
     }
     $this->sendBack($data);
     return $this;
 }
コード例 #2
0
ファイル: Build.php プロジェクト: enriquesomolinos/Bengine
 /**
  * (non-PHPdoc)
  * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_remove($event, $data)
  */
 protected function _remove(Bengine_Game_Model_Event $event, array $data)
 {
     $_event = Game::getModel("game/event")->load($event->getId());
     if (!$_event->getId()) {
         return false;
     }
     $this->addResourceToPlanet($data);
     return $this;
 }
コード例 #3
0
ファイル: Colonize.php プロジェクト: enriquesomolinos/Bengine
 /**
  * @param Bengine_Game_Model_Event $event
  * @param array $data
  * @return Bengine_Game_EventHandler_Handler_Fleet_Colonize
  */
 protected function _add(Bengine_Game_Model_Event $event, array $data)
 {
     if ($data["metal"] > 0 || $data["silicon"] > 0 || $data["hydrogen"] > 0) {
         Logger::addMessage("COLONIZE_RESOURCE_WARNING", "info");
     }
     $data["metal"] = 0;
     $data["silicon"] = 0;
     $data["hydrogen"] = 0;
     $event->setData($data);
     $this->prepareFleet($data);
     return $this;
 }
コード例 #4
0
ファイル: Attack.php プロジェクト: enriquesomolinos/Bengine
 /**
  * (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("EhAttack", array($event, &$data, $this));
     $statement = Core::getQuery()->select("assault", array("assaultid"), "", "planetid = ? AND running = 1", "", "", "", "", array($event->get("destination")));
     if ($statement->fetchRow()) {
         $event->set("prev_rc", null);
         $event->save();
         return $this;
     }
     $assault = new Bengine_Game_Assault($event["destination"], $event["destination_user_id"], $event);
     $assault->addParticipant(1, $event["userid"], $event["planetid"], $event["time"], $data)->startAssault($data["galaxy"], $data["system"], $data["position"])->finish();
     return $this;
 }
コード例 #5
0
 /**
  * (non-PHPdoc)
  * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_add($event, $data)
  */
 protected function _add(Bengine_Game_Model_Event $event, array $data)
 {
     $event->setParentId($data["alliance_attack"]["eventid"]);
     $this->prepareFleet($data);
     $time = $event->getTime();
     if ($time > $data["alliance_attack"]["time"]) {
         Core::getQuery()->update("events", array("time" => $time), "eventid = ? OR parent_id = ?", array($data["alliance_attack"]["eventid"], $data["alliance_attack"]["eventid"]));
         Core::getQuery()->update("attack_formation", array("time" => $time), "eventid = ?", array($data["alliance_attack"]["eventid"]));
     } else {
         $event->setTime($data["alliance_attack"]["time"]);
     }
     return $this;
 }
コード例 #6
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("EhEspionage", array($event, &$data, $this));
     $espReport = new Bengine_Game_Espionage_Report($event["destination"], $event["userid"], $event["destination_user_id"], $event["destination_username"], $data["ships"][38]["quantity"]);
     $data["destinationplanet"] = $espReport->getPlanetname();
     $data["suser"] = $event["username"];
     $data["planetname"] = $event["planetname"];
     $data["defending_chance"] = $espReport->getChance();
     $data["probes_lost"] = $espReport->getProbesLost();
     $data["event"] = $event;
     if ($event["destination_user_id"]) {
         new Bengine_Game_AutoMsg($event["mode"], $event["destination_user_id"], $event["time"], $data);
     }
     if ($espReport->getProbesLost()) {
         $points = 0;
         $fpoints = 0;
         $tfMetal = 0;
         $tfSilicon = 0;
         $intoTF = floatval(Core::getOptions()->get("FLEET_INTO_DEBRIS"));
         foreach ($data["ships"] as $key => $ship) {
             $_result = Core::getQuery()->select("construction", array("basic_metal", "basic_silicon", "basic_hydrogen"), "", Core::getDB()->quoteInto("buildingid = ?", $key));
             $shipData = $_result->fetchRow();
             $_result->closeCursor();
             $points += ($shipData["basic_metal"] + $shipData["basic_silicon"] + $shipData["basic_hydrogen"]) * $ship["quantity"] / 1000;
             $fpoints += $ship["quantity"];
             $tfMetal = $shipData["basic_metal"] * $ship["quantity"] * $intoTF;
             $tfSilicon = $shipData["basic_silicon"] * $ship["quantity"] * $intoTF;
         }
         $what = $event->get("destination_ismoon") ? "moonid" : "planetid";
         Core::getDB()->query("UPDATE " . PREFIX . "galaxy SET metal = metal + ?, silicon = silicon + ? WHERE " . $what . " = ?", array($tfMetal, $tfSilicon, $event["destination"]));
         Core::getDB()->query("UPDATE " . PREFIX . "user SET points = points - ?, fpoints = fpoints - ? WHERE userid = ?", array($points, $fpoints, $event["userid"]));
     } else {
         $data["nomessage"] = true;
         $this->sendBack($data, $data["time"] + $event["time"], $event["destination"], $event["planetid"]);
     }
     return $this;
 }
コード例 #7
0
ファイル: Assault.php プロジェクト: enriquesomolinos/Bengine
 /**
  * Creates a new Assault Object.
  *
  * @param integer $location    Assault location
  * @param integer $owner    Owner of the attacked planet
  * @param Bengine_Game_Model_Event $event
  *
  * @return Bengine_Game_Assault
  */
 public function __construct($location = null, $owner = null, Bengine_Game_Model_Event $event = null)
 {
     $this->attackers = new Map();
     $this->defenders = new Map();
     $this->location = $location;
     $this->owner = $owner;
     $time = TIME;
     $eventId = null;
     if (null !== $event) {
         $this->event = $event;
         $eventId = $event->get("eventid");
         $time = $event->get("time");
     }
     // Create a new assault in the database.
     Core::getQuery()->insert("assault", array("planetid" => $this->location, "event_id" => $eventId, "time" => $time, "real_time" => TIME));
     $this->assaultid = Core::getDB()->lastInsertId();
     // If the location is a planet, we have to update the ressource production.
     if ($this->location !== null) {
         $planet = new Bengine_Game_Planet($this->location, $this->owner, false);
         $planet->getProduction()->addProd();
         $this->loadDefenders();
     }
     return $this;
 }
コード例 #8
0
ファイル: Index.php プロジェクト: enriquesomolinos/Bengine
 /**
  * Parses an event.
  *
  * @param Bengine_Game_Model_Event $f
  *
  * @return array	Parsed event data
  */
 protected function parseEvent(Bengine_Game_Model_Event $f)
 {
     if ($f->getCode() == "game/alliedFleet" && $f->getUserid() != Core::getUser()->get("userid")) {
         return false;
         // Hide foreign formations
     }
     $event = array();
     $event["time_r"] = $f->getTimeLeft();
     $event["time"] = $f->getFormattedTimeLeft();
     $event["eventid"] = $f->getEventid();
     $event["time_finished"] = Date::timeToString(1, $f->getTime());
     $event["raw_coordinates"] = $f->getDestinationCoords(false);
     Core::getLanguage()->assign("rockets", $f->getData("rockets", 0));
     Core::getLanguage()->assign("planet", !$f->getData("oldmode") || $f->getData("oldmode") != 9 ? $f->getPlanetname() : Core::getLanguage()->getItem("DEBRIS"));
     // TODO: Old mode should be translated to code
     Core::getLanguage()->assign("coords", $f->getPlanetCoords());
     Core::getLanguage()->assign("target", $f->getCode() != "game/recycling" ? $f->getDestinationPlanetname() : Core::getLanguage()->getItem("DEBRIS"));
     Core::getLanguage()->assign("targetcoords", $f->getDestinationCoords());
     Core::getLanguage()->assign("metal", fNumber($f->getData("metal", 0)));
     Core::getLanguage()->assign("silicon", fNumber($f->getData("silicon", 0)));
     Core::getLanguage()->assign("hydrogen", fNumber($f->getData("hydrogen", 0)));
     Core::getLanguage()->assign("username", $f->getUsername());
     Core::getLanguage()->assign("message", Link::get("game/" . SID . "/MSG/Write/" . rawurlencode($f->getUsername()), Image::getImage("pm.gif", Core::getLanguage()->getItem("WRITE_MESSAGE"))));
     Core::getLanguage()->assign("mission", $f->getCode() == "game/return" ? $f->getOrgModeName() : $f->getModeName());
     Core::getLanguage()->assign("fleet", $f->getFleetString());
     $event["class"] = $f->getCssClass();
     if ($f->getCode() == "game/allianceAttack") {
         if ($f->getUserid() == Core::getUser()->get("userid")) {
             $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_OWN");
         } else {
             $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_OTHER");
         }
         $allyFleets = Game::getEH()->getFormationFleets($f->getEventid());
         foreach ($allyFleets as $af) {
             $coords = $af->getPlanetCoords();
             $msg = Core::getLanguage()->getItem("FLEET_MESSAGE_FORMATION");
             $msg = sprintf($msg, $af->getUsername(), $af->getPlanetname(), $coords, $af->getFleetString());
             $event["message"] .= $msg;
         }
     } else {
         if ($f->getCode() == "game/alliedFleet") {
             $mainFleet = Game::getModel("game/event")->load($f->getParentId());
             if ($mainFleet->getUsierid() == Core::getUser()->get("userid")) {
                 return false;
             }
             $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_OWN");
             $allyFleets = Game::getEH()->getFormationFleets($mainFleet->getEventid());
             $allyFleets->add($mainFleet);
             foreach ($allyFleets as $af) {
                 if ($af->getUserid() == Core::getUser()->get("userid")) {
                     continue;
                 }
                 $coords = $af->getPlanetCoords();
                 $msg = Core::getLanguage()->getItem("FLEET_MESSAGE_FORMATION");
                 $msg = sprintf($msg, $af->getUsername(), $af->getPlanetname(), $coords, $af->getFleetString());
                 $event["message"] .= $msg;
             }
         } else {
             if ($f->getCode() == "game/holding" && $f->getUserid() == Core::getUser()->get("userid")) {
                 $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_HOLDING_1");
             } else {
                 if ($f->getCode() == "game/holding") {
                     $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_HOLDING_2");
                 } else {
                     if ($f->getCode() == "game/return" && $f->getUserid() == Core::getUser()->get("userid")) {
                         $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_RETURN");
                     } else {
                         if ($f->getUserid() == Core::getUser()->get("userid") && $f->getCode() == "game/missileAttack") {
                             $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_ROCKET_ATTACK");
                         } else {
                             if ($f->getCode() == "game/missileAttack") {
                                 $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_ROCKET_ATTACK_FOREIGN");
                             } else {
                                 if ($f->getUserid() == Core::getUser()->get("userid")) {
                                     $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_OWN");
                                 } else {
                                     $event["message"] = Core::getLanguage()->getItem("FLEET_MESSAGE_OTHER");
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
     return $event;
 }
コード例 #9
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;
 }
コード例 #10
0
ファイル: Shipyard.php プロジェクト: enriquesomolinos/Bengine
 /**
  * (non-PHPdoc)
  * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_remove($event, $data)
  */
 protected function _remove(Bengine_Game_Model_Event $event, array $data)
 {
     $metal = $data["quantity"] * $data["metal"] / 100 * Core::getOptions()->get("SHIPYARD_ORDER_ABORT_PERCENT");
     $silicon = $data["quantity"] * $data["silicon"] / 100 * Core::getOptions()->get("SHIPYARD_ORDER_ABORT_PERCENT");
     $hydrogen = $data["quantity"] * $data["hydrogen"] / 100 * Core::getOptions()->get("SHIPYARD_ORDER_ABORT_PERCENT");
     Core::getDB()->query("UPDATE " . PREFIX . "planet SET metal = metal + ?, silicon = silicon + ?, hydrogen = hydrogen + ? WHERE planetid = ?", array($metal, $silicon, $hydrogen, $event->getPlanetid()));
     return $this;
 }
コード例 #11
0
ファイル: Abstract.php プロジェクト: enriquesomolinos/Bengine
 /**
  * Add production to destination planet.
  *
  * @param Bengine_Game_Model_Event $event
  * @return Bengine_Game_Planet
  */
 protected function _production(Bengine_Game_Model_Event $event)
 {
     $planet = new Bengine_Game_Planet($event->get("destination"), $event->get("destination_user_id"), false);
     $planet->getProduction()->addProd();
     return $planet;
 }
コード例 #12
0
 /**
  * (non-PHPdoc)
  * @see app/code/Bengine/EventHandler/Handler/Bengine_Game_EventHandler_Handler_Abstract#_add($event, $data)
  */
 protected function _add(Bengine_Game_Model_Event $event, array $data)
 {
     if (Game::attackingStoppageEnabled()) {
         throw new Recipe_Exception_Generic("Attacking stoppage enabled.");
     }
     Core::getDB()->query("UPDATE " . PREFIX . "unit2shipyard SET quantity = quantity - ? WHERE unitid = ? AND planetid = ?", array($data["rockets"], 52, $event->getPlanetid()));
     Core::getQuery()->delete("unit2shipyard", "quantity = '0'");
     return $this;
 }