/** * (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; }
/** * (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; }
/** * @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; }
/** * (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; }
/** * (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; }
/** * (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; }
/** * 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; }
/** * 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; }
/** * (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; }
/** * (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; }
/** * 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; }
/** * (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; }