forked from devsam/core
첩보를 join '|' 에서 json dict로 변경
This commit is contained in:
+26
-21
@@ -21,9 +21,7 @@ $query = "select no,nation,level,city from general where owner='{$userID}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$me = MYDB_fetch_array($result);
|
||||
|
||||
$query = "select nation,level,spy from nation where nation='{$me['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$myNation = MYDB_fetch_array($result);
|
||||
$myNation = $db->queryFirstRow('SELECT nation,level,spy FROM nation WHERE nation=%i', $me['nation']);
|
||||
|
||||
$templates = new \League\Plates\Engine('templates');
|
||||
|
||||
@@ -121,27 +119,34 @@ if($me['level'] == 0) {
|
||||
|
||||
if($myNation['level'] > 0) {
|
||||
// 첩보도시도 목록에 추가
|
||||
$where = 'city=0';
|
||||
$cities = array_map('intval',explode("|", $myNation['spy']));
|
||||
foreach($cities as $citySpy) {
|
||||
$city = intdiv($citySpy, 10);
|
||||
$where .= " or city='{$city}'";
|
||||
|
||||
$rawSpy = $myNation['spy'];
|
||||
|
||||
if($rawSpy == ''){
|
||||
$spyCities = [];
|
||||
}
|
||||
else if(strpos($rawSpy, '|') !== false || is_integer($rawSpy)){
|
||||
//TODO: 0.8 버전 이후에는 삭제할 것. 이후 버전은 json으로 변경됨.
|
||||
$spyCities = array_map(function($val){
|
||||
$val = intval($val);
|
||||
return intdiv($val, 10);
|
||||
}, 'intval',explode('|', $myNation['spy']));
|
||||
}
|
||||
else{
|
||||
$spyCities = array_keys(Json::decode($rawSpy));
|
||||
}
|
||||
|
||||
$query = "select city,name,nation from city where {$where}";
|
||||
$cityresult = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$citycount = MYDB_num_rows($cityresult);
|
||||
|
||||
for($i=0; $i < $citycount; $i++) {
|
||||
$city = MYDB_fetch_array($cityresult);
|
||||
echo "
|
||||
<option value={$city['city']}";
|
||||
if($city['city'] == $citylist) { echo " selected"; $valid = 1; }
|
||||
echo ">==================================================【".StringUtil::padString($city['name'], 4, '_')."】";
|
||||
if($city['nation'] == 0) echo "공백지";
|
||||
elseif($me['nation'] == $city['nation']) echo "본국==";
|
||||
else echo "타국==";
|
||||
echo "============================================</option>";
|
||||
if($spyCities){
|
||||
foreach ($db->query('SELECT city,name,nation FROM city WHERE city in %li', $spyCities) as $city) {
|
||||
echo "<option value={$city['city']}";
|
||||
if($city['city'] == $citylist) { echo " selected"; $valid = 1; }
|
||||
echo ">==================================================【".StringUtil::padString($city['name'], 4, '_')."】";
|
||||
if($city['nation'] == 0) echo "공백지";
|
||||
elseif($me['nation'] == $city['nation']) echo "본국==";
|
||||
else echo "타국==";
|
||||
echo "============================================</option>";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-1
@@ -1128,7 +1128,7 @@ function msgprint($msg, $name, $picture, $imgsvr, $when, $num, $type) {
|
||||
$db = DB::db();
|
||||
$connect=$db->get();
|
||||
|
||||
$message = explode("|", $msg);
|
||||
$message = explode('|', $msg);
|
||||
$count = (count($message) - 2)/2;
|
||||
$message[0] = Tag2Code($message[0]);
|
||||
$message[1] = Tag2Code($message[1]);
|
||||
|
||||
+26
-16
@@ -395,23 +395,33 @@ function preUpdateMonthly() {
|
||||
}
|
||||
|
||||
//첩보-1
|
||||
$query = "select nation,spy from nation where spy!=''";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nationCount = MYDB_num_rows($result);
|
||||
for($i=0; $i < $nationCount; $i++) {
|
||||
$nation = MYDB_fetch_array($result);
|
||||
$spy = ""; $k = 0;
|
||||
$cities = [];
|
||||
if($nation['spy'] != "") { $cities = explode("|", (string)$nation['spy']); }
|
||||
while(count($cities)) {
|
||||
$cities[$k]--;
|
||||
if($cities[$k]%10 != 0) { $spy .= (string)$cities[$k]; }
|
||||
$k++;
|
||||
if($k >= count($cities)) { break; }
|
||||
if($cities[$k-1]%10 != 0) { $spy .= "|"; }
|
||||
foreach($db->queryAllLists("SELECT nation, spy FROM nation WHERE spy!='' AND spy!='{}'") as [$nationNo, $rawSpy]){
|
||||
if (strpos($rawSpy, '|') !== false || is_integer($rawSpy)) {
|
||||
//TODO: 0.8 버전 이후에는 삭제할 것. 이후 버전은 json으로 변경됨.
|
||||
$spyInfo = [];
|
||||
foreach(explode('|', $rawSpy) as $value){
|
||||
$value = intval($value);
|
||||
$cityNo = intdiv($value, 10);
|
||||
$remainMonth = $value % 10;
|
||||
$spyInfo[$cityNo] = $remainMonth;
|
||||
}
|
||||
}
|
||||
$query = "update nation set spy='$spy' where nation='{$nation['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
else{
|
||||
$spyInfo = Json::decode($rawSpy);
|
||||
}
|
||||
|
||||
foreach($spyInfo as $cityNo => $remainMonth){
|
||||
if($remainMonth <= 1){
|
||||
unset($spyInfo[$cityNo]);
|
||||
}
|
||||
else{
|
||||
$spyInfo[$cityNo] -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
$db->update('nation', [
|
||||
'spy'=>Json::encode($spyInfo, Json::EMPTY_ARRAY_IS_DICT)
|
||||
], 'nation=%i', $nationNo);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
+19
-9
@@ -94,19 +94,29 @@ function getWorldMap($req){
|
||||
$myNation = null;
|
||||
}
|
||||
|
||||
$spyInfo = (object)null;
|
||||
|
||||
if($myNation){
|
||||
$spyList = $db->queryFirstField('select `spy` from `nation` where `nation`=%i',
|
||||
$rawSpy = $db->queryFirstField('select `spy` from `nation` where `nation`=%i',
|
||||
$myNation);
|
||||
if($spyList){
|
||||
$spyList = array_map('\sammo\Util::toInt', explode("|", $spyList));
|
||||
|
||||
if(strpos($rawSpy, '|') !== false || is_integer($rawSpy)){
|
||||
//NOTE: 0.8 이전 데이터가 남아있으므로, 0.8버전으로 마이그레이션 이후에도 이곳은 삭제하면 안됨
|
||||
$spyInfo = [];
|
||||
foreach(explode('|', $rawSpy) as $value){
|
||||
$value = intval($value);
|
||||
$cityNo = intdiv($value, 10);
|
||||
$remainMonth = $value % 10;
|
||||
$spyInfo[$cityNo] = $remainMonth;
|
||||
}
|
||||
}
|
||||
else{
|
||||
$spyList = [];
|
||||
else if($rawSpy != ''){
|
||||
$spyInfo = Json::decode($rawSpy);
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
$spyList = [];
|
||||
|
||||
if(!$spyInfo){
|
||||
$spyInfo = (object)null;
|
||||
}
|
||||
|
||||
$nationList = [];
|
||||
@@ -142,7 +152,7 @@ function getWorldMap($req){
|
||||
'month' => $month,
|
||||
'cityList' => $cityList,
|
||||
'nationList' => $nationList,
|
||||
'spyList' => $spyList,
|
||||
'spyList' => $spyInfo,
|
||||
'shownByGeneralList' => $shownByGeneralList,
|
||||
'myCity' => $myCity,
|
||||
'myNation' => $myNation,
|
||||
|
||||
+4
-4
@@ -361,7 +361,7 @@ function processAI($no) {
|
||||
}
|
||||
break;
|
||||
case 2: //이동 20%
|
||||
$paths = explode("|", $city['path']);
|
||||
$paths = explode('|', $city['path']);
|
||||
$command = EncodeCommand(0, 0, $paths[rand()%count($paths)], 21);
|
||||
break;
|
||||
default:
|
||||
@@ -429,7 +429,7 @@ function processAI($no) {
|
||||
return;
|
||||
} elseif(rand()%4 > 0) {
|
||||
//이동
|
||||
$paths = explode("|", $city['path']);
|
||||
$paths = explode('|', $city['path']);
|
||||
$command = EncodeCommand(0, 0, $paths[rand()%count($paths)], 21);
|
||||
$query = "update general set turn0='$command' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error("processAI09 ".MYDB_error($connect),"");
|
||||
@@ -600,7 +600,7 @@ function processAI($no) {
|
||||
//현도시가 전방이면 공격 가능성 체크
|
||||
if($city['front'] > 0) {
|
||||
//주변도시 체크
|
||||
$paths = explode("|", $city['path']);
|
||||
$paths = explode('|', $city['path']);
|
||||
for($i=0; $i < count($paths); $i++) {
|
||||
$query = "select city,nation from city where city='$paths[$i]'";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI20 ".MYDB_error($connect),"");
|
||||
@@ -766,7 +766,7 @@ function processAI($no) {
|
||||
$command = EncodeCommand(0, 0, 0, (rand()%2)*8 + 1); // 준비는 됐으나 아직 선포중이면 내정, 조달
|
||||
} else {
|
||||
//공격 & 내정
|
||||
$paths = explode("|", $city['path']);
|
||||
$paths = explode('|', $city['path']);
|
||||
for($i=0; $i < count($paths); $i++) {
|
||||
$query = "select city,nation from city where city='$paths[$i]'";
|
||||
$result = MYDB_query($query, $connect) or Error("processAI21 ".MYDB_error($connect),"");
|
||||
|
||||
+22
-22
@@ -1743,32 +1743,32 @@ function process_31(&$general) {
|
||||
$query = "update general set resturn='SUCCESS',gold='{$general['gold']}',rice='{$general['rice']}',leader2='{$general['leader2']}',dedication=dedication+'$ded',experience=experience+'$exp' where no='{$general['no']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$query = "select spy from nation where nation='{$general['nation']}'";
|
||||
$result = MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
$nation = MYDB_fetch_array($result);
|
||||
if($nation['spy'] != "")
|
||||
{
|
||||
$cities = array_map('intval', explode("|", $nation['spy']));
|
||||
|
||||
|
||||
$rawSpy = $db->queryFirstField('SELECT spy FROM nation WHERE nation = %i', $general['nation']);
|
||||
|
||||
if($rawSpy == ''){
|
||||
$spyInfo = [];
|
||||
}
|
||||
else{
|
||||
$cities = [];
|
||||
}
|
||||
$exist = 0;
|
||||
for($i=0; $i < count($cities); $i++) {
|
||||
if(intdiv($cities[$i], 10) == $destination) {
|
||||
$exist = 1;
|
||||
break;
|
||||
else if(strpos($rawSpy, '|') !== false || is_integer($rawSpy)){
|
||||
//TODO: 0.8 버전 이후에는 삭제할 것. 이후 버전은 json으로 변경됨.
|
||||
$spyInfo = [];
|
||||
foreach(explode('|', $rawSpy) as $value){
|
||||
$value = intval($value);
|
||||
$cityNo = intdiv($value, 10);
|
||||
$remainMonth = $value % 10;
|
||||
$spyInfo[$cityNo] = $remainMonth;
|
||||
}
|
||||
}
|
||||
// 기존 첩보 목록에 없으면 새로 등록, 있으면 갱신
|
||||
if($exist == 0) {
|
||||
$cities[] = $destination * 10 + 3;
|
||||
} else {
|
||||
$cities[$i] = $destination * 10 + 3;
|
||||
else{
|
||||
$spyInfo = Json::decode($rawSpy);
|
||||
}
|
||||
$spy = implode("|", $cities);
|
||||
$query = "update nation set spy='$spy' where nation='{$general['nation']}'";
|
||||
MYDB_query($query, $connect) or Error(__LINE__.MYDB_error($connect),"");
|
||||
|
||||
$spyInfo[$destination] = 3;
|
||||
|
||||
$db->update('nation', [
|
||||
'spy'=>Json::encode($spyInfo, Json::EMPTY_ARRAY_IS_DICT)
|
||||
], 'nation=%i', $general['nation']);
|
||||
|
||||
$log = checkAbility($general, $log);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ $defaultPost = [
|
||||
'showMe' => true
|
||||
];
|
||||
$post = Json::decode(Util::getReq('data', 'string', '{}'));
|
||||
$post += $defaultPost;
|
||||
|
||||
if(!$session->isGameLoggedIn()){
|
||||
$post['neutralView'] = true;
|
||||
|
||||
+1
-13
@@ -119,23 +119,11 @@ function reloadWorldMap(option){
|
||||
};
|
||||
}
|
||||
|
||||
function convertSpyList(arr){
|
||||
var result = [];
|
||||
arr.forEach(function(v){
|
||||
var cityId = (v / 10) | 0;
|
||||
var spy = v % 10;
|
||||
result[cityId] = spy;
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
var cityList = obj.cityList.map(toCityObj);
|
||||
var nationList = obj.nationList.map(toNationObj);
|
||||
nationList = convertDictById(nationList); //array of object -> dict
|
||||
|
||||
var spyList = convertSpyList(obj.spyList);//Array -> Dict
|
||||
var spyList = obj.spyList;
|
||||
var shownByGeneralList = convertSet(obj.shownByGeneralList);//Array -> Set
|
||||
|
||||
var myCity = obj.myCity;
|
||||
|
||||
+1
-1
@@ -199,7 +199,7 @@ CREATE TABLE `nation` (
|
||||
`tech` INT(8) NULL DEFAULT '0',
|
||||
`totaltech` INT(8) NULL DEFAULT '0',
|
||||
`power` INT(8) NULL DEFAULT '0',
|
||||
`spy` CHAR(255) NULL DEFAULT '',
|
||||
`spy` CHAR(255) NOT NULL DEFAULT '{}',
|
||||
`level` INT(1) NULL DEFAULT '0',
|
||||
`type` INT(2) NULL DEFAULT '0',
|
||||
`rule` TEXT NULL DEFAULT '',
|
||||
|
||||
+15
-4
@@ -3,10 +3,11 @@ namespace sammo;
|
||||
|
||||
class Json
|
||||
{
|
||||
const PRETTY = 1;
|
||||
const DELETE_NULL = 2;
|
||||
const NO_CACHE = 4;
|
||||
const PASS_THROUGH = 8;
|
||||
const PRETTY = 1 << 0;
|
||||
const DELETE_NULL = 1 << 1;
|
||||
const NO_CACHE = 1 << 2;
|
||||
const PASS_THROUGH = 1 << 3;
|
||||
const EMPTY_ARRAY_IS_DICT = 1 << 4;
|
||||
|
||||
public static function encode($value, $flag = 0)
|
||||
{
|
||||
@@ -17,6 +18,10 @@ class Json
|
||||
if ($flag & static::DELETE_NULL) {
|
||||
$value = Util::eraseNullValue($value);
|
||||
}
|
||||
|
||||
if(($flag & static::EMPTY_ARRAY_IS_DICT) && $value === []){
|
||||
$value = (object)null;
|
||||
}
|
||||
return json_encode($value, $rawFlag);
|
||||
}
|
||||
|
||||
@@ -25,6 +30,12 @@ class Json
|
||||
return json_decode($value, true);
|
||||
}
|
||||
|
||||
public static function decodeObj($value){
|
||||
//NOTE: 구 코드가 모두 '배열'을 가정하기 때문에 decode는 연관배열로 반환하였으나,
|
||||
//호환을 위해서는object로 반환하는 것이 더 나을것
|
||||
return json_decode($value);
|
||||
}
|
||||
|
||||
public static function die($value, $flag = self::NO_CACHE)
|
||||
{
|
||||
//NOTE: REST 형식에 맞게, ok(), fail()로 쪼개는게 낫지 않을까 생각해봄.
|
||||
|
||||
@@ -160,6 +160,9 @@ class Util extends \utilphp\util
|
||||
if ($val == null) {
|
||||
return null;
|
||||
}
|
||||
if ($val == ''){
|
||||
return null;
|
||||
}
|
||||
return intval($val);
|
||||
}
|
||||
throw new \InvalidArgumentException('올바르지 않은 타입형 :'.$val);
|
||||
|
||||
Reference in New Issue
Block a user