예제 #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
 /**
  * (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;
 }
예제 #3
0
 /**
  * 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;
 }
예제 #4
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;
 }
예제 #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)
 {
     $planet = Game::getPlanet();
     $planet->setData("metal", $planet->getData("metal") - $data["metal"] * $data["quantity"]);
     $planet->setData("silicon", $planet->getData("silicon") - $data["silicon"] * $data["quantity"]);
     $planet->setData("hydrogen", $planet->getData("hydrogen") - $data["hydrogen"] * $data["quantity"]);
     $spec = array("metal" => new Recipe_Database_Expr("metal - ?"), "silicon" => new Recipe_Database_Expr("silicon - ?"), "hydrogen" => new Recipe_Database_Expr("hydrogen - ?"));
     $bind = array($data["metal"] * $data["quantity"], $data["silicon"] * $data["quantity"], $data["hydrogen"] * $data["quantity"], $event->get("planetid"));
     $bind = array_map("intval", $bind);
     Core::getQuery()->update("planet", $spec, "planetid = ?", $bind);
     return $this;
 }
예제 #6
0
 /**
  * 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;
 }