feat,refac: 게임 로직 내 '랜덤'을 RandUtil을 활용하여 재설정

- 기존의 랜덤 코드는 deprecated 처리
- 서버 시작 시 랜덤하게 정해진 hiddenSeed를 활용
- 랜덤 생성 단위
  - 월 실행
  - 사령턴 실행 결과
  - 커맨드 실행 결과
  - 작위 보상
  - 부대장 생성
  - 유니크 획득 시도
  - 설문 조사
  - 장수 생성
  - NPC국 생성, NPC 생성, NPC의 토너먼트 베팅
  - 전투
  - 도시 점령
  - 자율 행동 선택
  - 랜덤 턴 변경
- 거래장, 토너먼트 등 구 랜덤 코드를 이용하는 잔여 코드 있음
This commit is contained in:
2022-05-17 03:46:59 +09:00
parent 2cb697f3dc
commit c5ceff6fb5
136 changed files with 1000 additions and 784 deletions
+19 -4
View File
@@ -20,6 +20,9 @@ use \sammo\Constraint\Constraint;
use \sammo\Constraint\ConstraintHelper;
use sammo\CityConst;
use sammo\Enums\InheritanceKey;
use sammo\LiteHashDRBG;
use sammo\RandUtil;
use sammo\UniqueConst;
class che_출병 extends Command\GeneralCommand
{
@@ -127,7 +130,7 @@ class che_출병 extends Command\GeneralCommand
return "{$failReason} <G><b>{$destCityName}</b></>{$josaRo} {$commandName} 실패.";
}
public function run(): bool
public function run(RandUtil $rng): bool
{
if (!$this->hasFullConditionMet()) {
throw new \RuntimeException('불가능한 커맨드를 강제로 실행 시도');
@@ -188,7 +191,7 @@ class che_출병 extends Command\GeneralCommand
}
} while (false);
$defenderCityID = (int) Util::choiceRandom($candidateCities);
$defenderCityID = (int) $rng->choice($candidateCities);
$this->setDestCity($defenderCityID);
$defenderCityName = $this->destCity['name'];
$josaRo = JosaUtil::pick($defenderCityName, '로');
@@ -236,9 +239,21 @@ class che_출병 extends Command\GeneralCommand
$general->applyDB($db);
processWar($general, $this->nation, $this->destCity);
tryUniqueItemLottery($general);
//어디로 출병하느냐에 따라 사실 결과가 다르다
$warRngPre = new LiteHashDRBG(Util::simpleSerialize(
UniqueConst::$hiddenSeed,
'war',
$logger->getYear(),
$logger->getMonth(),
$general->getID(),
$defenderCityID,
));
$warRngSeed = bin2hex($warRngPre->nextBytes(16));
processWar($warRngSeed, $general, $this->nation, $this->destCity);
tryUniqueItemLottery(\sammo\genGenericUniqueRNGFromGeneral($general), $general);
$general->applyDB($db);
return true;