forked from devsam/core
버그 수정
This commit is contained in:
+8
-7
@@ -101,15 +101,16 @@ case "쌀지급":
|
||||
processRiceIncome();
|
||||
break;
|
||||
case "락걸기":
|
||||
$db->update('plock', [
|
||||
'plock'=>1,
|
||||
'locktime'=>TimeUtil::now(true)
|
||||
], true);
|
||||
for($i = 0; $i < 10; $i++){
|
||||
if(tryLock()){
|
||||
$locked = true;
|
||||
break;
|
||||
}
|
||||
usleep(500000);
|
||||
}
|
||||
break;
|
||||
case "락풀기":
|
||||
$db->update('plock', [
|
||||
'plock'=>0
|
||||
], true);
|
||||
unlock();
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
+69
-16
@@ -393,31 +393,84 @@ if ($admin['tournament'] == 6) {
|
||||
<tr align=center>
|
||||
<?php
|
||||
|
||||
$tournamentType = [
|
||||
'전 력 전'=>[
|
||||
'종합',
|
||||
function(General $general){return $general->getVar('leadership')+$general->getVar('strength')+$general->getVar('intel');},
|
||||
'tt',
|
||||
],
|
||||
'통 솔 전'=>[
|
||||
'통솔',
|
||||
function(General $general){return $general->getVar('leadership');},
|
||||
'tl',
|
||||
],
|
||||
'일 기 토'=>[
|
||||
'무력',
|
||||
function(General $general){return $general->getVar('strength');},
|
||||
'ts',
|
||||
],
|
||||
'설 전'=>[
|
||||
'지력',
|
||||
function(General $general){return $general->getVar('intel');},
|
||||
'ti',
|
||||
],
|
||||
];
|
||||
|
||||
$type1 = array("전 력 전", "통 솔 전", "일 기 토", "설 전");
|
||||
$type2 = array("종합", "통솔", "무력", "지력");
|
||||
$type3 = array("tt", "tl", "ts", "ti");
|
||||
$type4 = array("total", "leadership", "strength", "intel");
|
||||
|
||||
for ($i=0; $i < 4; $i++) {
|
||||
$grp = $i;
|
||||
echo "
|
||||
foreach($tournamentType as $tournamentTypeText=>[$statTypeText,$statFunc,$rankColumn]): ?>
|
||||
<td>
|
||||
<table align=center width=280 class='tb_layout bg0'>
|
||||
<tr><td colspan=9 align=center style=color:white;background-color:black;><font size=4>{$type1[$i]}</font></td></tr>
|
||||
<tr id=bg1><td align=center>순</td><td align=center>장수</td><td align=center>{$type2[$i]}</td><td align=center>경</td><td align=center>승</td><td align=center>무</td><td align=center>패</td><td align=center>점</td><td align=center>勝</td></tr>";
|
||||
|
||||
$query = "select npc,name,leadership,strength,intel,leadership+strength+intel as total,{$type3[$i]}p as prize,{$type3[$i]}w+{$type3[$i]}d+{$type3[$i]}l as game,{$type3[$i]}w as win,{$type3[$i]}d as draw,{$type3[$i]}l as lose,{$type3[$i]}g as gl from general order by gl desc, game desc, win desc, draw desc, lose, no limit 0,30";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
|
||||
for ($k=1; $k <= 30; $k++) {
|
||||
$general = MYDB_fetch_array($result);
|
||||
printRow($k, $general['npc'], $general['name'], $general[$type4[$i]], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gl'], $general['prize'], 0);
|
||||
<tr><td colspan=9 align=center style=color:white;background-color:black;><font size=4><?=$tournamentTypeText?></font></td></tr>
|
||||
<tr id=bg1><td align=center>순</td><td align=center>장수</td><td align=center><?=$statTypeText?></td><td align=center>경</td><td align=center>승</td><td align=center>무</td><td align=center>패</td><td align=center>점</td><td align=center>勝</td></tr>
|
||||
<?php
|
||||
$prizeColumn = "{$rankColumn}p";
|
||||
$gameColumn = "{$rankColumn}g";
|
||||
$winColumn = "{$rankColumn}w";
|
||||
$drawColumn = "{$rankColumn}d";
|
||||
$loseColumn = "{$rankColumn}l";
|
||||
$tournamentRankerList = General::createGeneralObjListFromDB(
|
||||
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn),
|
||||
[$prizeColumn, $gameColumn, $winColumn, $drawColumn, $loseColumn,'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
|
||||
0
|
||||
);
|
||||
usort($tournamentRankerList, function(General $lhs, General $rhs) use($gameColumn, $winColumn, $drawColumn, $loseColumn){
|
||||
$result = -($lhs->getRankVar($gameColumn) <=> $rhs->getRankVar($gameColumn));
|
||||
if($result !== 0) return $result;
|
||||
$result = -(
|
||||
($lhs->getRankVar($winColumn)+$lhs->getRankVar($drawColumn)+$lhs->getRankVar($loseColumn))
|
||||
<=>
|
||||
($rhs->getRankVar($winColumn)+$rhs->getRankVar($drawColumn)+$rhs->getRankVar($loseColumn))
|
||||
);
|
||||
if($result !== 0) return $result;
|
||||
$result = -($lhs->getRankVar($winColumn) <=> $rhs->getRankVar($winColumn));
|
||||
if($result !== 0) return $result;
|
||||
$result = -($lhs->getRankVar($drawColumn) <=> $rhs->getRankVar($drawColumn));
|
||||
if($result !== 0) return $result;
|
||||
return $lhs->getRankVar($loseColumn) <=> $rhs->getRankVar($loseColumn);
|
||||
});
|
||||
$tournamentRankerList = array_splice($tournamentRankerList, 0, 30);
|
||||
foreach($tournamentRankerList as $rank=>$ranker){
|
||||
printRow(
|
||||
$rank+1,
|
||||
$ranker->getVar('npc'),
|
||||
$ranker->getName(),
|
||||
($statFunc)($ranker),
|
||||
$ranker->getRankVar($winColumn)+$ranker->getRankVar($drawColumn)+$ranker->getRankVar($loseColumn),
|
||||
$ranker->getRankVar($winColumn),
|
||||
$ranker->getRankVar($drawColumn),
|
||||
$ranker->getRankVar($loseColumn),
|
||||
$ranker->getRankVar($gameColumn),
|
||||
$ranker->getRankVar($prizeColumn),
|
||||
0
|
||||
);
|
||||
}
|
||||
echo "
|
||||
</table>
|
||||
</td>";
|
||||
}
|
||||
|
||||
?>
|
||||
</table></td>
|
||||
<?php endforeach; ?>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan=16>
|
||||
|
||||
+3
-3
@@ -1733,11 +1733,11 @@ function calcCityDistance(int $from, int $to, ?array $linkNationList):?int{
|
||||
$db = DB::db();
|
||||
//TODO: 도시-국가 캐싱이 있으면 쓸모 있지 않을까
|
||||
$allowedCityList = [];
|
||||
foreach($db->queryAllLists(
|
||||
foreach($db->queryFirstColumn(
|
||||
'SELECT city FROM city WHERE nation IN %li',
|
||||
$linkNationList
|
||||
) as [$cityID, $nationID]){
|
||||
$allowedCityList[$cityID] = $nationID;
|
||||
) as $cityID){
|
||||
$allowedCityList[$cityID] = $cityID;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -979,7 +979,7 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
|
||||
} else {
|
||||
$ratio = rand() % 1000;
|
||||
if($critical1 == 0 && $gen1[$tp] >= $ratio) {
|
||||
$damage2 *= Util::round((rand() % 151 + 150) / 100); // 150 ~ 300%
|
||||
$damage2 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300%
|
||||
$critical1 = 1;
|
||||
if ($tnmt_type == 0) { switch(rand()%6) { case 0: $str = "참격"; break; case 1: $str = "집중"; break; case 2: $str = "역공"; break; case 3: $str = "반격"; break; case 4: $str = "선제"; break; case 5: $str = "도발"; break; } }
|
||||
elseif($tnmt_type == 1) { switch(rand()%6) { case 0: $str = "추행진"; break; case 1: $str = "학익진"; break; case 2: $str = "장사진"; break; case 3: $str = "형액진"; break; case 4: $str = "기형진"; break; case 5: $str = "구행진"; break; } }
|
||||
@@ -989,7 +989,7 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
|
||||
}
|
||||
$ratio = rand() % 1000;
|
||||
if($critical2 == 0 && $gen2[$tp] >= $ratio) {
|
||||
$damage1 *= Util::round((rand() % 151 + 150) / 100); // 150 ~ 300%
|
||||
$damage1 *= Util::randRangeInt(150, 300) / 100; // 150 ~ 300%
|
||||
$critical2 = 1;
|
||||
if ($tnmt_type == 0) { switch(rand()%6) { case 0: $str = "참격"; break; case 1: $str = "집중"; break; case 2: $str = "역공"; break; case 3: $str = "반격"; break; case 4: $str = "선제"; break; case 5: $str = "도발"; break; } }
|
||||
elseif($tnmt_type == 1) { switch(rand()%6) { case 0: $str = "추행진"; break; case 1: $str = "학익진"; break; case 2: $str = "장사진"; break; case 3: $str = "형액진"; break; case 4: $str = "기형진"; break; case 5: $str = "구행진"; break; } }
|
||||
@@ -999,6 +999,9 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
|
||||
}
|
||||
}
|
||||
|
||||
Util::setRound($damage1);
|
||||
Util::setRound($damage2);
|
||||
|
||||
$energy1 -= $damage1;
|
||||
$energy2 -= $damage2;
|
||||
$tDamage1 = $damage1; $tDamage2 = $damage2;
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ var charInfoText = <?php
|
||||
$charInfoText = [];
|
||||
foreach(GameConst::$availablePersonality as $personalityID){
|
||||
$personalityInfo = buildPersonalityClass($personalityID)->getInfo();
|
||||
$charInfoText[$personalityID];
|
||||
$charInfoText[$personalityID] = $personalityInfo;
|
||||
}
|
||||
echo Json::encode((object)$charInfoText);
|
||||
?>;
|
||||
|
||||
@@ -108,6 +108,9 @@ class che_인재탐색 extends Command\GeneralCommand{
|
||||
|
||||
$currCnt = Util::toInt($totalGenCnt + $totalNpcCnt / 2);
|
||||
$remainSlot = $maxGenCnt - $currCnt;
|
||||
if($remainSlot < 0){
|
||||
$remainSlot = 0;
|
||||
}
|
||||
|
||||
$avgCnt = $currCnt / $nationCnt;
|
||||
|
||||
|
||||
@@ -205,7 +205,7 @@ class che_천도 extends Command\NationCommand{
|
||||
'capset' => $db->sqleval('capset + 1'),
|
||||
], 'nation=%i', $nationID);
|
||||
|
||||
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>{$josaRo} 천도했습니다. <1>$date</");
|
||||
$logger->pushGeneralActionLog("<G><b>{$destCityName}</b></>{$josaRo} 천도했습니다. <1>$date</>");
|
||||
$logger->pushGeneralHistoryLog("<G><b>{$destCityName}</b></>{$josaRo} <M>천도</>명령");
|
||||
$logger->pushNationalHistoryLog("<Y>{$generalName}</>{$josaYi} <G><b>{$destCityName}</b></>{$josaRo} <M>천도</> 명령");
|
||||
$logger->pushGlobalActionLog("<Y>{$generalName}</>{$josaYi} <G><b>{$destCityName}</b></>{$josaRo} <M>천도</>를 명령하였습니다.");
|
||||
|
||||
@@ -31,6 +31,9 @@ class che_허보 extends Command\NationCommand{
|
||||
static public $reqArg = true;
|
||||
|
||||
protected function argTest():bool{
|
||||
if($this->arg === null){
|
||||
return null;
|
||||
}
|
||||
if(!key_exists('destCityID', $this->arg)){
|
||||
return false;
|
||||
}
|
||||
|
||||
+12
-7
@@ -44,8 +44,10 @@ class General implements iAction{
|
||||
|
||||
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,
|
||||
'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,
|
||||
];
|
||||
|
||||
@@ -97,6 +99,10 @@ class General implements iAction{
|
||||
$this->initLogger($year, $month);
|
||||
}
|
||||
|
||||
if($rawRank){
|
||||
$this->rankVarRead = $rawRank;
|
||||
}
|
||||
|
||||
if(!$fullConstruct){
|
||||
return;
|
||||
}
|
||||
@@ -113,10 +119,6 @@ class General implements iAction{
|
||||
$this->itemObjs['weapon'] = buildItemClass($raw['weapon']);
|
||||
$this->itemObjs['book'] = buildItemClass($raw['book']);
|
||||
$this->itemObjs['item'] = buildItemClass($raw['item']);
|
||||
|
||||
if($rawRank){
|
||||
$this->rankVarRead = $rawRank;
|
||||
}
|
||||
}
|
||||
|
||||
function initLogger(int $year, int $month){
|
||||
@@ -978,7 +980,10 @@ class General implements iAction{
|
||||
$result[$generalID] = new DummyGeneral($constructMode > 0);
|
||||
continue;
|
||||
}
|
||||
$result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID], null, $year, $month, $constructMode > 1);
|
||||
if(key_exists($generalID, $rawRanks) && count($rawRanks[$generalID]??[]) !== count($rankColumn)){
|
||||
throw new \RuntimeException('column의 수가 일치하지 않음 : '.$generalID);
|
||||
}
|
||||
$result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID]??null, null, $year, $month, $constructMode > 1);
|
||||
}
|
||||
|
||||
return $result;
|
||||
|
||||
@@ -453,10 +453,10 @@ class GeneralAI
|
||||
if($generalID == $this->general->getID()){
|
||||
continue;
|
||||
}
|
||||
$city = $this->supplyCities[$userGeneral->getCityID()];
|
||||
if(!key_exists($generalID, $this->supplyCities)){
|
||||
if(!key_exists($userGeneral->getCityID(), $this->supplyCities)){
|
||||
continue;
|
||||
}
|
||||
$city = $this->supplyCities[$userGeneral->getCityID()];
|
||||
$troopLeaderID = $userGeneral->getVar('troop');
|
||||
if(!$troopLeaderID || !key_exists($troopLeaderID, $this->troopLeaders)){
|
||||
continue;
|
||||
@@ -559,10 +559,10 @@ class GeneralAI
|
||||
if($generalID == $this->general->getID()){
|
||||
continue;
|
||||
}
|
||||
$city = $this->supplyCities[$userGeneral->getCityID()];
|
||||
if(!key_exists($generalID, $this->supplyCities)){
|
||||
if(!key_exists($userGeneral->getCityID(), $this->supplyCities)){
|
||||
continue;
|
||||
}
|
||||
$city = $this->supplyCities[$userGeneral->getCityID()];
|
||||
if($userGeneral->getVar('troop') !== 0){
|
||||
continue;
|
||||
}
|
||||
@@ -1057,7 +1057,7 @@ class GeneralAI
|
||||
}
|
||||
|
||||
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership()) * 2 * 4 * 1.1;
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership(false)) * 2 * 4 * 1.1;
|
||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
||||
}
|
||||
@@ -1157,7 +1157,7 @@ class GeneralAI
|
||||
}
|
||||
|
||||
$crewtype = $targetUserGeneral->getCrewTypeObj();
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership()) * 2 * 4 * 1.1;
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetUserGeneral->getLeadership(false)) * 2 * 4 * 1.1;
|
||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||
$reqMoney = max($reqMoney, $reqHumanMinRes);
|
||||
}
|
||||
@@ -1239,7 +1239,7 @@ class GeneralAI
|
||||
}
|
||||
|
||||
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetNPCGeneral->getLeadership()) * 2 * 4 * 1.1;
|
||||
$reqMoney = $crewtype->costWithTech($this->nation['tech'], $targetNPCGeneral->getLeadership(false)) * 2 * 4 * 1.1;
|
||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
||||
}
|
||||
@@ -1325,7 +1325,7 @@ class GeneralAI
|
||||
}
|
||||
|
||||
$crewtype = $targetNPCGeneral->getCrewTypeObj();
|
||||
$reqMoney = $crewtype->costWithTech($nation['tech'], $targetNPCGeneral->getLeadership()) * 2 * 4 * 1.1;
|
||||
$reqMoney = $crewtype->costWithTech($nation['tech'], $targetNPCGeneral->getLeadership(false)) * 2 * 4 * 1.1;
|
||||
if ($this->env['year'] > $this->env['startyear'] + 5) {
|
||||
$reqMoney = max($reqMoney, $reqNPCMinWarRes);
|
||||
}
|
||||
@@ -2995,7 +2995,7 @@ class GeneralAI
|
||||
else{
|
||||
$userCivilGenerals[$generalID] = $nationGeneral;
|
||||
}
|
||||
} else if ($nationGeneral->getLeadership() >= $this->nationPolicy->minNPCWarLeadership) {
|
||||
} else if ($nationGeneral->getLeadership(false) >= $this->nationPolicy->minNPCWarLeadership) {
|
||||
$npcWarGenerals[$generalID] = $nationGeneral;
|
||||
} else {
|
||||
$npcCivilGenerals[$generalID] = $nationGeneral;
|
||||
|
||||
Reference in New Issue
Block a user