示例#1
0
 /**
  * Sørg for korrekt svekkelse av beskyttelse og evt. utbytting
  * @return boolean false hvis selve beskyttelsen ble byttet, evt.
  * @return float verdien beskyttelsen sank
  */
 public function weakened($skadeprosent)
 {
     // har ingen beskyttelse?
     if (!$this->data) {
         return 0;
     }
     $r = rand(-200, 200) / 1000;
     $v = $this->up->data['up_protection_state'] * (1 - ($skadeprosent + $skadeprosent * $r) / 2);
     $v = round($v, 5);
     // under 20 %?
     if ($v < 0.2) {
         // har vi noe beskyttelse å bytte til?
         if ($this->id > 1) {
             // bytt beskyttelse
             \Kofradia\DB::get()->exec("UPDATE users_players SET up_protection_id = " . --$this->id . ", up_protection_state = 0.75 WHERE up_id = {$this->up->id}");
             $this->up->data['up_protection_state'] = 0.75;
             unset($this->data);
             $this->data =& self::$protections[$this->id];
             $this->state = 0.75;
             // gi hendelse
             $this->up->add_log("beskyttelse_lost", urlencode(self::$protections[$this->id + 1]['name']) . ":" . urlencode($this->data['name']) . ":" . $this->state, 0);
             return false;
         }
     }
     // endring i beskyttelse
     $endring = $this->up->data['up_protection_state'] - $v;
     // sett ny beskyttelsesvedi
     $this->up->data['up_protection_state'] = $v;
     $this->state = $v;
     \Kofradia\DB::get()->exec("UPDATE users_players SET up_protection_state = {$v} WHERE up_id = {$this->up->id}");
     return $endring;
 }
示例#2
0
 /**
  * Behandle trigger
  *
  * @param trigger name string $name
  * @param array $data containing neccessary information about the trigger
  */
 public function handle_trigger($name, $data)
 {
     // er denne triggeren satt?
     if ($this->is_trigger($name)) {
         foreach ($this->triggers[$name] as $trigger) {
             /*
              * $trigger:
              * 	o_id => int oppdrag id
              * 	trigger => params trigger info
              * 	type => string type (unlock || active)
              * 	status => params status info
              */
             // sjekk for tidsgrense
             if ($trigger['type'] == "active") {
                 $time_limit = $trigger['trigger']->get("time_limit", oppdrag::DEFAULT_TIME_LIMIT_ACTIVE);
                 $time_expire = 0;
             } else {
                 $time_limit = $trigger['trigger']->get("time_limit", false);
                 $time_expire = time() - $time_limit;
             }
             switch ($name) {
                 case "rank_points":
                     /* $data: array(
                      *   source => string,
                      *   points => int,
                      *   points_rel => int,
                      *   points_after => int,
                      *   points_after_rel => int,
                      *   rank => int,
                      *   pos => int
                      * )
                      * player objektet vil være oppdatert på forhånd
                      */
                     // aktiv? (oppnå poeng på gitt tid)
                     if ($trigger['type'] == "active") {
                         // hvor mye skal vi oppnå?
                         $target = $trigger['status']->get("target_points", 0);
                         // fikk vi rank fra lotto? (lotto teller ikke)
                         if ($data['source'] == "lotto") {
                             // legg til melding i hendelser
                             $this->up->add_log("oppdrag", "Du vant i lotto og din rank har nå økt. Derfor har også målet i ditt nåværende oppdrag blitt høyere fordi lotto ikke er en del av oppdraget.");
                             // legg til ranken man fikk til målet
                             $target = $target + $data['points'];
                             $trigger['status']->update("target_points", $target);
                             // lagre status
                             $this->update_status($trigger['o_id'], $trigger['status']);
                         } elseif ($data['source'] == "attack") {
                             // legg til melding i hendelser
                             if ($data['points_rel'] > 0) {
                                 $this->up->add_log("oppdrag", "Du angrep en spiller og din rank har nå økt. Derfor har også målet i ditt nåværende oppdrag blitt høyere fordi angrep ikke er en del av oppdraget.");
                             }
                             // legg til ranken man fikk til målet
                             $target = $target + $data['points'];
                             $trigger['status']->update("target_points", $target);
                             // lagre status
                             $this->update_status($trigger['o_id'], $trigger['status']);
                         } elseif ($data['points'] != $data['points_rel']) {
                             // beregn ny poenggrense
                             $target = $target + $data['points'] - $data['points_rel'];
                             $trigger['status']->update("target_points", $target);
                             // lagre status
                             $this->update_status($trigger['o_id'], $trigger['status']);
                         }
                         // har vi nådd målet?
                         if ($data['points_after'] >= $target) {
                             $this->success($trigger['o_id']);
                         }
                     } else {
                         // lotto og angrep teller ikke med
                         if ($data['source'] == "lotto" || $data['source'] == "attack") {
                             continue;
                         }
                         // hvor mange poeng må vi oppnå?
                         $target = $trigger['status']->get("points");
                         // [] => array(time, points)
                         $previous = new container($trigger['status']->get("previous"));
                         // legg til denne
                         $previous->items[] = array(time(), $data['points_rel']);
                         // finn ut hvor mange poeng vi har fått i løpet av tidsgrensen
                         $points_last = 0;
                         foreach ($previous as $key => $value) {
                             // for lang tid siden?
                             if ($value[0] < $time_expire) {
                                 unset($previous->items[$key]);
                                 continue;
                             }
                             $points_last += $value[1];
                         }
                         // har vi nådd målet?
                         if ($points_last >= $target) {
                             $this->unlock($trigger['o_id']);
                         } else {
                             // lagre status
                             $trigger['status']->update("previous", $previous->build());
                             $this->update_status($trigger['o_id'], $trigger['status']);
                         }
                     }
                     break;
                 case "kriminalitet_different":
                     // $data: array(option => data, success => boolean)
                     // sett opp forrige forsøk
                     $previous = new container($trigger['status']->get("previous"));
                     /*
                      * 0 = time, 1 = krim id
                      */
                     $k_id = $data['option']['id'];
                     // klarte ikke denne?
                     if (!$data['success']) {
                         $previous->items = array();
                     } else {
                         // finnes denne fra før?
                         foreach ($previous->items as $key => $value) {
                             if ($value[1] == $k_id) {
                                 unset($previous->items[$key]);
                                 break;
                             }
                         }
                         // legg til denne
                         $previous->items[] = array(time(), $k_id);
                         // hvor mange forskjellige må vi oppnå?
                         $different = $trigger['trigger']->get("count", 5);
                         // har vi mange nok?
                         if (count($previous->items) >= $different) {
                             if ($trigger['type'] == "unlock") {
                                 $this->unlock($trigger['o_id']);
                             } else {
                                 $this->success($trigger['o_id']);
                             }
                             continue;
                         }
                     }
                     $trigger['status']->update("previous", $previous->build());
                     $trigger['status']->update("previous_s", $data['success'] ? 1 : 0);
                     $this->update_status($trigger['o_id'], $trigger['status']);
                     break;
                 case "poker_unique_people":
                     // uavgjort?
                     if ($data['won'] == 0) {
                         continue;
                     }
                     // sett opp tidligere utfordringer
                     $previous = new container($trigger['status']->get("previous"));
                     /*
                      * 0 = time, 1 = won, 2 = cash, 3 = prize, 4 = opponent
                      */
                     // legg til denne enheten
                     $previous->items[] = array(time(), $data['won'] == 1 ? 1 : 0, $data['cash'], $data['prize'], $data['opponent']->id);
                     // sjekk hvor mange vi har vunnet på rad
                     $won = array();
                     $new = array();
                     foreach ($previous->items as $key => $value) {
                         // gått ut på tid?
                         if ($value[0] < $time_expire) {
                             continue;
                         }
                         $new[] = $value;
                         // vunnet
                         if ($value[1] == 1) {
                             $won[$value[4]] = true;
                         } else {
                             // allerede vunnet?
                             if (isset($won[$value[4]])) {
                                 // har ikke noe å si
                                 continue;
                             }
                             // må vinne 5 nye
                             // alle andre oppføringene før og inkludert denne kan fjernes
                             $new = array();
                             $won = array();
                         }
                     }
                     $previous->items = $new;
                     // vant vi mot nok antall motstandere
                     if (count($won) >= $trigger['trigger']->get("user_count", 10)) {
                         // ferdig utført
                         if ($trigger['type'] == "unlock") {
                             $this->unlock($trigger['o_id']);
                         } else {
                             $this->complete($trigger['o_id']);
                         }
                     } else {
                         $trigger['status']->update("previous", $previous->build());
                         $trigger['status']->update("previous_s", $data['won'] == 1 ? 1 : 0);
                         $this->update_status($trigger['o_id'], $trigger['status']);
                     }
                     break;
                 case "wanted_level":
                     $this->handle_trigger_wanted_level($name, $data, $trigger, $time_limit, $time_expire);
                     break;
                 case "fengsel_breakout":
                     $this->handle_trigger_fengsel_breakout($name, $data, $trigger, $time_limit, $time_expire);
                     break;
             }
         }
     }
 }
示例#3
0
文件: banken.php 项目: Kuzat/kofradia
    /**
     * Overføre penger
     */
    protected function overfor()
    {
        $mottaker = postval("mottaker");
        $amount = game::intval(postval("amount"));
        // kontroller at vi har nok penger
        $result = \Kofradia\DB::get()->query("SELECT {$amount} <= up_bank FROM users_players WHERE up_id = " . $this->up->id);
        $amount_ok = $result->fetchColumn(0) == 1;
        // sjekk beløpet
        if ($amount <= 0) {
            ess::$b->page->add_message("Ugyldig beløp.", "error");
            return;
        }
        if ($amount < 50) {
            ess::$b->page->add_message("Du må sende minimum 50 kr.", "error");
            return;
        }
        if (!$amount_ok) {
            ess::$b->page->add_message("Du har ikke så mye penger i banken.", "error");
            return;
        }
        // har vi ikke tilgang (NoStatUser)
        if (access::is_nostat() && !access::has("admin")) {
            ess::$b->page->add_message("Du er NoStatUser og kan ikke sende penger!", "error");
            return;
        }
        // sjekk session
        if (postval("sid") != login::$info['ses_id']) {
            ess::$b->page->add_message("Startet du ikke overføringen selv? :o", "error");
            return;
        }
        // sjekk mottaker
        $result = \Kofradia\DB::get()->query("SELECT up_id, up_u_id, up_name, up_access_level, up_bank_ff_id FROM users_players WHERE up_name = " . \Kofradia\DB::quote($mottaker) . " ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1");
        $player = $result->fetch();
        // ingen gyldig mottaker?
        if (!$player) {
            ess::$b->page->add_message("Fant ikke mottakeren.", "error");
            return;
        }
        // seg selv?
        if ($player['up_id'] == $this->up->id) {
            ess::$b->page->add_message("Du kan ikke sende til deg selv.", "error");
            return;
        }
        // død mottaker?
        if ($player['up_access_level'] == 0) {
            ess::$b->page->add_message('<user id="' . $player['up_id'] . '" /> er død. Hvem skal motta pengene?!');
            return;
        }
        $result = \Kofradia\DB::get()->query("SELECT uc_info FROM users_contacts WHERE uc_u_id = {$player['up_u_id']} AND uc_contact_up_id = " . $this->up->id . " AND uc_type = 2");
        $blokkert = $result->rowCount() > 0;
        $blokkert_info = $blokkert ? $result->fetchColumn(0) : false;
        // sjekk bankkontoen til mottaker
        $bank = page_banken_bank::get($player['up_bank_ff_id']);
        // ingen bankkonto?
        if (!$bank) {
            ess::$b->page->add_message("Mottakeren har ingen bankkonto du kan sende til.", "error");
            return;
        }
        // blokkert?
        if ($blokkert && !access::has("crewet")) {
            // blokkert
            $reason = game::bb_to_html($blokkert_info);
            $reason = empty($reason) ? '' : ' Begrunnelse: ' . $reason;
            ess::$b->page->add_message("Denne spilleren har blokkert deg, og du kan derfor ikke sende personen penger.{$reason}", "error");
            return;
        }
        $note = mb_substr(postval("note"), 0, 100);
        // hoppe over overføringstapet?
        $skip_bog = false;
        if (isset($_POST['skip_bog']) && access::is_nostat()) {
            $skip_bog = true;
            $this->bank->overforingstap = 0;
            $bank->overforingstap = 0;
        }
        // regn ut hvor mye penger som skal bli til overs etc
        $result = \Kofradia\DB::get()->query("SELECT ROUND({$amount} * {$this->bank->overforingstap}), ROUND({$amount} * {$bank->overforingstap}), ROUND({$amount} * {$this->bank->overforingstap}) + ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap}) - ROUND({$amount} * {$bank->overforingstap}), {$amount} - ROUND({$amount} * {$this->bank->overforingstap})");
        $info = $result->fetch(\PDO::FETCH_NUM);
        // 0 -> tap sender
        // 1 -> tap mottaker
        // 2 -> tap totalt
        // 3 -> til overs (det som mottakeren får)
        // 4 -> mellombeløp (utgangsbeløpet - tap sender)
        // kontrollere at overføringen ikke blir utført flere ganger
        $form = \Kofradia\Form::getByDomain("banken_" . $player['up_id'], login::$user);
        // bekreftet?
        if (isset($_POST['confirm']) && isset($_POST['ovt_s']) && isset($_POST['ovt_m']) && $form->validateHashOrAlert()) {
            // kontroller overføringstapene (slik at det ikke har skjedd noen endringer)
            $ovt_s = postval("ovt_s");
            $ovt_m = postval("ovt_m");
            if ($ovt_s != $this->bank->overforingstap || $ovt_m != $bank->overforingstap) {
                // det har endret seg
                login::data_set("banken_ovt_endret", true);
            } else {
                // start transaksjon
                \Kofradia\DB::get()->beginTransaction();
                // send pengene
                $a = \Kofradia\DB::get()->exec("UPDATE users_players AS s, users_players AS m SET s.up_bank = s.up_bank - {$amount}, m.up_bank = m.up_bank + {$info[3]} WHERE s.up_id = " . $this->up->id . " AND m.up_id = {$player['up_id']} AND s.up_bank >= {$amount}");
                // mislykket?
                if ($a == 0) {
                    ess::$b->page->add_message("Noe gikk galt under overføringen.", "error");
                    \Kofradia\DB::get()->commit();
                } else {
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log SET bl_sender_up_id = " . $this->up->id . ", bl_receiver_up_id = {$player['up_id']}, amount = {$info[4]}, time = " . time());
                    // oppdater senderen
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_sent = up_bank_sent + {$info[4]}, up_bank_profit = up_bank_profit - {$info[4]}, up_bank_num_sent = up_bank_num_sent + 1, up_bank_charge = up_bank_charge + {$info[0]} WHERE up_id = " . $this->up->id);
                    // oppdater mottakeren
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank_received = up_bank_received + {$info[4]}, up_bank_profit = up_bank_profit + {$info[4]}, up_bank_num_received = up_bank_num_received + 1, up_bank_charge = up_bank_charge + {$info[1]} WHERE up_id = {$player['up_id']}");
                    // spillelogg (med melding)
                    $player2 = new player($player['up_id']);
                    $player2->add_log("bankoverforing", $info[4] . ":" . $note, $this->up->id);
                    // legg til transaksjonsrader
                    if ($info[0] > 0) {
                        \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$this->bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[0]}");
                    }
                    if ($info[1] > 0) {
                        \Kofradia\DB::get()->exec("INSERT INTO ff_bank_transactions SET ffbt_ff_id = {$bank->id}, ffbt_time = " . time() . ", ffbt_amount = {$amount}, ffbt_profit = {$info[1]}");
                    }
                    // IRC logg
                    putlog("LOG", "%c9%uBANKOVERFØRING:%u%c (%u" . $this->up->data['up_name'] . "%u) sendte (%u" . game::format_cash($amount) . "%u (%u{$info[3]}%u)) til (%u{$player['up_name']}%u) (TAP: " . game::format_cash($info[2]) . ") " . (!empty($note) ? 'Melding: (' . $note . ')' : 'Ingen melding.'));
                    ess::$b->page->add_message('Du overførte <b>' . game::format_cash($info[4]) . '</b> til <user id="' . $player['up_id'] . '" />.' . ($info[0] > 0 ? ' Banken din tok <b>' . game::format_cash($info[0]) . '</b> i overføringsgebyr.' : ''));
                    \Kofradia\DB::get()->commit();
                    // trigger
                    $this->up->update_money(-$amount, false, false, null);
                    $player2->update_money($info[3], false, false, null);
                    redirect::handle();
                }
            }
        }
        ess::$b->page->add_css('.dl_bank dd { text-align: right }');
        // vis godkjenn form
        echo '
<h1>Banken - overføring</h1>
<form action="" method="post">
	<input type="hidden" name="mottaker" value="' . htmlspecialchars($mottaker) . '" />
	<input type="hidden" name="amount" value="' . $amount . '" />
	<input type="hidden" name="note" value="' . htmlspecialchars($note) . '" />
	<input type="hidden" name="ovt_s" value="' . $this->bank->overforingstap . '" />
	<input type="hidden" name="ovt_m" value="' . $bank->overforingstap . '" />
	' . $form->getHTMLInput();
        // hoppe over overføringstapet?
        if ($skip_bog) {
            echo '
	<input type="hidden" name="skip_bog" />';
        }
        echo '
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<div style="width: 200px; padding-left: 100px; float: left">
		<div class="section">
			<h2>Avsender</h2>
			<dl class="dl_30">
				<dt>Kontoeier</dt>
				<dd>' . game::profile_link() . '</dd>
				
				<dt>Bankfirma</dt>
				<dd><a href="ff/?ff_id=' . $this->bank->id . '">' . htmlspecialchars($this->bank->data['ff_name']) . '</a></dd>
				
				<dt><abbr title="Overføringstap">Overf.tap</abbr></dt>
				<dd>' . $this->bank->overforingstap * 100 . ' %</dd>
				
				<dt>Plassering</dt>
				<dd>' . (!isset(game::$bydeler[$this->bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$this->bank->data['br_b_id']]['name'])) . '</dd>
			</dl>
		</div>
	</div>
	<div style="width: 200px; padding-left: 20px; float: left">
		<div class="section">
			<h2>Mottaker</h2>
			<dl class="dl_30">
				<dt>Kontoeier</dt>
				<dd><user id="' . $player['up_id'] . '" /></dd>
				
				<dt>Bankfirma</dt>
				<dd><a href="ff/?ff_id=' . $bank->id . '">' . htmlspecialchars($bank->data['ff_name']) . '</a></dd>
				
				<dt><abbr title="Overføringstap">Overf.tap</abbr></dt>
				<dd>' . $bank->overforingstap * 100 . ' %</dd>
				
				<dt>Plassering</dt>
				<dd>' . (!isset(game::$bydeler[$bank->data['br_b_id']]) ? '<span style="color: #777777">Ukjent</span>' : htmlspecialchars(game::$bydeler[$bank->data['br_b_id']]['name'])) . '</dd>
			</dl>
		</div>
	</div>
	<div class="clear" style="width: 420px; margin-left: 100px">
		<div class="section">
			<h2>Overføringsinformasjon</h2>
			<dl class="dl_40 dl_bank">
				<dt>Overføringsbeløp</dt>
				<dd>' . game::format_cash($amount) . '</dd>';
        // hopper over overføringstapet?
        if ($skip_bog) {
            echo '
				
				<dt>Hopper over overføringstapet</dt>
				<dd>NoStat</dd>';
        }
        echo '
				
				<dt>Overføringstap for avsender</dt>
				<dd>' . game::format_cash($info[0]) . '</dd>
				
				<dt>Overføringstap for mottaker</dt>
				<dd>' . game::format_cash($info[1]) . '</dd>
				
				<dt>Mottaker får</dt>
				<dd>' . game::format_cash($info[3]) . '</dd>
				
				<dt>Melding</dt>
				<dd>' . (empty($note) ? 'Ingen melding.' : game::bb_to_html($note)) . '</dd>
			</dl>
			<h4>
				' . show_sbutton("Utfør overføring", 'name="confirm"') . '
				' . show_sbutton("Avbryt/endre", 'name="abort"') . '
			</h4>
		</div>
	</div>
</form>';
        ess::$b->page->load();
    }
示例#4
0
 /**
  * Senk deler av en dusør (ved skadet angrep)
  * @param player $up spilleren det gjelder
  * @param player $attacker spilleren som angrep
  * @param float $health_f for hvor mye helse spilleren mistet (i forhold til maksverdien til spilleren)
  */
 public static function player_hurt(player $up, player $attacker, $health_f)
 {
     \Kofradia\DB::get()->beginTransaction();
     // hent informasjon om spilleren
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT SUM(hl_amount_valid) AS sum_hl_amount_valid\n\t\t\tFROM (\n\t\t\t\tSELECT hl_amount_valid\n\t\t\t\tFROM hitlist\n\t\t\t\tWHERE hl_up_id = {$up->id}\n\t\t\t\tFOR UPDATE\n\t\t\t) ref");
     $hl = $result->fetch();
     if (!$hl || $hl['sum_hl_amount_valid'] <= 0) {
         \Kofradia\DB::get()->commit();
         return 0;
     }
     $sum = $hl['sum_hl_amount_valid'];
     // hvor mye vi får
     $amount = bcmul($sum, $health_f);
     if ($amount <= 0) {
         \Kofradia\DB::get()->commit();
         return 0;
     }
     // trekk pengene fra hitlist
     \Kofradia\DB::get()->exec("SET @t := {$amount}");
     \Kofradia\DB::get()->exec("\n\t\t\tUPDATE hitlist h, (\n\t\t\t\tSELECT\n\t\t\t\t\thl_id,\n\t\t\t\t\tGREATEST(0, LEAST(@t, hl_amount_valid)) AS to_remove,\n\t\t\t\t\t@t := GREATEST(0, @t - hl_amount_valid)\n\t\t\t\tFROM hitlist\n\t\t\t\tWHERE hl_up_id = {$up->id} AND @t > 0\n\t\t\t\tORDER BY hl_time\n\t\t\t) r\n\t\t\tSET h.hl_amount_valid = h.hl_amount_valid - to_remove\n\t\t\tWHERE h.hl_id = r.hl_id");
     \Kofradia\DB::get()->exec("DELETE FROM hitlist WHERE hl_amount_valid = 0");
     // gi pengene til spilleren
     \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$amount} WHERE up_id = {$attacker->id}");
     $attacker->data['up_cash'] = bcadd($attacker->data['up_cash'], $amount);
     // hendelse om at man mottok penger fra hitlist for angrepet
     $attacker->add_log("etterlyst_receive", $up->id . ":1:1", $amount);
     \Kofradia\DB::get()->commit();
     return $amount;
 }
示例#5
0
 /**
  * FF dør ut
  * @param player $up_attack spilleren som angrep eier som førte til at FF ble lagt ned
  */
 public function dies(player $up_attack = null)
 {
     global $_game, $__server;
     // allerede inaktiv?
     if (!$this->active) {
         throw new HSException("FF er allerede lagt ned.");
     }
     // legg til logg hos medlemmer og inviterte
     foreach ($this->members['members'] as $member) {
         // brukerlogg
         player::add_log_static("ff_dead", $this->refstring . ":" . urlencode($this->data['ff_name']), $this->id, $member->id);
     }
     foreach ($this->members['invited'] as $member) {
         // brukerlogg
         player::add_log_static("ff_dead_invited", $this->refstring . ":" . urlencode($this->data['ff_name']), $this->id, $member->id);
     }
     // fjern fra menyen hos medlemmer
     $this->remove_menu_entries();
     // logg
     putlog("CREWCHAN", ucfirst($this->refstring) . " %u{$this->data['ff_name']}%u har blitt oppløst. {$__server['path']}/ff/?ff_id={$this->id}");
     putlog("INFO", ucfirst($this->refstring) . " %u{$this->data['ff_name']}%u har blitt oppløst.");
     // live-feed
     livefeed::add_row(ucfirst($this->refstring) . " " . htmlspecialchars($this->data['ff_name']) . " ble oppløst.");
     // broderskap?
     if ($this->type['type'] == "familie") {
         // sett FF til inaktiv
         $time = time();
         $this->active = false;
         $this->data['ff_inactive'] = 1;
         $this->data['ff_inactive_time'] = $time;
         \Kofradia\DB::get()->exec("UPDATE ff SET ff_inactive = 1, ff_inactive_time = {$time} WHERE ff_id = {$this->id}");
         // legg ut konkurranse om nytt broderskap
         $others = false;
         if ($this->competition) {
             // er vi det eneste broderskapet igjen i konkurransen?
             $result = \Kofradia\DB::get()->query("SELECT COUNT(ff_id) FROM ff WHERE ff_fff_id = {$this->data['fff_id']} AND ff_inactive = 0 AND ff_id != {$this->id}");
             $others = $result->fetchColumn(0) > 0;
         }
         if (!$this->data['ff_is_crew'] && !$this->params->get("die_no_new") && !$others) {
             self::create_competition();
             // sett params slik at det ikke blir lagt ut ny konkurranse dersom broderskapet blir aktivert og så deaktivert igjen
             $this->params->update("die_no_new", 1, true);
         }
         // hendelse
         $this->add_log("dissolve", null);
     } else {
         $name_old = $this->data['ff_name'];
         // nullstill firmaet
         $this->reset((bool) $up_attack);
         $this->reset_members();
         // hendelse
         $this->add_log("dissolve", null);
         if ($up_attack) {
             // angriper overtar firmaet
             $this->player_set_priority($up_attack->id, 1, null, true);
             $this->reset_date_reg(true);
             // gi hendelse til angriper
             $up_attack->add_log("ff_takeover", $this->id . ":" . urlencode($name_old) . ":" . urlencode($this->data['ff_name']) . ":" . urlencode($this->type['refobj']) . ":" . urlencode($this->type['priority'][1]), 0);
             // live-feed
             livefeed::add_row('<user id="' . $up_attack->id . '" /> tok over driften av ' . $this->type['refobj'] . ' <a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $this->id . '">' . htmlspecialchars($this->data['ff_name']) . '</a>' . ($name_old != $this->data['ff_name'] ? ' (tidligere ' . htmlspecialchars($name_old) . ')' : '') . '.');
         } else {
             // opprett ny auksjon
             auksjon::create_auksjon_ff($this);
         }
     }
 }
示例#6
0
 /**
  * Marker som utført
  */
 public function mark_complete()
 {
     $this->data['upa_complete'] = 1;
     $this->data['upa_time'] = time();
     $this->data['upa_apoints'] = $this->a->data['ac_apoints'];
     $this->data['upa_prize'] = $this->a->data['ac_prize'];
     // marker som utført
     $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE up_achievements\n\t\t\tSET upa_complete = 1, upa_time = {$this->data['upa_time']}, upa_apoints = {$this->data['upa_apoints']}, upa_prize = " . \Kofradia\DB::quote($this->a->data['ac_prize']) . "\n\t\t\tWHERE upa_id = {$this->data['upa_id']} AND upa_complete = 0");
     if ($a == 0) {
         return false;
     }
     // oppdater count i hovedtabellen
     \Kofradia\DB::get()->exec("\n\t\t\tUPDATE achievements\n\t\t\tSET ac_count = ac_count + 1\n\t\t\tWHERE ac_id = {$this->a->id}");
     // oppdater spilleren
     $this->up->data['up_achievements_points'] += $this->a->data['ac_apoints'];
     \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players\n\t\t\tSET up_achievements_points = up_achievements_points + {$this->a->data['ac_apoints']}\n\t\t\tWHERE up_id = {$this->up->id}");
     // gi spillerlogg
     $rep = $this->get_rep_count();
     $prize = $this->prize();
     $this->up->add_log("achievement", "{$rep}:" . urlencode($this->a->data['ac_name']) . ":{$prize}", $this->a->id);
     // gi ut premie
     $this->prize(true);
     return true;
 }