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?>: 부대편성 + @@ -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 + '> +
】 + ");background-size:64px;'>  + + - 【턴】".substr($turntime, 14)."$name - "; - } else { - echo " + + 【턴】 + + + +   - {$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 " +
】 + ");background-size:64px;'>  + + +
- "; - } else { - echo $turn; - } - - echo " + + + + - 【턴】".substr($turntime, 14)."$name - "; - } -} -echo " -"; -if ($troopcount == 0) { -} -else if($me['troop'] == 0) { - echo" -"; -} else { - echo" -"; -} + 【턴】 + + +$troop) { +?> + + -echo " - - -
"; - -echo " +
- "; -if($me['troop'] == 0) { - echo " - "; -} else { - echo " - "; -} -echo " + + + + + + -
부 대 명
"; + -?> 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;