orderBy('rank')->get(); } public static function getLists() { return static::groupBy('list_name')->get(); } public function getCharacterAttribute() { $char = Character::where('name', $this->char_name)->where('realm', $this->realm_name)->first(); if (!empty($char->ID)) { return $char; } $char = new Character(); $char->name = $this->char_name; $char->realm = $this->realm_name; $char->class = "yellow"; return $char; } public function getAfter($active = true) { $list = static::where('list_name', $this->list_name)->where('rank', ">", $this->rank); if ($active) { $list = $list->where('active', true); } return $list->orderBy('rank')->get(); } public function getPrevious($active = true) { $prev = SKS::where('list_name', $this->list_name)->where('rank', '<', $this->rank); if ($active) { $prev = $prev->where('active', true); } $prev = $prev->orderBy('rank', 'DESC')->first(); if (!empty($prev->ID)) { return $prev->rank; } else { return $this->rank; } } public function getLastRankAttribute() { $lastSK = SKS::where('list_name', $this->list_name) ->where('active', true) ->orderBy('rank', 'DESC')->get()->first(); if (!empty($lastSK->ID)) { return $lastSK->rank; } return false; } public function roll() { $list = SKS::where('list_name', $this->list_name)->get(); $ranks = range(1, count($list)); shuffle($ranks); Log::write(json_encode($list->map->only(['rank','char_name','realm_name'])->values()),Log::LOG_ROLL); foreach ($list as $key => $sk) { $sk->rank = $ranks[$key]; $sk->save(); } } public function loot() { $after = $this->getAfter(); $rank = $this->rank; $last_rank = $this->last_rank; foreach ($after as $id => &$sk) { /** * Ignoriere inaktive Charaktere & Charaktere * die auf einem höheren Rang als der Looter sind * und überspringe die restlichen Anweisungen */ if (!$sk->active || $sk->rank < $this->rank) { continue; } /** * Setze den Rang des Charakters auf den Rang des vorherigen aktiven */ $after[$id]->rank = $sk->getPrevious(true); } /** * Setze den Rang des Looters auf den letzen aktiven Rang */ $this->rank = $last_rank; $this->save(); Log::write(json_encode(['char' => $this->char_name."-".$this->realm_name,'rank' => $this->rank,'previous' => $rank,'list' => $this->list_name]),Log::LOG_LOOT); foreach ($after as $sk) { $sk->save(); } } public function export(){ $list = $this->getList($this->list_name); foreach($list as &$list_item){ $list_item['char'] = $list_item['char_name']."-".$list_item['realm_name']; unset($list_item['list_name']); unset($list_item['char_name']); unset($list_item['realm_name']); unset($list_item['ID']); } $list->sort(fn($a,$b) => $a['rank'] - $b['rank']); return json_encode($list); } }