Esempio n. 1
0
 /**
  * Behandle auksjonen når den er ferdig
  */
 protected function handle_complete()
 {
     // forsøk å sett som behandlet
     $this->data['a_completed'] = 1;
     $affected = \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_completed = 1 WHERE a_id = {$this->id} AND a_completed = 0");
     // allerede behandlet?
     if ($affected == 0) {
         return;
     }
     // hent vinnerbudet
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC LIMIT 1");
     $bud = $result->fetch();
     unset($result);
     // har ikke noe bud?
     if (!$bud) {
         // behandle hver type auksjon forskjellig
         switch ($this->data['a_type']) {
             // firma
             case self::TYPE_FIRMA:
                 // forleng auksjonen med 3 timer fra nå
                 $this->data['a_end'] = time() + 10800;
                 $this->data['a_completed'] = 0;
                 $this->status = self::STATUS_ACTIVE;
                 \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_end = {$this->data['a_end']}, a_completed = 0 WHERE a_id = {$this->id}");
                 break;
                 // kuler
             // kuler
             case self::TYPE_KULER:
                 // gi kulene tilbake til personen som startet auksjonen
                 $kuler = (int) $this->params->get("bullets");
                 if ($kuler && $this->data['a_up_id']) {
                     player::add_log_static("auksjon_kuler_no_bid", $this->id, $kuler, $this->data['a_up_id']);
                     \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}");
                 }
                 break;
         }
     } else {
         $up = player::get($bud['ab_up_id']);
         // behandle hver type auksjon forskjellig
         switch ($this->data['a_type']) {
             // firma
             case self::TYPE_FIRMA:
                 // inviter spilleren til firmaet
                 $ff_id = $this->params->get("ff_id");
                 if ($ff_id) {
                     $ff = ff::get_ff($ff_id, ff::LOAD_SCRIPT);
                     $ff->player_set_priority($bud['ab_up_id'], 1);
                     $ff->reset_date_reg(true);
                     // første firma av denne typen i spillet?
                     hall_of_fame::trigger("ff_owner", $ff);
                 }
                 break;
                 // kuler
             // kuler
             case self::TYPE_KULER:
                 // gi kulene til vinneren av auksjonen
                 $kuler = (int) $this->params->get("bullets");
                 if ($kuler) {
                     // oppdater antall auksjonskuler for spilleren som holdt auksjonen
                     if ($this->data['a_up_id']) {
                         \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}");
                     }
                     // gi kulene til vinneren
                     $up->add_log("auksjon_kuler_won", $this->id . ":" . $bud['ab_bid'], $kuler);
                     $up->data['up_weapon_bullets'] += $kuler;
                     $up->data['up_weapon_bullets'] = max(0, $up->data['up_weapon_bullets'] - $kuler);
                     \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$bud['ab_up_id']}");
                 }
                 break;
         }
         // live-feed
         livefeed::add_row('<user id="' . $bud['ab_up_id'] . '" /> vant auksjonen <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $this->id . '">' . htmlspecialchars($this->data['a_title']) . '</a>.');
         // gi penger til den som la ut auksjonen
         if ($this->data['a_up_id']) {
             \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_cash = up_cash + {$bud['ab_bid']}, up_auksjoner_total_in = up_auksjoner_total_in = {$bud['ab_bid']}\n\t\t\t\t\tWHERE up_id = {$this->data['a_up_id']}");
         }
         // oppdater statistikk til spilleren som vant budet
         \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET up_auksjoner_total_out = up_auksjoner_total_out = {$bud['ab_bid']}\n\t\t\t\tWHERE up_id = {$bud['ab_up_id']}");
         // hent alle budene som skal settes inaktive
         $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\t\tFROM auksjoner_bud\n\t\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0 AND ab_id != {$bud['ab_id']}");
         while ($row = $result->fetch()) {
             self::set_bud_inactive($row, $this);
         }
         // behandle trigger
         $up->trigger("auksjon_won", array("auksjon" => $this, "bud" => $bud));
     }
     // behandle trigger
     if ($this->data['a_up_id']) {
         $up = player::get($this->data['a_up_id']);
         if ($up) {
             $up->trigger("auksjon_complete", array("auksjon" => $this, "winner_bud" => $bud));
         }
     }
     // oppdater cache
     self::update_cache();
 }
Esempio n. 2
0
 /**
  * Hent broderskapet med flest rangeringspoeng
  */
 public static function get_fam_points_rank()
 {
     // hent alle broderskapene
     $ff_list = self::get_ff_group("ff_type = " . self::TYPE_FAMILIE . " AND ff_inactive = 0 AND ff_is_crew = 0");
     // hent alle eiere og medeiere
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ffm_up_id, ffm_ff_id, ffm_priority\n\t\t\tFROM ff_members JOIN ff ON ffm_ff_id = ff_id AND ff_type != " . self::TYPE_FAMILIE . " AND ff_is_crew = 0 AND ff_inactive = 0\n\t\t\tWHERE ffm_priority <= 2 AND ffm_status = " . ff_member::STATUS_MEMBER);
     $list = array();
     while ($row = $result->fetch()) {
         $list[$row['ffm_up_id']][] = $row['ffm_priority'];
     }
     // tell opp poeng i alle FF
     $ff_points_most_count = 0;
     $ff_points_most = null;
     $ff_points = array();
     foreach ($ff_list as $ff) {
         $points_ff = 0;
         // disse 3 er bare for å bryte ned statistikken
         $points_up = 0;
         $points_kill = 0;
         foreach ($ff->members['members'] as $ffm) {
             // firmaer
             if (isset($list[$ffm->id])) {
                 foreach ($list[$ffm->id] as $pri) {
                     // eier = 3 poeng, medeier = 2 poeng
                     $p = $pri == 1 ? 3 : 2;
                     $points_ff += $p;
                 }
             }
             // hent rank
             $rank = game::rank_info($ffm->data['up_points'], $ffm->data['upr_rank_pos'], $ffm->data['up_access_level']);
             $points_up += $rank['number'];
             // ett poeng per rank for medlemmene
             // sjekk rank posisjon
             if ($rank['pos'] == 1) {
                 $points_up += 3;
             } elseif ($rank['pos'] <= 5) {
                 $points_up += 2;
             } elseif ($rank['pos'] <= 15) {
                 $points_up += 1;
             }
             // 1 poeng for Lucky Luciano
         }
         // 1 poeng per 5. drap
         $points_kill += floor(($ff->data['ff_attack_killed_num'] + $ff->data['ff_attack_bleed_num']) / 5);
         // minus 1 poeng per 2. spiller i broderskapet som er drept
         $points_kill -= floor(($ff->data['ff_attacked_killed_num'] + $ff->data['ff_attacked_bleed_num']) / 2);
         $points = $ff->data['ff_points'];
         $points += $points_ff + $points_up + $points_kill;
         $ff_points[] = $points;
         $ff->data['ff_points_sum'] = $points;
         $ff->data['ff_points_ff'] = $points_ff;
         $ff->data['ff_points_up'] = $points_up;
         $ff->data['ff_points_kill'] = $points_kill + $ff->data['ff_points'];
         // flest poeng?
         if ($points > $ff_points_most_count) {
             $ff_points_most_count = $points;
             $ff_points_most = $ff;
         }
     }
     // sorter FF etter poeng
     array_multisort($ff_points, SORT_DESC, SORT_NUMERIC, $ff_list);
     // sett opp med ID-er
     $ff_list_indexed = array();
     foreach ($ff_list as $ff) {
         $ff_list_indexed[$ff->id] = $ff;
     }
     // sjekk for all-time-high
     if ($ff_points_most) {
         hall_of_fame::trigger("familie_rank", $ff_points_most);
     }
     return $ff_list_indexed;
 }
Esempio n. 3
0
 /**
  * Behandle trigger
  * @string $name
  * @array $data
  */
 public function trigger($name, array $data)
 {
     // behandle oppdrag
     switch ($name) {
         case "kriminalitet":
             $this->oppdrag->handle_trigger("kriminalitet_different", $data);
             $this->achievements->handle("kriminalitet", $data);
             break;
         case "poker_result":
             $this->oppdrag->handle_trigger("poker_unique_people", $data);
             $this->achievements->handle("poker", $data);
             break;
         case "rank_points":
             $this->oppdrag->handle_trigger($name, $data);
             $this->achievements->handle($name, $data);
             hall_of_fame::trigger("rank", $data, $this);
             break;
         case "fengsel_rank":
             // kom i fengsel?
             if ($data['fengsel']) {
                 $this->oppdrag->fengsel();
             }
             $this->oppdrag->handle_trigger("wanted_level", $data);
             break;
         case "fengsel":
             $this->achievements->handle($name, $data);
             $this->oppdrag->handle_trigger("fengsel_breakout", $data);
             break;
         case "biltyveri":
         case "utpressing":
         case "ff_won_member":
         case "ff_priority_change":
         case "ff_join":
         case "oppdrag":
         case "lotto":
             $this->achievements->handle($name, $data);
             break;
         case "money_change":
             $this->achievements->handle($name, $data);
             hall_of_fame::trigger("cash_num", $data, $this);
             break;
         case "attack_bleed":
         case "attack":
             $this->achievements->handle($name, $data);
             hall_of_fame::trigger("rank_kill", $data, $this);
             ff::handle_up_kill($this, $data);
             break;
     }
 }
Esempio n. 4
0
    /**
     * Behandle valg av bygning
     */
    protected function page_br_handle()
    {
        // allerede valgt bygning?
        if ($this->ff->data['br_id'] && !$this->ff->mod) {
            ess::$b->page->add_message(ucfirst($this->ff->type['refobj']) . " er allerede tilknyttet en bygning.");
            redirect::handle();
        }
        ess::$b->page->add_title("Velg bygning");
        $bydel = login::$user->player->bydel;
        // hent ledige bygninger i denne bydelen
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT br_id, br_pos_x, br_pos_y\n\t\t\tFROM bydeler_resources\n\t\t\t\tLEFT JOIN (SELECT DISTINCT ff_br_id FROM ff WHERE ff_inactive = 0 AND ff_br_id IS NOT NULL) ref ON ff_br_id = br_id\n\t\t\tWHERE br_b_id = {$bydel['id']} AND br_type = 1 AND ff_br_id IS NULL");
        $resources_free = array();
        while ($row = $result->fetch()) {
            $resources_free[$row['br_id']] = $row;
        }
        // velge bygning?
        if (isset($_POST['br'])) {
            $br_id = (int) $_POST['br'];
            // ikke gyldig bygning?
            if (!isset($resources_free[$br_id])) {
                ess::$b->page->add_message("Fant ikke valgt bygning.");
            } else {
                // oppdater FF
                \Kofradia\DB::get()->exec("UPDATE ff SET ff_br_id = {$br_id} WHERE ff_id = {$this->ff->id}");
                global $__server;
                putlog("INFO", ucfirst($this->ff->type['refobj']) . " %u{$this->ff->data['ff_name']}%u har nå valgt" . ($this->ff->data['br_id'] ? ' ny' : '') . " bygning på {$bydel['name']}. {$__server['path']}/ff/?ff_id={$this->ff->id}");
                putlog("CREWCHAN", ucfirst($this->ff->type['refobj']) . " %u{$this->ff->data['ff_name']}%u har nå valgt" . ($this->ff->data['br_id'] ? ' ny' : '') . " bygning på {$bydel['name']}. {$__server['path']}/ff/?ff_id={$this->ff->id}");
                // live-feed
                livefeed::add_row(ucfirst($this->ff->refstring) . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a> har valgt bygning på ' . htmlspecialchars($bydel['name']) . '.');
                // første familien i spillet?
                if ($this->ff->type['type'] == "familie") {
                    hall_of_fame::trigger("familie", $this->ff);
                    hall_of_fame::trigger("ff_owner", $this->ff);
                }
                ess::$b->page->add_message("Du har valgt bygning for {$this->ff->type['refobj']} på {$bydel['name']}.");
                redirect::handle("?ff_id={$this->ff->id}");
            }
        }
        // hent FF-ene i denne bydelen
        $result = \Kofradia\DB::get()->query("SELECT ff_id, ff_name, br_pos_x, br_pos_y FROM ff JOIN bydeler_resources ON ff_br_id = br_id WHERE br_b_id = {$bydel['id']} AND ff_inactive = 0");
        $resources = array();
        while ($row = $result->fetch()) {
            $resources[$row['ff_id']] = $row;
        }
        ess::$b->page->add_css('
#default_main { overflow: visible }
.bydel_parent { position: relative }
.bydel_resource { position: absolute }
.bydel_resource img { cursor: pointer; z-index: 100 }
.bydel_resource div {
	position: absolute;
	left: 28px;
	top: 2px;
	font-size: 11px;
	background-color: #0B0B0B;
	color: #AAA;
	padding: 2px;
	z-index: 1000;
	white-space: nowrap;
}
');
        ess::$b->page->add_js_file("../js/bydeler.js");
        ess::$b->page->add_js_domready('
	var bydel_resources = new Hash(' . js_encode($resources) . ');
	var bydel_resources_free = new Hash(' . js_encode($resources_free) . ');
	var bydel_x = ' . $bydel['b_coords_x'] . ';
	var bydel_y = ' . $bydel['b_coords_y'] . ';
	
	var kart = $("bydelskart");
	kart.getParent().setStyle("position", "relative");
	var pos = kart.getPosition(kart.getParent());
	var bydel_container = new Element("div", {"styles": {"position": "absolute", "left": 4, "top": 0}}).inject(kart, "before");
	
	bydel_resources.each(function(value)
	{
		new BydelResourceFF(value, bydel_container, bydel_x, bydel_y);
	});
	
	var select_br = function()
	{
		if (confirm("Er du sikker på at du vil velge denne bygningen for ' . $this->ff->type['refobj'] . '? Dette kan ikke endres senere."))
		{
			$("br_id").set("value", this.options.data["br_id"]).form.submit();
		}
	};
	
	bydel_resources_free.each(function(value)
	{
		new BydelResourceSelect(value, bydel_container, bydel_x, bydel_y, select_br);
	});');
        echo '
<div class="bg1_c" style="width: ' . ($bydel['b_size_x'] + 30) . 'px; margin: 40px auto">
	<h1 class="bg1">Du er på ' . $bydel['name'] . '<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="./?ff_id=' . $this->ff->id . '">&laquo; Tilbake</a></p>
	<div class="bg1" style="overflow: visible; padding-top: 1px; margin-top: -1px">
		<form action="" method="post">
			<input type="hidden" name="br" id="br_id" />
			<boxes />' . (count($resources_free) == 0 ? '
			<p>Det er ingen ledige plasser i denne bydelen.</p>' : '
			<p>Det er ' . count($resources_free) . ' ' . fword("ledig plass", "ledige plasser", count($resources_free)) . ' i denne bydelen.</p>') . '
			<p class="c bydel_parent"><img src="' . IMGS_HTTP . '/bydeler/bydel_' . $bydel['id'] . '.png" id="bydelskart" alt="Bydelskart for ' . htmlspecialchars($bydel['name']) . '" /></p>
		</form>
	</div>
</div>';
        $this->ff->load_page();
    }