토너먼트값, 전투, 계략값을 분리

This commit is contained in:
2020-03-29 05:03:49 +09:00
parent 6f47e92050
commit 0561cc3320
59 changed files with 858 additions and 640 deletions
-2
View File
@@ -24,8 +24,6 @@ $btn = Util::getReq('btn');
$minute = Util::getReq('minute', 'int');
$minute2 = Util::getReq('minute2', 'int');
extractMissingPostToGlobals();
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
switch($btn) {
-2
View File
@@ -30,8 +30,6 @@ $maxgeneral = Util::getReq('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
$maxnation = Util::getReq('maxnation', 'int', GameConst::$defaultMaxNation);
$startyear = Util::getReq('startyear', 'int', GameConst::$defaultStartYear);
extractMissingPostToGlobals();
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
-2
View File
@@ -9,8 +9,6 @@ $item = Util::getReq('item', 'string');
$genlist = Util::getReq('genlist', 'array_int');
$msg = Util::getReq('msg', 'string');
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireLogin()->loginGame()->setReadOnly();
-2
View File
@@ -15,8 +15,6 @@ $btn = Util::getReq('btn');
$genlist = Util::getReq('genlist', 'array_int');
$msg = Util::getReq('msg','string', '메시지');
extractMissingPostToGlobals();
$db = DB::db();
//NOTE: 왜 기능이 admin2와 admin4가 같이 있는가?
-2
View File
@@ -14,8 +14,6 @@ if($type2 < 0 || $type2 > 6){
$type2 = 0;
}
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
-2
View File
@@ -7,8 +7,6 @@ include "func.php";
$btn = Util::getReq('btn');
$nation = Util::getReq('nation', 'int');
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
-1
View File
@@ -8,7 +8,6 @@ $type = Util::getReq('type', 'int', 0);
if($type < 0 || $type > 4){
$type = 0;
}
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
+61 -36
View File
@@ -6,14 +6,31 @@ include "func.php";
$btn = Util::getReq('btn');
$gen = Util::getReq('gen', 'int', 0);
$type = Util::getReq('type', 'int', 0);
$reqQueryType = Util::getReq('query_type', 'string', null);
if($type < 0 || $type > 3){
$type = 0;
// $queryTypeText, $reqArgType(0=>None, 1=>AdditionalColumn, 2=>rankVal, 3=>aux), $comp
$queryMap = [
'turntime' => ['최근턴', 0, function($lhs, $rhs){
return -($lhs['turntime']<=>$rhs['turntime']);
}],
'recwar' => ['최근전투', 1, function($lhs, $rhs){
return -($lhs['recwar']<=>$rhs['recwar']);
}],
'name' => ['장수명', 0, function($lhs, $rhs){
if($lhs['npc'] !== $rhs['npc']){
return $lhs['npc']<=>$rhs['npc'];
}
return $lhs['name']<=>$rhs['name'];
}],
'warnum' => ['전투수', 1, function($lhs, $rhs){
return -($lhs['warnum']<=>$rhs['warnum']);
}]
];
if($reqQueryType === null || !key_exists($reqQueryType, $queryMap)){
$reqQueryType = Util::array_first_key($queryMap);
}
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
@@ -45,7 +62,39 @@ if($btn == '정렬하기') {
$gen = 0;
}
$sel[$type] = "selected";
[$queryTypeText, $reqArgType, $comp] = $queryMap[$reqQueryType];
if($reqArgType===0){
$generalBasicList = $db->query('SELECT no, name, nation, npc, turntime FROM general');
}
else if($reqArgType===1){
$generalBasicList = $db->query('SELECT no, name, nation, npc, turntime, %b FROM general', $reqQueryType);
}
else if($reqArgType===2){
$generalBasicList = $db->query('SELECT no, name, nation, npc, turntime, value as %b
FROM general LEFT JOIN rank_data
ON general.no = rank_data.general_id
WHERE rank_data.type = %b',
$reqQueryType, $reqQueryType
);
}
else if($reqArgType===3){
$generalBasicList = array_map(function($arr){
$arr['aux'] = Json::decode($arr['aux']);
return $arr;
}, $db->query('SELECT no, name, nation, npc, turntime, aux FROM general'));
}
else{
throw new \sammo\MustNotBeReachedException();
}
usort($generalBasicList, $comp);
if(!$gen){
$gen = $generalBasicList[0]['no'];
}
$generalObj = General::createGeneralObjFromDB($gen);
?>
<!DOCTYPE html>
<html>
@@ -64,40 +113,16 @@ $sel[$type] = "selected";
<form name=form1 method=post>
정렬순서 :
<select name=type size=1>
<option <?=$sel[0]??''?> value=0>최근턴</option>
<option <?=$sel[1]??''?> value=1>최근전투</option>
<option <?=$sel[2]??''?> value=2>장수명</option>
<option <?=$sel[3]??''?> value=3>전투수</option>
<?php foreach($queryMap as $queryType => [$queryTypeText,]): ?>
<option <?=$queryKey==$reqQueryType?'selected':''?> value='<?=$queryKey?>'><?=$queryTypeText?></option>
<?php endforeach; ?>
</select>
<input type=submit name=btn value='정렬하기'>
대상장수 :
<select name=gen size=1>
<?php
switch($type) {
case 0: $query = "select no,name,nation,turntime from general order by turntime desc"; break;
case 1: $query = "select no,name,nation,turntime from general order by recwar desc"; break;
case 2: $query = "select no,name,nation,turntime from general order by npc,binary(name)"; break;
case 3: $query = "select no,name,nation,turntime from general order by warnum desc"; break;
}
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gencount = MYDB_num_rows($result);
for($i=0; $i < $gencount; $i++) {
$general = MYDB_fetch_array($result);
// 선택 없으면 맨 처음 장수
if($gen == 0) {
$gen = $general['no'];
}
$selected = $gen == $general['no']?'selected':'';
$nationName = getNationStaticInfo($general['nation'])['name'];
$turntime = substr($general['turntime'], 11, 10);
echo "<option {$selected} value={$general['no']}>{$nationName} - {$general['name']} ($turntime)</option>\n";
}
$generalObj = General::createGeneralObjFromDB($gen);
?>
<?php foreach($generalBasicList as $general): ?>
<option <?=$gen==$general['no']?'selected':''?>><?=getNationStaticInfo($general['nation'])['name']?> - <?=$general['name']?> (<?=$general['turntime']?>)</option>
<?php endforeach; ?>
</select>
<input type=submit name=btn value='조회하기'>
</form>
-2
View File
@@ -8,8 +8,6 @@ $btn = Util::getReq('btn');
$gen = Util::getReq('gen', 'int', 0);
$type = 0;
extractMissingPostToGlobals();
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
+14 -10
View File
@@ -161,7 +161,15 @@ $types = [
}],
];
$generals = array_map(function($general) use($nationColor, $nationName) {
$generals = [];
foreach($db->query(
"SELECT nation,no,name,name2 as owner_name, owner, picture, imgsvr,
experience, dedication,
dex0, dex10, dex20, dex30, dex40,
horse, weapon, book, item
FROM general WHERE %l", $btn == "NPC 보기"?"npc>=2":"npc<2") as $general
){
$generalID = $general['no'];
$general['bgColor'] = $nationColor[$general['nation']]??GameConst::$basecolor4;
$general['fgColor'] = newColor($general['bgColor']);
$general['nationName'] = $nationName[$general['nation']];
@@ -174,16 +182,12 @@ $generals = array_map(function($general) use($nationColor, $nationName) {
$general['pictureFullPath'] = GetImageURL(0)."/default.jpg";
}
return $general;
}, $db->query(
"SELECT nation,no,name,name2 as owner_name, owner, picture, imgsvr,
experience, dedication, firenum, warnum, killnum, killcrew, deathcrew,
dex0, dex10, dex20, dex30, dex40,
ttw, ttd, ttl, tlw, tld, tll, tpw, tpd, tpl, tiw, tid, til,
betgold, betwin, betwingold,
horse, weapon, book, item
FROM general WHERE %l", $btn == "NPC 보기"?"npc>=2":"npc<2"));
$generals[$generalID] = $general;
}
foreach($db->queryAllLists('SELECT general_id, `type`, `value` FROM rank_data') as [$generalID, $typeKey, $value]){
$generals[$generalID][$typeKey] = $value;
}
$templates = new \League\Plates\Engine('templates');
+66 -39
View File
@@ -10,12 +10,37 @@ $v->rule('required', 'gen')
$btn = Util::getReq('btn');
$gen = Util::getReq('gen', 'int', 0);
$type = Util::getReq('type', 'int', 0);
$reqQueryType = Util::getReq('query_type', 'string', null);
if ($type < 0 || $type > 3) {
$type = 0;
// $queryTypeText, $reqArgType(0=>None, 1=>AdditionalColumn, 2=>rankVal, 3=>aux), $comp
$queryMap = [
'turntime' => ['최근턴', 0, function($lhs, $rhs){
return -($lhs['turntime']<=>$rhs['turntime']);
}],
'recwar' => ['최근전투', 1, function($lhs, $rhs){
return -($lhs['recwar']<=>$rhs['recwar']);
}],
'name' => ['장수명', 0, function($lhs, $rhs){
if($lhs['npc'] !== $rhs['npc']){
return $lhs['npc']<=>$rhs['npc'];
}
return $lhs['name']<=>$rhs['name'];
}],
'warnum' => ['전투수', 1, function($lhs, $rhs){
return -($lhs['warnum']<=>$rhs['warnum']);
}]
];
if($reqQueryType === null || !key_exists($reqQueryType, $queryMap)){
$reqQueryType = Util::array_first_key($queryMap);
}
if($reqQueryType === null || !key_exists($reqQueryType, $queryMap)){
$reqQueryType = Util::array_first_key($queryMap);
}
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
@@ -66,9 +91,39 @@ if ($btn == '정렬하기') {
$gen = 0;
}
$sel = [];
$sel[$type] = "selected";
[$queryTypeText, $reqArgType, $comp] = $queryMap[$reqQueryType];
if($reqArgType===0){
$generalBasicList = $db->query('SELECT no, name, npc, turntime FROM general');
}
else if($reqArgType===1){
$generalBasicList = $db->query('SELECT no, name, npc, turntime, %b FROM general', $reqQueryType);
}
else if($reqArgType===2){
$generalBasicList = $db->query('SELECT no, name, npc, turntime, value as %b
FROM general LEFT JOIN rank_data
ON general.no = rank_data.general_id
WHERE rank_data.type = %b',
$reqQueryType, $reqQueryType
);
}
else if($reqArgType===3){
$generalBasicList = array_map(function($arr){
$arr['aux'] = Json::decode($arr['aux']);
return $arr;
}, $db->query('SELECT no, name, npc, turntime, aux FROM general'));
}
else{
throw new \sammo\MustNotBeReachedException();
}
usort($generalBasicList, $comp);
if(!$gen){
$gen = $generalBasicList[0]['no'];
}
$showGeneral = General::createGeneralObjFromDB($gen);
?>
<!DOCTYPE html>
<html>
@@ -94,44 +149,16 @@ $sel[$type] = "selected";
<form name=form1 method=post>
정렬순서 :
<select name=type size=1>
<option <?=$sel[0]??''?> value=0>최근턴</option>
<option <?=$sel[1]??''?> value=1>최근전투</option>
<option <?=$sel[2]??''?> value=2>장수명</option>
<option <?=$sel[3]??''?> value=3>전투수</option>
<?php foreach($queryMap as $queryType => [$queryTypeText,]): ?>
<option <?=$queryKey==$reqQueryType?'selected':''?> value='<?=$queryKey?>'><?=$queryTypeText?></option>
<?php endforeach; ?>
</select>
<input type=submit name=btn value='정렬하기'>
대상장수 :
<select name=gen size=1>
<?php
$orderBy = '';
switch ($type) {
default:
case 0: $orderBy = 'order by turntime desc'; break;
case 1: $orderBy = 'order by recwar desc'; break;
case 2: $orderBy = 'order by npc,binary(name)'; break;
case 3: $orderBy = 'order by warnum desc'; break;
}
$generals = $db->query('SELECT no,name,npc FROM general WHERE nation = %i %l', $me['nation'], $orderBy);
$npc = 0;
foreach($generals as $general){
// 선택 없으면 맨 처음 장수
if ($gen == 0) {
$gen = $general['no'];
}
if($gen == $general['no']){
$npc = $general['npc'];
}
if ($gen == $general['no']) {
echo "
<option selected value={$general['no']}>{$general['name']}</option>";
} else {
echo "
<option value={$general['no']}>{$general['name']}</option>";
}
}
$showGeneral = General::createGeneralObjFromDB($gen);
?>
<?php foreach($generalBasicList as $general): ?>
<option <?=$gen==$general['no']?'selected':''?>><?=$general['name']?> (<?=$general['turntime']?>)</option>
<?php endforeach; ?>
</select>
<input type=submit name=btn value='조회하기'>
</form>
+18 -24
View File
@@ -14,15 +14,18 @@ $connect=$db->get();
increaseRefresh("베팅장", 1);
TurnExecutionHelper::executeAllCommand();
$query = "select no,tournament,con,turntime,bet0+bet1+bet2+bet3+bet4+bet5+bet6+bet7+bet8+bet9+bet10+bet11+bet12+bet13+bet14+bet15 as bet from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$me = MYDB_fetch_array($result);
$generalID = $session->generalID;
$admin = $gameStor->getValues(['tournament','phase','tnmt_type','develcost','bet0','bet1','bet2','bet3','bet4','bet5','bet6','bet7','bet8','bet9','bet10','bet11','bet12','bet13','bet14','bet15']);
$admin['bet'] =
$admin['bet0'] + $admin['bet1'] + $admin['bet2'] + $admin['bet3'] + $admin['bet4'] +
$admin['bet5'] + $admin['bet6'] + $admin['bet7'] + $admin['bet8'] + $admin['bet9'] +
$admin['bet10'] + $admin['bet11'] + $admin['bet12'] + $admin['bet13'] + $admin['bet14'] + $admin['bet15'];
//NOTE: general_id만 빼기 귀찮음.
$myBet = array_splice($db->queryFirstList('SELECT * FROM betting WHERE general_id = %i', $generalID), -16);
$globalBet = array_splice($db->queryFirstList('SELECT * FROM betting WHERE general_id = 0'), -16);
$me = $db->queryFirstRow('SELECT no,tournament,con,turntime from general where owner=%i', $userID);
$myBetTotal = array_sum($myBet);
$globalBetTotal = array_sum($globalBet);
$admin = $gameStor->getValues(['tournament','phase','tnmt_type','develcost']);
$con = checkLimit($me['con']);
if ($con >= 2) {
@@ -62,6 +65,7 @@ if($str3){
<?=WebUtil::printJS('../e_lib/jquery-3.3.1.min.js')?>
<?=WebUtil::printJS('../e_lib/bootstrap.bundle.min.js')?>
<?=WebUtil::printJS('js/common.js')?>
<?=WebUtil::printJS('js/betting.js')?>
<?=WebUtil::printCSS('../e_lib/bootstrap.min.css')?>
<?=WebUtil::printCSS('../d_shared/common.css')?>
<?=WebUtil::printCSS('css/common.css')?>
@@ -74,7 +78,7 @@ if($str3){
<table align=center width=1120 class='tb_layout bg0'>
<tr><td colspan=16><input type=button value='갱신' onclick='location.reload()'></td></tr>
<tr><td colspan=16 align=center><font color=white size=6><?=$tnmt_type?> (<?=$str1.$str2.$str3?>)</font></td></tr>
<tr><td height=50 colspan=16 align=center id=bg2><font color=limegreen size=6>16강 상황</font><br><font color=orange size=3>(전체 금액 : <?=$admin['bet']?> / 내 투자 금액 : <?=$me['bet']?>)</font></td></tr>
<tr><td height=50 colspan=16 align=center id=bg2><font color=limegreen size=6>16강 상황</font><br><font color=orange size=3>(전체 금액 : <?=$globalBetTotal?> / 내 투자 금액 : <?=$myBetTotal?>)</font></td></tr>
</table>
<table align=center width=1120 class='mimic_flex bg0' style='border:solid 1px gray;font-size:10px;'>
<tr align=center><td height=10 colspan=16></td></tr>
@@ -282,23 +286,16 @@ for ($i=0; $i < 16; $i++) {
echo "<td width=70>{$gen[$i]}</td>";
}
$query = "select bet0,bet1,bet2,bet3,bet4,bet5,bet6,bet7,bet8,bet9,bet10,bet11,bet12,bet13,bet14,bet15 from general where owner='{$userID}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect), "");
$me = MYDB_fetch_array($result);
$myBet = [];
$bet = [];
$gold = [];
for ($i=0; $i < 16; $i++) {
$myBet[$i] = $me["bet{$i}"];
}
for ($i=0; $i < 16; $i++) {
if($admin["bet{$i}"] == 0){
if($globalBet[$i] == 0){
$bet[$i] = "∞";
}
else{
$bet[$i] = round($admin['bet'] / $admin["bet{$i}"], 2);
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
}
}
@@ -352,13 +349,12 @@ echo "
if ($admin['tournament'] == 6) {
echo "
<form method=post action=c_betting.php>
<tr align=center>";
for ($i=0; $i < 16; $i++) {
echo "
<td>
<select size=1 name=gold{$i} style=color:white;background-color:black;>
<select size=1 id='target_{$i}' style=color:white;background-color:black;>
<option style=color:white; value=10>금10</option>
<option style=color:white; value=20>금20</option>
<option style=color:white; value=50>금50</option>
@@ -376,12 +372,10 @@ if ($admin['tournament'] == 6) {
for ($i=0; $i < 16; $i++) {
echo "
<td><input type=submit name=btn{$i} value=베팅! style=width:100%;color:white;background-color:black;></td>";
<td><input type=button class='submitBtn' data-target='{$i}' value=베팅! style=width:100%;color:white;background-color:black;></td>";
}
echo "
</tr>
</form>";
echo "</tr>";
}
?>
+24 -36
View File
@@ -116,12 +116,26 @@ for($i=12; $i >= $lv; $i--) {
$level[$levels['level']] = $levels;
}
$query = "select name,picture,killnum from general where nation='{$nation['nation']}' order by killnum desc limit 5"; // 오호장군
$tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$tigers = $db->query('SELECT value, name
FROM rank_data LEFT JOIN general ON rank_data.general_id = general.no
WHERE rank_data.nation_id = %i AND rank_data.type = "warnum" AND value > 0 ORDER BY value DESC LIMIT 5',
$nation['nation']
);// 오호장군
$tigerstr = join(', ', array_map(function($arr){
$number = number_format($arr['value']);
return "{$arr['name']}【{$number}】";
}, $tigers));
$eagles = $db->query('SELECT value, name
FROM rank_data LEFT JOIN general ON rank_data.general_id = general.no
WHERE rank_data.nation_id = %i AND rank_data.type = "firenum" AND value > 0 ORDER BY value DESC LIMIT 7',
$nation['nation']
);// 건안칠자
$eaglestr = join(', ', array_map(function($arr){
$number = number_format($arr['value']);
return "{$arr['name']}【{$number}】";
}, $eagles));
echo "
<table align=center width=1000 class='tb_layout bg0'>
@@ -147,40 +161,14 @@ for($i=12; $i >= $lv; $i-=2) {
<?php
}
echo "
<tr>
<td width=98 align=center id=bg1>오호장군【승전】</td>
<td colspan=5>
";
$tigernum = MYDB_num_rows($tigerresult);
for($i=0; $i < $tigernum; $i++) {
$tiger = MYDB_fetch_array($tigerresult);
if($tiger['killnum'] > 0) {
echo "{$tiger['name']}【{$tiger['killnum']}】, ";
}
}
echo "
</td>
?>
<tr>
<td width=98 align=center id=bg1>오호장군【승전】</td>
<td colspan=5><?=$tigerstr?></td>
</tr>
<tr>
<td width=98 align=center id=bg1>건안칠자【계략】</td>
<td colspan=5>
";
$eaglenum = MYDB_num_rows($eagleresult);
for($i=0; $i < $eaglenum; $i++) {
$eagle = MYDB_fetch_array($eagleresult);
if($eagle['firenum'] > 0) {
echo "{$eagle['name']}【{$eagle['firenum']}】, ";
}
}
echo "
</td>
<td colspan=5><?=$eaglestr?></td>
</tr>
</table>
<table align=center width=1000 class='tb_layout bg0'>
@@ -190,7 +178,7 @@ echo "
<tr>
<td width=498 align=right id=bg1>대상 장수</td>
<td width=498>
";
<?php
if($meLevel >= 5 && $nation["l{$meLevel}set"] == 0) {
echo "
+5 -8
View File
@@ -394,19 +394,16 @@ for ($i=0; $i < 16; $i++) {
echo"
</tr>";
$betting = $gameStor->getValues(['tournament','bet0','bet1','bet2','bet3','bet4','bet5','bet6','bet7','bet8','bet9','bet10','bet11','bet12','bet13','bet14','bet15']);
$betting['bet'] = 0;
for($i=0;$i<16;$i+=1){
$betting['bet'] += $betting['bet'.$i];
}
$globalBet = array_splice($db->queryFirstList('SELECT * FROM betting WHERE general_id = 0'), -16);
$globalBetTotal = array_sum($globalBet);
$admin = $gameStor->getValues(['tournament', 'phase']);
$bet = [];
for ($i=0; $i < 16; $i++) {
if($betting["bet{$i}"] == 0){
if($globalBet[$i] == 0){
$bet[$i] = '∞';
continue;
}
$bet[$i] = round($betting['bet'] / $betting["bet{$i}"], 2);
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
}
echo "
-67
View File
@@ -1,67 +0,0 @@
<?php
namespace sammo;
include "lib.php";
include "func.php";
// $btn0~15, $gold0~15
//FIXME: 으악!!!!! 왜?! idx를 지정하고 gold를 지정하라고!
$betTarget = -1;
$betGold = -1;
for($i=0;$i<16;$i++){
$textBtn = "btn{$i}";
$textGold = "gold{$i}";
$btn = Util::getReq($textBtn);
$gold = Util::getReq($textGold, 'int');
if($btn === "베팅!" && $gold){
$betTarget = $i;
$betGold = $gold;
break;
}
}
if($betGold == -1){
extractMissingPostToGlobals();
}
if($betTarget < 0 || $betGold < 10 || $betGold > 1000){
header('Location: b_betting.php');
exit();
}
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("베팅", 1);
$tournament = $gameStor->tournament;
if($tournament != 6) {
header('Location: b_betting.php');
exit();
}
$bets = $db->queryFirstList('SELECT bet0,bet1,bet2,bet3,bet4,bet5,bet6,bet7,bet8,bet9,bet10,bet11,bet12,bet13,bet14,bet15,gold FROM general WHERE `owner`=%i', $userID);
$myGold = array_pop($bets);
$totalBet = array_sum($bets);
//NOTE: 위 코드에서 $betTarget은 0~15의 정수임이 보장된다.
$oldBet = $bets[$betTarget];
if($betGold + 500 <= $myGold && $betGold + $oldBet <= 1000 && $betGold + $totalBet <= 1000) {
$db->update('general', [
'gold'=>$db->sqleval('gold - %i', $betGold),
"bet{$betTarget}"=>$db->sqleval("bet{$betTarget} + %i", $betGold),
'betgold'=>$db->sqleval('betgold + %i', $betGold)
], 'owner = %i', $userID);
$gameStor->setValue("bet{$betTarget}", $gameStor->getValue("bet{$betTarget}") + $betGold);//TODO: +로 증가하는 storage값은 별도로 분리
}
header('location: b_betting.php');
+93 -66
View File
@@ -726,13 +726,13 @@ function generalInfo(General $generalObj) {
<tr height=16>
<td style='text-align:center;' class='bg1'><b>통솔</b></td>
<td style='text-align:center;'>&nbsp;{$color}{$leadership}</font>{$lbonus}&nbsp;</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('leadership_max')), 20)."</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('leadership_exp')), 20)."</td>
<td style='text-align:center;' class='bg1'><b>무력</b></td>
<td style='text-align:center;'>&nbsp;{$color}{$strength}</font>&nbsp;</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('strength_max')), 20)."</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('strength_exp')), 20)."</td>
<td style='text-align:center;' class='bg1'><b>지력</b></td>
<td style='text-align:center;'>&nbsp;{$color}{$intel}</font>&nbsp;</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('intel_max')), 20)."</td>
<td style='text-align:center;' width=45>".bar(expStatus($generalObj->getVar('intel_exp')), 20)."</td>
</tr>
<tr>
<td style='text-align:center;' class='bg1'><b>명마</b></td>
@@ -794,8 +794,8 @@ function generalInfo(General $generalObj) {
function generalInfo2(General $generalObj) {
$general = $generalObj->getRaw();
$general['winrate'] = round($general['killnum']/max($general['warnum'],1), 2);
$general['killrate'] = round($general['killcrew']/max($general['deathcrew'],1), 2);
$winRate = round($generalObj->getRankVar('killnum')/max($generalObj->getRankVar('warnum'),1), 2);
$killRate = round($generalObj->getRankVar('killcrew')/max($generalObj->getRankVar('deathcrew'),1), 2);
$experienceBonus = $generalObj->onCalcStat($generalObj, 'experience', 10000) - 10000;
if($experienceBonus > 0){
@@ -853,27 +853,27 @@ function generalInfo2(General $generalObj) {
</tr>
<tr>
<td width=64 style='text-align:center;' class='bg1'><b>전투</b></td>
<td width=132 style='text-align:center;'>{$general['warnum']}</td>
<td width=132 style='text-align:center;'>{$generalObj->getRankVar('warnum')}</td>
<td width=48 style='text-align:center;' class='bg1'><b>계략</b></td>
<td width=98 style='text-align:center;'>{$general['firenum']}</td>
<td width=98 style='text-align:center;'>{$generalObj->getRankVar('firenum')}</td>
<td width=48 style='text-align:center;' class='bg1'><b>사관</b></td>
<td width=98 style='text-align:center;'>{$general['belong']}년</td>
</tr>
<tr>
<td style='text-align:center;' class='bg1'><b>승률</b></td>
<td style='text-align:center;'>{$general['winrate']} %</td>
<td style='text-align:center;'>{$winRate} %</td>
<td style='text-align:center;' class='bg1'><b>승리</b></td>
<td style='text-align:center;'>{$general['killnum']}</td>
<td style='text-align:center;'>{$generalObj->getRankVar('killnum')}</td>
<td style='text-align:center;' class='bg1'><b>패배</b></td>
<td style='text-align:center;'>{$general['deathnum']}</td>
<td style='text-align:center;'>{$generalObj->getRankVar('deathnum')}</td>
</tr>
<tr>
<td style='text-align:center;' class='bg1'><b>살상률</b></td>
<td style='text-align:center;'>{$general['killrate']} %</td>
<td style='text-align:center;'>{$killRate} %</td>
<td style='text-align:center;' class='bg1'><b>사살</b></td>
<td style='text-align:center;'>{$general['killcrew']}</td>
<td style='text-align:center;'>{$generalObj->getRankVar('killcrew')}</td>
<td style='text-align:center;' class='bg1'><b>피살</b></td>
<td style='text-align:center;'>{$general['deathcrew']}</td>
<td style='text-align:center;'>{$generalObj->getRankVar('deathcrew')}</td>
</tr>
</table>
<table width=498 class='tb_layout bg2'>
@@ -1362,84 +1362,111 @@ function CheckHall($no) {
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
$types = array(
"experience",
"dedication",
"firenum",
"warnum",
"killnum",
"winrate",
"killcrew",
"killrate",
"dex0",
"dex10",
"dex20",
"dex30",
"dex40",
"ttrate",
"tlrate",
"tprate",
"tirate",
"betgold",
"betwin",
"betwingold",
"betrate"
);
$types = [
["experience", 'natural'],
["dedication", 'natural'],
["firenum", 'rank'],
["warnum", 'rank'],
["killnum", 'rank'],
["winrate", 'rank'],
["killcrew", 'rank'],
["killrate", 'calc'],
["dex0", 'natural'],
["dex10", 'natural'],
["dex20", 'natural'],
["dex30", 'natural'],
["dex40", 'natural'],
["ttrate", 'calc'],
["tlrate", 'calc'],
["tprate", 'calc'],
["tirate", 'calc'],
["betgold", 'rank'],
["betwin", 'rank'],
["betwingold", 'rank'],
["betrate", 'calc'],
];//XXX: 순서가 DB에 박혀있다 ㅜㅜ
$general = $db->queryFirstRow('SELECT name,name2,owner,nation,picture,imgsvr,
experience,dedication,warnum,firenum,killnum,
killnum/warnum as winrate,killcrew,killcrew/deathcrew as killrate,
dex0,dex10,dex20,dex30,dex40,
ttw/(ttw+ttd+ttl) as ttrate, ttw+ttd+ttl as tt,
tlw/(tlw+tld+tll) as tlrate, tlw+tld+tll as tl,
tsw/(tsw+tsd+tsl) as tprate, tsw+tsd+tsl as ts,
tiw/(tiw+tid+til) as tirate, tiw+tid+til as ti,
betgold, betwin, betwingold, betwingold/betgold as betrate
from general where no=%i', $no);
$generalObj = General::createGeneralObjFromDB($no, null, 2);
if(!$general){
$ttw = $generalObj->getRankVar('ttw');
$ttd = $generalObj->getRankVar('ttd');
$ttl = $generalObj->getRankVar('ttl');
$tlw = $generalObj->getRankVar('tlw');
$tld = $generalObj->getRankVar('tld');
$tll = $generalObj->getRankVar('tll');
$tsw = $generalObj->getRankVar('tsw');
$tsd = $generalObj->getRankVar('tsd');
$tsl = $generalObj->getRankVar('tsl');
$tiw = $generalObj->getRankVar('tiw');
$tid = $generalObj->getRankVar('tid');
$til = $generalObj->getRankVar('til');
$tt = max($ttw+$ttd+$ttl, 1);
$tl = max($tlw+$tld+$tll, 1);
$ts = max($tsw+$tsd+$tsl, 1);
$ti = max($tiw+$tid+$til, 1);
$calcVar = [];
$calcVar['ttrate'] = $ttw/$tt;
$calcVar['tlrate'] = $tlw/$tl;
$calcVar['tsrate'] = $tsw/$ts;
$calcVar['tirate'] = $tiw/$ti;
if($generalObj instanceof DummyGeneral){
return;
}
$unitedDate = TimeUtil::now();
$nation = getNationStaticInfo($general['nation']);
$nation = $generalObj->getStaticNation();
$serverCnt = $db->queryFirstField('SELECT count(*) FROM ng_games');
[$scenarioIdx, $scenarioName, $startTime] = $gameStor->getValuesAsArray(['scenario', 'scenario_text', 'starttime']);
$ownerName = $general['name2'];
if($general['owner']){
$ownerName = RootDB::db()->queryFirstField('SELECT name FROM member WHERE no = %i', $general['owner']);
$ownerName = $generalObj->getVar('name2');
if($generalObj->getVar('owner')){
$ownerName = RootDB::db()->queryFirstField('SELECT name FROM member WHERE no = %i', $generalObj->getVar('owner'));
}
foreach($types as $idx=>$typeName) {
foreach($types as $idx=>[$typeName, $valueType]) {
if($valueType === 'natural'){
$value = $generalObj->getVar($typeName);
}
else if($valueType === 'rank'){
$value = $generalObj->getRankVar($typeName);
}
else if($valueType === 'calc'){
$value = $calcVar[$typeName];
}
//승률,살상률인데 10회 미만 전투시 스킵
if(($typeName === 'winrate' || $typeName === 'killrate') && $general['warnum']<10) { continue; }
if(($typeName === 'winrate' || $typeName === 'killrate') && $generalObj->getRankVar('warnum')<10) { continue; }
//토너승률인데 50회 미만시 스킵
if($typeName === 'ttrate' && $general['tt'] < 50) { continue; }
if($typeName === 'ttrate' && $tt < 50) { continue; }
//토너승률인데 50회 미만시 스킵
if($typeName === 'tlrate' && $general['tl'] < 50) { continue; }
if($typeName === 'tlrate' && $tl < 50) { continue; }
//토너승률인데 50회 미만시 스킵
if($typeName === 'tsrate' && $general['ts'] < 50) { continue; }
if($typeName === 'tsrate' && $ts < 50) { continue; }
//토너승률인데 50회 미만시 스킵
if($typeName === 'tirate' && $general['ti'] < 50) { continue; }
if($typeName === 'tirate' && $ti < 50) { continue; }
//수익률인데 1000미만시 스킵
if($typeName === 'betrate' && $general['betgold'] < 1000) { continue; }
if($typeName === 'betrate' && $generalObj->getRankVar('betgold') < 1000) { continue; }
if($general[$typeName]<=0){
if($value<=0){
continue;
}
$aux = [
'name'=>$general['name'],
'name'=>$generalObj->getName(),
'nationName'=>$nation['name'],
'bgColor'=>$nation['color'],
'fgColor'=>newColor($nation['color']),
'picture'=>$general['picture'],
'imgsvr'=>$general['imgsvr'],
'picture'=>$generalObj->getVar('picture'),
'imgsvr'=>$generalObj->getVar('imgsvr'),
'startTime'=>$startTime,
'unitedTime'=>$unitedDate,
'owner_name'=>$ownerName,
@@ -1456,14 +1483,14 @@ function CheckHall($no) {
'scenario'=>$scenarioIdx,
'general_no'=>$no,
'type'=>$idx,
'value'=>$general[$typeName]??0,
'owner'=>$general['owner']??null,
'value'=>$value,
'owner'=>$generalObj->getVar('owner'),
'aux'=>$jsonAux
]);
if($db->affectedRows() == 0){
$db->update('ng_hall', [
'value'=>$general[$typeName]??0,
'value'=>$value,
'aux'=>$jsonAux
],
'server_id = %s AND scenario = %i AND general_no = %i AND type = %i AND value < %d',
@@ -1471,7 +1498,7 @@ function CheckHall($no) {
$scenarioIdx,
$no,
$idx,
$general[$typeName]??0);
$value);
}
}
+21 -21
View File
@@ -1114,7 +1114,7 @@ function checkStatistic() {
}
foreach($db->queryAllLists(
'SELECT crewtype, count(crewtype) AS cnt FROM general WHERE crew>=100 OR deathnum>0 GROUP BY crewtype'
'SELECT crewtype, count(crewtype) AS cnt FROM general WHERE recwar != NULL GROUP BY crewtype'
) as [$crewtype, $cnt]
){
$crewtypeHists[$crewtype] = $cnt;
@@ -1272,27 +1272,27 @@ function checkEmperior() {
$oldNationGenerals = $db->queryFirstColumn('SELECT `no` FROM general WHERE nation=%i', $nation['nation']);
$oldNation['generals'] = $oldNationGenerals;
$query = "select name,picture,killnum from general where nation='{$nation['nation']}' order by killnum desc limit 5"; // 오호장군
$tigerresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$tigernum = MYDB_num_rows($tigerresult);
$tigerstr = '';
for($i=0; $i < $tigernum; $i++) {
$tiger = MYDB_fetch_array($tigerresult);
if($tiger['killnum'] > 0) {
$tigerstr .= "{$tiger['name']}{$tiger['killnum']}】, ";
}
}
$tigers = $db->query('SELECT value, name
FROM rank_data LEFT JOIN general ON rank_data.general_id = general.no
WHERE rank_data.nation_id = %i AND rank_data.type = "warnum" AND value > 0 ORDER BY value DESC LIMIT 5',
$nation['nation']
);// 오호장군
$query = "select name,picture,firenum from general where nation='{$nation['nation']}' order by firenum desc limit 7"; // 건안칠자
$eagleresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$eaglenum = MYDB_num_rows($eagleresult);
$eaglestr = '';
for($i=0; $i < $eaglenum; $i++) {
$eagle = MYDB_fetch_array($eagleresult);
if($eagle['firenum'] > 0) {
$eaglestr .= "{$eagle['name']}{$eagle['firenum']}】, ";
}
}
$tigerstr = join(', ', array_map(function($arr){
$number = number_format($arr['value']);
return "{$arr['name']}{$number}";
}, $tigers));
$eagles = $db->query('SELECT value, name
FROM rank_data LEFT JOIN general ON rank_data.general_id = general.no
WHERE rank_data.nation_id = %i AND rank_data.type = "firenum" AND value > 0 ORDER BY value DESC LIMIT 7',
$nation['nation']
);// 건안칠자
$eaglestr = join(', ', array_map(function($arr){
$number = number_format($arr['value']);
return "{$arr['name']}{$number}";
}, $eagles));
$log = ["<C>●</>{$admin['year']}{$admin['month']}월: <D><b>{$nation['name']}</b></>{$josaYi} 전토를 통일하였습니다."];
+2 -2
View File
@@ -1509,7 +1509,7 @@ function process_76(&$general) {
$type = Util::choiceRandomUsingWeight([
'strength0'=>1,
'strength1'=>1,
'strength_max'=>1,
'strength_exp'=>1,
'intel'=>3,
'neutral'=>0
]);
@@ -1526,7 +1526,7 @@ function process_76(&$general) {
$intel = $stat_tier3;
$dexVal = [$dexTotal/8, $dexTotal*5/8, $dexTotal/8, $dexTotal/8];
break;
case 'strength_max':
case 'strength_exp':
$leadership = $stat_tier1;
$strength = $stat_tier2;
$intel = $stat_tier3;
+154 -139
View File
@@ -250,11 +250,11 @@ function startTournament($auto, $type) {
$gameStor->tournament = 1;
$gameStor->tnmt_type = $type;
$gameStor->phase = 0;
for($i=0;$i<16;$i+=1){
$gameStor->setValue("bet{$i}", 0);
}
$db->update('general', [
'tournament'=>0,
], true);
$db->update('betting', [
'bet0'=>0,
'bet1'=>0,
'bet2'=>0,
@@ -641,10 +641,7 @@ function setGift($tnmt_type, $tnmt, $phase) {
$admin = $gameStor->getValues(['year', 'month', 'develcost']);
$genNo = [];
$genName = [];
$genGold = [];
$genCall = [];
$resultHelper = [];
switch($tnmt_type) {
case 0: $tp = "전력전"; $tp2 = "tt"; break;
@@ -655,137 +652,147 @@ function setGift($tnmt_type, $tnmt, $phase) {
//16강자 명성 돈
$cost = $admin['develcost'];
$query = "select no,name from tournament where grp>=20 and grp<30";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set experience=experience+25,gold=gold+'$cost',{$tp2}g={$tp2}g+1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
foreach($db->query('SELECT no, name, grp, grp_no FROM tournament WHERE grp>=20 AND grp<30 AND no > 0') as $general){
$generalID = $general['no'];
$db->update('general', [
'experience'=>$db->sqleval('experience + 25'),
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no=%i', $general['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + 1', "{$tp2}g")
], 'general_id = %i', $general['no']);
//포상 장수 이름, 금액
$genNo[$i] = $general['no'];
$genName[$i] = $general['name'];
$genGold[$general['no']] = $cost;
$genCall[$general['no']] = "<span class='ev_highlight'>16강 진출</span>";
$logger = new ActionLogger($generalID, 0, $admin['year'], $admin['month']);
$resultHelper[$generalID] = [
'id'=>$generalID,
'grp'=>$general['grp'],
'grp_no'=>$general['grp_no'],
'reward'=>$cost,
'msg'=>"<span class='ev_highlight'>16강 진출</span>",
'logger'=>$logger
];
}
//8강자 명성 돈
$cost = $admin['develcost'] * 2;
$query = "select no from tournament where grp>=30 and grp<40";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set experience=experience+50,gold=gold+'$cost',{$tp2}g={$tp2}g+1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
foreach($db->query('SELECT no, name FROM tournament WHERE grp>=30 AND grp<40 AND no > 0') as $general){
$generalID = $general['no'];
$db->update('general', [
'experience'=>$db->sqleval('experience + 50'),
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no=%i', $general['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + 1', "{$tp2}g")
], 'general_id = %i', $general['no']);
//포상 장수 이름, 금액
$genGold[$general['no']] += $cost;
$genCall[$general['no']] = "<span class='ev_highlight'>8강 진출</span>";
$resultHelper[$generalID]['reward'] += $cost;
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>8강 진출</span>";
}
//4강자 명성 돈
$cost = $admin['develcost'] * 3;
$query = "select no from tournament where grp>=40 and grp<50";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set experience=experience+75,gold=gold+'$cost',{$tp2}g={$tp2}g+2 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
foreach($db->query('SELECT no, name FROM tournament WHERE grp>=40 AND grp<50 AND no > 0') as $general){
$generalID = $general['no'];
$db->update('general', [
'experience'=>$db->sqleval('experience + 50'),
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no=%i', $general['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + 2', "{$tp2}g")
], 'general_id = %i', $general['no']);
//포상 장수 이름, 금액
$genGold[$general['no']] += $cost;
$genCall[$general['no']] = "<span class='ev_highlight'>4강 진출</span>";
$resultHelper[$generalID]['reward'] += $cost;
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>4강 진출</span>";
}
//결승자 명성 돈
$cost = $admin['develcost'] * 6;
$query = "select no from tournament where grp>=50 and grp<60";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set experience=experience+150,gold=gold+'$cost',{$tp2}g={$tp2}g+2 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
foreach($db->query('SELECT no, name, lose FROM tournament WHERE grp>=50 AND grp<60 AND no > 0') as $general){
$generalID = $general['no'];
$db->update('general', [
'experience'=>$db->sqleval('experience + 100'),
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no=%i', $general['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + 2', "{$tp2}g")
], 'general_id = %i', $general['no']);
//포상 장수 이름, 금액
$genGold[$general['no']] += $cost;
$genCall[$general['no']] = "<span class='ev_highlight'>준우승</span>으";
$resultHelper[$generalID]['reward'] += $cost;
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>준우승</span>으";
if($general['lose'] > 0){
$runnerUp = $general;
}
}
//우승자 명성 돈
$cost = $admin['develcost'] * 8;
$query = "select no from tournament where grp>=60";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set experience=experience+200,gold=gold+'$cost',{$tp2}g={$tp2}g+3,{$tp2}p={$tp2}p+1 where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
foreach($db->query('SELECT no, name FROM tournament WHERE grp>=6 AND no > 0') as $general){
$generalID = $general['no'];
$db->update('general', [
'experience'=>$db->sqleval('experience + 200'),
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no=%i', $general['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + 2', "{$tp2}g")
], 'general_id = %i', $general['no']);
//포상 장수 이름, 금액
$genGold[$general['no']] += $cost;
$genCall[$general['no']] = "<span class='ev_highlight'>우승</span>으";
$resultHelper[$generalID]['reward'] += $cost;
$resultHelper[$generalID]['msg'] = "<span class='ev_highlight'>우승</span>으";
$winner = $general;
}
//우승자 이름
$query = "select no,name from tournament where grp=60";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
//준우승자 이름
$query = "select no,name from tournament where grp=50 and lose=1";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general2 = MYDB_fetch_array($result);
//자동진행 끝
$gameStor->tnmt_auto = 0;
//장수열전 기록
$query = "select no from general where no={$general['no']}";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen1 = MYDB_fetch_array($result);
$query = "select no from general where no={$general2['no']}";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen2 = MYDB_fetch_array($result);
pushGeneralHistory($gen1, "<C>●</>{$admin['year']}{$admin['month']}월:<C>{$tp}</> 대회에서 우승");
pushGeneralHistory($gen2, "<C>●</>{$admin['year']}{$admin['month']}월:<C>{$tp}</> 대회에서 준우승");
/** @var ActionLogger */
$winnerLogger = $resultHelper[$winner['no']]['logger'];
$winnerLogger->pushGeneralHistoryLog("<C>{$tp}</> 대회에서 우승");
/** @var ActionLogger */
$runnerUpLogger = $resultHelper[$runnerUp['no']]['logger'];
$runnerUpLogger->pushGeneralHistoryLog("<C>{$tp}</> 대회에서 준우승");
$cost = $admin['develcost'] * 20;
$cost2 = $admin['develcost'] * 12;
$josaYi1 = JosaUtil::pick($general['name'], '이');
$josaYi2 = JosaUtil::pick($general2['name'], '이');
$history = [
"<S>◆</>{$admin['year']}{$admin['month']}월: <C>{$tp}</> 대회에서 <Y>{$general['name']}</>{$josaYi1} <C>우승</>, <Y>{$general2['name']}</>{$josaYi2} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!",
"<S>◆</>{$admin['year']}{$admin['month']}월: <C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$cost}</>, <S>준우승자</>에겐 <C>{$cost2}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!"
];
pushWorldHistory($history, $admin['year'], $admin['month']);
for($i=0; $i < count($genNo); $i++) {
$general['no'] = $genNo[$i];
$general['name'] = $genName[$i];
pushGenLog($general, ["<S>◆</><C>{$tp}</> 대회의 {$genCall[$genNo[$i]]}로 <C>{$genGold[$genNo[$i]]}</>의 <S>상금</>, 약간의 <S>명성</> 획득!"]);
$winnerRewardText = number_format($resultHelper[$winner['no']]['reward']);
$runnerUpRewardText = number_format($resultHelper[$runnerUp['no']]['reward']);
$josaYiWinner = JosaUtil::pick($winner['name'], '이');
$josaYiRunnerUp = JosaUtil::pick($runnerUp['name'], '이');
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회에서 <Y>{$winner['name']}</>{$josaYiWinner} <C>우승</>, <Y>{$runnerUp['name']}</>{$josaYiRunnerUp} <C>준우승</>을 차지하여 천하에 이름을 떨칩니다!", ActionLogger::EVENT_YEAR_MONTH);
$winnerLogger->pushGlobalHistoryLog("<C>{$tp}</> 대회의 <S>우승자</>에게는 <C>{$winnerRewardText}</>, <S>준우승자</>에겐 <C>{$runnerUpRewardText}</>의 <S>상금</>과 약간의 <S>명성</>이 주어집니다!", ActionLogger::EVENT_YEAR_MONTH);
foreach($resultHelper as $general){
$rewardText = number_format($general['reward']);
/** @var ActionLogger */
$logger = $general['logger'];
$logger->pushGeneralActionLog("<C>{$tp}</> 대회의 {$general['msg']}로 <C>{$rewardText}</>의 <S>상금</>, 약간의 <S>명성</> 획득!", ActionLogger::EVENT_PLAIN);
}
//우승자 번호
$query = "select no from tournament where grp=60";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
//16강 목록에서 검색
$query = "select grp,grp_no from tournament where grp>=20 and grp<30 and no='{$general['no']}'";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$general = MYDB_fetch_array($result);
$no = ($general['grp'] - 20) * 2 + $general['grp_no'];
$admin = $gameStor->getValues(['bet0','bet1','bet2','bet3','bet4','bet5','bet6','bet7','bet8','bet9','bet10','bet11','bet12','bet13','bet14','bet15']);
$admin['bet'] = array_sum($admin);
$bet = @round($admin['bet'] / $admin["bet{$no}"], 2);
$winnerGrp = $resultHelper[$winner['no']]['grp'];
$winnerGrpNo = $resultHelper[$winner['no']]['grp_no'];
$winnerSlot = ($winnerGrp - 20) * 2 + $winnerGrpNo;
//당첨칸에 베팅한 사람들만
$query = "select no,name,gold,bet{$no} as bet from general where bet{$no}>0";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$gen = MYDB_fetch_array($result);
$gold = Util::round($gen['bet'] * $bet);
//금 지급
$query = "update general set gold=gold+'$gold',betwingold=betwingold+'$gold',betwin=betwin+1 where no='{$gen['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
//로그
pushGenLog($gen, ["<S>◆</><C>{$tp}</> 대회의 베팅 당첨으로 <C>{$gold}</>의 <S>금</> 획득!"]);
$globalBet = array_splice($db->queryFirstList('SELECT * FROM betting WHERE general_id = 0'), -16);
$globalBetTotal = array_sum($globalBet);
$rewardRate = round($globalBetTotal / max($globalBet[$winnerSlot], 1), 2);
$betKey = "bet{$winnerSlot}";
$gambleResult = Util::convertArrayToDict($db->query('SELECT no, %b as bet FROM betting WHERE %b > 0', $betKey, $betKey), 'no');
foreach(General::createGeneralObjListFromDB(Util::squeezeFromArray($gambleResult, 'no'), ['gold'], 1) as $gambler){
$reward = Util::round($gambleResult[$gambler->getID()]['bet'] * $rewardRate);
$gambler->increaseVar('gold', $reward);
$gambler->increaseRankVar('betwingold', $reward);
$gambler->increaseRankVar('betwin', 1);
$rewardText = number_format($reward);
$gambler->getLogger()->pushGeneralActionLog("<C>{$tp}</> 대회의 베팅 당첨으로 <C>{$rewardText}</>의 <S>금</> 획득!", ActionLogger::EVENT_PLAIN);
$gambler->applyDB($db);
}
}
@@ -796,20 +803,18 @@ function setRefund() {
//16강자 명성 돈
$cost = $gameStor->develcost;
$query = "select no from tournament where grp<10";
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$count = MYDB_num_rows($result);
for($i=0; $i < $count; $i++) {
$general = MYDB_fetch_array($result);
$query = "update general set gold=gold+'$cost' where no='{$general['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
$generalIDList = $db->queryFirstColumn('SELECT no FROM tournament WHERE grp<10 AND no >0');
$db->update('general', [
'gold'=>$db->sqleval('gold + %i', $cost)
], 'no IN %li', $generalIDList);
//베팅금 환수
$db->update(['general', [
'gold'=>$db->sqleval('gold + (SELECT bet0+bet1+bet2+bet3+bet4+bet5+bet6+bet7+bet8+bet9+bet10+bet11+bet12+bet13+bet14+bet15 FROM betting WHERE general_id = general.no)')
]], true);
//자동진행 끝
$gameStor->tnmt_auto = 0;
//베팅금 환수
$query = "update general set gold=gold+bet0+bet1+bet2+bet3+bet4+bet5+bet6+bet7+bet8+bet9+bet10+bet11+bet12+bet13+bet14+bet15";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
}
//10차이 1.1, 50 차이 1.17, 100차이 1.2
@@ -1063,14 +1068,12 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$query = "update tournament set lose=lose+1,gl=gl-'$gl' where grp='$group' and grp_no='$g2'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
if($general1['gl'] > $general2['gl']) { $gl1 = "+1"; $gl2 = "+0"; }
elseif($general1['gl'] == $general2['gl']) { $gl1 = "+2"; $gl2 = "-1"; }
else { $gl1 = "+3"; $gl2 = "-2"; }
if($general1['gl'] > $general2['gl']) { $gl1 = 1; $gl2 = 0; }
elseif($general1['gl'] == $general2['gl']) { $gl1 = 2; $gl2 = -1; }
else { $gl1 = 3; $gl2 = -2; }
$query = "update general set {$tp2}w={$tp2}w+1,{$tp2}g={$tp2}g{$gl1} where no='{$gen1['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set {$tp2}l={$tp2}l+1,{$tp2}g={$tp2}g{$gl2} where no='{$gen2['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen1resKey = 'w';
$gen2resKey = 'l';
break;
case 1:
$log[] = "<S>●</> <Y>{$gen2['name']}</> <S>승리</>!";
@@ -1081,14 +1084,12 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$query = "update tournament set lose=lose+1,gl=gl-'$gl' where grp='$group' and grp_no='$g1'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
if($general2['gl'] > $general1['gl']) { $gl2 = "+1"; $gl1 = "+0"; }
elseif($general2['gl'] == $general1['gl']) { $gl2 = "+2"; $gl1 = "-1"; }
else { $gl2 = "+3"; $gl1 = "-2"; }
if($general2['gl'] > $general1['gl']) { $gl2 = 1; $gl1 = 0; }
elseif($general2['gl'] == $general1['gl']) { $gl2 = 2; $gl1 = -1; }
else { $gl2 = 3; $gl1 = -2; }
$query = "update general set {$tp2}l={$tp2}l+1,{$tp2}g={$tp2}g{$gl1} where no='{$gen1['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set {$tp2}w={$tp2}w+1,{$tp2}g={$tp2}g{$gl2} where no='{$gen2['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen1resKey = 'l';
$gen2resKey = 'w';
break;
case 2:
$log[] = "<S>●</> 무승부!";
@@ -1096,17 +1097,31 @@ function fight($tnmt_type, $tnmt, $phs, $group, $g1, $g2, $type) {
$query = "update tournament set draw=draw+1 where grp='$group' and (grp_no='$g1' or grp_no='$g2')";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
if($general1['gl'] > $general2['gl']) { $gl2 = "-1"; $gl1 = "+1"; }
elseif($general1['gl'] == $general2['gl']) { $gl2 = "+0"; $gl1 = "+0"; }
else { $gl2 = "+1"; $gl1 = "-1"; }
if($general1['gl'] > $general2['gl']) { $gl2 = -1; $gl1 = 1; }
elseif($general1['gl'] == $general2['gl']) { $gl2 = 0; $gl1 = 0; }
else { $gl2 = +1; $gl1 = -1; }
$query = "update general set {$tp2}d={$tp2}d+1,{$tp2}g={$tp2}g{$gl1} where no='{$gen1['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$query = "update general set {$tp2}d={$tp2}d+1,{$tp2}g={$tp2}g{$gl2} where no='{$gen2['no']}'";
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
$gen1resKey = 'd';
$gen2resKey = 'd';
break;
}
$db->update('rank_data', [
"{$tp2}{$gen1resKey}" => $db->sqleval('%b + 1', "{$tp2}{$gen1resKey}")
], 'no=%i',$gen1['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + %i', "{$tp2}g", $gl1)
], 'no=%i',$gen1['no']);
$db->update('rank_data', [
"{$tp2}{$gen2resKey}" => $db->sqleval('%b + 1', "{$tp2}{$gen2resKey}")
], 'no=%i',$gen2['no']);
$db->update('rank_data', [
"{$tp2}g" => $db->sqleval('%b + %i', "{$tp2}g", $gl2)
], 'no=%i',$gen2['no']);
if(($tnmt == 2 && $phs < 55) || ($tnmt == 4 && $phs < 5)) {
$cand = getTwo($tnmt, $phs+1);
+73
View File
@@ -0,0 +1,73 @@
<?php
namespace sammo;
include "lib.php";
include "func.php";
$betTarget = Util::getReq('target', 'int', -1);
$betGold = Util::getReq('amount', 'int', 0);
if($betTarget < 0 || $betTarget >= 16 || $betGold < 10 || $betGold > 1000){
Json::die([
'result'=>false,
'reason'=>'올바르지 않은 입력입니다'
]);
}
//로그인 검사
$session = Session::requireGameLogin()->setReadOnly();
$userID = Session::getUserID();
$generalID = $session->generalID;
$db = DB::db();
$gameStor = KVStorage::getStorage($db, 'game_env');
increaseRefresh("베팅", 1);
$tournament = $gameStor->tournament;
if($tournament != 6) {
Json::die([
'result'=>false,
'reason'=>'베팅 기간이 아닙니다.'
]);
}
$myGold = $db->queryFirstField('SELECT gold FROM general WHERE no = %i', $generalID);
$bets = array_splice($db->queryFirstList('SELECT * FROM betting WHERE general_id = %i', $generalID), -16);
$totalBet = array_sum($bets);
$oldBet = $bets[$betTarget];
$targetKey = "bet{$betTarget}";
if($myGold - $betGold < 500){
Json::die([
'result'=>false,
'reason'=>'여유 자금이 부족합니다.'
]);
}
if($betGold + $totalBet > 1000){
Json::die([
'result'=>false,
'reason'=>'베팅 허용 금액을 초과했습니다.'
]);
}
$db->update('betting', [
$targetKey=>$db->sqleval('%b + %i', $targetKey, $betGold),
], 'general_id = %i', $generalID);
$db->update('general', [
'gold'=>$db->sqleval('gold - %i', $betGold),
], 'no = %i', $generalID);
$db->update('rank_data', [
'value'=>$db->sqleval('value + %i', $betGold)
], 'general_id = %i AND type = "betgold"', $generalID);
$db->update('betting', [
$targetKey=>$db->sqleval('%b + %i', $targetKey, $betGold)
], 'general_id = 0');
Json::die([
'result'=>true,
'reason'=>'SUCCESS'
]);
+6 -6
View File
@@ -82,15 +82,14 @@ $rawDefenderNation = $query['defenderNation'];
$generalCheck = [
'required'=>[
'no', 'name', 'nation', 'turntime', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_max', 'book', 'strength', 'strength_max', 'weapon', 'injury', 'leadership', 'leadership_max', 'horse', 'item',
'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item',
'explevel', 'experience', 'dedication', 'level', 'gold', 'rice', 'dex0', 'dex10', 'dex20', 'dex30', 'dex40',
'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew', 'recwar'
'recwar'
],
'integer'=>[
'no', 'nation', 'personal', 'special2', 'crew', 'crewtype', 'atmos', 'train',
'intel', 'intel_max', 'book', 'strength', 'strength_max', 'weapon', 'injury', 'leadership', 'leadership_max', 'horse', 'item',
'intel', 'intel_exp', 'book', 'strength', 'strength_exp', 'weapon', 'injury', 'leadership', 'leadership_exp', 'horse', 'item',
'explevel', 'experience', 'dedication', 'level', 'gold', 'rice', 'dex0', 'dex10', 'dex20', 'dex30', 'dex40',
'warnum', 'killnum', 'deathnum', 'killcrew', 'deathcrew'
],
'min'=>[
['no', 1],
@@ -276,8 +275,9 @@ function simulateBattle(
$defenderList, $rawDefenderCity, $rawDefenderNation,
$startYear, $year, $month, $cityRate
){
$attacker = new WarUnitGeneral(
new General($rawAttacker, $rawAttackerCity, $year, $month),
new General($rawAttacker, null, $rawAttackerCity, $year, $month),
$rawAttackerNation,
true
);
@@ -317,7 +317,7 @@ function simulateBattle(
$defenderRice += $rawGeneral['rice'];
$retVal = new WarUnitGeneral(
new General($rawGeneral, $rawDefenderCity, $year, $month),
new General($rawGeneral, null, $rawDefenderCity, $year, $month),
$rawDefenderNation,
false
);
+9
View File
@@ -264,6 +264,15 @@ foreach(range(0, GameConst::$maxTurn - 1) as $turnIdx){
];
}
$db->insert('general_turn', $turnRows);
foreach(General::RANK_COLUMN as $rankColumn){
$db->insert('rank_data', [
'general_id'=>$generalID,
'nation_id'=>0,
'type'=>$rankColumn,
'value'=>0
]);
}
$cityname = CityConst::byID($city)->name;
$me = [
+4 -9
View File
@@ -365,20 +365,15 @@ jQuery(function($){
city: (generalData.no)<=1 ? 1 : 3,
turntime:'2018-08-26 12:00',
special:defaultSpecialDomestic,
leadership_max:0,
strength_max:0,
intel_max:0,
leadership_exp:0,
strength_exp:0,
intel_exp:0,
gold:10000,
dedication:0,
warnum:0,
killnum:0,
deathnum:0,
killcrew:20000,
deathcrew:20000,
recwar:'SUCCESS',
recwar:'2018-08-26 12:00',
experience:Math.pow(generalData.explevel, 2),
};
+31
View File
@@ -0,0 +1,31 @@
jQuery(function($){
$('.submitBtn').click(function(){
var $this = $(this);
var target = parseInt($this.data('target'));
var amount = $('target_{0}'.format(target)).val();
$.post({
url:'j_betting.php',
dataType:'json',
data:{
target:target,
amount:amount
}
}).then(function(data){
if(!data){
return quickReject('베팅을 실패했습니다.');
}
if(!data.result){
return quickReject('베팅을 실패했습니다. : '+data.reason);
}
location.reload();
}, errUnknown)
.fail(function(reason){
alert(reason);
location.reload();
});
return false;
});
});
-2
View File
@@ -27,7 +27,6 @@ function submitArticle(){
if(!data){
$title.val(title);
$text.val(text);
alert()
return quickReject('글을 올리는데 실패했습니다.');
}
if(!data.result){
@@ -70,7 +69,6 @@ function submitComment(){
}).then(function(data){
if(!data){
$text.val(text);
alert()
return quickReject('댓글을 다는데 실패했습니다.');
}
if(!data.result){
-3
View File
@@ -65,7 +65,6 @@ function repondLetter(letterNo, isAgree, reason){
}
}).then(function(data){
if(!data){
alert()
return quickReject('응답을 실패했습니다.');
}
if(!data.result){
@@ -99,7 +98,6 @@ function rollbackLetter(letterNo){
}
}).then(function(data){
if(!data){
alert()
return quickReject('회수를 실패했습니다.');
}
if(!data.result){
@@ -128,7 +126,6 @@ function destroyLetter(letterNo){
}
}).then(function(data){
if(!data){
alert()
return quickReject('파기를 실패했습니다.');
}
if(!data.result){
-35
View File
@@ -56,38 +56,3 @@ function LogText($prefix, $variable)
$text = sprintf('%s : %s'."\r\n", $prefix, var_export($variable, true));
file_put_contents(ROOT.'/d_log/dbg_logs.txt', $text, FILE_APPEND);
}
function extractMissingPostToGlobals()
{
$result = [];
if (isset($_POST) && count($_POST) > 0) {
foreach($_POST as $key=>$val){
if(is_numeric($key)){
continue;
}
if(isset($GLOBALS[$key])){
continue;
}
$result[$key]=$val;
$GLOBALS[$key]=$val;
}
}
if (isset($_GET) && count($_GET) > 0) {
foreach($_GET as $key=>$val){
if(is_numeric($key)){
continue;
}
if(isset($GLOBALS[$key])){
continue;
}
$result[$key]=$val;
$GLOBALS[$key]=$val;
}
}
if($result){
LogText($_SERVER['REQUEST_URI'], $result);
}
}
+2 -4
View File
@@ -33,10 +33,8 @@ function processWar(General $attackerGeneral, array $rawAttackerNation, array $r
$city = new WarUnitCity($rawDefenderCity, $rawDefenderNation, $year, $month, $cityRate);
$defenderList = [];
foreach ($db->query('SELECT no,name,nation,turntime,personal,special,special2,crew,crewtype,atmos,train,intel,intel_max,book,strength,strength_max,weapon,injury,leadership,leadership_max,horse,item,explevel,experience,dedication,level,gold,rice,dex0,dex10,dex20,dex30,dex40,warnum,killnum,deathnum,killcrew,deathcrew,recwar,defence_train FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city')) as $rawGeneral){
$defenderList[] = new General($rawGeneral, $rawDefenderCity, $year, $month);
}
$defenderIDList = $db->queryFirstColumn('SELECT no FROM general WHERE nation=%i AND city=%i AND nation!=0 and crew > 0 and rice>(crew/100) and train>=defence_train and atmos>=defence_train', $city->getVar('nation'), $city->getVar('city'));
$defenderList = General::createGeneralObjListFromDB($defenderIDList, null, 2);
usort($defenderList, function(General $lhs, General $rhs){
return -(extractBattleOrder($lhs) <=> extractBattleOrder($rhs));
+1 -1
View File
@@ -149,7 +149,7 @@ class che_강행 extends Command\GeneralCommand{
[$reqGold, $reqRice] = $this->getCost();
$general->increaseVarWithLimit('gold', -$reqGold, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
+3 -3
View File
@@ -77,13 +77,13 @@ class che_견문 extends Command\GeneralCommand{
$exp += 60;
}
if($type & SightseeingMessage::IncLeadership){
$general->increaseVar('leadership_max', 2);
$general->increaseVar('leadership_exp', 2);
}
if($type & SightseeingMessage::IncStrength){
$general->increaseVar('strength_max', 2);
$general->increaseVar('strength_exp', 2);
}
if($type & SightseeingMessage::IncIntel){
$general->increaseVar('intel_max', 2);
$general->increaseVar('intel_exp', 2);
}
if($type & SightseeingMessage::IncGold){
$general->increaseVar('gold', 300);
@@ -158,9 +158,9 @@ class che_군량매매 extends Command\GeneralCommand{
$ded = $general->onCalcStat($general, 'dedication', $ded);
$incStat = Util::choiceRandomUsingWeight([
'leadership_max'=>$general->getLeadership(false, false, false, false),
'strength_max'=>$general->getStrength(false, false, false, false),
'intel_max'=>$general->getIntel(false, false, false, false)
'leadership_exp'=>$general->getLeadership(false, false, false, false),
'strength_exp'=>$general->getStrength(false, false, false, false),
'intel_exp'=>$general->getIntel(false, false, false, false)
]);
$general->increaseVar('experience', $exp);
+1 -1
View File
@@ -102,7 +102,7 @@ class che_귀환 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
@@ -126,7 +126,7 @@ class che_기술연구 extends che_상업투자{
$general->increaseVarWithLimit('gold', -$this->reqGold, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar(static::$statKey.'_max', 1);
$general->increaseVar(static::$statKey.'_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
+3 -3
View File
@@ -116,9 +116,9 @@ class che_단련 extends Command\GeneralCommand{
$general->addDex($general->getCrewTypeObj(), $score, false);
$incStat = Util::choiceRandomUsingWeight([
'leadership_max'=>$general->getLeadership(false, false, false, false),
'strength_max'=>$general->getStrength(false, false, false, false),
'intel_max'=>$general->getIntel(false, false, false, false)
'leadership_exp'=>$general->getLeadership(false, false, false, false),
'strength_exp'=>$general->getStrength(false, false, false, false),
'intel_exp'=>$general->getIntel(false, false, false, false)
]);
[$reqGold, $reqRice] = $this->getCost();
+1 -1
View File
@@ -147,7 +147,7 @@ class che_등용 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->increaseVarWithLimit('gold', -$reqGold, 0);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
@@ -111,9 +111,9 @@ class che_물자조달 extends Command\GeneralCommand{
$ded = $general->onCalcStat($general, 'dedication', $ded);
$incStat = Util::choiceRandomUsingWeight([
'leadership_max'=>$general->getLeadership(false, false, false, false),
'strength_max'=>$general->getStrength(false, false, false, false),
'intel_max'=>$general->getIntel(false, false, false, false)
'leadership_exp'=>$general->getLeadership(false, false, false, false),
'strength_exp'=>$general->getStrength(false, false, false, false),
'intel_exp'=>$general->getIntel(false, false, false, false)
]);
$general->increaseVar('experience', $exp);
@@ -100,7 +100,7 @@ class che_사기진작 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
@@ -198,7 +198,7 @@ class che_상업투자 extends Command\GeneralCommand{
$general->increaseVarWithLimit('gold', -$this->reqGold, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar(static::$statKey.'_max', 1);
$general->increaseVar(static::$statKey.'_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
+1 -1
View File
@@ -147,7 +147,7 @@ class che_이동 extends Command\GeneralCommand{
[$reqGold, $reqRice] = $this->getCost();
$general->increaseVarWithLimit('gold', -$reqGold, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
@@ -129,9 +129,9 @@ class che_인재탐색 extends Command\GeneralCommand{
$logger->pushGeneralActionLog("인재를 찾을 수 없었습니다. <1>$date</>");
$incStat = Util::choiceRandomUsingWeight([
'leadership_max'=>$general->getLeadership(false, false, false, false),
'strength_max'=>$general->getStrength(false, false, false, false),
'intel_max'=>$general->getIntel(false, false, false, false)
'leadership_exp'=>$general->getLeadership(false, false, false, false),
'strength_exp'=>$general->getStrength(false, false, false, false),
'intel_exp'=>$general->getIntel(false, false, false, false)
]);
[$reqGold, $reqRice] = $this->getCost();
@@ -290,9 +290,9 @@ class che_인재탐색 extends Command\GeneralCommand{
$logger->pushGeneralHistoryLog("<Y>$npcName</>{$josaRa}는 <C>인재</>를 {$scoutType}");
$incStat = Util::choiceRandomUsingWeight([
'leadership_max'=>$general->getLeadership(false, false, false, false),
'strength_max'=>$general->getStrength(false, false, false, false),
'intel_max'=>$general->getIntel(false, false, false, false)
'leadership_exp'=>$general->getLeadership(false, false, false, false),
'strength_exp'=>$general->getStrength(false, false, false, false),
'intel_exp'=>$general->getIntel(false, false, false, false)
]);
[$reqGold, $reqRice] = $this->getCost();
@@ -123,7 +123,7 @@ class che_전투태세 extends Command\GeneralCommand{
$general->addDex($general->getCrewTypeObj(), $crew / 100 * 3, false);
$general->increaseVar('leadership_max', 3);
$general->increaseVar('leadership_exp', 3);
$general->setResultTurn($turnResult);
$general->checkStatChange();
tryUniqueItemLottery($general);
@@ -183,7 +183,7 @@ class che_정착장려 extends Command\GeneralCommand{
$general->increaseVarWithLimit('rice', -$this->reqRice, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar(static::$statKey.'_max', 1);
$general->increaseVar(static::$statKey.'_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
@@ -181,7 +181,7 @@ class che_주민선정 extends Command\GeneralCommand{
$general->increaseVarWithLimit('rice', -$this->reqRice, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar(static::$statKey.'_max', 1);
$general->increaseVar(static::$statKey.'_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
+1 -1
View File
@@ -153,7 +153,7 @@ class che_증여 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
+1 -1
View File
@@ -106,7 +106,7 @@ class che_집합 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
+1 -1
View File
@@ -207,7 +207,7 @@ class che_징병 extends Command\GeneralCommand{
$general->increaseVar('dedication', $ded);
$general->increaseVarWithLimit('gold', -$reqGold, 0);
$general->increaseVarWithLimit('rice', -$reqRice, 0);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
+1 -1
View File
@@ -195,7 +195,7 @@ class che_첩보 extends Command\GeneralCommand{
$general->increaseVarWithLimit('rice', -$reqRice, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
+1 -1
View File
@@ -133,7 +133,7 @@ class che_헌납 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
+3 -3
View File
@@ -273,7 +273,7 @@ class che_화계 extends Command\GeneralCommand{
$general->increaseVarWithLimit('rice', -$reqRice, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar($statType.'_max', 1);
$general->increaseVar($statType.'_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
@@ -310,8 +310,8 @@ class che_화계 extends Command\GeneralCommand{
$general->increaseVarWithLimit('rice', -$reqRice, 0);
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar($statType.'_max', 1);
$general->increaseVar('firenum', 1);
$general->increaseVar($statType.'_exp', 1);
$general->increaseRankVar('firenum', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
$general->applyDB($db);
+1 -1
View File
@@ -104,7 +104,7 @@ class che_훈련 extends Command\GeneralCommand{
$general->increaseVar('experience', $exp);
$general->increaseVar('dedication', $ded);
$general->increaseVar('leadership_max', 1);
$general->increaseVar('leadership_exp', 1);
$general->setResultTurn(new LastTurn(static::getName(), $this->arg));
$general->checkStatChange();
tryUniqueItemLottery($general);
+147 -20
View File
@@ -18,6 +18,11 @@ class General implements iAction{
protected $raw = [];
protected $rawCity = null;
protected $rankVarRead = [];
protected $rankVarIncrease = [];
protected $rankVarSet = [];
/** @var \sammo\ActionLogger */
protected $logger;
@@ -35,6 +40,13 @@ class General implements iAction{
protected $lastTurn = null;
protected $resultTurn = null;
const RANK_COLUMN = [
'firenum'=>1, 'warnum'=>1, 'killnum'=>1, 'deathnum'=>1, 'killcrew'=>1, 'deathcrew'=>1,
'ttw'=>1, 'ttd'=>1, 'ttl'=>1, 'ttg'=>1, 'ttp'=>1, 'tlw'=>1, 'tld'=>1, 'tll'=>1, 'tlg'=>1, 'tlp'=>1,
'tsw'=>1, 'tsd'=>1, 'tsl'=>1, 'tsg'=>1, 'tsp'=>1, 'tiw'=>1, 'tid'=>1, 'til'=>1, 'tig'=>1, 'tip'=>1,
'betwin'=>1, 'betgold'=>1, 'betwingold'=>1,
];
const TURNTIME_FULL_MS = -1;
const TURNTIME_FULL = 0;
const TURNTIME_HMS = 1;
@@ -67,7 +79,7 @@ class General implements iAction{
* @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 $rawRank, ?array $city, ?int $year, ?int $month, bool $fullConstruct=true){
//TODO: 밖에서 가져오도록 하면 버그 확률이 높아짐. 필요한 raw 값을 직접 구해야함.
$staticNation = getNationStaticInfo($raw['nation']);
@@ -99,6 +111,10 @@ class General implements iAction{
$this->itemObjs['weapon'] = buildItemClass($raw['weapon']);
$this->itemObjs['book'] = buildItemClass($raw['book']);
$this->itemObjs['item'] = buildItemClass($raw['item']);
if($rawRank){
$this->rankVarRead = $rawRank;
}
}
function initLogger(int $year, int $month){
@@ -427,10 +443,6 @@ class General implements iAction{
$this->setVar('injury', 0);
$this->multiplyVar('experience', 0.5);
$this->multiplyVar('dedication', 0.5);
$this->setVar('firenum', 0);
$this->setVar('warnum', 0);
$this->setVar('killnum', 0);
$this->setVar('killcrew', 0);
$this->setVar('age', 20);
$this->setVar('specage', 0);
$this->setVar('specage2', 0);
@@ -440,12 +452,70 @@ class General implements iAction{
$this->multiplyVar('dex30', 0.5);
$this->multiplyVar('dex40', 0.5);
$this->setRankVar('firenum', 0);
$this->setRankVar('warnum', 0);
$this->setRankVar('killnum', 0);
$this->setRankVar('killcrew', 0);
$josaYi = JosaUtil::pick($generalName, '이');
$logger->pushGlobalActionLog("{$generalName}</>{$josaYi} <R>은퇴</>하고 그 자손이 유지를 이어받았습니다.");
$logger->pushGeneralActionLog('나이가 들어 <R>은퇴</>하고 자손에게 자리를 물려줍니다.', ActionLogger::PLAIN);
$logger->pushGeneralHistoryLog('나이가 들어 은퇴하고, 자손에게 관직을 물려줌');
}
function increaseRankVar(string $key, int $value){
if(!key_exists($key, static::RANK_COLUMN)){
throw new \InvalidArgumentException('올바르지 않은 인자 :'.$key);
}
if(key_exists($key, $this->rankVarSet)){
$this->rankVarSet[$key] += $value;
return;
}
if(key_exists($key, $this->rankVarRead)){
$this->rankVarSet[$key] = $this->rankVarRead[$key] + $value;
unset($this->rankVarRead[$key]);
return;
}
if(key_exists($key, $this->rankVarIncrease)){
$this->rankVarIncrease[$key] += $value;
return;
}
$this->rankVarIncrease[$key] = $value;
}
function setRankVar(string $key, int $value){
if(!key_exists($key, static::RANK_COLUMN)){
throw new \InvalidArgumentException('올바르지 않은 인자 :'.$key);
}
if(key_exists($key, $this->rankVarRead)){
unset($this->rankVarRead[$key]);
}
else if(key_exists($key, $this->rankVarIncrease)){
unset($this->rankVarIncrease[$key]);
}
$this->rankVarSet[$key]=$value;
}
function getRankVar(string $key):int{
if(!key_exists($key, static::RANK_COLUMN)){
throw new \InvalidArgumentException('올바르지 않은 인자 :'.$key);
}
if(key_exists($key, $this->rankVarSet)){
return $this->rankVarSet[$key];
}
if(!key_exists($key, $this->rankVarRead)){
throw new \RuntimeException('인자가 없음 : '.$key);
}
return $this->rankVarRead[$key];
}
/**
* @param \MeekroDB $db
@@ -459,8 +529,30 @@ class General implements iAction{
if(!$updateVals){
return false;
}
$generalID = $this->getID();
$db->update('general', $updateVals, 'no=%i', $this->raw['no']);
$db->update('general', $updateVals, 'no=%i', $generalID);
if(key_exists('nation', $updateVals)){
$db->update('rank_data', [
'nation_id'=>$updateVals['nation']
], 'general_id = %i', $generalID);
}
foreach($this->rankVarIncrease as $rankKey => $rankVal){
$db->update('rank_data', [
'value'=>$db->sqleval('value + %i', $rankVal)
], 'general_id = %i AND type = %s', $generalID, $rankKey);
}
foreach($this->rankVarSet as $rankKey => $rankVal){
$db->update('rank_data', [
'value'=>$rankVal
], 'general_id = %i AND type = %s', $generalID, $rankKey);
$this->rankVarRead[$rankKey] = $rankVal;
}
$this->rankVarIncrease = [];
$this->rankVarSet = [];
$this->getLogger()->flush();
return $db->affectedRows() > 0;
}
@@ -478,7 +570,7 @@ class General implements iAction{
$result = false;
foreach($table as [$statNickName, $statName]){
$statExpName = $statName.'_max';
$statExpName = $statName.'_exp';
if($this->getVar($statExpName) < 0){
$logger->pushGeneralActionLog("<R>{$statNickName}</>이 <C>1</> 떨어졌습니다!", ActionLogger::PLAIN);
@@ -664,7 +756,7 @@ class General implements iAction{
//TODO:createGeneralObjListFromDB로, 조건으로 select query나 generalIDList가 들어가는 녀석이 필요할 수 있음
static private function mergeQueryColumn(?array $column=null, int $constructMode=2):array{
static private function mergeQueryColumn(?array $reqColumns=null, int $constructMode=2):array{
$minimumColumn = ['no', 'name', 'city', 'nation', 'level'];
$defaultEventColumn = [
'no', 'name', 'city', 'nation', 'level',
@@ -673,24 +765,35 @@ class General implements iAction{
];
$fullColumn = [
'no', 'name', 'name2', 'picture', 'imgsvr', 'nation', 'city', 'troop', 'injury', 'affinity',
'leadership', 'leadership_max', 'strength', 'strength_max', 'intel', 'intel_max', 'weapon', 'book', 'horse', 'item',
'leadership', 'leadership_exp', 'strength', 'strength_exp', 'intel', 'intel_exp', 'weapon', 'book', 'horse', 'item',
'experience', 'dedication', 'level', 'gold', 'rice', 'crew', 'crewtype', 'train', 'atmos', 'turntime',
'makelimit', 'killturn', 'block', 'dedlevel', 'explevel', 'age', 'startage', 'belong',
'personal', 'special', 'special2', 'defence_train', 'tnmt', 'npc', 'npc_org', 'deadyear', 'npcmsg',
'dex0', 'dex10', 'dex20', 'dex30', 'dex40',
'warnum', 'firenum', 'killnum', 'deathnum', 'killcrew', 'deathcrew', 'recwar', 'last_turn', 'myset',
'recwar', 'last_turn', 'myset',
'specage', 'specage2', 'con', 'connect', 'owner', 'aux'
];
if($column === null){
return $fullColumn;
if($reqColumns === null){
return [$fullColumn, static::RANK_COLUMN];
}
else if($constructMode > 1){
return array_unique(array_merge($defaultEventColumn, $column));
$rankColumn = [];
$subColumn = [];
foreach($reqColumns as $column){
if(key_exists($column, static::RANK_COLUMN)){
$rankColumn[] = $column;
}
else{
$subColumn[] = $column;
}
}
else{
return array_unique(array_merge($minimumColumn, $column));
if($constructMode > 1){
return [array_unique(array_merge($defaultEventColumn, $subColumn)), $rankColumn];
}
return [array_unique(array_merge($minimumColumn, $subColumn)), $rankColumn];
}
/**
@@ -715,20 +818,35 @@ class General implements iAction{
$month = null;
}
$column = static::mergeQueryColumn($column, $constructMode);
[$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode);
$rawGenerals = Util::convertArrayToDict(
$db->queryFirstRow('SELECT %l FROM general WHERE no IN %li', Util::formatListOfBackticks($column), $generalIDList),
'no'
);
$rawRanks = [];
if($rankColumn){
$rawValue = $db->queryAllLists(
'SELECT `general_id`, `type`, `value` FROM rank_data WHERE general_id IN %li AND `type` IN %ls',
$generalIDList,
$rankColumn
);
foreach($rawValue as [$generalID, $rankType, $rankValue]){
if(!key_exists($generalID, $rawRanks)){
$rawRanks[$generalID] = [];
}
$rawRanks[$generalID][$rankType] = $rankValue;
}
}
$result = [];
foreach($generalIDList as $generalID){
if(!key_exists($generalID, $rawGenerals)){
$result[$generalID] = new DummyGeneral($constructMode > 0);
continue;
}
$result[$generalID] = new static($rawGenerals[$generalID], null, $year, $month, $constructMode > 1);
$result[$generalID] = new static($rawGenerals[$generalID], $rawRanks[$generalID], null, $year, $month, $constructMode > 1);
}
return $result;
@@ -745,14 +863,23 @@ class General implements iAction{
$month = null;
}
$column = static::mergeQueryColumn($column, $constructMode);
[$column, $rankColumn] = static::mergeQueryColumn($column, $constructMode);
$rawGeneral = $db->queryFirstRow('SELECT %l FROM general WHERE no = %i', Util::formatListOfBackticks($column), $generalID);
if(!$rawGeneral){
return new DummyGeneral($constructMode > 0);
}
$general = new static($rawGeneral, null, $year, $month, $constructMode > 1);
$rawRankValues = [];
if($rankColumn){
$rawValue = $db->queryAllLists('SELECT `type`, `value` FROM rank_data WHERE general_id = %i AND `type` IN %ls', $generalID, $rankColumn);
foreach($rawValue as [$rankType, $rankValue]){
$rawRankValues[$rankType] = $rankValue;
}
}
$general = new static($rawGeneral, $rawRankValues, null, $year, $month, $constructMode > 1);
return $general;
}
+2 -2
View File
@@ -1355,8 +1355,8 @@ class GeneralAI{
);//기본 병종
$baseArmCost = $general->onCalcDomestic('징병', 'cost', $baseArmCost);
$baseArmRice = $general->getLeadership(false) / 2 * $crewType->rice * getTechCost($tech);
if($general->getVar('deathcrew') > 500 && $general->getVar('killcrew') > 500){
$baseArmRice *= $general->getVar('killcrew') / $general->getVar('deathcrew');
if($general->getRankVar('deathcrew') > 500 && $general->getRankVar('killcrew') > 500){
$baseArmRice *= $general->getRankVar('killcrew') / $general->getRankVar('deathcrew');
}
return [$baseArmCost, $baseArmRice];
+9
View File
@@ -282,6 +282,15 @@ class ResetHelper{
];
}
$db->insert('general_turn', $turnRows);
foreach(General::RANK_COLUMN as $rankColumn){
$db->insert('rank_data', [
'general_id'=>$generalID,
'nation_id'=>0,
'type'=>$rankColumn,
'value'=>0
]);
}
}
foreach($env as $key=>$value){
+9
View File
@@ -358,6 +358,15 @@ class NPC{
}
$db->insert('general_turn', $turnRows);
foreach(\sammo\General::RANK_COLUMN as $rankColumn){
$db->insert('rank_data', [
'general_id'=>$this->generalID,
'nation_id'=>0,
'type'=>$rankColumn,
'value'=>0
]);
}
return true; //생성되었다.
}
}
+7 -7
View File
@@ -113,7 +113,7 @@ class WarUnitGeneral extends WarUnit{
function addWin(){
$general = $this->general;
$general->increaseVar('killnum', 1);
$general->increaseRankVar('killnum', 1);
$general->multiplyVarWithLimit('atmos', 1.1, null, GameConst::$maxAtmosByWar);
$this->addStatExp(1);
@@ -122,11 +122,11 @@ class WarUnitGeneral extends WarUnit{
function addStatExp(int $value = 1){
$general = $this->general;
if($this->crewType->armType == GameUnitConst::T_WIZARD) { // 귀병
$general->increaseVar('intel_max', $value);
$general->increaseVar('intel_exp', $value);
} elseif($this->crewType->armType == GameUnitConst::T_SIEGE) { // 차병
$general->increaseVar('leadership_max', $value);
$general->increaseVar('leadership_exp', $value);
} else {
$general->increaseVar('strength_max', $value);
$general->increaseVar('strength_exp', $value);
}
}
@@ -147,7 +147,7 @@ class WarUnitGeneral extends WarUnit{
function addLose(){
$general = $this->general;
$general->increaseVar('deathnum', 1);
$general->increaseRankVar('deathnum', 1);
$this->addStatExp(1);
}
@@ -310,8 +310,8 @@ class WarUnitGeneral extends WarUnit{
$this->isFinished = true;
$general = $this->general;
$general->increaseVar('killcrew', $this->killed);
$general->increaseVar('deathcrew', $this->dead);
$general->increaseRankVar('killcrew', $this->killed);
$general->increaseRankVar('deathcrew', $this->dead);
$general->updateVar('rice', Util::round($general->getVar('rice')));
$general->updateVar('experience', Util::round($general->getVar('experience')));
+3 -4
View File
@@ -9,10 +9,6 @@ DROP TABLE IF EXISTS `nation_turn`;
DROP TABLE IF EXISTS board;
DROP TABLE IF EXISTS comment;
#
DROP TABLE IF EXISTS board;
DROP TABLE IF EXISTS comment;
#
DROP TABLE IF EXISTS city;
@@ -52,6 +48,9 @@ DROP TABLE IF EXISTS general_public_record;
DROP TABLE IF EXISTS select_npc_token;
DROP TABLE IF EXISTS betting;
DROP TABLE IF EXISTS rank_data;
DROP TABLE IF EXISTS reserved_open;
CREATE TABLE `reserved_open` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
+40 -48
View File
@@ -25,11 +25,11 @@ CREATE TABLE `general` (
`city` INT(6) NOT NULL DEFAULT '3',
`troop` INT(6) NOT NULL DEFAULT '0',
`leadership` INT(3) NOT NULL DEFAULT '50',
`leadership_max` INT(3) NOT NULL DEFAULT '0',
`leadership_exp` INT(3) NOT NULL DEFAULT '0',
`strength` INT(3) NOT NULL DEFAULT '50',
`strength_max` INT(3) NOT NULL DEFAULT '0',
`strength_exp` INT(3) NOT NULL DEFAULT '0',
`intel` INT(3) NOT NULL DEFAULT '50',
`intel_max` INT(3) NOT NULL DEFAULT '0',
`intel_exp` INT(3) NOT NULL DEFAULT '0',
`injury` INT(2) NOT NULL DEFAULT '0',
`experience` INT(6) NOT NULL DEFAULT '0',
`dedication` INT(6) NOT NULL DEFAULT '0',
@@ -60,12 +60,6 @@ CREATE TABLE `general` (
`block` INT(1) NULL DEFAULT '0',
`dedlevel` INT(2) NULL DEFAULT '0',
`explevel` INT(2) NULL DEFAULT '0',
`firenum` INT(3) NULL DEFAULT '0',
`warnum` INT(3) NULL DEFAULT '0',
`killnum` INT(3) NULL DEFAULT '0',
`deathnum` INT(3) NULL DEFAULT '0',
`killcrew` INT(7) NULL DEFAULT '0',
`deathcrew` INT(7) NULL DEFAULT '0',
`age` INT(3) NULL DEFAULT '20',
`startage` INT(3) NULL DEFAULT '20',
`history` MEDIUMTEXT NULL DEFAULT '',
@@ -82,45 +76,6 @@ CREATE TABLE `general` (
`tournament` INT(1) NULL DEFAULT '0',
`vote` INT(1) NULL DEFAULT '0',
`newvote` INT(1) NULL DEFAULT '0',
`ttw` INT(4) NULL DEFAULT '0',
`ttd` INT(4) NULL DEFAULT '0',
`ttl` INT(4) NULL DEFAULT '0',
`ttg` INT(4) NULL DEFAULT '0',
`ttp` INT(4) NULL DEFAULT '0',
`tlw` INT(4) NULL DEFAULT '0',
`tld` INT(4) NULL DEFAULT '0',
`tll` INT(4) NULL DEFAULT '0',
`tlg` INT(4) NULL DEFAULT '0',
`tlp` INT(4) NULL DEFAULT '0',
`tsw` INT(4) NULL DEFAULT '0',
`tsd` INT(4) NULL DEFAULT '0',
`tsl` INT(4) NULL DEFAULT '0',
`tsg` INT(4) NULL DEFAULT '0',
`tsp` INT(4) NULL DEFAULT '0',
`tiw` INT(4) NULL DEFAULT '0',
`tid` INT(4) NULL DEFAULT '0',
`til` INT(4) NULL DEFAULT '0',
`tig` INT(4) NULL DEFAULT '0',
`tip` INT(4) NULL DEFAULT '0',
`bet0` INT(8) NULL DEFAULT '0',
`bet1` INT(8) NULL DEFAULT '0',
`bet2` INT(8) NULL DEFAULT '0',
`bet3` INT(8) NULL DEFAULT '0',
`bet4` INT(8) NULL DEFAULT '0',
`bet5` INT(8) NULL DEFAULT '0',
`bet6` INT(8) NULL DEFAULT '0',
`bet7` INT(8) NULL DEFAULT '0',
`bet8` INT(8) NULL DEFAULT '0',
`bet9` INT(8) NULL DEFAULT '0',
`bet10` INT(8) NULL DEFAULT '0',
`bet11` INT(8) NULL DEFAULT '0',
`bet12` INT(8) NULL DEFAULT '0',
`bet13` INT(8) NULL DEFAULT '0',
`bet14` INT(8) NULL DEFAULT '0',
`bet15` INT(8) NULL DEFAULT '0',
`betwin` INT(8) NULL DEFAULT '0',
`betgold` INT(8) NULL DEFAULT '0',
`betwingold` INT(8) NULL DEFAULT '0',
`last_turn` TEXT NOT NULL DEFAULT '{}',
`aux` TEXT NOT NULL DEFAULT '{}' COMMENT 'JSON',
`penalty` TEXT NULL DEFAULT '',
@@ -642,3 +597,40 @@ CREATE TABLE IF NOT EXISTS `storage` (
)
COLLATE='utf8mb4_general_ci'
ENGINE=Aria;
CREATE TABLE IF NOT EXISTS `betting` (
`general_id` INT(11) NOT NULL,
`bet0` INT(11) NOT NULL,
`bet1` INT(11) NOT NULL,
`bet2` INT(11) NOT NULL,
`bet3` INT(11) NOT NULL,
`bet4` INT(11) NOT NULL,
`bet5` INT(11) NOT NULL,
`bet6` INT(11) NOT NULL,
`bet7` INT(11) NOT NULL,
`bet8` INT(11) NOT NULL,
`bet9` INT(11) NOT NULL,
`bet10` INT(11) NOT NULL,
`bet11` INT(11) NOT NULL,
`bet12` INT(11) NOT NULL,
`bet13` INT(11) NOT NULL,
`bet14` INT(11) NOT NULL,
`bet15` INT(11) NOT NULL,
PRIMARY KEY (`general_id`)
)
ENGINE=Aria;
CREATE TABLE `rank_data` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`nation_id` INT(11) NOT NULL DEFAULT 0,
`general_id` INT(11) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`value` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
UNIQUE INDEX `by_general` (`general_id`, `type`),
INDEX `by_type` (`type`, `value`),
INDEX `by_nation` (`nation_id`, `type`, `value`)
)
COLLATE='utf8mb4_general_ci'
ENGINE=Aria
;
+14
View File
@@ -339,6 +339,20 @@ class Session
return $obj->userID;
}
/**
*
*/
public static function getGeneralID(bool $requireLogin = false, string $exitPath = '..')
{
if ($requireLogin) {
$obj = self::requireLogin($exitPath);
} else {
$obj = self::getInstance();
}
return $obj->generalID??0;
}
public function isLoggedIn(bool $ignoreOTP = false): bool
{
if(!$ignoreOTP){
+7
View File
@@ -720,4 +720,11 @@ class Util extends \utilphp\util
return 0;
}
function isPowerOfTwo(int $number):bool{
if($number <= 0){
return false;
}
return ($number & ($number - 1)) == 0;
}
};