turn0 사용하는 부분 리팩토링
This commit is contained in:
@@ -199,7 +199,7 @@ $generalTurnList = [];
|
|||||||
|
|
||||||
foreach($db->queryAllLists(
|
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',
|
'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]
|
) as [$generalID, $turnIdx, $action, $arg]
|
||||||
){
|
){
|
||||||
if(!key_exists($generalID, $generalTurnList)){
|
if(!key_exists($generalID, $generalTurnList)){
|
||||||
|
|||||||
+1
-1
@@ -107,7 +107,7 @@ $generalTurnList = [];
|
|||||||
|
|
||||||
foreach($db->queryAllLists(
|
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',
|
'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]
|
) as [$generalID, $turnIdx, $action, $arg]
|
||||||
){
|
){
|
||||||
if(!key_exists($generalID, $generalTurnList)){
|
if(!key_exists($generalID, $generalTurnList)){
|
||||||
|
|||||||
+25
-10
@@ -40,23 +40,38 @@ foreach($db->query(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($troops){
|
if($troops){
|
||||||
foreach($db->query(
|
$troopLeaders = $db->query(
|
||||||
'SELECT no,name,picture,imgsvr,turntime,city,turn0,turn1,turn2,turn3,turn4,turn5,troop FROM general WHERE no IN %li',
|
'SELECT no,name,picture,imgsvr,turntime,city,troop FROM general WHERE no IN %li',
|
||||||
array_column($troops, 'no')
|
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']);
|
$imageTemp = GetImageURL($troopLeader['imgsvr']);
|
||||||
|
|
||||||
$troopLeader['pictureFullPath'] = "$imageTemp/{$troopLeader['picture']}";
|
$troopLeader['pictureFullPath'] = "$imageTemp/{$troopLeader['picture']}";
|
||||||
$troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name;
|
$troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name;
|
||||||
|
|
||||||
$troopLeader['turnText'] = join('<br>', [
|
$turnText = [];
|
||||||
'1 : '.((DecodeCommand($troopLeader['turn0'])[0] == 26)?'집합':'~'),
|
foreach($generalTurnList[$troopLeader['no']] as $rawTurnIdx => [$action, $arg]){
|
||||||
'2 : '.((DecodeCommand($troopLeader['turn1'])[0] == 26)?'집합':'~'),
|
$actionName = getGeneralCommandClass($action)::getName();
|
||||||
'3 : '.((DecodeCommand($troopLeader['turn2'])[0] == 26)?'집합':'~'),
|
if($actionName != '집합'){
|
||||||
'4 : '.((DecodeCommand($troopLeader['turn3'])[0] == 26)?'집합':'~'),
|
$actionName = '~';
|
||||||
'5 : '.((DecodeCommand($troopLeader['turn4'])[0] == 26)?'집합':'~'),
|
}
|
||||||
]);
|
$turnIdx = $rawTurnIdx + 1;
|
||||||
|
$turnText[] = "{$turnIdx} : {$actionName}";
|
||||||
|
}
|
||||||
|
$troopLeader['turnText'] = join('<br>', $turnText);
|
||||||
$troops[$troopLeader['troop']]['leader'] = $troopLeader;
|
$troops[$troopLeader['troop']]['leader'] = $troopLeader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -78,12 +78,12 @@ function myCommandList() {
|
|||||||
// 명령 목록
|
// 명령 목록
|
||||||
$admin = $gameStor->getValues(['year','month','turnterm','turntime']);
|
$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){
|
if(!$me){
|
||||||
echo "로그인 되어있지 않습니다.";
|
echo "로그인 되어있지 않습니다.";
|
||||||
return;
|
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());
|
$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);
|
$turnBrief = getGeneralTurnBrief($generalObj, $turnList);
|
||||||
|
|
||||||
|
|||||||
-103
@@ -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) {
|
function CheckHall($no) {
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|||||||
@@ -127,10 +127,10 @@ abstract class BaseCommand{
|
|||||||
abstract protected function argTest():bool;
|
abstract protected function argTest():bool;
|
||||||
|
|
||||||
public function getBrief():string{
|
public function getBrief():string{
|
||||||
return $this->getName();
|
return static::getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName():string {
|
static public function getName():string {
|
||||||
return static::$actionName;
|
return static::$actionName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+10
-4
@@ -31,6 +31,13 @@ class General implements iAction{
|
|||||||
protected $lastTurn = null;
|
protected $lastTurn = null;
|
||||||
protected $resultTurn = 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){
|
public function __construct(array $raw, ?array $city, int $year, int $month, bool $fullConstruct=true){
|
||||||
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
|
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
|
||||||
|
|
||||||
@@ -39,15 +46,14 @@ class General implements iAction{
|
|||||||
$this->raw = $raw;
|
$this->raw = $raw;
|
||||||
$this->rawCity = $city;
|
$this->rawCity = $city;
|
||||||
|
|
||||||
if(!$fullConstruct){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(key_exists('last_turn', $this->raw)){
|
if(key_exists('last_turn', $this->raw)){
|
||||||
$this->lastTurn = LastTurn::fromJson($this->raw['last_turn']);
|
$this->lastTurn = LastTurn::fromJson($this->raw['last_turn']);
|
||||||
}
|
}
|
||||||
$this->resultTurn = new LastTurn();
|
$this->resultTurn = new LastTurn();
|
||||||
|
|
||||||
|
if(!$fullConstruct){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
$this->logger = new ActionLogger(
|
$this->logger = new ActionLogger(
|
||||||
$this->getVar('no'),
|
$this->getVar('no'),
|
||||||
|
|||||||
@@ -269,17 +269,6 @@ class Util extends \utilphp\util
|
|||||||
return $result;
|
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)
|
public static function convertArrayToDict($arr, $keyName)
|
||||||
{
|
{
|
||||||
$result = [];
|
$result = [];
|
||||||
|
|||||||
Reference in New Issue
Block a user