From d670dbf081285dcf714343098ff4148398378eca Mon Sep 17 00:00:00 2001 From: hide_d Date: Sun, 12 Sep 2021 02:59:49 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=9E=A5=EC=88=98=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EC=8B=9C=20=EC=9C=A0=EC=82=B0=20=ED=8F=AC=EC=9D=B8=ED=8A=B8?= =?UTF-8?q?=EC=97=90=20=EB=94=B0=EB=9D=BC=20=EC=83=9D=EC=84=B1=ED=95=B4?= =?UTF-8?q?=EC=A3=BC=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/func.php | 4 +- hwe/func_gamerule.php | 14 +- hwe/join_post.php | 331 ++++++++++++++++++++++-------------- hwe/sammo/GameConstBase.php | 118 +++++++------ 4 files changed, 276 insertions(+), 191 deletions(-) diff --git a/hwe/func.php b/hwe/func.php index cbabbc3e..68ac8331 100644 --- a/hwe/func.php +++ b/hwe/func.php @@ -2158,7 +2158,7 @@ function getRandTurn($term, ?\DateTimeInterface $baseDateTime = null) $randSecond = Util::randRangeInt(0, 60 * $term - 1); $randFraction = Util::randRangeInt(0, 999999) / 1000000; //6자리 소수 - return $baseDateTime->add(TimeUtil::secondsToDateInterval($randSecond + $randFraction))->format('Y-m-d H:i:s'); + return $baseDateTime->add(TimeUtil::secondsToDateInterval($randSecond + $randFraction))->format('Y-m-d H:i:s.u'); } function getRandTurn2($term, ?\DateTimeInterface $baseDateTime = null) @@ -2173,5 +2173,5 @@ function getRandTurn2($term, ?\DateTimeInterface $baseDateTime = null) $randSecond = Util::randRangeInt(0, 60 * $term - 1); $randFraction = Util::randRangeInt(0, 999999) / 1000000; //6자리 소수 - return $baseDateTime->sub(TimeUtil::secondsToDateInterval($randSecond + $randFraction))->format('Y-m-d H:i:s'); + return $baseDateTime->sub(TimeUtil::secondsToDateInterval($randSecond + $randFraction))->format('Y-m-d H:i:s.u'); } diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php index 07e07a6f..a6faafe4 100644 --- a/hwe/func_gamerule.php +++ b/hwe/func_gamerule.php @@ -1150,14 +1150,23 @@ function checkEmperior() LogHistory(); } -function resetInheritanceUser(int $userID, bool $isRebirth=false){ +function resetInheritanceUser(int $userID, bool $isRebirth=false):float{ $rebirthDegraded = [ 'dex'=>0.5, ]; $inheritStor = KVStorage::getStorage(DB::db(), "inheritance_{$userID}"); $totalPoint = 0; - foreach($inheritStor->getAll() as $key=>[$value,]){ + $allPoints = $inheritStor->getAll(); + if(count($allPoints) == 0){ + //비었으므로 리셋 안함 + return 0; + } + if(count($allPoints) == 1 && key_exists('previous', $allPoints)){ + //이미 리셋되었으므로 리셋 안함 + return $allPoints['previous']; + } + foreach($allPoints as $key=>[$value,]){ if($isRebirth && key_exists($key, $rebirthDegraded)){ $value *= $rebirthDegraded[$key]; } @@ -1166,6 +1175,7 @@ function resetInheritanceUser(int $userID, bool $isRebirth=false){ $totalPoint = Util::toInt($totalPoint); $inheritStor->resetValues(); $inheritStor->setValue('previous', [$totalPoint, null]); + return $totalPoint; } function updateMaxDomesticCritical(General $general, $score){ diff --git a/hwe/join_post.php b/hwe/join_post.php index fbd6b58a..e9fb0d22 100644 --- a/hwe/join_post.php +++ b/hwe/join_post.php @@ -1,39 +1,50 @@ "; + exit(1); +} + $v = new Validator($_POST); $v -->rule('required', [ - 'name', - 'leadership', - 'strength', - 'intel' -]) -->rule('integer', [ - 'leadership', - 'strength', - 'intel', -]) -->rule('stringWidthBetween', 'name', 1, 18) -->rule('min', [ - 'leadership', - 'strength', - 'intel' -], GameConst::$defaultStatMin) -->rule('max', [ - 'leadership', - 'strength', - 'intel' -], GameConst::$defaultStatMax) -->rule('in', 'character', array_merge(GameConst::$availablePersonality, ['Random'])); + ->rule('required', [ + 'name', + 'leadership', + 'strength', + 'intel' + ]) + ->rule('integer', [ + 'leadership', + 'strength', + 'intel', + ]) + ->rule('stringWidthBetween', 'name', 1, 18) + ->rule('min', [ + 'leadership', + 'strength', + 'intel' + ], GameConst::$defaultStatMin) + ->rule('max', [ + 'leadership', + 'strength', + 'intel' + ], GameConst::$defaultStatMax) + ->rule('in', 'character', array_merge(GameConst::$availablePersonality, ['Random'])) + ->rule('in', 'inheritSpecial', GameConst::$availableSpecialWar) + ->rule('integer', 'inheritTurntime') + ->rule('min', 'inheritTurntime', 0) + ->rule('in', 'inheritCity', array_keys(CityConst::all())) + ->rule('integerArray', 'inheritBonusStat'); if (!$v->validate()) { - MessageBox($v->errorStr()); - echo ""; - exit(1); + dieMsg($v->errorStr()); } $session = Session::requireLogin()->setReadOnly(); @@ -52,6 +63,11 @@ $leadership = Util::getPost('leadership', 'int', 50); $strength = Util::getPost('strength', 'int', 50); $intel = Util::getPost('intel', 'int', 50); +$inheritSpecial = Util::getPost('inheritSpecial'); +$inheritTurntime = Util::getPost('inheritTurntime', 'int'); +$inheritCity = Util::getPost('inheritCity', 'int'); +$inheritBonusStat = Util::getPost('inheritBonusStat', 'array_int'); + $join = Util::getPost('join'); //쓸모 없음 $rootDB = RootDB::db(); @@ -59,14 +75,12 @@ $rootDB = RootDB::db(); $member = $rootDB->queryFirstRow('SELECT `no`, id, picture, grade, `name`, imgsvr FROM member WHERE no=%i', $userID); if (!$member) { - MessageBox("잘못된 접근입니다!!!"); - echo ""; - exit(1); + dieMsg("잘못된 접근입니다!!!"); } $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); -$gameStor->cacheValues(['year','month','maxgeneral','scenario','show_img_level','turnterm','turntime','genius','npcmode']); +$gameStor->cacheValues(['year', 'month', 'maxgeneral', 'scenario', 'show_img_level', 'turnterm', 'turntime', 'genius', 'npcmode']); ########## 동일 정보 존재여부 확인. ########## $gencount = $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'); @@ -74,76 +88,110 @@ $oldGeneral = $db->queryFirstField('SELECT `no` FROM general WHERE `owner`=%i', $oldName = $db->queryFirstField('SELECT `no` FROM general WHERE `name`=%s', $name); if ($oldGeneral) { - echo(""); - exit; + dieMsg("이미 등록하셨습니다!"); } if ($oldName) { - echo(""); - exit; + dieMsg("이미 있는 장수입니다. 다른 이름으로 등록해 주세요!"); } if ($gameStor->maxgeneral <= $gencount) { - echo(""); - exit; + dieMsg("더이상 등록할 수 없습니다!"); } if ($name == '') { - echo(""); - exit; + dieMsg("이름이 짧습니다. 다시 가입해주세요!"); } if (mb_strwidth($name) > 18) { - echo(""); - exit; + dieMsg("이름이 유효하지 않습니다. 다시 가입해주세요!"); } if ($leadership + $strength + $intel > GameConst::$defaultStatTotal) { - echo(""); - exit; + dieMsg("능력치가 " . GameConst::$defaultStatTotal . "을 넘어섰습니다. 다시 가입해주세요!"); +} + +if ($inheritBonusStat) { + if (count($inheritBonusStat) != 3) { + dieMsg("보너스 능력치가 잘못 지정되었습니다. 다시 가입해주세요!"); + } + $sum = array_sum($inheritBonusStat); + if ($sum < 3 || $sum > 5) { + dieMsg("보너스 능력치 합이 잘못 지정되었습니다. 다시 가입해주세요!"); + } + foreach ($inheritBonusStat as $stat) { + if ($stat < 0) { + dieMsg("보너스 능력치가 음수입니다. 다시 가입해주세요!"); + } + } +} + +$admin = $gameStor->getValues(['scenario', 'turnterm', 'turntime', 'show_img_level', 'startyear', 'year']); + +$inheritTotalPoint = resetInheritanceUser($userID); +$inheritRequiredPoint = 0; + +if ($inheritCity !== null) { + $inheritRequiredPoint += GameConst::$inheritBornCityPoint; +} +if ($inheritBonusStat !== null) { + $inheritRequiredPoint += GameConst::$inheritBornMaxBonusStat; +} +if ($inheritSpecial !== null) { + $inheritRequiredPoint += GameConst::$inheritBornSpecialPoint; +} +if ($inheritTurntime !== null) { + $inheritRequiredPoint += GameConst::$inheritBornTurntimePoint; +} + +if ($inheritTotalPoint < $inheritRequiredPoint) { + dieMsg("유산 포인트가 부족합니다. 다시 가입해주세요!"); +} + +if ($inheritSpecial !== null && $gameStor->genius == 0) { + dieMsg("이미 천재가 모두 나타났습니다. 다시 가입해주세요!"); +} + +if ($inheritCity !== null && !key_exists($inheritCity, CityConst::all())) { + dieMsg("도시가 잘못 지정되었습니다. 다시 가입해주세요!"); +} + +if ($inheritSpecial) { + $genius = true; +} else { + // 현재 1% + $genius = Util::randBool(0.01); } -$genius = Util::randBool(0.01); -// 현재 1% if ($genius && $gameStor->genius > 0) { - $gameStor->genius = $gameStor->genius-1; + $gameStor->genius = $gameStor->genius - 1; } else { $genius = false; } -// 공백지에서만 태어나게 -$city = $db->queryFirstField("select city from city where level>=5 and level<=6 and nation=0 order by rand() limit 0,1"); -if (!$city) { - $city = $db->queryFirstField("select city from city where level>=5 and level<=6 order by rand() limit 0,1"); +if ($inheritCity !== null) { + $city = $inheritCity; +} else { + // 공백지에서만 태어나게 + $city = $db->queryFirstField("select city from city where level>=5 and level<=6 and nation=0 order by rand() limit 0,1"); + if (!$city) { + $city = $db->queryFirstField("select city from city where level>=5 and level<=6 order by rand() limit 0,1"); + } } -$pleadership = 0; -$pstrength = 0; -$pintel = 0; -foreach(Util::range(Util::randRangeInt(3, 5)) as $statIdx){ - switch (Util::choiceRandomUsingWeight([$leadership, $strength, $intel])) { - case 0: - $pleadership++; - break; - case 1: - $pstrength++; - break; - case 2: - $pintel++; - break; +if ($inheritBonusStat) { + [$pleadership, $pstrength, $pintel] = $inheritBonusStat; +} else { + $pleadership = 0; + $pstrength = 0; + $pintel = 0; + foreach (Util::range(Util::randRangeInt(3, 5)) as $statIdx) { + switch (Util::choiceRandomUsingWeight([$leadership, $strength, $intel])) { + case 0: + $pleadership++; + break; + case 1: + $pstrength++; + break; + case 2: + $pintel++; + break; + } } } @@ -151,29 +199,32 @@ $leadership = $leadership + $pleadership; $strength = $strength + $pstrength; $intel = $intel + $pintel; -$admin = $gameStor->getValues(['scenario', 'turnterm', 'turntime', 'show_img_level', 'startyear', 'year']); $relYear = Util::valueFit($admin['year'] - $admin['startyear'], 0); $age = 20 + ($pleadership + $pstrength + $pintel) * 2 - (mt_rand(0, 1)); // 아직 남았고 천재등록상태이면 특기 부여 if ($genius) { $specage2 = $age; - $special2 = SpecialityHelper::pickSpecialWar([ - 'leadership'=>$leadership, - 'strength'=>$strength, - 'intel'=>$intel, - 'dex1'=>0, - 'dex2'=>0, - 'dex3'=>0, - 'dex4'=>0, - 'dex5'=>0 - ]); + if ($inheritSpecial) { + $special2 = $inheritSpecial; + } else { + $special2 = SpecialityHelper::pickSpecialWar([ + 'leadership' => $leadership, + 'strength' => $strength, + 'intel' => $intel, + 'dex1' => 0, + 'dex2' => 0, + 'dex3' => 0, + 'dex4' => 0, + 'dex5' => 0 + ]); + } } else { - $specage2 = Util::valueFit(Util::round((GameConst::$retirementYear - $age)/6 - $relYear / 2), 3) + $age; + $specage2 = Util::valueFit(Util::round((GameConst::$retirementYear - $age) / 6 - $relYear / 2), 3) + $age; $special2 = GameConst::$defaultSpecialWar; } //내특 -$specage = Util::valueFit(Util::round((GameConst::$retirementYear - $age)/12 - $relYear / 2), 3) + $age; +$specage = Util::valueFit(Util::round((GameConst::$retirementYear - $age) / 12 - $relYear / 2), 3) + $age; $special = GameConst::$defaultSpecialDomestic; if ($admin['scenario'] >= 1000) { @@ -181,22 +232,29 @@ if ($admin['scenario'] >= 1000) { $specage = $age + 3; } -if($relYear < 3){ +if ($relYear < 3) { $experience = 0; -} -else{ +} else { $expGenCount = $db->queryFirstField('SELECT count(*) FROM general WHERE nation != 0 AND npc < 4'); $targetGenOrder = Util::round($expGenCount * 0.2); $experience = $db->queryFirstField( - 'SELECT experience FROM general WHERE nation != 0 AND npc < 4 ORDER BY experience ASC LIMIT %i, 1', + 'SELECT experience FROM general WHERE nation != 0 AND npc < 4 ORDER BY experience ASC LIMIT %i, 1', $targetGenOrder - 1 ); $experience *= 0.8; } -$turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime'])); +if ($inheritTurntime === null) { + $inheritTurntime = $inheritTurntime % ($gameStor->turnterm * 60); + $inheritTurntime += Util::randRangeInt(0, 999999) / 1000000; + $turntime = cutTurn($admin['turntime'], $admin['turnterm']); + $turntime = TimeUtil::nowAddSeconds($inheritTurntime, true); +} else { + $turntime = getRandTurn($admin['turnterm'], new \DateTimeImmutable($admin['turntime'])); +} -$now = date('Y-m-d H:i:s'); + +$now = TimeUtil::now(true); if ($now >= $turntime) { $turntime = addTurn($turntime, $admin['turnterm']); } @@ -211,11 +269,11 @@ if ($admin['show_img_level'] >= 1 && $member['grade'] >= 1 && $member['picture'] } //성격 랜덤시 -if (!in_array($character, GameConst::$availablePersonality)){ +if (!in_array($character, GameConst::$availablePersonality)) { $character = Util::choiceRandom(GameConst::$availablePersonality); } //상성 랜덤 -$affinity = rand()%150 + 1; +$affinity = rand() % 150 + 1; ########## 회원정보 테이블에 입력값을 등록한다. ########## $db->insert('general', [ @@ -243,7 +301,7 @@ $db->insert('general', [ 'killturn' => 6, 'lastconnect' => $now, 'lastrefresh' => $now, - 'crewtype'=>GameUnitConst::DEFAULT_CREWTYPE, + 'crewtype' => GameUnitConst::DEFAULT_CREWTYPE, 'makelimit' => 0, 'age' => $age, 'startage' => $age, @@ -255,36 +313,34 @@ $db->insert('general', [ ]); $generalID = $db->insertId(); $turnRows = []; -foreach(Util::range(GameConst::$maxTurn) as $turnIdx){ +foreach (Util::range(GameConst::$maxTurn) as $turnIdx) { $turnRows[] = [ - 'general_id'=>$generalID, - 'turn_idx'=>$turnIdx, - 'action'=>'휴식', - 'arg'=>null, - 'brief'=>'휴식' + 'general_id' => $generalID, + 'turn_idx' => $turnIdx, + 'action' => '휴식', + 'arg' => null, + 'brief' => '휴식' ]; } $db->insert('general_turn', $turnRows); -resetInheritanceUser($userID); - $rank_data = []; -foreach(array_keys(General::RANK_COLUMN) as $rankColumn){ +foreach (array_keys(General::RANK_COLUMN) as $rankColumn) { $rank_data[] = [ - 'general_id'=>$generalID, - 'nation_id'=>0, - 'type'=>$rankColumn, - 'value'=>0 + 'general_id' => $generalID, + 'nation_id' => 0, + 'type' => $rankColumn, + 'value' => 0 ]; } $db->insert('rank_data', $rank_data); $db->insert('betting', [ - 'general_id'=>$generalID, + 'general_id' => $generalID, ]); $cityname = CityConst::byID($city)->name; $me = [ - 'no'=>$generalID + 'no' => $generalID ]; $log = []; @@ -295,7 +351,7 @@ $logger = new ActionLogger($generalID, 0, $gameStor->year, $gameStor->month); $josaRa = JosaUtil::pick($name, '라'); $speicalText = getGeneralSpecialWarName($special2); if ($genius) { - + $logger->pushGlobalActionLog("{$cityname}에서 {$name}{$josaRa}는 기재가 천하에 이름을 알립니다."); $logger->pushGlobalActionLog("{$speicalText} 특기를 가진 천재의 등장으로 온 천하가 떠들썩합니다."); $logger->pushGlobalHistoryLog("【천재】{$cityname}에 천재가 등장했습니다."); @@ -318,24 +374,37 @@ if ($genius) { $logger->flush(); -pushAdminLog(["가입 : {$userID} // {$name} // {$generalID}".getenv("REMOTE_ADDR")]); +pushAdminLog(["가입 : {$userID} // {$name} // {$generalID}" . getenv("REMOTE_ADDR")]); $rootDB->insert('member_log', [ 'member_no' => $userID, - 'date'=>TimeUtil::now(), - 'action_type'=>'make_general', - 'action'=>Json::encode([ - 'server'=>DB::prefix(), - 'type'=>'general', - 'generalID'=>$generalID, - 'generalName'=>$name + 'date' => TimeUtil::now(), + 'action_type' => 'make_general', + 'action' => Json::encode([ + 'server' => DB::prefix(), + 'type' => 'general', + 'generalID' => $generalID, + 'generalName' => $name ]) ]); ?> - - + + + + + + + + + \ No newline at end of file diff --git a/hwe/sammo/GameConstBase.php b/hwe/sammo/GameConstBase.php index b02df648..b90b2715 100644 --- a/hwe/sammo/GameConstBase.php +++ b/hwe/sammo/GameConstBase.php @@ -1,15 +1,16 @@ Credit"; - /** @var string 사용중인 지도명 */ - public static $mapName = 'che'; - /** @var string 사용중인 유닛셋 */ + /** @var string 게임명 */ + public static $title = "삼국지 모의전투 PHP HiDCHe"; + /** @var string 코드 아래에 붙는 설명 코드 */ + public static $banner = "KOEI의 이미지를 사용, 응용하였습니다 / 제작 : HideD(hided62@gmail.com) / Credit"; + /** @var string 사용중인 지도명 */ + public static $mapName = 'che'; + /** @var string 사용중인 유닛셋 */ public static $unitSet = 'che'; /** @var int 내정시 최하 민심 설정*/ public static $develrate = 50; @@ -137,7 +138,7 @@ class GameConstBase public static $maxChiefTurn = 12; public static $statGradeLevel = 5; - + /** @var int 초반 제한 기간 */ public static $openingPartYear = 3; /** @var int 거병,임관 제한 기간 */ @@ -166,83 +167,88 @@ class GameConstBase public static $defaultSpecialWar = 'None'; /** @var array 선택 가능한 장수 전투 특기 */ public static $availableSpecialWar = [ - 'che_귀병', 'che_신산', 'che_환술', 'che_집중', 'che_신중', 'che_반계', + 'che_귀병', 'che_신산', 'che_환술', 'che_집중', 'che_신중', 'che_반계', 'che_보병', 'che_궁병', 'che_기병', 'che_공성', - 'che_돌격', 'che_무쌍', 'che_견고', 'che_위압', + 'che_돌격', 'che_무쌍', 'che_견고', 'che_위압', 'che_저격', 'che_필살', 'che_징병', 'che_의술', 'che_격노', 'che_척사', ]; /** @var array 선택할 수 없으나 게임 내에 유효한 장수 전투 특기 */ public static $optionalSpecialWar = [ 'None', ]; - + /** @var string 기본 성향(공용) */ public static $neutralPersonality = 'None'; /** @var array 선택 가능한 성향 */ public static $availablePersonality = [ 'che_안전', 'che_유지', 'che_재간', 'che_출세', 'che_할거', 'che_정복', - 'che_패권', 'che_의협', 'che_대의', 'che_왕좌' + 'che_패권', 'che_의협', 'che_대의', 'che_왕좌' ]; /** @var array 존재하는 모든 성향 */ public static $optionalPersonality = [ 'che_은둔', 'None' ]; + public static $inheritBornSpecialPoint = 12000; + public static $inheritBornTurntimePoint = 3000; + public static $inheritBornCityPoint = 1000; + public static $inheritBornMaxBonusStat = 1000; + public static $allItems = [ 'horse' => [ - 'che_명마_01_노기'=>0, 'che_명마_02_조랑'=>0, 'che_명마_03_노새'=>0, - 'che_명마_04_나귀'=>0, 'che_명마_05_갈색마'=>0, 'che_명마_06_흑색마'=>0, - - 'che_명마_07_백마'=>2, 'che_명마_07_기주마'=>2, - 'che_명마_08_양주마'=>2, 'che_명마_09_과하마'=>2, - 'che_명마_10_대완마'=>2, 'che_명마_11_서량마'=>2, - 'che_명마_12_사륜거'=>2, 'che_명마_13_절영'=>1, 'che_명마_13_적로'=>1, - 'che_명마_14_적란마'=>1, 'che_명마_14_조황비전'=>1, 'che_명마_15_한혈마'=>1, 'che_명마_15_적토마'=>1, + 'che_명마_01_노기' => 0, 'che_명마_02_조랑' => 0, 'che_명마_03_노새' => 0, + 'che_명마_04_나귀' => 0, 'che_명마_05_갈색마' => 0, 'che_명마_06_흑색마' => 0, + + 'che_명마_07_백마' => 2, 'che_명마_07_기주마' => 2, + 'che_명마_08_양주마' => 2, 'che_명마_09_과하마' => 2, + 'che_명마_10_대완마' => 2, 'che_명마_11_서량마' => 2, + 'che_명마_12_사륜거' => 2, 'che_명마_13_절영' => 1, 'che_명마_13_적로' => 1, + 'che_명마_14_적란마' => 1, 'che_명마_14_조황비전' => 1, 'che_명마_15_한혈마' => 1, 'che_명마_15_적토마' => 1, ], 'weapon' => [ - 'che_무기_01_단도'=>0, 'che_무기_02_단궁'=>0, 'che_무기_03_단극'=>0, - 'che_무기_04_목검'=>0, 'che_무기_05_죽창'=>0, 'che_무기_06_소부'=>0, - - 'che_무기_07_동추'=>1, 'che_무기_07_철편'=>1, 'che_무기_07_철쇄'=>1, 'che_무기_07_맥궁'=>1, - 'che_무기_08_유성추'=>1, 'che_무기_08_철질여골'=>1, 'che_무기_09_쌍철극'=>1, 'che_무기_09_동호비궁'=>1, 'che_무기_10_삼첨도'=>1, 'che_무기_10_대부'=>1, 'che_무기_11_고정도'=>1, 'che_무기_11_이광궁'=>1, 'che_무기_12_철척사모'=>1, 'che_무기_12_칠성검'=>1, 'che_무기_13_사모'=>1, 'che_무기_13_양유기궁'=>1, - 'che_무기_14_언월도'=>1, 'che_무기_14_방천화극'=>1, 'che_무기_15_청홍검'=>1, 'che_무기_15_의천검'=>1 + 'che_무기_01_단도' => 0, 'che_무기_02_단궁' => 0, 'che_무기_03_단극' => 0, + 'che_무기_04_목검' => 0, 'che_무기_05_죽창' => 0, 'che_무기_06_소부' => 0, + + 'che_무기_07_동추' => 1, 'che_무기_07_철편' => 1, 'che_무기_07_철쇄' => 1, 'che_무기_07_맥궁' => 1, + 'che_무기_08_유성추' => 1, 'che_무기_08_철질여골' => 1, 'che_무기_09_쌍철극' => 1, 'che_무기_09_동호비궁' => 1, 'che_무기_10_삼첨도' => 1, 'che_무기_10_대부' => 1, 'che_무기_11_고정도' => 1, 'che_무기_11_이광궁' => 1, 'che_무기_12_철척사모' => 1, 'che_무기_12_칠성검' => 1, 'che_무기_13_사모' => 1, 'che_무기_13_양유기궁' => 1, + 'che_무기_14_언월도' => 1, 'che_무기_14_방천화극' => 1, 'che_무기_15_청홍검' => 1, 'che_무기_15_의천검' => 1 ], 'book' => [ - 'che_서적_01_효경전'=>0, 'che_서적_02_회남자'=>0, 'che_서적_03_변도론'=>0, - 'che_서적_04_건상역주'=>0, 'che_서적_05_여씨춘추'=>0, 'che_서적_06_사민월령'=>0, + 'che_서적_01_효경전' => 0, 'che_서적_02_회남자' => 0, 'che_서적_03_변도론' => 0, + 'che_서적_04_건상역주' => 0, 'che_서적_05_여씨춘추' => 0, 'che_서적_06_사민월령' => 0, - 'che_서적_07_위료자'=>1, 'che_서적_07_사마법'=>1, 'che_서적_07_한서'=>1, 'che_서적_07_논어'=>1, - 'che_서적_08_전론'=>1, 'che_서적_08_사기'=>1, 'che_서적_09_장자'=>1, 'che_서적_09_역경'=>1, - 'che_서적_10_시경'=>1, 'che_서적_10_구국론'=>1, 'che_서적_11_상군서'=>1, 'che_서적_11_춘추전'=>1, - 'che_서적_12_산해경'=>1, 'che_서적_12_맹덕신서'=>1, 'che_서적_13_관자'=>1, 'che_서적_13_병법24편'=>1, - 'che_서적_14_한비자'=>1, 'che_서적_14_오자병법'=>1, 'che_서적_15_노자'=>1, 'che_서적_15_손자병법'=>1, + 'che_서적_07_위료자' => 1, 'che_서적_07_사마법' => 1, 'che_서적_07_한서' => 1, 'che_서적_07_논어' => 1, + 'che_서적_08_전론' => 1, 'che_서적_08_사기' => 1, 'che_서적_09_장자' => 1, 'che_서적_09_역경' => 1, + 'che_서적_10_시경' => 1, 'che_서적_10_구국론' => 1, 'che_서적_11_상군서' => 1, 'che_서적_11_춘추전' => 1, + 'che_서적_12_산해경' => 1, 'che_서적_12_맹덕신서' => 1, 'che_서적_13_관자' => 1, 'che_서적_13_병법24편' => 1, + 'che_서적_14_한비자' => 1, 'che_서적_14_오자병법' => 1, 'che_서적_15_노자' => 1, 'che_서적_15_손자병법' => 1, ], 'item' => [ - 'che_치료_환약'=>0, 'che_저격_수극'=>0, 'che_사기_탁주'=>0, - 'che_훈련_청주'=>0, 'che_계략_이추'=>0, 'che_계략_향낭'=>0, + 'che_치료_환약' => 0, 'che_저격_수극' => 0, 'che_사기_탁주' => 0, + 'che_훈련_청주' => 0, 'che_계략_이추' => 0, 'che_계략_향낭' => 0, - 'che_의술_청낭서'=>1, 'che_의술_태평청령'=>1, 'che_의술_상한잡병론'=>1, - 'che_부적_태현청생부'=>1, - 'che_저격_매화수전'=>1, 'che_저격_비도'=>1, - 'che_계략_육도'=>1, 'che_계략_삼략'=>1, - 'che_반계_백우선'=>1, - 'che_행동_서촉지형도'=>1, + 'che_의술_청낭서' => 1, 'che_의술_태평청령' => 1, 'che_의술_상한잡병론' => 1, + 'che_부적_태현청생부' => 1, + 'che_저격_매화수전' => 1, 'che_저격_비도' => 1, + 'che_계략_육도' => 1, 'che_계략_삼략' => 1, + 'che_반계_백우선' => 1, + 'che_행동_서촉지형도' => 1, - 'che_훈련_과실주'=>1, 'che_훈련_이강주'=>1, 'che_사기_두강주'=>1, 'che_사기_보령압주'=>1, - 'che_훈련_철벽서'=>1, 'che_훈련_단결도'=>1, 'che_사기_춘화첩'=>1, 'che_사기_초선화'=>1, - 'che_회피_태평요술'=>1, 'che_회피_둔갑천서'=>1, + 'che_훈련_과실주' => 1, 'che_훈련_이강주' => 1, 'che_사기_두강주' => 1, 'che_사기_보령압주' => 1, + 'che_훈련_철벽서' => 1, 'che_훈련_단결도' => 1, 'che_사기_춘화첩' => 1, 'che_사기_초선화' => 1, + 'che_회피_태평요술' => 1, 'che_회피_둔갑천서' => 1, ] ]; /** @var array 선택 가능한 커맨드 */ public static $availableGeneralCommand = [ - ''=>[ + '' => [ '휴식', 'che_요양' ], - '내정'=>[ + '내정' => [ 'che_농지개간', 'che_상업투자', 'che_기술연구', @@ -253,7 +259,7 @@ class GameConstBase 'che_주민선정', 'che_물자조달', ], - '군사'=>[ + '군사' => [ 'che_소집해제', 'che_첩보', 'che_징병', @@ -262,7 +268,7 @@ class GameConstBase 'che_사기진작', 'che_출병', ], - '인사'=>[ + '인사' => [ 'che_이동', 'che_강행', 'che_인재탐색', @@ -273,13 +279,13 @@ class GameConstBase 'che_랜덤임관', 'che_장수대상임관', ], - '계략'=>[ + '계략' => [ 'che_화계', 'che_파괴', 'che_탈취', 'che_선동', ], - '개인'=>[ + '개인' => [ 'che_내정특기초기화', 'che_전투특기초기화', 'che_단련', @@ -301,28 +307,28 @@ class GameConstBase /** @var array 선택 가능한 커맨드 */ public static $availableChiefCommand = [ - '휴식'=>[ + '휴식' => [ '휴식', ], - '인사'=>[ + '인사' => [ 'che_발령', 'che_포상', 'che_몰수', ], - '외교'=>[ + '외교' => [ 'che_물자원조', 'che_불가침제의', 'che_선전포고', 'che_종전제의', 'che_불가침파기제의', ], - '특수'=>[ + '특수' => [ 'che_초토화', 'che_천도', 'che_증축', 'che_감축', ], - '전략'=>[ + '전략' => [ 'che_필사즉생', 'che_백성동원', 'che_수몰', @@ -331,7 +337,7 @@ class GameConstBase 'che_이호경식', 'che_급습', ], - '기타'=>[ + '기타' => [ 'che_피장파장', 'che_국기변경', 'che_국호변경',