From e229b207c1102ea4b4925cf257c893e9f5d51d2b Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 21 Apr 2020 01:19:24 +0900 Subject: [PATCH] =?UTF-8?q?=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hwe/a_bestGeneral.php | 2 +- hwe/a_hallOfFame.php | 2 +- hwe/func_tournament.php | 4 +- hwe/sammo/AutorunNationPolicy.php | 6 +- hwe/sammo/GeneralAI.php | 14 +-- hwe/sammo/TextDecoration/DyingMessage.php | 114 +++++++++++----------- src/sammo/JosaUtil.php | 61 +++++++++--- src/sammo/Util.php | 4 +- 8 files changed, 120 insertions(+), 87 deletions(-) diff --git a/hwe/a_bestGeneral.php b/hwe/a_bestGeneral.php index 2d94039c..5f555b09 100644 --- a/hwe/a_bestGeneral.php +++ b/hwe/a_bestGeneral.php @@ -307,7 +307,7 @@ foreach(GameConst::$allItems as $itemType=>$itemList){ 'nationName'=>$general['nationName'], 'name'=>$general['name'], 'bgColor'=>$general['bgColor'], - 'fgColor'=>$general['dfColor'], + 'fgColor'=>$general['fgColor'], ]; $itemRanker[] = $card; } diff --git a/hwe/a_hallOfFame.php b/hwe/a_hallOfFame.php index 2b40acc9..2afeda5b 100644 --- a/hwe/a_hallOfFame.php +++ b/hwe/a_hallOfFame.php @@ -81,7 +81,7 @@ else{ -
+
query('SELECT no, %b as bet FROM betting WHERE %b > 0', $betKey, $betKey), 'no'); + $gambleResult = Util::convertArrayToDict($db->query('SELECT general_id, %b as bet FROM betting WHERE %b > 0', $betKey, $betKey), 'general_id'); - foreach(General::createGeneralObjListFromDB(Util::squeezeFromArray($gambleResult, 'no'), ['gold'], 1) as $gambler){ + foreach(General::createGeneralObjListFromDB(Util::squeezeFromArray($gambleResult, 'general_id'), ['gold'], 1) as $gambler){ $reward = Util::round($gambleResult[$gambler->getID()]['bet'] * $rewardRate); $gambler->increaseVar('gold', $reward); $gambler->increaseRankVar('betwingold', $reward); diff --git a/hwe/sammo/AutorunNationPolicy.php b/hwe/sammo/AutorunNationPolicy.php index 8b9e71fe..abf38b99 100644 --- a/hwe/sammo/AutorunNationPolicy.php +++ b/hwe/sammo/AutorunNationPolicy.php @@ -119,8 +119,10 @@ class AutorunNationPolicy { public $DevelopForce = [ //123=>true ]; - public $reqHumanWarGold = [10000, 30000]; - public $reqHumanWarRice = [10000, 30000]; + public $reqHumanWarUrgentGold = 10000; + public $reqHumanWarUrgentRice = 10000; + public $reqHumanWarRecommandGold = 30000; + public $reqHumanWarRecommandRice = 30000; public $reqHumanDevelGold = 10000; public $reqHumanDevelRice = 10000; public $reqNPCWarGold = 5000; diff --git a/hwe/sammo/GeneralAI.php b/hwe/sammo/GeneralAI.php index 21391d34..099617f8 100644 --- a/hwe/sammo/GeneralAI.php +++ b/hwe/sammo/GeneralAI.php @@ -1002,11 +1002,11 @@ class GeneralAI $remainResource = [ 'gold' => [ $nation['gold'], - $this->nationPolicy->reqHumanWarGold + $this->nationPolicy->reqHumanWarUrgentGold ], 'rice' => [ $nation['rice'], - $this->nationPolicy->reqHumanWarRice + $this->nationPolicy->reqHumanWarUrgentRice ] ]; @@ -1077,12 +1077,12 @@ class GeneralAI $remainResource = [ 'gold' => [ $nation['gold'], - $this->nationPolicy->reqHumanWarGold, + $this->nationPolicy->reqHumanWarRecommandGold, $this->nationPolicy->reqHumanDevelGold, ], 'rice' => [ $nation['rice'], - $this->nationPolicy->reqHumanWarRice, + $this->nationPolicy->reqHumanWarRecommandRice, $this->nationPolicy->reqHumanDevelRice ] ]; @@ -1304,10 +1304,6 @@ class GeneralAI } $enoughMoney = $reqNPCMinDevelRes * 1.5; - - if ($targetNPCGeneral->getVar($resName) >= $reqMoney) { - continue; - } $payAmount = $enoughMoney - $targetNPCGeneral->getVar($resName); $payAmount = Util::valueFit($payAmount, 100, GameConst::$maxResourceActionAmount); @@ -2946,7 +2942,7 @@ class GeneralAI /** @var ?NationCommand */ $result = $this->{'do'.$actionName}($lastTurn); if($result !== null){ - $reservedCommand->reason = 'do'.$actionName; + $result->reason = 'do'.$actionName; return $result; } } diff --git a/hwe/sammo/TextDecoration/DyingMessage.php b/hwe/sammo/TextDecoration/DyingMessage.php index 464cda62..cb464c7b 100644 --- a/hwe/sammo/TextDecoration/DyingMessage.php +++ b/hwe/sammo/TextDecoration/DyingMessage.php @@ -10,55 +10,55 @@ class DyingMessage{ private $realName; private $npc; - static protected $defaultMessage = ':name::이: 사망했습니다.'; + static protected $defaultMessage = ';name;;이; 사망했습니다.'; static protected $messages = null; static protected $scenarioNPCMessages = null; static protected $utilNPCMessages = null; protected static function getMessageList():array{ return [ - ':name::이: 역병에 걸려 죽고 말았습니다.', - ':name::이: 요절하고 말았습니다.', - ':name::이: 거리에서 갑자기 객사하고 말았습니다.', - ':name::이: 안타깝게도 번개에 맞아 죽고 말았습니다.', - ':name::이: 고리대금에 시달리다가 자살하고 말았습니다.', - ':name::이: 일확천금에 놀라 심장마비로 죽고 말았습니다.', - ':name::이: 산속에서 호랑이에게 물려 죽고 말았습니다.', - ':name::이: 산책중 곰에게 할퀴어 죽고 말았습니다.', - ':name::이: 수영을 하다 익사하고 말았습니다.', - ':name::이: 황제를 모독하다가 처형당하고 말았습니다.', - ':name::이: 이튿날 침실에서 죽은채로발견되었습니다.', - ':name::이: 색에 빠져 기력이 쇠진해 죽고말았습니다.', - ':name::이: 미녀를 보고 심장마비로 죽고말았습니다.', - ':name::이: 우울증에 걸려 자살하고 말았습니다.', - ':name::이: 천하 정세를 비관하며 분신하고 말았습니다.', - ':name::이: 어떤 관심도 못받고 쓸쓸히 죽고말았습니다.', - ':name::이: 유산 상속 문제로 다투다가 살해당했습니다.', - ':name::이: 누군가의 사주로 자객에게 암살당했습니다.', - ':name::이: 바람난 배우자에게 독살당하고 말았습니다.', - ':name::이: 농약을 술인줄 알고 마셔 죽고말았습니다.', - ':name::이: 아무 이유 없이 죽고말았습니다.', - ':name::이: 전재산을 잃고 화병으로 죽고말았습니다.', - ':name::이: 단식운동을 하다가 굶어 죽고말았습니다.', - ':name::이: 귀신에게 홀려 시름 앓다가 죽고말았습니다.', - ':name::이: 사람들에게 집단으로 맞아서 죽고말았습니다.', - ':name::이: 갑자기 성벽에서 뛰어내려 죽고말았습니다.', - ':name::이: 농사중 호미에 머리를 맞아 죽고말았습니다.', - ':name::이: 저세상이 궁금하다며 자살하고 말았습니다.', - '운좋기로 소문난 :name::이: 불운하게도 죽고말았습니다.', - ':name::이: 무리하게 단련을 하다가 죽고말았습니다.', - ':name::이: 생활고를 비관하며 자살하고 말았습니다.', - ':name::이: 평생 결혼도 못해보고 죽고 말았습니다.', - ':name::이: 과식하다 배가 터져 죽고 말았습니다.', - ':name::이: 웃다가 숨이 넘어가 죽고 말았습니다.', - ':name::이: 추녀를 보고 놀라서 죽고 말았습니다.', - ':name::이: 물에 빠진 사람을 구하려다 같이 죽고 말았습니다.', - ':name::이: 독살을 준비하다 독에 걸려 죽고 말았습니다.', - ':name::이: 뒷간에서 너무 힘을 주다가 죽고 말았습니다.', - ':name::이: 돌팔이 의사에게 치료받다가 죽고 말았습니다.', - ':name::이: 남의 보약을 훔쳐먹다 부작용으로 죽고 말았습니다.', - '희대의 사기꾼 :name::이: 사망했습니다.', - '희대의 호색한 :name::이: 사망했습니다.', + ';name;;이; 역병에 걸려 죽고 말았습니다.', + ';name;;이; 요절하고 말았습니다.', + ';name;;이; 거리에서 갑자기 객사하고 말았습니다.', + ';name;;이; 안타깝게도 번개에 맞아 죽고 말았습니다.', + ';name;;이; 고리대금에 시달리다가 자살하고 말았습니다.', + ';name;;이; 일확천금에 놀라 심장마비로 죽고 말았습니다.', + ';name;;이; 산속에서 호랑이에게 물려 죽고 말았습니다.', + ';name;;이; 산책중 곰에게 할퀴어 죽고 말았습니다.', + ';name;;이; 수영을 하다 익사하고 말았습니다.', + ';name;;이; 황제를 모독하다가 처형당하고 말았습니다.', + ';name;;이; 이튿날 침실에서 죽은채로발견되었습니다.', + ';name;;이; 색에 빠져 기력이 쇠진해 죽고말았습니다.', + ';name;;이; 미녀를 보고 심장마비로 죽고말았습니다.', + ';name;;이; 우울증에 걸려 자살하고 말았습니다.', + ';name;;이; 천하 정세를 비관하며 분신하고 말았습니다.', + ';name;;이; 어떤 관심도 못받고 쓸쓸히 죽고말았습니다.', + ';name;;이; 유산 상속 문제로 다투다가 살해당했습니다.', + ';name;;이; 누군가의 사주로 자객에게 암살당했습니다.', + ';name;;이; 바람난 배우자에게 독살당하고 말았습니다.', + ';name;;이; 농약을 술인줄 알고 마셔 죽고말았습니다.', + ';name;;이; 아무 이유 없이 죽고말았습니다.', + ';name;;이; 전재산을 잃고 화병으로 죽고말았습니다.', + ';name;;이; 단식운동을 하다가 굶어 죽고말았습니다.', + ';name;;이; 귀신에게 홀려 시름 앓다가 죽고말았습니다.', + ';name;;이; 사람들에게 집단으로 맞아서 죽고말았습니다.', + ';name;;이; 갑자기 성벽에서 뛰어내려 죽고말았습니다.', + ';name;;이; 농사중 호미에 머리를 맞아 죽고말았습니다.', + ';name;;이; 저세상이 궁금하다며 자살하고 말았습니다.', + '운좋기로 소문난 ;name;;이; 불운하게도 죽고말았습니다.', + ';name;;이; 무리하게 단련을 하다가 죽고말았습니다.', + ';name;;이; 생활고를 비관하며 자살하고 말았습니다.', + ';name;;이; 평생 결혼도 못해보고 죽고 말았습니다.', + ';name;;이; 과식하다 배가 터져 죽고 말았습니다.', + ';name;;이; 웃다가 숨이 넘어가 죽고 말았습니다.', + ';name;;이; 추녀를 보고 놀라서 죽고 말았습니다.', + ';name;;이; 물에 빠진 사람을 구하려다 같이 죽고 말았습니다.', + ';name;;이; 독살을 준비하다 독에 걸려 죽고 말았습니다.', + ';name;;이; 뒷간에서 너무 힘을 주다가 죽고 말았습니다.', + ';name;;이; 돌팔이 의사에게 치료받다가 죽고 말았습니다.', + ';name;;이; 남의 보약을 훔쳐먹다 부작용으로 죽고 말았습니다.', + '희대의 사기꾼 ;name;;이; 사망했습니다.', + '희대의 호색한 ;name;;이; 사망했습니다.', ]; } @@ -70,16 +70,16 @@ class DyingMessage{ protected static function getUtilNPCMessageList():array{ return [ - ':name::이: 푸대접에 실망하여 떠났습니다.', - ':name::이: 갑자기 화를 내며 떠났습니다.', - ':name::이: 의견차이를 좁히지 못하고 떠났습니다.', - ':name::이: 판단 착오였다며 떠났습니다.', - ':name::이: 생활고가 나아지지 않는다며 떠났습니다.', - ':name::이: 기대가 너무 컸다며 떠났습니다.', - ':name::이: 아무 이유 없이 떠났습니다.', - ':name::이: 자기 목적은 달성했다며 떠났습니다.', - ':name::이: 자기가 없어도 될것 같다며 떠났습니다.', - ':name::이: 처자식이 그립다며 떠났습니다.', + ';name;;이; 푸대접에 실망하여 떠났습니다.', + ';name;;이; 갑자기 화를 내며 떠났습니다.', + ';name;;이; 의견차이를 좁히지 못하고 떠났습니다.', + ';name;;이; 판단 착오였다며 떠났습니다.', + ';name;;이; 생활고가 나아지지 않는다며 떠났습니다.', + ';name;;이; 기대가 너무 컸다며 떠났습니다.', + ';name;;이; 아무 이유 없이 떠났습니다.', + ';name;;이; 자기 목적은 달성했다며 떠났습니다.', + ';name;;이; 자기가 없어도 될것 같다며 떠났습니다.', + ';name;;이; 처자식이 그립다며 떠났습니다.', ]; } @@ -120,13 +120,13 @@ class DyingMessage{ } if($this->realName){ - $text = str_replace(':name:', $name."({$this->realName})", $text); + $text = str_replace(';name;', ";{$name};({$this->realName})", $text); } else{ - $text = str_replace(':name:', $name, $text); + $text = str_replace(';name;', ";{$name};", $text); } - JosaUtil::batch($text, $name); - return $text; + + return JosaUtil::batch($text, $name); } } \ No newline at end of file diff --git a/src/sammo/JosaUtil.php b/src/sammo/JosaUtil.php index d078e44c..377e61a8 100644 --- a/src/sammo/JosaUtil.php +++ b/src/sammo/JosaUtil.php @@ -604,23 +604,58 @@ class JosaUtil{ }; } - public static function batch(string $text, string $key, array $decorator =[':',':']){ + public static function batch(string $text, string $decorator = ';'){ JosaUtil::init(); - $search = []; - $replace = []; + if($decorator === ';'){ + preg_match_all('/;([^;]+);/', $text, $matches, PREG_OFFSET_CAPTURE); + } + else{ + $decorator = preg_quote($decorator); + $pattern = "/{$decorator}([^{$decorator}]+){$decorator}/"; + preg_match_all($pattern, $text, $matches, PREG_OFFSET_CAPTURE); + } + - $prefix = ':'; - $postfix = ':'; - - foreach(static::DEFAULT_POSTPOSITION as $wJong => $woJong){ - $value = JosaUtil::pick($key, $wJong); - $search[] = "{$prefix}{$wJong}{$postfix}"; - $replace[] = $value; - $search[] = "{$prefix}{$woJong}{$postfix}"; - $replace[] = $value; + $matchCnt = count($matches[0]); + if($matchCnt & 1){ + $matchCnt -= 1; } - return str_replace($search, $replace, $text); + if(!$matchCnt){ + return $text; + } + + $result = []; + $prePos = 0; + foreach(Util::range(0, $matchCnt, 2) as $matchIdx){ + $bodyRawText = $matches[0][$matchIdx][0]; + $bodyText = $matches[1][$matchIdx][0]; + $bodyRawPos = $matches[0][$matchIdx][1]; + if($bodyRawPos > $prePos){ + $result[] = substr($text, $prePos, $bodyRawPos - $prePos); + } + $prePos = $bodyRawPos + strlen($bodyRawText); + + $result[] = $bodyText; + + $josaRawText = $matches[0][$matchIdx+1][0]; + $josaText = $matches[1][$matchIdx+1][0]; + $josaRawPos = $matches[0][$matchIdx+1][1]; + + if($josaRawPos > $prePos){ + $result[] = substr($text, $prePos, $josaRawPos - $prePos); + } + $prePos = $josaRawPos + strlen($josaRawText); + + $pickedJosa = JosaUtil::pick($bodyText, $josaText); + $result[] = $pickedJosa; + } + $textLen = strlen($text); + if($prePos < $textLen){ + $result[] = substr($text, $prePos, $textLen - $prePos); + } + + return join('', $result); } } \ No newline at end of file diff --git a/src/sammo/Util.php b/src/sammo/Util.php index ef94b676..6e55791a 100644 --- a/src/sammo/Util.php +++ b/src/sammo/Util.php @@ -776,13 +776,13 @@ class Util extends \utilphp\util if($step > 0){ while($from < $to){ yield $from; - $from += 1; + $from += $step; } } else{ while($from > $to){ yield $from; - $from -= 1; + $from -= $step; } } }