turn0 사용하는 부분 리팩토링

This commit is contained in:
2018-10-06 00:12:16 +09:00
parent be98db9023
commit 22aecbe4ba
8 changed files with 41 additions and 134 deletions
+1 -1
View File
@@ -199,7 +199,7 @@ $generalTurnList = [];
foreach($db->queryAllLists(
'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
Util::pickArrayFromArrayOfDictWithKey($generals, 'no')
array_column($generals, 'no')
) as [$generalID, $turnIdx, $action, $arg]
){
if(!key_exists($generalID, $generalTurnList)){
+1 -1
View File
@@ -107,7 +107,7 @@ $generalTurnList = [];
foreach($db->queryAllLists(
'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
Util::pickArrayFromArrayOfDictWithKey($generals, 'no')
array_column($generals, 'no')
) as [$generalID, $turnIdx, $action, $arg]
){
if(!key_exists($generalID, $generalTurnList)){
+25 -10
View File
@@ -40,23 +40,38 @@ foreach($db->query(
}
if($troops){
foreach($db->query(
'SELECT no,name,picture,imgsvr,turntime,city,turn0,turn1,turn2,turn3,turn4,turn5,troop FROM general WHERE no IN %li',
$troopLeaders = $db->query(
'SELECT no,name,picture,imgsvr,turntime,city,troop FROM general WHERE no IN %li',
array_column($troops, 'no')
) as $troopLeader
);
foreach($db->queryAllLists(
'SELECT general_id, turn_idx, action, arg FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
array_column($troopLeaders, 'no')
) as [$generalID, $turnIdx, $action, $arg]
){
if(!key_exists($generalID, $generalTurnList)){
$generalTurnList[$generalID] = [];
}
$generalTurnList[$generalID][$turnIdx] = [$action, Json::decode($arg)];
}
foreach($troopLeaders as $troopLeader){
$imageTemp = GetImageURL($troopLeader['imgsvr']);
$troopLeader['pictureFullPath'] = "$imageTemp/{$troopLeader['picture']}";
$troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name;
$troopLeader['turnText'] = join('<br>', [
'1 : '.((DecodeCommand($troopLeader['turn0'])[0] == 26)?'집합':'~'),
'2 : '.((DecodeCommand($troopLeader['turn1'])[0] == 26)?'집합':'~'),
'3 : '.((DecodeCommand($troopLeader['turn2'])[0] == 26)?'집합':'~'),
'4 : '.((DecodeCommand($troopLeader['turn3'])[0] == 26)?'집합':'~'),
'5 : '.((DecodeCommand($troopLeader['turn4'])[0] == 26)?'집합':'~'),
]);
$turnText = [];
foreach($generalTurnList[$troopLeader['no']] as $rawTurnIdx => [$action, $arg]){
$actionName = getGeneralCommandClass($action)::getName();
if($actionName != '집합'){
$actionName = '~';
}
$turnIdx = $rawTurnIdx + 1;
$turnText[] = "{$turnIdx} : {$actionName}";
}
$troopLeader['turnText'] = join('<br>', $turnText);
$troops[$troopLeader['troop']]['leader'] = $troopLeader;
}
}
+2 -2
View File
@@ -78,12 +78,12 @@ function myCommandList() {
// 명령 목록
$admin = $gameStor->getValues(['year','month','turnterm','turntime']);
$me = $db->queryFirstRow("SELECT `no`,turntime,last_turn,turn0,turn1,turn2,turn3,turn4,turn5,turn6,turn7,turn8,turn9,turn10,turn11,turn12,turn13,turn14,turn15,turn16,turn17,turn18,turn19,turn20,turn21,turn22,turn23 FROM general WHERE `owner`=%s", $userID);
$me = $db->queryFirstRow("SELECT `no`,name,city,nation,level,turntime,last_turn FROM general WHERE `owner`=%s", $userID);
if(!$me){
echo "로그인 되어있지 않습니다.";
return;
}
$generalObj = new General($me, null, 1, 1, false);
$generalObj = new General($me, null, 0, 0, false);
$turnList = $db->query('SELECT turn_idx, action, arg FROM general_turn WHERE general_id = %i ORDER BY turn_idx ASC', $generalObj->getID());
$turnBrief = getGeneralTurnBrief($generalObj, $turnList);
-103
View File
@@ -1594,109 +1594,6 @@ function triggerTournament() {
}
}
function PreprocessCommand($no) {
$db = DB::db();
$connect=$db->get();
$log = [];
$query = "select no,name,city,injury,special2,item,turn0,rice,crew from general where no='$no'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
if($general['special2'] == 73 || $general['item'] == 23 || $general['item'] == 24) {
//특기보정 : 의술
//의서 사용
if($general['injury'] > 0) {
$general['injury'] = 0;
$query = "update general set injury=0 where no='$no'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
pushGenLog($general, "<C>●</><C>의술</>을 펼쳐 스스로 치료합니다!");
}
$query = "select no,name,injury from general where city='{$general['city']}' and injury>10 order by rand()";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$patientCount = MYDB_num_rows($result);
if($patientCount > 0) {
// 50% 확률로 치료
$patientCount = Util::round($patientCount * 0.5);
$patientName = "";
for($i=0; $i < $patientCount; $i++) {
$patient = MYDB_fetch_array($result);
//부상 치료
$query = "update general set injury=0 where no='{$patient['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$josaYi = JosaUtil::pick($general['name'], '이');
pushGenLog($patient, "<C>●</><Y>{$general['name']}</>{$josaYi} <C>의술</>로써 치료해줍니다!");
if($patientName == "") {
$patientName = $patient['name'];
}
}
if($patientCount == 1) {
$josaUl = JosaUtil::pick($patientName, '을');
pushGenLog($general, "<C>●</><C>의술</>을 펼쳐 도시의 장수 <Y>{$patientName}</>{$josaUl} 치료합니다!");
} else {
$patientCount -= 1;
pushGenLog($general, "<C>●</><C>의술</>을 펼쳐 도시의 장수들 <Y>{$patientName}</> 외 <C>{$patientCount}</>명을 치료합니다!");
}
}
}
if($general['injury'] > 0) {
if($general['item'] >=7 && $general['item'] <= 11) {
//영구약 사용
$query = "update general set injury=0 where no='$no'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$josaUl = JosaUtil::pick($general['item'], '을');
$log[0] = "<C>●</><C>".getItemName($general['item'])."</>{$josaUl} 사용하여 치료합니다!";
pushGenLog($general, $log);
} elseif($general['injury'] > 10 && $general['item'] == 1 && DecodeCommand($general['turn0'])[0] != 50) {
//환약 사용
$query = "update general set injury=0,item=0 where no='$no'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$log[0] = "<C>●</><C>환약</>을 사용하여 치료합니다!";
pushGenLog($general, $log);
} elseif($general['injury'] > 10) {
//부상 감소
$query = "update general set injury=injury-10 where no='$no'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
} else {
//부상 감소
$query = "update general set injury=0 where no='$no'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
}
if($general['crew'] >= 100){
$newRice = $general['rice'] - $general['crew'] / 100;
if($newRice >= 0){
$db->update('general', [
'rice'=>Util::round($newRice)
], 'no=%i',$general['no']);
}
else{
$db->update('city', [
'pop'=>$db->sqleval('pop + %i', $general['crew'])
], 'city=%i', $general['city']);
$db->update('general', [
'crew'=>0,
'rice'=>0
], 'no=%i',$general['no']);
pushGenLog($general, ["<C>●</>군량이 모자라 병사들이 <R>소집해제</>되었습니다!"]);
}
}
}
function CheckHall($no) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
+2 -2
View File
@@ -127,10 +127,10 @@ abstract class BaseCommand{
abstract protected function argTest():bool;
public function getBrief():string{
return $this->getName();
return static::getName();
}
public function getName():string {
static public function getName():string {
return static::$actionName;
}
+10 -4
View File
@@ -31,6 +31,13 @@ class General implements iAction{
protected $lastTurn = null;
protected $resultTurn = null;
/**
* @param array $raw DB row값.
* @param null|array $city DB city 테이블의 row값
* @param int $year 게임 연도
* @param int $month 게임 월
* @param bool $fullConstruct iAction, 및 ActionLogger 초기화 여부, false인 경우 no, name, city, nation, level 정도로 초기화 가능
*/
public function __construct(array $raw, ?array $city, int $year, int $month, bool $fullConstruct=true){
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
@@ -39,15 +46,14 @@ class General implements iAction{
$this->raw = $raw;
$this->rawCity = $city;
if(!$fullConstruct){
return;
}
if(key_exists('last_turn', $this->raw)){
$this->lastTurn = LastTurn::fromJson($this->raw['last_turn']);
}
$this->resultTurn = new LastTurn();
if(!$fullConstruct){
return;
}
$this->logger = new ActionLogger(
$this->getVar('no'),
-11
View File
@@ -269,17 +269,6 @@ class Util extends \utilphp\util
return $result;
}
public static function pickArrayFromArrayOfDictWithKey(array $arrayOfDict, string $key):array{
$result = [];
foreach($arrayOfDict as $array){
if(!key_exist($key, $array)){
continue;
}
$result[] = $array[$key];
}
return $result;
}
public static function convertArrayToDict($arr, $keyName)
{
$result = [];