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