object; $logger = $general->getLogger(); if ($general->getVar('injury') > 0) { $general->updateVar('injury', 0); $general->activateSkill('pre.부상경감', 'pre.치료'); $logger->pushGeneralActionLog('의술을 펼쳐 스스로 치료합니다!', ActionLogger::PLAIN); } $db = DB::db(); if ($general->getNationID() == 0) { /** @var array{int,string,string}[] $patients */ $patients = $db->queryAllLists( 'SELECT no,name,nation FROM general WHERE city=%i AND nation=%i AND injury > 10 AND no != %i', $general->getCityID(), 0, $general->getID() ); } else { /** @var array{int,string,string}[] $patients */ $patients = $db->queryAllLists( 'SELECT no,name,nation FROM general WHERE city=%i AND injury > 10 AND no != %i', $general->getCityID(), $general->getID() ); } if (!$patients) { return $env; } $generalName = $general->getName(); $josaYi = JosaUtil::pick($generalName, '이'); $cureList = []; /** @var string|null */ $curedPatientName = null; foreach ($patients as [$patientID, $patientName, $patientNationID]) { if (!$rng->nextBool(0.5)) { continue; } $cureList[] = $patientID; $curedPatientName = $patientName; $patientLogger = new ActionLogger($patientID, $patientNationID, $logger->getYear(), $logger->getMonth()); $patientLogger->pushGeneralActionLog("{$generalName}{$josaYi} 의술로써 치료해줍니다!", ActionLogger::PLAIN); $patientLogger->flush(); } if (!$cureList) { return $env; } if ($curedPatientName === null) { throw new \sammo\MustNotBeReachedException(); } if (count($cureList) == 1) { $josaUl = JosaUtil::pick($curedPatientName, "을"); $logger->pushGeneralActionLog("의술을 펼쳐 도시의 장수 {$curedPatientName}{$josaUl} 치료합니다!", ActionLogger::PLAIN); } else { $otherCount = count($cureList) - 1; $logger->pushGeneralActionLog("의술을 펼쳐 도시의 장수들 {$curedPatientName} 외 {$otherCount}명을 치료합니다!", ActionLogger::PLAIN); } $db->update('general', [ 'injury' => 0 ], 'no IN %li', $cureList); return $env; } }