game: 토너먼터 자동 참가 시, 능력치에 기반
This commit is contained in:
+24
-24
@@ -36,15 +36,15 @@ if($btn == '참가') {
|
|||||||
|
|
||||||
if($db->queryFirstField('SELECT `no` FROM tournament WHERE `no`=%i', $me['no'])){
|
if($db->queryFirstField('SELECT `no` FROM tournament WHERE `no`=%i', $me['no'])){
|
||||||
header('location:b_tournament.php');
|
header('location:b_tournament.php');
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$general = $db->queryFirstRow('SELECT no,name,npc,leadership,strength,intel,explevel,gold,horse,weapon,book FROM general WHERE `no`=%i', $me['no']);
|
$general = $db->queryFirstRow('SELECT no,name,npc,leadership,strength,intel,explevel,gold,horse,weapon,book FROM general WHERE `no`=%i', $me['no']);
|
||||||
|
|
||||||
//{$admin['develcost']}원 참가비
|
//{$admin['develcost']}원 참가비
|
||||||
if($general['gold'] < $admin['develcost']) {
|
if($general['gold'] < $admin['develcost']) {
|
||||||
header('location:b_tournament.php');
|
header('location:b_tournament.php');
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
$general['gold'] -= $admin['develcost'];
|
$general['gold'] -= $admin['develcost'];
|
||||||
|
|
||||||
@@ -66,7 +66,7 @@ if($btn == '참가') {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$fullGrpCnt = 8 - count($freeSlot);
|
$fullGrpCnt = 8 - count($freeSlot);
|
||||||
|
|
||||||
if($freeSlot) {
|
if($freeSlot) {
|
||||||
$grp = Util::choiceRandom(array_keys($freeSlot));
|
$grp = Util::choiceRandom(array_keys($freeSlot));
|
||||||
$grpMemberCount = $db->queryFirstField('SELECT count(*) FROM tournament WHERE grp=%i', $grp);
|
$grpMemberCount = $db->queryFirstField('SELECT count(*) FROM tournament WHERE grp=%i', $grp);
|
||||||
@@ -96,12 +96,12 @@ if($btn == '참가') {
|
|||||||
$gameStor->phase = 0;
|
$gameStor->phase = 0;
|
||||||
}
|
}
|
||||||
header('location:b_tournament.php');
|
header('location:b_tournament.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($session->userGrade < 5) {
|
if($session->userGrade < 5) {
|
||||||
header('location:b_tournament.php');
|
header('location:b_tournament.php');
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
if($btn == "자동개최설정") {
|
if($btn == "자동개최설정") {
|
||||||
@@ -157,10 +157,10 @@ if($btn == "자동개최설정") {
|
|||||||
|
|
||||||
} elseif($btn == "랜덤전부투입") {
|
} elseif($btn == "랜덤전부투입") {
|
||||||
$grpIn = [];
|
$grpIn = [];
|
||||||
|
|
||||||
foreach($db->queryAllLists('SELECT grp, count(*) FROM tournament WHERE 0 <= grp AND grp < 8 GROUP BY grp') as [$grpIdx, $cnt]){
|
foreach($db->queryAllLists('SELECT grp, count(*) FROM tournament WHERE 0 <= grp AND grp < 8 GROUP BY grp') as [$grpIdx, $cnt]){
|
||||||
$grpIn[$grpIdx] = $cnt;
|
$grpIn[$grpIdx] = $cnt;
|
||||||
|
|
||||||
}
|
}
|
||||||
$code = [];
|
$code = [];
|
||||||
foreach(Util::range(8) as $grpIdx){
|
foreach(Util::range(8) as $grpIdx){
|
||||||
@@ -201,38 +201,38 @@ if($btn == "자동개최설정") {
|
|||||||
|
|
||||||
$gameStor->tournament = 2;
|
$gameStor->tournament = 2;
|
||||||
$gameStor->phase = 0;
|
$gameStor->phase = 0;
|
||||||
} elseif($btn == "무명전부투입") {
|
} elseif($btn == "무명전부투입") {
|
||||||
fillLowGenAll();
|
fillLowGenAll($admin['tnmt_type']);
|
||||||
} elseif($btn == "예선") {
|
} elseif($btn == "예선") {
|
||||||
qualify($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
qualify($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "예선전부") {
|
} elseif($btn == "예선전부") {
|
||||||
qualifyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
qualifyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "추첨") {
|
} elseif($btn == "추첨") {
|
||||||
selection($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
selection($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "추첨전부") {
|
} elseif($btn == "추첨전부") {
|
||||||
selectionAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
selectionAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "본선") {
|
} elseif($btn == "본선") {
|
||||||
finallySingle($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
finallySingle($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "본선전부") {
|
} elseif($btn == "본선전부") {
|
||||||
finallyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
finallyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "배정") {
|
} elseif($btn == "배정") {
|
||||||
final16set();
|
final16set();
|
||||||
} elseif($btn == "베팅마감") {
|
} elseif($btn == "베팅마감") {
|
||||||
$dt = date("Y-m-d H:i:s", time() + 60);
|
$dt = date("Y-m-d H:i:s", time() + 60);
|
||||||
$gameStor->tournament=7;
|
$gameStor->tournament=7;
|
||||||
$gameStor->phase=0;
|
$gameStor->phase=0;
|
||||||
$gameStor->tnmt_time = $dt;
|
$gameStor->tnmt_time = $dt;
|
||||||
} elseif($btn == "16강") {
|
} elseif($btn == "16강") {
|
||||||
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 16);
|
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 16);
|
||||||
} elseif($btn == "8강") {
|
} elseif($btn == "8강") {
|
||||||
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 8);
|
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 8);
|
||||||
} elseif($btn == "4강") {
|
} elseif($btn == "4강") {
|
||||||
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 4);
|
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 4);
|
||||||
} elseif($btn == "결승") {
|
} elseif($btn == "결승") {
|
||||||
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 2);
|
finalFight($admin['tnmt_type'], $admin['tournament'], $admin['phase'], 2);
|
||||||
} elseif($btn == "포상") {
|
} elseif($btn == "포상") {
|
||||||
setGift($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
setGift($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "회수") {
|
} elseif($btn == "회수") {
|
||||||
setRefund();
|
setRefund();
|
||||||
} elseif($btn == "메시지") {
|
} elseif($btn == "메시지") {
|
||||||
$gameStor->tnmt_msg = $msg;
|
$gameStor->tnmt_msg = $msg;
|
||||||
|
|||||||
+35
-18
@@ -58,7 +58,7 @@ function processTournament()
|
|||||||
for ($i = 0; $i < $iter; $i++) {
|
for ($i = 0; $i < $iter; $i++) {
|
||||||
switch ($tnmt) {
|
switch ($tnmt) {
|
||||||
case 1: //신청 마감
|
case 1: //신청 마감
|
||||||
fillLowGenAll();
|
fillLowGenAll($type);
|
||||||
$tnmt = 2;
|
$tnmt = 2;
|
||||||
$phase = 0;
|
$phase = 0;
|
||||||
break;
|
break;
|
||||||
@@ -452,7 +452,7 @@ function startBetting()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function fillLowGenAll()
|
function fillLowGenAll($tnmt_type)
|
||||||
{
|
{
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
@@ -466,17 +466,7 @@ function fillLowGenAll()
|
|||||||
'leadership' => 10,
|
'leadership' => 10,
|
||||||
'strength' => 10,
|
'strength' => 10,
|
||||||
'intel' => 10,
|
'intel' => 10,
|
||||||
'explevel' => 10
|
'lvl' => 10,
|
||||||
];
|
|
||||||
|
|
||||||
$dummyGeneral = [
|
|
||||||
'no' => 0,
|
|
||||||
'npc' => 2,
|
|
||||||
'name' => '무명장수',
|
|
||||||
'leadership' => 10,
|
|
||||||
'strength' => 10,
|
|
||||||
'intel' => 10,
|
|
||||||
'lvl' => 0,
|
|
||||||
'h' => 'None',
|
'h' => 'None',
|
||||||
'w' => 'None',
|
'w' => 'None',
|
||||||
'b' => 'None'
|
'b' => 'None'
|
||||||
@@ -500,16 +490,43 @@ function fillLowGenAll()
|
|||||||
|
|
||||||
$toBeFilledCnt = 8 * 8 - $currentJoinerCnt;
|
$toBeFilledCnt = 8 * 8 - $currentJoinerCnt;
|
||||||
|
|
||||||
|
$scoringCandFunction = match ($tnmt_type) {
|
||||||
|
0 => function ($gen) {
|
||||||
|
return $gen['leadership'] + $gen['strength'] + $gen['intel'];
|
||||||
|
}, //전력전
|
||||||
|
1 => function ($gen) {
|
||||||
|
return $gen['leadership'];
|
||||||
|
}, //통솔전
|
||||||
|
2 => function ($gen) {
|
||||||
|
return $gen['strength'];
|
||||||
|
}, //통솔전
|
||||||
|
3 => function ($gen) {
|
||||||
|
return $gen['intel'];
|
||||||
|
}, //통솔전
|
||||||
|
default => throw new \ValueError('invalid tnmt_type' . $tnmt_type)
|
||||||
|
};
|
||||||
|
|
||||||
//자동신청하고, 돈 있고, 아직 참가 안한 장수
|
//자동신청하고, 돈 있고, 아직 참가 안한 장수
|
||||||
$freeJoiners = $db->query(
|
$freeJoinerCandidate = [];
|
||||||
'SELECT no,npc,name,leadership,strength,intel,explevel,horse,weapon,book from general where tnmt=1 and tournament=0 order by rand() limit %d',
|
|
||||||
$toBeFilledCnt
|
foreach($db->query(
|
||||||
);
|
'SELECT no,npc,name,leadership,strength,intel,explevel,horse,weapon,book from general where tnmt=1 and tournament=0',
|
||||||
|
) as $gen){
|
||||||
|
$score = $scoringCandFunction($gen);
|
||||||
|
$freeJoinerCandidate[$gen['no']] = [$gen, $score**2];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
$joinersValues = [];
|
$joinersValues = [];
|
||||||
$joinersIdx = [];
|
$joinersIdx = [];
|
||||||
|
|
||||||
foreach ($freeJoiners as $general) {
|
foreach(Util::range($toBeFilledCnt) as $_){
|
||||||
|
if(!$freeJoinerCandidate){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$general = Util::choiceRandomUsingWeightPair($freeJoinerCandidate);
|
||||||
|
unset($freeJoinerCandidate[$general['no']]);
|
||||||
|
|
||||||
$grpIdx = array_keys($grpCount, min($grpCount))[0];
|
$grpIdx = array_keys($grpCount, min($grpCount))[0];
|
||||||
$grpCnt = $grpCount[$grpIdx];
|
$grpCnt = $grpCount[$grpIdx];
|
||||||
$joinersValues[] = [
|
$joinersValues[] = [
|
||||||
|
|||||||
Reference in New Issue
Block a user