diff --git a/hwe/b_genList.php b/hwe/b_genList.php
index a28b48b3..7e9a2c34 100644
--- a/hwe/b_genList.php
+++ b/hwe/b_genList.php
@@ -86,7 +86,7 @@ $templates = new \League\Plates\Engine('templates');
queryAllLists('SELECT troop, name FROM troop WHERE nation=%i', $me['nation']) as [$troopID, $tName]){
+foreach($db->queryAllLists('SELECT troop_leader, name FROM troop WHERE nation=%i', $me['nation']) as [$troopID, $tName]){
$troopName[$troopID] = $tName;
}
@@ -99,7 +99,7 @@ switch ($type) {
case 5: $orderSQL = "order by crew desc"; break;
case 6: $orderSQL = "order by killturn"; break;
case 7: $orderSQL = "order by turntime"; break;
- case 8: $orderSQL = "order by troop desc"; break;
+ case 8: $orderSQL = "order by troop_leader desc"; break;
}
$generals = $db->query(
diff --git a/hwe/b_troop.php b/hwe/b_troop.php
index b314a6ef..855d192e 100644
--- a/hwe/b_troop.php
+++ b/hwe/b_troop.php
@@ -14,11 +14,9 @@ increaseRefresh("부대편성", 1);
$me = $db->queryFirstRow('SELECT no,nation,troop FROM general WHERE owner=%i', $userID);
$troops = [];
-foreach($db->query('SELECT troop,name,no FROM troop WHERE nation = %i', $me['nation']) as $rawTroop){
- $troops[$rawTroop['troop']] = [
- 'troop'=>$rawTroop['troop'],
+foreach($db->query('SELECT troop_leader,name FROM troop WHERE nation = %i', $me['nation']) as $rawTroop){
+ $troops[$rawTroop['troop_leader']] = [
'name'=>$rawTroop['name'],
- 'no'=>$rawTroop['no'],
'users'=>[]
];
}
@@ -41,7 +39,7 @@ foreach($db->query(
if($troops){
$troopLeaders = $db->query(
'SELECT no,name,picture,imgsvr,turntime,city,troop FROM general WHERE no IN %li',
- array_column($troops, 'no')
+ array_keys($troops)
);
foreach($db->queryAllLists(
@@ -147,7 +145,7 @@ foreach ($troops as $troopNo=>$troop) {
- | '> |
+ |
=$troop['name']?> 【 =$cityText?> 】 |
");background-size:64px;'> |
=$genlistText?> |
diff --git a/hwe/c_myBossInfo.php b/hwe/c_myBossInfo.php
index 13e94edd..57251af6 100644
--- a/hwe/c_myBossInfo.php
+++ b/hwe/c_myBossInfo.php
@@ -163,22 +163,19 @@ if($btn == "추방") {
], 'no=%i', $general['no']);
}
}
- // 부대 처리
- $query = "select no from troop where troop='{$general['troop']}'";
- $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- $troop = MYDB_fetch_array($result);
//부대장일 경우
- if($troop['no'] == $general['no']) {
+ if($general['troop'] == $general['no']){
// 모두 탈퇴
- $query = "update general set troop='0' where troop='{$general['troop']}'";
- MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- // 부대 삭제
- $query = "delete from troop where troop='{$general['troop']}'";
- MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- } else {
- $query = "update general set troop='0' where no='{$general['no']}'";
- MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
+ $db->update('general', [
+ 'troop'=>0,
+ ], 'troop = %i', $general['no']);
+ $db->delete('troop', 'troop_leader=%i', $general['no']);
+ }
+ else {
+ $db->update('general', [
+ 'troop'=>0,
+ ], 'no=%i', $general['no']);
}
// 도시관직해제
diff --git a/hwe/c_troop.php b/hwe/c_troop.php
index 07fa5d1a..bfee5ed1 100644
--- a/hwe/c_troop.php
+++ b/hwe/c_troop.php
@@ -24,43 +24,39 @@ if($name && mb_strwidth($name) > 18){
$name = trim($name);
if($btn == "부 대 창 설" && $name != "" && $me['troop'] == 0) {
- $db->insert('troop',[
+ $db->insertIgnore('troop',[
+ 'troop_leader'=>$me['no'],
'name'=>$name,
'nation'=>$me['nation'],
- 'no'=>$me['no']
]);
- $troopID = $db->insertId();
$db->update('general', [
- 'troop'=>$troopID
+ 'troop'=>$me['no'],
], 'no=%i',$me['no']);
} elseif($btn == "부 대 변 경" && $name != "") {
$db->update('troop', [
'name'=>$name
- ], 'no=%i',$me['no']);
+ ], 'troop_leader=%i',$me['no']);
} elseif($btn == "부 대 추 방" && $gen != 0) {
$db->update('general', [
'troop'=>0
- ], 'no=%i AND troop=(SELECT troop FROM troop WHERE no = %i)', $gen, $me['no']);
+ ], 'no=%i AND troop= %i', $gen, $me['no']);
} elseif($btn == "부 대 가 입" && $troop != 0) {
- $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troop);
- $troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `nation`=%i', $troopLeader, $me['nation']);
+ $troopLeaderNation = $db->queryFirstField('SELECT `nation` FROM `general` WHERE `no`=%i AND `troop`=%i AND `nation`=%i', $troop, $troop, $me['nation']);
if($troopLeaderNation){
$db->update('general', [
'troop'=>$troop
], 'no=%i', $me['no']);
}
} elseif($btn == "부 대 탈 퇴") {
- $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $me['troop']);
-
//부대장일 경우
- if($troopLeader == $me['no']) {
+ if($me['troop'] == $me['no']) {
// 모두 탈퇴
$db->update('general', [
'troop'=>0
], 'troop=%i',$me['troop']);
// 부대 삭제
- $db->delete('troop', 'troop=%i', $me['troop']);
+ $db->delete('troop', 'troop_leader=%i', $me['troop']);
} else {
$db->update('general', [
'troop'=>0
diff --git a/hwe/func.php b/hwe/func.php
index eba275fd..39336fb3 100644
--- a/hwe/func.php
+++ b/hwe/func.php
@@ -654,7 +654,7 @@ function generalInfo($no) {
$lbonus = "";
}
- $troop = getTroop($general['troop']);
+ $troopName = getTroopName($general['troop'])??'-';
$level = getLevel($general['level'], $nation['level']);
if($general['level'] == 2) {
@@ -723,7 +723,6 @@ function generalInfo($no) {
default:
$train = "{$general['train']}"; break;
}
- if($general['troop'] == 0) { $troop['name'] = "-"; }
if($general['mode'] == 2) { $general['mode'] = "수비 함(훈사80)"; }
elseif($general['mode'] == 1) { $general['mode'] = "수비 함(훈사60)"; }
else { $general['mode'] = "수비 안함"; }
@@ -797,7 +796,7 @@ function generalInfo($no) {
| 부대 |
- {$troop['name']} |
+ {$troopName} |
벌점 |
".getConnect($general['connect'])." {$general['connect']}({$general['con']}) |
@@ -1885,15 +1884,13 @@ function getMe() {
return $me;
}
-function getTroop($troop) {
+function getTroopName(int $troopLeader):?string {
+ if($troopLeader == 0){
+ return null;
+ }
$db = DB::db();
- $connect=$db->get();
- $query = "select * from troop where troop='$troop'";
- $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- $troop = MYDB_fetch_array($result);
-
- return $troop;
+ return $db->queryFirstField('SELECT `name` FROM troop WHERE troop_leader = %i', $troopLeader);
}
function getCity($city, $sel="*") {
diff --git a/hwe/func_gamerule.php b/hwe/func_gamerule.php
index 4b28301d..8755cbff 100644
--- a/hwe/func_gamerule.php
+++ b/hwe/func_gamerule.php
@@ -983,13 +983,12 @@ function updateNationState() {
$npcID = $npcObj->generalID;
$db->insert('troop', [
+ 'troop_leader'=>$npcID,
'name'=>$npcObj->realName,
'nation'=>$nation['nation'],
- 'no'=>$npcID
]);
- $troopID = $db->insertId();
$db->update('general', [
- 'troop'=>$troopID
+ 'troop'=>$npcID
], 'no=%i', $npcID);
//TODO: 5턴간 집합턴 입력
diff --git a/hwe/sammo/Command/General/che_집합.php b/hwe/sammo/Command/General/che_집합.php
index 7a459f50..8ca8beb2 100644
--- a/hwe/sammo/Command/General/che_집합.php
+++ b/hwe/sammo/Command/General/che_집합.php
@@ -74,8 +74,8 @@ class che_집합 extends Command\GeneralCommand{
$cityName = $this->city['name'];
$josaRo = JosaUtil::pick($cityName, '로');
- $troopID = $general->getVar('troop');
- $troopName = $db->queryFirstField('SELECT name FROM troop WHERE troop = %i', $troopID);
+ $troopID = $general->getID();
+ $troopName = $db->queryFirstField('SELECT name FROM troop WHERE troop_leader = %i', $troopID);
$logger = $general->getLogger();
@@ -88,7 +88,6 @@ class che_집합 extends Command\GeneralCommand{
], 'no IN %li', $generalList);
}
foreach($generalList as $targetGeneralID){
- $targetGeneral = General::createGeneralObjFromDB($targetGeneralID, [], 1);
$targetLogger = new ActionLogger($targetGeneralID, $general->getNationID(), $env['year'], $env['month']);
$targetLogger->pushGeneralActionLog("{$troopName}의 부대원들은 {$cityName}>{$josaRo} 집합되었습니다.", ActionLogger::PLAIN);
$targetLogger->flush();
diff --git a/hwe/sammo/Constraint/MustBeTroopLeader.php b/hwe/sammo/Constraint/MustBeTroopLeader.php
index c2a5abc7..055f04cd 100644
--- a/hwe/sammo/Constraint/MustBeTroopLeader.php
+++ b/hwe/sammo/Constraint/MustBeTroopLeader.php
@@ -24,11 +24,7 @@ class MustBeTroopLeader extends Constraint{
$this->checkInputValues();
$this->tested = true;
- //XXX: 부대장인지 알 수가 없음
- $db = DB::db();
- $troopLeader = $db->queryFirstField('SELECT no FROM troop WHERE troop = %i', $this->general['troop']);
-
- if($troopLeader == $this->general['no']){
+ if($this->general['no'] == $this->general['troop']){
return true;
}
diff --git a/hwe/sammo/Constraint/ReqTroopMembers.php b/hwe/sammo/Constraint/ReqTroopMembers.php
index 64319ac6..c8495974 100644
--- a/hwe/sammo/Constraint/ReqTroopMembers.php
+++ b/hwe/sammo/Constraint/ReqTroopMembers.php
@@ -25,7 +25,7 @@ class ReqTroopMembers extends Constraint{
$db = DB::db();
//NOTE:이 경우에 DB를 사용하지 않을 수 있는가?
- $troopMember = $db->queryFirstField('SELECT no FROM troop WHERE troop = %i AND no != %i LIMIT 1', $this->general['troop'], $this->general['no']);
+ $troopMember = $db->queryFirstField('SELECT no FROM general WHERE troop = %i AND no != %i LIMIT 1', $this->general['troop'], $this->general['troop']);
if($troopMember !== null){
return true;
diff --git a/hwe/sammo/Engine/Personnel.php b/hwe/sammo/Engine/Personnel.php
index 2251a3c1..ef7c3f25 100644
--- a/hwe/sammo/Engine/Personnel.php
+++ b/hwe/sammo/Engine/Personnel.php
@@ -92,13 +92,7 @@ class Personnel{
return [$result, $reason];
}
- $isTroopLeader = false;
- if($general['troop']){
- $troopLeader = $db->queryFirstField('SELECT `no` FROM troop WHERE troop = %i', $general['troop']);
- if($troopLeader == $generalID){
- $isTroopLeader = true;
- }
- }
+ $isTroopLeader = ($generalID == $general['troop']);
$joinedNations = Json::decode($general['nations']);
$joinedNations[] = $this->nation['nation'];
@@ -183,9 +177,9 @@ class Personnel{
// 모두 탈퇴
$db->update('general', [
'troop'=>0,
- ], 'troop=%i', $general['troop']);
+ ], 'troop_leader=%i', $generalID);
// 부대 삭제
- $db->delete('troop', 'troop=%i', $general['troop']);
+ $db->delete('troop', 'troop_leader=%i', $generalID);
}
return [ScoutMessage::ACCEPTED, ''];
diff --git a/hwe/sammo/General.php b/hwe/sammo/General.php
index 8f70374f..a30f12c9 100644
--- a/hwe/sammo/General.php
+++ b/hwe/sammo/General.php
@@ -265,17 +265,15 @@ class General implements iAction{
], 'gen3=%i', $generalID);
// 부대 처리
- $troopID = $this->getVar('troop');
- $troopLeaderID = $db->queryFirstField('SELECT `no` FROM troop WHERE troop=%i', $troopID);
+ $troopLeaderID = $this->getVar('troop');
if($troopLeaderID == $generalID){
//부대장일 경우
// 모두 탈퇴
$db->update('general', [
'troop'=>0
- ], 'troop=%i', $troopID);
-
+ ], 'troop_leader=%i', $troopLeaderID);
// 부대 삭제
- $db->delete('troop', 'troop=%i', $troopID);
+ $db->delete('troop', 'troop_leader=%i', $troopLeaderID);
}
$dyingMessage = new TextDecoration\DyingMessage($this->getName(), $this->getVar('npc'));
diff --git a/hwe/sql/schema.sql b/hwe/sql/schema.sql
index 8f65f2b5..690b3b81 100644
--- a/hwe/sql/schema.sql
+++ b/hwe/sql/schema.sql
@@ -286,14 +286,12 @@ CREATE TABLE `city` (
## 부대 테이블
###########################################################################
-create table troop (
- troop int(6) not null auto_increment,
- name char(64) not null,
- nation int(6) not null,
- no int(6) not null,
-
- PRIMARY KEY (troop)
-) ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
+CREATE TABLE `troop` (
+ `troop_leader` INT(6) NOT NULL,
+ `nation` INT(6) NOT NULL,
+ `name` VARCHAR(50) NOT NULL,
+ PRIMARY KEY (`troop_leader`)
+) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
##########################################################################
## 락 테이블