generalName = $generalName; $this->nationName = $nationName; $this->color = $color; $this->icon = $icon; } /** * @return MessageTarget */ public static function buildFromArray($arr) { if(!$arr){ throw new \InvalidArgumentException(); } if(!Util::array_get($arr['nation_id'])){ $arr['nation'] = '재야'; $arr['color'] = '#000000'; $arr['nation_id'] = 0; } return new MessageTarget( $arr['id'], $arr['name'], $arr['nation_id'], $arr['nation'], $arr['color'], $arr['icon']??'' ); } /** * DB 부하 감수하고 일일히 찾아줌. * 게임 로직과 크게 연관이 없는 곳에서 메시지를 생성해야 할 경우에만 사용할 것을 권함. * @return MessageTarget */ public static function buildQuick(int $generalID){ $db = DB::db(); list( $generalName, $nationID, $imgsvr, $picture ) = $db->queryFirstList('SELECT `name`, nation, imgsvr, picture FROM general WHERE `no`=%i', $generalID); if($generalName === null){ throw new \RuntimeException('장수가 없음:'.$generalID); } $icon = GetImageURL($imgsvr, $picture); $nation = getNationStaticInfo($nationID); return new MessageTarget($generalID, $generalName, $nationID, $nation['name'], $nation['color'], $icon); } public static function buildFromGeneralObj(General $general): MessageTarget{ $nation = getNationStaticInfo($general->getNationID()); return new MessageTarget( $general->getID(), $general->getName(), $general->getNationID(), $nation['name'], $nation['color'], GetImageURL($general->getVar('imgsvr'), $general->getVar('picture')), ); } public static function buildSystemTarget(): MessageTarget{ return new MessageTarget(0, '', 0, 'System', '#000000'); } public function toArray() : array{ return [ 'id'=>$this->generalID, 'name'=>$this->generalName, 'nation_id'=>$this->nationID, 'nation'=>$this->nationName, 'color'=>$this->color, 'icon'=>$this->icon ]; } public function toArrayLight() : array{ //TODO: 이걸 꼭 연관 배열로 보낼 이유가 없다. //TODO: 아이콘도 축약 가능하다. return [ 'name'=>$this->generalName, 'nation'=>$this->nationName, 'color'=>$this->color, 'icon'=>$this->icon ]; } }