refac: RankColumn enum 추가, General의 명장 일람 타입 변경

This commit is contained in:
2022-05-08 23:09:27 +09:00
parent 55012fef95
commit 900235885f
16 changed files with 236 additions and 154 deletions
+9 -7
View File
@@ -2,6 +2,8 @@
namespace sammo; namespace sammo;
use sammo\Enums\RankColumn;
include "lib.php"; include "lib.php";
include "func.php"; include "func.php";
//로그인 검사 //로그인 검사
@@ -551,14 +553,14 @@ if ($str3) {
<td align=center>勝</td> <td align=center>勝</td>
</tr> </tr>
<?php <?php
$prizeColumn = "{$rankColumn}p"; $prizeColumn = RankColumn::from("{$rankColumn}p");
$gameColumn = "{$rankColumn}g"; $gameColumn = RankColumn::from("{$rankColumn}g");
$winColumn = "{$rankColumn}w"; $winColumn = RankColumn::from("{$rankColumn}w");
$drawColumn = "{$rankColumn}d"; $drawColumn = RankColumn::from("{$rankColumn}d");
$loseColumn = "{$rankColumn}l"; $loseColumn = RankColumn::from("{$rankColumn}l");
$tournamentRankerList = General::createGeneralObjListFromDB( $tournamentRankerList = General::createGeneralObjListFromDB(
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn), $db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn->value),
[$prizeColumn, $gameColumn, $winColumn, $drawColumn, $loseColumn, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'], [$prizeColumn->value, $gameColumn->value, $winColumn->value, $drawColumn->value, $loseColumn->value, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
0 0
); );
usort($tournamentRankerList, function (General $lhs, General $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) { usort($tournamentRankerList, function (General $lhs, General $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) {
+33 -31
View File
@@ -4,6 +4,7 @@ namespace sammo;
use DateTime; use DateTime;
use sammo\Enums\InheritanceKey; use sammo\Enums\InheritanceKey;
use sammo\Enums\RankColumn;
use sammo\Event\Action; use sammo\Event\Action;
require_once 'process_war.php'; require_once 'process_war.php';
@@ -758,8 +759,8 @@ function generalInfo2(General $generalObj)
{ {
$general = $generalObj->getRaw(); $general = $generalObj->getRaw();
$winRate = round($generalObj->getRankVar('killnum') / max($generalObj->getRankVar('warnum'), 1) * 100, 2); $winRate = round($generalObj->getRankVar(RankColumn::killnum) / max($generalObj->getRankVar(RankColumn::warnum), 1) * 100, 2);
$killRate = round($generalObj->getRankVar('killcrew') / max($generalObj->getRankVar('deathcrew'), 1) * 100, 2); $killRate = round($generalObj->getRankVar(RankColumn::killcrew) / max($generalObj->getRankVar(RankColumn::deathcrew), 1) * 100, 2);
$experienceBonus = $generalObj->onCalcStat($generalObj, 'experience', 10000) - 10000; $experienceBonus = $generalObj->onCalcStat($generalObj, 'experience', 10000) - 10000;
if ($experienceBonus > 0) { if ($experienceBonus > 0) {
@@ -823,9 +824,9 @@ function generalInfo2(General $generalObj)
</tr> </tr>
<tr> <tr>
<td width=64 style='text-align:center;' class='bg1'><b>전투</b></td> <td width=64 style='text-align:center;' class='bg1'><b>전투</b></td>
<td width=132 style='text-align:center;'>{$generalObj->getRankVar('warnum')}</td> <td width=132 style='text-align:center;'>{$generalObj->getRankVar(RankColumn::warnum)}</td>
<td width=48 style='text-align:center;' class='bg1'><b>계략</b></td> <td width=48 style='text-align:center;' class='bg1'><b>계략</b></td>
<td width=98 style='text-align:center;'>{$generalObj->getRankVar('firenum')}</td> <td width=98 style='text-align:center;'>{$generalObj->getRankVar(RankColumn::firenum)}</td>
<td width=48 style='text-align:center;' class='bg1'><b>사관</b></td> <td width=48 style='text-align:center;' class='bg1'><b>사관</b></td>
<td width=98 style='text-align:center;'>{$general['belong']}년</td> <td width=98 style='text-align:center;'>{$general['belong']}년</td>
</tr> </tr>
@@ -833,17 +834,17 @@ function generalInfo2(General $generalObj)
<td style='text-align:center;' class='bg1'><b>승률</b></td> <td style='text-align:center;' class='bg1'><b>승률</b></td>
<td style='text-align:center;'>{$winRate} %</td> <td style='text-align:center;'>{$winRate} %</td>
<td style='text-align:center;' class='bg1'><b>승리</b></td> <td style='text-align:center;' class='bg1'><b>승리</b></td>
<td style='text-align:center;'>{$generalObj->getRankVar('killnum')}</td> <td style='text-align:center;'>{$generalObj->getRankVar(RankColumn::killnum)}</td>
<td style='text-align:center;' class='bg1'><b>패배</b></td> <td style='text-align:center;' class='bg1'><b>패배</b></td>
<td style='text-align:center;'>{$generalObj->getRankVar('deathnum')}</td> <td style='text-align:center;'>{$generalObj->getRankVar(RankColumn::deathnum)}</td>
</tr> </tr>
<tr> <tr>
<td style='text-align:center;' class='bg1'><b>살상률</b></td> <td style='text-align:center;' class='bg1'><b>살상률</b></td>
<td style='text-align:center;'>{$killRate} %</td> <td style='text-align:center;'>{$killRate} %</td>
<td style='text-align:center;' class='bg1'><b>사살</b></td> <td style='text-align:center;' class='bg1'><b>사살</b></td>
<td style='text-align:center;'>{$generalObj->getRankVar('killcrew')}</td> <td style='text-align:center;'>{$generalObj->getRankVar(RankColumn::killcrew)}</td>
<td style='text-align:center;' class='bg1'><b>피살</b></td> <td style='text-align:center;' class='bg1'><b>피살</b></td>
<td style='text-align:center;'>{$generalObj->getRankVar('deathcrew')}</td> <td style='text-align:center;'>{$generalObj->getRankVar(RankColumn::deathcrew)}</td>
</tr> </tr>
</table> </table>
<table width=498 class='tb_layout bg2 f_tnum'> <table width=498 class='tb_layout bg2 f_tnum'>
@@ -1376,6 +1377,7 @@ function CheckHall($no)
$db = DB::db(); $db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env'); $gameStor = KVStorage::getStorage($db, 'game_env');
//TODO: Enum타입을 두종류로 넣고, raw string이면 calcVar에서 받아오면?
$types = [ $types = [
["experience", 'natural'], ["experience", 'natural'],
["dedication", 'natural'], ["dedication", 'natural'],
@@ -1405,33 +1407,33 @@ function CheckHall($no)
$generalObj = General::createGeneralObjFromDB($no, null, 2); $generalObj = General::createGeneralObjFromDB($no, null, 2);
$ttw = $generalObj->getRankVar('ttw'); $ttw = $generalObj->getRankVar(RankColumn::ttw);
$ttd = $generalObj->getRankVar('ttd'); $ttd = $generalObj->getRankVar(RankColumn::ttd);
$ttl = $generalObj->getRankVar('ttl'); $ttl = $generalObj->getRankVar(RankColumn::ttl);
$tlw = $generalObj->getRankVar('tlw'); $tlw = $generalObj->getRankVar(RankColumn::tlw);
$tld = $generalObj->getRankVar('tld'); $tld = $generalObj->getRankVar(RankColumn::tld);
$tll = $generalObj->getRankVar('tll'); $tll = $generalObj->getRankVar(RankColumn::tll);
$tsw = $generalObj->getRankVar('tsw'); $tsw = $generalObj->getRankVar(RankColumn::tsw);
$tsd = $generalObj->getRankVar('tsd'); $tsd = $generalObj->getRankVar(RankColumn::tsd);
$tsl = $generalObj->getRankVar('tsl'); $tsl = $generalObj->getRankVar(RankColumn::tsl);
$tiw = $generalObj->getRankVar('tiw'); $tiw = $generalObj->getRankVar(RankColumn::tiw);
$tid = $generalObj->getRankVar('tid'); $tid = $generalObj->getRankVar(RankColumn::tid);
$til = $generalObj->getRankVar('til'); $til = $generalObj->getRankVar(RankColumn::til);
$betWinGold = $generalObj->getRankVar('betwingold'); $betWinGold = $generalObj->getRankVar(RankColumn::betwingold);
$betGold = Util::valueFit($generalObj->getRankVar('betgold'), 1); $betGold = Util::valueFit($generalObj->getRankVar(RankColumn::betgold), 1);
$win = $generalObj->getRankVar('killnum'); $win = $generalObj->getRankVar(RankColumn::killnum);
$war = Util::valueFit($generalObj->getRankVar('warnum'), 1); $war = Util::valueFit($generalObj->getRankVar(RankColumn::warnum), 1);
$kill = $generalObj->getRankVar('killcrew'); $kill = $generalObj->getRankVar(RankColumn::killcrew);
$death = Util::valueFit($generalObj->getRankVar('deathcrew'), 1); $death = Util::valueFit($generalObj->getRankVar(RankColumn::deathcrew), 1);
$killPerson = $generalObj->getRankVar('killcrew_person'); $killPerson = $generalObj->getRankVar(RankColumn::killcrew_person);
$deathPerson = Util::valueFit($generalObj->getRankVar('deathcrew_person'), 1); $deathPerson = Util::valueFit($generalObj->getRankVar(RankColumn::deathcrew_person), 1);
$tt = Util::valueFit($ttw + $ttd + $ttl, 1); $tt = Util::valueFit($ttw + $ttd + $ttl, 1);
$tl = Util::valueFit($tlw + $tld + $tll, 1); $tl = Util::valueFit($tlw + $tld + $tll, 1);
@@ -1469,13 +1471,13 @@ function CheckHall($no)
if ($valueType === 'natural') { if ($valueType === 'natural') {
$value = $generalObj->getVar($typeName); $value = $generalObj->getVar($typeName);
} else if ($valueType === 'rank') { } else if ($valueType === 'rank') {
$value = $generalObj->getRankVar($typeName); $value = $generalObj->getRankVar(RankColumn::from($typeName));
} else if ($valueType === 'calc') { } else if ($valueType === 'calc') {
$value = $calcVar[$typeName]; $value = $calcVar[$typeName];
} }
//승률,살상률인데 10회 미만 전투시 스킵 //승률,살상률인데 10회 미만 전투시 스킵
if (($typeName === 'winrate' || $typeName === 'killrate') && $generalObj->getRankVar('warnum') < 10) { if (($typeName === 'winrate' || $typeName === 'killrate') && $generalObj->getRankVar(RankColumn::warnum) < 10) {
continue; continue;
} }
//토너승률인데 50회 미만시 스킵 //토너승률인데 50회 미만시 스킵
@@ -1495,7 +1497,7 @@ function CheckHall($no)
continue; continue;
} }
//수익률인데 1000미만시 스킵 //수익률인데 1000미만시 스킵
if ($typeName === 'betrate' && $generalObj->getRankVar('betgold') < 1000) { if ($typeName === 'betrate' && $generalObj->getRankVar(RankColumn::betgold) < 1000) {
continue; continue;
} }
+25 -20
View File
@@ -1,6 +1,9 @@
<?php <?php
namespace sammo; namespace sammo;
use Ds\Map;
use sammo\Enums\RankColumn;
include "lib.php"; include "lib.php";
include "func.php"; include "func.php";
@@ -54,7 +57,7 @@ $defaultCheck = [
['year', 0] ['year', 0]
], ],
'array'=>[ 'array'=>[
'attackerGeneral', 'attackerCity', 'attackerNation', 'attackerGeneral', 'attackerCity', 'attackerNation',
'defenderGenerals', 'defenderCity', 'defenderNation' 'defenderGenerals', 'defenderCity', 'defenderNation'
], ],
]; ];
@@ -84,14 +87,14 @@ $rawDefenderNation = $query['defenderNation'];
$generalCheck = [ $generalCheck = [
'required'=>[ 'required'=>[
'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train', 'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item', 'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item',
'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
'recent_war', 'warnum', 'killnum', 'killcrew', 'recent_war', 'warnum', 'killnum', 'killcrew',
], ],
'integer'=>[ 'integer'=>[
'no', 'nation', 'crew', 'crewtype', 'atmos', 'train', 'no', 'nation', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_exp', 'strength', 'strength_exp', 'injury', 'leadership', 'leadership_exp', 'intel', 'intel_exp', 'strength', 'strength_exp', 'injury', 'leadership', 'leadership_exp',
'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5', 'explevel', 'experience', 'dedication', 'officer_level', 'officer_city', 'gold', 'rice', 'dex1', 'dex2', 'dex3', 'dex4', 'dex5',
'warnum', 'killnum', 'killcrew', 'warnum', 'killnum', 'killcrew',
], ],
@@ -154,18 +157,18 @@ foreach($rawDefenderList as $idx=>$rawDefenderGeneral){
]); ]);
} }
$rawDefenderGeneral['owner'] = 0; $rawDefenderGeneral['owner'] = 0;
$defenderList[] = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true); $defenderList[] = new General($rawDefenderGeneral, extractRankVar($rawDefenderGeneral), $rawDefenderCity, $rawAttackerNation, $year, $month, true);
} }
$cityCheck = [ $cityCheck = [
'required'=>[ 'required'=>[
'city', 'nation', 'supply', 'name', 'city', 'nation', 'supply', 'name',
'pop', 'agri', 'comm', 'secu', 'def', 'wall', 'pop', 'agri', 'comm', 'secu', 'def', 'wall',
'trust', 'level', 'trust', 'level',
'pop_max', 'agri_max', 'comm_max', 'secu_max', 'def_max', 'wall_max', 'pop_max', 'agri_max', 'comm_max', 'secu_max', 'def_max', 'wall_max',
'dead', 'state', 'conflict', 'dead', 'state', 'conflict',
], ],
'numeric'=>[ 'numeric'=>[
'pop', 'agri', 'comm', 'secu', 'def', 'wall', 'trust', 'dead' 'pop', 'agri', 'comm', 'secu', 'def', 'wall', 'trust', 'dead'
@@ -258,7 +261,7 @@ if($action == 'reorder'){
foreach($defenderList as $defenderGeneral){ foreach($defenderList as $defenderGeneral){
$order[] = $defenderGeneral->getID(); $order[] = $defenderGeneral->getID();
} }
Json::die([ Json::die([
'result'=>true, 'result'=>true,
'reason'=>'success', 'reason'=>'success',
@@ -280,19 +283,21 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
$startYear = $gameStor->startyear; $startYear = $gameStor->startyear;
$cityRate = Util::round(($year - $startYear) / 1.5) + 60; $cityRate = Util::round(($year - $startYear) / 1.5) + 60;
function extractRankVar(array $rawVal):array{ function extractRankVar(array $rawVal):Map{
$rankVars = []; $rankVars = new Map;
foreach($rawVal as $rawKey=>$rawVal){ foreach($rawVal as $rawKey=>$rawVal){
if(key_exists($rawKey, General::RANK_COLUMN)){ $key = RankColumn::tryFrom($rawKey);
$rankVars[$rawKey] = $rawVal; if($key === null){
continue;
} }
$rankVars[$key] = $rawVal;
} }
return $rankVars; return $rankVars;
} }
function simulateBattle( function simulateBattle(
$rawAttacker, $rawAttackerCity, $rawAttackerNation, $rawAttacker, $rawAttackerCity, $rawAttackerNation,
$rawDefenderList, $rawDefenderCity, $rawDefenderNation, $rawDefenderList, $rawDefenderCity, $rawDefenderNation,
$startYear, $year, $month, $cityRate $startYear, $year, $month, $cityRate
){ ){
$attacker = new WarUnitGeneral( $attacker = new WarUnitGeneral(
@@ -310,7 +315,7 @@ function simulateBattle(
$attackerRice = $rawAttacker['rice']; $attackerRice = $rawAttacker['rice'];
$defenderRice = 0; $defenderRice = 0;
$getNextDefender = function(?WarUnit $prevDefender, bool $reqNext) $getNextDefender = function(?WarUnit $prevDefender, bool $reqNext)
use ($iterDefender, $rawDefenderCity, $rawDefenderNation, $year, $month, &$battleResult, &$defenderRice) { use ($iterDefender, $rawDefenderCity, $rawDefenderNation, $year, $month, &$battleResult, &$defenderRice) {
if($prevDefender !== null){ if($prevDefender !== null){
$prevDefender->getLogger()->rollback(); $prevDefender->getLogger()->rollback();
@@ -393,13 +398,13 @@ $defendersActivatedSkills = [];
foreach(Util::range($repeatCnt) as $repeatIdx){ foreach(Util::range($repeatCnt) as $repeatIdx){
/** @var WarUnit $attacker */ /** @var WarUnit $attacker */
[$attacker, $city, $battleResult, $conquerCity, $attackerRice, $defenderRice] = simulateBattle( [$attacker, $city, $battleResult, $conquerCity, $attackerRice, $defenderRice] = simulateBattle(
$rawAttacker, $rawAttackerCity, $rawAttackerNation, $rawAttacker, $rawAttackerCity, $rawAttackerNation,
$rawDefenderList, $rawDefenderCity, $rawDefenderNation, $rawDefenderList, $rawDefenderCity, $rawDefenderNation,
$startYear, $year, $month, $cityRate $startYear, $year, $month, $cityRate
); );
$lastWarLog = Util::mapWithKey(function($key, $values){ $lastWarLog = Util::mapWithKey(function($key, $values){
return ConvertLog(join('<br>', $values)); return ConvertLog(join('<br>', $values));
}, $attacker->getLogger()->rollback()); }, $attacker->getLogger()->rollback());
$avgPhase += $attacker->getPhase() / $repeatCnt; $avgPhase += $attacker->getPhase() / $repeatCnt;
@@ -443,7 +448,7 @@ foreach(Util::range($repeatCnt) as $repeatIdx){
$activatedSkills[$skillName] += $skillCnt / $repeatCnt; $activatedSkills[$skillName] += $skillCnt / $repeatCnt;
} }
} }
} }
} }
+3 -2
View File
@@ -5,6 +5,7 @@ namespace sammo\API\General;
use sammo\ActionLogger; use sammo\ActionLogger;
use sammo\CityConst; use sammo\CityConst;
use sammo\DB; use sammo\DB;
use sammo\Enums\RankColumn;
use sammo\GameConst; use sammo\GameConst;
use sammo\GameUnitConst; use sammo\GameUnitConst;
use sammo\General; use sammo\General;
@@ -369,11 +370,11 @@ class Join extends \sammo\BaseAPI
$db->insert('general_turn', $turnRows); $db->insert('general_turn', $turnRows);
$rank_data = []; $rank_data = [];
foreach (array_keys(General::RANK_COLUMN) as $rankColumn) { foreach (RankColumn::cases() as $rankColumn) {
$rank_data[] = [ $rank_data[] = [
'general_id' => $generalID, 'general_id' => $generalID,
'nation_id' => 0, 'nation_id' => 0,
'type' => $rankColumn, 'type' => $rankColumn->value,
'value' => 0 'value' => 0
]; ];
} }
@@ -1,5 +1,7 @@
<?php <?php
namespace sammo\ActionItem; namespace sammo\ActionItem;
use sammo\Enums\RankColumn;
use \sammo\iAction; use \sammo\iAction;
use \sammo\General; use \sammo\General;
use \sammo\SpecialityHelper; use \sammo\SpecialityHelper;
@@ -30,7 +32,7 @@ class event_전투특기_무쌍 extends \sammo\BaseItem{
} }
$attackMultiplier = 1.05; $attackMultiplier = 1.05;
$defenceMultiplier = 0.98; $defenceMultiplier = 0.98;
$killnum = $unit->getGeneral()->getRankVar('killnum'); $killnum = $unit->getGeneral()->getRankVar(RankColumn::killnum);
$attackMultiplier += log(max(1, $killnum / 5), 2) / 20; $attackMultiplier += log(max(1, $killnum / 5), 2) / 20;
$defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50; $defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50;
return [$attackMultiplier, $defenceMultiplier]; return [$attackMultiplier, $defenceMultiplier];
@@ -1,5 +1,7 @@
<?php <?php
namespace sammo\ActionSpecialDomestic; namespace sammo\ActionSpecialDomestic;
use sammo\Enums\RankColumn;
use \sammo\iAction; use \sammo\iAction;
use \sammo\General; use \sammo\General;
use \sammo\SpecialityHelper; use \sammo\SpecialityHelper;
@@ -32,7 +34,7 @@ class che_event_무쌍 extends \sammo\BaseSpecial{
} }
$attackMultiplier = 1.05; $attackMultiplier = 1.05;
$defenceMultiplier = 0.98; $defenceMultiplier = 0.98;
$killnum = $unit->getGeneral()->getRankVar('killnum'); $killnum = $unit->getGeneral()->getRankVar(RankColumn::killnum);
$attackMultiplier += log(max(1, $killnum / 5), 2) / 20; $attackMultiplier += log(max(1, $killnum / 5), 2) / 20;
$defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50; $defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50;
return [$attackMultiplier, $defenceMultiplier]; return [$attackMultiplier, $defenceMultiplier];
+3 -1
View File
@@ -1,5 +1,7 @@
<?php <?php
namespace sammo\ActionSpecialWar; namespace sammo\ActionSpecialWar;
use sammo\Enums\RankColumn;
use \sammo\iAction; use \sammo\iAction;
use \sammo\General; use \sammo\General;
use \sammo\SpecialityHelper; use \sammo\SpecialityHelper;
@@ -28,7 +30,7 @@ class che_무쌍 extends \sammo\BaseSpecial{
public function getWarPowerMultiplier(WarUnit $unit):array{ public function getWarPowerMultiplier(WarUnit $unit):array{
$attackMultiplier = 1.05; $attackMultiplier = 1.05;
$defenceMultiplier = 0.98; $defenceMultiplier = 0.98;
$killnum = $unit->getGeneral()->getRankVar('killnum'); $killnum = $unit->getGeneral()->getRankVar(RankColumn::killnum);
$attackMultiplier += log(max(1, $killnum / 5), 2) / 20; $attackMultiplier += log(max(1, $killnum / 5), 2) / 20;
$defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50; $defenceMultiplier -= log(max(1, $killnum / 5), 2) / 50;
return [$attackMultiplier, $defenceMultiplier]; return [$attackMultiplier, $defenceMultiplier];
+4 -3
View File
@@ -4,6 +4,7 @@ namespace sammo;
use sammo\DTO\BettingInfo; use sammo\DTO\BettingInfo;
use sammo\DTO\BettingItem; use sammo\DTO\BettingItem;
use sammo\Enums\RankColumn;
class Betting class Betting
{ {
@@ -395,9 +396,9 @@ class Betting
$reward = Util::round($rewardItem['amount']); $reward = Util::round($rewardItem['amount']);
$matchPoint = $rewardItem['matchPoint']; $matchPoint = $rewardItem['matchPoint'];
$gambler->increaseVar('gold', $reward); $gambler->increaseVar('gold', $reward);
if (($gambler->getNPCType() == 0) || ($gambler->getNPCType() == 1 && $gambler->getRankVar('betgold', 0) > 0)) { if (($gambler->getNPCType() == 0) || ($gambler->getNPCType() == 1 && $gambler->getRankVar(RankColumn::betgold, 0) > 0)) {
$gambler->increaseRankVar('betwingold', $reward); $gambler->increaseRankVar(RankColumn::betwingold, $reward);
$gambler->increaseRankVar('betwin', 1); $gambler->increaseRankVar(RankColumn::betwin, 1);
} }
if ($matchPoint == $selectCnt) { if ($matchPoint == $selectCnt) {
+2 -3
View File
@@ -19,8 +19,7 @@ use function sammo\tryRollbackInheritUniqueItem;
use \sammo\Constraint\Constraint; use \sammo\Constraint\Constraint;
use \sammo\Constraint\ConstraintHelper; use \sammo\Constraint\ConstraintHelper;
use sammo\CityConst; use sammo\CityConst;
use sammo\Enums\RankColumn;
class che_화계 extends Command\GeneralCommand class che_화계 extends Command\GeneralCommand
{ {
@@ -330,7 +329,7 @@ class che_화계 extends Command\GeneralCommand
$general->addExperience($exp); $general->addExperience($exp);
$general->addDedication($ded); $general->addDedication($ded);
$general->increaseVar($statType . '_exp', 1); $general->increaseVar($statType . '_exp', 1);
$general->increaseRankVar('firenum', 1); $general->increaseRankVar(RankColumn::firenum, 1);
$this->setResultTurn(new LastTurn(static::getName(), $this->arg)); $this->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange(); $general->checkStatChange();
tryRollbackInheritUniqueItem($general); tryRollbackInheritUniqueItem($general);
+49
View File
@@ -0,0 +1,49 @@
<?php
namespace sammo\Enums;
enum RankColumn: string
{
case firenum = 'firenum';
case warnum = 'warnum';
case killnum = 'killnum';
case deathnum = 'deathnum';
case killcrew = 'killcrew';
case deathcrew = 'deathcrew';
case ttw = 'ttw';
case ttd = 'ttd';
case ttl = 'ttl';
case ttg = 'ttg';
case ttp = 'ttp';
case tlw = 'tlw';
case tld = 'tld';
case tll = 'tll';
case tlg = 'tlg';
case tlp = 'tlp';
case tsw = 'tsw';
case tsd = 'tsd';
case tsl = 'tsl';
case tsg = 'tsg';
case tsp = 'tsp';
case tiw = 'tiw';
case tid = 'tid';
case til = 'til';
case tig = 'tig';
case tip = 'tip';
case betwin = 'betwin';
case betgold = 'betgold';
case betwingold = 'betwingold';
case killcrew_person = 'killcrew_person';
case deathcrew_person = 'deathcrew_person';
case occupied = 'occupied';
case inherit_point_earned = 'inherit_point_earned';
case inherit_point_spent = 'inherit_point_spent';
}
+78 -68
View File
@@ -2,9 +2,10 @@
namespace sammo; namespace sammo;
use Ds\Map;
use sammo\Command\GeneralCommand; use sammo\Command\GeneralCommand;
use sammo\Enums\InheritanceKey; use sammo\Enums\InheritanceKey;
use sammo\VO\InheritancePointType; use sammo\Enums\RankColumn;
use sammo\WarUnitTrigger as WarUnitTrigger; use sammo\WarUnitTrigger as WarUnitTrigger;
class General implements iAction class General implements iAction
@@ -15,9 +16,12 @@ class General implements iAction
protected $rawCity = null; protected $rawCity = null;
protected $rankVarRead = []; /** @var Map<RankColumn,int|float> */
protected $rankVarIncrease = []; protected Map $rankVarRead;
protected $rankVarSet = []; /** @var Map<RankColumn,int|float> */
protected Map $rankVarIncrease;
/** @var Map<RankColumn,int|float> */
protected Map $rankVarSet;
/** @var \sammo\ActionLogger */ /** @var \sammo\ActionLogger */
protected $logger; protected $logger;
@@ -44,17 +48,6 @@ class General implements iAction
protected $lastTurn = null; protected $lastTurn = null;
protected $resultTurn = null; protected $resultTurn = null;
const RANK_COLUMN = [
'firenum' => 1, 'warnum' => 1, 'killnum' => 1, 'deathnum' => 1, 'killcrew' => 1, 'deathcrew' => 1,
'ttw' => 1, 'ttd' => 1, 'ttl' => 1, 'ttg' => 1, 'ttp' => 1,
'tlw' => 1, 'tld' => 1, 'tll' => 1, 'tlg' => 1, 'tlp' => 1,
'tsw' => 1, 'tsd' => 1, 'tsl' => 1, 'tsg' => 1, 'tsp' => 1,
'tiw' => 1, 'tid' => 1, 'til' => 1, 'tig' => 1, 'tip' => 1,
'betwin' => 1, 'betgold' => 1, 'betwingold' => 1,
'killcrew_person' => 1, 'deathcrew_person' => 1,
'occupied' => 1,
];
const TURNTIME_FULL_MS = -1; const TURNTIME_FULL_MS = -1;
const TURNTIME_FULL = 0; const TURNTIME_FULL = 0;
const TURNTIME_HMS = 1; const TURNTIME_HMS = 1;
@@ -82,12 +75,13 @@ class General implements iAction
/** /**
* @param array $raw DB row값. * @param array $raw DB row값.
* @param null|Map<RankColumn,int|float> $rawRank
* @param null|array $city DB city 테이블의 row값 * @param null|array $city DB city 테이블의 row값
* @param int|null $year 게임 연도 * @param int|null $year 게임 연도
* @param int|null $month 게임 월 * @param int|null $month 게임 월
* @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, officer_level 정도로 초기화 가능 * @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, officer_level 정도로 초기화 가능
*/ */
public function __construct(array $raw, ?array $rawRank, ?array $city, ?array $nation, ?int $year, ?int $month, bool $fullConstruct = true) public function __construct(array $raw, ?Map $rawRank, ?array $city, ?array $nation, ?int $year, ?int $month, bool $fullConstruct = true)
{ {
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함. //TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
@@ -110,7 +104,11 @@ class General implements iAction
if ($rawRank) { if ($rawRank) {
$this->rankVarRead = $rawRank; $this->rankVarRead = $rawRank;
} else {
$this->rankVarRead = new Map();
} }
$this->rankVarIncrease = new Map();
$this->rankVarSet = new Map();
if (!$fullConstruct) { if (!$fullConstruct) {
return; return;
@@ -524,7 +522,7 @@ class General implements iAction
} }
$dexType = "dex{$armType}"; $dexType = "dex{$armType}";
$exp = $this->onCalcStat($this, 'addDex', $exp, ['armType'=>$armType]); $exp = $this->onCalcStat($this, 'addDex', $exp, ['armType' => $armType]);
$this->increaseVar($dexType, $exp); $this->increaseVar($dexType, $exp);
} }
@@ -630,7 +628,7 @@ class General implements iAction
$refundPoint += $amount; $refundPoint += $amount;
} }
if($this->getAuxVar('inheritSpecificSpecialWar')){ if ($this->getAuxVar('inheritSpecificSpecialWar')) {
$this->setAuxVar('inheritSpecificSpecialWar', null); $this->setAuxVar('inheritSpecificSpecialWar', null);
$userLogger->push(sprintf("사망으로 전투 특기 지정 %d 포인트 반환", GameConst::$inheritSpecificSpecialPoint), "inheritPoint"); $userLogger->push(sprintf("사망으로 전투 특기 지정 %d 포인트 반환", GameConst::$inheritSpecificSpecialPoint), "inheritPoint");
$refundPoint += GameConst::$inheritSpecificSpecialPoint; $refundPoint += GameConst::$inheritSpecificSpecialPoint;
@@ -723,7 +721,7 @@ class General implements iAction
$this->multiplyVar('dex4', 0.5); $this->multiplyVar('dex4', 0.5);
$this->multiplyVar('dex5', 0.5); $this->multiplyVar('dex5', 0.5);
foreach (array_keys(static::RANK_COLUMN) as $rankKey) { foreach (RankColumn::cases() as $rankKey) {
$this->setRankVar($rankKey, 0); $this->setRankVar($rankKey, 0);
} }
@@ -733,24 +731,20 @@ class General implements iAction
$logger->pushGeneralHistoryLog('나이가 들어 은퇴하고, 자손에게 관직을 물려줌'); $logger->pushGeneralHistoryLog('나이가 들어 은퇴하고, 자손에게 관직을 물려줌');
} }
function increaseRankVar(string $key, int $value) function increaseRankVar(RankColumn $key, int $value)
{ {
if (!key_exists($key, static::RANK_COLUMN)) { if ($this->rankVarSet->hasKey($key)) {
throw new \InvalidArgumentException('올바르지 않은 인자 :' . $key);
}
if (key_exists($key, $this->rankVarSet)) {
$this->rankVarSet[$key] += $value; $this->rankVarSet[$key] += $value;
return; return;
} }
if (key_exists($key, $this->rankVarRead)) { if ($this->rankVarRead->hasKey($key)) {
$this->rankVarSet[$key] = $this->rankVarRead[$key] + $value; $this->rankVarSet[$key] = $this->rankVarRead[$key] + $value;
unset($this->rankVarRead[$key]); $this->rankVarRead->remove($key);
return; return;
} }
if (key_exists($key, $this->rankVarIncrease)) { if ($this->rankVarIncrease->hasKey($key)) {
$this->rankVarIncrease[$key] += $value; $this->rankVarIncrease[$key] += $value;
return; return;
} }
@@ -758,33 +752,25 @@ class General implements iAction
$this->rankVarIncrease[$key] = $value; $this->rankVarIncrease[$key] = $value;
} }
function setRankVar(string $key, int $value) function setRankVar(RankColumn $key, int $value)
{ {
if (!key_exists($key, static::RANK_COLUMN)) { if ($this->rankVarRead->hasKey($key)) {
throw new \InvalidArgumentException('올바르지 않은 인자 :' . $key); $this->rankVarRead->remove($key);
} } else if ($this->rankVarIncrease->hasKey($key)) {
$this->rankVarIncrease->remove($key);
if (key_exists($key, $this->rankVarRead)) {
unset($this->rankVarRead[$key]);
} else if (key_exists($key, $this->rankVarIncrease)) {
unset($this->rankVarIncrease[$key]);
} }
$this->rankVarSet[$key] = $value; $this->rankVarSet[$key] = $value;
} }
function getRankVar(string $key, $defaultValue = null): int function getRankVar(RankColumn $key, $defaultValue = null): int
{ {
if (!key_exists($key, static::RANK_COLUMN)) { if ($this->rankVarSet->hasKey($key)) {
throw new \InvalidArgumentException('올바르지 않은 인자 :' . $key);
}
if (key_exists($key, $this->rankVarSet)) {
return $this->rankVarSet[$key]; return $this->rankVarSet[$key];
} }
if (!key_exists($key, $this->rankVarRead)) { if (!$this->rankVarRead->hasKey($key)) {
if($defaultValue === null){ if ($defaultValue === null) {
throw new \RuntimeException('인자가 없음 : ' . $key); throw new \RuntimeException('인자가 없음 : ' . $key->value);
} }
return $defaultValue; return $defaultValue;
} }
@@ -818,27 +804,27 @@ class General implements iAction
$this->flushUpdateValues(); $this->flushUpdateValues();
} }
if ($this->rankVarIncrease) { if ($this->rankVarIncrease->count()) {
foreach ($this->rankVarIncrease as $rankKey => $rankVal) { foreach ($this->rankVarIncrease as $rankKey => $rankVal) {
$db->update('rank_data', [ $db->update('rank_data', [
'value' => $db->sqleval('value + %i', $rankVal) 'value' => $db->sqleval('value + %i', $rankVal)
], 'general_id = %i AND type = %s', $generalID, $rankKey); ], 'general_id = %i AND type = %s', $generalID, $rankKey->value);
} }
$result = true; $result = true;
} }
if ($this->rankVarSet) { if ($this->rankVarSet->count()) {
foreach ($this->rankVarSet as $rankKey => $rankVal) { foreach ($this->rankVarSet as $rankKey => $rankVal) {
$db->update('rank_data', [ $db->update('rank_data', [
'value' => $rankVal 'value' => $rankVal
], 'general_id = %i AND type = %s', $generalID, $rankKey); ], 'general_id = %i AND type = %s', $generalID, $rankKey->value);
$this->rankVarRead[$rankKey] = $rankVal; $this->rankVarRead[$rankKey->value] = $rankVal;
} }
$result = true; $result = true;
} }
$this->rankVarIncrease = []; $this->rankVarIncrease = new Map();
$this->rankVarSet = []; $this->rankVarSet = new Map();
$this->getLogger()->flush(); $this->getLogger()->flush();
return $result; return $result;
@@ -1000,7 +986,8 @@ class General implements iAction
return $amount; return $amount;
} }
public function onArbitraryAction(General $general, string $actionType, ?string $phase=null, $aux=null): null|array{ public function onArbitraryAction(General $general, string $actionType, ?string $phase = null, $aux = null): null|array
{
foreach (array_merge([ foreach (array_merge([
$this->nationType, $this->nationType,
$this->officerLevelObj, $this->officerLevelObj,
@@ -1114,13 +1101,20 @@ class General implements iAction
]; ];
if ($reqColumns === null) { if ($reqColumns === null) {
return [$fullColumn, array_keys(static::RANK_COLUMN)]; return [$fullColumn, RankColumn::cases()];
} }
/** @var RankColumn[] */
$rankColumn = []; $rankColumn = [];
$subColumn = []; $subColumn = [];
foreach ($reqColumns as $column) { foreach ($reqColumns as $column) {
if (key_exists($column, static::RANK_COLUMN)) { if ($column instanceof RankColumn) {
$rankColumn[] = $column;
continue;
}
$rankKey = RankColumn::tryFrom($column);
if ($rankKey !== null) {
$rankColumn[] = $column; $rankColumn[] = $column;
} else { } else {
$subColumn[] = $column; $subColumn[] = $column;
@@ -1136,7 +1130,7 @@ class General implements iAction
/** /**
* @param ?int[] $generalIDList * @param ?int[] $generalIDList
* @param null|string[] $column * @param null|string|RankColumn[] $column
* @param int $constructMode * @param int $constructMode
* @return \sammo\General[] * @return \sammo\General[]
* @throws MustNotBeReachedException * @throws MustNotBeReachedException
@@ -1156,6 +1150,10 @@ class General implements iAction
$month = null; $month = null;
} }
/**
* @var string[] $column
* @var RankColumn[] $rankColumn
*/
[$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode); [$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode);
if ($generalIDList === null) { if ($generalIDList === null) {
@@ -1172,17 +1170,20 @@ class General implements iAction
} }
$rawRanks = []; /** @var Map<int,Map<RankColumn,int|float>> */
$rawRanks = new Map();
if ($rankColumn) { if ($rankColumn) {
$rawValue = $db->queryAllLists( $rawValue = $db->queryAllLists(
'SELECT `general_id`, `type`, `value` FROM rank_data WHERE general_id IN %li AND `type` IN %ls', 'SELECT `general_id`, `type`, `value` FROM rank_data WHERE general_id IN %li AND `type` IN %ls',
$generalIDList, $generalIDList,
$rankColumn array_map(fn (\BackedEnum $e) => $e->value, $rankColumn)
); );
foreach ($rawValue as [$generalID, $rankType, $rankValue]) { foreach ($rawValue as [$generalID, $rawRankType, $rankValue]) {
if (!key_exists($generalID, $rawRanks)) { if (!$rawRanks->hasKey($generalID)) {
$rawRanks[$generalID] = []; $rawRanks[$generalID] = new Map();
} }
$rankType = RankColumn::from($rawRankType);
$rawRanks[$generalID][$rankType] = $rankValue; $rawRanks[$generalID][$rankType] = $rankValue;
} }
} }
@@ -1193,7 +1194,7 @@ class General implements iAction
$result[$generalID] = new DummyGeneral($constructMode > 0); $result[$generalID] = new DummyGeneral($constructMode > 0);
continue; continue;
} }
if (key_exists($generalID, $rawRanks) && count($rawRanks[$generalID] ?? []) !== count($rankColumn)) { if ($rawRanks->hasKey($generalID) && $rawRanks[$generalID]->count() !== count($rankColumn)) {
throw new \RuntimeException('column의 수가 일치하지 않음 : ' . $generalID); throw new \RuntimeException('column의 수가 일치하지 않음 : ' . $generalID);
} }
$result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID] ?? null, null, null, $year, $month, $constructMode > 1); $result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID] ?? null, null, null, $year, $month, $constructMode > 1);
@@ -1213,6 +1214,10 @@ class General implements iAction
$month = null; $month = null;
} }
/**
* @var string[] $column
* @var RankColumn[] $rankColumn
*/
[$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode); [$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode);
$rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID); $rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID);
@@ -1220,11 +1225,16 @@ class General implements iAction
return new DummyGeneral($constructMode > 0); return new DummyGeneral($constructMode > 0);
} }
$rawRankValues = []; $rawRankValues = new Map();
if ($rankColumn) { if ($rankColumn) {
$rawValue = $db->queryAllLists('SELECT `type`, `value` FROM rank_data WHERE general_id = %i AND `type` IN %ls', $generalID, $rankColumn); $rawValue = $db->queryAllLists(
foreach ($rawValue as [$rankType, $rankValue]) { 'SELECT `type`, `value` FROM rank_data WHERE general_id = %i AND `type` IN %ls',
$rawRankValues[$rankType] = $rankValue; $generalID,
array_map(fn (\BackedEnum $e) => $e->value, $rankColumn)
);
foreach ($rawValue as [$rawRankType, $rankValue]) {
$rankType = RankColumn::tryFrom($rawRankType);
$rawRankValues->put($rankType, $rankValue);
} }
} }
@@ -1336,7 +1346,7 @@ class General implements iAction
return InheritancePointManager::getInstance()->increaseInheritancePoint($this, $key, $value, $aux); return InheritancePointManager::getInstance()->increaseInheritancePoint($this, $key, $value, $aux);
} }
public function mergeTotalInheritancePoint(bool $isEnd=false) public function mergeTotalInheritancePoint(bool $isEnd = false)
{ {
InheritancePointManager::getInstance()->mergeTotalInheritancePoint($this, $isEnd); InheritancePointManager::getInstance()->mergeTotalInheritancePoint($this, $isEnd);
} }
+4 -3
View File
@@ -4,6 +4,7 @@ namespace sammo;
use sammo\Command\GeneralCommand; use sammo\Command\GeneralCommand;
use sammo\Command\NationCommand; use sammo\Command\NationCommand;
use sammo\Enums\RankColumn;
use sammo\Scenario\NPC; use sammo\Scenario\NPC;
class GeneralAI class GeneralAI
@@ -2340,8 +2341,8 @@ class GeneralAI
return null; return null;
} }
$kill = $general->getRankVar('killcrew') + 50000; $kill = $general->getRankVar(RankColumn::killcrew) + 50000;
$death = $general->getRankVar('deathcrew') + 50000; $death = $general->getRankVar(RankColumn::deathcrew) + 50000;
$deathRate = $death / $kill; $deathRate = $death / $kill;
$absGold = $general->getVar('gold'); $absGold = $general->getVar('gold');
@@ -2575,7 +2576,7 @@ class GeneralAI
$riceCost = $crewType->riceWithTech( $riceCost = $crewType->riceWithTech(
$this->nation['tech'], $this->nation['tech'],
Util::toInt($this->fullLeadership * 100 * Util::toInt($this->fullLeadership * 100 *
$general->getRankVar('killcrew') / max($general->getRankVar('deathcrew'), 1) * 1.2) $general->getRankVar(RankColumn::killcrew) / max($general->getRankVar(RankColumn::deathcrew), 1) * 1.2)
); );
$cmd = buildGeneralCommandClass('che_징병', $general, $env, [ $cmd = buildGeneralCommandClass('che_징병', $general, $env, [
+3 -2
View File
@@ -5,6 +5,7 @@ namespace sammo;
use sammo\VO\InheritancePointType; use sammo\VO\InheritancePointType;
use Ds\Map; use Ds\Map;
use sammo\Enums\InheritanceKey; use sammo\Enums\InheritanceKey;
use sammo\Enums\RankColumn;
class InheritancePointManager class InheritancePointManager
{ {
@@ -110,8 +111,8 @@ class InheritancePointManager
break; break;
case InheritanceKey::betting: case InheritanceKey::betting:
$extractFn = function () use ($general, $multiplier) { $extractFn = function () use ($general, $multiplier) {
$betWin = $general->getRankVar('betwin'); $betWin = $general->getRankVar(RankColumn::betwin);
$betWinRate = $general->getRankVar('betwingold') / max(1, $general->getRankVar('betgold')); $betWinRate = $general->getRankVar(RankColumn::betwingold) / max(1, $general->getRankVar(RankColumn::betgold));
return [$betWin * $multiplier * pow($betWinRate, 2), null]; return [$betWin * $multiplier * pow($betWinRate, 2), null];
}; };
+4 -2
View File
@@ -1,6 +1,8 @@
<?php <?php
namespace sammo; namespace sammo;
use sammo\Enums\RankColumn;
class ResetHelper{ class ResetHelper{
private function __construct(){ private function __construct(){
@@ -311,11 +313,11 @@ class ResetHelper{
$rank_data = []; $rank_data = [];
foreach(array_keys(General::RANK_COLUMN) as $rankColumn){ foreach(RankColumn::cases() as $rankColumn){
$rank_data[] = [ $rank_data[] = [
'general_id'=>$generalID, 'general_id'=>$generalID,
'nation_id'=>0, 'nation_id'=>0,
'type'=>$rankColumn, 'type'=>$rankColumn->value,
'value'=>0 'value'=>0
]; ];
} }
+3 -2
View File
@@ -6,6 +6,7 @@ use \sammo\DB;
use \sammo\CityHelper; use \sammo\CityHelper;
use \sammo\GameUnitConst; use \sammo\GameUnitConst;
use \sammo\CityConst; use \sammo\CityConst;
use sammo\Enums\RankColumn;
use \sammo\GameConst; use \sammo\GameConst;
use \sammo\SpecialityHelper; use \sammo\SpecialityHelper;
use sammo\TimeUtil; use sammo\TimeUtil;
@@ -714,11 +715,11 @@ class GeneralBuilder{
$db->insert('general_turn', $turnRows); $db->insert('general_turn', $turnRows);
$rank_data = []; $rank_data = [];
foreach(array_keys(\sammo\General::RANK_COLUMN) as $rankColumn){ foreach(RankColumn::cases() as $rankColumn){
$rank_data[] = [ $rank_data[] = [
'general_id'=>$this->generalID, 'general_id'=>$this->generalID,
'nation_id'=>0, 'nation_id'=>0,
'type'=>$rankColumn, 'type'=>$rankColumn->value,
'value'=>0 'value'=>0
]; ];
} }
+10 -8
View File
@@ -2,6 +2,8 @@
namespace sammo; namespace sammo;
use sammo\Enums\RankColumn;
class WarUnitGeneral extends WarUnit class WarUnitGeneral extends WarUnit
{ {
protected $raw; protected $raw;
@@ -52,7 +54,7 @@ class WarUnitGeneral extends WarUnit
{ {
parent::setOppose($oppose); parent::setOppose($oppose);
$general = $this->general; $general = $this->general;
$this->general->increaseRankVar('warnum', 1); $this->general->increaseRankVar(RankColumn::warnum, 1);
if ($this->isAttacker) { if ($this->isAttacker) {
$semiTurn = $general->getTurnTime(); $semiTurn = $general->getTurnTime();
@@ -152,11 +154,11 @@ class WarUnitGeneral extends WarUnit
function addWin() function addWin()
{ {
$general = $this->general; $general = $this->general;
$general->increaseRankVar('killnum', 1); $general->increaseRankVar(RankColumn::killnum, 1);
$oppose = $this->getOppose(); $oppose = $this->getOppose();
if ($oppose instanceof WarUnitCity) { if ($oppose instanceof WarUnitCity) {
$general->increaseRankVar('occupied', 1); $general->increaseRankVar(RankColumn::occupied, 1);
} }
if($this->isAttacker()){ if($this->isAttacker()){
@@ -200,7 +202,7 @@ class WarUnitGeneral extends WarUnit
function addLose() function addLose()
{ {
$general = $this->general; $general = $this->general;
$general->increaseRankVar('deathnum', 1); $general->increaseRankVar(RankColumn::deathnum, 1);
$this->addStatExp(1); $this->addStatExp(1);
} }
@@ -340,14 +342,14 @@ class WarUnitGeneral extends WarUnit
$this->isFinished = true; $this->isFinished = true;
$general = $this->general; $general = $this->general;
$general->increaseRankVar('killcrew', $this->killed); $general->increaseRankVar(RankColumn::killcrew, $this->killed);
$general->increaseRankVar('deathcrew', $this->dead); $general->increaseRankVar(RankColumn::deathcrew, $this->dead);
if($this->killedPerson){ if($this->killedPerson){
$general->increaseRankVar('killcrew_person', $this->killedPerson); $general->increaseRankVar(RankColumn::killcrew_person, $this->killedPerson);
} }
if($this->deadPerson){ if($this->deadPerson){
$general->increaseRankVar('deathcrew_person', $this->deadPerson); $general->increaseRankVar(RankColumn::deathcrew_person, $this->deadPerson);
} }
$general->updateVar('rice', Util::round($general->getVar('rice'))); $general->updateVar('rice', Util::round($general->getVar('rice')));