diff --git a/.phan/config.php b/.phan/config.php index 8e20fd17..1426f847 100644 --- a/.phan/config.php +++ b/.phan/config.php @@ -131,7 +131,6 @@ return [ 'hwe/_admin4_submit.php', 'hwe/_admin5.php', 'hwe/_admin5_submit.php', - 'hwe/_admin6.php', 'hwe/_admin7.php', 'hwe/_admin8.php', 'hwe/_admin_force_rehall.php', diff --git a/hwe/_admin2_submit.php b/hwe/_admin2_submit.php index d47dbe18..9b45127d 100644 --- a/hwe/_admin2_submit.php +++ b/hwe/_admin2_submit.php @@ -123,8 +123,10 @@ switch ($btn) { ], 'no=%i', $general['no']); $specialWarName = buildGeneralSpecialWarClass($specialWar)->getName(); $josaUl = JosaUtil::pick($specialWarName, '을'); - pushGeneralHistoryLog($general['no'], ["●{$year}년 {$month}월:특기 【{$specialWarName}】{$josaUl} 습득"]); - pushGeneralActionLog($general['no'], ["●특기 【{$specialWarName}】{$josaUl} 익혔습니다!"]); + $logger = new ActionLogger($general['no'], 0, $year, $month); + $logger->pushGeneralHistoryLog("특기 【{$specialWarName}】{$josaUl} 습득"); + $logger->pushGeneralActionLog("특기 【{$specialWarName}】{$josaUl} 익혔습니다!",ActionLogger::PLAIN); + $logger->flush(); } break; diff --git a/hwe/_admin4.php b/hwe/_admin4.php index 880b65fa..d175b058 100644 --- a/hwe/_admin4.php +++ b/hwe/_admin4.php @@ -13,9 +13,23 @@ if ($session->userGrade < 5) { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); -$connect = $db->get(); $conlimit = $gameStor->conlimit; + +$ipGroupList = Util::arrayGroupBy( + $db->query( + 'SELECT name,ip,lastconnect,owner,block,substring_index(ip,".",3) as ip_c from general WHERE ip!="" and npc<2' + ), + 'ip_c' +); + +function colorBlockedName($general){ + if(!$general['blocked']){ + return $general['name']; + } + return "{$general['name']}"; +} + ?> @@ -92,42 +106,15 @@ $conlimit = $gameStor->conlimit; 최근로그인 IP ID - - - 1"; - $result = MYDB_query($query, $connect) or Error(__LINE__ . MYDB_error($connect), ""); - $ipCount = MYDB_num_rows($result); - $genName = ""; - $genDate = ""; - $genIP = ""; - $genID = ""; - for ($i = 0; $i < $ipCount; $i++) { - $ip = MYDB_fetch_array($result); - - $query = "select name,ip,lastconnect,owner,block from general where ip like '{$ip['ip2']}%' and npc<2 order by ip"; - $genResult = MYDB_query($query, $connect) or Error(__LINE__ . MYDB_error($connect), ""); - $genCount = MYDB_num_rows($genResult); - for ($k = 0; $k < $genCount; $k++) { - $gen = MYDB_fetch_array($genResult); - if ($gen['block'] > 0) $genName .= "{$gen['name']}
"; - else $genName .= $gen['name'] . "
"; - $genDate .= $gen['lastconnect'] . "
"; - $genIP .= $gen['ip'] . "
"; - $genID .= $gen['owner'] . "
"; - } - $genName .= "
"; - $genDate .= "
"; - $genIP .= "
"; - $genID .= "
"; - } - echo " - $genName - $genDate - $genIP - $genID"; - ?> - + +$users): ?> + + ',array_map('\sammo\colorBlockedName', $users))?> + ',array_column($users, 'lastconnect'))?> + ',array_column($users, 'ip'))?> + ',array_column($users, 'owner'))?> + + 4) { - $type = 0; -} - -//로그인 검사 -$session = Session::requireGameLogin()->setReadOnly(); - -if ($session->userGrade < 5) { - die(requireAdminPermissionHTML()); -} - -$db = DB::db(); -$connect = $db->get(); - -$sel[$type] = "selected"; - -?> - - - - - 접속정보 - - - - - - - - - - - - - - - -
접 속 정 보
-
정렬순서 : - -
-
- - - - - - - - - - - - - - - - - - - - - "; - } - - ?> -
장수명접속률시작연령연령총갱신갱신/턴총로그인갱신/로그인
{$gen['name']}{$gen['connect']}{$gen['startage']}{$gen['age']}" . round($gen['refcnt'] / 2, 1) . "" . round($gen['ref'] / 2, 1) . "{$gen['logcnt']}" . round($gen['log'] / 2, 1) . "
- - - - - - - -
- - - \ No newline at end of file diff --git a/hwe/_admin8.php b/hwe/_admin8.php index 80cd1552..f12456a5 100644 --- a/hwe/_admin8.php +++ b/hwe/_admin8.php @@ -16,7 +16,6 @@ if ($session->userGrade < 5) { } $db = DB::db(); -$connect=$db->get(); if ($btn == '정렬하기') { $gen = 0; @@ -65,13 +64,7 @@ foreach (getAllNationStaticInfo() as $nation) { } -$query = "select * from diplomacy where me < you order by state desc"; - -$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), ""); -$dipcount = MYDB_num_rows($result); -for ($i=0; $i < $dipcount; $i++) { - $dip = MYDB_fetch_array($result); - +foreach($db->query('SELECT * from diplomacy where me < you order by state desc') as $dip){ $me = $dip['me']; $you = $dip['you']; diff --git a/hwe/b_auction.php b/hwe/b_auction.php index 274fba85..f903862c 100644 --- a/hwe/b_auction.php +++ b/hwe/b_auction.php @@ -17,9 +17,7 @@ $connect=$db->get(); increaseRefresh("거래장", 2); -$query = "select no,special,con,turntime 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,special,con,turntime from general where owner=%i', $userID); $con = checkLimit($me['con']); if ($con >= 2) { diff --git a/hwe/func_auction.php b/hwe/func_auction.php index 83a2ae1a..6f4f5ca2 100644 --- a/hwe/func_auction.php +++ b/hwe/func_auction.php @@ -4,16 +4,13 @@ namespace sammo; function registerAuction() { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); - $connect=$db->get(); $admin = $gameStor->getValues(['startyear', 'year', 'month', 'turnterm']); $unit = 60 * $admin['turnterm']; // 장수들 평금,평쌀 - $query = "select avg(gold) as gold, avg(rice) as rice,max(gold) as maxgold from general where npc<2"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $general = MYDB_fetch_array($result); + $general = $db->queryFirstRow('SELECT avg(gold) as gold, avg(rice) as rice,max(gold) as maxgold from general where npc<2'); if($general['gold'] < 1000) { $general['gold'] = 1000; } if($general['gold'] > 20000) { $general['gold'] = 20000; } @@ -23,7 +20,7 @@ function registerAuction() { $count = $db->queryFirstField('SELECT count(*) FROM auction WHERE type=0 AND no1=0'); $count += 5; // 판매건 등록 - if(rand()%$count == 0) { + if(Util::randBool(1/$count)) { //평균 쌀의 5% ~ 25% $mul = rand() % 5 + 1; $amount = $general['rice'] / 20 * $mul; @@ -38,16 +35,24 @@ function registerAuction() { $term = 3 + rand() % 10; $date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit * $term); - $query = "insert into auction (type, no1, name1, amount, cost, value, topv, expire) values (0, '0', 'ⓝ상인', '$amount', '$cost', '$cost', '$topv', '$date')"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $db->insert('auction', [ + 'type'=>0, + 'no1'=>0, + 'name1'=>'ⓝ상인', + 'amount'=>$amount, + 'cost'=>$cost, + 'value'=>$cost, + 'topv'=>$topv, + 'expire'=>$date + ]); } $count = $db->queryFirstField('SELECT count(*) FROM auction WHERE type=1 AND no1=0'); $count += 5; // 구매건 등록 - if(rand()%$count == 0) { + if(Util::randBool(1/$count)) { //평균 쌀의 5% ~ 25% - $mul = rand() % 5 + 1; + $mul = Util::randRangeInt(1, 5); $amount = $general['rice'] / 20 * $mul; $cost = $general['gold'] / 20 * 1.1 * $mul; $topv = $amount * 0.5; @@ -58,36 +63,31 @@ function registerAuction() { $cost = Util::round($cost, -1); $topv = Util::round($topv, -1); - $term = 3 + rand() % 10; + $term = Util::randRangeInt(3, 12); $date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit * $term); - $query = "insert into auction (type, no1, name1, amount, cost, value, topv, expire) values (1, '0', 'ⓝ상인', '$amount', '$cost', '$cost', '$topv', '$date')"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $db->insert('auction', [ + 'type'=>1, + 'no1'=>0, + 'name1'=>'ⓝ상인', + 'amount'=>$amount, + 'cost'=>$cost, + 'value'=>$cost, + 'topv'=>$topv, + 'expire'=>$date + ]); } } function processAuction() { $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); - $connect=$db->get(); - - $trader = []; - $traderLog = []; - $auctionLog = []; - $bidderLog = []; - $alllog = []; - $history = []; $date = TimeUtil::now(); + [$year, $month] = $gameStor->getValuesAsArray(['year', 'month']); $admin = $gameStor->getValues(['year', 'month']); - $query = "select * from auction where expire<='$date'"; - $result2 = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $count2 = MYDB_num_rows($result2); - - for($i=0; $i < $count2; $i++) { - $auction = MYDB_fetch_array($result2); - + foreach($db->query('SELECT * from auction where expire<=%s', $date) as $auction){ $josaYi1 = JosaUtil::pick($auction['name1'], '이'); $josaYi2 = JosaUtil::pick($auction['name2'], '이'); @@ -95,138 +95,153 @@ function processAuction() { if($auction['no2'] == 0) { // 상인건수가 아닌것만 출력 if($auction['no1'] != 0) { - $query = "select no from general where no='{$auction['no1']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $trader = MYDB_fetch_array($result); + $traderID = $db->queryFirstField('SELECT no FROM general WHERE no=%i', $auction['no1']); + $logger = new ActionLogger($traderID, 0, $year, $month); + $logger->pushGeneralActionLog("입찰자 부재로 {$auction['no']}번 거래 유찰!", ActionLogger::EVENT_PLAIN); + $logger->flush(); - $traderLog[0] = "◆입찰자 부재로 {$auction['no']}번 거래 유찰!"; + $auctionLog = []; if($auction['type'] == 0) { $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, 그러나 입찰자 부재"; + $auctionLog[] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, 그러나 입찰자 부재"; } else { $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, 그러나 입찰자 부재"; + $auctionLog[] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, 그러나 입찰자 부재"; } - pushGeneralActionLog($trader['no'], $traderLog); - pushAuctionLog($auctionLog); - } - } else { - if($auction['no1'] == 0) { - $trader['no'] = 0; - $trader['name'] = 'ⓝ상인'; - $trader['gold'] = 99999; - $trader['rice'] = 99999; - } else { - $query = "select no,name,gold,rice from general where no='{$auction['no1']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $trader = MYDB_fetch_array($result); - } - $query = "select no,name,gold,rice from general where no='{$auction['no2']}'"; - $result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $bidder = MYDB_fetch_array($result); - //판매거래 - if($auction['type'] == 0) { - if($auction['amount'] > $trader['rice'] - 1000) { - $gold = Util::round($auction['value'] * 0.01); - $trader['gold'] -= $gold; - if($trader['gold'] < 0) $trader['gold'] = 0; - $query = "update general set gold='{$trader['gold']}' where no='{$auction['no1']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆판매자의 군량 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}"; - $bidderLog[0] = "◆판매자의 군량 부족으로 {$auction['no']}번 거래 유찰!"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 판매자 군량부족, 벌금 {$gold}"; - } elseif($auction['value'] > $bidder['gold'] - 1000) { - $gold = Util::round($auction['value'] * 0.01); - $bidder['gold'] -= $gold; - if($bidder['gold'] < 0) $bidder['gold'] = 0; - $query = "update general set gold='{$bidder['gold']}' where no='{$auction['no2']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆입찰자의 자금 부족으로 {$auction['no']}번 거래 유찰!"; - $bidderLog[0] = "◆입찰자의 자금 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 입찰자 자금부족, 벌금 {$gold}"; - } else { - $josaUlGold = JosaUtil::pick($auction['value'], '을'); - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆{$auction['no']}번 거래 성사로 쌀 {$auction['amount']}{$josaUlRice} 판매, 금 {$auction['value']}{$josaUlGold} 획득!"; - $bidderLog[0] = "◆{$auction['no']}번 거래 성사로 금 {$auction['value']}{$josaUlGold} 지불, 쌀 {$auction['amount']}{$josaUlRice} 구입!"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 성사 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 구매"; - if($auction['value'] >= $auction['amount'] * 2) { - $auctionLog[0] .= " ★ 최고가 거래 ★"; - } elseif($auction['value'] >= $auction['topv']) { - $auctionLog[0] .= " ★ 즉시구매가 거래 ★"; - } elseif($auction['value'] * 2 <= $auction['amount']) { - $auctionLog[0] .= " ★ 최저가 거래 ★"; - } - $query = "update general set gold=gold+'{$auction['value']}',rice=rice-'{$auction['amount']}' where no='{$auction['no1']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update general set gold=gold-'{$auction['value']}',rice=rice+'{$auction['amount']}' where no='{$auction['no2']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } - pushGeneralActionLog($trader['no'], $traderLog); - pushGeneralActionLog($bidder['no'], $bidderLog); - pushAuctionLog($auctionLog); - //구매거래 - } else { - if($auction['amount'] > $bidder['rice'] - 1000) { - $gold = Util::round($auction['value'] * 0.01); - $bidder['gold'] -= $gold; - if($bidder['gold'] < 0) $bidder['gold'] = 0; - $query = "update general set gold='{$bidder['gold']}' where no='{$auction['no2']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆입찰자의 군량 부족으로 {$auction['no']}번 거래 유찰!"; - $bidderLog[0] = "◆입찰자의 군량 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 입찰자 군량부족, 벌금 {$gold}"; - } elseif($auction['value'] > $trader['gold'] - 1000) { - $gold = Util::round($auction['value'] * 0.01); - $trader['gold'] -= $gold; - if($trader['gold'] < 0) $trader['gold'] = 0; - $query = "update general set gold='{$trader['gold']}' where no='{$auction['no1']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆구매자의 자금 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}"; - $bidderLog[0] = "◆구매자의 자금 부족으로 {$auction['no']}번 거래 유찰!"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 구매자 자금부족, 벌금 {$gold}"; - } else { - $josaUlGold = JosaUtil::pick($auction['value'], '을'); - $josaUlRice = JosaUtil::pick($auction['amount'], '을'); - $josaRo = JosaUtil::pick($auction['value'], '로'); - $traderLog[0] = "◆{$auction['no']}번 거래 성사로 금 {$auction['value']}{$josaUlGold} 지불, 쌀 {$auction['amount']}{$josaUlRice} 구입!"; - $bidderLog[0] = "◆{$auction['no']}번 거래 성사로 쌀 {$auction['amount']}{$josaUlRice} 판매, 금 {$auction['value']}{$josaUlGold} 획득!"; - $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 성사 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 판매"; - if($auction['value'] >= $auction['amount'] * 2) { - $auctionLog[0] .= " ★ 최고가 거래 ★"; - } elseif($auction['value'] * 2 <= $auction['amount']) { - $auctionLog[0] .= " ★ 최저가 거래 ★"; - } elseif($auction['value'] <= $auction['topv']) { - $auctionLog[0] .= " ★ 즉시구매가 거래 ★"; - } - - $query = "update general set gold=gold-'{$auction['value']}',rice=rice+'{$auction['amount']}' where no='{$auction['no1']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - $query = "update general set gold=gold+'{$auction['value']}',rice=rice-'{$auction['amount']}' where no='{$auction['no2']}'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); - } - pushGeneralActionLog($trader['no'], $traderLog); - pushGeneralActionLog($bidder['no'], $bidderLog); pushAuctionLog($auctionLog); } + continue; } + + if($auction['no1'] == 0) { + $trader = [ + 'no'=>0, + 'name'=>'ⓝ상인', + 'gold'=>99999, + 'rice'=>99999 + ]; + } else { + $trader = $db->queryFirstRow('SELECT no,name,gold,rice from general where no=%i', $auction['no1']); + } + + $bidder = $db->queryFirstRow('SELECT no,name,gold,rice from general where no=%i', $auction['no2']); + + $traderLogger = new ActionLogger($trader['no'], 0, $year, $month, false); + $bidderLogger = new ActionLogger($bidder['no'], 0, $year, $month, false); + + $auctionLog = []; + + + //판매거래 + if($auction['type'] == 0) { + if($auction['amount'] > $trader['rice'] - 1000) { + $gold = Util::round($auction['value'] * 0.01); + $db->update('general', [ + 'gold'=>Util::valueFit($trader['gold'] - $gold, 0) + ], 'no=%i', $trader['no']); + + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog("판매자의 군량 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}", ActionLogger::EVENT_PLAIN); + $bidderLogger->pushGeneralActionLog("판매자의 군량 부족으로 {$auction['no']}번 거래 유찰!", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 판매자 군량부족, 벌금 {$gold}"; + } elseif($auction['value'] > $bidder['gold'] - 1000) { + $gold = Util::round($auction['value'] * 0.01); + $db->update('general', [ + 'gold'=>Util::valueFit($bidder['gold'] - $gold, 0) + ], 'no=%i', $bidder['no']); + + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog("입찰자의 자금 부족으로 {$auction['no']}번 거래 유찰!", ActionLogger::EVENT_PLAIN); + $bidderLogger->pushGeneralActionLog("입찰자의 자금 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 입찰자 자금부족, 벌금 {$gold}"; + } else { + $josaUlGold = JosaUtil::pick($auction['value'], '을'); + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog("{$auction['no']}번 거래 성사로 쌀 {$auction['amount']}{$josaUlRice} 판매, 금 {$auction['value']}{$josaUlGold} 획득!", ActionLogger::EVENT_PLAIN); + $bidderLogger->pushGeneralActionLog("{$auction['no']}번 거래 성사로 금 {$auction['value']}{$josaUlGold} 지불, 쌀 {$auction['amount']}{$josaUlRice} 구입!", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 판매 성사 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 판매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 구매"; + if($auction['value'] >= $auction['amount'] * 2) { + $auctionLog[0] .= " ★ 최고가 거래 ★"; + } elseif($auction['value'] >= $auction['topv']) { + $auctionLog[0] .= " ★ 즉시구매가 거래 ★"; + } elseif($auction['value'] * 2 <= $auction['amount']) { + $auctionLog[0] .= " ★ 최저가 거래 ★"; + + } + + $db->update('general', [ + 'gold'=>$db->sqleval('gold + %i', $auction['value']), + 'rice'=>$db->sqleval('rice - %i', $auction['amount']), + ], 'no=%i', $auction['no1']); + $db->update('general', [ + 'gold'=>$db->sqleval('gold - %i', $auction['value']), + 'rice'=>$db->sqleval('rice + %i', $auction['amount']), + ], 'no=%i', $auction['no2']); + } + pushAuctionLog($auctionLog); + //구매거래 + } else { + if($auction['amount'] > $bidder['rice'] - 1000) { + $gold = Util::round($auction['value'] * 0.01); + $db->update('general', [ + 'gold'=>Util::valueFit($bidder['gold'] - $gold, 0) + ], 'no=%i', $bidder['no']); + + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog("입찰자의 군량 부족으로 {$auction['no']}번 거래 유찰!", ActionLogger::EVENT_PLAIN); + $bidderLogger->pushGeneralActionLog("입찰자의 군량 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 입찰자 군량부족, 벌금 {$gold}"; + } elseif($auction['value'] > $trader['gold'] - 1000) { + $gold = Util::round($auction['value'] * 0.01); + $db->update('general', [ + 'gold'=>Util::valueFit($trader['gold'] - $gold, 0) + ], 'no=%i', $trader['no']); + + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog("구매자의 자금 부족으로 {$auction['no']}번 거래 유찰! 벌금 {$gold}", ActionLogger::EVENT_PLAIN); + $bidderLogger->pushGeneralActionLog("구매자의 자금 부족으로 {$auction['no']}번 거래 유찰!", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 유찰 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 입찰, 그러나 구매자 자금부족, 벌금 {$gold}"; + } else { + $josaUlGold = JosaUtil::pick($auction['value'], '을'); + $josaUlRice = JosaUtil::pick($auction['amount'], '을'); + $josaRo = JosaUtil::pick($auction['value'], '로'); + $traderLogger->pushGeneralActionLog( + "{$auction['no']}번 거래 성사로 금 {$auction['value']}{$josaUlGold} 지불, 쌀 {$auction['amount']}{$josaUlRice} 구입!", ActionLogger::EVENT_PLAIN + ); + $bidderLogger->pushGeneralActionLog("{$auction['no']}번 거래 성사로 쌀 {$auction['amount']}{$josaUlRice} 판매, 금 {$auction['value']}{$josaUlGold} 획득!", ActionLogger::EVENT_PLAIN); + $auctionLog[0] = "◆{$admin['year']}년 {$admin['month']}월, {$auction['no']}번 구매 성사 : {$auction['name1']}{$josaYi1} 쌀 {$auction['amount']}{$josaUlRice} 구매, {$auction['name2']}{$josaYi2} 금 {$auction['value']}{$josaRo} 판매"; + if($auction['value'] >= $auction['amount'] * 2) { + $auctionLog[0] .= " ★ 최고가 거래 ★"; + } elseif($auction['value'] * 2 <= $auction['amount']) { + $auctionLog[0] .= " ★ 최저가 거래 ★"; + } elseif($auction['value'] <= $auction['topv']) { + $auctionLog[0] .= " ★ 즉시구매가 거래 ★"; + } + + $db->update('general', [ + 'gold'=>$db->sqleval('gold - %i', $auction['value']), + 'rice'=>$db->sqleval('rice + %i', $auction['amount']), + ], 'no=%i', $auction['no1']); + $db->update('general', [ + 'gold'=>$db->sqleval('gold + %i', $auction['value']), + 'rice'=>$db->sqleval('rice - %i', $auction['amount']), + ], 'no=%i', $auction['no2']); + } + $traderLogger->flush(); + $bidderLogger->flush(); + pushAuctionLog($auctionLog); + } + + $traderLogger->flush(); + $bidderLogger->flush(); } - $query = "delete from auction where expire<='$date'"; - MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),""); + $db->delete('auction', 'expire <= %s', $date); } diff --git a/hwe/index.php b/hwe/index.php index d123740d..07426573 100644 --- a/hwe/index.php +++ b/hwe/index.php @@ -224,7 +224,6 @@ if ($session->userGrade >= 5) { - diff --git a/hwe/sammo/DiplomaticMessage.php b/hwe/sammo/DiplomaticMessage.php index 8f0d3fec..d186d10b 100644 --- a/hwe/sammo/DiplomaticMessage.php +++ b/hwe/sammo/DiplomaticMessage.php @@ -149,6 +149,8 @@ class DiplomaticMessage extends Message{ $db = DB::db(); $gameStor = KVStorage::getStorage($db, 'game_env'); + [$year, $month] = $gameStor->getValuesAsArray(['year', 'month']); + $general = $db->queryFirstRow( 'SELECT `name`, nation, `officer_level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i', @@ -164,7 +166,7 @@ class DiplomaticMessage extends Message{ list($result, $reason) = $this->checkDiplomaticMessageValidation($general); if($result !== self::ACCEPTED){ - pushGeneralActionLog($receiverID, ["●{$reason} {$this->diplomacyName} 실패."]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog("{$reason} {$this->diplomacyName} 실패", ActionLogger::PLAIN); if($result === self::DECLINED){ $this->_declineMessage(); } @@ -186,14 +188,14 @@ class DiplomaticMessage extends Message{ } if($result !== self::ACCEPTED){ - pushGeneralActionLog($receiverID, ["●{$reason}"]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog($reason, ActionLogger::PLAIN); if($result === self::DECLINED){ $this->_declineMessage(); } return $result; } - list($year, $month) = $gameStor->getValuesAsArray(['year', 'month']); + $this->dest->generalID = $receiverID; @@ -251,6 +253,9 @@ class DiplomaticMessage extends Message{ } $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + [$year, $month] = $gameStor->getValuesAsArray(['year', 'month']); + $general = $db->queryFirstRow( 'SELECT `name`, nation, `officer_level`, `permission`, `penalty`,belong FROM general WHERE `no`=%i AND nation=%i', $receiverID, @@ -259,13 +264,13 @@ class DiplomaticMessage extends Message{ list($result, $reason) = $this->checkDiplomaticMessageValidation($general); if($result === self::INVALID){ - pushGeneralActionLog($receiverID, ["●{$reason} {$this->diplomacyName} 거절 불가."]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog("{$reason} {$this->diplomacyName} 거절 불가.", ActionLogger::PLAIN); return $result; } $josaYi = JosaUtil::pick($this->dest->nationName, '이'); - pushGeneralActionLog($receiverID, ["{$this->src->nationName}의 {$this->diplomacyName} 제안을 거절했습니다."]); - pushGeneralActionLog($this->src->generalID, ["{$this->dest->nationName}{$josaYi} {$this->diplomacyName} 제안을 거절했습니다."]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog("{$this->src->nationName}의 {$this->diplomacyName} 제안을 거절했습니다.", ActionLogger::PLAIN); + (new ActionLogger($this->src->generalID, 0, $year, $month))->pushGeneralActionLog("{$this->dest->nationName}{$josaYi} {$this->diplomacyName} 제안을 거절했습니다.", ActionLogger::PLAIN); $this->_declineMessage(); return self::DECLINED; } diff --git a/hwe/sammo/ScoutMessage.php b/hwe/sammo/ScoutMessage.php index f4e75703..267f8052 100644 --- a/hwe/sammo/ScoutMessage.php +++ b/hwe/sammo/ScoutMessage.php @@ -138,17 +138,21 @@ class ScoutMessage extends Message{ throw new \RuntimeException('전송되지 않은 메시지에 거절 진행 중'); } + $db = DB::db(); + $gameStor = KVStorage::getStorage($db, 'game_env'); + [$year, $month] = $gameStor->getValuesAsArray(['year', 'month']); + list($result, $reason) = $this->checkScoutMessageValidation($receiverID); if($result === self::INVALID){ - pushGeneralActionLog($receiverID, ["●{$reason} 등용 취소 불가."]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog("{$reason} 등용 취소 불가.", ActionLogger::PLAIN); return $result; } $josaRo = JosaUtil::pick($this->src->nationName, '로'); $josaYi = JosaUtil::pick($this->dest->generalName, '이'); - pushGeneralActionLog($receiverID, ["{$this->src->nationName}{$josaRo} 망명을 거부했습니다."]); - pushGeneralActionLog($this->src->generalID, ["{$this->dest->generalName}{$josaYi} 등용을 거부했습니다."]); + (new ActionLogger($receiverID, 0, $year, $month))->pushGeneralActionLog("{$this->src->nationName}{$josaRo} 망명을 거부했습니다.", ActionLogger::PLAIN); + (new ActionLogger($this->src->generalID, 0, $year, $month))->pushGeneralActionLog("{$this->dest->generalName}{$josaYi} 등용을 거부했습니다.", ActionLogger::PLAIN); $this->_declineMessage(); return self::DECLINED;