diff --git a/hwe/b_troop.php b/hwe/b_troop.php
index be425b7c..fca8f742 100644
--- a/hwe/b_troop.php
+++ b/hwe/b_troop.php
@@ -12,13 +12,58 @@ $connect=$db->get();
increaseRefresh("부대편성", 1);
-$query = "select no,nation,troop from general where owner='{$userID}'";
-$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
-$me = MYDB_fetch_array($result);
+$me = $db->queryFirstRow('SELECT no,nation,troop FROM general WHERE owner=%i', $userID);
-$query = "select * from troop where nation='{$me['nation']}'";
-$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
-$troopcount = MYDB_num_rows($result);
+$troops = [];
+foreach($db->query('SELECT troop,name,no FROM troop WHERE nation = %i', $me['nation']) as $rawTroop){
+ $troops[$rawTroop['troop']] = [
+ 'troop'=>$rawTroop['troop'],
+ 'name'=>$rawTroop['name'],
+ 'no'=>$rawTroop['no'],
+ 'users'=>[]
+ ];
+}
+
+foreach($db->query(
+ 'SELECT no,name,turntime,troop,city FROM general WHERE troop!=0 AND nation = %i ORDER BY turntime ASC',
+ $me['nation']
+) as $general
+){
+ if(!key_exists($general['troop'], $troops)){
+ trigger_error("올바르지 않은 부대 소속 {$general['no']}, {$general['name']} : {$general['troop']}");
+ continue;
+ }
+
+ $general['cityText'] = CityConst::byID($general['city'])->name;
+
+ $troops[$general['troop']]['users'][] = $general;
+}
+
+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)',
+ array_column($troops, 'no')
+ ) as $troopLeader
+ ){
+ $imageTemp = GetImageURL($troopLeader['imgsvr']);
+
+ $troopLeader['pictureFullPath'] = "$imageTemp/{$troopLeader['picture']}";
+ $troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name;
+
+ $troopLeader['turnText'] = join('
', [
+ '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)?'집합':'~'),
+ ]);
+ $troops[$troopLeader['troop']]['leader'] = $troopLeader;
+ }
+}
+
+uasort($troops, function($lhs, $rhs){
+ return $lhs['leader']['turntime']<=>$rhs['leader']['turntime'];
+})
?>
@@ -30,6 +75,7 @@ $troopcount = MYDB_num_rows($result);
=UniqueConst::$serverName?>: 부대편성
=WebUtil::printCSS('../d_shared/common.css')?>
=WebUtil::printCSS('css/common.css')?>
+=WebUtil::printCSS('css/troops.css')?>
=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
=WebUtil::printJS('js/ext.plugin_troop.js')?>
@@ -50,121 +96,97 @@ $troopcount = MYDB_num_rows($result);
부대장행동 |
+ |
+
+
+
+
+
+
+ |
$troop) {
+ $troopLeader = $troop['leader'];
+ $genlistText = [];
+ $cityText = $troopLeader['cityText'];
+ $cityID = $troopLeader['city'];
+ $leaderID = $troopLeader['no'];
- $genlist = "";
- $query = "select no,name,picture,imgsvr,turntime,city,turn0,turn1,turn2,turn3,turn4,turn5 from general where troop='{$troop['troop']}'";
- $genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- $gencount = MYDB_num_rows($genresult);
- for($j=0; $j < $gencount; $j++) {
- $general = MYDB_fetch_array($genresult);
- $genlist .= $general['name'].", ";
- if($troop['no'] == $general['no']) {
- $picture = $general['picture'];
- $imageTemp = GetImageURL($general['imgsvr']);
- $name = $general['name'];
- $turntime = $general['turntime'];
- $query = "select name from city where city='{$general['city']}'";
- $cityresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- $city = MYDB_fetch_array($cityresult);
- $cityname = $city['name'];
- $turn = "";
- for($k=0; $k < 5; $k++) {
- $m = $k+1;
- $turnK = DecodeCommand($general["turn{$k}"]);
- if($turnK[0] == 26) {
- $turn .= " $m : 집합
";
- } else {
- $turn .= " $m : ∼
";
- }
- }
+ foreach ($troop['users'] as $troopUser) {
+ $spanClass = 'troopUser';
+ if ($troopUser['city'] !== $cityID) {
+ $spanClass.= ' diffCity';
}
+ if ($troopUser['no'] == $leaderID) {
+ $spanClass.= ' leader';
+ }
+ $genlistText[] = "{$troopUser['name']}【{$troopUser['cityText']}】";
}
- $genlist .= "({$gencount}명)";
- if($me['troop'] == 0) {
- echo "
+ $genlistText = sprintf('%s (%d명)', join(', ', $genlistText), count($genlistText)); ?>
+
+
- |
- {$troop['name']} 【 $cityname 】 |
- |
- $genlist |
- $turn |
+ '> |
+ =$troop['name']?> 【 =$cityText?> 】 |
+ ");background-size:64px;'> |
+ =$genlistText?> |
+ =$troopLeader['turnText']?> |
- | 【턴】".substr($turntime, 14)." | $name |
- | ";
- } else {
- echo "
+ |
+ | 【턴】 =substr($troopLeader['turntime'], 14)?> |
+ =$troopLeader['name']?> |
+ |
+
+
|
| |
- {$troop['name']} 【 $cityname 】 |
- |
- $genlist |
- ";
-
- if($troop['no'] == $me['no']) {
- $query = "select no,name from general where troop='{$troop['troop']}' and no!='{$me['no']}' order by binary(name)";
- $genresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
- $genCount = MYDB_num_rows($genresult);
- echo "
+ | =$troop['name']?> 【 =$cityText?> 】 |
+ ");background-size:64px;'> |
+ =$genlistText?> |
+
+
- ";
- } else {
- echo $turn;
- }
-
- echo "
+
+
+ =$troopLeader['turnText']?>
+
|
- | 【턴】".substr($turntime, 14)." | $name |
- |
";
- }
-}
-echo "
-| ";
-if ($troopcount == 0) {
-}
-else if($me['troop'] == 0) {
- echo"
-";
-} else {
- echo"
-";
-}
+ |
| 【턴】 =substr($troopLeader['turntime'], 14)?> |
+ =$troopLeader['name']?> |
+ |
+$troop) {
+?>
+
+
-echo "
-
-
-
";
-
-echo "
+
";
+
-?>
| =backButton()?> |
| =banner()?> |
diff --git a/hwe/css/troops.css b/hwe/css/troops.css
new file mode 100644
index 00000000..060d2d1c
--- /dev/null
+++ b/hwe/css/troops.css
@@ -0,0 +1,23 @@
+#troop_list .cityText{
+ display:none;
+}
+
+#troop_list .diffCity .cityText{
+ display:inline;
+}
+
+#troop_list .diffCity {
+ color:red;
+}
+
+#troop_list .leader{
+ color:lightgreen;
+}
+
+#troop_list .leader::before{
+ content:'*';
+}
+
+#troop_list .leader::after{
+ content:'*';
+}
\ No newline at end of file
diff --git a/hwe/js/ext.plugin_troop.js b/hwe/js/ext.plugin_troop.js
index 383bf2f3..77ad2674 100644
--- a/hwe/js/ext.plugin_troop.js
+++ b/hwe/js/ext.plugin_troop.js
@@ -8,94 +8,8 @@ $(function(){
var $userFrame;
- window.groupList = groupList;
window.userList = userList;
- var aGroup = {};
-
- $('#troop_list tbody > tr').each(function(idx){
- var $this = $(this);
- //console.log(this);
- //console.log($this);
- if(idx%3 == 0){
- aGroup = {
- turn : '77:77',
- turnTime : 5555,
- 부대장 : '에러-집합장없음',
- 부대명 : '에러-부대명없음',
- srclist : [],
- 도시 : '없지롱',
- list: [],
- trs:[]
- };
-
- aGroup.trs.push($this);
- var $children = $this.children();
- var names = $.trim($children.eq(1).text()).split('【');
- var 부대명 = $.trim(names[0]);
- var 도시 = $.trim(names[1].substr(0,names[1].length-1));
-
- aGroup.도시 = 도시;
- aGroup.부대명 = 부대명;
-
- aGroup.obj = $this;
- aGroup.$users = $children.eq(3);
-
- var lists = $.trim($children.eq(3).text()).split(', ');
- lists.pop();
- aGroup.srcList = lists;
- }
- else if(idx%3 == 1){
- aGroup.trs.push($this);
- var turnBase = $this.children().eq(0).text().split('】')[1];
- //console.log(turnBase);
- var userName = $this.children().eq(1).text();
-
- var turn = turnBase;
-
- var turnMS = turnBase.split(':');
- var turnM = parseInt(turnMS[0]);
- var turnS = parseInt(turnMS[1]);
- var turnTime = turnM*60+turnS;
-
- aGroup.turn = turn;
- aGroup.turnTime = turnTime;
- aGroup.부대장 = userName;
- aGroup.obj2 = $this;
-
- groupList[aGroup.부대명] = aGroup;
- tGroup.push(aGroup);
- }
- else{
- if($this.find('input').length==0){
- $this.detach();
- }
- }
- });
-
- $.each(tGroup,function(idx,val){
- console.log(val);
- for(var i=0;i | ');
- });
- $tbody.find('tr:eq(-1)').detach();
- $tbody.append($last);
-
var runAnalysis = function(){
$.each(groupList,function(idx,val){
val.list = [];
@@ -111,19 +25,15 @@ $(function(){
var tmpUsers = {};
$html.each(function(idx){
- if(this.tagName == "TABLE"){
- cnt+=1;
- if(cnt==2){
- tmpUsers = $(this);
- return false;
- }
+ var $this = $(this);
+ if($this.attr('id') == "general_list"){
+ tmpUsers = $(this);
+ return false;
}
});
tmpUsers.find("tbody > tr").each(function(idx){
var $this = $(this);
-
-
var $부대 = $this.children('.i_troop');
var 부대 = $.trim($부대.text());
@@ -134,73 +44,27 @@ $(function(){
}
$부대.remove();
- var $name = $this.children('.i_name');
- $name.addClass('nameplate');
-
- var name = $name.find('.t_name').text();
-
- var $도시 = $this.children('.i_city');
- var 도시 = $.trim($도시.text());
-
- var $턴 = $this.children('.i_action');
- //console.log($턴);
- var 턴0 = $턴.text().split(':');
- var 턴 = parseInt(턴0[0])*60 + parseInt(턴0[1]);
-
- var userInfo = {
- 이름 : name,
- 부대 : 부대,
- 도시 : 도시,
- 턴 : 턴,
- obj : $this
- };
-
-
-
- groupList[부대].list.push(userInfo);
- userList[name] = userInfo;
+ var generalID = parseInt($this.data('general-id'));
+ userList[generalID] = $this;
$this.hide();
$content.append($this);
-
});
-
- $.each(groupList,function(부대명,aGroup){
- aGroup.$users.html('');
-
- $.each(aGroup.list,function(idx,userInfo){
- var $user = $('');
- var $userName = $user.children('.name');
- if(userInfo.이름 == aGroup.부대장){
- $userName.html('*'+userInfo.이름+'*');
- $userName.css('color','lightgreen');
- }
- else{
- $userName.html(userInfo.이름);
- }
-
- if(userInfo.도시 != aGroup.도시){
- $userName.css('color','red');
- $user.children('.other').html('【'+userInfo.도시+'】');
- }
-
- $user.hover(function(){
- var top = aGroup.obj2.offset().top + aGroup.obj2.outerHeight();
- $userFrame.css('top',top);
- userInfo.obj.show();
- $userFrame.show();
- console.log('올림!'+userInfo.이름);
- },function(){
- $userFrame.hide();
- userInfo.obj.hide();
- console.log('내림!'+userInfo.이름);
- });
-
- $user.append(', ');
- aGroup.$users.append($user);
- });
-
- aGroup.$users.append('('+aGroup.list.length+'명)');
+ $('.troopUser').hover(function(){
+ var $this = $(this);
+ var parent = $this.closest('tr');
+ var generalID = parseInt($this.data('general-id'));
+ console.log(generalID);
+ var top = parent.offset().top + parent.outerHeight();
+ $userFrame.css('top',top);
+ userList[generalID].show();
+ $userFrame.show();
+ },function(){
+ var $this = $(this);
+ var parent = $this.closest('tr');
+ var generalID = parseInt($this.data('general-id'));
+ userList[generalID].hide();
+ $userFrame.hide();
});
}
catch(err){
@@ -223,24 +87,26 @@ $(function(){
- $userFrame = $(''+
- '
'+
- '| 이 름 | '+
- '통무지 | '+
- '자 금 | '+
- '군 량 | '+
- '도시 | '+
- '守 | '+
- '병 종 | '+
- '병 사 | '+
- '훈련 | '+
- '사기 | '+
- '명 령 | '+
- '삭턴 | '+
- '턴 | '+
- '
');
+ $userFrame = $(""+
+ "
"+
+ ""+
+ "| 이 름 | "+
+ "통무지 | "+
+ "자 금 | "+
+ "군 량 | "+
+ "도시 | "+
+ "守 | "+
+ "병 종 | "+
+ "병 사 | "+
+ "훈련 | "+
+ "사기 | "+
+ "명 령 | "+
+ "삭턴 | "+
+ "턴 | "+
+ "
"+
+ "
");
$userFrame.find('thead td');
- $userFrame.css('width','900px').css('margin','0').css('padding','0').css('left','50%').css('margin-left','-450px');
+ $userFrame.css('width','960px').css('margin','0').css('padding','0').css('left','50%').css('margin-left','-480px');
$userFrame.hide();
diff --git a/hwe/sql/schema.sql b/hwe/sql/schema.sql
index 217e4e8f..89088da3 100644
--- a/hwe/sql/schema.sql
+++ b/hwe/sql/schema.sql
@@ -156,7 +156,8 @@ CREATE TABLE `general` (
INDEX `turntime` (`turntime`, `no`),
INDEX `no_member` (`owner`),
INDEX `npc` (`npc`),
- INDEX `npcid` (`npcid`)
+ INDEX `npcid` (`npcid`),
+ INDEX `troop` (`troop`, `turntime`)
)
DEFAULT CHARSET=utf8mb4
ENGINE=MyISAM;