Compare commits
2382
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e1c2fdcfd | ||
|
|
556ef530fd | ||
|
|
4b61d3dc9c | ||
|
|
0332cfb428 | ||
|
|
21dd42cb71 | ||
|
|
a85148790a | ||
|
|
27a00b339b | ||
|
|
96caef8f43 | ||
|
|
4c8b0df8b0 | ||
|
|
ba88642ab8 | ||
|
|
db846c9bc2 | ||
|
|
42f31ce46e | ||
|
|
796fbcce1a | ||
|
|
e15f964f81 | ||
|
|
41234fd502 | ||
|
|
e54cdfdb13 | ||
|
|
556d6be15e | ||
|
|
b19bd263a7 | ||
|
|
163709e1c0 | ||
|
|
e6286c711d | ||
|
|
ac2d7b6289 | ||
|
|
5a3764b418 | ||
|
|
ed28cabb16 | ||
|
|
f522a6cefd | ||
|
|
923d7f5178 | ||
|
|
f8ab617e4c | ||
|
|
022d6e94e3 | ||
|
|
25b414325d | ||
|
|
15aaf04093 | ||
|
|
bd896d1530 | ||
|
|
42ff8adee8 | ||
|
|
07dc78784e | ||
|
|
e3e009fe5b | ||
|
|
893688459c | ||
|
|
0aa6120530 | ||
|
|
85aa7ea71f | ||
|
|
208a75dc16 | ||
|
|
15453d0704 | ||
|
|
c77e89ca0d | ||
|
|
45ce1220dc | ||
|
|
37740bbf41 | ||
|
|
06959db5e5 | ||
|
|
1fa0cf8d32 | ||
|
|
ea50e53718 | ||
|
|
eb6b7ce84a | ||
|
|
d8f4056f46 | ||
|
|
240085834a | ||
|
|
be735c0990 | ||
|
|
58ae76f4c8 | ||
|
|
afa08e9170 | ||
|
|
af3a60590e | ||
|
|
497d118627 | ||
|
|
bad7ed2772 | ||
|
|
74efa5c502 | ||
|
|
f014dae6af | ||
|
|
b692eccd08 | ||
|
|
613a0c00e8 | ||
|
|
2cdf00af50 | ||
|
|
3a68cf07b3 | ||
|
|
484d939cea | ||
|
|
67d224c37e | ||
|
|
0793559831 | ||
|
|
b919a09d33 | ||
|
|
90b51d5a21 | ||
|
|
4e97c6f7a2 | ||
|
|
575e03c0fc | ||
|
|
300c364545 | ||
|
|
fa13145e23 | ||
|
|
dc0281d359 | ||
|
|
bbf916f28c | ||
|
|
0cf255702e | ||
|
|
7c8c4447cb | ||
|
|
1240ce2a02 | ||
|
|
1cc9aa967f | ||
|
|
a4883f5b0e | ||
|
|
f57fc6abbc | ||
|
|
e168399908 | ||
|
|
7462e135fa | ||
|
|
ef339566a5 | ||
|
|
3d6f8c6304 | ||
|
|
5b58e2efa5 | ||
|
|
6650cd2e41 | ||
|
|
f6fbb94ecc | ||
|
|
8730ab3377 | ||
|
|
1b24b06eba | ||
|
|
e3d62397a3 | ||
|
|
105ca78639 | ||
|
|
71ca5a3947 | ||
|
|
d7fc024c04 | ||
|
|
5b89f66758 | ||
|
|
01e2702491 | ||
|
|
ebe7ac1cfc | ||
|
|
0b29589055 | ||
|
|
5fb93afb24 | ||
|
|
6cdf442aa7 | ||
|
|
5626b9e626 | ||
|
|
5b043eb6a4 | ||
|
|
d5748a7950 | ||
|
|
df067be0b9 | ||
|
|
94b146d7bd | ||
|
|
868cf6c64b | ||
|
|
59b6a9e86e | ||
|
|
622c639e44 | ||
|
|
a0c9168791 | ||
|
|
d4c1c05b3c | ||
|
|
711d8161f6 | ||
|
|
b7eaba73b5 | ||
|
|
c269b4938d | ||
|
|
71dced5790 | ||
|
|
c0aea98e03 | ||
|
|
96e1e45696 | ||
|
|
bb922f987e | ||
|
|
fefc66ebe9 | ||
|
|
307d08d898 | ||
|
|
ce2f97e738 | ||
|
|
5a675ad048 | ||
|
|
d866989bc6 | ||
|
|
0f635c6dd0 | ||
|
|
a8b2ae5862 | ||
|
|
d9f8ad9db8 | ||
|
|
877d77f28b | ||
|
|
b26b8bdb98 | ||
|
|
1cac4fc4c0 | ||
|
|
fc0c81e2ca | ||
|
|
5db3bdcef9 | ||
|
|
793183cbea | ||
|
|
a68b530a9d | ||
|
|
0ebb105387 | ||
|
|
e9019418f0 | ||
|
|
3e4e25dee6 | ||
|
|
d3e9c8d692 | ||
|
|
bd1f7adc0c | ||
|
|
099bcdaf8f | ||
|
|
b9582b0dd2 | ||
|
|
f2fe9feb3a | ||
|
|
b99f3a3053 | ||
|
|
3e3677987c | ||
|
|
0cba30a202 | ||
|
|
9c08398d87 | ||
|
|
1a30da6726 | ||
|
|
30326825f0 | ||
|
|
a90baffda6 | ||
|
|
61ce23f7f9 | ||
|
|
0dcc973b2f | ||
|
|
10d07c8974 | ||
|
|
a79abfeab8 | ||
|
|
b6a7b35555 | ||
|
|
0adfee68db | ||
|
|
d0ece51fbb | ||
|
|
5471672ee5 | ||
|
|
470672e367 | ||
|
|
03a0c67209 | ||
|
|
0660180c53 | ||
|
|
499a2ee472 | ||
|
|
8ccedb598b | ||
|
|
c3f1457fce | ||
|
|
5c3dc0c2a5 | ||
|
|
590dfe90c3 | ||
|
|
f22a013079 | ||
|
|
e72975f552 | ||
|
|
77a2e2b2d5 | ||
|
|
8c36e9444a | ||
|
|
04b2b1cafe | ||
|
|
7de089dbbb | ||
|
|
c30965055c | ||
|
|
70cdb945f5 | ||
|
|
433b4e8c44 | ||
|
|
4bfb5b63c9 | ||
|
|
fad8358096 | ||
|
|
d23c17d172 | ||
|
|
426e68693a | ||
|
|
6712f88037 | ||
|
|
c351ecc299 | ||
|
|
b06b89dd86 | ||
|
|
cc48326977 | ||
|
|
2f8b368ae8 | ||
|
|
29b13f6b9c | ||
|
|
c6db4cd545 | ||
|
|
2c00ad098c | ||
|
|
bac0d93ccb | ||
|
|
6678e87cbf | ||
|
|
adbe14fd30 | ||
|
|
9b86aaa1bd | ||
|
|
2969ed2edc | ||
|
|
41d5df60f4 | ||
|
|
cfbaf60989 | ||
|
|
4178927b6f | ||
|
|
291976893a | ||
|
|
cde55ab574 | ||
|
|
77b78d05ac | ||
|
|
1fa32554d8 | ||
|
|
f1e79699a4 | ||
|
|
c628f9237f | ||
|
|
6a83d1ce25 | ||
|
|
081d40cf82 | ||
|
|
b23004c184 | ||
|
|
bc58f48752 | ||
|
|
1ac255a556 | ||
|
|
fb3cbbd924 | ||
|
|
1b29c7e463 | ||
|
|
6003c19b32 | ||
|
|
b54bf240a0 | ||
|
|
505bbda675 | ||
|
|
26bd37af31 | ||
|
|
bf13ccdcd3 | ||
|
|
645fc877e6 | ||
|
|
6ac021ff12 | ||
|
|
5d8e2c16f5 | ||
|
|
83a3ebb583 | ||
|
|
481e23fce0 | ||
|
|
be33ca69f8 | ||
|
|
bd54681d78 | ||
|
|
f0ffd3356d | ||
|
|
8a0b248caf | ||
|
|
bc71ce73cf | ||
|
|
de93966192 | ||
|
|
a4e8221508 | ||
|
|
36c37e97e0 | ||
|
|
03993052a3 | ||
|
|
3ef5c2aa6d | ||
|
|
02d84bada0 | ||
|
|
25332f2728 | ||
|
|
70e64e261e | ||
|
|
4ed88d33b1 | ||
|
|
3414241a71 | ||
|
|
e36a46b1cb | ||
|
|
df09a5227c | ||
|
|
1b1fcebeed | ||
|
|
33d9eb4c6d | ||
|
|
347c0a1275 | ||
|
|
1320c1fa58 | ||
|
|
0ce101f038 | ||
|
|
d56a0a8789 | ||
|
|
8da0e685c8 | ||
|
|
786306e32a | ||
|
|
4e20bf1d1c | ||
|
|
06797a78a7 | ||
|
|
1f3bc6baa6 | ||
|
|
ab0442cb59 | ||
|
|
e02a836063 | ||
|
|
8dfebd055c | ||
|
|
219c7028a7 | ||
|
|
4c21da5373 | ||
|
|
b2585137a5 | ||
|
|
2d585611a5 | ||
|
|
bc2dfc5403 | ||
|
|
071271b7dd | ||
|
|
bd05d5b650 | ||
|
|
f0839ade88 | ||
|
|
0b287be006 | ||
|
|
b0e928fc27 | ||
|
|
5cd2e9712e | ||
|
|
cafde950a4 | ||
|
|
34321ad89f | ||
|
|
3c09e77fba | ||
|
|
8a899c9afe | ||
|
|
865d3c89bb | ||
|
|
a3ce526854 | ||
|
|
f5b33dbbc7 | ||
|
|
83eb58fffa | ||
|
|
5e5d2d5c91 | ||
|
|
af06fc460b | ||
|
|
f874bf564d | ||
|
|
1ab5fcb36f | ||
|
|
e30aff8ca2 | ||
|
|
b2211ac4e0 | ||
|
|
0ad9347122 | ||
|
|
d48f71fc75 | ||
|
|
11adb5ddf0 | ||
|
|
8d3a15b117 | ||
|
|
dd2afb7609 | ||
|
|
08488cae4a | ||
|
|
ef6cb065d5 | ||
|
|
2880a37595 | ||
|
|
44afd72e8c | ||
|
|
6a2804ad79 | ||
|
|
d8af8f143a | ||
|
|
c6540b4fea | ||
|
|
e1897964e8 | ||
|
|
37212c9392 | ||
|
|
a4e8edce73 | ||
|
|
9da82dd205 | ||
|
|
1c15b1fdb2 | ||
|
|
27e02f22cc | ||
|
|
08178dd3aa | ||
|
|
9dc842c6e9 | ||
|
|
b706fd468d | ||
|
|
3d2489b51a | ||
|
|
f7121e25f6 | ||
|
|
307cf5eeae | ||
|
|
a6ae77cebf | ||
|
|
3d1f16bfc2 | ||
|
|
60fdef9d3f | ||
|
|
8d90a00d0e | ||
|
|
0169861c2a | ||
|
|
0f4304dcd4 | ||
|
|
64cb898d13 | ||
|
|
d3ac47356d | ||
|
|
054e58504f | ||
|
|
66ad3cc587 | ||
|
|
386cc074e3 | ||
|
|
0b1f491d16 | ||
|
|
5ce6035192 | ||
|
|
8d322a51db | ||
|
|
46d3c2bb69 | ||
|
|
92e8c5f0ce | ||
|
|
8a458eb96a | ||
|
|
e3e98f9844 | ||
|
|
89a6d6c2ac | ||
|
|
0627466308 | ||
|
|
163fea111b | ||
|
|
b8eb56ac71 | ||
|
|
e07b64339a | ||
|
|
df0c8b3c92 | ||
|
|
d4be69d44f | ||
|
|
cd0b98ee3c | ||
|
|
d1a80241f5 | ||
|
|
4f3d3b0be8 | ||
|
|
6f16d9413c | ||
|
|
2b5f38ca52 | ||
|
|
9dec0ad916 | ||
|
|
0c5118780c | ||
|
|
6e6f58ed94 | ||
|
|
00c31597c2 | ||
|
|
91b16159b7 | ||
|
|
840ab27570 | ||
|
|
0d53277fcc | ||
|
|
0218ac969b | ||
|
|
2f62d2bc14 | ||
|
|
d46d281dcf | ||
|
|
c812e24d8f | ||
|
|
7c120ee253 | ||
|
|
acbbe2c353 | ||
|
|
5b6e15c5fd | ||
|
|
dfdbeac8e4 | ||
|
|
dcf65d47a3 | ||
|
|
75fdc5368e | ||
|
|
af1d8a3041 | ||
|
|
6b0999d09b | ||
|
|
1efad18661 | ||
|
|
4d3fe5aafa | ||
|
|
c50ee44433 | ||
|
|
83c71bec25 | ||
|
|
4c2dabe4cc | ||
|
|
cf631491e8 | ||
|
|
5b026e3c5c | ||
|
|
4d136a022c | ||
|
|
f0a8efb5ad | ||
|
|
fc94177340 | ||
|
|
3b29e17696 | ||
|
|
a64431add8 | ||
|
|
c90820e6e2 | ||
|
|
46f3709f09 | ||
|
|
8e0b908b5e | ||
|
|
a5f8aa6d17 | ||
|
|
1d821480fc | ||
|
|
eaeb97baf0 | ||
|
|
e2cc446c71 | ||
|
|
02b3fe2f25 | ||
|
|
16b1bece2b | ||
|
|
4c41486e1c | ||
|
|
da71280a8d | ||
|
|
6da30c5723 | ||
|
|
aeabb05a9d | ||
|
|
2538dc5071 | ||
|
|
c7219eeb33 | ||
|
|
c493640dae | ||
|
|
0e7edad020 | ||
|
|
b7328a56ae | ||
|
|
b34e17d69a | ||
|
|
0fec301f61 | ||
|
|
82c8441e1d | ||
|
|
e845777735 | ||
|
|
f9b592fec7 | ||
|
|
55de2d3f62 | ||
|
|
ad6cae561a | ||
|
|
6256867fa0 | ||
|
|
7f4205601d | ||
|
|
d50c409315 | ||
|
|
4ee6946828 | ||
|
|
e1df980ece | ||
|
|
be1198b4a1 | ||
|
|
976c0bee6b | ||
|
|
4fc2fc1128 | ||
|
|
d3a455b955 | ||
|
|
0b815f89d6 | ||
|
|
e6cdf1ee7c | ||
|
|
aa12604481 | ||
|
|
872e0f565a | ||
|
|
f21b15f2db | ||
|
|
9aecca4cef | ||
|
|
553f9d46ba | ||
|
|
91079d9d40 | ||
|
|
6f6360d501 | ||
|
|
5a8ca16e34 | ||
|
|
9476c54eaa | ||
|
|
edd5752de2 | ||
|
|
a560ee6f0a | ||
|
|
3c28ceb701 | ||
|
|
527a0895f5 | ||
|
|
731f1e0226 | ||
|
|
6aa6a2e119 | ||
|
|
91fac6972c | ||
|
|
9fd754f3bb | ||
|
|
a922f90046 | ||
|
|
0c206c3835 | ||
|
|
bdf6d38f5d | ||
|
|
cf0a74a9d3 | ||
|
|
2d0c19271b | ||
|
|
3858f54fc5 | ||
|
|
d58b9a211f | ||
|
|
ffde727d68 | ||
|
|
6c3b9aafc1 | ||
|
|
872755e57f | ||
|
|
07c20af53b | ||
|
|
0a4a7863f1 | ||
|
|
a5738acc85 | ||
|
|
fb308b560b | ||
|
|
6639356f88 | ||
|
|
f45e0c9c4b | ||
|
|
7648563b00 | ||
|
|
32ac719663 | ||
|
|
f07ece9dd6 | ||
|
|
4b703f2790 | ||
|
|
0e350c28c7 | ||
|
|
50387cdbf5 | ||
|
|
49fcfa61f2 | ||
|
|
cd053d6a87 | ||
|
|
74ed82f592 | ||
|
|
10f23db843 | ||
|
|
89ec5861b5 | ||
|
|
ab614e4545 | ||
|
|
6559b3ba1b | ||
|
|
b70debeffa | ||
|
|
2a386e9c8b | ||
|
|
cf3f40b578 | ||
|
|
a18500dd9b | ||
|
|
3998d10bba | ||
|
|
1372874ab4 | ||
|
|
cbce448f35 | ||
|
|
b715918998 | ||
|
|
b4605958ad | ||
|
|
40a20a55d3 | ||
|
|
835e5ccc2b | ||
|
|
85fdbbd0ba | ||
|
|
6173e6c0f4 | ||
|
|
22d28f88c9 | ||
|
|
8d759ddd0a | ||
|
|
393078fb5f | ||
|
|
3d2ce8bf49 | ||
|
|
a653cedb16 | ||
|
|
f3538fbcb7 | ||
|
|
4b44f378ee | ||
|
|
5efba2aa10 | ||
|
|
ce43221767 | ||
|
|
69654fa96d | ||
|
|
16d0509262 | ||
|
|
e1a4ed67f4 | ||
|
|
5abe949006 | ||
|
|
bbb9a01130 | ||
|
|
5c589f0b39 | ||
|
|
dd37ea1295 | ||
|
|
7535f8b34c | ||
|
|
3dcf76467e | ||
|
|
dd8c1f3ec8 | ||
|
|
327ef6a39b | ||
|
|
742b70a5f0 | ||
|
|
fbf0610ff7 | ||
|
|
a06c15f469 | ||
|
|
ef96c7d074 | ||
|
|
a437675781 | ||
|
|
af0b10db40 | ||
|
|
60b5b0bf8d | ||
|
|
88237d369d | ||
|
|
3433810ed0 | ||
|
|
863a67516e | ||
|
|
531b04b2ff | ||
|
|
603f93025f | ||
|
|
51d4c4cdc9 | ||
|
|
f69a2be045 | ||
|
|
07b49dca49 | ||
|
|
f7ea1e3b99 | ||
|
|
8ecb42206f | ||
|
|
057f89ce01 | ||
|
|
dc8472323d | ||
|
|
974747b297 | ||
|
|
6a8cc2a505 | ||
|
|
4bcdbde5bc | ||
|
|
8f2770be95 | ||
|
|
7933336c25 | ||
|
|
5e1267bc64 | ||
|
|
dc835b86e9 | ||
|
|
ca49fc368a | ||
|
|
0475359eff | ||
|
|
119228c0b4 | ||
|
|
f06adcb15d | ||
|
|
1ed27c4c94 | ||
|
|
d57880510c | ||
|
|
c24b9cc0d0 | ||
|
|
2747f10901 | ||
|
|
20202ee75e | ||
|
|
58a43f5534 | ||
|
|
c186f05dd3 | ||
|
|
f2182c195b | ||
|
|
066c6bd1cd | ||
|
|
690df52019 | ||
|
|
533ba87ef4 | ||
|
|
b8581e3cec | ||
|
|
d7a7751480 | ||
|
|
e816f7126d | ||
|
|
6315dff17b | ||
|
|
826d9fcf6a | ||
|
|
4e642fe3d3 | ||
|
|
2012bbdbc1 | ||
|
|
96e14fd6fc | ||
|
|
1449d31e34 | ||
|
|
a3a2a62819 | ||
|
|
c59019f5f7 | ||
|
|
6bf09ff6da | ||
|
|
3a76d7df3a | ||
|
|
1d516f08b3 | ||
|
|
656245ce6a | ||
|
|
91d26db055 | ||
|
|
a354d60b77 | ||
|
|
3112ac7f9a | ||
|
|
5351496d6e | ||
|
|
794f766db8 | ||
|
|
3fb5423fda | ||
|
|
260cee9b38 | ||
|
|
c4a6735d60 | ||
|
|
28ad1b6c9d | ||
|
|
f609e2b628 | ||
|
|
3ef363a01e | ||
|
|
9e68bc90c2 | ||
|
|
4a36ac6a04 | ||
|
|
d2590607c2 | ||
|
|
2bce6e4f02 | ||
|
|
53e95bfadf | ||
|
|
6450629d70 | ||
|
|
8261b85b86 | ||
|
|
1c985e227f | ||
|
|
4efb380a61 | ||
|
|
e64812da72 | ||
|
|
14bbcd0617 | ||
|
|
ca4888ecae | ||
|
|
e3251b352f | ||
|
|
a532e73b52 | ||
|
|
b11aa4e633 | ||
|
|
1c66cf83bf | ||
|
|
4cbe3354e1 | ||
|
|
1ae7ba6bbb | ||
|
|
8d28478b10 | ||
|
|
c1fb8c619f | ||
|
|
eb250f91cb | ||
|
|
4ea2b963fa | ||
|
|
372b4bbb3f | ||
|
|
7577b1a958 | ||
|
|
7590c0241a | ||
|
|
68b00733e3 | ||
|
|
0cf1c48f2a | ||
|
|
8dbaa4c175 | ||
|
|
9085ed7ab0 | ||
|
|
26c3fea611 | ||
|
|
6008cc3831 | ||
|
|
f9d71a741f | ||
|
|
6affe95aea | ||
|
|
e83fe7f8ff | ||
|
|
4926577eeb | ||
|
|
584a9ba06c | ||
|
|
c8f5f671a9 | ||
|
|
cc852e5aad | ||
|
|
1bb37ede87 | ||
|
|
8eaee091ea | ||
|
|
90340c5be8 | ||
|
|
34258475f5 | ||
|
|
445c7a0472 | ||
|
|
541710ba1e | ||
|
|
27b6caf77d | ||
|
|
460c131c1e | ||
|
|
6aff22ae35 | ||
|
|
355021ba2d | ||
|
|
946fbc0933 | ||
|
|
7bebc7da8d | ||
|
|
cd33ac3c3e | ||
|
|
32f98ac079 | ||
|
|
fad54d4627 | ||
|
|
8ac6daff95 | ||
|
|
342f20a5a6 | ||
|
|
b02bf2e596 | ||
|
|
3961ff5185 | ||
|
|
90c696776c | ||
|
|
d697d42c4e | ||
|
|
b52604cb1d | ||
|
|
ee1639bbef | ||
|
|
59b09fa084 | ||
|
|
2d1a001c0f | ||
|
|
cb6d78eccb | ||
|
|
65949cccfa | ||
|
|
2d2c4d8ae4 | ||
|
|
a22005cf8c | ||
|
|
d5c88f2bc0 | ||
|
|
a7b816dd05 | ||
|
|
c84924c23c | ||
|
|
faa37756dc | ||
|
|
61ed7b167a | ||
|
|
cd6347a23a | ||
|
|
6cc37dedd2 | ||
|
|
1496fbe0b7 | ||
|
|
738758d753 | ||
|
|
7cd40fca03 | ||
|
|
266da98a73 | ||
|
|
2a17d357a1 | ||
|
|
b081e3e011 | ||
|
|
09f885ee68 | ||
|
|
d1568a3b2c | ||
|
|
f913a86dae | ||
|
|
5c56b5aacf | ||
|
|
096b87d4e3 | ||
|
|
6e3d3584a1 | ||
|
|
b0e7221950 | ||
|
|
92458fb1b3 | ||
|
|
80541abe9f | ||
|
|
d7851e5ec9 | ||
|
|
16a50d6271 | ||
|
|
72a58827bf | ||
|
|
85b806283e | ||
|
|
15037edbde | ||
|
|
17c83f8db9 | ||
|
|
e7dcc84afc | ||
|
|
8eaa940d4e | ||
|
|
9997675b1d | ||
|
|
9ef566f11f | ||
|
|
e3c3afe809 | ||
|
|
5b14ca6b12 | ||
|
|
c4676fecda | ||
|
|
a2872ef5b7 | ||
|
|
dea12f0e5e | ||
|
|
a518a6e67d | ||
|
|
325f2c28f7 | ||
|
|
dc470402e7 | ||
|
|
a029322aae | ||
|
|
e4a9953af4 | ||
|
|
57dc70f1bc | ||
|
|
dd83874d83 | ||
|
|
1ef2b7398e | ||
|
|
a89696afbb | ||
|
|
1ac03ba6e5 | ||
|
|
7e4068a244 | ||
|
|
c31a867bde | ||
|
|
f1252fa4e2 | ||
|
|
dd52766449 | ||
|
|
8f3c778b80 | ||
|
|
9aa1b25a56 | ||
|
|
b4d7acb827 | ||
|
|
b306601c72 | ||
|
|
5310c2e7f6 | ||
|
|
859f49eb10 | ||
|
|
ccfb73c19b | ||
|
|
b35c40c5a6 | ||
|
|
288107c8bc | ||
|
|
f9b56c7de2 | ||
|
|
b48734ebfa | ||
|
|
1aa944c3e1 | ||
|
|
0399b73c73 | ||
|
|
bcbd69e1b9 | ||
|
|
14fc85db51 | ||
|
|
0c50c49555 | ||
|
|
d37c254812 | ||
|
|
9d3e83e1ba | ||
|
|
2df98c614d | ||
|
|
ef7655101f | ||
|
|
b1f33e84b9 | ||
|
|
be27328404 | ||
|
|
f33a3989ea | ||
|
|
174cef80c0 | ||
|
|
b2dc9dc113 | ||
|
|
7e161684e9 | ||
|
|
a25654a1c2 | ||
|
|
8f1fb5df6c | ||
|
|
e9393a2e8e | ||
|
|
91a4989ef3 | ||
|
|
bbc70469e5 | ||
|
|
eb4ad1af46 | ||
|
|
0a42d7381c | ||
|
|
0165cfb3ac | ||
|
|
f44d45c992 | ||
|
|
38037978a2 | ||
|
|
e909a6927b | ||
|
|
85574ed40c | ||
|
|
7e9181d935 | ||
|
|
87b3f3ed27 | ||
|
|
9ac3763bdd | ||
|
|
5b4567b9ff | ||
|
|
201080e6ff | ||
|
|
5d1d7da498 | ||
|
|
c6f831aa38 | ||
|
|
fad7af19a7 | ||
|
|
4327f9529a | ||
|
|
d100030da6 | ||
|
|
3632d2c3ef | ||
|
|
a430a1dc0c | ||
|
|
739660e6ca | ||
|
|
1a18dc23b9 | ||
|
|
55f37f856b | ||
|
|
c1df8d2ed3 | ||
|
|
6c92b2dd2e | ||
|
|
3e35dec9fa | ||
|
|
187db3d011 | ||
|
|
0116e86fcc | ||
|
|
aaa3f1aa88 | ||
|
|
84f54b4b8a | ||
|
|
8c7ec533bf | ||
|
|
9de1f95360 | ||
|
|
cdefb96a8c | ||
|
|
e25b6c9232 | ||
|
|
eae58b59c9 | ||
|
|
4afedd5c88 | ||
|
|
6e5cc7fc6c | ||
|
|
1b6c2152d3 | ||
|
|
1fc022bc60 | ||
|
|
858777606b | ||
|
|
b4fe75af95 | ||
|
|
e8d94fd116 | ||
|
|
d6ab066152 | ||
|
|
54b7cb2c88 | ||
|
|
90b2623b9d | ||
|
|
8782836d7b | ||
|
|
e3aa26a41a | ||
|
|
54b1fb739f | ||
|
|
9983b719d6 | ||
|
|
c70df7102b | ||
|
|
f335b6837b | ||
|
|
19892a00f4 | ||
|
|
c6d753080a | ||
|
|
28547b32a0 | ||
|
|
8aae688fb0 | ||
|
|
38a688f918 | ||
|
|
6f9cb12dd8 | ||
|
|
5c20d6c3f6 | ||
|
|
a09511defb | ||
|
|
189db2a051 | ||
|
|
8f9d695ca6 | ||
|
|
cfc897055b | ||
|
|
f74a7b31c3 | ||
|
|
1860e1dc43 | ||
|
|
c5e6225e7f | ||
|
|
8e985ed413 | ||
|
|
392c627925 | ||
|
|
cd9a4887fd | ||
|
|
22f856668f | ||
|
|
0f926fc701 | ||
|
|
4ab5202ef2 | ||
|
|
26c316a47a | ||
|
|
b25c2547b2 | ||
|
|
64b041ea05 | ||
|
|
0ddc8588f8 | ||
|
|
b4e274682a | ||
|
|
76ce203272 | ||
|
|
7116efd65d | ||
|
|
a9b2dcb49e | ||
|
|
e804b6afb2 | ||
|
|
772d37131d | ||
|
|
ec30c46d7e | ||
|
|
b5705e6ec3 | ||
|
|
4e0479262f | ||
|
|
9a8088495e | ||
|
|
983c5eb544 | ||
|
|
58fdbc4054 | ||
|
|
3673632089 | ||
|
|
87e61c8920 | ||
|
|
d67e7a3b4d | ||
|
|
954995b3ef | ||
|
|
f591849b8d | ||
|
|
4c44b751e3 | ||
|
|
648ad23dcf | ||
|
|
c46c8a010f | ||
|
|
832536f403 | ||
|
|
f0067a1c04 | ||
|
|
f732a4b545 | ||
|
|
38cf897ae1 | ||
|
|
8ca365da7b | ||
|
|
cbe8b4012b | ||
|
|
522f5c8a86 | ||
|
|
ac5d2268e5 | ||
|
|
3d0effb912 | ||
|
|
90b970115a | ||
|
|
0f5ba4ef5b | ||
|
|
bd428fa352 | ||
|
|
00b57b2ff9 | ||
|
|
bd69e3dcc3 | ||
|
|
275d492f39 | ||
|
|
f55f302306 | ||
|
|
650225ad00 | ||
|
|
631f5ed99c | ||
|
|
b9664dc710 | ||
|
|
bd66871b0e | ||
|
|
dccc880ef5 | ||
|
|
0ccad9df90 | ||
|
|
c75fbc5f00 | ||
|
|
e257bed6de | ||
|
|
e56a550cff | ||
|
|
3d1ced386f | ||
|
|
eb90b33485 | ||
|
|
215a7501a6 | ||
|
|
9f228b6235 | ||
|
|
72e6132895 | ||
|
|
fbe520d381 | ||
|
|
108f47c90d | ||
|
|
c65c34469a | ||
|
|
b21845440a | ||
|
|
4ce642629c | ||
|
|
68262d8abb | ||
|
|
093002db14 | ||
|
|
b85f7915f4 | ||
|
|
e70315354e | ||
|
|
0867a234c2 | ||
|
|
4e962bba09 | ||
|
|
279b0cd0c5 | ||
|
|
3dc3dc8cbe | ||
|
|
38131f26be | ||
|
|
0e38412510 | ||
|
|
848279404f | ||
|
|
6e77c8b8fc | ||
|
|
33438263ab | ||
|
|
bbe4e6d7ed | ||
|
|
69387b6444 | ||
|
|
bf7ffda252 | ||
|
|
10c2f222e1 | ||
|
|
b0a0bfa4ac | ||
|
|
b573130ab7 | ||
|
|
cd5468f55c | ||
|
|
83407e0c8d | ||
|
|
e1466fe160 | ||
|
|
94a6a26b48 | ||
|
|
f205c82d90 | ||
|
|
f9e61e7ea0 | ||
|
|
9462d32f83 | ||
|
|
da8203e64d | ||
|
|
83ebd55a15 | ||
|
|
0c3e9eb716 | ||
|
|
bc72a8f083 | ||
|
|
14a68d5806 | ||
|
|
86dc78b63a | ||
|
|
5dd0a758d4 | ||
|
|
e959b1edc2 | ||
|
|
7533f6239c | ||
|
|
71636a4ce6 | ||
|
|
72e4cf3d10 | ||
|
|
a8c849a305 | ||
|
|
ce0a941e2d | ||
|
|
af899b3ca8 | ||
|
|
742234c757 | ||
|
|
15b8140690 | ||
|
|
89cd881397 | ||
|
|
75fd905829 | ||
|
|
5d77e227e9 | ||
|
|
1da46f1615 | ||
|
|
09bcf05b04 | ||
|
|
5c590f4ad8 | ||
|
|
1feb66dc86 | ||
|
|
e83ebc2581 | ||
|
|
c97889f249 | ||
|
|
5f1a8b406a | ||
|
|
3781d43fa8 | ||
|
|
d950315e5a | ||
|
|
fae10ae979 | ||
|
|
c1cc453761 | ||
|
|
52aad2db2a | ||
|
|
777d2dae40 | ||
|
|
6c2388633c | ||
|
|
9ade8f69fd | ||
|
|
aded799b81 | ||
|
|
34bcd946e9 | ||
|
|
791db54746 | ||
|
|
5c2d9dddb0 | ||
|
|
b4d5fbcb61 | ||
|
|
7a9ea55100 | ||
|
|
b6eaf30829 | ||
|
|
ee778e6a09 | ||
|
|
df5c4cefeb | ||
|
|
de8c0b6d09 | ||
|
|
86dcf290a6 | ||
|
|
cd9bfba7c6 | ||
|
|
aa5b8740fd | ||
|
|
869a31abf0 | ||
|
|
f8fa10389a | ||
|
|
553efb890e | ||
|
|
4b276370dc | ||
|
|
2d739a956d | ||
|
|
66dbc0366c | ||
|
|
553ee02387 | ||
|
|
8e5c65f03b | ||
|
|
2bb8f969dc | ||
|
|
e46f5ea1bf | ||
|
|
6549c5d1a0 | ||
|
|
1710dc9c72 | ||
|
|
1e963ee1d8 | ||
|
|
a133dfc722 | ||
|
|
42c3c6ff46 | ||
|
|
a62cd40fc0 | ||
|
|
b0dcf14d96 | ||
|
|
780169962d | ||
|
|
99d6c8c879 | ||
|
|
ed6d19e8ab | ||
|
|
c02581978d | ||
|
|
1feb732ebc | ||
|
|
1029acab75 | ||
|
|
db00b65e3c | ||
|
|
10533dcba2 | ||
|
|
773ae2bfe3 | ||
|
|
fd4d10e6e7 | ||
|
|
14e267b4b0 | ||
|
|
60d04b1bdf | ||
|
|
bebe535d94 | ||
|
|
d7d084b57a | ||
|
|
265200b5bc | ||
|
|
3b60d9ba77 | ||
|
|
3baf761b3b | ||
|
|
6623e5cb2d | ||
|
|
13f5cb1539 | ||
|
|
6e19722742 | ||
|
|
d083dc36b2 | ||
|
|
8eb2380542 | ||
|
|
aac7391d28 | ||
|
|
691ac56723 | ||
|
|
009e310a75 | ||
|
|
90cb9d58a4 | ||
|
|
7501570cea | ||
|
|
c5486f3e77 | ||
|
|
dbf376d400 | ||
|
|
2da6108d19 | ||
|
|
4f3c2e8adc | ||
|
|
ea9a0130db | ||
|
|
ff0fd9e20f | ||
|
|
ad868f1df3 | ||
|
|
7104d983cd | ||
|
|
ff9db8ff5a | ||
|
|
231df0b15b | ||
|
|
f978e528de | ||
|
|
cc73c7c0b6 | ||
|
|
15701a4a90 | ||
|
|
f8d6204f0c | ||
|
|
c3ceef836a | ||
|
|
de44c416f6 | ||
|
|
25d2824478 | ||
|
|
62872b34c2 | ||
|
|
ddbe6f4683 | ||
|
|
d3922804eb | ||
|
|
ce8fdb1595 | ||
|
|
b000ee7745 | ||
|
|
69a7ef2318 | ||
|
|
d6e09a6738 | ||
|
|
9d642bf941 | ||
|
|
1f4d543fe1 | ||
|
|
93363ec2e3 | ||
|
|
a5ec1c886a | ||
|
|
cb4d467f8e | ||
|
|
3c9add272a | ||
|
|
73a3cacfbd | ||
|
|
6149a12180 | ||
|
|
790ef81101 | ||
|
|
5cc57110c1 | ||
|
|
d54adf7ca9 | ||
|
|
195a590de3 | ||
|
|
5f8056fad6 | ||
|
|
87bfa7f0f3 | ||
|
|
dc645ff08f | ||
|
|
c72e0d5ea3 | ||
|
|
97261e2ee9 | ||
|
|
3cbc018f25 | ||
|
|
e0c908d88f | ||
|
|
562c69307e | ||
|
|
9a6b5d8e66 | ||
|
|
8f1845b334 | ||
|
|
5703db8c2b | ||
|
|
42b59f0471 | ||
|
|
76b8f8743d | ||
|
|
a3779ff1e1 | ||
|
|
f93739c0e0 | ||
|
|
1d6bd5acf6 | ||
|
|
592903f3f8 | ||
|
|
c17f905ed2 | ||
|
|
44e1bb10c3 | ||
|
|
77248ad4d8 | ||
|
|
f25f5008f1 | ||
|
|
666da255b8 | ||
|
|
60f9d4b3a3 | ||
|
|
115c6dd178 | ||
|
|
a1142100ab | ||
|
|
6b2ebe2f0e | ||
|
|
0ec8c74015 | ||
|
|
8baa24a539 | ||
|
|
6141a6b467 | ||
|
|
02f8dd928a | ||
|
|
31baa7fa85 | ||
|
|
207758482f | ||
|
|
0293e3a40a | ||
|
|
5445be2056 | ||
|
|
ce5ad89d5e | ||
|
|
83e8cfc2cc | ||
|
|
44d9818e97 | ||
|
|
ce4bece9ed | ||
|
|
18e2323cf4 | ||
|
|
8ebd6df41a | ||
|
|
c30dd01377 | ||
|
|
e84dc0120f | ||
|
|
47ea0cd282 | ||
|
|
e928b19b47 | ||
|
|
3f42024ffd | ||
|
|
0d1c168cbe | ||
|
|
3e32904c4b | ||
|
|
1c4697c2eb | ||
|
|
0cb73199b8 | ||
|
|
8cc406260d | ||
|
|
9a6f9f0a5e | ||
|
|
ee9483a291 | ||
|
|
c8d2050c7a | ||
|
|
ef5dd47604 | ||
|
|
f7a123c10b | ||
|
|
34fb3d9cd9 | ||
|
|
d712d53020 | ||
|
|
ac6b2ef4b4 | ||
|
|
9fd1f620d3 | ||
|
|
6de1a523bc | ||
|
|
37bface3a7 | ||
|
|
3e0a8618fd | ||
|
|
5d15141ae9 | ||
|
|
908863c076 | ||
|
|
628530dcff | ||
|
|
ff36369e57 | ||
|
|
366cba2102 | ||
|
|
39ea45eb51 | ||
|
|
07a1a3b469 | ||
|
|
b888be9dad | ||
|
|
c2ed6b8b08 | ||
|
|
90de11f4c9 | ||
|
|
083f26f3c4 | ||
|
|
4283d94edc | ||
|
|
46dece1b50 | ||
|
|
15e1ba7c05 | ||
|
|
9ea1b15753 | ||
|
|
07e186bc5f | ||
|
|
1bb5525c84 | ||
|
|
b0f47d70f1 | ||
|
|
8e4ee05bc1 | ||
|
|
51b04b68de | ||
|
|
6ec86fba1c | ||
|
|
e14a4382e5 | ||
|
|
a7ef197510 | ||
|
|
12f75688ff | ||
|
|
a1fd1acb86 | ||
|
|
d521bcede7 | ||
|
|
46eaa35718 | ||
|
|
2d905f9862 | ||
|
|
6ab2f99182 | ||
|
|
324b2f524c | ||
|
|
64973e46dd | ||
|
|
1980ef8e33 | ||
|
|
3852f644b8 | ||
|
|
dc780bd5fe | ||
|
|
11057154a7 | ||
|
|
215796bcaf | ||
|
|
cc70cb44ab | ||
|
|
b9833c49d1 | ||
|
|
685461b70f | ||
|
|
227b0a08ed | ||
|
|
2c45d38a66 | ||
|
|
c2364e3508 | ||
|
|
5aea034a17 | ||
|
|
73aa2bd158 | ||
|
|
79b3e6882a | ||
|
|
8208a3c3e3 | ||
|
|
71e52e0b65 | ||
|
|
79919802c9 | ||
|
|
5ac4fcc4fc | ||
|
|
902b22afac | ||
|
|
f33c293b1d | ||
|
|
86ae97e63c | ||
|
|
116aa5a508 | ||
|
|
9b4bdc8e33 | ||
|
|
5cc2d74128 | ||
|
|
22938a9d90 | ||
|
|
38020740d8 | ||
|
|
1e5ad5ad09 | ||
|
|
9382ad5809 | ||
|
|
8357180b78 | ||
|
|
0e0ee29cb6 | ||
|
|
c347ee1974 | ||
|
|
a0bc9c996d | ||
|
|
0ff098c2dd | ||
|
|
bf651ecad2 | ||
|
|
b516b704bb | ||
|
|
7a051d2587 | ||
|
|
d9dbedfded | ||
|
|
1f0590eff5 | ||
|
|
3b0b0e1cd5 | ||
|
|
9280cc841c | ||
|
|
57591444a9 | ||
|
|
704307c062 | ||
|
|
4bde1ba9f3 | ||
|
|
4524de492d | ||
|
|
1998d80162 | ||
|
|
8fb8e6f75e | ||
|
|
2455b14cc0 | ||
|
|
ef3e94edd3 | ||
|
|
cf06d79e8d | ||
|
|
b1ad327d16 | ||
|
|
223eaf7ee8 | ||
|
|
b7ed51ed49 | ||
|
|
7805c4eee6 | ||
|
|
5176d9a97d | ||
|
|
225199f264 | ||
|
|
70703e6952 | ||
|
|
c9ff23f243 | ||
|
|
127cbf1509 | ||
|
|
3de14c7c4c | ||
|
|
41ec5f262f | ||
|
|
773d772f8e | ||
|
|
8f700af029 | ||
|
|
0360bd168c | ||
|
|
8f438f95d0 | ||
|
|
0b825f58cf | ||
|
|
5893d853aa | ||
|
|
cf7a4a82f3 | ||
|
|
3c7bee32f8 | ||
|
|
6b9157f1d4 | ||
|
|
e229b207c1 | ||
|
|
6af3c1d523 | ||
|
|
51f24748a9 | ||
|
|
3a44782b05 | ||
|
|
8d41dead5d | ||
|
|
c611e98cf7 | ||
|
|
b98df58c76 | ||
|
|
feee4b2022 | ||
|
|
0dc061611f | ||
|
|
27aa1c1973 | ||
|
|
c1bf3a773f | ||
|
|
57ba12834a | ||
|
|
16f2c9fb42 | ||
|
|
b8c28e0a89 | ||
|
|
5e2f722e1c | ||
|
|
df67c0540c | ||
|
|
f26fb3cdf8 | ||
|
|
083dcb3647 | ||
|
|
a01fa3bc54 | ||
|
|
a53a69d374 | ||
|
|
98e0a48226 | ||
|
|
2c8e33b643 | ||
|
|
224a9e5cd8 | ||
|
|
4de249efa0 | ||
|
|
cbe341ff2c | ||
|
|
a4595a6592 | ||
|
|
b1c458bdc4 | ||
|
|
3fd747febf | ||
|
|
598f12a90a | ||
|
|
bd88cbfe64 | ||
|
|
5a2c21f956 | ||
|
|
09d28eff90 | ||
|
|
d540cd0a77 | ||
|
|
4e5caa7b8b | ||
|
|
968655c9cd | ||
|
|
1470793b52 | ||
|
|
e99832e2f0 | ||
|
|
327f85fdcc | ||
|
|
3b57965f8b | ||
|
|
baf697a134 | ||
|
|
8c900e5ca0 | ||
|
|
e6c37c0d1e | ||
|
|
b116741e25 | ||
|
|
0087d5784b | ||
|
|
8f95d4b279 | ||
|
|
baba2d34dd | ||
|
|
42e8f8f610 | ||
|
|
b739bfa01e | ||
|
|
a68b9643fc | ||
|
|
8d87c9bb19 | ||
|
|
287dd241e7 | ||
|
|
287dfded0e | ||
|
|
db5892b983 | ||
|
|
7c7caf98c1 | ||
|
|
869dd8d5a8 | ||
|
|
e5a4074c03 | ||
|
|
0ee8913199 | ||
|
|
ef94478db8 | ||
|
|
bb65e2c5c1 | ||
|
|
6cd5cb7ed0 | ||
|
|
3c0bb7ca41 | ||
|
|
48d5c2c772 | ||
|
|
9e7b8bb6b2 | ||
|
|
553e0fdbe3 | ||
|
|
38bef005f7 | ||
|
|
1bc468095c | ||
|
|
23089d2288 | ||
|
|
0fe8b3f671 | ||
|
|
61c1221b5e | ||
|
|
7fe04eee5a | ||
|
|
744c24b032 | ||
|
|
00d3105aad | ||
|
|
42bb937e68 | ||
|
|
86e58437aa | ||
|
|
89a6769385 | ||
|
|
d7989ab34d | ||
|
|
d291d38b38 | ||
|
|
6722de4173 | ||
|
|
c63085be15 | ||
|
|
5a1003ad71 | ||
|
|
29c7e3696a | ||
|
|
28c3ebb5f9 | ||
|
|
573d313cc8 | ||
|
|
33c7b4c440 | ||
|
|
4abf43e0ca | ||
|
|
12529b2c41 | ||
|
|
144b0c651c | ||
|
|
a4f7514220 | ||
|
|
22edba6c43 | ||
|
|
987450d880 | ||
|
|
107263d061 | ||
|
|
f667eb1500 | ||
|
|
50d7fa684f | ||
|
|
09ae205e37 | ||
|
|
68aeafaa0b | ||
|
|
cb1ac4541b | ||
|
|
073759612a | ||
|
|
2ea726518e | ||
|
|
7e5a1d385c | ||
|
|
1a9168e824 | ||
|
|
3c247e2156 | ||
|
|
6e80561f32 | ||
|
|
fb752f6ade | ||
|
|
497f848b70 | ||
|
|
8ce33b10a3 | ||
|
|
e77d40c4c2 | ||
|
|
323cf47417 | ||
|
|
026d72d68a | ||
|
|
617ca22f2d | ||
|
|
46acfe9470 | ||
|
|
5df66ede36 | ||
|
|
9b4d512429 | ||
|
|
c48b0c17ba | ||
|
|
969306822f | ||
|
|
01d3e6c03d | ||
|
|
61da4e56c1 | ||
|
|
614cd1c96f | ||
|
|
53a3767829 | ||
|
|
5eec7f9bbc | ||
|
|
6f722f9ead | ||
|
|
4c3cc8547c | ||
|
|
2ff74a2b68 | ||
|
|
793ee2acbe | ||
|
|
7abcbcda15 | ||
|
|
674f3b95c5 | ||
|
|
42eb107ecb | ||
|
|
107f28ca93 | ||
|
|
b180fa901d | ||
|
|
72682a3dd1 | ||
|
|
549114ae1f | ||
|
|
ead0e14350 | ||
|
|
1a69ee2b2c | ||
|
|
fe32958d59 | ||
|
|
a0215586f2 | ||
|
|
d18f795202 | ||
|
|
125d33d6b7 | ||
|
|
378d2e043f | ||
|
|
1d4a2c5863 | ||
|
|
109d6300ab | ||
|
|
9483035056 | ||
|
|
f69de0db21 | ||
|
|
2fa5c1a67c | ||
|
|
cbe47aea1b | ||
|
|
f40c9199fc | ||
|
|
890ecf5846 | ||
|
|
23d4136096 | ||
|
|
97d5f68072 | ||
|
|
53cebd7d2f | ||
|
|
21d06c00aa | ||
|
|
95487bba48 | ||
|
|
a544f4349f | ||
|
|
22b57f39ef | ||
|
|
4fdcc0221d | ||
|
|
2a78622529 | ||
|
|
21d21f4261 | ||
|
|
7dd519565b | ||
|
|
2e06b28e5a | ||
|
|
85409263c8 | ||
|
|
91b5a1e44a | ||
|
|
08373b76a2 | ||
|
|
3386d2f637 | ||
|
|
c047d23c69 | ||
|
|
31ec481d46 | ||
|
|
6a1cb8c597 | ||
|
|
653d1460a3 | ||
|
|
ff5ab5ab1d | ||
|
|
af2eee17fe | ||
|
|
ae02bbcce7 | ||
|
|
7d3ec1368f | ||
|
|
3267595bc5 | ||
|
|
750788d300 | ||
|
|
ff528cbbaf | ||
|
|
210f77c46e | ||
|
|
d77ee9b638 | ||
|
|
2a5e73a48a | ||
|
|
b3fb20df58 | ||
|
|
1d7bf20f96 | ||
|
|
08ecd47cf0 | ||
|
|
c14fcf29e8 | ||
|
|
e7b526455c | ||
|
|
5c2b4f03f3 | ||
|
|
832750ec57 | ||
|
|
8149df1e34 | ||
|
|
3b60a5d3c4 | ||
|
|
14e074a64f | ||
|
|
b04f1643c9 | ||
|
|
14904a2958 | ||
|
|
d43ea9bedd | ||
|
|
d397cdf0f6 | ||
|
|
93104a21f3 | ||
|
|
d3f36f9b71 | ||
|
|
fdb46534ab | ||
|
|
ee2f6e9c13 | ||
|
|
cc9706c413 | ||
|
|
13d3db0516 | ||
|
|
2ee0ad157d | ||
|
|
2dbbf052d2 | ||
|
|
453f5681dd | ||
|
|
afeaf01fdb | ||
|
|
bbfe5c2ab0 | ||
|
|
c8422421ab | ||
|
|
477ec440bc | ||
|
|
ef40f299ef | ||
|
|
fe2a076558 | ||
|
|
b32eb07d1e | ||
|
|
723150b755 | ||
|
|
d398f903f8 | ||
|
|
44142be28e | ||
|
|
5de5a77902 | ||
|
|
5d1b39ca49 | ||
|
|
d2cce02669 | ||
|
|
05b5a33eee | ||
|
|
8f1884349a | ||
|
|
8ece1a3454 | ||
|
|
3f2cf23f47 | ||
|
|
9268ca51da | ||
|
|
5da29ba148 | ||
|
|
0c64b506c2 | ||
|
|
da5fc417c5 | ||
|
|
186df66e81 | ||
|
|
f52865ce98 | ||
|
|
9ad8d70cf7 | ||
|
|
2765e1c923 | ||
|
|
44e0067e34 | ||
|
|
066e62c0aa | ||
|
|
1a0e84e6d7 | ||
|
|
03510ee1e7 | ||
|
|
cc1b61e522 | ||
|
|
af61d13bb3 | ||
|
|
3038e9309d | ||
|
|
668206af1c | ||
|
|
a0a4e52fca | ||
|
|
3064a13450 | ||
|
|
df1221ba74 | ||
|
|
71ce5c4dcb | ||
|
|
e6e0a4bd7d | ||
|
|
bda3cac24b | ||
|
|
d7522d0dc1 | ||
|
|
ae3688577d | ||
|
|
11077b1042 | ||
|
|
396db36829 | ||
|
|
f8f09a3654 | ||
|
|
7eb6f42bee | ||
|
|
447efc2174 | ||
|
|
b809a577ff | ||
|
|
9d63453130 | ||
|
|
8dd55ae036 | ||
|
|
6250f2ab28 | ||
|
|
59583d48d7 | ||
|
|
b8daf9882b | ||
|
|
587f2754d4 | ||
|
|
b247af7af6 | ||
|
|
15facbc291 | ||
|
|
e919ddb83c | ||
|
|
9dd7d96266 | ||
|
|
7191a9273c | ||
|
|
3aefbf71a9 | ||
|
|
e5d544e583 | ||
|
|
d5a845c3e1 | ||
|
|
cbe1248e0c | ||
|
|
fec23b56eb | ||
|
|
8f3e6d8c77 | ||
|
|
1649e5115d | ||
|
|
509904b7a5 | ||
|
|
8d51b76ca2 | ||
|
|
f5c833882d | ||
|
|
9989e76ef7 | ||
|
|
53e6c69b54 | ||
|
|
9bf7b0184b | ||
|
|
ccec652adc | ||
|
|
23a5ce6874 | ||
|
|
8027d4922b | ||
|
|
6dcafc3129 | ||
|
|
c99935bf2e | ||
|
|
90d5ced632 | ||
|
|
11c9edaf98 | ||
|
|
2ac53142b5 | ||
|
|
95a0b1d77e | ||
|
|
694a68c7f8 | ||
|
|
56b26822a2 | ||
|
|
075904616a | ||
|
|
8e0d3ec4d0 | ||
|
|
ef092bfefb | ||
|
|
b16dce7343 | ||
|
|
cda257a971 | ||
|
|
89dc1c45d7 | ||
|
|
c43cdcd5de | ||
|
|
32d56503fc | ||
|
|
157a04ef76 | ||
|
|
679bf22b74 | ||
|
|
cb97c00611 | ||
|
|
b36262b167 | ||
|
|
54c9279734 | ||
|
|
ee6b45894f | ||
|
|
112adf47be | ||
|
|
ac98f51356 | ||
|
|
139f5cf7b3 | ||
|
|
4dbb58af64 | ||
|
|
8167d7b6ae | ||
|
|
f2aefb1d39 | ||
|
|
167e76897f | ||
|
|
b47f21feaf | ||
|
|
9e2f7981fb | ||
|
|
cf78a30d89 | ||
|
|
61fa82a4fe | ||
|
|
e5347e6ee3 | ||
|
|
1396f960b0 | ||
|
|
6221ee164f | ||
|
|
309d18bebc | ||
|
|
ec22926189 | ||
|
|
084c6d24e2 | ||
|
|
de96aad086 | ||
|
|
f6eae2274f | ||
|
|
c9ee477c08 | ||
|
|
18aef77c4a | ||
|
|
9a78eac0ff | ||
|
|
74f20c2a5d | ||
|
|
9106d1f39b | ||
|
|
1c56fe0f1a | ||
|
|
3dd4e06fbe | ||
|
|
d21e696892 | ||
|
|
a1556212bc | ||
|
|
0eab965933 | ||
|
|
0c82f97880 | ||
|
|
4e6b9dbdb4 | ||
|
|
1ba9526e0b | ||
|
|
568ff4b366 | ||
|
|
16a82a28ae | ||
|
|
2d56f33b60 | ||
|
|
8db39d2e6b | ||
|
|
cd31768b5e | ||
|
|
077ce1b0a7 | ||
|
|
c990aa410e | ||
|
|
6a1848e814 | ||
|
|
ff8c876274 | ||
|
|
2126a4067b | ||
|
|
a9e58df64d | ||
|
|
e038620878 | ||
|
|
4468e5fa06 | ||
|
|
59922480fa | ||
|
|
29a140cb00 | ||
|
|
0843da7a7c | ||
|
|
50edd7dfbe | ||
|
|
37bfb7d936 | ||
|
|
fc349e9865 | ||
|
|
bec8b4d1b2 | ||
|
|
3a48483700 | ||
|
|
363278089d | ||
|
|
7d426fbfa9 | ||
|
|
3f45a0dbc9 | ||
|
|
69d00d1a4d | ||
|
|
92ca904748 | ||
|
|
33034118f2 | ||
|
|
dcd0ec9f29 | ||
|
|
467d53db81 | ||
|
|
f8a890c579 | ||
|
|
881bf08aee | ||
|
|
297767a42b | ||
|
|
f81a88abbf | ||
|
|
f335c882ba | ||
|
|
27ad4b9eb9 | ||
|
|
23f71d1ec8 | ||
|
|
5c120c3fc2 | ||
|
|
db56b74475 | ||
|
|
6576bffa52 | ||
|
|
594de74a88 | ||
|
|
395d58009e | ||
|
|
48adea0d16 | ||
|
|
dce24681e2 | ||
|
|
eecac2b007 | ||
|
|
53d5b6c37f | ||
|
|
6a8196b42c | ||
|
|
9e801f9ced | ||
|
|
4955edf69c | ||
|
|
0ab6cc9b75 | ||
|
|
5f29fe3c4f | ||
|
|
a2ab0a1173 | ||
|
|
d37b9c3c26 | ||
|
|
82dbb39568 | ||
|
|
23f2f96361 | ||
|
|
dfa585467f | ||
|
|
33b914fd4b | ||
|
|
18100867c5 | ||
|
|
d4bd27cb38 | ||
|
|
d4f682dadb | ||
|
|
f8bb7aaf30 | ||
|
|
6b02384fb8 | ||
|
|
65724bcaa7 | ||
|
|
4fa9346652 | ||
|
|
bc1459f107 | ||
|
|
9f11d7ec88 | ||
|
|
369271b29f | ||
|
|
4d34009d32 | ||
|
|
0d2c469ad9 | ||
|
|
a8bf85906a | ||
|
|
99369da128 | ||
|
|
648b3772a1 | ||
|
|
db45bfd07d | ||
|
|
06d88d3fe5 | ||
|
|
177d0a2de3 | ||
|
|
1bc08930be | ||
|
|
cc853a0632 | ||
|
|
3e89b8f781 | ||
|
|
6a928cd83a | ||
|
|
358ec17c61 | ||
|
|
765991b32e | ||
|
|
1c11a22347 | ||
|
|
b74244652e | ||
|
|
b6f76562e2 | ||
|
|
fa2e3f18d6 | ||
|
|
7a5efa938b | ||
|
|
b7b755a79d | ||
|
|
29e562259d | ||
|
|
fa74b2a084 | ||
|
|
f2d2d287f5 | ||
|
|
8d701e46df | ||
|
|
3a17e1f9b2 | ||
|
|
6d0306444d | ||
|
|
02e37eaf88 | ||
|
|
17daf67662 | ||
|
|
1ee3c49011 | ||
|
|
e3af89b001 | ||
|
|
c8f5ac4d25 | ||
|
|
ba841ce1b7 | ||
|
|
5f0258022a | ||
|
|
006ab00f20 | ||
|
|
94bc074f0d | ||
|
|
a99941d7dc | ||
|
|
a763681d2e | ||
|
|
32bc143589 | ||
|
|
b422cac734 | ||
|
|
9f9a7b9c4b | ||
|
|
5416978da5 | ||
|
|
8d6c4ed713 | ||
|
|
1ddce7ac2e | ||
|
|
6d642139d1 | ||
|
|
eb845a1eb7 | ||
|
|
18d11b2c6a | ||
|
|
00bbf4eae2 | ||
|
|
3cf9d39cf2 | ||
|
|
8ee2def02a | ||
|
|
51e9de0e79 | ||
|
|
bd3e886d7e | ||
|
|
37eafa54cc | ||
|
|
ca6e97be65 | ||
|
|
22bcef1310 | ||
|
|
900f307847 | ||
|
|
5602653ba9 | ||
|
|
c209dbd90b | ||
|
|
1c87db1faf | ||
|
|
73cd675dc9 | ||
|
|
dc374df350 | ||
|
|
9485725df5 | ||
|
|
81e59d5fe4 | ||
|
|
bcc9741fbe | ||
|
|
1151572814 | ||
|
|
c648bb71f5 | ||
|
|
be7dbc0e51 | ||
|
|
10a4350cae | ||
|
|
b15f2fc49b | ||
|
|
b793b81e4d | ||
|
|
ac6be74471 | ||
|
|
4103831401 | ||
|
|
7e87b4bed3 | ||
|
|
6fc05cb587 | ||
|
|
eaa9e6d840 | ||
|
|
e5da1905c6 | ||
|
|
864b94f62a | ||
|
|
cac19cad4d | ||
|
|
7b68309301 | ||
|
|
af9cbb47ef | ||
|
|
8bb9ed8a18 | ||
|
|
0813f48fce | ||
|
|
130d079c90 | ||
|
|
caf503faa3 | ||
|
|
ae817daa8e | ||
|
|
86659896da | ||
|
|
70ae6d612c | ||
|
|
cfa2d29a4b | ||
|
|
ca22dfec3a | ||
|
|
bbfecf1b47 | ||
|
|
7f949472f7 | ||
|
|
379c75aab6 | ||
|
|
23481318a2 | ||
|
|
5ceb2ea1c9 | ||
|
|
2af4c94817 | ||
|
|
f6333ba304 | ||
|
|
1d3e29cea2 | ||
|
|
2e462f39f7 | ||
|
|
c5868b7e5a | ||
|
|
2651e81cd3 | ||
|
|
db7a2d8768 | ||
|
|
d0d17d0033 | ||
|
|
3ebfb57527 | ||
|
|
b485dddfa2 | ||
|
|
979d7e3662 | ||
|
|
5de9859a1e | ||
|
|
5b96cc9b0a | ||
|
|
7886682f7c | ||
|
|
f95ba3f61c | ||
|
|
c6cb3190cf | ||
|
|
c8c026af16 | ||
|
|
e9012adaa4 | ||
|
|
e769b70099 | ||
|
|
0bfc7d430b | ||
|
|
8a04fc058d | ||
|
|
288e6eae00 | ||
|
|
84f4a022ed | ||
|
|
76079f24c0 | ||
|
|
0c5d62a0dd | ||
|
|
13d2e91914 | ||
|
|
9f0b2c570e | ||
|
|
1d5d72967a | ||
|
|
ba8bae67ae | ||
|
|
c68de36bce | ||
|
|
6c86fcf6fa | ||
|
|
f594a84664 | ||
|
|
b89e14f78d | ||
|
|
a872d10770 | ||
|
|
390cfa6058 | ||
|
|
613e10a2cf | ||
|
|
4ce23aee6e | ||
|
|
2534e5f668 | ||
|
|
16cc281a22 | ||
|
|
5fdcffc97d | ||
|
|
55abaf0dae | ||
|
|
8ece68a3c7 | ||
|
|
0ff3817c28 | ||
|
|
12d0ec2cf6 | ||
|
|
13fab5ebe4 | ||
|
|
2cc0150bec | ||
|
|
8be7a7e67d | ||
|
|
41ef70c1e4 | ||
|
|
26991b21ce | ||
|
|
3d79f39600 | ||
|
|
be940a32f5 | ||
|
|
fb2d3d6151 | ||
|
|
5180266f01 | ||
|
|
e00e160f35 | ||
|
|
077bd3b538 | ||
|
|
8e8eda1012 | ||
|
|
40e0adfefe | ||
|
|
7ef11cb05f | ||
|
|
d05ed7a26c | ||
|
|
b39befc111 | ||
|
|
d6a81e320b | ||
|
|
4fbbb63712 | ||
|
|
8858287469 | ||
|
|
08bff5d7df | ||
|
|
3cc437a17f | ||
|
|
c71a92302a | ||
|
|
6e5faa8cc1 | ||
|
|
b6db653f41 | ||
|
|
05fcb5397e | ||
|
|
18ae2f121a | ||
|
|
3536b01981 | ||
|
|
0b2bc922bb | ||
|
|
5226ee0343 | ||
|
|
af94f87196 | ||
|
|
743c8172e8 | ||
|
|
0816d14264 | ||
|
|
dde5bcbfe1 | ||
|
|
220e98b2cc | ||
|
|
337424cb96 | ||
|
|
a5c3a2fc79 | ||
|
|
642ad6f6f4 | ||
|
|
f592eb66a3 | ||
|
|
6297314c4a | ||
|
|
37bec05857 | ||
|
|
2b3886617e | ||
|
|
8c93d35ca9 | ||
|
|
f501eea00a | ||
|
|
13f7398761 | ||
|
|
d9c2111961 | ||
|
|
5bf206c933 | ||
|
|
26a0983860 | ||
|
|
c8add882f8 | ||
|
|
77a13d0f2b | ||
|
|
0b63dba86d | ||
|
|
376abd10a7 | ||
|
|
6239486361 | ||
|
|
a949a38bdf | ||
|
|
06f1085b89 | ||
|
|
708b05a9bd | ||
|
|
bc21d78217 | ||
|
|
2217d678e4 | ||
|
|
719922c7db | ||
|
|
6db3d92e2d | ||
|
|
3f65424d99 | ||
|
|
7cfc8f0269 | ||
|
|
bf788d4f6e | ||
|
|
d76b970d85 | ||
|
|
b7ac53b7ea | ||
|
|
a379f2d441 | ||
|
|
5c9cdd0524 | ||
|
|
2e5612697f | ||
|
|
921d3d0894 | ||
|
|
b76b467436 | ||
|
|
290c302352 | ||
|
|
8de8a156b8 | ||
|
|
1953b95732 | ||
|
|
b5b161e0d3 | ||
|
|
f8ead0093d | ||
|
|
a3d27c634e | ||
|
|
00f0b97ccb | ||
|
|
c342b4dd9a | ||
|
|
04b9d47a47 | ||
|
|
7aa7b4b6dd | ||
|
|
4baac981c2 | ||
|
|
c596c2768c | ||
|
|
50e97109b9 | ||
|
|
6970ea1ccc | ||
|
|
22d31661cb | ||
|
|
a61d8bae53 | ||
|
|
4fb542d5ee | ||
|
|
9a021e5687 | ||
|
|
168d302892 | ||
|
|
c98aed68da | ||
|
|
2cb7a5174b | ||
|
|
629d63f5e2 | ||
|
|
2bd894f53f | ||
|
|
63ed05fafb | ||
|
|
935473823a | ||
|
|
89ecbe34ed | ||
|
|
731a6e9587 | ||
|
|
a02454e2b4 | ||
|
|
082c376dde | ||
|
|
98cfc8a748 | ||
|
|
e8e405648f | ||
|
|
432318226e | ||
|
|
77c3385f93 | ||
|
|
36e45ecf68 | ||
|
|
a90096ab3c | ||
|
|
414717cebf | ||
|
|
b50a2125e4 | ||
|
|
e647f8405d | ||
|
|
613b374dcb | ||
|
|
2f28d5b327 | ||
|
|
5400eb0e32 | ||
|
|
34083c1798 | ||
|
|
eeb67d5e57 | ||
|
|
4d22814b95 | ||
|
|
c0fc922597 | ||
|
|
093cd0a050 | ||
|
|
a2caf2e971 | ||
|
|
a5fcf837bb | ||
|
|
0d152fafc7 | ||
|
|
5bba050403 | ||
|
|
b0264db0e6 | ||
|
|
e0497d9481 | ||
|
|
86d4706efc | ||
|
|
cf973847ab | ||
|
|
863fd2bdb5 | ||
|
|
8cbb637690 | ||
|
|
938fd98717 | ||
|
|
3030e0d874 | ||
|
|
88e3eb1d2c | ||
|
|
174214b096 | ||
|
|
aa5bf600ef | ||
|
|
a14f6e1455 | ||
|
|
849b0b2a27 | ||
|
|
b95ff07f61 | ||
|
|
ab3dcff023 | ||
|
|
b257672717 | ||
|
|
59a220ee51 | ||
|
|
ac3784c732 | ||
|
|
fde07c539b | ||
|
|
01c0ea13b9 | ||
|
|
d1fe9ca364 | ||
|
|
69197e6bf7 | ||
|
|
2c092997ba | ||
|
|
fab148d168 | ||
|
|
38af755e56 | ||
|
|
94f30ab40a | ||
|
|
4596a16a8c | ||
|
|
f478b5a688 | ||
|
|
47634f7f4e | ||
|
|
865dd9a2c7 | ||
|
|
4d81af640a | ||
|
|
ffbd3eb38a | ||
|
|
893f063ffa | ||
|
|
d3dccd3a8e | ||
|
|
aeb5e93548 | ||
|
|
998cf86d1a | ||
|
|
4248e6ee89 | ||
|
|
eba2bb33bb | ||
|
|
3d61dad2c7 | ||
|
|
14966a88c2 | ||
|
|
a44ea2c791 | ||
|
|
7ce1b0a6be | ||
|
|
d3d3242e0b | ||
|
|
44b3c6fb51 | ||
|
|
8a374e1963 | ||
|
|
51fdc2d920 | ||
|
|
f919e6eb43 | ||
|
|
0dfd010685 | ||
|
|
558e3ab493 | ||
|
|
105ddf93e0 | ||
|
|
a15be024a6 | ||
|
|
b10cf6e461 | ||
|
|
71d2102c4c | ||
|
|
eece42480a | ||
|
|
0e9de6e1bb | ||
|
|
178e0c4840 | ||
|
|
7232b0e48e | ||
|
|
732528ce85 | ||
|
|
7b71a1cf20 | ||
|
|
f9d45e05a9 | ||
|
|
1eafc96b35 | ||
|
|
7520a21b43 | ||
|
|
0e244c52e9 | ||
|
|
8fb48127fe | ||
|
|
39ff1921ec | ||
|
|
7c470dcd24 | ||
|
|
bd44e24398 | ||
|
|
96b8b8fd07 | ||
|
|
2a461e53b1 | ||
|
|
a1102599d7 | ||
|
|
8c491201df | ||
|
|
9139582ecd | ||
|
|
262f50cdeb | ||
|
|
177b5ea7ac | ||
|
|
7b3144b76a | ||
|
|
118877534d | ||
|
|
4566f2c172 | ||
|
|
62aa4ae53d | ||
|
|
b35b231d1a | ||
|
|
d981265f12 | ||
|
|
145a6636ca | ||
|
|
8192674948 | ||
|
|
1efef1fdcd | ||
|
|
5655568070 | ||
|
|
0ac08df532 | ||
|
|
26f3f320b8 | ||
|
|
cffbfc0f04 | ||
|
|
190769569c | ||
|
|
6c28f0e213 | ||
|
|
77ada220d5 | ||
|
|
a7872d4c33 | ||
|
|
c523711577 | ||
|
|
9a5d5a75ed | ||
|
|
f8a5ce44cf | ||
|
|
49e5e3b66e | ||
|
|
b315d80838 | ||
|
|
cebc8b77bf | ||
|
|
18055ce244 | ||
|
|
bdbb81cbd7 | ||
|
|
3e5eb9cf2d | ||
|
|
338f309f47 | ||
|
|
58d4000359 | ||
|
|
fb7b6ba7e5 | ||
|
|
5956c8cb84 | ||
|
|
75619befef | ||
|
|
1596269848 | ||
|
|
7737cdd4d5 | ||
|
|
4620b93752 | ||
|
|
0d7c5d898d | ||
|
|
a6a2c77416 | ||
|
|
4b4fc84d66 | ||
|
|
4ef725106c | ||
|
|
a1988aa18c | ||
|
|
0fc7c457bf | ||
|
|
16e219a629 | ||
|
|
36cbd21101 | ||
|
|
63ea8500b6 | ||
|
|
0ae4fc1113 | ||
|
|
661275c934 | ||
|
|
e392207c5a | ||
|
|
1529913ae4 | ||
|
|
be35cac6ae | ||
|
|
9c15dbd673 | ||
|
|
1301b37901 | ||
|
|
1fe3bfd0f3 | ||
|
|
c216c6d8ae | ||
|
|
8082eb2dec | ||
|
|
c56ee45397 | ||
|
|
2873856a63 | ||
|
|
49adfc9675 | ||
|
|
476de90ca7 | ||
|
|
5e0834b0c6 | ||
|
|
fcd04032f7 | ||
|
|
27295d69c3 | ||
|
|
e8dab58dec | ||
|
|
0fec47cbff | ||
|
|
3ada2df618 | ||
|
|
b8445347d9 | ||
|
|
844d394b14 | ||
|
|
0a888b0d0e | ||
|
|
e7ed58ea2b | ||
|
|
65241b1038 | ||
|
|
43f561ce11 | ||
|
|
e74d042dcf | ||
|
|
7bab771555 | ||
|
|
fb55312056 | ||
|
|
940c615458 | ||
|
|
e4cfebb044 | ||
|
|
cf443e8531 | ||
|
|
7f8c339c0f | ||
|
|
e78dc083e3 | ||
|
|
df69ebf90e | ||
|
|
f23b87c334 | ||
|
|
73a885a79e | ||
|
|
af544ab7c9 | ||
|
|
45e3aeaed4 | ||
|
|
d7b2272a20 | ||
|
|
9460291eef | ||
|
|
37f86a7622 | ||
|
|
593ebd3d6e | ||
|
|
c9788c31d3 | ||
|
|
21744c6880 | ||
|
|
c6cc92dbdf | ||
|
|
613425855d | ||
|
|
e2ee292e47 | ||
|
|
1f6e7e06da | ||
|
|
e8b3132e18 | ||
|
|
8d6aa28af4 | ||
|
|
1548ef0aa3 | ||
|
|
d1bf893b4f | ||
|
|
2fd2a3a6eb | ||
|
|
3a4103ac60 | ||
|
|
604d85f894 | ||
|
|
86a24ae44b | ||
|
|
4f926b3746 | ||
|
|
abcf7dfc97 | ||
|
|
6464f741e4 | ||
|
|
aab4ee2f30 | ||
|
|
845a2c63c9 | ||
|
|
b380f2d804 | ||
|
|
6a32606762 | ||
|
|
de2ef2033d | ||
|
|
e9d5380eba | ||
|
|
e9e9a69cec | ||
|
|
15b9cecfc6 | ||
|
|
665a8cab31 | ||
|
|
434468ca65 | ||
|
|
44c59f2236 | ||
|
|
81d12ce928 | ||
|
|
dd778d5c3a | ||
|
|
60ef249b5e | ||
|
|
9e687a34cc | ||
|
|
7889c429d9 | ||
|
|
1da3623c03 | ||
|
|
8ed76b4bd7 | ||
|
|
568e1b2923 | ||
|
|
bc92c2e8c4 | ||
|
|
3f63440b93 | ||
|
|
fca433f447 | ||
|
|
b166f2a469 | ||
|
|
0a9537ab07 | ||
|
|
08417f6f41 | ||
|
|
632e62e5e3 | ||
|
|
2146db9600 | ||
|
|
c93fa92c7d | ||
|
|
f594d594d3 | ||
|
|
c2bd6bcce8 | ||
|
|
8d84ccd2cc | ||
|
|
52875fb7fa | ||
|
|
119cf123fe | ||
|
|
b90d61dc15 | ||
|
|
40f35f0809 | ||
|
|
b9a8202762 | ||
|
|
ef17f7ba2c | ||
|
|
81bb511c07 | ||
|
|
400d21cdc5 | ||
|
|
7a31b57667 | ||
|
|
5fdea3ce2b | ||
|
|
e11d9f0e5c | ||
|
|
1cb1ef0fea | ||
|
|
fe5a3f9d5a | ||
|
|
29bb3df160 | ||
|
|
2773bf9888 | ||
|
|
1941cdf9cc | ||
|
|
edfced294a | ||
|
|
836f6dffd0 | ||
|
|
c437f4e2c1 | ||
|
|
6787279542 | ||
|
|
f123a17fcc | ||
|
|
a4ffe4e16c | ||
|
|
a145562535 | ||
|
|
f186441900 | ||
|
|
abdcf40aad | ||
|
|
e172219c2a | ||
|
|
4521711106 | ||
|
|
f81e249a47 | ||
|
|
369aef624f | ||
|
|
3925a92d84 | ||
|
|
27d09aab61 | ||
|
|
bfcdeb069f | ||
|
|
b1b3afa073 | ||
|
|
ef79553121 | ||
|
|
4d4cb59b80 | ||
|
|
20935af299 | ||
|
|
79d1c61494 | ||
|
|
5c40b84c8c | ||
|
|
415791dddd | ||
|
|
a5be15e453 | ||
|
|
9f34b82135 | ||
|
|
3d88ecdeed | ||
|
|
3a35c84b57 | ||
|
|
69310a2b72 | ||
|
|
8a512f6f19 | ||
|
|
8dab02a5e0 | ||
|
|
7217eea23e | ||
|
|
7120bf8d3b | ||
|
|
65718024e5 | ||
|
|
ef3c2b85f7 | ||
|
|
2ca4abcf11 | ||
|
|
07d02f3abe | ||
|
|
1ad2e62287 | ||
|
|
74c8e82e02 | ||
|
|
98062c24ff | ||
|
|
26b1dbd02b | ||
|
|
720e6b8fbd | ||
|
|
52d82b141f | ||
|
|
e6595a5e77 | ||
|
|
a478200549 | ||
|
|
faf79e4331 | ||
|
|
3d28ef1386 | ||
|
|
f188bc0d09 | ||
|
|
e003cd5276 | ||
|
|
e9c965ff7f | ||
|
|
afdfcdd465 | ||
|
|
ae8ccfe3a1 | ||
|
|
1e01f2a749 | ||
|
|
66adfb99b4 | ||
|
|
f59e21d20e | ||
|
|
d54c128ad6 | ||
|
|
689b48af78 | ||
|
|
c41dbf3f4c | ||
|
|
434842c22b | ||
|
|
be65031af4 | ||
|
|
537416190e | ||
|
|
47478f3899 | ||
|
|
d76d1f913a | ||
|
|
4bc78dba1e | ||
|
|
0cca2d5bda | ||
|
|
bc33e6fe66 | ||
|
|
40547088f6 | ||
|
|
ce8ab00a37 | ||
|
|
8fbbd15dbe | ||
|
|
3a805a7fcf | ||
|
|
a2f853fb76 | ||
|
|
8de42c3b25 | ||
|
|
534684a796 | ||
|
|
971f53c7bf | ||
|
|
4abe8ae005 | ||
|
|
55d6414497 | ||
|
|
ed9ccca134 | ||
|
|
1296f0fe23 | ||
|
|
5e2d8ef1e7 | ||
|
|
1a7a41e131 | ||
|
|
10335fbf16 | ||
|
|
f1243e3d5b | ||
|
|
d5214d616c | ||
|
|
5a167b05f0 | ||
|
|
302c09c4cb | ||
|
|
c4fc6856cd | ||
|
|
f1ec28c663 | ||
|
|
2d2f177773 | ||
|
|
2504a03211 | ||
|
|
467d03d0e5 | ||
|
|
d5581eb8b8 | ||
|
|
ca18648917 | ||
|
|
0eada14ea9 | ||
|
|
adaa1592f8 | ||
|
|
5bd0db2257 | ||
|
|
3d462c9948 | ||
|
|
39450d9e89 | ||
|
|
418213dbfc | ||
|
|
83cfe9fdb5 | ||
|
|
dbf7daa17e | ||
|
|
cab159921d | ||
|
|
421765c40d | ||
|
|
e8e5c4f023 | ||
|
|
f69d90276e | ||
|
|
20aaf3a319 | ||
|
|
e693541c88 | ||
|
|
e3ae63eb4a | ||
|
|
b5bf1beffa | ||
|
|
7d8fea286a | ||
|
|
7c4fefe672 | ||
|
|
238fa407d5 | ||
|
|
811218d30c | ||
|
|
46eed584fb | ||
|
|
1a25cccc0b | ||
|
|
2a3ebae4ae | ||
|
|
4acb6304df | ||
|
|
12fabb31f3 | ||
|
|
67d89a2558 | ||
|
|
8253edcf1a | ||
|
|
342242f6e4 | ||
|
|
2a9ebeb8dc | ||
|
|
5b3dccff52 | ||
|
|
24746c8395 | ||
|
|
8df67e8243 | ||
|
|
5df3078125 | ||
|
|
792e9717b2 | ||
|
|
7b0cffcf30 | ||
|
|
3e81a4e3fe | ||
|
|
8c4dbbfb90 | ||
|
|
55a2250efc | ||
|
|
4868fa3655 | ||
|
|
5370cbd7a1 | ||
|
|
5b69890cae | ||
|
|
815f440833 | ||
|
|
79e2b5a70b | ||
|
|
77de32a64f | ||
|
|
02cd3e66d8 | ||
|
|
3503d66773 | ||
|
|
46b902a802 | ||
|
|
fc5e0de386 | ||
|
|
3d480e950a | ||
|
|
998d27bd39 | ||
|
|
9c199161fe | ||
|
|
865fe23a64 | ||
|
|
7a8cd04447 | ||
|
|
340360d024 | ||
|
|
4cbe278bec | ||
|
|
acdc74969e | ||
|
|
95ac9a215c | ||
|
|
d3f6047d3b | ||
|
|
1776cfc3a8 | ||
|
|
c703c48d0f | ||
|
|
3b77fddade | ||
|
|
e83559e971 | ||
|
|
ed243ea56c | ||
|
|
f3fb9d884c | ||
|
|
027e39a081 | ||
|
|
6a6db1a4fc | ||
|
|
3de6687f4e | ||
|
|
c50642dd95 | ||
|
|
283b4f7d00 | ||
|
|
7906ea7c2e | ||
|
|
fa7035510b | ||
|
|
472db24705 | ||
|
|
abeba9384f | ||
|
|
a7c3f50a08 | ||
|
|
b010808618 | ||
|
|
07a4517079 | ||
|
|
b5caa2d6b0 | ||
|
|
175744c545 | ||
|
|
80fe42c741 | ||
|
|
a0aed33b3c | ||
|
|
9b9a17ba65 | ||
|
|
a4731e612e | ||
|
|
bdedb488e4 | ||
|
|
14989d0088 | ||
|
|
7925434603 | ||
|
|
537ae51750 | ||
|
|
4bcf729a80 | ||
|
|
de217eb9db | ||
|
|
16ac951eae | ||
|
|
a634423266 | ||
|
|
c2ce4ab43d | ||
|
|
80c224d43b | ||
|
|
f3921d130a | ||
|
|
63c1c13cd7 | ||
|
|
229ecfc6a2 | ||
|
|
dfd5940d51 | ||
|
|
d3d3a56d58 | ||
|
|
a7001ff6a2 | ||
|
|
a4c583361c | ||
|
|
fec6ff29d7 | ||
|
|
ca1e102949 | ||
|
|
403d914193 | ||
|
|
62520fb7fe | ||
|
|
53c880e9c0 | ||
|
|
badf89c660 | ||
|
|
5d7f916ee9 | ||
|
|
1f291853d6 | ||
|
|
a45ef44d0f | ||
|
|
96239aea0b | ||
|
|
4e7d213f19 | ||
|
|
8bdfb8a814 | ||
|
|
5cd4e0528a | ||
|
|
70a3b6f65a | ||
|
|
3af73b35b8 | ||
|
|
1d640ab9ce | ||
|
|
c2c4c63542 | ||
|
|
4ebd2ba5dc | ||
|
|
60f4ad7716 | ||
|
|
47594b2cd7 | ||
|
|
7911c7473a | ||
|
|
d75aa7e8dc | ||
|
|
b6cd004117 | ||
|
|
4cd901cf8e | ||
|
|
fe4d370f60 | ||
|
|
d774d8bbd0 | ||
|
|
f0103356ba | ||
|
|
dd38d1ca23 | ||
|
|
d6d45fe9cb | ||
|
|
9e24d08ab6 | ||
|
|
f0b9a8df5f | ||
|
|
e8a23f701a | ||
|
|
46e32154d7 | ||
|
|
359da4026f | ||
|
|
76786882ff | ||
|
|
d165dbdca4 | ||
|
|
791e8b02c3 | ||
|
|
53c61fe2d0 | ||
|
|
1eb73eb005 | ||
|
|
96c79a4404 | ||
|
|
26a8dcafce | ||
|
|
bb0575a35d | ||
|
|
99e29a586e | ||
|
|
d1af971d9a | ||
|
|
dc9c586dc8 | ||
|
|
f2486e7470 | ||
|
|
5364e2008c | ||
|
|
9b4b835c08 | ||
|
|
14d9b0dd31 | ||
|
|
51b376add2 | ||
|
|
aad7ddbc04 | ||
|
|
3007f1ba97 | ||
|
|
2b712baa50 | ||
|
|
b02d5b368d | ||
|
|
0e5b321e58 | ||
|
|
100bb00739 | ||
|
|
39c774625d | ||
|
|
49606adcf9 | ||
|
|
6324563acd | ||
|
|
1b5d39afcf | ||
|
|
21740b76e6 | ||
|
|
19e979769d | ||
|
|
0f0bea61d0 | ||
|
|
97ceaf221c | ||
|
|
4d0808efea | ||
|
|
efc287a3b9 | ||
|
|
2daef4e9bc | ||
|
|
6b2b8fd3c2 | ||
|
|
3780dbb2bb | ||
|
|
517fe05567 | ||
|
|
4f279c49c8 | ||
|
|
1ed1078979 | ||
|
|
46075cf317 | ||
|
|
87bdd06037 | ||
|
|
015487b800 | ||
|
|
95f5375288 | ||
|
|
5763bd5628 | ||
|
|
181a7e6f8e | ||
|
|
cac02fc2e8 | ||
|
|
f6315a5b46 | ||
|
|
5caeef134a | ||
|
|
b5dacced35 | ||
|
|
a42387948a | ||
|
|
a76dc6436f | ||
|
|
657900feb6 | ||
|
|
27f36ca508 | ||
|
|
bcb8696384 | ||
|
|
b4e72d56c7 | ||
|
|
8bd6bc4f60 | ||
|
|
0b20c34fb3 | ||
|
|
1cdb367081 | ||
|
|
c879a81a95 | ||
|
|
3c47f8c1a4 | ||
|
|
0f4b97daf8 | ||
|
|
a086cab252 | ||
|
|
11219a0073 | ||
|
|
4a609c81ee | ||
|
|
8d495051d7 | ||
|
|
734b8a2ddb | ||
|
|
a03a7d5ae9 | ||
|
|
e40ec7664e | ||
|
|
b9a0e7f3fa | ||
|
|
1001d4bd9d | ||
|
|
b33d39d475 | ||
|
|
5357402bf1 | ||
|
|
1539321521 | ||
|
|
addc8fc404 | ||
|
|
44c0601414 | ||
|
|
33c7dc29da | ||
|
|
756b0de34b | ||
|
|
b5ee605b30 | ||
|
|
a619ca4e72 | ||
|
|
b1fe39ccb0 | ||
|
|
3b7912e2d5 | ||
|
|
86e29c4579 | ||
|
|
0762ca8e4f | ||
|
|
974edf710c | ||
|
|
1c69656d2c | ||
|
|
bf1575e92b | ||
|
|
93c8ef0259 | ||
|
|
4c5ed4ce86 | ||
|
|
2fdc8e179e | ||
|
|
f5f06dbd3e | ||
|
|
f707da3601 | ||
|
|
e74851b289 | ||
|
|
356eb8a8b5 | ||
|
|
f7b7acc1d5 | ||
|
|
64ff1439b9 | ||
|
|
6147e207a1 | ||
|
|
b534da34ad | ||
|
|
c4f5962c7e | ||
|
|
330d9650c5 | ||
|
|
8e26910343 | ||
|
|
2add3944d3 | ||
|
|
6031ec2578 | ||
|
|
69ff5393ef | ||
|
|
fba0f67181 | ||
|
|
3998bddaca | ||
|
|
4645679d47 | ||
|
|
ead76e2486 | ||
|
|
e4f53b50fd | ||
|
|
931d291e65 | ||
|
|
230df2cec0 | ||
|
|
3a33d0cbc2 | ||
|
|
61911bdd28 | ||
|
|
bed4b87a54 | ||
|
|
3a37b35cee | ||
|
|
df7d568c2e | ||
|
|
d9e5a8224d | ||
|
|
69031f6da5 | ||
|
|
6089c449bf | ||
|
|
469fea321d | ||
|
|
85b7e6ad17 | ||
|
|
b47cbcb925 | ||
|
|
39b5362442 | ||
|
|
b5ba1c4e4f | ||
|
|
0f5790c5e6 | ||
|
|
1b6820664b | ||
|
|
2a872397f6 | ||
|
|
eff9ce8a70 | ||
|
|
a602d2d6a2 | ||
|
|
d878c7add7 | ||
|
|
3023032524 | ||
|
|
903d0cc021 | ||
|
|
11973e02e8 | ||
|
|
0f342270dc | ||
|
|
bc03a2885a | ||
|
|
0020cf7364 | ||
|
|
2af3070449 | ||
|
|
4727da6acf | ||
|
|
688936fd66 | ||
|
|
8c0103f83d | ||
|
|
8628f90592 | ||
|
|
fd90bb6c9b | ||
|
|
581212b8f7 | ||
|
|
351f84c6e6 | ||
|
|
cfbb4863c4 | ||
|
|
394e486ecb | ||
|
|
26459665c6 | ||
|
|
240268c7dd | ||
|
|
3ed0a4d794 | ||
|
|
c12e7821ec | ||
|
|
1388137158 | ||
|
|
3380970f6f | ||
|
|
2f7105f518 | ||
|
|
7c4b9536cd | ||
|
|
3e4995ae84 | ||
|
|
090aeed9f9 | ||
|
|
4a7b2d04c2 | ||
|
|
5556815d46 | ||
|
|
1baa00b4ff | ||
|
|
78d5323345 | ||
|
|
83396dec59 | ||
|
|
7248e65cba |
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"presets": [
|
||||||
|
[
|
||||||
|
"@babel/preset-env",
|
||||||
|
{
|
||||||
|
"useBuiltIns": "usage",
|
||||||
|
"corejs": 3,
|
||||||
|
"modules": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
"lodash"
|
||||||
|
]
|
||||||
|
}
|
||||||
+4
-16
@@ -3,23 +3,20 @@ module.exports = {
|
|||||||
parser: "vue-eslint-parser",
|
parser: "vue-eslint-parser",
|
||||||
"env": {
|
"env": {
|
||||||
"browser": true,
|
"browser": true,
|
||||||
"es2021": true,
|
"es2021": true
|
||||||
'vue/setup-compiler-macros': true
|
|
||||||
},
|
},
|
||||||
ignorePatterns: ['*.test.ts', '.eslintrc.cjs', 'postcss.config.cjs', 'webpack.config.cjs', '*.js'],
|
ignorePatterns: ['*.test.ts', '.eslintrc.cjs', 'postcss.config.cjs', 'webpack.config.cjs', '*.js'],
|
||||||
overrides: [{
|
overrides: [{
|
||||||
files: ['*.ts', '*.tsx', "*.vue"],
|
files: ['*.ts', '*.tsx', "*.vue"],
|
||||||
}],
|
}],
|
||||||
plugins: [
|
plugins: [
|
||||||
"@typescript-eslint",
|
"@typescript-eslint"
|
||||||
"prettier"
|
|
||||||
],
|
],
|
||||||
|
|
||||||
extends: [
|
extends: [
|
||||||
"eslint:recommended",
|
"eslint:recommended",
|
||||||
"plugin:vue/vue3-recommended",
|
"plugin:vue/vue3-essential",
|
||||||
"plugin:@typescript-eslint/recommended",
|
"plugin:@typescript-eslint/recommended"
|
||||||
"prettier",
|
|
||||||
],
|
],
|
||||||
parserOptions: {
|
parserOptions: {
|
||||||
"sourceType": "module",
|
"sourceType": "module",
|
||||||
@@ -30,15 +27,6 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
'@typescript-eslint/no-floating-promises': 'error',
|
'@typescript-eslint/no-floating-promises': 'error',
|
||||||
'vue/script-setup-uses-vars': 'error',
|
|
||||||
'vue/max-attributes-per-line': [
|
|
||||||
'warn',
|
|
||||||
{
|
|
||||||
singleline: 4, //prettier와 싸우지 말자
|
|
||||||
},
|
|
||||||
],
|
|
||||||
'vue/v-on-event-hyphenation': 'off', //vue3에선 필요없다고 생각
|
|
||||||
'vue/attribute-hyphenation': 'off', //vue3에선 필요없다고 생각
|
|
||||||
},
|
},
|
||||||
settings: {
|
settings: {
|
||||||
'import/resolver': {
|
'import/resolver': {
|
||||||
|
|||||||
+1
-9
@@ -10,10 +10,8 @@
|
|||||||
*.log
|
*.log
|
||||||
|
|
||||||
logs/*.txt
|
logs/*.txt
|
||||||
api_log.db
|
|
||||||
d_log/*.txt
|
d_log/*.txt
|
||||||
d_log/*.zip
|
d_log/*.zip
|
||||||
d_log/*.db
|
|
||||||
sess_*
|
sess_*
|
||||||
*/logs/*.txt
|
*/logs/*.txt
|
||||||
*/logs/*/*.txt
|
*/logs/*/*.txt
|
||||||
@@ -29,10 +27,8 @@ d_pic/*.jpg
|
|||||||
d_pic/*.gif
|
d_pic/*.gif
|
||||||
d_pic/*.png
|
d_pic/*.png
|
||||||
d_pic/*.webp
|
d_pic/*.webp
|
||||||
d_pic/*.avif
|
|
||||||
d_pic/uploaded_image
|
d_pic/uploaded_image
|
||||||
|
|
||||||
/dist_js
|
|
||||||
*/dist_misc/*
|
*/dist_misc/*
|
||||||
*/dist_js/*
|
*/dist_js/*
|
||||||
*/dist_css/*
|
*/dist_css/*
|
||||||
@@ -46,7 +42,7 @@ d_setting/*.php
|
|||||||
*/d_setting/templates/*.php
|
*/d_setting/templates/*.php
|
||||||
!*.orig.php
|
!*.orig.php
|
||||||
|
|
||||||
**/data/file_cache
|
*/data/file_cache
|
||||||
|
|
||||||
**/old/*
|
**/old/*
|
||||||
test.*
|
test.*
|
||||||
@@ -68,7 +64,3 @@ ingame/js/*
|
|||||||
ingame/css/*
|
ingame/css/*
|
||||||
gateway/js/*
|
gateway/js/*
|
||||||
gateway/css/*
|
gateway/css/*
|
||||||
|
|
||||||
*.db-journal
|
|
||||||
|
|
||||||
d_log/cachegrind.*
|
|
||||||
+27
-2
@@ -15,8 +15,8 @@ return [
|
|||||||
// Note that the **only** effect of choosing `'5.6'` is to infer
|
// Note that the **only** effect of choosing `'5.6'` is to infer
|
||||||
// that functions removed in php 7.0 exist.
|
// that functions removed in php 7.0 exist.
|
||||||
// (See `backward_compatibility_checks` for additional options)
|
// (See `backward_compatibility_checks` for additional options)
|
||||||
"target_php_version" => '8.2',
|
"target_php_version" => '8.0',
|
||||||
"minimum_target_php_version" => '8.2',
|
'backward_compatibility_checks ' => true,
|
||||||
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
'minimum_severity' => \Phan\Issue::SEVERITY_NORMAL,
|
||||||
|
|
||||||
'file_list' => [
|
'file_list' => [
|
||||||
@@ -28,6 +28,8 @@ return [
|
|||||||
'hwe/_admin1_submit.php',
|
'hwe/_admin1_submit.php',
|
||||||
'hwe/_admin2.php',
|
'hwe/_admin2.php',
|
||||||
'hwe/_admin2_submit.php',
|
'hwe/_admin2_submit.php',
|
||||||
|
'hwe/_admin4.php',
|
||||||
|
'hwe/_admin4_submit.php',
|
||||||
'hwe/_admin5.php',
|
'hwe/_admin5.php',
|
||||||
'hwe/_admin5_submit.php',
|
'hwe/_admin5_submit.php',
|
||||||
'hwe/_admin7.php',
|
'hwe/_admin7.php',
|
||||||
@@ -37,15 +39,21 @@ return [
|
|||||||
'hwe/a_emperior.php',
|
'hwe/a_emperior.php',
|
||||||
'hwe/a_genList.php',
|
'hwe/a_genList.php',
|
||||||
'hwe/a_hallOfFame.php',
|
'hwe/a_hallOfFame.php',
|
||||||
|
'hwe/a_history.php',
|
||||||
'hwe/a_kingdomList.php',
|
'hwe/a_kingdomList.php',
|
||||||
'hwe/a_npcList.php',
|
'hwe/a_npcList.php',
|
||||||
'hwe/api.php',
|
'hwe/api.php',
|
||||||
|
'hwe/a_status.php',
|
||||||
'hwe/a_traffic.php',
|
'hwe/a_traffic.php',
|
||||||
|
'hwe/a_vote.php',
|
||||||
'hwe/battle_simulator.php',
|
'hwe/battle_simulator.php',
|
||||||
|
'hwe/b_auction.php',
|
||||||
|
'hwe/b_battleCenter.php',
|
||||||
'hwe/b_betting.php',
|
'hwe/b_betting.php',
|
||||||
'hwe/v_chiefCenter.php',
|
'hwe/v_chiefCenter.php',
|
||||||
'hwe/b_currentCity.php',
|
'hwe/b_currentCity.php',
|
||||||
'hwe/v_nationStratFinan.php',
|
'hwe/v_nationStratFinan.php',
|
||||||
|
'hwe/b_diplomacy.php',
|
||||||
'hwe/b_genList.php',
|
'hwe/b_genList.php',
|
||||||
'hwe/b_myBossInfo.php',
|
'hwe/b_myBossInfo.php',
|
||||||
'hwe/b_myCityInfo.php',
|
'hwe/b_myCityInfo.php',
|
||||||
@@ -54,7 +62,10 @@ return [
|
|||||||
'hwe/b_myPage.php',
|
'hwe/b_myPage.php',
|
||||||
'hwe/v_processing.php',
|
'hwe/v_processing.php',
|
||||||
'hwe/b_tournament.php',
|
'hwe/b_tournament.php',
|
||||||
|
'hwe/b_troop.php',
|
||||||
|
'hwe/c_auction.php',
|
||||||
'hwe/c_tournament.php',
|
'hwe/c_tournament.php',
|
||||||
|
'hwe/c_vote.php',
|
||||||
'hwe/func_auction.php',
|
'hwe/func_auction.php',
|
||||||
'hwe/func_command.php',
|
'hwe/func_command.php',
|
||||||
'hwe/func_converter.php',
|
'hwe/func_converter.php',
|
||||||
@@ -75,9 +86,11 @@ return [
|
|||||||
'hwe/j_adjust_icon.php',
|
'hwe/j_adjust_icon.php',
|
||||||
'hwe/j_autoreset.php',
|
'hwe/j_autoreset.php',
|
||||||
'hwe/j_basic_info.php',
|
'hwe/j_basic_info.php',
|
||||||
|
'hwe/j_betting.php',
|
||||||
'hwe/j_board_article_add.php',
|
'hwe/j_board_article_add.php',
|
||||||
'hwe/j_board_comment_add.php',
|
'hwe/j_board_comment_add.php',
|
||||||
'hwe/j_board_get_articles.php',
|
'hwe/j_board_get_articles.php',
|
||||||
|
'hwe/j_die_immediately.php',
|
||||||
'hwe/j_diplomacy_destroy_letter.php',
|
'hwe/j_diplomacy_destroy_letter.php',
|
||||||
'hwe/j_diplomacy_get_letter.php',
|
'hwe/j_diplomacy_get_letter.php',
|
||||||
'hwe/j_diplomacy_respond_letter.php',
|
'hwe/j_diplomacy_respond_letter.php',
|
||||||
@@ -88,13 +101,23 @@ return [
|
|||||||
'hwe/j_general_set_permission.php',
|
'hwe/j_general_set_permission.php',
|
||||||
'hwe/j_get_basic_general_list.php',
|
'hwe/j_get_basic_general_list.php',
|
||||||
'hwe/j_get_city_list.php',
|
'hwe/j_get_city_list.php',
|
||||||
|
'hwe/j_get_general_list.php',
|
||||||
|
'hwe/j_get_nation_general_list.php',
|
||||||
'hwe/j_get_select_npc_token.php',
|
'hwe/j_get_select_npc_token.php',
|
||||||
'hwe/j_get_select_pool.php',
|
'hwe/j_get_select_pool.php',
|
||||||
|
'hwe/j_image_upload.php',
|
||||||
'hwe/j_install_db.php',
|
'hwe/j_install_db.php',
|
||||||
'hwe/j_install.php',
|
'hwe/j_install.php',
|
||||||
'hwe/j_load_scenarios.php',
|
'hwe/j_load_scenarios.php',
|
||||||
|
'hwe/j_map_history.php',
|
||||||
'hwe/j_map.php',
|
'hwe/j_map.php',
|
||||||
'hwe/j_map_recent.php',
|
'hwe/j_map_recent.php',
|
||||||
|
'hwe/j_msg_contact_list.php',
|
||||||
|
'hwe/j_msg_decide_opt.php',
|
||||||
|
'hwe/j_msg_delete.php',
|
||||||
|
'hwe/j_msg_get_old.php',
|
||||||
|
'hwe/j_msg_get_recent.php',
|
||||||
|
'hwe/j_msg_submit.php',
|
||||||
'hwe/j_myBossInfo.php',
|
'hwe/j_myBossInfo.php',
|
||||||
'hwe/j_raise_event.php',
|
'hwe/j_raise_event.php',
|
||||||
'hwe/j_select_npc.php',
|
'hwe/j_select_npc.php',
|
||||||
@@ -103,11 +126,13 @@ return [
|
|||||||
'hwe/j_set_my_setting.php',
|
'hwe/j_set_my_setting.php',
|
||||||
'hwe/j_set_npc_control.php',
|
'hwe/j_set_npc_control.php',
|
||||||
'hwe/j_simulate_battle.php',
|
'hwe/j_simulate_battle.php',
|
||||||
|
'hwe/j_troop.php',
|
||||||
'hwe/j_update_picked_general.php',
|
'hwe/j_update_picked_general.php',
|
||||||
'hwe/j_vacation.php',
|
'hwe/j_vacation.php',
|
||||||
'hwe/lib.php',
|
'hwe/lib.php',
|
||||||
'hwe/process_war.php',
|
'hwe/process_war.php',
|
||||||
'hwe/proc.php',
|
'hwe/proc.php',
|
||||||
|
'hwe/readme.php',
|
||||||
'hwe/recent_map.php',
|
'hwe/recent_map.php',
|
||||||
'hwe/select_general_from_pool.php',
|
'hwe/select_general_from_pool.php',
|
||||||
'hwe/select_npc.php',
|
'hwe/select_npc.php',
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
{
|
|
||||||
"tabWidth": 2,
|
|
||||||
"useTabs": false,
|
|
||||||
"printWidth": 120
|
|
||||||
}
|
|
||||||
Vendored
+1
-2
@@ -28,6 +28,5 @@
|
|||||||
"cSpell.words": [
|
"cSpell.words": [
|
||||||
"josa",
|
"josa",
|
||||||
"sammo"
|
"sammo"
|
||||||
],
|
]
|
||||||
"editor.tabSize": 4
|
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,6 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<title>닫혀 있습니다.</title>
|
<title>닫혀 있습니다.</title>
|
||||||
<script>
|
<script>
|
||||||
setTimeout(function(){
|
setTimeout(function(){
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The MIT License
|
The MIT License
|
||||||
|
|
||||||
Copyright (c) 2023 Hide_D, 62che
|
Copyright (c) 2022 Hide_D, 62che
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -42,32 +42,7 @@ sudo -u www-data git clone https://storage.hided.net/gitea/devsam/core.git
|
|||||||
sudo -u www-data git clone https://storage.hided.net/gitea/devsam/image.git
|
sudo -u www-data git clone https://storage.hided.net/gitea/devsam/image.git
|
||||||
```
|
```
|
||||||
|
|
||||||
> 이미지는 Gitea webhook을 기본으로 동기화합니다. Webhook 전달이 누락된 경우에도 서버 설치 과정에서 이미지 갱신 API와 `core` 전용 비밀값을 지정하면 게임 서버 업데이트 명령이 서명된 동기화를 요청합니다. 이미지 서버의 브랜치 변경 권한은 부여되지 않습니다.
|
> 이미지는 hook/git_hook.php을 통해 동기화되며, 서버 설치 과정에 이미지 갱신 키를 지정하는 것으로 '훼' 서버 업데이트 시 동기화됩니다. 이미지 서버가 게임 서버와 별개여도 동작하나, php와 git을 지원해야합니다.
|
||||||
|
|
||||||
CLI에서 수동으로 복구 동기화를 요청할 수도 있습니다.
|
|
||||||
|
|
||||||
```sh
|
|
||||||
IMAGE_SYNC_SECRET_FILE=/run/secrets/image_sync_core_secret \
|
|
||||||
php scripts/sync-image-repository.php
|
|
||||||
```
|
|
||||||
|
|
||||||
Ref의 사용자 아이콘 원격 업로드 구현은 기본적으로 꺼져 있습니다. 이미지 서버의
|
|
||||||
`image_upload_core_secret`과 동일한 값을 Git 제외 파일
|
|
||||||
`d_setting/image_upload_core_secret`에 저장한 뒤 실제
|
|
||||||
`d_setting/ServConfig.php`에서 다음 값만 변경하면 기존 화면을 그대로 둔 채
|
|
||||||
원격 bind 저장소로 전환됩니다.
|
|
||||||
|
|
||||||
```php
|
|
||||||
public static $remoteUserIconUploadEnabled = true;
|
|
||||||
public static $remoteUserIconUploadPath = 'https://sam-image.hided.net';
|
|
||||||
public static $remoteUserIconUploadSecretFile = 'd_setting/image_upload_core_secret';
|
|
||||||
```
|
|
||||||
|
|
||||||
플래그가 `false`이면 기존 `d_pic` 및 `IMGSVR=1` 동작을 유지합니다. `true`이면
|
|
||||||
PHP 서버가 인증 사용자와 이미지 규격을 먼저 검사한 후 60초 HMAC 권한으로
|
|
||||||
이미지 서버에 직접 업로드하고 `IMGSVR=0` 공유 이미지 경로를 저장합니다.
|
|
||||||
국방·외교 등 TipTap 편집기 첨부 이미지도 같은 플래그로 `/uploads/core/` bind
|
|
||||||
저장소로 전환됩니다. 공유 비밀값은 브라우저나 Cloudflare로 보내지 않습니다.
|
|
||||||
|
|
||||||
### 설치
|
### 설치
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,5 @@ require(__DIR__ . '/vendor/autoload.php');
|
|||||||
if (!class_exists('\\sammo\\RootDB')) {
|
if (!class_exists('\\sammo\\RootDB')) {
|
||||||
Json::dieWithReason('No DB');
|
Json::dieWithReason('No DB');
|
||||||
}
|
}
|
||||||
$eParams = $_GET;
|
|
||||||
if(key_exists('path', $eParams)){
|
|
||||||
unset($eParams['path']);
|
|
||||||
}
|
|
||||||
|
|
||||||
APIHelper::launch(dirname(__FILE__), $_GET['path']??'', $eParams, true);
|
APIHelper::launch(dirname(__FILE__), $_GET['path']??null);
|
||||||
+18
-14
@@ -8,25 +8,29 @@
|
|||||||
],
|
],
|
||||||
"config": {
|
"config": {
|
||||||
"platform": {
|
"platform": {
|
||||||
"php": "8.3"
|
"php": "8.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"sergeytsalkov/meekrodb": "^2.5",
|
"brandonwamboldt/utilphp": "^1.1",
|
||||||
"league/plates": "^3.5",
|
"sergeytsalkov/meekrodb": "^2.3",
|
||||||
|
"league/plates": "^3.3",
|
||||||
|
"guzzlehttp/guzzle": "^6.3",
|
||||||
|
"monolog/monolog": "^1.23",
|
||||||
|
"firephp/firephp-core": "^0.4.0",
|
||||||
"vlucas/valitron": "^1.4",
|
"vlucas/valitron": "^1.4",
|
||||||
"php-extended/php-tail": "^5.0",
|
"php-extended/php-tail": "^2.1",
|
||||||
"symfony/lock": "^6.2",
|
"pguardiario/phpuri": "^1.0",
|
||||||
|
"symfony/lock": "^4.1",
|
||||||
"ezyang/htmlpurifier": "^4.10",
|
"ezyang/htmlpurifier": "^4.10",
|
||||||
"xemlock/htmlpurifier-html5": "^0.1.7",
|
"xemlock/htmlpurifier-html5": "^0.1.7",
|
||||||
"catfan/medoo": "^2.1",
|
"catfan/medoo": "^1.5",
|
||||||
"phan/phan": "^5.4",
|
"phan/phan": "*",
|
||||||
"nette/caching": "^3.3",
|
"erusev/parsedown-extra": "^0.8.1",
|
||||||
"illuminate/database": "^10.0",
|
"nette/caching": "^3.0",
|
||||||
"illuminate/events": "^10.0",
|
"illuminate/database": "^8.61",
|
||||||
"php-ds/php-ds": "^1.5",
|
"illuminate/events": "^8.61",
|
||||||
"hided62/ldto": "^1.0",
|
"spatie/data-transfer-object": "^3.7"
|
||||||
"league/uri": "^6.8"
|
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -47,6 +51,6 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "^10.0"
|
"phpunit/phpunit": "^9.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+1962
-1597
File diff suppressed because it is too large
Load Diff
Binary file not shown.
+4
-15
@@ -81,34 +81,23 @@ a.just_link {
|
|||||||
|
|
||||||
button.with_skin {
|
button.with_skin {
|
||||||
padding: 0 4px;
|
padding: 0 4px;
|
||||||
background-color: #191919;
|
background-color: black;
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
border-top-color: gray;
|
|
||||||
border-left-color: gray;
|
|
||||||
border-right-color: black;
|
|
||||||
border-bottom-color: black;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
button.with_skin:disabled {
|
button.with_skin:disabled {
|
||||||
background-color: #333;
|
background-color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
input.with_skin {
|
input.with_skin {
|
||||||
background-color: #191919;
|
background-color: black;
|
||||||
color: white;
|
color: white;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
input.with_skin[type=button], input.with_skin[type=submit]{
|
|
||||||
border-top-color: gray;
|
|
||||||
border-left-color: gray;
|
|
||||||
border-right-color: black;
|
|
||||||
border-bottom-color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
input.with_skin:disabled {
|
input.with_skin:disabled {
|
||||||
background-color: #333;
|
background-color: #333333;
|
||||||
}
|
}
|
||||||
|
|
||||||
.font0 {
|
.font0 {
|
||||||
|
|||||||
+2
-7
@@ -36,21 +36,16 @@ body {
|
|||||||
height: 130px;
|
height: 130px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#user_info .btn {
|
#user_info button {
|
||||||
width: 200px;
|
width: 200px;
|
||||||
|
height: 50px;
|
||||||
margin: 10px 50px;
|
margin: 10px 50px;
|
||||||
padding: 10px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.center_ordered_items {
|
.center_ordered_items {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
.server-action{
|
|
||||||
padding-top: 16px;
|
|
||||||
padding-bottom: 16px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.Entrance_ServerList {
|
.Entrance_ServerList {
|
||||||
width: 800px;
|
width: 800px;
|
||||||
height: 64px;
|
height: 64px;
|
||||||
|
|||||||
+16
-38
@@ -49,7 +49,7 @@ function getFriendlyErrorType($type)
|
|||||||
return "{$type}";
|
return "{$type}";
|
||||||
}
|
}
|
||||||
|
|
||||||
function getExceptionTraceAsString(\Throwable $exception)
|
function getExceptionTraceAsString($exception)
|
||||||
{
|
{
|
||||||
//https://gist.github.com/abtris/1437966
|
//https://gist.github.com/abtris/1437966
|
||||||
$rtn = "";
|
$rtn = "";
|
||||||
@@ -96,13 +96,8 @@ function logError(string $err, string $errstr, string $errpath, array $trace)
|
|||||||
$fdb = FileDB::db(ROOT . '/d_log/err_log.sqlite3', ROOT . '/f_install/sql/err_log.sql');
|
$fdb = FileDB::db(ROOT . '/d_log/err_log.sqlite3', ROOT . '/f_install/sql/err_log.sql');
|
||||||
$date = date("Ymd_His");
|
$date = date("Ymd_His");
|
||||||
|
|
||||||
$err = str_replace(ROOT, '{ROOT}', $err);
|
|
||||||
$errstr = str_replace(ROOT, '{ROOT}', $errstr);
|
|
||||||
$errpath = str_replace(ROOT, '{ROOT}', $errpath);
|
$errpath = str_replace(ROOT, '{ROOT}', $errpath);
|
||||||
$trace = array_map(function (string|array $text) {
|
$trace = array_map(function (string $text) {
|
||||||
if (is_array($text)) {
|
|
||||||
$text = Json::encode($text);
|
|
||||||
}
|
|
||||||
return str_replace(ROOT, '{ROOT}', $text);
|
return str_replace(ROOT, '{ROOT}', $text);
|
||||||
}, $trace);
|
}, $trace);
|
||||||
|
|
||||||
@@ -122,7 +117,7 @@ function logError(string $err, string $errstr, string $errpath, array $trace)
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
function logErrorByCustomHandler(int $errno, string $errstr, string $errfile, int $errline)
|
function logErrorByCustomHandler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext=null)
|
||||||
{
|
{
|
||||||
if (!(error_reporting() & $errno)) {
|
if (!(error_reporting() & $errno)) {
|
||||||
// This error code is not included in error_reporting, so let it fall
|
// This error code is not included in error_reporting, so let it fall
|
||||||
@@ -138,12 +133,11 @@ function logErrorByCustomHandler(int $errno, string $errstr, string $errfile, in
|
|||||||
$errfile . ':' . $errline,
|
$errfile . ':' . $errline,
|
||||||
getExceptionTraceAsString($e)
|
getExceptionTraceAsString($e)
|
||||||
);
|
);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
set_error_handler("\\sammo\\logErrorByCustomHandler");
|
set_error_handler("\\sammo\\logErrorByCustomHandler");
|
||||||
|
|
||||||
|
|
||||||
function logExceptionByCustomHandler(\Throwable $e, bool $withDie = true)
|
function logExceptionByCustomHandler(\Throwable $e)
|
||||||
{
|
{
|
||||||
|
|
||||||
logError(
|
logError(
|
||||||
@@ -153,48 +147,32 @@ function logExceptionByCustomHandler(\Throwable $e, bool $withDie = true)
|
|||||||
getExceptionTraceAsString($e)
|
getExceptionTraceAsString($e)
|
||||||
);
|
);
|
||||||
|
|
||||||
if($withDie){
|
echo $e->getTraceAsString();
|
||||||
echo $e->getTraceAsString();
|
throw $e;
|
||||||
|
|
||||||
throw $e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
set_exception_handler('\\sammo\\logExceptionByCustomHandler');
|
set_exception_handler('\\sammo\\logExceptionByCustomHandler');
|
||||||
|
|
||||||
function checkForFatal()
|
function getAPIExecutorClass($path){
|
||||||
{
|
|
||||||
$error = error_get_last();
|
static $basePath = __NAMESPACE__.'\\API\\';
|
||||||
if($error === null){
|
if(is_string($path)){
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (($error["type"]??0) == E_ERROR) {
|
else if(is_array($path)){
|
||||||
logErrorByCustomHandler($error["type"], $error["message"], $error["file"], $error["line"]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
register_shutdown_function("\\sammo\\checkForFatal");
|
|
||||||
|
|
||||||
function getAPIExecutorClass($path)
|
|
||||||
{
|
|
||||||
|
|
||||||
static $basePath = __NAMESPACE__ . '\\API\\';
|
|
||||||
if (is_string($path)) {
|
|
||||||
} else if (is_array($path)) {
|
|
||||||
$path = join('\\', $path);
|
$path = join('\\', $path);
|
||||||
} else {
|
}
|
||||||
|
else{
|
||||||
throw new \InvalidArgumentException("{$path}는 올바른 API 지시자가 아님");
|
throw new \InvalidArgumentException("{$path}는 올바른 API 지시자가 아님");
|
||||||
}
|
}
|
||||||
|
|
||||||
$classPath = str_replace('/', '\\', $basePath . $path);
|
$classPath = str_replace('/', '\\', $basePath.$path);
|
||||||
|
|
||||||
if (class_exists($classPath)) {
|
if(class_exists($classPath)){
|
||||||
return $classPath;
|
return $classPath;
|
||||||
}
|
}
|
||||||
throw new \InvalidArgumentException("{$path}는 올바른 API 경로가 아님");
|
throw new \InvalidArgumentException("{$path}는 올바른 API 경로가 아님");
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildAPIExecutorClass($type, string $rootPath, array $args): \sammo\BaseAPI
|
function buildAPIExecutorClass($type, string $rootPath, array $args):\sammo\BaseAPI{
|
||||||
{
|
|
||||||
$class = getAPIExecutorClass($type);
|
$class = getAPIExecutorClass($type);
|
||||||
return new $class($rootPath, $args);
|
return new $class($rootPath, $args);
|
||||||
}
|
}
|
||||||
+6
-14
@@ -10,7 +10,6 @@ require(__DIR__ . '/../vendor/autoload.php');
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||||
<title>설치</title>
|
<title>설치</title>
|
||||||
@@ -30,10 +29,10 @@ require(__DIR__ . '/../vendor/autoload.php');
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1 class="row justify-content-lg-center">삼국지 모의전투 HiDCHe 설치</h1>
|
<h1 class="row justify-content-md-center">삼국지 모의전투 HiDCHe 설치</h1>
|
||||||
<div class="row justify-content-lg-center">
|
<div class="row justify-content-md-center">
|
||||||
|
|
||||||
<div class="col col-12 col-lg-10 col-lg-7">
|
<div class="col col-12 col-md-10 col-lg-7">
|
||||||
<div class="card" id="db_form_card" style="display:none">
|
<div class="card" id="db_form_card" style="display:none">
|
||||||
<h3 class="card-header">
|
<h3 class="card-header">
|
||||||
설치(DB 설정)
|
설치(DB 설정)
|
||||||
@@ -86,28 +85,21 @@ require(__DIR__ . '/../vendor/autoload.php');
|
|||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="shared_icon_path" class="col-sm-4 col-form-label">공용 아이콘 주소</label>
|
<label for="shared_icon_path" class="col-sm-4 col-form-label">공용 아이콘 주소</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="shared_icon_path" id="shared_icon_path" placeholder="공용 아이콘 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="https://sam-image.hided.net/icons" />
|
<input type="text" class="form-control" name="shared_icon_path" id="shared_icon_path" placeholder="공용 아이콘 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="../image/icons" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="game_image_path" class="col-sm-4 col-form-label">게임 이미지 주소</label>
|
<label for="game_image_path" class="col-sm-4 col-form-label">게임 이미지 주소</label>
|
||||||
<div class="col-sm-8">
|
<div class="col-sm-8">
|
||||||
<input type="text" class="form-control" name="game_image_path" id="game_image_path" placeholder="게임 이미지 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="https://sam-image.hided.net/game" />
|
<input type="text" class="form-control" name="game_image_path" id="game_image_path" placeholder="게임 이미지 주소(웹 주소, 또는 접속 경로에 따른 상대 주소)" value="../image/game" />
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group row">
|
|
||||||
<label for="image_request_path" class="col-sm-4 col-form-label">이미지 갱신 API</label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input type="url" class="form-control" name="image_request_path" id="image_request_path" value="https://sam-image.hided.net/v1/sync" required />
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group row">
|
<div class="form-group row">
|
||||||
<label for="image_request_key" class="col-sm-4 col-form-label">이미지 갱신 키</label>
|
<label for="image_request_key" class="col-sm-4 col-form-label">이미지 갱신 키</label>
|
||||||
<div class="input-group col-sm-8">
|
<div class="input-group col-sm-8">
|
||||||
<input type="text" class="form-control" name="image_request_key" id="image_request_key" placeholder="이미지 서버의 core 동기화 비밀값과 동일하게" value="" />
|
<input type="text" class="form-control" name="image_request_key" id="image_request_key" placeholder="이미지 서버의 hook/HashKey.php의 값과 동일하게" value="" />
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<button id="btn_random_generate_key" class="btn btn-secondary" type="button">랜덤 생성</button>
|
<button id="btn_random_generate_key" class="btn btn-secondary" type="button">랜덤 생성</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ $rootDB->insert('member', [
|
|||||||
'token_valid_until' => '2999-01-01 00:00:00',
|
'token_valid_until' => '2999-01-01 00:00:00',
|
||||||
'pw' => $finalPassword,
|
'pw' => $finalPassword,
|
||||||
'salt' => $userSalt,
|
'salt' => $userSalt,
|
||||||
'grade' => 7,
|
'grade' => 6,
|
||||||
'name' => $nickname,
|
'name' => $nickname,
|
||||||
'reg_date' => $nowDate
|
'reg_date' => $nowDate
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -17,11 +17,18 @@ if (!class_exists('\\sammo\\RootDB')) {
|
|||||||
|
|
||||||
$rootDB = RootDB::db();
|
$rootDB = RootDB::db();
|
||||||
|
|
||||||
$rootDB->addHook('run_failed', function ($params) {
|
$rootDB->throw_exception_on_nonsql_error = false;
|
||||||
|
$rootDB->nonsql_error_handler = function ($params) {
|
||||||
|
Json::die([
|
||||||
|
'step' => 'conn_fail'
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
|
$rootDB->error_handler = function ($params) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'step' => 'sql_fail'
|
'step' => 'sql_fail'
|
||||||
]);
|
]);
|
||||||
});
|
};
|
||||||
|
|
||||||
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
$memberCnt = $rootDB->queryFirstField('SELECT count(`NO`) from member');
|
||||||
if ($memberCnt == 0) {
|
if ($memberCnt == 0) {
|
||||||
|
|||||||
+22
-28
@@ -12,14 +12,13 @@ $dbName = Util::getPost('db_name');
|
|||||||
$servHost = Util::getPost('serv_host');
|
$servHost = Util::getPost('serv_host');
|
||||||
$sharedIconPath = Util::getPost('shared_icon_path');
|
$sharedIconPath = Util::getPost('shared_icon_path');
|
||||||
$gameImagePath = Util::getPost('game_image_path');
|
$gameImagePath = Util::getPost('game_image_path');
|
||||||
$imageRequestPath = Util::getPost('image_request_path');
|
|
||||||
$imageRequestKey = Util::getPost('image_request_key');
|
$imageRequestKey = Util::getPost('image_request_key');
|
||||||
|
|
||||||
$kakaoRESTKey = Util::getPost('kakao_rest_key', 'string', '');
|
$kakaoRESTKey = Util::getPost('kakao_rest_key', 'string', '');
|
||||||
$kakaoAdminKey = Util::getPost('kakao_admin_key', 'string', '');
|
$kakaoAdminKey = Util::getPost('kakao_admin_key', 'string', '');
|
||||||
|
|
||||||
|
|
||||||
if (!$host || !$port || !$username || !$password || !$dbName || !$servHost || !$sharedIconPath || !$gameImagePath || !$imageRequestPath) {
|
if (!$host || !$port || !$username || !$password || !$dbName || !$servHost || !$sharedIconPath || !$gameImagePath) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result' => false,
|
'result' => false,
|
||||||
'reason' => '입력 값이 올바르지 않습니다'
|
'reason' => '입력 값이 올바르지 않습니다'
|
||||||
@@ -33,21 +32,6 @@ if (!filter_var($servHost, FILTER_VALIDATE_URL)) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filter_var($imageRequestPath, FILTER_VALIDATE_URL)
|
|
||||||
|| parse_url($imageRequestPath, PHP_URL_SCHEME) !== 'https') {
|
|
||||||
Json::die([
|
|
||||||
'result' => false,
|
|
||||||
'reason' => '이미지 갱신 API는 HTTPS URL이어야 합니다.'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($imageRequestKey !== null && $imageRequestKey !== '' && strlen($imageRequestKey) < 32) {
|
|
||||||
Json::die([
|
|
||||||
'result' => false,
|
|
||||||
'reason' => '이미지 동기화 비밀값은 32자 이상이어야 합니다.'
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (file_exists(ROOT . '/d_setting/RootDB.php') && is_dir(ROOT . '/d_setting/RootDB.php')) {
|
if (file_exists(ROOT . '/d_setting/RootDB.php') && is_dir(ROOT . '/d_setting/RootDB.php')) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result' => false,
|
'result' => false,
|
||||||
@@ -106,19 +90,19 @@ if (
|
|||||||
|
|
||||||
//기본 파일 생성
|
//기본 파일 생성
|
||||||
if (!file_exists(AppConf::getUserIconPathFS())) {
|
if (!file_exists(AppConf::getUserIconPathFS())) {
|
||||||
mkdir(AppConf::getUserIconPathFS(), 0775);
|
mkdir(AppConf::getUserIconPathFS());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_exists(ROOT . '/d_log')) {
|
if (!file_exists(ROOT . '/d_log')) {
|
||||||
mkdir(ROOT . '/d_log', 0775);
|
mkdir(ROOT . '/d_log');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_exists(ROOT . '/d_setting')) {
|
if (!file_exists(ROOT . '/d_setting')) {
|
||||||
mkdir(ROOT . '/d_setting', 0775);
|
mkdir(ROOT . '/d_setting');
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!file_exists(ROOT . '/d_shared')) {
|
if (!file_exists(ROOT . '/d_shared')) {
|
||||||
mkdir(ROOT . '/d_shared', 0775);
|
mkdir(ROOT . '/d_shared');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,12 +150,20 @@ if (!file_exists(ROOT . '/d_setting/.htaccess')) {
|
|||||||
$rootDB = new \MeekroDB($host, $username, $password, $dbName, $port, 'utf8mb4');
|
$rootDB = new \MeekroDB($host, $username, $password, $dbName, $port, 'utf8mb4');
|
||||||
$rootDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
$rootDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
||||||
|
|
||||||
$rootDB->addHook('run_failed', function ($args) {
|
$rootDB->throw_exception_on_nonsql_error = false;
|
||||||
|
$rootDB->nonsql_error_handler = function ($params) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result' => false,
|
'result' => false,
|
||||||
'reason' => '에러.'. $args['error']
|
'reason' => 'DB 접속에 실패했습니다.'
|
||||||
]);
|
]);
|
||||||
});
|
};
|
||||||
|
|
||||||
|
$rootDB->error_handler = function ($params) {
|
||||||
|
Json::die([
|
||||||
|
'result' => false,
|
||||||
|
'reason' => 'SQL을 제대로 실행하지 못했습니다. DB상태를 확인해 주세요.'
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
|
||||||
$mysqli_obj = $rootDB->get(); //로그인에 실패할 경우 자동으로 dbConnFail()이 실행됨.
|
$mysqli_obj = $rootDB->get(); //로그인에 실패할 경우 자동으로 dbConnFail()이 실행됨.
|
||||||
|
|
||||||
@@ -201,7 +193,8 @@ $globalSalt = bin2hex(random_bytes(16));
|
|||||||
|
|
||||||
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
$sharedIconPath = WebUtil::resolveRelativePath($sharedIconPath, $servHost);
|
||||||
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
$gameImagePath = WebUtil::resolveRelativePath($gameImagePath, $servHost);
|
||||||
$imageRequestPath = WebUtil::resolveRelativePath($imageRequestPath, $servHost);
|
$imageRequestPath = WebUtil::resolveRelativePath($gameImagePath . '/../hook/git_pull.php', $servHost);
|
||||||
|
$imageKeyInstallPath = WebUtil::resolveRelativePath($gameImagePath . '/../hook/InstallKey.php', $servHost);
|
||||||
|
|
||||||
$result = Util::generateFileUsingSimpleTemplate(
|
$result = Util::generateFileUsingSimpleTemplate(
|
||||||
__DIR__ . '/templates/ServConfig.orig.php',
|
__DIR__ . '/templates/ServConfig.orig.php',
|
||||||
@@ -212,9 +205,6 @@ $result = Util::generateFileUsingSimpleTemplate(
|
|||||||
'gameImagePath' => $gameImagePath,
|
'gameImagePath' => $gameImagePath,
|
||||||
'imageRequestPath' => $imageRequestPath,
|
'imageRequestPath' => $imageRequestPath,
|
||||||
'imageRequestKey' => $imageRequestKey,
|
'imageRequestKey' => $imageRequestKey,
|
||||||
'remoteUserIconUploadEnabled' => 'false',
|
|
||||||
'remoteUserIconUploadPath' => 'https://sam-image.hided.net',
|
|
||||||
'remoteUserIconUploadSecretFile' => 'd_setting/image_upload_core_secret',
|
|
||||||
'serverList' => [
|
'serverList' => [
|
||||||
['che', '체', 'white'],
|
['che', '체', 'white'],
|
||||||
['kwe', '퀘', 'yellow'],
|
['kwe', '퀘', 'yellow'],
|
||||||
@@ -227,6 +217,10 @@ $result = Util::generateFileUsingSimpleTemplate(
|
|||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if ($imageRequestKey) {
|
||||||
|
@file_get_contents($imageKeyInstallPath . '?key=' . $imageRequestKey);
|
||||||
|
}
|
||||||
|
|
||||||
if ($result !== true) {
|
if ($result !== true) {
|
||||||
Json::die([
|
Json::die([
|
||||||
'result' => false,
|
'result' => false,
|
||||||
|
|||||||
@@ -33,12 +33,7 @@ if ($servHost) {
|
|||||||
[
|
[
|
||||||
'serverBasePath' => $servHost,
|
'serverBasePath' => $servHost,
|
||||||
'sharedIconPath' => $sharedIconPath,
|
'sharedIconPath' => $sharedIconPath,
|
||||||
'gameImagePath' => $gameImagePath,
|
'gameImagePath' => $gameImagePath
|
||||||
'imageRequestPath' => ServConfig::$imageRequestPath,
|
|
||||||
'imageRequestKey' => ServConfig::$imageRequestKey,
|
|
||||||
'remoteUserIconUploadEnabled' => ServConfig::$remoteUserIconUploadEnabled ? 'true' : 'false',
|
|
||||||
'remoteUserIconUploadPath' => ServConfig::$remoteUserIconUploadPath,
|
|
||||||
'remoteUserIconUploadSecretFile' => ServConfig::$remoteUserIconUploadSecretFile
|
|
||||||
],
|
],
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
@@ -69,12 +64,7 @@ if ($servHost) {
|
|||||||
[
|
[
|
||||||
'serverBasePath' => $servHost,
|
'serverBasePath' => $servHost,
|
||||||
'sharedIconPath' => $sharedIconPath,
|
'sharedIconPath' => $sharedIconPath,
|
||||||
'gameImagePath' => $gameImagePath,
|
'gameImagePath' => $gameImagePath
|
||||||
'imageRequestPath' => ServConfig::$imageRequestPath,
|
|
||||||
'imageRequestKey' => ServConfig::$imageRequestKey,
|
|
||||||
'remoteUserIconUploadEnabled' => ServConfig::$remoteUserIconUploadEnabled ? 'true' : 'false',
|
|
||||||
'remoteUserIconUploadPath' => ServConfig::$remoteUserIconUploadPath,
|
|
||||||
'remoteUserIconUploadSecretFile' => ServConfig::$remoteUserIconUploadSecretFile
|
|
||||||
],
|
],
|
||||||
true
|
true
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
CREATE TABLE IF NOT EXISTS "api_log" (
|
|
||||||
"id" INTEGER NOT NULL,
|
|
||||||
"user_id" INTEGER NOT NULL,
|
|
||||||
"ip" TEXT NOT NULL,
|
|
||||||
"date" TEXT NOT NULL,
|
|
||||||
"path" TEXT NOT NULL,
|
|
||||||
"arg" TEXT,
|
|
||||||
"aux" TEXT,
|
|
||||||
PRIMARY KEY("id" AUTOINCREMENT)
|
|
||||||
);
|
|
||||||
CREATE INDEX IF NOT EXISTS "by_date" ON "api_log" (
|
|
||||||
"date" DESC
|
|
||||||
);
|
|
||||||
CREATE INDEX IF NOT EXISTS "by_user" ON "api_log" (
|
|
||||||
"user_id" ASC,
|
|
||||||
"date" DESC
|
|
||||||
);
|
|
||||||
@@ -31,8 +31,8 @@ CREATE TABLE `member` (
|
|||||||
`NAME` VARCHAR(64) NOT NULL,
|
`NAME` VARCHAR(64) NOT NULL,
|
||||||
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
`PICTURE` VARCHAR(64) NULL DEFAULT 'default.jpg',
|
||||||
`IMGSVR` INT(1) NULL DEFAULT '0',
|
`IMGSVR` INT(1) NULL DEFAULT '0',
|
||||||
`acl` TEXT NOT NULL DEFAULT '{}' COLLATE 'utf8mb4_bin',
|
`acl` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||||
`penalty` TEXT NOT NULL DEFAULT '{}' COLLATE 'utf8mb4_bin',
|
`penalty` TEXT NOT NULL DEFAULT '{}' COMMENT 'json',
|
||||||
`GRADE` INT(1) NULL DEFAULT '1',
|
`GRADE` INT(1) NULL DEFAULT '1',
|
||||||
`REG_NUM` INT(3) NULL DEFAULT '0',
|
`REG_NUM` INT(3) NULL DEFAULT '0',
|
||||||
`REG_DATE` DATETIME NOT NULL,
|
`REG_DATE` DATETIME NOT NULL,
|
||||||
@@ -43,12 +43,9 @@ CREATE TABLE `member` (
|
|||||||
UNIQUE INDEX `ID` (`ID`),
|
UNIQUE INDEX `ID` (`ID`),
|
||||||
UNIQUE INDEX `EMAIL` (`EMAIL`),
|
UNIQUE INDEX `EMAIL` (`EMAIL`),
|
||||||
UNIQUE INDEX `kauth_id` (`oauth_id`),
|
UNIQUE INDEX `kauth_id` (`oauth_id`),
|
||||||
INDEX `delete_after` (`delete_after`),
|
INDEX `delete_after` (`delete_after`)
|
||||||
CONSTRAINT `json1` CHECK (json_valid(`acl`)),
|
|
||||||
CONSTRAINT `json2` CHECK (json_valid(`penalty`))
|
|
||||||
)
|
)
|
||||||
COLLATE='utf8mb4_general_ci'
|
ENGINE=Aria DEFAULT CHARSET=utf8mb4;
|
||||||
ENGINE=Aria;
|
|
||||||
|
|
||||||
-- 로그인 로그 테이블
|
-- 로그인 로그 테이블
|
||||||
CREATE TABLE `member_log` (
|
CREATE TABLE `member_log` (
|
||||||
@@ -56,14 +53,12 @@ CREATE TABLE `member_log` (
|
|||||||
`member_no` INT(11) NOT NULL,
|
`member_no` INT(11) NOT NULL,
|
||||||
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
`date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
`action_type` ENUM('reg','try_login','login','logout','oauth','change_pw','make_general','access_server','delete') NOT NULL,
|
`action_type` ENUM('reg','try_login','login','logout','oauth','change_pw','make_general','access_server','delete') NOT NULL,
|
||||||
`action` TEXT NULL DEFAULT NULL COLLATE 'utf8mb4_bin',
|
`action` TEXT NULL DEFAULT NULL COMMENT 'JSON',
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
INDEX `action` (`member_no`, `action_type`, `date`),
|
INDEX `action` (`member_no`, `action_type`, `date`),
|
||||||
INDEX `member` (`member_no`, `date`),
|
INDEX `member` (`member_no`, `date`)
|
||||||
CONSTRAINT `json` CHECK (json_valid(`action`))
|
|
||||||
)
|
)
|
||||||
COLLATE='utf8mb4_general_ci'
|
ENGINE=Aria DEFAULT CHARSET=utf8mb4;
|
||||||
ENGINE=Aria;
|
|
||||||
|
|
||||||
###################
|
###################
|
||||||
# KV storage
|
# KV storage
|
||||||
@@ -74,10 +69,9 @@ CREATE TABLE if not exists `storage` (
|
|||||||
`key` VARCHAR(40) NOT NULL,
|
`key` VARCHAR(40) NOT NULL,
|
||||||
`value` TEXT NOT NULL,
|
`value` TEXT NOT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE INDEX `key` (`namespace`, `key`),
|
UNIQUE INDEX `key` (`namespace`, `key`)
|
||||||
CONSTRAINT `json` CHECK (json_valid(`value`))
|
|
||||||
)
|
)
|
||||||
COLLATE='utf8mb4_bin'
|
COLLATE='utf8mb4_general_ci'
|
||||||
ENGINE=Aria;
|
ENGINE=Aria;
|
||||||
|
|
||||||
CREATE TABLE `login_token` (
|
CREATE TABLE `login_token` (
|
||||||
@@ -92,14 +86,5 @@ CREATE TABLE `login_token` (
|
|||||||
INDEX `by_date` (`user_id`, `expire_date`)
|
INDEX `by_date` (`user_id`, `expire_date`)
|
||||||
)
|
)
|
||||||
COLLATE='utf8mb4_general_ci'
|
COLLATE='utf8mb4_general_ci'
|
||||||
ENGINE=Aria;
|
ENGINE=Aria
|
||||||
|
;
|
||||||
CREATE TABLE `banned_member` (
|
|
||||||
`no` INT NOT NULL AUTO_INCREMENT,
|
|
||||||
`hashed_email` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_general_ci' COMMENT 'SHA512(salt | email | salt )',
|
|
||||||
`info` TEXT NULL COLLATE 'utf8mb4_general_ci' COMMENT '부가정보',
|
|
||||||
PRIMARY KEY (`no`),
|
|
||||||
UNIQUE INDEX `email` (`hashed_email`(128))
|
|
||||||
)
|
|
||||||
COLLATE='utf8mb4_general_ci'
|
|
||||||
ENGINE = Aria;
|
|
||||||
@@ -61,6 +61,11 @@ class RootDB
|
|||||||
if (self::$uDB === null) {
|
if (self::$uDB === null) {
|
||||||
self::$uDB = new \MeekroDB(self::$host, self::$user, self::$password, self::$dbName, self::$port, self::$encoding);
|
self::$uDB = new \MeekroDB(self::$host, self::$user, self::$password, self::$dbName, self::$port, self::$encoding);
|
||||||
self::$uDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
self::$uDB->connect_options[MYSQLI_OPT_INT_AND_FLOAT_NATIVE] = true;
|
||||||
|
|
||||||
|
self::$uDB->error_handler = function () {
|
||||||
|
};
|
||||||
|
self::$uDB->throw_exception_on_error = true;
|
||||||
|
self::$uDB->throw_exception_on_nonsql_error = true;
|
||||||
}
|
}
|
||||||
return self::$uDB;
|
return self::$uDB;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,6 @@ class ServConfig
|
|||||||
public static $gameImagePath = "_tK_gameImagePath_";
|
public static $gameImagePath = "_tK_gameImagePath_";
|
||||||
public static $imageRequestPath = "_tK_imageRequestPath_";
|
public static $imageRequestPath = "_tK_imageRequestPath_";
|
||||||
public static $imageRequestKey = '_tK_imageRequestKey_';
|
public static $imageRequestKey = '_tK_imageRequestKey_';
|
||||||
public static $remoteUserIconUploadEnabled = _tK_remoteUserIconUploadEnabled_;
|
|
||||||
public static $remoteUserIconUploadPath = '_tK_remoteUserIconUploadPath_';
|
|
||||||
public static $remoteUserIconUploadSecretFile = '_tK_remoteUserIconUploadSecretFile_';
|
|
||||||
private static $serverList = null;
|
private static $serverList = null;
|
||||||
|
|
||||||
public static function getSharedIconPath(string $filepath = ''): string
|
public static function getSharedIconPath(string $filepath = ''): string
|
||||||
@@ -41,33 +38,9 @@ class ServConfig
|
|||||||
|
|
||||||
public static function getImagePullURI(): string
|
public static function getImagePullURI(): string
|
||||||
{
|
{
|
||||||
return static::$imageRequestPath;
|
$now = time();
|
||||||
}
|
$req_hash = Util::hashPassword(sprintf("%016x", $now), static::$imageRequestKey);
|
||||||
|
return static::$imageRequestPath . "?req={$req_hash}&time={$now}";
|
||||||
public static function isRemoteUserIconUploadEnabled(): bool
|
|
||||||
{
|
|
||||||
return static::$remoteUserIconUploadEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getRemoteUserIconUploadURI(string $filename): string
|
|
||||||
{
|
|
||||||
return rtrim(static::$remoteUserIconUploadPath, '/') . '/v1/uploads/user-icons/core/' . $filename;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getRemoteUserIconUploadSecret(): string
|
|
||||||
{
|
|
||||||
$path = static::$remoteUserIconUploadSecretFile;
|
|
||||||
if ($path === '' || str_contains($path, "\0")) {
|
|
||||||
throw new \RuntimeException('Remote user icon upload secret file is not configured');
|
|
||||||
}
|
|
||||||
if ($path[0] !== '/') {
|
|
||||||
$path = ROOT . '/' . $path;
|
|
||||||
}
|
|
||||||
$secret = trim((string)file_get_contents($path));
|
|
||||||
if (strlen($secret) < 32) {
|
|
||||||
throw new \RuntimeException('Remote user icon upload secret must be at least 32 characters');
|
|
||||||
}
|
|
||||||
return $secret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -165,61 +165,3 @@
|
|||||||
background: url('_tK_gameImagePath_/map/pokemon_v1/back_pal8.png') no-repeat;
|
background: url('_tK_gameImagePath_/map/pokemon_v1/back_pal8.png') no-repeat;
|
||||||
background-size: 700px 500px;
|
background-size: 700px 500px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*CR 지도*/
|
|
||||||
.map_theme_cr .map_bglayer1{
|
|
||||||
background: url('_tK_gameImagePath_/map/cr/bg-fs8.png') no-repeat;
|
|
||||||
background-size: 700px 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_cr.map_detail .city_base .city_bg {
|
|
||||||
background-image: none !important;
|
|
||||||
width: 39.5px !important;
|
|
||||||
height: 39.5px !important;
|
|
||||||
left: 1px !important;
|
|
||||||
top: -4px !important;
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_cr.map_detail.small_width_map .city_base .city_bg {
|
|
||||||
background-image: none !important;
|
|
||||||
width: 28.5px !important;
|
|
||||||
height: 28.5px !important;
|
|
||||||
left: 6px !important;
|
|
||||||
top: 4px !important;
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFF0000 { background-color: #FF0000; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b800000 { background-color: #800000; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bA0522D { background-color: #A0522D; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFF6347 { background-color: #FF6347; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFA500 { background-color: #FFA500; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFDAB9 { background-color: #FFDAB9; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFD700 { background-color: #FFD700; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFFF00 { background-color: #FFFF00; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b7CFC00 { background-color: #7CFC00; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b00FF00 { background-color: #00FF00; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b808000 { background-color: #808000; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b008000 { background-color: #008000; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b2E8B57 { background-color: #2E8B57; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b008080 { background-color: #008080; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b20B2AA { background-color: #20B2AA; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b6495ED { background-color: #6495ED; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b7FFFD4 { background-color: #7FFFD4; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bAFEEEE { background-color: #AFEEEE; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b87CEEB { background-color: #87CEEB; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b00FFFF { background-color: #00FFFF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b00BFFF { background-color: #00BFFF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b0000FF { background-color: #0000FF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b000080 { background-color: #000080; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b483D8B { background-color: #483D8B; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b7B68EE { background-color: #7B68EE; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bBA55D3 { background-color: #BA55D3; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.b800080 { background-color: #800080; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFF00FF { background-color: #FF00FF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFC0CB { background-color: #FFC0CB; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bF5F5DC { background-color: #F5F5DC; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bE0FFFF { background-color: #E0FFFF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bFFFFFF { background-color: #FFFFFF; }
|
|
||||||
.map_theme_cr.map_detail .city_bg.bA9A9A9 { background-color: #A9A9A9; }
|
|
||||||
|
|||||||
+3
-7
@@ -13,18 +13,14 @@ $db = DB::db();
|
|||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
[$turntime, $tnmt_time] = $gameStor->getValuesAsArray(['turntime','tnmt_time']);
|
[$turntime, $tnmt_time] = $gameStor->getValuesAsArray(['turntime','tnmt_time']);
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
|
||||||
$turntimeDisplay = $clock->formatTick(Util::toInt($turntime), true);
|
|
||||||
$tnmtTimeDisplay = $tnmt_time === null ? '-' : $clock->formatTick(Util::toInt($tnmt_time), true);
|
|
||||||
|
|
||||||
$plock = $db->queryFirstField('SELECT plock FROM plock WHERE `type` ="GAME"');
|
$plock = $db->queryFirstField('SELECT plock FROM plock');
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>삼국지 모의전투 HiDCHe</title>
|
<title>삼국지 모의전투 HiDCHe</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
@@ -33,8 +29,8 @@ $plock = $db->queryFirstField('SELECT plock FROM plock WHERE `type` ="GAME"');
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<form action=_119_b.php method=post>
|
<form action=_119_b.php method=post>
|
||||||
시간조정 : <input type=text size=3 name=minute><input type=submit name=btn value='분당김'><input type=submit name=btn value='분지연'> 최종갱신 : <?=$turntimeDisplay?> (tick <?=$turntime?>)<br>
|
시간조정 : <input type=text size=3 name=minute><input type=submit name=btn value='분당김'><input type=submit name=btn value='분지연'> 최종갱신 : <?=$turntime?><br>
|
||||||
시간조정 : <input type=text size=3 name=minute2><input type=submit name=btn value='토너분당김'><input type=submit name=btn value='토너분지연'> 토너먼트 : <?=$tnmtTimeDisplay?> (tick <?=$tnmt_time?>)<br>
|
시간조정 : <input type=text size=3 name=minute2><input type=submit name=btn value='토너분당김'><input type=submit name=btn value='토너분지연'> 토너먼트 : <?=$tnmt_time?><br>
|
||||||
봉급지급 : <input type=submit name=btn value='금지급'><input type=submit name=btn value='쌀지급'><br>
|
봉급지급 : <input type=submit name=btn value='금지급'><input type=submit name=btn value='쌀지급'><br>
|
||||||
락 풀 기 : <input type=submit name=btn value='락걸기'><input type=submit name=btn value='락풀기'> 현재 : <?=$plock>0?"동결중":"가동중"?><br>
|
락 풀 기 : <input type=submit name=btn value='락걸기'><input type=submit name=btn value='락풀기'> 현재 : <?=$plock>0?"동결중":"가동중"?><br>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
+36
-9
@@ -38,9 +38,21 @@ switch ($btn) {
|
|||||||
usleep(500000);
|
usleep(500000);
|
||||||
}
|
}
|
||||||
|
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
||||||
// 스케줄 전체를 벽시계에서 빼지 않고 논리 현재 tick만 앞으로 이동합니다.
|
$turntime = (new \DateTimeImmutable($gameStor->turntime))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
$clock->advance($gameStor, $clock->ticksFromMinutes($minute));
|
$starttime = (new \DateTimeImmutable($gameStor->starttime))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
|
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->sub(new \DateInterval("PT{$minute}M"));
|
||||||
|
|
||||||
|
$gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
|
||||||
|
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
||||||
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$db->update('general', [
|
||||||
|
'turntime' => $db->sqleval('DATE_SUB(turntime, INTERVAL %i MINUTE)', $minute)
|
||||||
|
], true);
|
||||||
|
$db->update('auction', [
|
||||||
|
'expire' => $db->sqleval('DATE_SUB(expire, INTERVAL %i MINUTE)', $minute)
|
||||||
|
], true);
|
||||||
if ($locked) {
|
if ($locked) {
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
@@ -54,19 +66,34 @@ switch ($btn) {
|
|||||||
}
|
}
|
||||||
usleep(500000);
|
usleep(500000);
|
||||||
}
|
}
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
$gameStor->cacheValues(['turntime', 'starttime', 'tnmt_time']);
|
||||||
$clock->advance($gameStor, -$clock->ticksFromMinutes($minute));
|
$turntime = (new \DateTimeImmutable($gameStor->turntime))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
$starttime = (new \DateTimeImmutable($gameStor->starttime))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
$tnmt_time = (new \DateTimeImmutable($gameStor->tnmt_time))->add(new \DateInterval("PT{$minute}M"));
|
||||||
|
|
||||||
|
$gameStor->turntime = $turntime->format('Y-m-d H:i:s.u');
|
||||||
|
$gameStor->starttime = $starttime->format('Y-m-d H:i:s');
|
||||||
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
|
|
||||||
|
$db->update('general', [
|
||||||
|
'turntime' => $db->sqleval('DATE_ADD(turntime, INTERVAL %i MINUTE)', $minute)
|
||||||
|
], true);
|
||||||
|
$db->update('auction', [
|
||||||
|
'expire' => $db->sqleval('DATE_ADD(expire, INTERVAL %i MINUTE)', $minute)
|
||||||
|
], true);
|
||||||
if ($locked) {
|
if ($locked) {
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "토너분당김":
|
case "토너분당김":
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
$tnmt_time = new \DateTime($gameStor->tnmt_time);
|
||||||
$gameStor->tnmt_time = Util::toInt($gameStor->tnmt_time) - $clock->ticksFromMinutes($minute2);
|
$tnmt_time->sub(new \DateInterval("PT{$minute2}M"));
|
||||||
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
break;
|
break;
|
||||||
case "토너분지연":
|
case "토너분지연":
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
$tnmt_time = new \DateTimeImmutable($gameStor->tnmt_time);
|
||||||
$gameStor->tnmt_time = Util::toInt($gameStor->tnmt_time) + $clock->ticksFromMinutes($minute2);
|
$tnmt_time->add(new \DateInterval("PT{$minute2}M"));
|
||||||
|
$gameStor->tnmt_time = $tnmt_time->format('Y-m-d H:i:s');
|
||||||
break;
|
break;
|
||||||
case "금지급":
|
case "금지급":
|
||||||
processGoldIncome();
|
processGoldIncome();
|
||||||
|
|||||||
+5
-4
@@ -6,7 +6,7 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if($session->userGrade < 6) {
|
if($session->userGrade < 5) {
|
||||||
die(requireAdminPermissionHTML());
|
die(requireAdminPermissionHTML());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,7 +19,6 @@ $admin = getAdmin();
|
|||||||
<head>
|
<head>
|
||||||
<title>게임관리</title>
|
<title>게임관리</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
<?=WebUtil::printCSS('../d_shared/common.css')?>
|
||||||
@@ -40,7 +39,9 @@ $admin = getAdmin();
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>시작시간변경</td>
|
<td width=110 align=right>시작시간변경</td>
|
||||||
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=substr($admin['starttime_display'], 0, 19)?>'><input type=submit name=btn value=변경1></td>
|
<td width=285><input type=text size=20 maxlength=20 style=color:white;background-color:black;text-align:right; name=starttime value='<?=substr($admin['starttime'], 0, 19)?>'><input type=submit name=btn value=변경1></td>
|
||||||
|
<td width=110 align=right>현재도시훈사</td>
|
||||||
|
<td width=285><?=$admin['city_rate']?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>최대 장수</td>
|
<td width=110 align=right>최대 장수</td>
|
||||||
@@ -52,7 +53,7 @@ $admin = getAdmin();
|
|||||||
<td width=110 align=right>시작 년도</td>
|
<td width=110 align=right>시작 년도</td>
|
||||||
<td width=285><input type=text size=3 maxlength=3 style=color:white;background-color:black;text-align:right; name=startyear value='<?=$admin['startyear']?>'><input type=submit name=btn value=변경4></td>
|
<td width=285><input type=text size=3 maxlength=3 style=color:white;background-color:black;text-align:right; name=startyear value='<?=$admin['startyear']?>'><input type=submit name=btn value=변경4></td>
|
||||||
<td width=110 align=right>최근 갱신 시간</td>
|
<td width=110 align=right>최근 갱신 시간</td>
|
||||||
<td width=285> <?=$admin['turntime_display']?> (tick <?=$admin['turntime']?>)</td>
|
<td width=285> <?=$admin['turntime']?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=110 align=right>턴시간</td>
|
<td width=110 align=right>턴시간</td>
|
||||||
|
|||||||
+25
-11
@@ -6,7 +6,7 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
header('location:_admin1.php');
|
header('location:_admin1.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
@@ -25,15 +25,13 @@ if (!$v->validate()) {
|
|||||||
$msg = Util::getPost('msg');
|
$msg = Util::getPost('msg');
|
||||||
$btn = Util::getPost('btn');
|
$btn = Util::getPost('btn');
|
||||||
$log = Util::getPost('log');
|
$log = Util::getPost('log');
|
||||||
$starttime = Util::getPost('starttime', 'string', null);
|
$starttime = Util::getPost('starttime', 'string', (new \DateTime())->format('Y-m-d H:i:s'));
|
||||||
$maxgeneral = Util::getPost('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
|
$maxgeneral = Util::getPost('maxgeneral', 'int', GameConst::$defaultMaxGeneral);
|
||||||
$maxnation = Util::getPost('maxnation', 'int', GameConst::$defaultMaxNation);
|
$maxnation = Util::getPost('maxnation', 'int', GameConst::$defaultMaxNation);
|
||||||
$startyear = Util::getPost('startyear', 'int', GameConst::$defaultStartYear);
|
$startyear = Util::getPost('startyear', 'int', GameConst::$defaultStartYear);
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
|
||||||
$starttime ??= $clock->formatTick($clock->nowTick());
|
|
||||||
|
|
||||||
$admin = getAdmin();
|
$admin = getAdmin();
|
||||||
|
|
||||||
@@ -45,11 +43,7 @@ switch ($btn) {
|
|||||||
pushGlobalHistoryLog(["<R>★</><S>{$log}</>"]);
|
pushGlobalHistoryLog(["<R>★</><S>{$log}</>"]);
|
||||||
break;
|
break;
|
||||||
case "변경1":
|
case "변경1":
|
||||||
$gameStor->clock_base_time = TimeUtil::format(GameClock::baseTimeForProjection(
|
$gameStor->starttime = (new \DateTime($starttime))->format('Y-m-d H:i:s');
|
||||||
new \DateTimeImmutable($starttime),
|
|
||||||
Util::toInt($gameStor->starttime),
|
|
||||||
$clock->getTurnTermMinutes(),
|
|
||||||
), true);
|
|
||||||
break;
|
break;
|
||||||
case "변경2":
|
case "변경2":
|
||||||
$gameStor->maxgeneral = $maxgeneral;
|
$gameStor->maxgeneral = $maxgeneral;
|
||||||
@@ -78,9 +72,29 @@ switch ($btn) {
|
|||||||
case "30분턴": $turnterm = 30; break;
|
case "30분턴": $turnterm = 30; break;
|
||||||
case "60분턴": $turnterm = 60; break;
|
case "60분턴": $turnterm = 60; break;
|
||||||
case "120분턴": $turnterm = 120; break;
|
case "120분턴": $turnterm = 120; break;
|
||||||
default: throw new \Exception("알 수 없는 턴 기간");
|
|
||||||
}
|
}
|
||||||
ServerTool::changeServerTerm($turnterm);
|
$oldunit = $admin['turnterm'] * 60;
|
||||||
|
$unit = $turnterm * 60;
|
||||||
|
|
||||||
|
$unitDiff = $unit / $oldunit;
|
||||||
|
|
||||||
|
$servTurnTime = new \DateTimeImmutable($admin['turntime']);
|
||||||
|
foreach ($db->query('SELECT no,turntime FROM general') as $gen) {
|
||||||
|
$genTurnTime = new \DateTimeImmutable($gen['turntime']);
|
||||||
|
$timeDiff = TimeUtil::DateIntervalToSeconds($genTurnTime->diff($servTurnTime));
|
||||||
|
$timeDiff *= $unitDiff;
|
||||||
|
$newGenTurnTime = $servTurnTime->add(TimeUtil::secondsToDateInterval($timeDiff));
|
||||||
|
|
||||||
|
$db->update('general', [
|
||||||
|
'turntime'=>$newGenTurnTime->format('Y-m-d H:i:s.u')
|
||||||
|
], 'no=%i', $gen['no']);
|
||||||
|
}
|
||||||
|
$turn = ($admin['year'] - $admin['startyear']) * 12 + $admin['month'] - 1;
|
||||||
|
$starttime = $servTurnTime->sub(TimeUtil::secondsToDateInterval($turn * $unit))->format('Y-m-d H:i:s');
|
||||||
|
$starttime = cutTurn($starttime, $turnterm, false);
|
||||||
|
$gameStor->turnterm = $turnterm;
|
||||||
|
$gameStor->starttime = $starttime;
|
||||||
|
pushGlobalHistoryLog(["<R>★</>턴시간이 <C>$btn</>으로 변경됩니다."]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+53
-17
@@ -7,7 +7,7 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
die(requireAdminPermissionHTML());
|
die(requireAdminPermissionHTML());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,7 +20,6 @@ $db = DB::db();
|
|||||||
<head>
|
<head>
|
||||||
<title>회원관리</title>
|
<title>회원관리</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -49,25 +48,54 @@ $db = DB::db();
|
|||||||
<font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b>
|
<font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b>
|
||||||
</td>
|
</td>
|
||||||
<td width=105 rowspan=12>
|
<td width=105 rowspan=12>
|
||||||
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:14px'>
|
<?php
|
||||||
<?php
|
|
||||||
$generalList = $db->query('SELECT `no`, `name`, npc, `block` FROM general ORDER BY npc, binary(`name`)');
|
|
||||||
|
|
||||||
foreach ($generalList as $general) {
|
echo "
|
||||||
$style = "style=;";
|
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:14px'>";
|
||||||
if ($general['block'] > 0) {
|
$generalList = $db->query('SELECT `no`, `name`, npc, `block` FROM general ORDER BY npc, binary(`name`)');
|
||||||
$style .= "background-color:red;";
|
|
||||||
}
|
|
||||||
|
|
||||||
$npcColor = getNPCColor($general['npc']);
|
foreach ($generalList as $general) {
|
||||||
if ($npcColor !== null) {
|
$style = "style=;";
|
||||||
$style .= "color:{$npcColor};";
|
if ($general['block'] > 0) {
|
||||||
}
|
$style .= "background-color:red;";
|
||||||
|
|
||||||
echo "<option value={$general['no']} $style>{$general['name']}</option>";
|
|
||||||
}
|
}
|
||||||
?>
|
|
||||||
|
$npcColor = getNPCColor($general['npc']);
|
||||||
|
if($npcColor !== null){
|
||||||
|
$style .= "color:{$npcColor};";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<option value={$general['no']} $style>{$general['name']}</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td width=100 align=center>아이템 지급</td>
|
||||||
|
<td width=504>
|
||||||
|
<select name=weapon size=1 style='color:white;background-color:black;font-size:14px'>";
|
||||||
|
foreach (GameConst::$allItems as $itemCategories) {
|
||||||
|
foreach ($itemCategories as $item => $cnt) {
|
||||||
|
if ($cnt == 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$itemObj = buildItemClass($item);
|
||||||
|
if ($itemObj->isBuyable()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for ($i = 0; $i < 27; $i++) {
|
||||||
|
echo "
|
||||||
|
<option value={$i}>{$i}</option>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
</select>
|
</select>
|
||||||
|
<input type=submit name=btn value='무기지급'>
|
||||||
|
<input type=submit name=btn value='책지급'>
|
||||||
|
<input type=submit name=btn value='말지급'>
|
||||||
|
<input type=submit name=btn value='도구지급'>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -81,6 +109,10 @@ $db = DB::db();
|
|||||||
<td align=center>강제 사망</td>
|
<td align=center>강제 사망</td>
|
||||||
<td><input type=submit name=btn value='강제 사망'></td>
|
<td><input type=submit name=btn value='강제 사망'></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>이벤트</td>
|
||||||
|
<td><input type=submit name=btn value='특기 부여'><input type=submit name=btn value='공헌치1000'><input type=submit name=btn value='경험치1000'></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center>이벤트2</td>
|
<td align=center>이벤트2</td>
|
||||||
<td><input type=submit name=btn value='보숙10000'><input type=submit name=btn value='궁숙10000'><input type=submit name=btn value='기숙10000'><input type=submit name=btn value='귀숙10000'><input type=submit name=btn value='차숙10000'></td>
|
<td><input type=submit name=btn value='보숙10000'><input type=submit name=btn value='궁숙10000'><input type=submit name=btn value='기숙10000'><input type=submit name=btn value='귀숙10000'><input type=submit name=btn value='차숙10000'></td>
|
||||||
@@ -89,6 +121,10 @@ $db = DB::db();
|
|||||||
<td align=center>접속제한</td>
|
<td align=center>접속제한</td>
|
||||||
<td><input type=submit name=btn value='접속 허용'><input type=submit name=btn value='접속 제한'></td>
|
<td><input type=submit name=btn value='접속 허용'><input type=submit name=btn value='접속 제한'></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>턴 시각 설정</td>
|
||||||
|
<td><input type=submit name=btn value='00턴'><input type=submit name=btn value='랜덤턴'></td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center>명령 설정</td>
|
<td align=center>명령 설정</td>
|
||||||
<td><input type=submit name=btn value='하야입력'><input type=submit name=btn value='방랑해산'></td>
|
<td><input type=submit name=btn value='하야입력'><input type=submit name=btn value='방랑해산'></td>
|
||||||
|
|||||||
+152
-23
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use sammo\Enums\MessageType;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
@@ -15,7 +13,7 @@ $msg = Util::getPost('msg', 'string');
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
$session = Session::requireLogin()->loginGame()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
header('location:_admin2.php');
|
header('location:_admin2.php');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,18 +31,18 @@ $src = MessageTarget::buildQuick($session->generalID);
|
|||||||
$genObjList = [];
|
$genObjList = [];
|
||||||
$env = [];
|
$env = [];
|
||||||
if ($genlist) {
|
if ($genlist) {
|
||||||
$genObjList = General::createObjListFromDB($genlist);
|
$genObjList = General::createGeneralObjListFromDB($genlist);
|
||||||
$env = $gameStor->cacheAll();
|
$env = $gameStor->cacheAll();
|
||||||
}
|
}
|
||||||
switch ($btn) {
|
switch ($btn) {
|
||||||
case "전체 접속허용":
|
case "전체 접속허용":
|
||||||
$db->update('general_access_log', [
|
$db->update('general', [
|
||||||
'refresh_score' => 0
|
'con' => 0
|
||||||
], true);
|
], true);
|
||||||
break;
|
break;
|
||||||
case "전체 접속제한":
|
case "전체 접속제한":
|
||||||
$db->update('general_access_log', [
|
$db->update('general', [
|
||||||
'refresh_score' => 1000
|
'con' => 1000
|
||||||
], true);
|
], true);
|
||||||
break;
|
break;
|
||||||
case "블럭 해제":
|
case "블럭 해제":
|
||||||
@@ -99,7 +97,7 @@ switch ($btn) {
|
|||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "강제 사망":
|
case "강제 사망":
|
||||||
$date = GameClock::fromStorage($gameStor)->nowTick();
|
$date = TimeUtil::now(true);
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
'killturn' => 0,
|
'killturn' => 0,
|
||||||
'turntime' => $date,
|
'turntime' => $date,
|
||||||
@@ -109,11 +107,33 @@ switch ($btn) {
|
|||||||
'arg' => '{}',
|
'arg' => '{}',
|
||||||
'brief' => '휴식',
|
'brief' => '휴식',
|
||||||
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
||||||
|
break;
|
||||||
|
case "특기 부여":
|
||||||
|
[$year, $month] = $gameStor->getValuesAsArray(['year', 'month']);
|
||||||
|
$text = "특기 부여!";
|
||||||
|
|
||||||
|
foreach ($db->query("SELECT `no`,leadership,strength,intel,dex1,dex2,dex3,dex4,dex5 FROM general WHERE `no` IN %li", $genlist) as $general) {
|
||||||
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($general['no']), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
|
$msg->send(true);
|
||||||
|
|
||||||
|
$specialWar = SpecialityHelper::pickSpecialWar($general);
|
||||||
|
$db->update('general', [
|
||||||
|
'specage2' => $db->sqleval('age'),
|
||||||
|
'special2' => $specialWar
|
||||||
|
], 'no=%i', $general['no']);
|
||||||
|
$specialWarName = buildGeneralSpecialWarClass($specialWar)->getName();
|
||||||
|
$josaUl = JosaUtil::pick($specialWarName, '을');
|
||||||
|
$logger = new ActionLogger($general['no'], 0, $year, $month);
|
||||||
|
$logger->pushGeneralHistoryLog("특기 【<b><C>{$specialWarName}</></b>】{$josaUl} 습득");
|
||||||
|
$logger->pushGeneralActionLog("특기 【<b><L>{$specialWarName}</></b>】{$josaUl} 익혔습니다!",ActionLogger::PLAIN);
|
||||||
|
$logger->flush();
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "경험치1000":
|
case "경험치1000":
|
||||||
$text = $btn . " 지급!";
|
$text = $btn . " 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -124,7 +144,7 @@ switch ($btn) {
|
|||||||
case "공헌치1000":
|
case "공헌치1000":
|
||||||
$text = $btn . " 지급!";
|
$text = $btn . " 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -135,7 +155,7 @@ switch ($btn) {
|
|||||||
case "보숙10000":
|
case "보숙10000":
|
||||||
$text = "보병숙련도+10000 지급!";
|
$text = "보병숙련도+10000 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -145,7 +165,7 @@ switch ($btn) {
|
|||||||
case "궁숙10000":
|
case "궁숙10000":
|
||||||
$text = "궁병숙련도+10000 지급!";
|
$text = "궁병숙련도+10000 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -156,7 +176,7 @@ switch ($btn) {
|
|||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "기병숙련도+10000 지급!";
|
$text = "기병숙련도+10000 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -167,7 +187,7 @@ switch ($btn) {
|
|||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "귀병숙련도+10000 지급!";
|
$text = "귀병숙련도+10000 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -178,7 +198,7 @@ switch ($btn) {
|
|||||||
$src = MessageTarget::buildQuick($session->generalID);
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
$text = "차병숙련도+10000 지급!";
|
$text = "차병숙련도+10000 지급!";
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
$db->update('general', [
|
$db->update('general', [
|
||||||
@@ -186,22 +206,111 @@ switch ($btn) {
|
|||||||
], '`no` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "접속 허용":
|
case "접속 허용":
|
||||||
$db->update('general_access_log', [
|
$db->update('general', [
|
||||||
'refresh_score' => 0
|
'con' => 0
|
||||||
], '`general_id` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "접속 제한":
|
case "접속 제한":
|
||||||
$db->update('general_access_log', [
|
$db->update('general', [
|
||||||
'refresh_score' => 1000
|
'con' => 1000
|
||||||
], '`general_id` IN %li', $genlist);
|
], '`no` IN %li', $genlist);
|
||||||
break;
|
break;
|
||||||
case "메세지 전달":
|
case "메세지 전달":
|
||||||
$text = $msg ?? '';
|
$text = $msg ?? '';
|
||||||
foreach ($genlist as $generalID) {
|
foreach ($genlist as $generalID) {
|
||||||
$msg = new Message(MessageType::private, $src, MessageTarget::buildQuick($generalID), $text, Message::gameNow(), new \DateTime('9999-12-31'), []);
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
$msg->send(true);
|
$msg->send(true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "무기지급":
|
||||||
|
|
||||||
|
if ($item == 'None') {
|
||||||
|
$text = "무기 회수!";
|
||||||
|
} else {
|
||||||
|
$text = getItemName($item) . " 지급!";
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
|
$msg->send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item === 'None') {
|
||||||
|
$db->update('general', [
|
||||||
|
'weapon' => 'None'
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
} else {
|
||||||
|
$db->update('general', [
|
||||||
|
'weapon' => $item
|
||||||
|
], '`no` IN %li', $genlist, $item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "책지급":
|
||||||
|
if ($item == 'None') {
|
||||||
|
$text = "책 회수!";
|
||||||
|
} else {
|
||||||
|
$text = getItemName($item) . " 지급!";
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
|
$msg->send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item == 'None') {
|
||||||
|
$db->update('general', [
|
||||||
|
'book' => 'None'
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
} else {
|
||||||
|
$db->update('general', [
|
||||||
|
'book' => $item
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "말지급":
|
||||||
|
if ($item == 'None') {
|
||||||
|
$text = "말 회수!";
|
||||||
|
} else {
|
||||||
|
$text = getItemName($item) . " 지급!";
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
|
$msg->send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item == 'None') {
|
||||||
|
$db->update('general', [
|
||||||
|
'horse' => 'None'
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
} else {
|
||||||
|
$db->update('general', [
|
||||||
|
'horse' => $item
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "도구지급":
|
||||||
|
if ($item == 'None') {
|
||||||
|
$text = "특수도구 회수!";
|
||||||
|
} else {
|
||||||
|
$text = getItemName($item) . " 지급!";
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$msg = new Message(Message::MSGTYPE_PRIVATE, $src, MessageTarget::buildQuick($generalID), $text, new \DateTime(), new \DateTime('9999-12-31'), []);
|
||||||
|
$msg->send(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($item == 'None') {
|
||||||
|
$db->update('general', [
|
||||||
|
'item' => 'None'
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
} else {
|
||||||
|
$db->update('general', [
|
||||||
|
'item' => $item
|
||||||
|
], '`no` IN %li AND item < %i', $genlist, $item);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case "하야입력":
|
case "하야입력":
|
||||||
$db->update('general_turn', [
|
$db->update('general_turn', [
|
||||||
'action' => 'che_하야',
|
'action' => 'che_하야',
|
||||||
@@ -221,6 +330,26 @@ switch ($btn) {
|
|||||||
'brief' => '해산',
|
'brief' => '해산',
|
||||||
], 'general_id IN %li AND turn_idx = 1', $genlist);
|
], 'general_id IN %li AND turn_idx = 1', $genlist);
|
||||||
break;
|
break;
|
||||||
|
case "00턴":
|
||||||
|
$turnterm = $gameStor->turnterm;
|
||||||
|
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$turntime = getRandTurn($turnterm);
|
||||||
|
$cutTurn = cutTurn($turntime, $turnterm);
|
||||||
|
$db->update('general', [
|
||||||
|
'turntime' => $cutTurn
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "랜덤턴":
|
||||||
|
$turnterm = $gameStor->turnterm;
|
||||||
|
foreach ($genlist as $generalID) {
|
||||||
|
$turntime = getRandTurn($turnterm);
|
||||||
|
$db->update('general', [
|
||||||
|
'turntime' => $turntime
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
header('location:_admin2.php');
|
header('location:_admin2.php');
|
||||||
|
|||||||
+132
@@ -0,0 +1,132 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
|
if ($session->userGrade < 5) {
|
||||||
|
die(requireAdminPermissionHTML());
|
||||||
|
}
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
$conlimit = $gameStor->conlimit;
|
||||||
|
|
||||||
|
$ipGroupList = Util::arrayGroupBy(
|
||||||
|
$db->query(
|
||||||
|
'SELECT name,ip,lastconnect,owner,block,substring_index(ip,".",3) as ip_c from general WHERE ip!="" and npc<2'
|
||||||
|
),
|
||||||
|
'ip_c'
|
||||||
|
);
|
||||||
|
|
||||||
|
function colorBlockedName($general)
|
||||||
|
{
|
||||||
|
if (!$general['blocked']) {
|
||||||
|
return $general['name'];
|
||||||
|
}
|
||||||
|
return "<span style='color:magenta;'>{$general['name']}</span>";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>멀티관리</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>멀 티 관 리<br><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<form name=form1 method=post action=_admin4_submit.php>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td width=80 align=center rowspan=3>회원선택<br><br>
|
||||||
|
<font color=cyan>NPC</font><br>
|
||||||
|
<font color=skyblue>NPC유저</font><br>
|
||||||
|
<font color=red>접속제한</font><br><b style=background-color:red;>블럭회원</b>
|
||||||
|
</td>
|
||||||
|
<td width=105 rowspan=3>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<select name=genlist[] size=20 multiple style='color:white;background-color:black;font-size:14px'>";
|
||||||
|
|
||||||
|
foreach ($db->query('SELECT no,name,npc,block,con from general where ip!=\'\' order by npc,ip') as $general) {
|
||||||
|
$style = "style=;";
|
||||||
|
if ($general['block'] > 0) {
|
||||||
|
$style .= "background-color:red;";
|
||||||
|
}
|
||||||
|
|
||||||
|
$npcColor = getNPCColor($general['npc']);
|
||||||
|
if($npcColor !== null){
|
||||||
|
$style .= "color:{$npcColor};";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<option value={$general['no']} $style>{$general['name']}</option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</select>";
|
||||||
|
?>
|
||||||
|
</td>
|
||||||
|
<td width=100 align=center>블럭</td>
|
||||||
|
<td width=504>
|
||||||
|
<input type=submit name=btn value='블럭 해제'><input type=submit name=btn value='1단계 블럭'><input type=submit name=btn value='2단계 블럭'><input type=submit name=btn value='3단계 블럭'><input type=submit name=btn value='무한삭턴'><br>
|
||||||
|
1단계:발언권, 2단계:턴블럭
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>강제 사망</td>
|
||||||
|
<td><input type=submit name=btn value='강제 사망'></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>메세지 전달</td>
|
||||||
|
<td><input type=textarea size=60 maxlength=255 name=msg style=background-color:black;color:white;><input type=submit name=btn value='메세지 전달'></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td align=center width=100>장수명</td>
|
||||||
|
<td align=center width=180>최근로그인</td>
|
||||||
|
<td align=center width=129>IP</td>
|
||||||
|
<td align=center width=100>ID</td>
|
||||||
|
</tr>
|
||||||
|
<?php foreach ($ipGroupList as $ipGroupC => $users) : ?>
|
||||||
|
<tr>
|
||||||
|
<td><?= join('<br>', array_map('\sammo\colorBlockedName', $users)) ?></td>
|
||||||
|
<td><?= join('<br>', array_column($users, 'lastconnect')) ?></td>
|
||||||
|
<td><?= join('<br>', array_column($users, 'ip')) ?></td>
|
||||||
|
<td><?= join('<br>', array_column($users, 'owner')) ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
<?php
|
||||||
|
//NOTE: password의 md5 해시가 같은지 확인하는 방식으로는 앞으로 잡아낼 수 없다. 폐기
|
||||||
|
?>
|
||||||
|
</form>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
|
if ($session->userGrade < 5) {
|
||||||
|
header('location:_admin4.php');
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
$btn = Util::getPost('btn');
|
||||||
|
$genlist = Util::getPost('genlist', 'array_int');
|
||||||
|
$msg = Util::getPost('msg', 'string', '메시지');
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
|
||||||
|
//NOTE: 왜 기능이 admin2와 admin4가 같이 있는가?
|
||||||
|
//NOTE: 왜 블럭 시 admin4에선 금쌀을 없애지 않는가?
|
||||||
|
switch ($btn) {
|
||||||
|
case "블럭 해제":
|
||||||
|
DB::db()->query('update general set block=0 where no IN %li', $genlist);
|
||||||
|
break;
|
||||||
|
case "1단계 블럭":
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
$db = DB::db();
|
||||||
|
$db->query('update general set block=1,killturn=24 where no IN %li', $genlist);
|
||||||
|
//FIXME: subquery로 하는게 더 빠를 듯.
|
||||||
|
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
||||||
|
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
||||||
|
break;
|
||||||
|
case "2단계 블럭":
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
$db = DB::db();
|
||||||
|
$db->query('update general set block=2,killturn=24 where no IN %li', $genlist);
|
||||||
|
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
||||||
|
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
||||||
|
break;
|
||||||
|
case "3단계 블럭":
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
$db = DB::db();
|
||||||
|
$db->query('update general set block=3,killturn=24 where no IN %li', $genlist);
|
||||||
|
$uid = $db->queryFirstColumn('select owner from general where no IN %li', $genlist);
|
||||||
|
RootDB::db()->query('update member set block_num=block_num+1,block_date=%s where id IN %ls', $date, $uid);
|
||||||
|
break;
|
||||||
|
case "무한삭턴":
|
||||||
|
DB::db()->query('update general set killturn=8000 where no IN %li', $genlist);
|
||||||
|
break;
|
||||||
|
case "강제 사망":
|
||||||
|
$date = TimeUtil::now(true);
|
||||||
|
$db->update('general', [
|
||||||
|
'killturn' => 0,
|
||||||
|
'turntime' => $date,
|
||||||
|
], '`no` IN %li', $genlist);
|
||||||
|
$db->update('general_turn', [
|
||||||
|
'action' => '휴식',
|
||||||
|
'arg' => '{}',
|
||||||
|
'brief' => '휴식'
|
||||||
|
], 'general_id IN %li AND turn_idx = 0', $genlist);
|
||||||
|
break;
|
||||||
|
case "메세지 전달":
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
$src = MessageTarget::buildQuick($session->generalID);
|
||||||
|
foreach($genlist as $generalID){
|
||||||
|
$msgObj = new Message(
|
||||||
|
Message::MSGTYPE_PRIVATE,
|
||||||
|
$src,
|
||||||
|
MessageTarget::buildQuick($generalID),
|
||||||
|
$msg,
|
||||||
|
new \DateTime(),
|
||||||
|
new \DateTime('9999-12-31'),
|
||||||
|
[]
|
||||||
|
);
|
||||||
|
if ($msgObj) {
|
||||||
|
$msgObj->send(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
header('location:_admin4.php');
|
||||||
+15
-4
@@ -5,9 +5,7 @@ namespace sammo;
|
|||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
/** @var int */
|
|
||||||
$type = Util::getPost('type', 'int', 0);
|
$type = Util::getPost('type', 'int', 0);
|
||||||
/** @var int */
|
|
||||||
$type2 = Util::getPost('type2', 'int', 0);
|
$type2 = Util::getPost('type2', 'int', 0);
|
||||||
|
|
||||||
if ($type < 0 || $type > 17) {
|
if ($type < 0 || $type > 17) {
|
||||||
@@ -20,7 +18,7 @@ if ($type2 < 0 || $type2 > 6) {
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
die(requireAdminPermissionHTML());
|
die(requireAdminPermissionHTML());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -38,7 +36,6 @@ $sel2[$type2] = "selected";
|
|||||||
<head>
|
<head>
|
||||||
<title>일제정보</title>
|
<title>일제정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -66,6 +63,8 @@ $sel2[$type2] = "selected";
|
|||||||
<option <?= $sel[8] ?? '' ?> value=8>평무</option>
|
<option <?= $sel[8] ?? '' ?> value=8>평무</option>
|
||||||
<option <?= $sel[9] ?? '' ?> value=9>평지</option>
|
<option <?= $sel[9] ?? '' ?> value=9>평지</option>
|
||||||
<option <?= $sel[10] ?? '' ?> value=10>평Lv</option>
|
<option <?= $sel[10] ?? '' ?> value=10>평Lv</option>
|
||||||
|
<option <?= $sel[11] ?? '' ?> value=11>접속률</option>
|
||||||
|
<option <?= $sel[12] ?? '' ?> value=12>단기접</option>
|
||||||
<option <?= $sel[13] ?? '' ?> value=13>보숙</option>
|
<option <?= $sel[13] ?? '' ?> value=13>보숙</option>
|
||||||
<option <?= $sel[14] ?? '' ?> value=14>궁숙</option>
|
<option <?= $sel[14] ?? '' ?> value=14>궁숙</option>
|
||||||
<option <?= $sel[15] ?? '' ?> value=15>기숙</option>
|
<option <?= $sel[15] ?? '' ?> value=15>기숙</option>
|
||||||
@@ -103,6 +102,8 @@ $sel2[$type2] = "selected";
|
|||||||
<table align=center width=1600 class="tb_layout bg0">
|
<table align=center width=1600 class="tb_layout bg0">
|
||||||
<tr class='bg1'>
|
<tr class='bg1'>
|
||||||
<td align=center>국명</td>
|
<td align=center>국명</td>
|
||||||
|
<td align=center>접률</td>
|
||||||
|
<td align=center>단접</td>
|
||||||
<td align=center>국력</td>
|
<td align=center>국력</td>
|
||||||
<td align=center>장수</td>
|
<td align=center>장수</td>
|
||||||
<td align=center>속령</td>
|
<td align=center>속령</td>
|
||||||
@@ -143,6 +144,8 @@ SELECT
|
|||||||
A.gold,
|
A.gold,
|
||||||
A.rice,
|
A.rice,
|
||||||
COUNT(B.nation) AS gennum,
|
COUNT(B.nation) AS gennum,
|
||||||
|
ROUND(AVG(B.connect), 1) AS connect,
|
||||||
|
ROUND(AVG(B.con), 1) AS con,
|
||||||
ROUND(AVG(B.dex1)) AS dex1,
|
ROUND(AVG(B.dex1)) AS dex1,
|
||||||
ROUND(AVG(B.dex2)) AS dex2,
|
ROUND(AVG(B.dex2)) AS dex2,
|
||||||
ROUND(AVG(B.dex3)) AS dex3,
|
ROUND(AVG(B.dex3)) AS dex3,
|
||||||
@@ -187,6 +190,12 @@ GROUP BY B.nation
|
|||||||
case 10:
|
case 10:
|
||||||
$query .= " order by avg(B.explevel) desc";
|
$query .= " order by avg(B.explevel) desc";
|
||||||
break;
|
break;
|
||||||
|
case 11:
|
||||||
|
$query .= " order by avg(B.connect) desc";
|
||||||
|
break;
|
||||||
|
case 12:
|
||||||
|
$query .= " order by avg(B.con) desc";
|
||||||
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
$query .= " order by avg(B.dex1) desc";
|
$query .= " order by avg(B.dex1) desc";
|
||||||
break;
|
break;
|
||||||
@@ -228,6 +237,8 @@ from city where nation=%i', $nation['nation']);
|
|||||||
echo "
|
echo "
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center style=background-color:{$nation['color']};color:" . newColor($nation['color']) . ";>{$nation['name']}</td>
|
<td align=center style=background-color:{$nation['color']};color:" . newColor($nation['color']) . ";>{$nation['name']}</td>
|
||||||
|
<td align=center> {$nation['connect']} </td>
|
||||||
|
<td align=center> {$nation['con']} </td>
|
||||||
<td align=center> {$nation['power']} </td>
|
<td align=center> {$nation['power']} </td>
|
||||||
<td align=center> {$gen['cnt']} </td>
|
<td align=center> {$gen['cnt']} </td>
|
||||||
<td align=center> {$city['cnt']} </td>
|
<td align=center> {$city['cnt']} </td>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ $nation = Util::getPost('nation', 'int');
|
|||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
$userID = Session::getUserID();
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
header('location:_admin5.php');
|
header('location:_admin5.php');
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-8
@@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use sammo\Enums\GeneralQueryMode;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
@@ -31,18 +29,17 @@ $queryMap = [
|
|||||||
];
|
];
|
||||||
|
|
||||||
if ($reqQueryType === null || !key_exists($reqQueryType, $queryMap)) {
|
if ($reqQueryType === null || !key_exists($reqQueryType, $queryMap)) {
|
||||||
$reqQueryType = array_key_first($queryMap);
|
$reqQueryType = Util::array_first_key($queryMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
die(requireAdminPermissionHTML());
|
die(requireAdminPermissionHTML());
|
||||||
}
|
}
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$clock = GameClock::fromStorage(KVStorage::getStorage($db, 'game_env'));
|
|
||||||
|
|
||||||
if ($btn == '정렬하기') {
|
if ($btn == '정렬하기') {
|
||||||
$gen = 0;
|
$gen = 0;
|
||||||
@@ -77,7 +74,7 @@ if (!$gen) {
|
|||||||
$gen = $generalBasicList[0]['no'];
|
$gen = $generalBasicList[0]['no'];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAccessLog);
|
$generalObj = General::createGeneralObjFromDB($gen);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
@@ -86,7 +83,6 @@ $generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAcc
|
|||||||
<head>
|
<head>
|
||||||
<title>로그정보</title>
|
<title>로그정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -112,7 +108,7 @@ $generalObj = General::createObjFromDB($gen, null, GeneralQueryMode::FullWithAcc
|
|||||||
대상장수 :
|
대상장수 :
|
||||||
<select name=gen size=1>
|
<select name=gen size=1>
|
||||||
<?php foreach ($generalBasicList as $general) : ?>
|
<?php foreach ($generalBasicList as $general) : ?>
|
||||||
<option <?= $gen == $general['no'] ? 'selected' : '' ?> value='<?= $general['no'] ?>'><?= $general['name'] ?> (<?= substr($clock->formatTick(Util::toInt($general['turntime'])), 14, 5) ?>)</option>
|
<option <?= $gen == $general['no'] ? 'selected' : '' ?> value='<?= $general['no'] ?>'><?= $general['name'] ?> (<?= substr($general['turntime'], 14, 5) ?>)</option>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
</select>
|
</select>
|
||||||
<input type=submit name=btn value='조회하기'>
|
<input type=submit name=btn value='조회하기'>
|
||||||
|
|||||||
+3
-4
@@ -12,7 +12,7 @@ $type = 0;
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
die(requireAdminPermissionHTML());
|
die(requireAdminPermissionHTML());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,6 @@ $sel[$type] = "selected";
|
|||||||
<head>
|
<head>
|
||||||
<title>외교정보</title>
|
<title>외교정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -96,10 +95,10 @@ $sel[$type] = "selected";
|
|||||||
case 7:
|
case 7:
|
||||||
$state = "<font color=green>불가침</font>";
|
$state = "<font color=green>불가침</font>";
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
throw new \Exception("알 수 없는 외교 상태: {$dip['state']}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$date = TimeUtil::now();
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center style=color:" . newColor($nationColor[$me]) . ";background-color:{$nationColor[$me]};>$nationName[$me]</td>
|
<td align=center style=color:" . newColor($nationColor[$me]) . ";background-color:{$nationColor[$me]};>$nationName[$me]</td>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ include "func.php";
|
|||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
|
||||||
if ($session->userGrade < 6) {
|
if ($session->userGrade < 5) {
|
||||||
die('권한 부족');
|
die('권한 부족');
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,8 +25,8 @@ foreach ($db->queryFirstColumn(
|
|||||||
CheckHall($generalNo);
|
CheckHall($generalNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
$inheritPointManager = InheritancePointManager::getInstance();
|
foreach(General::createGeneralObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
||||||
foreach(General::createObjListFromDB($db->queryFirstColumn('SELECT `no` FROM general WHERE npc = 0')) as $genObj){
|
$genObj->mergeTotalInheritancePoint(true);
|
||||||
$inheritPointManager->mergeTotalInheritancePoint($genObj);
|
applyInheritanceUser($genObj->getVar('owner'));
|
||||||
$inheritPointManager->applyInheritanceUser($genObj->getVar('owner'));
|
$genObj->clearInheritancePoint();
|
||||||
}
|
}
|
||||||
+31
-81
@@ -2,10 +2,6 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use Ds\Set;
|
|
||||||
use sammo\Enums\RankColumn;
|
|
||||||
use sammo\Enums\AuctionType;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
@@ -21,36 +17,39 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
increaseRefresh("명장일람", 1);
|
increaseRefresh("명장일람", 1);
|
||||||
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
$templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=500" />
|
<meta name="viewport" content="width=1136" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 명장일람</title>
|
<title><?= UniqueConst::$serverName ?>: 명장일람</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printCSS('css/hallOfFame.css') ?>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
<?= WebUtil::printDist('ts', 'common') ?>
|
||||||
<?= WebUtil::printDist('ts', ['common', 'bestGeneral']) ?>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="container" class="bg0">
|
<table align=center width=1100 class='tb_layout bg0'>
|
||||||
<div class="row gx-0">
|
<tr>
|
||||||
<div class="col">명 장 일 람<br><?= closeButton() ?></div>
|
<td>명 장 일 람<br><?= closeButton() ?></td>
|
||||||
</div>
|
</tr>
|
||||||
<div class="row gx-0">
|
</table>
|
||||||
<div class="col center">
|
<table align=center width=1100 class='tb_layout bg0'>
|
||||||
<form name=form1 action=a_bestGeneral.php method=get><input type=submit name=btn value='유저 보기'>
|
<form name=form1 action=a_bestGeneral.php method=post>
|
||||||
|
<tr>
|
||||||
|
<td align=center>
|
||||||
|
<input type=submit name=btn value='유저 보기'>
|
||||||
<input type=submit name=btn value='NPC 보기'>
|
<input type=submit name=btn value='NPC 보기'>
|
||||||
</form>
|
</td>
|
||||||
</div>
|
</tr>
|
||||||
</div>
|
</form>
|
||||||
|
</table>
|
||||||
|
<div style="margin:auto;width:1100px;">
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$ownerNameList = [];
|
$ownerNameList = [];
|
||||||
@@ -210,32 +209,6 @@ $templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|||||||
}
|
}
|
||||||
return $v;
|
return $v;
|
||||||
}],
|
}],
|
||||||
["유 산 소 모 량", "int", function ($v) use ($gameStor) {
|
|
||||||
$v['value'] = $v[RankColumn::inherit_point_spent->value];
|
|
||||||
if ($gameStor->isunited) {
|
|
||||||
return $v;
|
|
||||||
}
|
|
||||||
$v['nationName'] = '???';
|
|
||||||
$v['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
|
||||||
$v['name'] = '???';
|
|
||||||
$v['ownerName'] = null;
|
|
||||||
$v['bgColor'] = GameConst::$basecolor4;
|
|
||||||
$v['fgColor'] = newColor($v['bgColor']);
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
["유 산 획 득 량", "int", function ($v) use ($gameStor) {
|
|
||||||
$v['value'] = $v[RankColumn::inherit_point_earned->value];
|
|
||||||
if ($gameStor->isunited) {
|
|
||||||
return $v;
|
|
||||||
}
|
|
||||||
$v['nationName'] = '???';
|
|
||||||
$v['pictureFullPath'] = GetImageURL(0) . "/default.jpg";
|
|
||||||
$v['name'] = '???';
|
|
||||||
$v['ownerName'] = null;
|
|
||||||
$v['bgColor'] = GameConst::$basecolor4;
|
|
||||||
$v['fgColor'] = newColor($v['bgColor']);
|
|
||||||
return $v;
|
|
||||||
}],
|
|
||||||
];
|
];
|
||||||
|
|
||||||
$generals = [];
|
$generals = [];
|
||||||
@@ -243,14 +216,11 @@ $templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|||||||
"SELECT nation,no,name,owner_name as ownerName, owner, picture, imgsvr,
|
"SELECT nation,no,name,owner_name as ownerName, owner, picture, imgsvr,
|
||||||
experience, dedication,
|
experience, dedication,
|
||||||
dex1, dex2, dex3, dex4, dex5,
|
dex1, dex2, dex3, dex4, dex5,
|
||||||
horse, weapon, book, item, aux
|
horse, weapon, book, item
|
||||||
FROM general WHERE %l",
|
FROM general WHERE %l",
|
||||||
$btn == "NPC 보기" ? "npc>=2" : "npc<2"
|
$btn == "NPC 보기" ? "npc>=2" : "npc<2"
|
||||||
) as $general) {
|
) as $general) {
|
||||||
$generalID = $general['no'];
|
$generalID = $general['no'];
|
||||||
foreach (['dex1', 'dex2', 'dex3', 'dex4', 'dex5'] as $dexKey) {
|
|
||||||
$general[$dexKey] = CentennialAllStarGrowthService::recordableRawValue($general, $dexKey);
|
|
||||||
}
|
|
||||||
$general['bgColor'] = $nationColor[$general['nation']] ?? GameConst::$basecolor4;
|
$general['bgColor'] = $nationColor[$general['nation']] ?? GameConst::$basecolor4;
|
||||||
$general['fgColor'] = newColor($general['bgColor']);
|
$general['fgColor'] = newColor($general['bgColor']);
|
||||||
$general['nationName'] = $nationName[$general['nation']];
|
$general['nationName'] = $nationName[$general['nation']];
|
||||||
@@ -304,6 +274,10 @@ $templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|||||||
'generals' => array_slice($typeGenerals, 0, min(10, $validCnt))
|
'generals' => array_slice($typeGenerals, 0, min(10, $validCnt))
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<div style="margin:auto;width:1100px;margin-top:5px;">
|
||||||
|
<?php
|
||||||
//유니크 아이템 소유자
|
//유니크 아이템 소유자
|
||||||
$itemTypes = [
|
$itemTypes = [
|
||||||
'horse' => '명 마',
|
'horse' => '명 마',
|
||||||
@@ -334,32 +308,6 @@ $templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$dummyAuctionGeneral = [
|
|
||||||
'nation' => 0,
|
|
||||||
'no' => 0,
|
|
||||||
'ownerName' => '',
|
|
||||||
'pictureFullPath' => GetImageURL(0) . "/default.jpg",
|
|
||||||
'name' => '경매중',
|
|
||||||
'bgColor' => '#00582c',
|
|
||||||
'fgColor' => 'white',
|
|
||||||
'nationName' => '-',
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach ($db->queryFirstColumn(
|
|
||||||
'SELECT `target` FROM ng_auction WHERE `finished` = 0 AND `type` = %s',
|
|
||||||
AuctionType::UniqueItem->value
|
|
||||||
) as $itemClassName) {
|
|
||||||
if(key_exists($itemClassName, $itemOwners)) {
|
|
||||||
$itemOwners[$itemClassName][] = $dummyAuctionGeneral;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$itemOwners[$itemClassName] = [$dummyAuctionGeneral];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
foreach (GameConst::$allItems as $itemType => $itemList) {
|
foreach (GameConst::$allItems as $itemType => $itemList) {
|
||||||
$itemNameType = $itemTypes[$itemType];
|
$itemNameType = $itemTypes[$itemType];
|
||||||
$itemList = array_reverse($itemList, true);
|
$itemList = array_reverse($itemList, true);
|
||||||
@@ -421,13 +369,15 @@ $templates = new \League\Plates\Engine(__DIR__ . '/templates');
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<div class="row gx-0">
|
|
||||||
<div class="col"><?= closeButton() ?></div>
|
|
||||||
</div>
|
|
||||||
<div class="row bg0 gx-0">
|
|
||||||
<div class="col bg0"><?= banner() ?></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<table align=center width=1100 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
+2
-4
@@ -14,14 +14,12 @@ increaseRefresh("왕조일람", 1);
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', 'common') ?>
|
<?= WebUtil::printDist('ts', 'common') ?>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@@ -57,7 +55,7 @@ increaseRefresh("왕조일람", 1);
|
|||||||
<tr>
|
<tr>
|
||||||
<td style="background-color:#333333;" align=center colspan=8>
|
<td style="background-color:#333333;" align=center colspan=8>
|
||||||
<font size=5>현재 (<?= $year ?>年 <?= $month ?>月)</font>
|
<font size=5>현재 (<?= $year ?>年 <?= $month ?>月)</font>
|
||||||
<a href="v_history.php"><button type='button'>역사 보기</button></a>
|
<a href="a_history.php"><button type='button'>역사 보기</button></a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
@@ -77,7 +75,7 @@ increaseRefresh("왕조일람", 1);
|
|||||||
<a href="a_emperior_detail.php?select=<?= $emperior['no'] ?>"><button type='button'>자세히</button></a>
|
<a href="a_emperior_detail.php?select=<?= $emperior['no'] ?>"><button type='button'>자세히</button></a>
|
||||||
|
|
||||||
<?php if ($emperior['server_id']) : ?>
|
<?php if ($emperior['server_id']) : ?>
|
||||||
<a href="v_history.php?serverID=<?= $emperior['server_id'] ?>"><button type='button'>역사 보기</button></a>
|
<a href="a_history.php?serverID=<?= $emperior['server_id'] ?>"><button type='button'>역사 보기</button></a>
|
||||||
<?php endif ?>
|
<?php endif ?>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -24,12 +24,10 @@ $serverID = $emperior['server_id'] ?? ($emperior['serverID'] ?? null);
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
<title><?= UniqueConst::$serverName ?>: 왕조일람</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', 'common', true) ?>
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
|
||||||
@@ -175,9 +173,8 @@ $serverID = $emperior['server_id'] ?? ($emperior['serverID'] ?? null);
|
|||||||
if (!$nation['nation'] ?? null) {
|
if (!$nation['nation'] ?? null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$nation = array_merge(Json::decode($nation['data']), $nation);
|
$nation += Json::decode($nation['data']);
|
||||||
|
|
||||||
/** @var array $nation */
|
|
||||||
$nation['typeName'] = getNationType($nation['type']);
|
$nation['typeName'] = getNationType($nation['type']);
|
||||||
$nation['levelName'] = getNationLevel($nation['level']);
|
$nation['levelName'] = getNationLevel($nation['level']);
|
||||||
/** @var int[]|null $nationGenerals */
|
/** @var int[]|null $nationGenerals */
|
||||||
@@ -203,7 +200,7 @@ $serverID = $emperior['server_id'] ?? ($emperior['serverID'] ?? null);
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (key_exists('aux', $nation) && !is_array($nation['aux'])) {
|
if (key_exists('aux', $nation) && !is_array($nation['aux'])) {
|
||||||
$nation = array_merge(Json::decode($nation['aux']), $nation);
|
$nation += Json::decode($nation['aux']);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo $templates->render('oldNation', $nation);
|
echo $templates->render('oldNation', $nation);
|
||||||
|
|||||||
+8
-19
@@ -16,13 +16,10 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
|
|
||||||
increaseRefresh("장수일람", 2);
|
increaseRefresh("장수일람", 2);
|
||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$me = $db->queryFirstRow('SELECT con,turntime FROM general WHERE owner = %i', $userID);
|
||||||
'SELECT refresh_score,turntime FROM `general`
|
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner = %i', $userID
|
|
||||||
);
|
|
||||||
|
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
$con = checkLimit($me['con']);
|
||||||
if ($limitState >= 2) {
|
if ($con >= 2) {
|
||||||
printLimitMsg($me['turntime']);
|
printLimitMsg($me['turntime']);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
@@ -44,14 +41,12 @@ if ($gameStor->isunited) {
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 장수일람</title>
|
<title><?= UniqueConst::$serverName ?>: 장수일람</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', 'common') ?>
|
<?= WebUtil::printDist('ts', 'common') ?>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
@@ -105,7 +100,7 @@ if ($gameStor->isunited) {
|
|||||||
6 => ['dedication', true],
|
6 => ['dedication', true],
|
||||||
7 => ['officer_level', true],
|
7 => ['officer_level', true],
|
||||||
8 => ['killturn', false],
|
8 => ['killturn', false],
|
||||||
9 => ['refresh_score_total', true],
|
9 => ['connect', true],
|
||||||
10 => ['experience', true],
|
10 => ['experience', true],
|
||||||
11 => ['personal', true],
|
11 => ['personal', true],
|
||||||
12 => ['special', true],
|
12 => ['special', true],
|
||||||
@@ -114,12 +109,7 @@ if ($gameStor->isunited) {
|
|||||||
15 => ['npc', true],
|
15 => ['npc', true],
|
||||||
][$type];
|
][$type];
|
||||||
|
|
||||||
$generalList = $db->query(
|
$generalList = $db->query('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect from general order by %b %l', $orderKey, $orderDesc ? 'desc' : '');
|
||||||
'SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,refresh_score_total
|
|
||||||
FROM `general` LEFT JOIN `general_access_log` ON general.no = general_access_log.general_id order by %b %l',
|
|
||||||
$orderKey,
|
|
||||||
$orderDesc ? 'desc' : ''
|
|
||||||
);
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
@@ -171,7 +161,7 @@ if ($gameStor->isunited) {
|
|||||||
$name = $name . '<br><small>(' . $ownerNameList[$general['owner']] . ')</small>';
|
$name = $name . '<br><small>(' . $ownerNameList[$general['owner']] . ')</small>';
|
||||||
}
|
}
|
||||||
|
|
||||||
$general['refresh_score_total'] = Util::round($general['refresh_score_total'], -1);
|
$general['connect'] = Util::round($general['connect'], -1);
|
||||||
|
|
||||||
$imageTemp = GetImageURL($general['imgsvr']);
|
$imageTemp = GetImageURL($general['imgsvr']);
|
||||||
echo "
|
echo "
|
||||||
@@ -182,7 +172,6 @@ if ($gameStor->isunited) {
|
|||||||
data-general-strength='{$general['strength']}'
|
data-general-strength='{$general['strength']}'
|
||||||
data-general-intel='{$general['intel']}'
|
data-general-intel='{$general['intel']}'
|
||||||
data-is-npc='" . ($general['npc'] >= 2 ? 'true' : 'false') . "'
|
data-is-npc='" . ($general['npc'] >= 2 ? 'true' : 'false') . "'
|
||||||
data-npc-type='{$general['npc']}'
|
|
||||||
>
|
>
|
||||||
<td align=center><img class='generalIcon' width='64' height='64' src='{$imageTemp}/{$general['picture']}'></img></td>
|
<td align=center><img class='generalIcon' width='64' height='64' src='{$imageTemp}/{$general['picture']}'></img></td>
|
||||||
<td align=center>$name</td>
|
<td align=center>$name</td>
|
||||||
@@ -200,8 +189,8 @@ if ($gameStor->isunited) {
|
|||||||
<td align=center>$strength</td>
|
<td align=center>$strength</td>
|
||||||
<td align=center>$intel</td>
|
<td align=center>$intel</td>
|
||||||
<td align=center>{$general['killturn']}</td>
|
<td align=center>{$general['killturn']}</td>
|
||||||
<td align=center>" . $general['refresh_score_total'] ?? 0;
|
<td align=center>{$general['connect']}";
|
||||||
echo "<br>【" . getRefreshScoreText($general['refresh_score_total'] ?? 0) . "】</td>
|
echo "<br>【" . getConnect($general['connect']) . "】</td>
|
||||||
</tr>";
|
</tr>";
|
||||||
}
|
}
|
||||||
echo "
|
echo "
|
||||||
|
|||||||
+23
-22
@@ -43,24 +43,23 @@ if ($scenarioIdx && key_exists($scenarioIdx, $scenarioList[$seasonIdx] ?? [])) {
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=500" />
|
<meta name="viewport" content="width=1136" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 명예의 전당</title>
|
<title><?= UniqueConst::$serverName ?>: 명예의 전당</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printCSS('css/hallOfFame.css') ?>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'hallOfFame']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'hallOfFame']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="container" class="bg0">
|
<table align=center width=1100 class='tb_layout bg0'>
|
||||||
<div class="row gx-0">
|
<tr>
|
||||||
<div class="col">명 예 의 전 당<br><?= closeButton() ?></div>
|
<td>명 예 의 전 당<br><?= closeButton() ?></td>
|
||||||
</div>
|
</tr>
|
||||||
<div class="row gx-0">
|
<tr>
|
||||||
<div class="col center">
|
<td>
|
||||||
시나리오 검색 : <select id="by_scenario" name="by_scenario">
|
시나리오 검색 : <select id="by_scenario" name="by_scenario">
|
||||||
<?php foreach ($scenarioList as $iterSeasonIdx => $subScenarioList) : ?>
|
<?php foreach ($scenarioList as $iterSeasonIdx => $subScenarioList) : ?>
|
||||||
<option data-season="<?= $iterSeasonIdx ?>" value="" <?= ($iterSeasonIdx == $seasonIdx && $scenarioIdx === null) ? "selected='selected'" : '' ?>>* 시즌 : <?= $iterSeasonIdx ?> 종합 *</option>
|
<option data-season="<?= $iterSeasonIdx ?>" value="" <?= ($iterSeasonIdx == $seasonIdx && $scenarioIdx === null) ? "selected='selected'" : '' ?>>* 시즌 : <?= $iterSeasonIdx ?> 종합 *</option>
|
||||||
@@ -70,8 +69,10 @@ if ($scenarioIdx && key_exists($scenarioIdx, $scenarioList[$seasonIdx] ?? [])) {
|
|||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
?>
|
?>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</td>
|
||||||
</div>
|
</tr>
|
||||||
|
</table>
|
||||||
|
<div style="margin:auto;width:1100px;">
|
||||||
<?php
|
<?php
|
||||||
$types = [
|
$types = [
|
||||||
'experience' => ['명 성', 'int'],
|
'experience' => ['명 성', 'int'],
|
||||||
@@ -112,8 +113,7 @@ if ($scenarioIdx && key_exists($scenarioIdx, $scenarioList[$seasonIdx] ?? [])) {
|
|||||||
|
|
||||||
$hallResult = array_map(function ($general) use ($typeValue, $ownerNameList) {
|
$hallResult = array_map(function ($general) use ($typeValue, $ownerNameList) {
|
||||||
$aux = Json::decode($general['aux']);
|
$aux = Json::decode($general['aux']);
|
||||||
/** @var array $general */
|
$general += $aux;
|
||||||
$general = array_merge($aux, $general);
|
|
||||||
|
|
||||||
if (key_exists($general['owner'], $ownerNameList)) {
|
if (key_exists($general['owner'], $ownerNameList)) {
|
||||||
$general['ownerName'] = $ownerNameList[$general['owner']];
|
$general['ownerName'] = $ownerNameList[$general['owner']];
|
||||||
@@ -121,11 +121,10 @@ if ($scenarioIdx && key_exists($scenarioIdx, $scenarioList[$seasonIdx] ?? [])) {
|
|||||||
|
|
||||||
if (!key_exists('bgColor', $general)) {
|
if (!key_exists('bgColor', $general)) {
|
||||||
if (!key_exists('color', $general)) {
|
if (!key_exists('color', $general)) {
|
||||||
$color = GameConst::$basecolor4;
|
$general['bgColor'] = GameConst::$basecolor4;
|
||||||
} else {
|
} else {
|
||||||
$color = $general['color'];
|
$general['bgColor'] = $general['color'];
|
||||||
}
|
}
|
||||||
$general['bgColor'] = $color;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!key_exists('fgColor', $general)) {
|
if (!key_exists('fgColor', $general)) {
|
||||||
@@ -157,13 +156,15 @@ if ($scenarioIdx && key_exists($scenarioIdx, $scenarioList[$seasonIdx] ?? [])) {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
<div class="row gx-0">
|
|
||||||
<div class="col"><?= closeButton() ?></div>
|
|
||||||
</div>
|
|
||||||
<div class="row bg0 gx-0">
|
|
||||||
<div class="col bg0"><?= banner() ?></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<table align=center width=1100 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
@@ -0,0 +1,229 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
$btn = Util::getReq('btn');
|
||||||
|
$yearMonth = Util::getReq('yearmonth', 'int');
|
||||||
|
$serverID = Util::getReq('serverID', 'string', null);
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
if (!$serverID) {
|
||||||
|
$serverID = UniqueConst::$serverID;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($serverID === UniqueConst::$serverID) {
|
||||||
|
increaseRefresh("연감", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
$admin = $gameStor->getValues(['startyear', 'year', 'month', 'map_theme']);
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner = %i', $userID);
|
||||||
|
|
||||||
|
$con = checkLimit($me['con']);
|
||||||
|
if ($con >= 2) {
|
||||||
|
printLimitMsg($me['turntime']);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[$s_year, $s_month] = $db->queryFirstList('SELECT year, month FROM ng_history WHERE server_id = %s ORDER BY year ASC, month ASC LIMIT 1', $serverID);
|
||||||
|
$s = Util::joinYearMonth($s_year, $s_month);
|
||||||
|
|
||||||
|
if ($s_year === null) {
|
||||||
|
echo '인자 에러';
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
[$e_year, $e_month] = $db->queryFirstList('SELECT year, month FROM ng_history WHERE server_id = %s ORDER BY year DESC, month DESC LIMIT 1', $serverID);
|
||||||
|
$e = Util::joinYearMonth($e_year, $e_month);
|
||||||
|
|
||||||
|
if ($serverID !== UniqueConst::$serverID) {
|
||||||
|
$mapTheme = $db->queryFirstField('SELECT map FROM ng_games WHERE server_id=%s', $serverID) ?: 'che';
|
||||||
|
} else {
|
||||||
|
$mapTheme = $admin['map_theme'] ?? 'che';
|
||||||
|
}
|
||||||
|
|
||||||
|
//FIXME: $yearmonth가 올바르지 않을 경우에 처리가 필요.
|
||||||
|
if ($serverID !== UniqueConst::$serverID && !$yearMonth) {
|
||||||
|
$yearMonth = $s;
|
||||||
|
} else if (!$yearMonth) {
|
||||||
|
$yearMonth = Util::joinYearMonth($admin['year'], $admin['month']);
|
||||||
|
} else {
|
||||||
|
if ($btn == "◀◀ 이전달") {
|
||||||
|
$yearMonth -= 1;
|
||||||
|
} elseif ($btn == "다음달 ▶▶") {
|
||||||
|
$yearMonth += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$isCurrent = false;
|
||||||
|
if ($yearMonth < $s) {
|
||||||
|
$yearMonth = $s;
|
||||||
|
}
|
||||||
|
if ($yearMonth > $e) {
|
||||||
|
$isCurrent = true;
|
||||||
|
$yearMonth = $e + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
[$year, $month] = Util::parseYearMonth($yearMonth);
|
||||||
|
|
||||||
|
function getHistory($serverID, $year, $month):array{
|
||||||
|
$db = DB::db();
|
||||||
|
$history = $db->queryFirstRow('SELECT * FROM ng_history WHERE server_id = %s AND year = %i AND month = %i', $serverID, $year, $month);
|
||||||
|
$history['global_history'] = Json::decode($history['global_history']);
|
||||||
|
$history['global_action'] = Json::decode($history['global_action']);
|
||||||
|
$history['nations'] = Json::decode($history['nations']);
|
||||||
|
return $history;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if($isCurrent){
|
||||||
|
$history = getCurrentHistory();
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
$history = getHistory($serverID, $year, $month);
|
||||||
|
}
|
||||||
|
|
||||||
|
$nations = $history['nations'];
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 연감</title>
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printJS("js/map/theme_{$mapTheme}.js") ?>
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printCSS('css/map.css') ?>
|
||||||
|
<?= WebUtil::printCSS('css/history.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', ['common', 'history']) ?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var startYear = <?= $s_year ?>;
|
||||||
|
var startMonth = <?= $s_month ?>;
|
||||||
|
var lastYear = <?= $e_year ?>;
|
||||||
|
var lastMonth = <?= $e_month ?>;
|
||||||
|
var selectYear = <?= $year ?>;
|
||||||
|
var selectMonth = <?= $month ?>;
|
||||||
|
var nations = <?= $nations ? JSON::encode($history['nations']) : '{}' ?>;
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>연 감<br><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<form name=form1 method=post>
|
||||||
|
연월 선택 :
|
||||||
|
<input type=submit name=btn value="◀◀ 이전달">
|
||||||
|
<select id='yearmonth' name=yearmonth size=1>
|
||||||
|
<option selected='selected'><?= $year ?>년 <?= $month ?>월</option>
|
||||||
|
<option><?= $e_year ?>년 12월 (현재)</option>
|
||||||
|
</select>
|
||||||
|
<input type=submit name=btn value='조회하기'>
|
||||||
|
<input type=submit name=btn value="다음달 ▶▶">
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 height=520 class='tb_layout bg0'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan=5 align=center class='bg1'>중 원 지 도</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr height=520>
|
||||||
|
<td width=698>
|
||||||
|
<?= getMapHtml($mapTheme) ?>
|
||||||
|
</td>
|
||||||
|
<td id='nation_list_frame'>
|
||||||
|
<table id='nation_list'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width=130>국명</th>
|
||||||
|
<th width=70>국력</th>
|
||||||
|
<th width=45>장수</th>
|
||||||
|
<th width=45>속령</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach ($nations as $nation) : ?>
|
||||||
|
<tr>
|
||||||
|
<td><span style='color:<?= newColor($nation['color']) ?>;background-color:<?= $nation['color'] ?>'><?= $nation['name'] ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format($nation['power']) ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format($nation['gennum']) ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format(count($nation['cities'] ?? [])) ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</tbody>
|
||||||
|
<tfoot></tfoot>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th colspan=5 align=center class='bg1'>중 원 정 세</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=5 valign=top>
|
||||||
|
<?= formatHistoryToHTML($history['global_history']) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th colspan=5 align=center class='bg1'>장 수 동 향</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=5 valign=top>
|
||||||
|
<?= formatHistoryToHTML($history['global_action']) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<script>
|
||||||
|
window.serverNick = '<?= DB::prefix() ?>';
|
||||||
|
window.serverID = '<?= UniqueConst::$serverID ?>';
|
||||||
|
<?php if($isCurrent): ?>
|
||||||
|
reloadWorldMap({
|
||||||
|
showMe: false,
|
||||||
|
neutralView: true,
|
||||||
|
useCachedMap: true,
|
||||||
|
});
|
||||||
|
<?php else: ?>
|
||||||
|
reloadWorldMap({
|
||||||
|
targetJson: 'j_map_history.php?year=<?= $year ?>&month=<?= $month ?>&serverID=<?= $serverID ?>',
|
||||||
|
showMe: false,
|
||||||
|
neutralView: true,
|
||||||
|
useCachedMap: false,
|
||||||
|
year: <?= $year ?>,
|
||||||
|
month: <?= $month ?>,
|
||||||
|
});
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
+5
-10
@@ -13,13 +13,10 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
$gameStor->cacheValues(['killturn', 'autorun_user', 'turnterm']);
|
$gameStor->cacheValues(['killturn', 'autorun_user', 'turnterm']);
|
||||||
increaseRefresh("세력일람", 2);
|
increaseRefresh("세력일람", 2);
|
||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$me = $db->queryFirstRow('SELECT con, turntime FROM general WHERE owner=%i', $userID);
|
||||||
'SELECT refresh_score, turntime FROM `general`
|
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner=%i', $userID
|
|
||||||
);
|
|
||||||
|
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
$con = checkLimit($me['con']);
|
||||||
if ($limitState >= 2) {
|
if ($con >= 2) {
|
||||||
printLimitMsg($me['turntime']);
|
printLimitMsg($me['turntime']);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
@@ -29,14 +26,12 @@ if ($limitState >= 2) {
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 세력일람</title>
|
<title><?= UniqueConst::$serverName ?>: 세력일람</title>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'extKingdoms']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'extKingdoms']) ?>
|
||||||
<?= WebUtil::printStaticValues($gameStor->getValues(['killturn', 'autorun_user', 'turnterm'])) ?>
|
<?= WebUtil::printStaticValues($gameStor->getValues(['killturn', 'autorun_user', 'turnterm'])) ?>
|
||||||
</head>
|
</head>
|
||||||
@@ -116,7 +111,7 @@ if ($limitState >= 2) {
|
|||||||
}
|
}
|
||||||
$chief = $chiefs[$chiefLevel] ?? ['name' => '-', 'npc' => 0];
|
$chief = $chiefs[$chiefLevel] ?? ['name' => '-', 'npc' => 0];
|
||||||
$officerLevelText = getOfficerLevelText($chiefLevel, $nation['level']);
|
$officerLevelText = getOfficerLevelText($chiefLevel, $nation['level']);
|
||||||
$chiefText = formatName($chief['name'], $chief['npc']);
|
$chiefText = getColoredName($chief['name'], $chief['npc']);
|
||||||
echo "<td class='center bg1'>{$officerLevelText}</td>
|
echo "<td class='center bg1'>{$officerLevelText}</td>
|
||||||
<td class='center'>{$chiefText}</td>";
|
<td class='center'>{$chiefText}</td>";
|
||||||
}
|
}
|
||||||
@@ -183,7 +178,7 @@ if ($limitState >= 2) {
|
|||||||
<tr>
|
<tr>
|
||||||
<td colspan=5> 장수 일람 : ";
|
<td colspan=5> 장수 일람 : ";
|
||||||
foreach ($nations[0]['generals'] as $general) {
|
foreach ($nations[0]['generals'] as $general) {
|
||||||
$generalText = formatName($general['name'], $general['npc']);
|
$generalText = getColoredName($general['name'], $general['npc']);
|
||||||
echo "{$generalText}, ";
|
echo "{$generalText}, ";
|
||||||
}
|
}
|
||||||
echo "
|
echo "
|
||||||
|
|||||||
+1
-3
@@ -24,14 +24,12 @@ $sel[$type] = "selected";
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 빙의일람</title>
|
<title><?= UniqueConst::$serverName ?>: 빙의일람</title>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common']) ?>
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -113,7 +111,7 @@ $sel[$type] = "selected";
|
|||||||
</tr>
|
</tr>
|
||||||
<?php foreach ($generalList as $general) : ?>
|
<?php foreach ($generalList as $general) : ?>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center><?= formatName($general['name'], $general['npc']) ?></td>
|
<td align=center><?= getColoredName($general['name'], $general['npc']) ?></td>
|
||||||
<td align=center><?= $general['owner_name'] ?></td>
|
<td align=center><?= $general['owner_name'] ?></td>
|
||||||
<td align=center>Lv <?= $general['explevel'] ?></td>
|
<td align=center>Lv <?= $general['explevel'] ?></td>
|
||||||
<td align=center><?= $nationName[$general['nation']] ?></td>
|
<td align=center><?= $nationName[$general['nation']] ?></td>
|
||||||
|
|||||||
+34
-35
@@ -2,30 +2,36 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use sammo\Enums\GeneralAccessLogColumn;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
|
||||||
|
|
||||||
increaseRefresh("갱신정보", 1);
|
increaseRefresh("갱신정보", 2);
|
||||||
|
|
||||||
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxrefresh', 'maxonline', 'recentTraffic']);
|
$admin = $gameStor->getValues(['year', 'month', 'refresh', 'maxrefresh', 'maxonline']);
|
||||||
|
|
||||||
$recentTraffic = $admin['recentTraffic'] ?? [];
|
$log = getRawFileLogRecent(__DIR__ . '/logs/' . UniqueConst::$serverID . '/_traffic.txt', 11, 100);
|
||||||
|
|
||||||
|
$date = [];
|
||||||
|
$year = [];
|
||||||
|
$month = [];
|
||||||
|
$refresh = [];
|
||||||
|
$online = [];
|
||||||
|
|
||||||
$curonline = getOnlineNum();
|
$curonline = getOnlineNum();
|
||||||
|
foreach ($log as $i => $value) {
|
||||||
$recentTraffic[] = [
|
$parse = Json::decode($value);
|
||||||
'year' => $admin['year'],
|
$date[$i] = $parse[0];
|
||||||
'month' => $admin['month'],
|
$year[$i] = $parse[1];
|
||||||
'refresh' => $admin['refresh'],
|
$month[$i] = $parse[2];
|
||||||
'online' => $curonline,
|
$refresh[$i] = $parse[3];
|
||||||
'date' => $clock->formatNow()
|
$online[$i] = $parse[4];
|
||||||
];
|
}
|
||||||
|
$year[] = $admin['year'];
|
||||||
|
$month[] = $admin['month'];
|
||||||
|
$date[] = TimeUtil::now();
|
||||||
|
|
||||||
if ($admin['maxrefresh'] == 0) {
|
if ($admin['maxrefresh'] == 0) {
|
||||||
$admin['maxrefresh'] = 1;
|
$admin['maxrefresh'] = 1;
|
||||||
@@ -46,7 +52,6 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
<head>
|
<head>
|
||||||
<title><?= UniqueConst::$serverName ?>: 트래픽정보</title>
|
<title><?= UniqueConst::$serverName ?>: 트래픽정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -78,7 +83,6 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common']) ?>
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -99,13 +103,13 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
foreach ($recentTraffic as $trafficItem) {
|
$refresh[] = $admin['refresh'];
|
||||||
$value = $trafficItem['refresh'];
|
foreach ($refresh as $i => $value) {
|
||||||
$w = round($value / $admin['maxrefresh'] * 100, 1);
|
$w = round($value / $admin['maxrefresh'] * 100, 1);
|
||||||
$color = getTrafficColor($w);
|
$color = getTrafficColor($w);
|
||||||
$dt = substr($trafficItem['date'], 11, 5); ?>
|
$dt = substr($date[$i], 11, 5); ?>
|
||||||
<tr height=30>
|
<tr height=30>
|
||||||
<td width=100 align=center><?= $trafficItem['year'] ?>년 <?= $trafficItem['month'] ?>월</td>
|
<td width=100 align=center><?= $year[$i] ?>년 <?= $month[$i] ?>월</td>
|
||||||
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
||||||
<td width=2 align=center class='bg1'></td>
|
<td width=2 align=center class='bg1'></td>
|
||||||
<td width=320>
|
<td width=320>
|
||||||
@@ -140,13 +144,13 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
foreach ($recentTraffic as $trafficItem) {
|
$online[] = $curonline;
|
||||||
$value = $trafficItem['online'];
|
foreach ($online as $i => $value) {
|
||||||
$w = round($value / $admin['maxonline'] * 100, 1);
|
$w = round($value / $admin['maxonline'] * 100, 1);
|
||||||
$color = getTrafficColor($w);
|
$color = getTrafficColor($w);
|
||||||
$dt = substr($trafficItem['date'], 11, 5); ?>
|
$dt = substr($date[$i], 11, 5); ?>
|
||||||
<tr height=30>
|
<tr height=30>
|
||||||
<td width=100 align=center><?= $trafficItem['year'] ?>년 <?= $trafficItem['month'] ?>월</td>
|
<td width=100 align=center><?= $year[$i] ?>년 <?= $month[$i] ?>월</td>
|
||||||
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
<td width=60 align=center class='bg2'><?= $dt ?></td>
|
||||||
<td width=2 align=center class='bg1'></td>
|
<td width=2 align=center class='bg1'></td>
|
||||||
<td width=320>
|
<td width=320>
|
||||||
@@ -181,24 +185,19 @@ if ($admin['maxonline'] < $curonline) {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
$totalRefresh = [
|
$max_refresh = $db->queryFirstRow('SELECT sum(refresh) as refresh, sum(`connect`) as `connect` from general');
|
||||||
...$db->queryFirstRow('SELECT sum(`refresh`) as `refresh`, sum(`refresh_score_total`) as `refresh_score_total` from general_access_log'),
|
$max_refresh['name'] = '접속자 총합';
|
||||||
'name' => '접속자 총합'
|
|
||||||
];
|
|
||||||
|
|
||||||
$top5Refresh = $db->query(
|
$refresh_result = array_merge([$max_refresh], $db->query('SELECT `name`,refresh,`connect` FROM general ORDER BY refresh DESC LIMIT 5'));
|
||||||
'SELECT `name`, `log`.`refresh`, `refresh_score_total` FROM `general_access_log` AS `log`
|
|
||||||
INNER JOIN `general` ON `log`.`general_id` = `general`.`no` ORDER BY `log`.`refresh` DESC LIMIT 5'
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach (array_merge([$totalRefresh], $top5Refresh) as $i => $user) {
|
foreach ($refresh_result as $i => $user) {
|
||||||
$w = round($user['refresh'] / max(1, $totalRefresh['refresh']) * 100, 1);
|
$w = round($user['refresh'] / max(1, $max_refresh['refresh']) * 100, 1);
|
||||||
$w2 = round(100 - $w, 1);
|
$w2 = round(100 - $w, 1);
|
||||||
$color = getTrafficColor($w);
|
$color = getTrafficColor($w);
|
||||||
?>
|
?>
|
||||||
<tr>
|
<tr>
|
||||||
<td width=98 align=center><?= $user['name'] ?></td>
|
<td width=98 align=center><?= $user['name'] ?></td>
|
||||||
<td width=98 align=center><?= $user['refresh_score_total'] ?>(<?= $user['refresh'] ?>)</td>
|
<td width=98 align=center><?= $user['connect'] ?>(<?= $user['refresh'] ?>)</td>
|
||||||
<td width=798>
|
<td width=798>
|
||||||
<?php if ($w == 0) : ?>
|
<?php if ($w == 0) : ?>
|
||||||
<?php elseif ($w < 10) : ?>
|
<?php elseif ($w < 10) : ?>
|
||||||
|
|||||||
+434
@@ -0,0 +1,434 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
increaseRefresh("설문조사", 1);
|
||||||
|
|
||||||
|
$isVoteAdmin = in_array('vote', $session->acl[DB::prefix()] ?? []);
|
||||||
|
$isVoteAdmin = $isVoteAdmin || $session->userGrade >= 5;
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,vote from general where owner=%i', $userID);
|
||||||
|
|
||||||
|
$admin = $gameStor->getValues(['develcost', 'voteopen', 'vote_title', 'vote', 'votecomment']);
|
||||||
|
$vote_title = $admin['vote_title'] ?? '-';
|
||||||
|
$vote = $admin['vote'] ?: ['-'];
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 설문조사</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<style>
|
||||||
|
.little_bar {
|
||||||
|
float: left;
|
||||||
|
position: relative;
|
||||||
|
height: 17px;
|
||||||
|
line-height: 17px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
|
<script type="text/javascript">
|
||||||
|
function captureKey(e) {
|
||||||
|
if (e.keyCode == 13 && e.srcElement.type == 'text') {
|
||||||
|
form1.btn.value = '댓글';
|
||||||
|
form1.btn.click();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>설 문 조 사<br><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<form name=form1 action=c_vote.php method=post>
|
||||||
|
<tr>
|
||||||
|
<td colspan=3 align=center class='bg2'>
|
||||||
|
<font size=5>설 문 조 사 (<?= $admin['develcost'] * 5 ?>금과 추첨으로 유니크템 증정!)</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
if ($isVoteAdmin) {
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td width=48 align=center><input type=submit name=btn value='알림'></td>
|
||||||
|
<td width=98 align=center><input type=submit name=btn value='수정'></td>
|
||||||
|
<td width=848 align=left><input type=text name=title style=width:848px;></td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
$vote_title = Tag2Code($vote_title);
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td colspan=2 width=148 align=center class='bg1'>제 목</td>
|
||||||
|
<td width=848 align=left> {$vote_title}</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
|
||||||
|
$voteCount = $db->queryFirstField('SELECT count(no) FROM general WHERE vote>0 AND npc<2');
|
||||||
|
$allCount = $db->queryFirstField('SELECT count(no) FROM general WHERE npc<2');
|
||||||
|
|
||||||
|
$percentage = round($voteCount / $allCount * 100, 1);
|
||||||
|
|
||||||
|
$voteTypeCount = count($vote);
|
||||||
|
for ($i = 1; $i < $voteTypeCount; $i++) {
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td width=48 align=center style=color:" . getNewColor($i) . "; bgcolor=" . getVoteColor($i) . ">{$i}.</td>
|
||||||
|
<td width=98 align=center>
|
||||||
|
";
|
||||||
|
if ($me['vote'] == 0 && $me['no'] > 0) {
|
||||||
|
echo "
|
||||||
|
<input type=radio name=sel value={$i}>
|
||||||
|
";
|
||||||
|
} elseif ($admin['voteopen'] >= 1 || $isVoteAdmin) {
|
||||||
|
$vCount = $db->queryFirstField('SELECT count(no) FROM general WHERE vote=%i', $i);
|
||||||
|
|
||||||
|
$per = @round($vCount / $voteCount * 100, 1);
|
||||||
|
echo "{$vCount} 표 ({$per}%)";
|
||||||
|
} else {
|
||||||
|
echo "추후공개";
|
||||||
|
}
|
||||||
|
$vote[$i] = Tag2Code($vote[$i]);
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
<td align=left> {$vote[$i]}</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
";
|
||||||
|
if ($me['vote'] == 0 && $me['no'] > 0) {
|
||||||
|
echo "
|
||||||
|
<td align=center>투표</td>
|
||||||
|
<td align=center><input type=submit name=btn value='투표'></td>
|
||||||
|
";
|
||||||
|
} else {
|
||||||
|
echo "
|
||||||
|
<td colspan=2 align=center>결산</td>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
<td align=left> 투표율 : {$voteCount} / {$allCount} ({$percentage} %)</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
|
||||||
|
if ($isVoteAdmin) {
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td align=center><input type=submit name=btn value='리셋'></td>
|
||||||
|
<td align=center><input type=submit name=btn value='추가'></td>
|
||||||
|
<td align=left><input type=text name=str style=width:848px;></td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($admin['votecomment']) {
|
||||||
|
$comment = $admin['votecomment'];
|
||||||
|
$commentCount = count($comment);
|
||||||
|
} else {
|
||||||
|
$commentCount = 0;
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=4 align=center class='bg1'>댓 글</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
for ($i = 0; $i < $commentCount; $i++) {
|
||||||
|
$cmt = $comment[$i];
|
||||||
|
$cmt[2] = Tag2Code($cmt[2]);
|
||||||
|
$j = $i + 1;
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td width=28 align=center>{$j}.</td>
|
||||||
|
<td width=130 align=center>{$cmt[0]}</td>
|
||||||
|
<td width=130 align=center>{$cmt[1]}</td>
|
||||||
|
<td width=712 align=left> {$cmt[2]}</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
if ($me['no'] > 0) {
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td width=158 colspan=2 align=center>-</td>
|
||||||
|
<td width=130 align=center><input type=submit name=btn value='댓글'></td>
|
||||||
|
<td align=left><input type=text name=comment maxlength=60 style=width:700px; onkeydown='return captureKey(event)'></td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=3 align=center class='bg2'>
|
||||||
|
<font size=5>
|
||||||
|
전 체 통 계
|
||||||
|
<?php
|
||||||
|
if ($isVoteAdmin) {
|
||||||
|
echo "
|
||||||
|
<input type=submit name=btn value='숨김'>
|
||||||
|
<input type=submit name=btn value='전체통계만'>
|
||||||
|
<input type=submit name=btn value='전부'>";
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
</font></td></tr>";
|
||||||
|
|
||||||
|
if ($admin['voteopen'] >= 1 || $isVoteAdmin) {
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td width=130 align=center>전 체</td>
|
||||||
|
<td width=128 align=center>{$voteCount} / {$allCount} ({$percentage} %)</td>
|
||||||
|
<td width=742>
|
||||||
|
";
|
||||||
|
|
||||||
|
$memCount = max(1, $db->queryFirstField('SELECT count(`no`) FROM general WHERE npc<2'));
|
||||||
|
|
||||||
|
$totalVote = [];
|
||||||
|
$nationVoteCount = [];
|
||||||
|
$nationVote = [];
|
||||||
|
|
||||||
|
foreach ($db->query("SELECT nation, vote, count(`no`) as cnt FROM general WHERE npc<2 GROUP BY nation, vote") as $row) {
|
||||||
|
$nation = $row['nation'];
|
||||||
|
$ownVote = $row['vote'];
|
||||||
|
$cnt = $row['cnt'];
|
||||||
|
|
||||||
|
if (!isset($totalVote[$ownVote])) {
|
||||||
|
$totalVote[$ownVote] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($nationVoteCount[$nation])) {
|
||||||
|
$nationVoteCount[$nation] = 0;
|
||||||
|
$nationVote[$nation] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($nationVote[$nation][$ownVote])) {
|
||||||
|
$nationVote[$nation][$ownVote] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
$totalVote[$ownVote] += $cnt;
|
||||||
|
$nationVoteCount[$nation] += $cnt;
|
||||||
|
$nationVote[$nation][$ownVote] += $cnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
$totalPer = 0;
|
||||||
|
for ($i = 0; $i < $voteTypeCount; $i++) {
|
||||||
|
$per = round(($totalVote[$i] ?? 0) * 100 / $memCount, 1);
|
||||||
|
if ($i == $voteTypeCount - 1) {
|
||||||
|
$per = 100 - $totalPer;
|
||||||
|
} else {
|
||||||
|
$totalPer += $per;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// if($per < 5) { $vote['cnt'] = " "; }
|
||||||
|
?>
|
||||||
|
<?php if ($per == 0) : ?>
|
||||||
|
<?php elseif ($per < 10) : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($i) ?>;background-color:<?= getVoteColor($i) ?>;'></div>
|
||||||
|
<?php else : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($i) ?>;background-color:<?= getVoteColor($i) ?>;'><?= $totalVote[$i] ?></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($admin['voteopen'] >= 2 || $isVoteAdmin) {
|
||||||
|
$memCount = $db->queryFirstField('SELECT count(no) FROM general WHERE nation=0 AND npc <2');
|
||||||
|
if ($memCount == 0) {
|
||||||
|
$memCount = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($nationVoteCount[0])) {
|
||||||
|
$nationVoteCount[0] = 0;
|
||||||
|
}
|
||||||
|
$percentage = round($nationVoteCount[0] / $memCount * 100, 1);
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td align=center bgcolor=black>재 야</td>
|
||||||
|
<td align=center>{$nationVoteCount[0]} / {$memCount} ({$percentage} %)</td>
|
||||||
|
<td>
|
||||||
|
";
|
||||||
|
|
||||||
|
$totalPer = 0;
|
||||||
|
for ($i = 0; $i < $voteTypeCount; $i++) {
|
||||||
|
$per = round(Util::array_get($nationVote[0][$i], 0) / $memCount * 100, 1);
|
||||||
|
if ($i == $voteTypeCount - 1) {
|
||||||
|
$per = 100 - $totalPer;
|
||||||
|
} else {
|
||||||
|
$totalPer += $per;
|
||||||
|
}
|
||||||
|
// if($per < 5) { $vote['cnt'] = " "; }
|
||||||
|
?>
|
||||||
|
<?php if ($per == 0) : ?>
|
||||||
|
<?php elseif ($per < 10) : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($i) ?>;background-color:<?= getVoteColor($i) ?>;'></div>
|
||||||
|
<?php else : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($i) ?>;background-color:<?= getVoteColor($i) ?>;'><?= $nationVote[0][$i] ?></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
|
||||||
|
foreach ($db->query('SELECT nation,color,name,gennum from nation order by gennum desc') as $i => $nation) {
|
||||||
|
$memCount = $db->queryFirstField('SELECT count(no) FROM general WHERE nation=%i AND npc<2', $nation['nation']);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
$voteCount = $nationVoteCount[$nation['nation']] ?? 0;
|
||||||
|
if ($memCount == 0) {
|
||||||
|
$percentage = 100;
|
||||||
|
} else {
|
||||||
|
$percentage = round($voteCount / $memCount * 100, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<tr>
|
||||||
|
<td align=center style=color:" . newColor($nation['color']) . "; bgcolor={$nation['color']}>{$nation['name']}</td>
|
||||||
|
<td align=center>{$voteCount} / {$memCount} ({$percentage} %)</td>
|
||||||
|
<td align=center>
|
||||||
|
";
|
||||||
|
|
||||||
|
$totalPer = 0;
|
||||||
|
for ($k = 0; $k < $voteTypeCount; $k++) {
|
||||||
|
if ($memCount == 0) {
|
||||||
|
$per = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$per = round(($nationVote[$nation['nation']][$k] ?? 0) / $memCount * 100, 1);
|
||||||
|
|
||||||
|
if ($i == $voteTypeCount - 1) {
|
||||||
|
$per = 100 - $totalPer;
|
||||||
|
} else {
|
||||||
|
$totalPer += $per;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if($per < 5) { $vote['cnt'] = " "; }
|
||||||
|
?>
|
||||||
|
<?php if ($per == 0) : ?>
|
||||||
|
<?php elseif ($per < 10) : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($k) ?>;background-color:<?= getVoteColor($k) ?>;'></div>
|
||||||
|
<?php else : ?>
|
||||||
|
<div class='little_bar' style='width:<?= $per ?>%;color:<?= getNewColor($k) ?>;background-color:<?= getVoteColor($k) ?>;'><?= $nationVote[$nation['nation']][$k] ?? 0 ?></div>
|
||||||
|
<?php endif; ?>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
function getVoteColor($type)
|
||||||
|
{
|
||||||
|
if ($type > 0) {
|
||||||
|
$type = (($type - 1) % 7) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
default:
|
||||||
|
case 0:
|
||||||
|
$color = "black";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$color = "red";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$color = "orange";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$color = "yellow";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$color = "green";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
$color = "blue";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
$color = "navy";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
$color = "purple";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $color;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNewColor($type)
|
||||||
|
{
|
||||||
|
if ($type > 0) {
|
||||||
|
$type = (($type - 1) % 7) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($type) {
|
||||||
|
case 2:
|
||||||
|
$color = "black";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$color = "black";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$color = "white";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $color;
|
||||||
|
}
|
||||||
+1
-6
@@ -5,9 +5,4 @@ namespace sammo;
|
|||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$eParams = $_GET;
|
APIHelper::launch(dirname(__FILE__), $_GET['path']??null);
|
||||||
if(key_exists('path', $eParams)){
|
|
||||||
unset($eParams['path']);
|
|
||||||
}
|
|
||||||
|
|
||||||
APIHelper::launch(dirname(__FILE__), $_GET['path']??'', $eParams, true);
|
|
||||||
@@ -0,0 +1,306 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
$msg = Util::getReq('msg');
|
||||||
|
$msg2 = Util::getReq('msg2');
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
increaseRefresh("거래장", 2);
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,special,con,turntime from general where owner=%i', $userID);
|
||||||
|
|
||||||
|
$con = checkLimit($me['con']);
|
||||||
|
if ($con >= 2) {
|
||||||
|
printLimitMsg($me['turntime']);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$tradeCount = $db->queryFirstField('SELECT count(no) FROM auction WHERE no1=%i', $me['no']);
|
||||||
|
$bidCount = $db->queryFirstField('SELECT count(no) FROM auction where no2=%i', $me['no']);
|
||||||
|
|
||||||
|
$btCount = $tradeCount + $bidCount;
|
||||||
|
|
||||||
|
if ($session->userGrade >= 5 || $btCount < 1) {
|
||||||
|
$btn = "submit";
|
||||||
|
} else {
|
||||||
|
$btn = "hidden";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($msg == "") {
|
||||||
|
$msg = "-";
|
||||||
|
}
|
||||||
|
if ($msg2 == "") {
|
||||||
|
$msg2 = "-";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 거래장</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>거 래 장<br><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg2'>
|
||||||
|
<font color=orange size=6><b>거 래 장</b></font><input type=button value='갱신' onclick="location.replace('b_auction.php')">
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<form method=post action=c_auction.php>
|
||||||
|
<tr>
|
||||||
|
<td colspan=11 align=center bgcolor=orange>
|
||||||
|
<font size=5>팝 니 다</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr align=center class='bg1'>
|
||||||
|
<td width=68>거래번호</td>
|
||||||
|
<td width=48>선택</td>
|
||||||
|
<td width=98>판매자</td>
|
||||||
|
<td width=118>물품</td>
|
||||||
|
<td width=88>수량</td>
|
||||||
|
<td width=88>시작판매가</td>
|
||||||
|
<td width=88>현재판매가</td>
|
||||||
|
<td width=88>즉시판매가</td>
|
||||||
|
<td width=48>단가</td>
|
||||||
|
<td width=98>구매 예정자</td>
|
||||||
|
<td width=148>거래종료</td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
$chk = 0;
|
||||||
|
foreach ($db->query('SELECT * from auction where type=0 order by expire') as $auction) {
|
||||||
|
$radio = "";
|
||||||
|
$alert = "";
|
||||||
|
$alert2 = "";
|
||||||
|
if ($auction['no1'] == $me['no']) {
|
||||||
|
$radio = " disabled";
|
||||||
|
} elseif ($auction['no2'] > 0 && $auction['amount'] * 2 <= $auction['value']) {
|
||||||
|
$radio = " disabled";
|
||||||
|
$alert = "<font color=red>";
|
||||||
|
$alert2 = "</font>";
|
||||||
|
} elseif ($auction['no2'] > 0 && $auction['topv'] <= $auction['value']) {
|
||||||
|
$radio = " disabled";
|
||||||
|
$alert = "<font color=red>";
|
||||||
|
$alert2 = "</font>";
|
||||||
|
} elseif ($chk == 0) {
|
||||||
|
$radio = " checked";
|
||||||
|
$chk = 1;
|
||||||
|
}
|
||||||
|
$pv = round($auction['value'] * 100 / $auction['amount']) / 100 + 0.001;
|
||||||
|
$pv = substr((string)$pv, 0, 4);
|
||||||
|
|
||||||
|
echo "
|
||||||
|
<tr align=center>
|
||||||
|
<td>{$auction['no']}</td>
|
||||||
|
<td><input type=radio name=sel value={$auction['no']}{$radio}></td>
|
||||||
|
<td>{$auction['name1']}</td>
|
||||||
|
<td>쌀</td>
|
||||||
|
<td>{$auction['amount']}</td>
|
||||||
|
<td>금 {$auction['cost']}</td>
|
||||||
|
<td>{$alert}금 {$auction['value']}{$alert2}</td>
|
||||||
|
<td>{$alert}금 {$auction['topv']}{$alert2}</td>
|
||||||
|
<td>{$alert}{$pv}{$alert2}</td>
|
||||||
|
<td>{$alert}{$auction['name2']}{$alert2}</td>
|
||||||
|
<td>{$auction['expire']}</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<tr height=25>
|
||||||
|
<td align=center class='bg1'>등록결과</td>
|
||||||
|
<td colspan=10><?= ConvertLog($msg) ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>입찰등록</td>
|
||||||
|
<td colspan=10>
|
||||||
|
지불할 금액: <input type=text style=color:white;background-color:black; size=6 maxlength=6 name=value>
|
||||||
|
<input type=<?= $btn ?> name=btn value='구매시도' onclick='return confirm("정말 입찰하시겠습니까?");'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>거래등록</td>
|
||||||
|
<td colspan=10>
|
||||||
|
종료: <input type=text style=color:white;background-color:black; size=2 maxlength=2 name=term value=12>턴 후
|
||||||
|
물품: 쌀
|
||||||
|
판매량: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=amount value=1000>
|
||||||
|
시작가: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=cost value=500>
|
||||||
|
즉구가: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=topv value=2000>
|
||||||
|
<input type=<?= $btn ?> name=btn value='판매' onclick='return confirm("정말 판매하시겠습니까?");'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=11>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 거래자가 판매(물품 판매, 금 수령), 입찰자가 구매(물품 구입, 금 지불).<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 1.00보다 높을수록 판매자 유리.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 1.00보다 낮을수록 입찰자 유리.<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<form method=post action=c_auction.php>
|
||||||
|
<tr>
|
||||||
|
<td colspan=11 align=center bgcolor=skyblue>
|
||||||
|
<font size=5>삽 니 다</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr align=center class='bg1'>
|
||||||
|
<td width=68>거래번호</td>
|
||||||
|
<td width=48>선택</td>
|
||||||
|
<td width=98>구매자</td>
|
||||||
|
<td width=118>물품</td>
|
||||||
|
<td width=88>수량</td>
|
||||||
|
<td width=88>시작구매가</td>
|
||||||
|
<td width=88>현재구매가</td>
|
||||||
|
<td width=88>즉시구매가</td>
|
||||||
|
<td width=48>단가</td>
|
||||||
|
<td width=98>판매 예정자</td>
|
||||||
|
<td width=148>거래종료</td>
|
||||||
|
</tr>
|
||||||
|
<?php
|
||||||
|
$chk = 0;
|
||||||
|
foreach ($db->query('SELECT * from auction where type=1 order by expire') as $auction) {
|
||||||
|
$radio = "";
|
||||||
|
$alert = "";
|
||||||
|
$alert2 = "";
|
||||||
|
if ($auction['no1'] == $me['no']) {
|
||||||
|
$radio = " disabled";
|
||||||
|
} elseif ($auction['no2'] > 0 && $auction['amount'] >= $auction['value'] * 2) {
|
||||||
|
$radio = " disabled";
|
||||||
|
$alert = "<font color=red>";
|
||||||
|
$alert2 = "</font>";
|
||||||
|
} elseif ($auction['no2'] > 0 && $auction['topv'] >= $auction['value']) {
|
||||||
|
$radio = " disabled";
|
||||||
|
$alert = "<font color=red>";
|
||||||
|
$alert2 = "</font>";
|
||||||
|
} elseif ($chk == 0) {
|
||||||
|
$radio = " checked";
|
||||||
|
$chk = 1;
|
||||||
|
}
|
||||||
|
$pv = round($auction['value'] * 100 / $auction['amount']) / 100 + 0.001;
|
||||||
|
$pv = substr((string)$pv, 0, 4);
|
||||||
|
echo "
|
||||||
|
<tr align=center>
|
||||||
|
<td>{$auction['no']}</td>
|
||||||
|
<td><input type=radio name=sel value={$auction['no']}{$radio}></td>
|
||||||
|
<td>{$auction['name1']}</td>
|
||||||
|
<td>쌀</td>
|
||||||
|
<td>{$auction['amount']}</td>
|
||||||
|
<td>금 {$auction['cost']}</td>
|
||||||
|
<td>{$alert}금 {$auction['value']}{$alert2}</td>
|
||||||
|
<td>{$alert}금 {$auction['topv']}{$alert2}</td>
|
||||||
|
<td>{$alert}{$pv}{$alert2}</td>
|
||||||
|
<td>{$alert}{$auction['name2']}{$alert2}</td>
|
||||||
|
<td>{$auction['expire']}</td>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<tr height=25>
|
||||||
|
<td align=center class='bg1'>등록결과</td>
|
||||||
|
<td colspan=10><?= ConvertLog($msg2) ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>입찰등록</td>
|
||||||
|
<td colspan=10>
|
||||||
|
수령할 금액: <input type=text style=color:white;background-color:black; size=6 maxlength=6 name=value>
|
||||||
|
<input type=<?= $btn ?> name=btn value='판매시도' onclick='return confirm("정말 입찰하시겠습니까?");'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>거래등록</td>
|
||||||
|
<td colspan=10>
|
||||||
|
종료: <input type=text style=color:white;background-color:black; size=2 maxlength=2 name=term value=12>턴 후
|
||||||
|
물품: 쌀
|
||||||
|
구입량: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=amount value=1000>
|
||||||
|
시작가: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=cost value=2000>
|
||||||
|
즉구가: <input type=text style=color:white;background-color:black; size=5 maxlength=5 name=topv value=500>
|
||||||
|
<input type=<?= $btn ?> name=btn value='구매' onclick='return confirm("정말 구매하시겠습니까?");'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=11>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 거래자가 구매(물품 구매, 금 지불), 입찰자가 판매(물품 판매, 금 수령).<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 1.00보다 낮을수록 구매자 유리.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 1.00보다 높을수록 입찰자 유리.<br>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg2'>
|
||||||
|
<font size=5>최 근 기 록</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<?= getAuctionLogRecent(20) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg2'>
|
||||||
|
<font size=5>도 움 말</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<font color=white size=2>
|
||||||
|
ㆍ판매거래는 거래자가 판매할 물품을 거래하면, 구입을 희망하는 사람이 현재가보다 높게 입찰하여 구입하는 방식입니다.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 쌀이 귀한 경우는 입찰자가 많아서 자연스레 단가가 오르게 됩니다. (해당 물품을 사려는 가격이 오름)<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 쌀이 흔한 경우는 초기 가격을 낮게 책정해야 판매가 가능할 겁니다.<br>
|
||||||
|
ㆍ구매거래는 거래자가 구입할 물품을 거래하면, 판매를 희망하는 사람이 현재가보다 낮게 입찰하여 판매하는 방식입니다.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 쌀이 흔한 경우는 입찰자가 많아서 자연스레 단가가 내리게 됩니다. (해당 물품을 팔려는 가격이 내림)<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 쌀이 귀한 경우는 초기 가격을 높게 책정해야 구입이 가능할 겁니다.<br>
|
||||||
|
ㆍ마감임박때 입찰하는 경우 입찰후 1턴 후로 종료시간이 연장됩니다.<br>
|
||||||
|
ㆍ즉시구매가로 입찰하는 경우 입찰후 1턴 후로 종료시간이 결정됩니다.<br>
|
||||||
|
ㆍ악용 방지를 위해 50% ~ 200%의 가격에서 거래시작이 가능합니다.<br>
|
||||||
|
ㆍ악용 방지를 위해 즉시판매가는 110% 이상, 즉시구매가는 90% 이하의 시세로 가능합니다.<br>
|
||||||
|
ㆍ악용 방지를 위해 즉시판매가는 시작판매가의 110% 이상, 즉시구매가는 시작구매가의 90% 이하로 가능합니다.<br>
|
||||||
|
ㆍ1인당 도합 1건의 거래와 입찰이 가능합니다.<br>
|
||||||
|
ㆍ기본금쌀 1000은 거래에 사용되지 못합니다.<br>
|
||||||
|
ㆍ유찰될 때는 거래 과실자에게 거래금의 1%가 벌금으로 부과됩니다.<br>
|
||||||
|
ㆍ<font color=magenta>10단위로 거래가 가능합니다. 1자리는 반올림 처리 됩니다.</font><br>
|
||||||
|
ㆍ<font color=red>★ 최고가 거래 ★</font> 혹은 <font color=red>★ 최저가 거래 ★</font> 는 암거래 및 악용의 가능성이니 감시 부탁드립니다.<br>
|
||||||
|
ㆍ거래와 입찰은 취소가 불가능하니 주의하세요!<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가는 금/쌀로 쌀1을 거래하기 위한 금의 양입니다.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 높으면(>1.00) 쌀이 비싸므로 판매가 이득입니다.<br>
|
||||||
|
ㆍ<font color=cyan>Hint</font>) 단가가 낮으면(<1.00) 금이 비싸므로 구매가 이득입니다.<br>
|
||||||
|
ㆍ즐거운 거래!
|
||||||
|
</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,217 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
$v = new Validator($_POST + $_GET);
|
||||||
|
$v->rule('required', 'gen')
|
||||||
|
->rule('integer', 'gen');
|
||||||
|
|
||||||
|
$btn = Util::getReq('btn');
|
||||||
|
$gen = Util::getReq('gen', 'int', 0);
|
||||||
|
$reqQueryType = Util::getReq('query_type', 'string', null);
|
||||||
|
|
||||||
|
// $queryTypeText, $reqArgType(0=>None, 1=>AdditionalColumn, 2=>rankVal, 3=>aux), $comp
|
||||||
|
$queryMap = [
|
||||||
|
'turntime' => ['최근턴', 0, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['turntime'] <=> $rhs['turntime']);
|
||||||
|
}],
|
||||||
|
'recent_war' => ['최근전투', 1, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['recent_war'] <=> $rhs['recent_war']);
|
||||||
|
}],
|
||||||
|
'name' => ['장수명', 0, function ($lhs, $rhs) {
|
||||||
|
if ($lhs['npc'] !== $rhs['npc']) {
|
||||||
|
return $lhs['npc'] <=> $rhs['npc'];
|
||||||
|
}
|
||||||
|
return $lhs['name'] <=> $rhs['name'];
|
||||||
|
}],
|
||||||
|
'warnum' => ['전투수', 2, function ($lhs, $rhs) {
|
||||||
|
return - ($lhs['warnum'] <=> $rhs['warnum']);
|
||||||
|
}]
|
||||||
|
];
|
||||||
|
|
||||||
|
if ($reqQueryType === null || !key_exists($reqQueryType, $queryMap)) {
|
||||||
|
$reqQueryType = Util::array_first_key($queryMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
increaseRefresh("감찰부", 2);
|
||||||
|
//전투 추진을 위해 갱신
|
||||||
|
TurnExecutionHelper::executeAllCommand();
|
||||||
|
$gameStor->resetCache();
|
||||||
|
|
||||||
|
$testGeneralNationID = $db->queryFirstField('SELECT nation FROM general WHERE no = %i', $gen);
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,nation,officer_level,con,turntime,belong,permission,penalty from general where owner=%i', $userID);
|
||||||
|
$nationID = $me['nation'];
|
||||||
|
|
||||||
|
$con = checkLimit($me['con']);
|
||||||
|
if ($con >= 2) {
|
||||||
|
printLimitMsg($me['turntime']);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$permission = checkSecretPermission($me);
|
||||||
|
if ($permission < 0) {
|
||||||
|
echo '국가에 소속되어있지 않습니다.';
|
||||||
|
die();
|
||||||
|
} else if ($permission < 1) {
|
||||||
|
echo "권한이 부족합니다. 수뇌부가 아니거나 사관년도가 부족합니다.";
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
//잘못된 접근
|
||||||
|
if ($testGeneralNationID != $nationID) {
|
||||||
|
$gen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($btn == '정렬하기') {
|
||||||
|
$gen = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[$queryTypeText, $reqArgType, $comp] = $queryMap[$reqQueryType];
|
||||||
|
if ($reqArgType === 0) {
|
||||||
|
$generalBasicList = $db->query('SELECT no, name, npc, turntime, officer_level FROM general WHERE nation = %i', $nationID);
|
||||||
|
} else if ($reqArgType === 1) {
|
||||||
|
$generalBasicList = $db->query('SELECT no, name, npc, turntime, officer_level, %b FROM general WHERE nation = %i', $reqQueryType, $nationID);
|
||||||
|
} else if ($reqArgType === 2) {
|
||||||
|
$generalBasicList = $db->query(
|
||||||
|
'SELECT no, name, npc, turntime, officer_level, value as %b
|
||||||
|
FROM general LEFT JOIN rank_data
|
||||||
|
ON general.no = rank_data.general_id
|
||||||
|
WHERE rank_data.type = %s AND general.nation = %i',
|
||||||
|
$reqQueryType,
|
||||||
|
$reqQueryType,
|
||||||
|
$nationID
|
||||||
|
);
|
||||||
|
} else if ($reqArgType === 3) {
|
||||||
|
$generalBasicList = array_map(function ($arr) {
|
||||||
|
$arr['aux'] = Json::decode($arr['aux']);
|
||||||
|
return $arr;
|
||||||
|
}, $db->query('SELECT no, name, npc, turntime, officer_level, aux FROM general WHERE nation = %i', $nationID));
|
||||||
|
} else {
|
||||||
|
throw new \sammo\MustNotBeReachedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
usort($generalBasicList, $comp);
|
||||||
|
|
||||||
|
if (!$gen) {
|
||||||
|
$gen = $generalBasicList[0]['no'];
|
||||||
|
}
|
||||||
|
$showGeneral = General::createGeneralObjFromDB($gen);
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 감찰부</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>감 찰 부<br><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<form name=form1 method=post>
|
||||||
|
정렬순서 :
|
||||||
|
<select name='query_type' size=1>
|
||||||
|
<?php foreach ($queryMap as $queryType => [$queryTypeText,]) : ?>
|
||||||
|
<option <?= $queryType == $reqQueryType ? 'selected' : '' ?> value='<?= $queryType ?>'><?= $queryTypeText ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
<input type=submit name=btn value='정렬하기'>
|
||||||
|
대상장수 :
|
||||||
|
<select name=gen size=1>
|
||||||
|
<?php foreach ($generalBasicList as $general) : ?>
|
||||||
|
<option <?= $gen == $general['no'] ? 'selected' : '' ?> value='<?= $general['no'] ?>'><?= $general['officer_level'] > 4 ? "*{$general['name']}*" : $general['name'] ?> (<?= substr($general['turntime'], 14, 5) ?>)</option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select>
|
||||||
|
<input type=submit name=btn value='조회하기'>
|
||||||
|
</form>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table width=1000 align=center class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td width=50% align=center class='bg1'>
|
||||||
|
<font color=skyblue size=3>장 수 정 보</font>
|
||||||
|
</td>
|
||||||
|
<td width=50% align=center class='bg1'>
|
||||||
|
<font color=orange size=3>장 수 열 전</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign=top>
|
||||||
|
<?php generalInfo($showGeneral);
|
||||||
|
generalInfo2($showGeneral); ?>
|
||||||
|
</td>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getGeneralHistoryLogAll($gen)) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=orange size=3>전투 기록</font>
|
||||||
|
</td>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=orange size=3>전투 결과</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getBattleDetailLogRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getBattleResultRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php if ($showGeneral->getNPCType() > 1 || $permission >= 2) : ?>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=orange size=3>개인 기록</font>
|
||||||
|
</td>
|
||||||
|
<td align=center class='bg1'>
|
||||||
|
<font color=orange size=3> </font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign=top>
|
||||||
|
<?= formatHistoryToHTML(getGeneralActionLogRecent($gen, 24)) ?>
|
||||||
|
</td>
|
||||||
|
<td valign=top>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php endif; ?>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= closeButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
+80
-133
@@ -2,10 +2,6 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use sammo\Enums\GeneralLiteQueryMode;
|
|
||||||
use sammo\Enums\GeneralQueryMode;
|
|
||||||
use sammo\Enums\RankColumn;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
@@ -20,91 +16,60 @@ TurnExecutionHelper::executeAllCommand();
|
|||||||
|
|
||||||
$generalID = $session->generalID;
|
$generalID = $session->generalID;
|
||||||
|
|
||||||
|
//NOTE: general_id만 빼기 귀찮음.
|
||||||
|
$myBet = $db->queryFirstList('SELECT * FROM betting WHERE general_id = %i', $generalID);
|
||||||
|
$myBet = array_splice($myBet, -16);
|
||||||
|
$globalBet = $db->queryFirstList('SELECT * FROM betting WHERE general_id = 0');
|
||||||
|
$globalBet = array_splice($globalBet, -16);
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,tournament,con,turntime from general where owner=%i', $userID);
|
||||||
|
|
||||||
|
$myBetTotal = array_sum($myBet);
|
||||||
|
$globalBetTotal = array_sum($globalBet);
|
||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$admin = $gameStor->getValues(['tournament', 'phase', 'tnmt_type', 'develcost']);
|
||||||
'SELECT no,tournament,refresh_score,turntime FROM `general`
|
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id where owner=%i', $userID
|
|
||||||
);
|
|
||||||
|
|
||||||
$admin = $gameStor->getValues(['tournament', 'phase', 'tnmt_type', 'turnterm', 'develcost']);
|
$con = checkLimit($me['con']);
|
||||||
$turnTerm = $admin['turnterm'];
|
if ($con >= 2) {
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
|
||||||
if ($limitState >= 2) {
|
|
||||||
printLimitMsg($me['turntime']);
|
printLimitMsg($me['turntime']);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($admin['tnmt_type']) {
|
switch ($admin['tnmt_type']) {
|
||||||
case convertTournamentType('전력전'):
|
default:
|
||||||
$tnmt_type = "전력전";
|
throw new \RuntimeException('Invalid tnmt_type');
|
||||||
$color = "cyan";
|
case 0:
|
||||||
|
$tnmt_type = "<font color=cyan>전력전</font>";
|
||||||
$tp = "total";
|
$tp = "total";
|
||||||
$tp2 = "종합";
|
$tp2 = "종합";
|
||||||
$tp3 = "total";
|
$tp3 = "total";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('통솔전'):
|
case 1:
|
||||||
$tnmt_type = "통솔전";
|
$tnmt_type = "<font color=cyan>통솔전</font>";
|
||||||
$color = "cyan";
|
|
||||||
$tp = "leadership";
|
$tp = "leadership";
|
||||||
$tp2 = "통솔";
|
$tp2 = "통솔";
|
||||||
$tp3 = "leadership";
|
$tp3 = "leadership";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('일기토'):
|
case 2:
|
||||||
$tnmt_type = "일기토";
|
$tnmt_type = "<font color=cyan>일기토</font>";
|
||||||
$color = "cyan";
|
|
||||||
$tp = "strength";
|
$tp = "strength";
|
||||||
$tp2 = "무력";
|
$tp2 = "무력";
|
||||||
$tp3 = "strength";
|
$tp3 = "strength";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('설전'):
|
case 3:
|
||||||
$tnmt_type = "설전";
|
$tnmt_type = "<font color=cyan>설전</font>";
|
||||||
$color = "cyan";
|
|
||||||
$tp = "intel";
|
$tp = "intel";
|
||||||
$tp2 = "지력";
|
$tp2 = "지력";
|
||||||
$tp3 = "intel";
|
$tp3 = "intel";
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
throw new \RuntimeException('Invalid tnmt_type');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$bettingID = $gameStor->last_tournament_betting_id ?? 0;
|
|
||||||
$myBet = [];
|
|
||||||
$globalBet = [];
|
|
||||||
|
|
||||||
if ($bettingID != 0) {
|
|
||||||
$betting = $bettingID != 0 ? new Betting($bettingID) : null;
|
|
||||||
$info = $betting->getInfo();
|
|
||||||
|
|
||||||
foreach ($db->queryAllLists(
|
|
||||||
'SELECT general_id, user_id, amount, betting_type FROM ng_betting WHERE betting_id = %i',
|
|
||||||
$bettingID
|
|
||||||
) as [$betGeneralID, $userID, $amount, $bettingTypeKey]) {
|
|
||||||
$bettingKey = Json::decode($bettingTypeKey)[0];
|
|
||||||
if ($betGeneralID == $generalID) {
|
|
||||||
$myBet[$bettingKey] = $amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key_exists($bettingKey, $globalBet)) {
|
|
||||||
$globalBet[$bettingKey] += $amount;
|
|
||||||
} else {
|
|
||||||
$globalBet[$bettingKey] = $amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$info = getDummyBettingInfo($tnmt_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
$myBetTotal = array_sum($myBet);
|
|
||||||
$globalBetTotal = array_sum($globalBet);
|
|
||||||
|
|
||||||
$str1 = getTournament($admin['tournament']);
|
$str1 = getTournament($admin['tournament']);
|
||||||
$str2 = getTournamentTime();
|
$str2 = getTournamentTime();
|
||||||
if ($str2) {
|
if ($str2) {
|
||||||
$str2 = ', ' . $str2;
|
$str2 = ', ' . $str2;
|
||||||
}
|
}
|
||||||
$str3 = getTournamentTermText($turnTerm);
|
$str3 = getTournamentTermText();
|
||||||
if ($str3) {
|
if ($str3) {
|
||||||
$str3 = ', ' . $str3;
|
$str3 = ', ' . $str3;
|
||||||
}
|
}
|
||||||
@@ -112,26 +77,19 @@ if ($str3) {
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<?php if ($limitState == 1) {
|
<?php if ($con == 1) {
|
||||||
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
||||||
} ?>
|
} ?>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 베팅장</title>
|
<title><?= UniqueConst::$serverName ?>: 베팅장</title>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'betting']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'betting']) ?>
|
||||||
<?= WebUtil::printStaticValues([
|
|
||||||
'staticValues'=>[
|
|
||||||
'bettingID'=> $bettingID
|
|
||||||
]
|
|
||||||
])?>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
@@ -142,11 +100,11 @@ if ($str3) {
|
|||||||
</table>
|
</table>
|
||||||
<table align=center width=1120 class='tb_layout bg0'>
|
<table align=center width=1120 class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=16><button type="button" class="btn btn-secondary" onclick='location.reload()'>갱신</button></td>
|
<td colspan=16><input type=button value='갱신' onclick='location.reload()'></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=16 align=center>
|
<td colspan=16 align=center>
|
||||||
<font color=white size=6><span style="color:<?= $color ?>"><?= $tnmt_type ?></span> (<?= $str1 . $str2 . $str3 ?>)</font>
|
<font color=white size=6><?= $tnmt_type ?> (<?= $str1 . $str2 . $str3 ?>)</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -307,6 +265,7 @@ if ($str3) {
|
|||||||
for ($i = 0; $i < 8; $i++) {
|
for ($i = 0; $i < 8; $i++) {
|
||||||
echo "<td colspan=2>{$gen[$i]}</td>";
|
echo "<td colspan=2>{$gen[$i]}</td>";
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
</tr>
|
</tr>
|
||||||
<tr align=center>";
|
<tr align=center>";
|
||||||
@@ -314,7 +273,7 @@ if ($str3) {
|
|||||||
for ($i = 0; $i < 8; $i++) {
|
for ($i = 0; $i < 8; $i++) {
|
||||||
$cent[$i] = "<font color=white>";
|
$cent[$i] = "<font color=white>";
|
||||||
}
|
}
|
||||||
$generalList = $db->query('SELECT npc,name,win,leadership,strength,intel,leadership+strength+intel as total from tournament where grp>=20 order by grp, grp_no LIMIT 16');
|
$generalList = $db->query('SELECT npc,name,win from tournament where grp>=20 order by grp, grp_no LIMIT 16');
|
||||||
while (count($generalList) < 16) {
|
while (count($generalList) < 16) {
|
||||||
$generalList[] = [
|
$generalList[] = [
|
||||||
'name' => '-',
|
'name' => '-',
|
||||||
@@ -334,11 +293,6 @@ if ($str3) {
|
|||||||
$line[$i] = "<font color=white>";
|
$line[$i] = "<font color=white>";
|
||||||
}
|
}
|
||||||
$gen[$i] = $general['name'];
|
$gen[$i] = $general['name'];
|
||||||
if (array_key_exists($tp, $general)) {
|
|
||||||
$stat[$i] = $general[$tp];
|
|
||||||
} else {
|
|
||||||
$stat[$i] = "-";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
for ($i = 0; $i < 8; $i++) {
|
for ($i = 0; $i < 8; $i++) {
|
||||||
$cent[$i] = $cent[$i] . "┻" . "</font>";
|
$cent[$i] = $cent[$i] . "┻" . "</font>";
|
||||||
@@ -346,48 +300,45 @@ if ($str3) {
|
|||||||
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━┓" . "</font>";
|
$line[$i * 2 + 1] = $line[$i * 2 + 1] . "━━┓" . "</font>";
|
||||||
echo "<td colspan=2>{$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]}</td>";
|
echo "<td colspan=2>{$line[$i * 2]}{$cent[$i]}{$line[$i * 2 + 1]}</td>";
|
||||||
}
|
}
|
||||||
|
echo "
|
||||||
|
</tr>
|
||||||
|
<tr align=center>";
|
||||||
|
|
||||||
|
for ($i = 0; $i < 16; $i++) {
|
||||||
|
echo "<td width=70>{$gen[$i]}</td>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$bet = [];
|
||||||
|
$gold = [];
|
||||||
|
|
||||||
|
for ($i = 0; $i < 16; $i++) {
|
||||||
|
if ($globalBet[$i] == 0) {
|
||||||
|
$bet[$i] = "∞";
|
||||||
|
} else {
|
||||||
|
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for ($i = 0; $i < 16; $i++) {
|
||||||
|
if (!is_numeric($bet[$i])) {
|
||||||
|
$gold[$i] = 0;
|
||||||
|
} else {
|
||||||
|
$gold[$i] = Util::round($myBet[$i] * $bet[$i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
<tr align=center>
|
|
||||||
<?php for ($i = 0; $i < 16; $i++) { ?>
|
|
||||||
<td width=70><?= $gen[$i] ?></td>
|
|
||||||
<?php } ?>
|
|
||||||
</tr>
|
|
||||||
<tr align=center>
|
|
||||||
<?php for ($i = 0; $i < 16; $i++) { ?>
|
|
||||||
<td width=70 style="font-size: 14px"><?= $stat[$i] ?></td>
|
|
||||||
<?php } ?>
|
|
||||||
</tr>
|
|
||||||
</table>
|
</table>
|
||||||
<table align=center width=1120 style="table-layout: fixed" class='tb_layout bg0'>
|
<table align=center width=1120 class='tb_layout bg0'>
|
||||||
<tr align=center>
|
<tr align=center>
|
||||||
<td height=10 colspan=16></td>
|
<td height=10 colspan=16></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$bet = [];
|
|
||||||
$gold = [];
|
|
||||||
$keyMap = [];
|
|
||||||
foreach ($info->candidates as $key => $candidate) {
|
|
||||||
$keyMap[$candidate->aux['idx']] = $key;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($globalBet as $key => $amount) {
|
|
||||||
if ($amount == 0) {
|
|
||||||
$bet[$key] = "∞";
|
|
||||||
$gold[$key] = 0;
|
|
||||||
} else {
|
|
||||||
$rewardRatio = round($globalBetTotal / $amount, 2);
|
|
||||||
$bet[$key] = $rewardRatio;
|
|
||||||
$gold[$key] = $rewardRatio * ($myBet[$key] ?? 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
echo "
|
echo "
|
||||||
<tr align=center>";
|
<tr align=center>";
|
||||||
|
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$amount = $bet[$keyMap[$i] ?? -1] ?? 0;
|
echo "<td width=70><font color=skyblue>{$bet[$i]}</font></td>";
|
||||||
echo "<td width=70><font color=skyblue>{$amount}</font></td>";
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -411,9 +362,8 @@ if ($str3) {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr align=center>
|
<tr align=center>
|
||||||
<?php
|
<?php
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$amount = $myBet[$keyMap[$i] ?? -1] ?? 0;
|
echo "<td><font color=orange>{$myBet[$i]}</font></td>";
|
||||||
echo "<td><font color=orange>{$amount}</font></td>";
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -437,9 +387,8 @@ if ($str3) {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr align=center>
|
<tr align=center>
|
||||||
<?php
|
<?php
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$amount = $gold[$keyMap[$i] ?? -1] ?? 0;
|
echo "<td><font color=cyan>{$gold[$i]}</font></td>";
|
||||||
echo "<td><font color=cyan>{$amount}</font></td>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
@@ -448,13 +397,12 @@ if ($str3) {
|
|||||||
|
|
||||||
if ($admin['tournament'] == 6) {
|
if ($admin['tournament'] == 6) {
|
||||||
echo "
|
echo "
|
||||||
<tr align=center style='height:2.5em;'>";
|
<tr align=center>";
|
||||||
|
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$key = $keyMap[$i] ?? -1;
|
|
||||||
echo "
|
echo "
|
||||||
<td>
|
<td>
|
||||||
<select size=1 id='target_{$key}' style='color:white;background-color:black;padding:0.2rem 0.1rem;'>
|
<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=10>금10</option>
|
||||||
<option style=color:white; value=20>금20</option>
|
<option style=color:white; value=20>금20</option>
|
||||||
<option style=color:white; value=50>금50</option>
|
<option style=color:white; value=50>금50</option>
|
||||||
@@ -468,12 +416,11 @@ if ($str3) {
|
|||||||
|
|
||||||
echo "
|
echo "
|
||||||
</tr>
|
</tr>
|
||||||
<tr align=center style='height:2.2em;'>";
|
<tr align=center>";
|
||||||
|
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$key = $keyMap[$i] ?? -1;
|
|
||||||
echo "
|
echo "
|
||||||
<td><input type=button class='submitBtn' data-target='{$key}' value=베팅! style='width:100%;color:white;padding:0.2rem 0.1rem;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>";
|
echo "</tr>";
|
||||||
@@ -507,28 +454,28 @@ if ($str3) {
|
|||||||
$tournamentType = [
|
$tournamentType = [
|
||||||
'전 력 전' => [
|
'전 력 전' => [
|
||||||
'종합',
|
'종합',
|
||||||
function (GeneralLite $general) {
|
function (General $general) {
|
||||||
return $general->getVar('leadership') + $general->getVar('strength') + $general->getVar('intel');
|
return $general->getVar('leadership') + $general->getVar('strength') + $general->getVar('intel');
|
||||||
},
|
},
|
||||||
'tt',
|
'tt',
|
||||||
],
|
],
|
||||||
'통 솔 전' => [
|
'통 솔 전' => [
|
||||||
'통솔',
|
'통솔',
|
||||||
function (GeneralLite $general) {
|
function (General $general) {
|
||||||
return $general->getVar('leadership');
|
return $general->getVar('leadership');
|
||||||
},
|
},
|
||||||
'tl',
|
'tl',
|
||||||
],
|
],
|
||||||
'일 기 토' => [
|
'일 기 토' => [
|
||||||
'무력',
|
'무력',
|
||||||
function (GeneralLite $general) {
|
function (General $general) {
|
||||||
return $general->getVar('strength');
|
return $general->getVar('strength');
|
||||||
},
|
},
|
||||||
'ts',
|
'ts',
|
||||||
],
|
],
|
||||||
'설 전' => [
|
'설 전' => [
|
||||||
'지력',
|
'지력',
|
||||||
function (GeneralLite $general) {
|
function (General $general) {
|
||||||
return $general->getVar('intel');
|
return $general->getVar('intel');
|
||||||
},
|
},
|
||||||
'ti',
|
'ti',
|
||||||
@@ -560,17 +507,17 @@ if ($str3) {
|
|||||||
<td align=center>勝</td>
|
<td align=center>勝</td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
$prizeColumn = RankColumn::from("{$rankColumn}p");
|
$prizeColumn = "{$rankColumn}p";
|
||||||
$gameColumn = RankColumn::from("{$rankColumn}g");
|
$gameColumn = "{$rankColumn}g";
|
||||||
$winColumn = RankColumn::from("{$rankColumn}w");
|
$winColumn = "{$rankColumn}w";
|
||||||
$drawColumn = RankColumn::from("{$rankColumn}d");
|
$drawColumn = "{$rankColumn}d";
|
||||||
$loseColumn = RankColumn::from("{$rankColumn}l");
|
$loseColumn = "{$rankColumn}l";
|
||||||
$tournamentRankerList = GeneralLite::createObjListFromDB(
|
$tournamentRankerList = General::createGeneralObjListFromDB(
|
||||||
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn->value),
|
$db->queryFirstColumn('SELECT general_id FROM rank_data WHERE `type`= %s ORDER BY value DESC LIMIT 40', $gameColumn),
|
||||||
[$prizeColumn->value, $gameColumn->value, $winColumn->value, $drawColumn->value, $loseColumn->value, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
|
[$prizeColumn, $gameColumn, $winColumn, $drawColumn, $loseColumn, 'leadership', 'strength', 'intel', 'no', 'npc', 'name'],
|
||||||
GeneralLiteQueryMode::Core
|
0
|
||||||
);
|
);
|
||||||
usort($tournamentRankerList, function (GeneralLite $lhs, GeneralLite $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) {
|
usort($tournamentRankerList, function (General $lhs, General $rhs) use ($gameColumn, $winColumn, $drawColumn, $loseColumn) {
|
||||||
$result = - ($lhs->getRankVar($gameColumn) <=> $rhs->getRankVar($gameColumn));
|
$result = - ($lhs->getRankVar($gameColumn) <=> $rhs->getRankVar($gameColumn));
|
||||||
if ($result !== 0) return $result;
|
if ($result !== 0) return $result;
|
||||||
$result = - (
|
$result = - (
|
||||||
|
|||||||
+8
-12
@@ -13,10 +13,8 @@ $userID = Session::getUserID();
|
|||||||
$userGrade = Session::getUserGrade();
|
$userGrade = Session::getUserGrade();
|
||||||
|
|
||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
|
||||||
increaseRefresh("현재도시", 1);
|
|
||||||
|
|
||||||
$lastExecute = substr(GameClock::fromStorage($gameStor)->formatTick(Util::toInt($gameStor->turntime)), 5, 14);
|
increaseRefresh("현재도시", 1);
|
||||||
|
|
||||||
$me = $db->queryFirstRow('SELECT no,nation,officer_level,city from general where owner=%i', $userID);
|
$me = $db->queryFirstRow('SELECT no,nation,officer_level,city from general where owner=%i', $userID);
|
||||||
$myNation = $db->queryFirstRow('SELECT nation,level,spy FROM nation WHERE nation=%i', $me['nation']) ?? [
|
$myNation = $db->queryFirstRow('SELECT nation,level,spy FROM nation WHERE nation=%i', $me['nation']) ?? [
|
||||||
@@ -34,7 +32,6 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
<head>
|
<head>
|
||||||
<title><?= UniqueConst::$serverName ?>: 도시정보</title>
|
<title><?= UniqueConst::$serverName ?>: 도시정보</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
@@ -56,7 +53,6 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
font-size: x-small;
|
font-size: x-small;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'currentCity']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'currentCity']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -177,7 +173,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
$valid = 1;
|
$valid = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($userGrade >= 6) {
|
if ($userGrade >= 5) {
|
||||||
$valid = true;
|
$valid = true;
|
||||||
$showDetailedInfo = true;
|
$showDetailedInfo = true;
|
||||||
}
|
}
|
||||||
@@ -211,7 +207,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
$city['trade'] = "- ";
|
$city['trade'] = "- ";
|
||||||
}
|
}
|
||||||
|
|
||||||
$dbColumns = General::mergeQueryColumn(['npc', 'defence_train', 'no', 'picture', 'imgsvr', 'name', 'injury', 'leadership', 'strength', 'intel', 'officer_level', 'nation', 'crewtype', 'crew', 'train', 'atmos'])[0];
|
$dbColumns = General::mergeQueryColumn(['npc', 'defence_train', 'no', 'picture', 'imgsvr', 'name', 'injury', 'leadership', 'strength', 'intel', 'officer_level', 'nation', 'crewtype', 'crew', 'train', 'atmos'], 2)[0];
|
||||||
if ($showDetailedInfo) {
|
if ($showDetailedInfo) {
|
||||||
$generals = $db->query(
|
$generals = $db->query(
|
||||||
'SELECT %l from general where city=%i order by turntime',
|
'SELECT %l from general where city=%i order by turntime',
|
||||||
@@ -275,7 +271,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
$ourGeneral = false;
|
$ourGeneral = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($userGrade == 7) {
|
if ($userGrade == 6) {
|
||||||
$ourGeneral = true;
|
$ourGeneral = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -327,7 +323,8 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
|
|
||||||
if ($ourGeneral && !$isNPC) {
|
if ($ourGeneral && !$isNPC) {
|
||||||
$turnText = [];
|
$turnText = [];
|
||||||
foreach ($generalTurnList[$general['no']] as $turnRawIdx => $turn) {
|
$generalObj = new General($general, null, null, null, null, null, false);
|
||||||
|
foreach ($generalTurnList[$generalObj->getID()] as $turnRawIdx => $turn) {
|
||||||
$turnIdx = $turnRawIdx + 1;
|
$turnIdx = $turnRawIdx + 1;
|
||||||
$turnText[] = "{$turnIdx} : $turn";
|
$turnText[] = "{$turnIdx} : $turn";
|
||||||
}
|
}
|
||||||
@@ -340,7 +337,6 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
'ourGeneral' => $ourGeneral,
|
'ourGeneral' => $ourGeneral,
|
||||||
'iconPath' => GetImageURL($general['imgsvr']) . '/' . $general['picture'],
|
'iconPath' => GetImageURL($general['imgsvr']) . '/' . $general['picture'],
|
||||||
'isNPC' => $isNPC,
|
'isNPC' => $isNPC,
|
||||||
'npc' => $general['npc'],
|
|
||||||
'wounded' => $wounded,
|
'wounded' => $wounded,
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'nameText' => $nameText,
|
'nameText' => $nameText,
|
||||||
@@ -368,7 +364,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
}
|
}
|
||||||
|
|
||||||
$generalsName = array_map(function ($gen) {
|
$generalsName = array_map(function ($gen) {
|
||||||
return formatName($gen['name'], $gen['npc']);
|
return getColoredName($gen['name'], $gen['npc']);
|
||||||
}, $generals);
|
}, $generals);
|
||||||
|
|
||||||
$enemyCrew = 0;
|
$enemyCrew = 0;
|
||||||
@@ -449,7 +445,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
<table align=center width=1000 class='tb_layout bg2'>
|
<table align=center width=1000 class='tb_layout bg2'>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=11 align=center style='color:<?= newColor($cityNation['color']) ?>; background:<?= $cityNation['color'] ?>'>【 <?= CityConst::$regionMap[$city['region']] ?> | <?= CityConst::$levelMap[$city['level']] ?> 】 <?= $city['name'] ?></td>
|
<td colspan=11 align=center style='color:<?= newColor($cityNation['color']) ?>; background:<?= $cityNation['color'] ?>'>【 <?= CityConst::$regionMap[$city['region']] ?> | <?= CityConst::$levelMap[$city['level']] ?> 】 <?= $city['name'] ?></td>
|
||||||
<td style='color:<?= newColor($cityNation['color']) ?>; background:<?= $cityNation['color'] ?>' class='center'><?= $lastExecute ?></td>
|
<td style='color:<?= newColor($cityNation['color']) ?>; background:<?= $cityNation['color'] ?>' class='center'><?= date('m-d H:i:s') ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td align=center width=48 class=bg1>주민</td>
|
<td align=center width=48 class=bg1>주민</td>
|
||||||
|
|||||||
@@ -0,0 +1,236 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
increaseRefresh("중원정보", 1);
|
||||||
|
|
||||||
|
$mapTheme = $gameStor->map_theme ?? 'che';
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,nation FROM general WHERE owner=%i', $userID);
|
||||||
|
$myNationID = $me['nation'];
|
||||||
|
|
||||||
|
$nations = array_filter(getAllNationStaticInfo(), function (array $nation) {
|
||||||
|
return $nation['level'];
|
||||||
|
});
|
||||||
|
uasort($nations, function (array $lhs, array $rhs) {
|
||||||
|
return - ($lhs['power'] <=> $rhs['power']);
|
||||||
|
});
|
||||||
|
$nationCnt = count($nations);
|
||||||
|
|
||||||
|
foreach ($db->queryAllLists('SELECT nation, count(city) FROM city WHERE nation != 0 GROUP BY nation') as [$nationID, $cityCnt]) {
|
||||||
|
$nations[$nationID]['city_cnt'] = $cityCnt;
|
||||||
|
}
|
||||||
|
|
||||||
|
$realConflict = [];
|
||||||
|
foreach ($db->queryAllLists('SELECT city, `name`, conflict FROM city WHERE conflict!=%s', '{}') as [
|
||||||
|
$cityID,
|
||||||
|
$cityName,
|
||||||
|
$rawConflict
|
||||||
|
]) {
|
||||||
|
$rawConflict = Json::decode($rawConflict);
|
||||||
|
if (count($rawConflict) < 2) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$sum = array_sum($rawConflict);
|
||||||
|
|
||||||
|
|
||||||
|
$conflict = [];
|
||||||
|
foreach ($rawConflict as $nationID => $killnum) {
|
||||||
|
$conflict[$nationID] = [
|
||||||
|
'killnum' => $killnum,
|
||||||
|
'percent' => round(100 * $killnum / $sum, 1),
|
||||||
|
'name' => $nations[$nationID]['name'],
|
||||||
|
'color' => $nations[$nationID]['color']
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
$realConflict[] = [$cityID, $cityName, $conflict];
|
||||||
|
};
|
||||||
|
|
||||||
|
$diplomacyList = [];
|
||||||
|
foreach ($db->queryAllLists('SELECT me, you, state FROM diplomacy') as [$me, $you, $state]) {
|
||||||
|
if (!key_exists($me, $diplomacyList)) {
|
||||||
|
$diplomacyList[$me] = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
$diplomacyList[$me][$you] = $state;
|
||||||
|
}
|
||||||
|
|
||||||
|
$cellWidth = intdiv(888, max(1, $nationCnt));
|
||||||
|
|
||||||
|
|
||||||
|
$defaultStateChar = '?';
|
||||||
|
$sameNationStateChar = '\';
|
||||||
|
$infomativeStateCharMap = [
|
||||||
|
0 => '<span style="color:red;">★</span>',
|
||||||
|
1 => '<span style="color:magenta;">▲</span>',
|
||||||
|
2 => 'ㆍ',
|
||||||
|
7 => '<span style="color:green;">@</span>'
|
||||||
|
];
|
||||||
|
$neutralStateCharMap = [
|
||||||
|
0 => '<span style="color:red;">★</span>',
|
||||||
|
1 => '<span style="color:magenta;">▲</span>'
|
||||||
|
];
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 중원 정보</title>
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printJS('d_shared/base_map.js') ?>
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printCSS('css/map.css') ?>
|
||||||
|
<?= WebUtil::printCSS('css/history.css') ?>
|
||||||
|
<?= WebUtil::printDist('ts', ['common', 'map']) ?>
|
||||||
|
<script>
|
||||||
|
window.serverNick = '<?= DB::prefix() ?>';
|
||||||
|
window.serverID = '<?= UniqueConst::$serverID ?>';
|
||||||
|
$(function() {
|
||||||
|
|
||||||
|
reloadWorldMap({
|
||||||
|
neutralView: true,
|
||||||
|
showMe: true,
|
||||||
|
useCachedMap: true
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>중 원 정 보<br><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=<?= $nationCnt + 1 ?> align=center bgcolor=blue>외 교 현 황</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center width=130 style=background-color:<?= GameConst::$basecolor2 ?>;> </td>
|
||||||
|
<?php foreach ($nations as $nation) : ?>
|
||||||
|
<td align=center width=<?= $cellWidth ?> style='background-color:<?= $nation['color'] ?>;color:<?= newColor($nation['color']) ?>'><?= $nation['name'] ?></td>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</tr>
|
||||||
|
<?php foreach ($nations as $me => $meNation) : ?>
|
||||||
|
<tr style='text-align:center;'>
|
||||||
|
<td align=center style='background-color:<?= $meNation['color'] ?>;color:<?= newColor($meNation['color']) ?>'><?= $meNation['name'] ?></td>
|
||||||
|
<?php foreach (array_keys($nations) as $you) : ?>
|
||||||
|
<td <?= ($me == $myNationID || $you == $myNationID) ? 'style="background-color:' . GameConst::$basecolor3 . '"' : '' ?>><?php
|
||||||
|
if ($me == $you) {
|
||||||
|
echo $sameNationStateChar;
|
||||||
|
} else if ($me == $myNationID || $you == $myNationID || $session->userGrade >= 5) {
|
||||||
|
echo $infomativeStateCharMap[$diplomacyList[$me][$you]] ?? $defaultStateChar;
|
||||||
|
} else {
|
||||||
|
echo $neutralStateCharMap[$diplomacyList[$me][$you]] ?? $defaultStateChar;
|
||||||
|
}
|
||||||
|
?></td>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<tr>
|
||||||
|
<td colspan=<?= $nationCnt + 1 ?> align=center>불가침 : <font color=limegreen>@</font>, 통상 : ㆍ, 선포 : <font color=magenta>▲</font>, 교전 : <font color=red>★</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<?php if ($realConflict) : ?>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<table align='center' width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=2 align=center bgcolor=magenta>분 쟁 현 황</td>
|
||||||
|
</tr>
|
||||||
|
<?php foreach ($realConflict as list($cityID, $cityName, $conflict)) : ?>
|
||||||
|
<tr>
|
||||||
|
<td align=center width=48><?= $cityName ?></td>
|
||||||
|
<td style='width:948px;position:relative;'>
|
||||||
|
<table class='tb_layout bg0' style='width:100%;'>
|
||||||
|
<?php foreach ($conflict as $item) : ?>
|
||||||
|
<tr>
|
||||||
|
<td width=130 align=right style='color:<?= newColor($item['color']) ?>;background-color:<?= $item['color'] ?>;'><?= $item['name'] ?> </td>
|
||||||
|
<td width=48 align=right><?= (float)$item['percent'] ?> % </td>
|
||||||
|
<td width=*>
|
||||||
|
<div style='display:inline-block;width:<?= $item['percent'] ?>%;background-color:<?= $item['color'] ?>;'> </div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
<tr>
|
||||||
|
<td colspan=2 height=5 class='bg1'></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td colspan=5 align=center bgcolor=green>
|
||||||
|
<font size=3>중 원 지 도</font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width=698 height=420>
|
||||||
|
<?= getMapHtml($mapTheme) ?>
|
||||||
|
</td>
|
||||||
|
<td id='nation_list_frame'>
|
||||||
|
<table id='nation_list'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width=130>국명</th>
|
||||||
|
<th width=70>국력</th>
|
||||||
|
<th width=45>장수</th>
|
||||||
|
<th width=45>속령</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<?php foreach ($nations as $nation) : ?>
|
||||||
|
<tr>
|
||||||
|
<td><span style='color:<?= newColor($nation['color']) ?>;background-color:<?= $nation['color'] ?>'><?= $nation['name'] ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format($nation['power']) ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format($nation['gennum']) ?></td>
|
||||||
|
<td style='text-align:right'><?= number_format($nation['city_cnt']) ?></td>
|
||||||
|
</tr>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</tbody>
|
||||||
|
<tfoot></tfoot>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
+5
-12
@@ -19,15 +19,12 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
|
|
||||||
increaseRefresh("암행부", 1);
|
increaseRefresh("암행부", 1);
|
||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$me = $db->queryFirstRow('SELECT no,nation,officer_level,con,turntime,belong,permission,penalty from general where owner=%i', $userID);
|
||||||
'SELECT no,nation,officer_level,refresh_score,turntime,belong,permission,penalty FROM `general`
|
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id WHERE owner=%i', $userID
|
|
||||||
);
|
|
||||||
|
|
||||||
$nationLevel = $db->queryFirstField('SELECT level FROM nation WHERE nation=%i', $me['nation']);
|
$nationLevel = $db->queryFirstField('SELECT level FROM nation WHERE nation=%i', $me['nation']);
|
||||||
|
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
$con = checkLimit($me['con']);
|
||||||
if ($limitState >= 2) {
|
if ($con >= 2) {
|
||||||
printLimitMsg($me['turntime']);
|
printLimitMsg($me['turntime']);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
@@ -48,20 +45,18 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<?php if ($limitState == 1) {
|
<?php if ($con == 1) {
|
||||||
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
MessageBox("접속제한이 얼마 남지 않았습니다!");
|
||||||
} ?>
|
} ?>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 암행부</title>
|
<title><?= UniqueConst::$serverName ?>: 암행부</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common']) ?>
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -129,7 +124,6 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
);
|
);
|
||||||
|
|
||||||
$generalTurnList = [];
|
$generalTurnList = [];
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
|
||||||
|
|
||||||
foreach ($db->queryAllLists(
|
foreach ($db->queryAllLists(
|
||||||
'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
|
'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
|
||||||
@@ -143,7 +137,6 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
|
|
||||||
$genCntEff = 0;
|
$genCntEff = 0;
|
||||||
foreach ($generals as &$general) {
|
foreach ($generals as &$general) {
|
||||||
$general['turntime'] = $clock->formatTick(Util::toInt($general['turntime']), true);
|
|
||||||
$general['cityText'] = CityConst::byID($general['city'])->name;
|
$general['cityText'] = CityConst::byID($general['city'])->name;
|
||||||
$general['troopText'] = $troopName[$general['troop']] ?? '-';
|
$general['troopText'] = $troopName[$general['troop']] ?? '-';
|
||||||
|
|
||||||
@@ -179,7 +172,7 @@ $templates = new \League\Plates\Engine('templates');
|
|||||||
|
|
||||||
$general['expLevelText'] = getExpLevel($general['experience']);
|
$general['expLevelText'] = getExpLevel($general['experience']);
|
||||||
|
|
||||||
$general['nameText'] = formatName($general['name'], $general['npc']);
|
$general['nameText'] = getColoredName($general['name'], $general['npc']);
|
||||||
|
|
||||||
$general['modeText'] = formatDefenceTrain($general['defence_train']);
|
$general['modeText'] = formatDefenceTrain($general['defence_train']);
|
||||||
$general['crewtypeText'] = GameUnitConst::byId($general['crewtype'])->name ?? '-';
|
$general['crewtypeText'] = GameUnitConst::byId($general['crewtype'])->name ?? '-';
|
||||||
|
|||||||
+48
-49
@@ -25,24 +25,12 @@ if ($meLevel == 0) {
|
|||||||
|
|
||||||
$nation = $db->queryFirstRow('SELECT nation,name,level,color,chief_set from nation where nation=%i', $nationID); //국가정보
|
$nation = $db->queryFirstRow('SELECT nation,name,level,color,chief_set from nation where nation=%i', $nationID); //국가정보
|
||||||
|
|
||||||
if ($meLevel >= 5) {
|
|
||||||
$candidateStrength = $db->query('SELECT no,name,officer_level,city,npc from general where nation=%i and officer_level!=12 and strength>=%i order by npc,binary(name)', $nationID, GameConst::$chiefStatMin);
|
|
||||||
$candidateIntel = $db->query('SELECT no,name,officer_level,city,npc from general where nation=%i and officer_level!=12 and intel>=%i order by npc,binary(name)', $nationID, GameConst::$chiefStatMin);
|
|
||||||
$candidateAny = $db->query('SELECT no,name,officer_level,city,npc,leadership,strength,intel,killturn from general where nation=%i and officer_level!=12 order by npc,binary(name)', $nationID); //추방 때문에 조금 더 김
|
|
||||||
} else {
|
|
||||||
$candidateStrength = [];
|
|
||||||
$candidateIntel = [];
|
|
||||||
$candidateAny = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 인사부</title>
|
<title><?= UniqueConst::$serverName ?>: 인사부</title>
|
||||||
@@ -55,7 +43,6 @@ if ($meLevel >= 5) {
|
|||||||
var chiefStatMin = <?= GameConst::$chiefStatMin ?>;
|
var chiefStatMin = <?= GameConst::$chiefStatMin ?>;
|
||||||
var myLevel = <?= $meLevel ?>;
|
var myLevel = <?= $meLevel ?>;
|
||||||
</script>
|
</script>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'bossInfo']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'bossInfo']) ?>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
@@ -193,21 +180,61 @@ if ($meLevel >= 5) {
|
|||||||
<td colspan=5><?= $eaglestr ?></td>
|
<td colspan=5><?= $eaglestr ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=4 height=5></td>
|
<td colspan=6 height=5></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=4 align=center bgcolor=blue>수 뇌 부 임 명</td>
|
<td colspan=2 align=center bgcolor=red>추 방</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<?php $officerLevelText = getOfficerLevelText(11, $nation['level']); ?>
|
<td width=498 align=right class='bg1'>대상 장수</td>
|
||||||
<td width=98 align=right class='bg1'><?= getOfficerLevelText(12, $nation['level']) ?></td>
|
<td width=498>
|
||||||
<td width=398><?= $level[12]['name'] ?> 【<?= CityConst::byID($level[12]['city'])->name ?>】</td>
|
|
||||||
<td width=98 align=right class='bg1'><?= $officerLevelText ?></td>
|
|
||||||
<td width=398>
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
if ($meLevel >= 5) {
|
||||||
|
$candidateStrength = $db->query('SELECT no,name,officer_level,city,npc from general where nation=%i and officer_level!=12 and strength>=%i order by npc,binary(name)', $nationID, GameConst::$chiefStatMin);
|
||||||
|
$candidateIntel = $db->query('SELECT no,name,officer_level,city,npc from general where nation=%i and officer_level!=12 and intel>=%i order by npc,binary(name)', $nationID, GameConst::$chiefStatMin);
|
||||||
|
$candidateAny = $db->query('SELECT no,name,officer_level,city,npc,leadership,strength,intel,killturn from general where nation=%i and officer_level!=12 order by npc,binary(name)', $nationID); //추방 때문에 조금 더 김
|
||||||
|
} else {
|
||||||
|
$candidateStrength = [];
|
||||||
|
$candidateIntel = [];
|
||||||
|
$candidateAny = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($meLevel >= 5 && !isOfficerSet($nation['chief_set'], $meLevel)) {
|
||||||
|
echo "
|
||||||
|
<select id='genlist_kick' size=1 style=color:white;background-color:black;>";
|
||||||
|
|
||||||
|
foreach ($candidateAny as $general) {
|
||||||
|
if ($general['no'] === $me['no']) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
<option data-officer_level='{$general['officer_level']}' data-name='{$general['name']}' value={$general['no']}>{$general['name']} <small>({$general['leadership']}/{$general['strength']}/{$general['intel']}, {$general['killturn']}턴)</small></option>";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</select>
|
||||||
|
<input type=$btn id='btn_kick' value=추방>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$officerLevelText = getOfficerLevelText(11, $nation['level']);
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
|
<tr><td colspan=4 height=5></td></tr>
|
||||||
|
<tr><td colspan=4 align=center bgcolor=blue>수 뇌 부 임 명</td></tr>
|
||||||
|
<tr>
|
||||||
|
<td width=98 align=right class='bg1'>" . getOfficerLevelText(12, $nation['level']) . "</td>
|
||||||
|
<td width=398>{$level[12]['name']} 【" . CityConst::byID($level[12]['city'])->name . "】</td>
|
||||||
|
<td width=98 align=right class='bg1'>{$officerLevelText}</td>
|
||||||
|
<td width=398>
|
||||||
|
";
|
||||||
|
|
||||||
if ($meLevel >= 5 && !isOfficerSet($nation['chief_set'], 11)) {
|
if ($meLevel >= 5 && !isOfficerSet($nation['chief_set'], 11)) {
|
||||||
echo "
|
echo "
|
||||||
<select id='genlist_11' size=1 maxlength=15 style=color:white;background-color:black;>
|
<select id='genlist_11' size=1 maxlength=15 style=color:white;background-color:black;>
|
||||||
@@ -526,34 +553,6 @@ if ($meLevel >= 5) {
|
|||||||
<td colspan=5>※ <font color=orange>노란색</font>은 변경 불가능, 하얀색은 변경 가능 관직입니다.</td>
|
<td colspan=5>※ <font color=orange>노란색</font>은 변경 불가능, 하얀색은 변경 가능 관직입니다.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
|
||||||
<tr>
|
|
||||||
<td colspan=6 height=5></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td colspan=2 align=center bgcolor=red>추 방</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td width=498 align=right class='bg1'>대상 장수</td>
|
|
||||||
<td width=498>
|
|
||||||
<?php
|
|
||||||
if ($meLevel >= 5 && !isOfficerSet($nation['chief_set'], $meLevel)) : ?>
|
|
||||||
|
|
||||||
<select id='genlist_kick' size=1 style=color:white;background-color:black;>";
|
|
||||||
|
|
||||||
<?php foreach ($candidateAny as $general) : ?>
|
|
||||||
<?php if ($general['no'] === $me['no']) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<option data-officer_level='<?= $general['officer_level'] ?>' data-name='<?= $general['name'] ?>' value='<?= $general['no'] ?>'><?= $general['name'] ?> <small>(<?= $general['leadership'] ?>/<?= $general['strength'] ?>/<?= $general['intel'] ?>, <?= $general['killturn'] ?>턴)</small></option>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</select>
|
|
||||||
<input type=<?= $btn ?> id='btn_kick' value=추방>
|
|
||||||
<?php endif; ?>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<br>
|
<br>
|
||||||
<table align=center width=1000 class='tb_layout bg0'>
|
<table align=center width=1000 class='tb_layout bg0'>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
+58
-74
@@ -33,14 +33,12 @@ $sel = [$type => "selected"];
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 세력도시</title>
|
<title><?= UniqueConst::$serverName ?>: 세력도시</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'extExpandCity']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'extExpandCity']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -73,8 +71,7 @@ $sel = [$type => "selected"];
|
|||||||
</table>
|
</table>
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
$nation = $db->queryFirstRow('SELECT nation, name, color, type, level, capital, gennum, `power`, `rate` from nation WHERE nation = %i', $nationID); //국가정보
|
$nation = getNationStaticInfo($me['nation']); //국가정보
|
||||||
$nationTypeObj = buildNationTypeClass($nation['type']);
|
|
||||||
|
|
||||||
$officerList = [];
|
$officerList = [];
|
||||||
foreach ($db->query('SELECT no,name,npc,city,officer_level,officer_city,belong FROM general WHERE nation = %i AND 2 <= officer_level AND officer_level <= 4', $nationID) as $officer) {
|
foreach ($db->query('SELECT no,name,npc,city,officer_level,officer_city,belong FROM general WHERE nation = %i AND 2 <= officer_level AND officer_level <= 4', $nationID) as $officer) {
|
||||||
@@ -85,17 +82,6 @@ $sel = [$type => "selected"];
|
|||||||
$officerList[$officerCityID][$officer['officer_level']] = $officer;
|
$officerList[$officerCityID][$officer['officer_level']] = $officer;
|
||||||
}
|
}
|
||||||
|
|
||||||
$generalList = $db->query('SELECT npc, name, city FROM general WHERE nation = %i', $me['nation']);
|
|
||||||
$cityGeneralList = [];
|
|
||||||
foreach ($generalList as $general) {
|
|
||||||
$cityID = $general['city'];
|
|
||||||
if (!key_exists($cityID, $cityGeneralList)) {
|
|
||||||
$cityGeneralList[$cityID] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
$cityGeneralList[$cityID][] = formatName($general['name'], $general['npc']);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$cityList = $db->query('SELECT *,pop/pop_max as poprate from city where nation=%i', $nationID);
|
$cityList = $db->query('SELECT *,pop/pop_max as poprate from city where nation=%i', $nationID);
|
||||||
|
|
||||||
@@ -185,12 +171,8 @@ $sel = [$type => "selected"];
|
|||||||
];
|
];
|
||||||
|
|
||||||
$cityOfficerList = $officerList[$cityID] ?? [];
|
$cityOfficerList = $officerList[$cityID] ?? [];
|
||||||
$effectiveOfficerCnt = 0;
|
|
||||||
foreach ($cityOfficerList as $cityOfficer) {
|
foreach ($cityOfficerList as $cityOfficer) {
|
||||||
if ($cityOfficer['city'] == $cityID) {
|
$officerName[$cityOfficer['officer_level']] = getColoredName($cityOfficer['name'], $cityOfficer['npc']);
|
||||||
$effectiveOfficerCnt += 1;
|
|
||||||
}
|
|
||||||
$officerName[$cityOfficer['officer_level']] = formatName($cityOfficer['name'], $cityOfficer['npc']);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($type == 10 && $city['region'] != $region) {
|
if ($type == 10 && $city['region'] != $region) {
|
||||||
@@ -205,60 +187,62 @@ $sel = [$type => "selected"];
|
|||||||
$city['trade'] = "- ";
|
$city['trade'] = "- ";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
$cityGoldIncome = $nation['rate'] / 20 * calcCityGoldIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
|
<table align=center width=1000 class='tb_layout bg2'>
|
||||||
$cityRiceIncome = $nation['rate'] / 20 * calcCityRiceIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
|
<tr>
|
||||||
$cityWallIncome = $nation['rate'] / 20 * calcCityWallRiceIncome($city, $effectiveOfficerCnt, $nation['capital'] == $cityID, $nation['level'], $nationTypeObj);
|
<td colspan=12 style=color:" . newColor($nation['color']) . "; bgcolor={$nation['color']}><font size=2>【 " . CityConst::$regionMap[$city['region']] . " | " . CityConst::$levelMap[$city['level']] . " 】 {$city['name']}</font></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center width=46 class='bg1'>주민</td>
|
||||||
|
<td align=center width=140>{$city['pop']}/{$city['pop_max']}</td>
|
||||||
|
<td align=center width=46 class='bg1'>농업</td>
|
||||||
|
<td align=center width=140>{$city['agri']}/{$city['agri_max']}</td>
|
||||||
|
<td align=center width=46 class='bg1'>상업</td>
|
||||||
|
<td align=center width=140>{$city['comm']}/{$city['comm_max']}</td>
|
||||||
|
<td align=center width=46 class='bg1'>치안</td>
|
||||||
|
<td align=center width=140>{$city['secu']}/{$city['secu_max']}</td>
|
||||||
|
<td align=center width=46 class='bg1'>수비</td>
|
||||||
|
<td align=center width=140>{$city['def']}/{$city['def_max']}</td>
|
||||||
|
<td align=center width=46 class='bg1'>성벽</td>
|
||||||
|
<td align=center width=140>{$city['wall']}/{$city['wall_max']}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>민심</td>
|
||||||
|
<td align=center>" . round($city['trust'], 1) . "</td>
|
||||||
|
<td align=center class='bg1'>시세</td>
|
||||||
|
<td align=center>{$city['trade']}%</td>
|
||||||
|
<td align=center class='bg1'>인구</td>
|
||||||
|
<td align=center>" . round($city['pop'] / $city['pop_max'] * 100, 2) . " %</td>
|
||||||
|
<td align=center class='bg1'>태수</td>
|
||||||
|
<td align=center>";
|
||||||
|
echo $officerName[4];
|
||||||
|
echo "</td>
|
||||||
|
<td align=center class='bg1'>군사</td>
|
||||||
|
<td align=center>";
|
||||||
|
echo $officerName[3];
|
||||||
|
echo "</td>
|
||||||
|
<td align=center class='bg1'>종사</td>
|
||||||
|
<td align=center>";
|
||||||
|
echo $officerName[2];
|
||||||
|
echo "</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center class='bg1'>장수</td>
|
||||||
|
<td colspan=11>";
|
||||||
|
$generalList = $db->query('SELECT npc, name FROM general WHERE city = %i AND nation = %i', $city['city'], $me['nation']);
|
||||||
|
if (!$generalList) {
|
||||||
|
echo "-";
|
||||||
|
}
|
||||||
|
foreach ($generalList as $general) {
|
||||||
|
echo getColoredName($general['name'], $general['npc']) . ', ';
|
||||||
|
}
|
||||||
|
echo "
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
";
|
||||||
|
}
|
||||||
?>
|
?>
|
||||||
<table align=center width=1000 class='tb_layout bg2'>
|
|
||||||
<tr>
|
|
||||||
<td colspan=10 style="color:<?= newColor($nation['color']) ?>; background-color:<?= $nation['color'] ?>;">
|
|
||||||
<font size=2>【 <?= CityConst::$regionMap[$city['region']] ?> | <?= CityConst::$levelMap[$city['level']] ?> 】 <?= $city['name'] ?></font>
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr style='text-align:center;'>
|
|
||||||
<td width=60 class='bg1'>주민</td>
|
|
||||||
<td width=140 class='pop-value'><?= $city['pop'] ?>/<?= $city['pop_max'] ?></td>
|
|
||||||
<td width=60 class='bg1'>인구율</td>
|
|
||||||
<td width=140 class='pop-prop-value'><?= round($city['pop'] / $city['pop_max'] * 100, 2) ?>%</td>
|
|
||||||
<td width=60 class='bg1'>자금 수입</td>
|
|
||||||
<td width=140 class='gold-income'><?= number_format($cityGoldIncome) ?></td>
|
|
||||||
<td width=60 class='bg1'>군량 수입</td>
|
|
||||||
<td width=140 class='rice-income'><?= number_format($cityRiceIncome) ?></td>
|
|
||||||
<td width=60 class='bg1'>둔전 수입</td>
|
|
||||||
<td width=140 class='wall-income'><?= number_format($cityWallIncome) ?></td>
|
|
||||||
</tr>
|
|
||||||
<tr style='text-align:center;'>
|
|
||||||
<td class='bg1'>농업</td>
|
|
||||||
<td class='agri-value'><?= $city['agri'] ?>/<?= $city['agri_max'] ?></td>
|
|
||||||
<td class='bg1'>상업</td>
|
|
||||||
<td class='comm-value'><?= $city['comm'] ?>/<?= $city['comm_max'] ?></td>
|
|
||||||
<td class='bg1'>치안</td>
|
|
||||||
<td class='secu-value'><?= $city['secu'] ?>/<?= $city['secu_max'] ?></td>
|
|
||||||
<td class='bg1'>수비</td>
|
|
||||||
<td class='def-value'><?= $city['def'] ?>/<?= $city['def_max'] ?></td>
|
|
||||||
<td class='bg1'>성벽</td>
|
|
||||||
<td class='wall-value'><?= $city['wall'] ?>/<?= $city['wall_max'] ?></td>
|
|
||||||
</tr>
|
|
||||||
<tr style='text-align:center;'>
|
|
||||||
<td class='bg1'>민심</td>
|
|
||||||
<td class='trust-value'><?= round($city['trust'], 1) ?></td>
|
|
||||||
<td class='bg1'>시세</td>
|
|
||||||
<td class='trade-value'><?= $city['trade'] ?>%</td>
|
|
||||||
<td class='bg1'>태수</td>
|
|
||||||
<td class='officer-4-value'><?= $officerName[4] ?></td>
|
|
||||||
<td class='bg1'>군사</td>
|
|
||||||
<td class='officer-3-value'><?= $officerName[3] ?></td>
|
|
||||||
<td class='bg1'>종사</td>
|
|
||||||
<td class='officer-2-value'><?= $officerName[2] ?></td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style='text-align:center;' class='bg1'>장수</td>
|
|
||||||
<td colspan=9 class='city-generals'><?= key_exists($cityID, $cityGeneralList) ? join(', ', $cityGeneralList[$cityID]) : '-' ?></td>
|
|
||||||
</tr>
|
|
||||||
</table>
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<table align=center width=1000 class='tb_layout bg0 anchor'>
|
<table align=center width=1000 class='tb_layout bg0 anchor'>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -268,7 +252,7 @@ $sel = [$type => "selected"];
|
|||||||
<td><?= banner() ?></td>
|
<td><?= banner() ?></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<div id="helper_genlist" style="display:none;"></div>
|
|
||||||
</body>
|
</body>
|
||||||
|
<div id="helper_genlist" style="display:none;"></div>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
+4
-8
@@ -42,14 +42,12 @@ if ($gameStor->isunited) {
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 세력장수</title>
|
<title><?= UniqueConst::$serverName ?>: 세력장수</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common']) ?>
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -97,7 +95,7 @@ if ($gameStor->isunited) {
|
|||||||
7 => ['gold', true],
|
7 => ['gold', true],
|
||||||
8 => ['rice', true],
|
8 => ['rice', true],
|
||||||
9 => ['crew', true],
|
9 => ['crew', true],
|
||||||
10 => ['refresh_score_total', true],
|
10 => ['connect', true],
|
||||||
11 => ['personal', true],
|
11 => ['personal', true],
|
||||||
12 => ['special', true],
|
12 => ['special', true],
|
||||||
13 => ['special2', true],
|
13 => ['special2', true],
|
||||||
@@ -105,9 +103,7 @@ if ($gameStor->isunited) {
|
|||||||
15 => ['npc', true],
|
15 => ['npc', true],
|
||||||
][$type];
|
][$type];
|
||||||
|
|
||||||
$generalList = $db->query(
|
$generalList = $db->query('SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,connect,gold,rice,crew,belong from general where nation = %i order by %b %l', $me['nation'], $orderKey, $orderDesc ? 'desc' : '');
|
||||||
'SELECT owner,no,picture,imgsvr,npc,age,nation,special,special2,personal,name,injury,leadership,strength,intel,experience,dedication,officer_level,killturn,refresh_score_total,gold,rice,crew,belong
|
|
||||||
FROM `general` LEFT JOIN `general_access_log` ON general.no = general_access_log.general_id where nation = %i order by %b %l', $me['nation'], $orderKey, $orderDesc ? 'desc' : '');
|
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<table align=center class='tb_layout bg0'>
|
<table align=center class='tb_layout bg0'>
|
||||||
@@ -175,8 +171,8 @@ if ($gameStor->isunited) {
|
|||||||
<td align=center>" . displayCharInfo($general['personal']) . "</td>
|
<td align=center>" . displayCharInfo($general['personal']) . "</td>
|
||||||
<td align=center>" . displaySpecialDomesticInfo($general['special']) . " / " . displaySpecialWarInfo($general['special2']) . "</td>
|
<td align=center>" . displaySpecialDomesticInfo($general['special']) . " / " . displaySpecialWarInfo($general['special2']) . "</td>
|
||||||
<td align=center>{$general['belong']}</td>
|
<td align=center>{$general['belong']}</td>
|
||||||
<td align=center>". $general['refresh_score_total'] ?? 0;
|
<td align=center>{$general['connect']}";
|
||||||
echo "<br>(" . getRefreshScoreText($general['refresh_score_total'] ?? 0) . ")</td>
|
echo "<br>(" . getConnect($general['connect']) . ")</td>
|
||||||
</tr>";
|
</tr>";
|
||||||
}
|
}
|
||||||
echo "
|
echo "
|
||||||
|
|||||||
@@ -25,14 +25,12 @@ if ($nationID == 0) {
|
|||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 세력정보</title>
|
<title><?= UniqueConst::$serverName ?>: 세력정보</title>
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common']) ?>
|
<?= WebUtil::printDist('ts', ['common']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|||||||
+28
-113
@@ -2,16 +2,11 @@
|
|||||||
|
|
||||||
namespace sammo;
|
namespace sammo;
|
||||||
|
|
||||||
use sammo\Enums\GeneralAccessLogColumn;
|
|
||||||
use sammo\Enums\GeneralQueryMode;
|
|
||||||
use sammo\Enums\TableName;
|
|
||||||
|
|
||||||
include "lib.php";
|
include "lib.php";
|
||||||
include "func.php";
|
include "func.php";
|
||||||
|
|
||||||
$showDieOnPrestartBtn = false;
|
$showDieImmediatelyBtn = false;
|
||||||
$showBuildNationCandidateBtn = false;
|
$availableDieImmediately = false;
|
||||||
$availableDieOnPrestart = false;
|
|
||||||
|
|
||||||
//로그인 검사
|
//로그인 검사
|
||||||
$session = Session::requireGameLogin()->setReadOnly();
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
@@ -21,10 +16,10 @@ $generalID = $session->generalID;
|
|||||||
$db = DB::db();
|
$db = DB::db();
|
||||||
$gameStor = KVStorage::getStorage($db, 'game_env');
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
$gameStor->cacheValues(['turntime', 'opentime', 'autorun_user', 'npcmode']);
|
$gameStor->cacheValues(['turntime', 'opentime', 'autorun_user', 'npcmode']);
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
|
||||||
$nowTick = $clock->nowTick();
|
|
||||||
|
|
||||||
$me = General::createObjFromDB($generalID, null, GeneralQueryMode::FullWithAccessLog);
|
increaseRefresh("내정보", 1);
|
||||||
|
|
||||||
|
$me = General::createGeneralObjFromDB($generalID);
|
||||||
|
|
||||||
$myset = $me->getVar('myset');
|
$myset = $me->getVar('myset');
|
||||||
if ($myset > 0) {
|
if ($myset > 0) {
|
||||||
@@ -33,81 +28,34 @@ if ($myset > 0) {
|
|||||||
$submit = 'hidden';
|
$submit = 'hidden';
|
||||||
}
|
}
|
||||||
|
|
||||||
$lastRefresh = $db->queryFirstField(
|
$targetTime = addTurn($me->getVar('lastrefresh'), $gameStor->turnterm, 2);
|
||||||
'SELECT %b FROM %b WHERE %b = %i',
|
|
||||||
GeneralAccessLogColumn::lastRefresh->value,
|
|
||||||
TableName::generalAccessLog->value,
|
|
||||||
GeneralAccessLogColumn::generalID->value,
|
|
||||||
$generalID
|
|
||||||
);
|
|
||||||
|
|
||||||
$nextChange = $me->getAuxVar('next_change');
|
|
||||||
if (!is_int($nextChange)) {
|
|
||||||
$nextChange = null;
|
|
||||||
}
|
|
||||||
$nextChangeDisplay = $nextChange === null ? null : $clock->formatTick($nextChange);
|
|
||||||
|
|
||||||
increaseRefresh("내정보", 1);
|
|
||||||
if ($gameStor->turntime <= $gameStor->opentime) {
|
if ($gameStor->turntime <= $gameStor->opentime) {
|
||||||
$targetTime = $me->getAuxVar('prestart_delete_after');
|
|
||||||
if (!is_int($targetTime)) {
|
|
||||||
$targetTime = addTurn(
|
|
||||||
$lastRefresh === null ? $nowTick : Util::toInt($lastRefresh),
|
|
||||||
$gameStor->turnterm,
|
|
||||||
GameConst::$minTurnDieOnPrestart
|
|
||||||
);
|
|
||||||
$me->setAuxVar('prestart_delete_after', $targetTime);
|
|
||||||
$me->applyDB($db);
|
|
||||||
}
|
|
||||||
$targetTimeDisplay = $clock->formatTick($targetTime);
|
|
||||||
|
|
||||||
//서버 가오픈시 할 수 있는 행동
|
//서버 가오픈시 할 수 있는 행동
|
||||||
if ($me->getNPCType() == 0 && $me->getNationID() == 0) {
|
if ($me->getNPCType() == 0) {
|
||||||
$showDieOnPrestartBtn = true;
|
$showDieImmediatelyBtn = true;
|
||||||
if ($targetTime <= $nowTick) {
|
if ($targetTime <= TimeUtil::now()) {
|
||||||
$availableDieOnPrestart = true;
|
$availableDieImmediately = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($me->getNationID() == 0) {
|
|
||||||
$showBuildNationCandidateBtn = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$use_treatment = $me->getAuxVar('use_treatment') ?? 10;
|
$use_treatment = $me->getAuxVar('use_treatment') ?? 10;
|
||||||
$use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
$use_auto_nation_turn = $me->getAuxVar('use_auto_nation_turn') ?? 1;
|
||||||
|
|
||||||
$changeDefence999Train = -3;
|
|
||||||
$changeDefence999Atmos = -6;
|
|
||||||
$changeDefence999Train = $me->onCalcDomestic('changeDefenceTrain', "train999", $changeDefence999Train);
|
|
||||||
$changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $changeDefence999Atmos);
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=500" />
|
<meta name="viewport" content="width=500" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 내정보</title>
|
<title><?= UniqueConst::$serverName ?>: 내정보</title>
|
||||||
<?= WebUtil::printStaticValues([
|
<script>
|
||||||
'availableDieOnPrestart' => $availableDieOnPrestart,
|
var availableDieImmediately = <?= $availableDieImmediately ? 'true' : 'false' ?>;
|
||||||
'staticValues' => [
|
</script>
|
||||||
'items' => Util::mapWithKey(fn (string $key, BaseItem $item) => [
|
|
||||||
'name' => $item->getName(),
|
|
||||||
'rawName' => $item->getRawName(),
|
|
||||||
'className' => $item->getRawClassName(),
|
|
||||||
'cost' => $item->getCost(),
|
|
||||||
'isBuyable' => $item->isBuyable(),
|
|
||||||
], $me->getItems())
|
|
||||||
]
|
|
||||||
]) ?>
|
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['myPage']) ?>
|
<?= WebUtil::printDist('ts', ['myPage']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -117,15 +65,15 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
<div class="col">내 정 보<br><?= backButton() ?></div>
|
<div class="col">내 정 보<br><?= backButton() ?></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="row gx-0">
|
<div class="row gx-0">
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col"><?php generalInfo($me); ?><?php generalInfo2($me); ?></div>
|
<div class="col"><?php generalInfo($me); ?><?php generalInfo2($me); ?></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row mx-0 gx-0">
|
<div class="row">
|
||||||
<div class="col" style='padding-left:2ch;'>
|
<div class="col" style='padding-left:4ch;'>
|
||||||
토너먼트 【
|
토너먼트 【
|
||||||
<input type=radio class='tnmt' name=tnmt value=0 <?= $me->getVar('tnmt') == 0 ? "checked" : ""; ?>>수동참여
|
<input type=radio class='tnmt' name=tnmt value=0 <?= $me->getVar('tnmt') == 0 ? "checked" : ""; ?>>수동참여
|
||||||
<input type=radio class='tnmt' name=tnmt value=1 <?= $me->getVar('tnmt') == 1 ? "checked" : ""; ?>>자동참여
|
<input type=radio class='tnmt' name=tnmt value=1 <?= $me->getVar('tnmt') == 1 ? "checked" : ""; ?>>자동참여
|
||||||
@@ -146,29 +94,18 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
<option value=0 <?= (!$use_auto_nation_turn) ? "selected" : ""; ?>>허용 안함</option>
|
<option value=0 <?= (!$use_auto_nation_turn) ? "selected" : ""; ?>>허용 안함</option>
|
||||||
</select>】<br>
|
</select>】<br>
|
||||||
∞<span style='color:orange'>수뇌가 되었을 때 휴식 턴이어도 적당한 턴을 알아서 넣는 것을 허용합니다.</span><br><br>
|
∞<span style='color:orange'>수뇌가 되었을 때 휴식 턴이어도 적당한 턴을 알아서 넣는 것을 허용합니다.</span><br><br>
|
||||||
<?php else : ?>
|
<?php else: ?>
|
||||||
<input type="hidden" id='use_auto_nation_turn' name='use_auto_nation_turn' value="1" />
|
<input type="hidden" id='use_auto_nation_turn' name='use_auto_nation_turn' value="1"/>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
수비 【<select id='defence_train' name='defence_train'>
|
수비 【<select id='defence_train' name='defence_train'>
|
||||||
<?php foreach ([90, 80, 60, 40] as $targetDefenceTrain) : ?>
|
<?php foreach ([90, 80, 60, 40] as $targetDefenceTrain) : ?>
|
||||||
<option value='<?= $targetDefenceTrain ?>' <?= $me->getVar('defence_train') == $targetDefenceTrain ? "selected" : ""; ?>><?= formatDefenceTrain($targetDefenceTrain) ?>(훈사<?= $targetDefenceTrain ?>)</option>
|
<option value='<?= $targetDefenceTrain ?>' <?= $me->getVar('defence_train') == $targetDefenceTrain ? "selected" : ""; ?>><?= formatDefenceTrain($targetDefenceTrain) ?>(훈사<?= $targetDefenceTrain ?>)</option>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
<option value=999 <?= $me->getVar('defence_train') == 999 ? "selected" : ""; ?>><?= formatDefenceTrain(999) ?>
|
<option value=999 <?= $me->getVar('defence_train') == 999 ? "selected" : ""; ?>><?= formatDefenceTrain(999) ?>[훈련, 사기 -3]</option>
|
||||||
<?php if ($changeDefence999Train != 0 || $changeDefence999Train != 0) :
|
|
||||||
?>[<?= $changeDefence999Train != 0 ? "훈련 {$changeDefence999Train}," : '' ?><?= $changeDefence999Atmos != 0 ? "사기 {$changeDefence999Atmos}" : ''
|
|
||||||
?>]<?php endif ?></option>
|
|
||||||
</select>
|
</select>
|
||||||
】<br><br>
|
】<br><br>
|
||||||
<input type=<?= $submit ?> id='set_my_setting' name=btn style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px; value=설정저장><br>
|
<input type=<?= $submit ?> id='set_my_setting' name=btn style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px; value=설정저장><br>
|
||||||
∞<span style='color:orange'>설정저장은 이달중 <?= $myset ?>회 남았습니다.</span><br><br>
|
∞<span style='color:orange'>설정저장은 이달중 <?= $myset ?>회 남았습니다.</span><br><br>
|
||||||
|
|
||||||
<?php if ($me->getPenaltyList()->count()) : ?>
|
|
||||||
징계 목록(저장 시 갱신)<br>
|
|
||||||
<?php foreach ($me->getPenaltyList() as $penaltyKey => $penalty) : ?>
|
|
||||||
<span style='color:red'><?= $penaltyKey->getHelptext() ?> : <?= $penalty ?></span><br>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
<br />
|
|
||||||
<?php endif; ?>
|
|
||||||
<?php if (!($gameStor->autorun_user['limit_minutes'] ?? false)) : ?>
|
<?php if (!($gameStor->autorun_user['limit_minutes'] ?? false)) : ?>
|
||||||
휴 가 신 청<br>
|
휴 가 신 청<br>
|
||||||
<button type="button" id='vacation' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>휴가 신청</button><br><br>
|
<button type="button" id='vacation' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>휴가 신청</button><br><br>
|
||||||
@@ -176,23 +113,13 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
<!--빙의 해제용 삭턴 조절<br>
|
<!--빙의 해제용 삭턴 조절<br>
|
||||||
<a href="b_myPage.php?detachNPC=1"><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>빙의 해체 요청</button></a>-->
|
<a href="b_myPage.php?detachNPC=1"><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>빙의 해체 요청</button></a>-->
|
||||||
|
|
||||||
<?php if ($showDieOnPrestartBtn) : ?>
|
<?php if ($showDieImmediatelyBtn) : ?>
|
||||||
가오픈 기간 내 장수 삭제 (<?= $targetTimeDisplay ?> 부터)<br>
|
가오픈 기간 내 장수 삭제 (<?= substr($targetTime, 0, 19) ?> 부터)<br>
|
||||||
<button type="button" id='dieOnPrestart' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>장수 삭제</button><br><br>
|
<a href="c_die_immediately.php" id='die_immediately'><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>장수 삭제</button></a><br><br>
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php if ($showBuildNationCandidateBtn) : ?>
|
|
||||||
서버 개시 이전 거병(2턴부터 건국 가능)<br>
|
|
||||||
<button type="button" id='buildNationCandidate' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>사전 거병</button><br><br>
|
|
||||||
<?php endif; ?>
|
|
||||||
|
|
||||||
<?php if (GameConst::$availableInstantAction['instantRetreat'] ?? false) : ?>
|
|
||||||
거리 3칸 이내 아국 도시로 즉시 이동<br>
|
|
||||||
<button type="button" id='instantRetreat' style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>접경 귀환</button><br><br>
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php if ($gameStor->npcmode == 2 && $me->getNPCType() == 0) : ?>
|
<?php if ($gameStor->npcmode == 2 && $me->getNPCType() == 0) : ?>
|
||||||
다른 장수 선택 (<?= $nextChangeDisplay ?? '지금' ?>부터)<br>
|
다른 장수 선택 (<?= substr($me->getAuxVar('next_change') ?? TimeUtil::now(), 0, 19) ?> 부터)<br>
|
||||||
<a href="select_general_from_pool.php" id='select_general_from_pool'><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>다른 장수 선택</button></a><br><br>
|
<a href="select_general_from_pool.php" id='select_general_from_pool'><button type="button" style=background-color:<?= GameConst::$basecolor2 ?>;color:white;width:160px;height:30px;font-size:14px;>다른 장수 선택</button></a><br><br>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
@@ -211,18 +138,6 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row">
|
|
||||||
<div class="col">아이템 파기</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<div class="row mx-1">
|
|
||||||
<div class="btn-group" role="group">
|
|
||||||
<?php foreach ($me->getItems() as $itemKey => $item) : ?>
|
|
||||||
<button type="button" data-item-type='<?= $itemKey ?>' class="drop-item-btn btn btn-primary <?= $item->getName() == '-' ? 'disabled' : '' ?>"><?= $item->getName() ?></button>
|
|
||||||
<?php endforeach; ?>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<br>
|
<br>
|
||||||
|
|
||||||
개인용 CSS<br>
|
개인용 CSS<br>
|
||||||
@@ -230,7 +145,7 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row gx-0">
|
<div class="row gx-0">
|
||||||
<div class="col bg1 text-center">
|
<div class="col bg1 text-center">
|
||||||
<h4 style='color:skyblue'>개인 기록</h4>
|
<h4 style='color:skyblue'>개인 기록</h4>
|
||||||
@@ -243,7 +158,7 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
<button type="button" class="load_old_log btn btn-secondary" data-log_type="generalAction">이전 로그 불러오기</button>
|
<button type="button" class="load_old_log btn btn-secondary" data-log_type="generalAction">이전 로그 불러오기</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row gx-0">
|
<div class="row gx-0">
|
||||||
<div class="col bg1 text-center">
|
<div class="col bg1 text-center">
|
||||||
<h4 style='color:orange'>전투 기록</h4>
|
<h4 style='color:orange'>전투 기록</h4>
|
||||||
@@ -257,7 +172,7 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row gx-0">
|
<div class="row gx-0">
|
||||||
<div class="col bg1 text-center">
|
<div class="col bg1 text-center">
|
||||||
<h4 style='color:skyblue'>장수 열전</h4>
|
<h4 style='color:skyblue'>장수 열전</h4>
|
||||||
@@ -267,7 +182,7 @@ $changeDefence999Atmos = $me->onCalcDomestic('changeDefenceTrain', "atmos999", $
|
|||||||
<?= formatHistoryToHTML(getGeneralHistoryLogAll($generalID)) ?>
|
<?= formatHistoryToHTML(getGeneralHistoryLogAll($generalID)) ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col col-12 col-lg-6">
|
<div class="col col-12 col-md-6">
|
||||||
<div class="row gx-0">
|
<div class="row gx-0">
|
||||||
<div class="col bg1 text-center">
|
<div class="col bg1 text-center">
|
||||||
<h4 style='color:orange'>전투 결과</h4>
|
<h4 style='color:orange'>전투 결과</h4>
|
||||||
|
|||||||
+145
-96
@@ -14,106 +14,58 @@ $gameStor = KVStorage::getStorage($db, 'game_env');
|
|||||||
increaseRefresh("토너먼트", 1);
|
increaseRefresh("토너먼트", 1);
|
||||||
TurnExecutionHelper::executeAllCommand();
|
TurnExecutionHelper::executeAllCommand();
|
||||||
|
|
||||||
$me = $db->queryFirstRow(
|
$me = $db->queryFirstRow('select no,tournament,con,turntime from general where owner=%i', $userID);
|
||||||
'SELECT no,tournament,refresh_score,turntime from `general`
|
|
||||||
LEFT JOIN general_access_log AS l ON `general`.no = l.general_id where owner=%i', $userID
|
|
||||||
);
|
|
||||||
$generalID = $me['no'];
|
|
||||||
$admin = $gameStor->getValues(['tournament', 'phase', 'turnterm', 'tnmt_msg', 'tnmt_type', 'develcost', 'tnmt_trig']);
|
|
||||||
$turnTerm = $admin['turnterm'];
|
|
||||||
|
|
||||||
$limitState = checkLimit($me['refresh_score']);
|
$admin = $gameStor->getValues(['tournament', 'phase', 'tnmt_msg', 'tnmt_type', 'develcost', 'tnmt_trig']);
|
||||||
if ($limitState >= 2) {
|
|
||||||
|
$con = checkLimit($me['con']);
|
||||||
|
if ($con >= 2) {
|
||||||
printLimitMsg($me['turntime']);
|
printLimitMsg($me['turntime']);
|
||||||
exit();
|
exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($admin['tnmt_type']) {
|
switch ($admin['tnmt_type']) {
|
||||||
case convertTournamentType('전력전'):
|
default:
|
||||||
$tnmt_type = "전력전";
|
throw new \RuntimeException('invalid tnmt_type');
|
||||||
$color = 'cyan';
|
case 0:
|
||||||
|
$tnmt_type = "<font color=cyan>전력전</font>";
|
||||||
$tp = "total";
|
$tp = "total";
|
||||||
$tp2 = "종합";
|
$tp2 = "종합";
|
||||||
$tp3 = "total";
|
$tp3 = "total";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('통솔전'):
|
case 1:
|
||||||
$tnmt_type = "통솔전";
|
$tnmt_type = "<font color=cyan>통솔전</font>";
|
||||||
$color = 'cyan';
|
|
||||||
$tp = "leadership";
|
$tp = "leadership";
|
||||||
$tp2 = "통솔";
|
$tp2 = "통솔";
|
||||||
$tp3 = "leadership";
|
$tp3 = "leadership";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('일기토'):
|
case 2:
|
||||||
$tnmt_type = "일기토";
|
$tnmt_type = "<font color=cyan>일기토</font>";
|
||||||
$color = 'cyan';
|
|
||||||
$tp = "strength";
|
$tp = "strength";
|
||||||
$tp2 = "무력";
|
$tp2 = "무력";
|
||||||
$tp3 = "strength";
|
$tp3 = "strength";
|
||||||
break;
|
break;
|
||||||
case convertTournamentType('설전'):
|
case 3:
|
||||||
$tnmt_type = "설전";
|
$tnmt_type = "<font color=cyan>설전</font>";
|
||||||
$color = 'cyan';
|
|
||||||
$tp = "intel";
|
$tp = "intel";
|
||||||
$tp2 = "지력";
|
$tp2 = "지력";
|
||||||
$tp3 = "intel";
|
$tp3 = "intel";
|
||||||
break;
|
break;
|
||||||
default:
|
|
||||||
throw new \RuntimeException('invalid tnmt_type');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$bettingID = $gameStor->last_tournament_betting_id ?? 0;
|
|
||||||
if ($bettingID != 0) {
|
|
||||||
$betting = $bettingID != 0 ? new Betting($bettingID) : null;
|
|
||||||
$info = $betting->getInfo();
|
|
||||||
} else {
|
|
||||||
$info = getDummyBettingInfo($tnmt_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
$myBet = [];
|
|
||||||
$globalBet = [];
|
|
||||||
|
|
||||||
if ($bettingID != 0) {
|
|
||||||
$betting = $bettingID != 0 ? new Betting($bettingID) : null;
|
|
||||||
$info = $betting->getInfo();
|
|
||||||
|
|
||||||
foreach ($db->queryAllLists(
|
|
||||||
'SELECT general_id, user_id, amount, betting_type FROM ng_betting WHERE betting_id = %i',
|
|
||||||
$bettingID
|
|
||||||
) as [$betGeneralID, $userID, $amount, $bettingTypeKey]) {
|
|
||||||
$bettingKey = Json::decode($bettingTypeKey)[0];
|
|
||||||
if ($betGeneralID == $generalID) {
|
|
||||||
$myBet[$bettingKey] = $amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (key_exists($bettingKey, $globalBet)) {
|
|
||||||
$globalBet[$bettingKey] += $amount;
|
|
||||||
} else {
|
|
||||||
$globalBet[$bettingKey] = $amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$info = getDummyBettingInfo($tnmt_type);
|
|
||||||
}
|
|
||||||
|
|
||||||
$myBetTotal = array_sum($myBet);
|
|
||||||
$globalBetTotal = array_sum($globalBet);
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<?php if ($limitState == 1) {
|
<?php if ($con == 1) {
|
||||||
MessageBox("접속제한이 얼마 남지 않았습니다! 제한량이 모자라다면 참여를 해보세요^^");
|
MessageBox("접속제한이 얼마 남지 않았습니다! 제한량이 모자라다면 참여를 해보세요^^");
|
||||||
} ?>
|
} ?>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1024" />
|
<meta name="viewport" content="width=1024" />
|
||||||
<title><?= UniqueConst::$serverName ?>: 토너먼트</title>
|
<title><?= UniqueConst::$serverName ?>: 토너먼트</title>
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', 'common', true) ?>
|
<?= WebUtil::printDist('ts', 'common', true) ?>
|
||||||
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
</head>
|
</head>
|
||||||
@@ -125,24 +77,128 @@ $globalBetTotal = array_sum($globalBet);
|
|||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
<table align=center class='tb_layout bg0'>
|
<table align=center class='tb_layout bg0'>
|
||||||
<?php if ($me['no'] > 0 && $me['tournament'] == 0 && $admin['tournament'] == 1) : ?>
|
<?php
|
||||||
<form method=post action=c_tournament.php>
|
if ($session->userGrade >= 5) {
|
||||||
<tr>
|
$sel = [];
|
||||||
<td colspan=8><button type="button" class="btn btn-secondary" onclick='location.reload()'>갱신</button><button type="submit" class="btn btn-sammo-base2" onclick='return confirm("참가비 금<?= $admin['develcost'] ?>이 필요합니다. 참가하시겠습니까?")'>참가</button><input type='hidden' name='btn' value='참가'/></td>
|
echo "
|
||||||
</tr>
|
<form method=post action=c_tournament.php>
|
||||||
</form>
|
<tr><td colspan=8><input type=textarea size=150 style=color:white;background-color:black; name=msg><input type=submit name=btn value='메시지'></td></tr>
|
||||||
<?php else : ?>
|
<tr><td colspan=8>
|
||||||
<tr>
|
<input type=button value='갱신' onclick='location.reload()'>";
|
||||||
<td colspan=8><button type="button" class="btn btn-secondary" onclick='location.reload()'>갱신</button></td>
|
|
||||||
</tr>
|
switch ($admin['tnmt_trig']) {
|
||||||
<?php endif;
|
case 0:
|
||||||
|
$sel[0] = "selected";
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
$sel[1] = "selected";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
$sel[2] = "selected";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
$sel[3] = "selected";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
$sel[4] = "selected";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
$sel[5] = "selected";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
$sel[6] = "selected";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
$sel[7] = "selected";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($admin['tournament'] == 0) {
|
||||||
|
?>
|
||||||
|
<select name=auto size=1 style=color:white;background-color:black;>
|
||||||
|
<option style=color:white; value=0>수동진행</option>
|
||||||
|
<option style=color:white; value=1>12분 05일</option>
|
||||||
|
<option style=color:white; value=2>07분 10시</option>
|
||||||
|
<option style=color:white; value=3>03분 04시</option>
|
||||||
|
<option style=color:white; value=4>01분 82분</option>
|
||||||
|
<option style=color:white; value=5>30초 41분</option>
|
||||||
|
<option style=color:white; value=6>15초 21분</option>
|
||||||
|
<option style=color:white; value=7>05초 07분</option>
|
||||||
|
</select>
|
||||||
|
<select name=type size=1 style=color:white;background-color:black;>
|
||||||
|
<option style=color:white; value=0>전력전</option>
|
||||||
|
<option style=color:white; value=1>통솔전</option>
|
||||||
|
<option style=color:white; value=2>일기토</option>
|
||||||
|
<option style=color:white; value=3>설전</option>
|
||||||
|
</select>
|
||||||
|
<input type=submit name=btn value='개최'>
|
||||||
|
<select name=trig size=1 style=color:white;background-color:black;>
|
||||||
|
<option style=color:white; value=0 <?= $sel[0] ?? '' ?>>수동진행</option>
|
||||||
|
<option style=color:white; value=1 <?= $sel[1] ?? '' ?>>12분 05일</option>
|
||||||
|
<option style=color:white; value=2 <?= $sel[2] ?? '' ?>>07분 10시</option>
|
||||||
|
<option style=color:white; value=3 <?= $sel[3] ?? '' ?>>03분 04시</option>
|
||||||
|
<option style=color:white; value=4 <?= $sel[4] ?? '' ?>>01분 82분</option>
|
||||||
|
<option style=color:white; value=5 <?= $sel[5] ?? '' ?>>30초 41분</option>
|
||||||
|
<option style=color:white; value=6 <?= $sel[6] ?? '' ?>>15초 21분</option>
|
||||||
|
<option style=color:white; value=7 <?= $sel[7] ?? '' ?>>05초 07분</option>
|
||||||
|
</select>
|
||||||
|
<input type=submit name=btn value='자동개최설정'>
|
||||||
|
<input type=submit name=btn value='포상'>
|
||||||
|
<input type=submit name=btn value='회수'>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
echo "<input type=submit name=btn value='중단' onclick='return confirm(\"진짜 중단하시겠습니까?\")'>";
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($admin['tournament']) {
|
||||||
|
case 1:
|
||||||
|
echo "<input type=submit name=btn value='랜덤투입'>";
|
||||||
|
echo "<input type=submit name=btn value='랜덤전부투입'>";
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
echo "<input type=submit name=btn value='예선'><input type=submit name=btn value='예선전부'>";
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
echo "<input type=submit name=btn value='추첨'><input type=submit name=btn value='추첨전부'>";
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
echo "<input type=submit name=btn value='본선'><input type=submit name=btn value='본선전부'>";
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
echo "<input type=submit name=btn value='배정'>";
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
echo "<input type=submit name=btn value='베팅마감'>";
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
echo "<input type=submit name=btn value='16강'>";
|
||||||
|
break;
|
||||||
|
case 8:
|
||||||
|
echo "<input type=submit name=btn value='8강'>";
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
echo "<input type=submit name=btn value='4강'>";
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
echo "<input type=submit name=btn value='결승'>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "
|
||||||
|
</td></tr>
|
||||||
|
</form>";
|
||||||
|
} elseif ($me['no'] > 0 && $me['tournament'] == 0 && $admin['tournament'] == 1) {
|
||||||
|
echo "<form method=post action=c_tournament.php><tr><td colspan=8><input type=button value='갱신' onclick='location.reload()'><input type=submit name=btn value='참가' onclick='return confirm(\"참가비 금{$admin['develcost']}이 필요합니다. 참가하시겠습니까?\")'></td></tr></form>";
|
||||||
|
} else {
|
||||||
|
echo "<tr><td colspan=8><input type=button value='갱신' onclick='location.reload()'></td></tr>";
|
||||||
|
}
|
||||||
|
|
||||||
$str1 = getTournament($admin['tournament']);
|
$str1 = getTournament($admin['tournament']);
|
||||||
$str2 = getTournamentTime();
|
$str2 = getTournamentTime();
|
||||||
if ($str2) {
|
if ($str2) {
|
||||||
$str2 = ', ' . $str2;
|
$str2 = ', ' . $str2;
|
||||||
}
|
}
|
||||||
$str3 = getTournamentTermText($turnTerm);
|
$str3 = getTournamentTermText();
|
||||||
if ($str3) {
|
if ($str3) {
|
||||||
$str3 = ', ' . $str3;
|
$str3 = ', ' . $str3;
|
||||||
}
|
}
|
||||||
@@ -153,7 +209,7 @@ $globalBetTotal = array_sum($globalBet);
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan=8 align=center>
|
<td colspan=8 align=center>
|
||||||
<font color=white size=6><span style="color:<?= $color ?>"><?= $tnmt_type ?></span> (<?= $str1 . $str2 . $str3 ?>)</font>
|
<font color=white size=6><?= $tnmt_type ?> (<?= $str1 . $str2 . $str3 ?>)</font>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -362,31 +418,24 @@ $globalBetTotal = array_sum($globalBet);
|
|||||||
|
|
||||||
echo "
|
echo "
|
||||||
</tr>";
|
</tr>";
|
||||||
|
$globalBet = $db->queryFirstList('SELECT * FROM betting WHERE general_id = 0') ?? [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,];
|
||||||
|
$globalBet = array_splice($globalBet, -16);
|
||||||
|
$globalBetTotal = array_sum($globalBet);
|
||||||
$admin = $gameStor->getValues(['tournament', 'phase']);
|
$admin = $gameStor->getValues(['tournament', 'phase']);
|
||||||
$bet = [];
|
$bet = [];
|
||||||
$gold = [];
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$keyMap = [];
|
if ($globalBet[$i] == 0) {
|
||||||
foreach ($info->candidates as $key => $candidate) {
|
$bet[$i] = '∞';
|
||||||
$keyMap[$candidate->aux['idx']] = $key;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($globalBet as $key => $amount) {
|
|
||||||
if ($amount == 0) {
|
|
||||||
$bet[$key] = "∞";
|
|
||||||
$gold[$key] = 0;
|
|
||||||
} else {
|
|
||||||
$rewardRatio = round($globalBetTotal / $amount, 2);
|
|
||||||
$bet[$key] = $rewardRatio;
|
|
||||||
$gold[$key] = $rewardRatio * ($myBet[$key] ?? 0);
|
|
||||||
}
|
}
|
||||||
|
$bet[$i] = round($globalBetTotal / $globalBet[$i], 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
<tr align=center>";
|
<tr align=center>";
|
||||||
|
|
||||||
foreach (range(0, 15) as $i) {
|
for ($i = 0; $i < 16; $i++) {
|
||||||
$amount = $bet[$keyMap[$i] ?? -1] ?? 0;
|
echo "<td><font color=skyblue>{$bet[$i]}</font></td>";
|
||||||
echo "<td><font color=skyblue>{$amount}</font></td>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
echo "
|
echo "
|
||||||
@@ -420,7 +469,7 @@ $globalBetTotal = array_sum($globalBet);
|
|||||||
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
|
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
|
||||||
}
|
}
|
||||||
foreach (Util::range(count($generalList), 4) as $idx) {
|
foreach (Util::range(count($generalList), 4) as $idx) {
|
||||||
printRow($idx, 0, '', '', '', '', '', '', '', '', '');
|
printRow($idx, '', '', '', '', '', '', '', '', '', '');
|
||||||
}
|
}
|
||||||
echo "
|
echo "
|
||||||
</table>
|
</table>
|
||||||
@@ -447,7 +496,7 @@ $globalBetTotal = array_sum($globalBet);
|
|||||||
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
|
printRow($k, $general['npc'], $general['name'], $general[$tp], $general['game'], $general['win'], $general['draw'], $general['lose'], $general['gd'], $general['gl'], $general['prmt']);
|
||||||
}
|
}
|
||||||
foreach (Util::range(count($generalList), 8) as $idx) {
|
foreach (Util::range(count($generalList), 8) as $idx) {
|
||||||
printRow($idx, 0, '', '', '', '', '', '', '', '', '');
|
printRow($idx, '', '', '', '', '', '', '', '', '', '');
|
||||||
}
|
}
|
||||||
echo "
|
echo "
|
||||||
</table>
|
</table>
|
||||||
|
|||||||
+230
@@ -0,0 +1,230 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
|
||||||
|
increaseRefresh("부대편성", 1);
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,nation,troop FROM general WHERE owner=%i', $userID);
|
||||||
|
|
||||||
|
$troops = [];
|
||||||
|
foreach ($db->query('SELECT troop_leader,name FROM troop WHERE nation = %i', $me['nation']) as $rawTroop) {
|
||||||
|
$troops[$rawTroop['troop_leader']] = [
|
||||||
|
'name' => $rawTroop['name'],
|
||||||
|
'users' => []
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($db->query(
|
||||||
|
'SELECT no,name,turntime,troop,city FROM general WHERE troop!=0 AND nation = %i ORDER BY turntime ASC',
|
||||||
|
$me['nation']
|
||||||
|
) as $general) {
|
||||||
|
if (!key_exists($general['troop'], $troops)) {
|
||||||
|
trigger_error("올바르지 않은 부대 소속 {$general['no']}, {$general['name']} : {$general['troop']}");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$general['cityText'] = CityConst::byID($general['city'])->name;
|
||||||
|
|
||||||
|
$troops[$general['troop']]['users'][] = $general;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($troops) {
|
||||||
|
$troopLeaders = $db->query(
|
||||||
|
'SELECT no,name,picture,imgsvr,turntime,city,troop FROM general WHERE no IN %li',
|
||||||
|
array_keys($troops)
|
||||||
|
);
|
||||||
|
$generalTurnList = [];
|
||||||
|
|
||||||
|
foreach ($db->queryAllLists(
|
||||||
|
'SELECT general_id, turn_idx, brief FROM general_turn WHERE general_id IN %li AND turn_idx < 5 ORDER BY general_id ASC, turn_idx ASC',
|
||||||
|
array_column($troopLeaders, 'no')
|
||||||
|
) as [$generalID, $turnIdx, $brief]) {
|
||||||
|
if (!key_exists($generalID, $generalTurnList)) {
|
||||||
|
$generalTurnList[$generalID] = [];
|
||||||
|
}
|
||||||
|
$generalTurnList[$generalID][$turnIdx] = $brief;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($troopLeaders as $troopLeader) {
|
||||||
|
$imageTemp = GetImageURL($troopLeader['imgsvr']);
|
||||||
|
|
||||||
|
$troopLeader['pictureFullPath'] = "$imageTemp/{$troopLeader['picture']}";
|
||||||
|
$troopLeader['cityText'] = CityConst::byID($troopLeader['city'])->name;
|
||||||
|
|
||||||
|
$turnText = [];
|
||||||
|
foreach ($generalTurnList[$troopLeader['no']] as $rawTurnIdx => $brief) {
|
||||||
|
if ($brief != '집합') {
|
||||||
|
$brief = '~';
|
||||||
|
}
|
||||||
|
$turnIdx = $rawTurnIdx + 1;
|
||||||
|
$turnText[] = "{$turnIdx} : {$brief}";
|
||||||
|
}
|
||||||
|
$troopLeader['turnText'] = join('<br>', $turnText);
|
||||||
|
$troops[$troopLeader['troop']]['leader'] = $troopLeader;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uasort($troops, function ($lhs, $rhs) {
|
||||||
|
return $lhs['leader']['turntime'] <=> $rhs['leader']['turntime'];
|
||||||
|
})
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=1024" />
|
||||||
|
<title><?= UniqueConst::$serverName ?>: 부대편성</title>
|
||||||
|
<?= WebUtil::printJS('../d_shared/common_path.js') ?>
|
||||||
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
|
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css" />
|
||||||
|
<?= WebUtil::printDist('ts', ['common', 'troop'], true) ?>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div style="width:1000px;margin:auto;">
|
||||||
|
<table width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td>부 대 편 성<br><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table id="troop_list" class='tb_layout bg0'>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<td width=64 class='bg1 center'>선 택</td>
|
||||||
|
<td width=130 class='bg1 center'>부 대 정 보</td>
|
||||||
|
<td width=100 class='bg1 center'>부 대 장</td>
|
||||||
|
<td width=576 class='bg1 center' style=table-layout:fixed;word-break:break-all;>장 수</td>
|
||||||
|
<td width=130 class='bg1 center' style=table-layout:fixed;word-break:break-all;>부대장행동</td>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td colspan='5'>
|
||||||
|
<?php if (!$troops) : ?>
|
||||||
|
<?php elseif ($me['troop'] == 0) : ?>
|
||||||
|
<input type=button id='btnJoinTroop' value='부 대 가 입'>
|
||||||
|
<?php else : ?>
|
||||||
|
<input type=button id="btnLeaveTroop" value='부 대 탈 퇴'>
|
||||||
|
<?php endif; ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
<tbody>
|
||||||
|
<?php
|
||||||
|
foreach ($troops as $troopNo => $troop) {
|
||||||
|
$troopLeader = $troop['leader'];
|
||||||
|
$genlistText = [];
|
||||||
|
$cityText = $troopLeader['cityText'];
|
||||||
|
$cityID = $troopLeader['city'];
|
||||||
|
$leaderID = $troopLeader['no'];
|
||||||
|
|
||||||
|
foreach ($troop['users'] as $troopUser) {
|
||||||
|
$spanClass = 'troopUser';
|
||||||
|
if ($troopUser['city'] !== $cityID) {
|
||||||
|
$spanClass .= ' diffCity';
|
||||||
|
}
|
||||||
|
if ($troopUser['no'] == $leaderID) {
|
||||||
|
$spanClass .= ' leader';
|
||||||
|
}
|
||||||
|
$genlistText[] = "<span class='$spanClass' data-general-id='{$troopUser['no']}'
|
||||||
|
><span class='generalName'>{$troopUser['name']}</span><span class='cityText'>【{$troopUser['cityText']}】</span
|
||||||
|
></span>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$genlistText = sprintf('%s (%d명)', join(', ', $genlistText), count($genlistText)); ?>
|
||||||
|
|
||||||
|
<?php if ($me['troop'] == 0) : ?>
|
||||||
|
<tr>
|
||||||
|
<td align=center rowspan=2><input type='radio' class='troopId' name='troop' value='<?= $troopNo ?>'></td>
|
||||||
|
<td align=center><?= $troop['name'] ?><br>【 <?= $cityText ?> 】</td>
|
||||||
|
<td height=64 class='generalIcon' style='background:no-repeat center url("<?= $troopLeader['pictureFullPath'] ?>");background-size:64px;'> </td>
|
||||||
|
<td rowspan=2 width=62><?= $genlistText ?></td>
|
||||||
|
<td rowspan=2><?= $troopLeader['turnText'] ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>
|
||||||
|
<font size=2>【턴】 <?= substr($troopLeader['turntime'], 14, 5) ?></font>
|
||||||
|
</td>
|
||||||
|
<td align=center>
|
||||||
|
<font size=1><?= $troopLeader['name'] ?></font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=5>
|
||||||
|
|
||||||
|
<?php else : ?>
|
||||||
|
<tr>
|
||||||
|
<td align=center rowspan=2> </td>
|
||||||
|
<td align=center><?= $troop['name'] ?><br>【 <?= $cityText ?> 】</td>
|
||||||
|
<td height=64 class='generalIcon' style='background:no-repeat center url("<?= $troopLeader['pictureFullPath'] ?>");background-size:64px;'> </td>
|
||||||
|
<td rowspan=2 width=62><?= $genlistText ?></td>
|
||||||
|
<td rowspan=2>
|
||||||
|
<?php if ($me['no'] == $troopLeader['no']) : ?>
|
||||||
|
<select id='genNo' name=gen size=3 style=color:white;background-color:black;font-size:14px;width:128px;>";
|
||||||
|
<?php foreach ($troop['users'] as $troopUser) : ?>
|
||||||
|
<?php if ($troopUser['no'] == $me['no']) {
|
||||||
|
continue;
|
||||||
|
} ?>
|
||||||
|
<option value='<?= $troopUser['no'] ?>'><?= $troopUser['name'] ?></option>
|
||||||
|
<?php endforeach; ?>
|
||||||
|
</select><br>
|
||||||
|
<input type=button id='btnKickTroop' value='부 대 추 방' style=width:130px;height:25px;>
|
||||||
|
<?php else : ?>
|
||||||
|
<?= $troopLeader['turnText'] ?>
|
||||||
|
<?php endif; ?>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align=center>
|
||||||
|
<font size=2>【턴】 <?= substr($troopLeader['turntime'], 14, 5) ?></font>
|
||||||
|
</td>
|
||||||
|
<td align=center>
|
||||||
|
<font size=1><?= $troopLeader['name'] ?></font>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td colspan=5></td>
|
||||||
|
</tr>
|
||||||
|
<?php endif;
|
||||||
|
} //foreach ($troops as $troopNo=>$troop) {
|
||||||
|
?>
|
||||||
|
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
</table>
|
||||||
|
<br>
|
||||||
|
<table width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td width=80 class='bg1'>부 대 명</td>
|
||||||
|
<td width=130><input type=text style=color:white;background-color:black; size=18 maxlength=18 id='nameplate'></td>
|
||||||
|
<?php if ($me['troop'] == 0) : ?>
|
||||||
|
<td><input type=button id='btnCreateTroop' value='부 대 창 설'></td>
|
||||||
|
<?php else : ?>
|
||||||
|
<td><input type=button id='btnChangeTroopName' value='부 대 변 경'></td>
|
||||||
|
<?php endif; ?>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<table width=1000 class='tb_layout bg0'>
|
||||||
|
<tr>
|
||||||
|
<td><?= backButton() ?></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><?= banner() ?> </td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
@@ -43,7 +43,6 @@ if ($nationID) {
|
|||||||
<head>
|
<head>
|
||||||
<title><?= UniqueConst::$serverName ?>: 전투 시뮬레이터</title>
|
<title><?= UniqueConst::$serverName ?>: 전투 시뮬레이터</title>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="color-scheme" content="dark">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
<meta name="viewport" content="width=1100" />
|
<meta name="viewport" content="width=1100" />
|
||||||
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
<?= WebUtil::printCSS('../d_shared/common.css') ?>
|
||||||
@@ -55,7 +54,6 @@ if ($nationID) {
|
|||||||
var city = <?= Json::encode($city) ?>;
|
var city = <?= Json::encode($city) ?>;
|
||||||
var nation = <?= Json::encode($nation) ?>;
|
var nation = <?= Json::encode($nation) ?>;
|
||||||
</script>
|
</script>
|
||||||
<?= WebUtil::printDist('vue', [], true) ?>
|
|
||||||
<?= WebUtil::printDist('ts', ['common', 'battle_simulator']) ?>
|
<?= WebUtil::printDist('ts', ['common', 'battle_simulator']) ?>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
@@ -66,8 +64,8 @@ if ($nationID) {
|
|||||||
전역 설정
|
전역 설정
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body dragpad_battle">
|
<div class="card-body dragpad_battle">
|
||||||
<div class="row gx-0">
|
<div class="row">
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-6">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input type="number" class="form-control" aria-describedby="text_year" value="<?= $startYear ?>" disabled>
|
<input type="number" class="form-control" aria-describedby="text_year" value="<?= $startYear ?>" disabled>
|
||||||
<div class="input-group-text"> 년 시작 </div>
|
<div class="input-group-text"> 년 시작 </div>
|
||||||
@@ -77,13 +75,9 @@ if ($nationID) {
|
|||||||
<div class="input-group-text"> 월 </div>
|
<div class="input-group-text"> 월 </div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-5 px-2">
|
<div class="col-sm-6">
|
||||||
<div class="btn-toolbar" role="toolbar">
|
<div class="btn-toolbar" role="toolbar">
|
||||||
<div class="input-group me-2" role="group">
|
<div class="input-group me-2" role="group">
|
||||||
<div class="input-group-text">
|
|
||||||
시드
|
|
||||||
</div>
|
|
||||||
<input type="text" class="form-control" id="seed" aria-describedby="text_seed">
|
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
반복 횟수
|
반복 횟수
|
||||||
</div>
|
</div>
|
||||||
@@ -92,10 +86,6 @@ if ($nationID) {
|
|||||||
<option value="1000">1000회 (요약 표기)</option>
|
<option value="1000">1000회 (요약 표기)</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<div class="btn-toolbar" role="toolbar">
|
|
||||||
<div class="btn-group me-2" role="group">
|
<div class="btn-group me-2" role="group">
|
||||||
<button type="button" class="btn btn-danger btn-begin_battle">전투</button>
|
<button type="button" class="btn btn-danger btn-begin_battle">전투</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -435,25 +425,6 @@ if ($nationID) {
|
|||||||
</div>
|
</div>
|
||||||
<input type="number" class="form-control form_killcrew" value="0" step="1">
|
<input type="number" class="form-control form_killcrew" value="0" step="1">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="input-group mb-0">
|
|
||||||
<div class="input-group-text">자신</div>
|
|
||||||
<div class="input-group-text">회피 확률</div>
|
|
||||||
<input type="number" class="form-control form_war_avoid_ratio" value="0" step="1" min="0" max="5">
|
|
||||||
<div class="input-group-text">필살 확률</div>
|
|
||||||
<input type="number" class="form-control form_war_critical_ratio" value="0" step="1" min="0" max="5">
|
|
||||||
<div class="input-group-text">계략 시도 확률</div>
|
|
||||||
<input type="number" class="form-control form_war_magic_trial_prob" value="0" step="1" min="0" max="5">
|
|
||||||
</div>
|
|
||||||
<div class="input-group mb-1">
|
|
||||||
<div class="input-group-text">상대</div>
|
|
||||||
<div class="input-group-text">회피 확률</div>
|
|
||||||
<input type="number" class="form-control form_oppose_war_avoid_ratio" value="0" step="1" min="0" max="5">
|
|
||||||
<div class="input-group-text">필살 확률</div>
|
|
||||||
<input type="number" class="form-control form_oppose_war_critical_ratio" value="0" step="1" min="0" max="5">
|
|
||||||
<div class="input-group-text">계략 시도 확률</div>
|
|
||||||
<input type="number" class="form-control form_oppose_war_magic_trial_prob" value="0" step="1" min="0" max="5">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,247 @@
|
|||||||
|
<?php
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
$v = new Validator($_POST + $_GET);
|
||||||
|
$v->rule('integer', [
|
||||||
|
'amount',
|
||||||
|
'cost',
|
||||||
|
'topv',
|
||||||
|
'value',
|
||||||
|
'term',
|
||||||
|
'sel'
|
||||||
|
]);
|
||||||
|
|
||||||
|
$btn = Util::getPost('btn');
|
||||||
|
$amount = Util::getPost('amount', 'int');
|
||||||
|
$cost = Util::getPost('cost', 'int');
|
||||||
|
$topv = Util::getPost('topv', 'int');
|
||||||
|
$value = Util::getPost('value', 'int');
|
||||||
|
$term = Util::getPost('term', 'int');
|
||||||
|
$sel = Util::getPost('sel', 'int');
|
||||||
|
|
||||||
|
$msg = '';
|
||||||
|
$msg2 = '';
|
||||||
|
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
increaseRefresh("입찰", 1);
|
||||||
|
|
||||||
|
$turnterm = $gameStor->turnterm;
|
||||||
|
|
||||||
|
$me = $db->queryFirstRow('SELECT no,name,gold,rice,special from general where owner=%i', $userID);
|
||||||
|
|
||||||
|
$tradeCount = $db->queryFirstField('SELECT count(no) FROM auction WHERE no1=%i', $me['no']);
|
||||||
|
$bidCount = $db->queryFirstField('SELECT count(no) FROM auction WHERE no2=%i', $me['no']);
|
||||||
|
|
||||||
|
$btCount = $tradeCount + $bidCount;
|
||||||
|
|
||||||
|
$unit = $turnterm * 60;
|
||||||
|
|
||||||
|
$amount = Util::round($amount, -1);
|
||||||
|
$cost = Util::round($cost, -1);
|
||||||
|
$topv = Util::round($topv, -1);
|
||||||
|
$value = Util::round($value, -1);
|
||||||
|
if ($term > 24) {
|
||||||
|
$term = 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
$valid = 1;
|
||||||
|
if ($session->userGrade >= 5 || $btCount < 1) {
|
||||||
|
} else {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>더이상 등록할 수 없습니다.</span>";
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>더이상 등록할 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
$btn = "hidden";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($btn == "판매") {
|
||||||
|
if ($term < 0 || $term > 24) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>종료기한은 1 ~ 24 턴 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($amount < 100 || $amount > 10000) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>거래량은 100 ~ 10000 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($cost > $amount * 2 || $cost * 2 < $amount) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>시작판매가는 50% ~ 200% 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($topv * 10 < $amount * 11 || $topv > $amount * 2) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>즉시판매가는 110% ~ 200% 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($topv * 10 < $cost * 11) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>즉시판매가는 시작판매가의 110% 이상이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($amount > $me['rice'] - GameConst::$defaultRice) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>기본 군량 ".GameConst::$defaultRice."은 거래할 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($valid == 1) {
|
||||||
|
$msg = "ㆍ<span class='ev_success'>등록 성공.</span>";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit * $term);
|
||||||
|
$db->insert('auction', [
|
||||||
|
'type'=>0,
|
||||||
|
'no1'=>$me['no'],
|
||||||
|
'name1'=>$me['name'],
|
||||||
|
'amount'=>$amount,
|
||||||
|
'cost'=>$cost,
|
||||||
|
'value'=>$cost,
|
||||||
|
'topv'=>$topv,
|
||||||
|
'expire'=>$date
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} elseif ($btn == "구매시도") {
|
||||||
|
$auction = $db->queryFirstRow('SELECT no2,value,topv,expire,amount FROM auction WHERE no=%i LIMIT 1', $sel);
|
||||||
|
|
||||||
|
if ($value == $auction['topv']) {
|
||||||
|
$valid = 2;
|
||||||
|
}
|
||||||
|
if (!$auction) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>종료된 거래입니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($auction['no2'] > 0 && $value <= $auction['value']) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>현재판매가보다 높게 입찰해야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value < $auction['value']) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>현재판매가보다 높게 입찰해야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value > $auction['topv']) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>즉시판매가보다 높을 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value > $me['gold'] - GameConst::$defaultGold) {
|
||||||
|
$msg = "ㆍ<span class='ev_warning'>기본 자금 ".GameConst::$defaultGold."은 거래할 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($valid == 1) {
|
||||||
|
$msg = "ㆍ<span class='ev_success'>입찰 성공.</span> 거래완료는 빨라도 현재로부터 1턴 뒤입니다.";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit);
|
||||||
|
if ($auction['expire'] > $date) {
|
||||||
|
$date = $auction['expire'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->update('auction', [
|
||||||
|
'value'=>$value,
|
||||||
|
'no2'=>$me['no'],
|
||||||
|
'name2'=>$me['name'],
|
||||||
|
'expire'=>$date,
|
||||||
|
], 'no=%i', $sel);
|
||||||
|
} elseif ($valid == 2) {
|
||||||
|
$msg = "ㆍ<span class='ev_success'>즉시판매 성공.</span> 거래완료는 빨라도 현재로부터 1턴 뒤입니다.";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit);
|
||||||
|
|
||||||
|
$db->update('auction', [
|
||||||
|
'value'=>$value,
|
||||||
|
'no2'=>$me['no'],
|
||||||
|
'name2'=>$me['name'],
|
||||||
|
'expire'=>$date,
|
||||||
|
], 'no=%i', $sel);
|
||||||
|
}
|
||||||
|
} elseif ($btn == "구매") {
|
||||||
|
if ($term < 0 || $term > 24) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>종료기한은 1 ~ 24 턴 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($amount < 100 || $amount > 10000) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>거래량은 100 ~ 10000 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($cost > $amount * 2 || $cost * 2 < $amount) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>시작구매가는 50% ~ 200% 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($topv < $amount * 0.5 || $topv > $amount * 0.9) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>즉시구매가는 50% ~ 90% 이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($topv > $cost * 0.9) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>즉시구매가는 시작구매가의 90% 이하이어야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($cost > $me['gold'] - GameConst::$defaultGold) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>기본 자금 ".GameConst::$defaultGold."은 거래할 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($valid == 1) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_success'>등록 성공.</span>";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit * $term);
|
||||||
|
|
||||||
|
$db->insert('auction', [
|
||||||
|
'type'=>1,
|
||||||
|
'no1'=>$me['no'],
|
||||||
|
'name1'=>$me['name'],
|
||||||
|
'amount'=>$amount,
|
||||||
|
'cost'=>$cost,
|
||||||
|
'value'=>$cost,
|
||||||
|
'topv'=>$topv,
|
||||||
|
'expire'=>$date
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
} elseif ($btn == "판매시도") {
|
||||||
|
$auction = $db->queryFirstRow('SELECT no2,value,topv,expire,amount FROM auction WHERE no=%i LIMIT 1', $sel);
|
||||||
|
|
||||||
|
if ($value == $auction['topv']) {
|
||||||
|
$valid = 2;
|
||||||
|
}
|
||||||
|
if (!$auction) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>종료된 거래입니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($auction['no2'] > 0 && $value >= $auction['value']) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>현재구매가보다 낮게 입찰해야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value > $auction['value']) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>현재구매가보다 낮게 입찰해야 합니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value < $auction['topv']) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>즉시구매가보다 낮을 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($value > $me['rice'] - GameConst::$defaultRice) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_warning'>기본 군량 ".GameConst::$defaultRice."은 거래할 수 없습니다.</span>";
|
||||||
|
$valid = 0;
|
||||||
|
}
|
||||||
|
if ($valid == 1) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_success'>입찰 성공.</span> 거래완료는 빨라도 현재로부터 1턴 뒤입니다.";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit);
|
||||||
|
if ($auction['expire'] > $date) {
|
||||||
|
$date = $auction['expire'];
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->update('auction', [
|
||||||
|
'value'=>$value,
|
||||||
|
'no2'=>$me['no'],
|
||||||
|
'name2'=>$me['name'],
|
||||||
|
'expire'=>$date,
|
||||||
|
], 'no=%i', $sel);
|
||||||
|
} elseif ($valid == 2) {
|
||||||
|
$msg2 = "ㆍ<span class='ev_success'>즉시구매 성공.</span> 거래완료는 빨라도 현재로부터 1턴 뒤입니다.";
|
||||||
|
$date = date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")) + $unit);
|
||||||
|
|
||||||
|
$db->update('auction', [
|
||||||
|
'value'=>$value,
|
||||||
|
'no2'=>$me['no'],
|
||||||
|
'name2'=>$me['name'],
|
||||||
|
'expire'=>$date,
|
||||||
|
], 'no=%i', $sel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Submit("b_auction.php", $msg, $msg2);
|
||||||
@@ -98,8 +98,8 @@ if($btn == '참가') {
|
|||||||
], 'no=%i', $general['no']);
|
], 'no=%i', $general['no']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$grpCount = $db->queryFirstColumn('SELECT count(grp) FROM tournament where grp<10 GROUP BY grp;');
|
$grpCount = $db->queryFirstField('SELECT count(*) FROM tournament where grp<10 GROUP BY grp HAVING count(*)=8');
|
||||||
if(min($grpCount) >= 8) {
|
if($grpCount >= 8) {
|
||||||
$gameStor->tournament = 2;
|
$gameStor->tournament = 2;
|
||||||
$gameStor->phase = 0;
|
$gameStor->phase = 0;
|
||||||
}
|
}
|
||||||
@@ -113,11 +113,11 @@ if($session->userGrade < 5) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if($btn == "자동개최설정") {
|
if($btn == "자동개최설정") {
|
||||||
$gameStor->tnmt_trig = !!$trig;
|
$gameStor->tnmt_trig = $trig;
|
||||||
} elseif($btn == "개최") {
|
} elseif($btn == "개최") {
|
||||||
startTournament($auto, $type);
|
startTournament($auto, $type);
|
||||||
} elseif($btn == "중단") {
|
} elseif($btn == "중단") {
|
||||||
$gameStor->tnmt_auto = false;
|
$gameStor->tnmt_auto = 0;
|
||||||
$gameStor->tournament = 0;
|
$gameStor->tournament = 0;
|
||||||
$gameStor->phase = 0;
|
$gameStor->phase = 0;
|
||||||
} elseif($btn == "랜덤투입") {
|
} elseif($btn == "랜덤투입") {
|
||||||
@@ -225,13 +225,11 @@ if($btn == "자동개최설정") {
|
|||||||
finallyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
finallyAll($admin['tnmt_type'], $admin['tournament'], $admin['phase']);
|
||||||
} elseif($btn == "배정") {
|
} elseif($btn == "배정") {
|
||||||
final16set();
|
final16set();
|
||||||
$phase = 0;
|
|
||||||
startBetting($admin['tnmt_type'], 720);
|
|
||||||
} elseif($btn == "베팅마감") {
|
} elseif($btn == "베팅마감") {
|
||||||
$clock = GameClock::fromStorage($gameStor);
|
$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 = $clock->nowTick() + $clock->ticksFromSeconds(60);
|
$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강") {
|
||||||
|
|||||||
@@ -0,0 +1,91 @@
|
|||||||
|
<?php
|
||||||
|
namespace sammo;
|
||||||
|
|
||||||
|
include "lib.php";
|
||||||
|
include "func.php";
|
||||||
|
|
||||||
|
$btn = Util::getPost('btn');
|
||||||
|
$sel = Util::getPost('sel', 'int');
|
||||||
|
$comment = Util::getPost('comment');
|
||||||
|
$title = Util::getPost('title');
|
||||||
|
$str = Util::getPost('str');
|
||||||
|
|
||||||
|
//로그인 검사
|
||||||
|
$session = Session::requireGameLogin()->setReadOnly();
|
||||||
|
$userID = Session::getUserID();
|
||||||
|
|
||||||
|
$isVoteAdmin = in_array('vote', $session->acl[DB::prefix()]??[]);
|
||||||
|
$isVoteAdmin = $isVoteAdmin || $session->userGrade >= 5;
|
||||||
|
|
||||||
|
$db = DB::db();
|
||||||
|
$gameStor = KVStorage::getStorage($db, 'game_env');
|
||||||
|
|
||||||
|
$admin = $gameStor->getValues(['develcost', 'cost', 'vote_title', 'vote', 'votecomment']);
|
||||||
|
|
||||||
|
$generalID = Session::getGeneralID();
|
||||||
|
|
||||||
|
$general = General::createGeneralObjFromDB($generalID, ['vote','horse','weapon','book','item','npc','imgsvr','picture','aux'], 2);
|
||||||
|
|
||||||
|
if($btn == "투표" && $general->getVar('vote') == 0 && $sel > 0) {
|
||||||
|
$develcost = $admin['develcost'] * 5;
|
||||||
|
$db->update('general', [
|
||||||
|
'gold'=>$db->sqleval('gold + %i', $develcost),
|
||||||
|
'vote'=>$sel
|
||||||
|
], 'owner=%i', $userID);
|
||||||
|
|
||||||
|
if(tryUniqueItemLottery($general, '설문조사')){
|
||||||
|
$general->applyDB($db);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if($btn == "댓글" && trim($comment) != "") {
|
||||||
|
$comment = StringUtil::neutralize($comment);
|
||||||
|
|
||||||
|
$nation = $general->getStaticNation();
|
||||||
|
|
||||||
|
if(!$admin['votecomment']){
|
||||||
|
$admin['votecomment'] = [];
|
||||||
|
}
|
||||||
|
$admin['votecomment'][] = [$nation['name'],$general->getName(),$comment];
|
||||||
|
$gameStor->votecomment = $admin['votecomment'];
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$isVoteAdmin){
|
||||||
|
header('location:a_vote.php', true, 303);
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if($btn == "수정") {
|
||||||
|
if($title != "") {
|
||||||
|
$gameStor->vote_title = WebUtil::htmlPurify($title);
|
||||||
|
}
|
||||||
|
} elseif($btn == "추가") {
|
||||||
|
if($str != "") {
|
||||||
|
if(!$admin['vote']){
|
||||||
|
$admin['vote'] = [];
|
||||||
|
}
|
||||||
|
$admin['vote'][] = WebUtil::htmlPurify($str);
|
||||||
|
$gameStor->vote=$admin['vote'];
|
||||||
|
}
|
||||||
|
} elseif($btn == "리셋") {
|
||||||
|
$gameStor->voteopen=1;
|
||||||
|
$gameStor->vote=['-'];
|
||||||
|
$gameStor->vote_title = '-';
|
||||||
|
$gameStor->votecomment=[];
|
||||||
|
|
||||||
|
$db->update('general', [
|
||||||
|
'vote'=>0
|
||||||
|
], true);
|
||||||
|
} elseif($btn == "알림") {
|
||||||
|
$db->update('general', [
|
||||||
|
'newvote'=>1
|
||||||
|
], 'vote=0');
|
||||||
|
} elseif($btn == "숨김") {
|
||||||
|
$gameStor->voteopen = 0;
|
||||||
|
} elseif($btn == "전체통계만") {
|
||||||
|
$gameStor->voteopen = 1;
|
||||||
|
} elseif($btn == "전부") {
|
||||||
|
$gameStor->voteopen = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
header('location:a_vote.php', true, 303);
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
use sammo\Enums\RankColumn;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Build the existing battle simulator request from live, pre-battle objects.
|
|
||||||
*
|
|
||||||
* This file is loaded only by the deterministic CLI comparison path. It must
|
|
||||||
* remain read-only: callers emit the returned value without changing the live
|
|
||||||
* objects or consuming RNG.
|
|
||||||
*/
|
|
||||||
function comparisonBuildBattleGeneralFixture(General $general): array
|
|
||||||
{
|
|
||||||
$raw = $general->getRaw(true);
|
|
||||||
$inheritBuff = $general->getAuxVar('inheritBuff');
|
|
||||||
|
|
||||||
$fixture = [
|
|
||||||
'no' => $general->getID(),
|
|
||||||
'name' => $general->getName(),
|
|
||||||
'nation' => $general->getNationID(),
|
|
||||||
'city' => $general->getCityID(),
|
|
||||||
'turntime' => $general->getTurnTime(General::TURNTIME_FULL_MS),
|
|
||||||
'turntick' => $general->getTurnTick(),
|
|
||||||
'personal' => $raw['personal'] ?? null,
|
|
||||||
'special' => $raw['special'] ?? null,
|
|
||||||
'special2' => $raw['special2'] ?? null,
|
|
||||||
'crew' => $raw['crew'],
|
|
||||||
'crewtype' => $raw['crewtype'],
|
|
||||||
'atmos' => $raw['atmos'],
|
|
||||||
'train' => $raw['train'],
|
|
||||||
'intel' => $raw['intel'],
|
|
||||||
'intel_exp' => $raw['intel_exp'],
|
|
||||||
'book' => $raw['book'] ?? 'None',
|
|
||||||
'strength' => $raw['strength'],
|
|
||||||
'strength_exp' => $raw['strength_exp'],
|
|
||||||
'weapon' => $raw['weapon'] ?? 'None',
|
|
||||||
'injury' => $raw['injury'],
|
|
||||||
'leadership' => $raw['leadership'],
|
|
||||||
'leadership_exp' => $raw['leadership_exp'],
|
|
||||||
'horse' => $raw['horse'] ?? 'None',
|
|
||||||
'item' => $raw['item'] ?? 'None',
|
|
||||||
'explevel' => $raw['explevel'],
|
|
||||||
'experience' => $raw['experience'],
|
|
||||||
'dedication' => $raw['dedication'],
|
|
||||||
'officer_level' => $raw['officer_level'],
|
|
||||||
'officer_city' => $raw['officer_city'],
|
|
||||||
'gold' => $raw['gold'],
|
|
||||||
'rice' => $raw['rice'],
|
|
||||||
'dex1' => $raw['dex1'],
|
|
||||||
'dex2' => $raw['dex2'],
|
|
||||||
'dex3' => $raw['dex3'],
|
|
||||||
'dex4' => $raw['dex4'],
|
|
||||||
'dex5' => $raw['dex5'],
|
|
||||||
'defence_train' => $raw['defence_train'],
|
|
||||||
'recent_war' => $raw['recent_war'] ?? null,
|
|
||||||
'warnum' => $general->getRankVar(RankColumn::warnum, 0),
|
|
||||||
'killnum' => $general->getRankVar(RankColumn::killnum, 0),
|
|
||||||
'killcrew' => $general->getRankVar(RankColumn::killcrew, 0),
|
|
||||||
];
|
|
||||||
if ($inheritBuff !== null) {
|
|
||||||
$fixture['inheritBuff'] = $inheritBuff;
|
|
||||||
}
|
|
||||||
return $fixture;
|
|
||||||
}
|
|
||||||
|
|
||||||
function comparisonBuildBattleFixture(
|
|
||||||
string $seed,
|
|
||||||
int $year,
|
|
||||||
int $month,
|
|
||||||
int $startYear,
|
|
||||||
General $attacker,
|
|
||||||
array $attackerNation,
|
|
||||||
array $defenders,
|
|
||||||
array $defenderCity,
|
|
||||||
array $defenderNation,
|
|
||||||
): array {
|
|
||||||
return [
|
|
||||||
'action' => 'battle',
|
|
||||||
'seed' => $seed,
|
|
||||||
'repeatCnt' => 1,
|
|
||||||
'year' => $year,
|
|
||||||
'month' => $month,
|
|
||||||
'startYear' => $startYear,
|
|
||||||
'scenarioEffect' => GameConst::$scenarioEffect,
|
|
||||||
'attackerGeneral' => comparisonBuildBattleGeneralFixture($attacker),
|
|
||||||
'attackerCity' => $attacker->getRawCity(),
|
|
||||||
'attackerNation' => $attackerNation,
|
|
||||||
// General::getGeneralList() can retain IDs as array keys. JSON would
|
|
||||||
// then encode the collection as an object, while both simulators use
|
|
||||||
// an ordered list. Keep the legacy iteration order but discard keys.
|
|
||||||
'defenderGenerals' => array_values(array_map(
|
|
||||||
static fn(General $general): array => comparisonBuildBattleGeneralFixture($general),
|
|
||||||
$defenders,
|
|
||||||
)),
|
|
||||||
'defenderCity' => $defenderCity,
|
|
||||||
'defenderNation' => $defenderNation,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
if (PHP_SAPI !== 'cli' || getenv('REF_DETERMINISTIC_INSTALL_ENABLED') !== '1') {
|
|
||||||
http_response_code(404);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
chdir(dirname(__DIR__));
|
|
||||||
require_once 'lib.php';
|
|
||||||
|
|
||||||
$rows = DB::db()->query(
|
|
||||||
'SELECT general_id, log_type, year, month, text
|
|
||||||
FROM general_record
|
|
||||||
WHERE log_type IN ("battle_brief", "battle")
|
|
||||||
ORDER BY id'
|
|
||||||
);
|
|
||||||
|
|
||||||
echo json_encode([
|
|
||||||
'schemaVersion' => 1,
|
|
||||||
'engine' => 'ref',
|
|
||||||
'logs' => array_map(static fn(array $row): array => [
|
|
||||||
'generalId' => (int)$row['general_id'],
|
|
||||||
'category' => $row['log_type'] === 'battle_brief' ? 'BATTLE_BRIEF' : 'BATTLE_DETAIL',
|
|
||||||
'year' => (int)$row['year'],
|
|
||||||
'month' => (int)$row['month'],
|
|
||||||
'text' => (string)$row['text'],
|
|
||||||
], $rows),
|
|
||||||
], JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES), PHP_EOL;
|
|
||||||
@@ -1,314 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace sammo;
|
|
||||||
|
|
||||||
use Ds\Map;
|
|
||||||
use sammo\Enums\RankColumn;
|
|
||||||
|
|
||||||
if (PHP_SAPI !== 'cli') {
|
|
||||||
http_response_code(404);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
chdir(dirname(__DIR__));
|
|
||||||
require_once 'lib.php';
|
|
||||||
require_once 'func.php';
|
|
||||||
|
|
||||||
final class ComparisonTracingRNG implements RNG
|
|
||||||
{
|
|
||||||
private int $sequence = 0;
|
|
||||||
|
|
||||||
/** @var array<int, array<string, mixed>> */
|
|
||||||
public array $calls = [];
|
|
||||||
|
|
||||||
public function __construct(private readonly RNG $inner)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getMaxInt(): int
|
|
||||||
{
|
|
||||||
return LiteHashDRBG::getMaxInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nextBytes(int $bytes): string
|
|
||||||
{
|
|
||||||
$value = $this->inner->nextBytes($bytes);
|
|
||||||
$this->record('nextBytes', ['bytes' => $bytes], bin2hex($value));
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nextBits(int $bits): string
|
|
||||||
{
|
|
||||||
$value = $this->inner->nextBits($bits);
|
|
||||||
$this->record('nextBits', ['bits' => $bits], bin2hex($value));
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nextInt(?int $max = null): int
|
|
||||||
{
|
|
||||||
$value = $this->inner->nextInt($max);
|
|
||||||
$this->record('nextInt', ['maxInclusive' => $max], $value);
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nextFloat1(): float
|
|
||||||
{
|
|
||||||
$value = $this->inner->nextFloat1();
|
|
||||||
$this->record('nextFloat1', [], $value);
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function record(string $operation, array $arguments, mixed $result): void
|
|
||||||
{
|
|
||||||
$this->calls[] = [
|
|
||||||
'seq' => $this->sequence++,
|
|
||||||
'operation' => $operation,
|
|
||||||
'arguments' => $arguments,
|
|
||||||
'result' => $result,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final class ComparisonTracingRandUtil extends RandUtil
|
|
||||||
{
|
|
||||||
/** @var array<int, array{rngSeq: int, probability: int|float, result: bool}> */
|
|
||||||
public array $boolCalls = [];
|
|
||||||
|
|
||||||
public function __construct(private readonly ComparisonTracingRNG $tracingRng)
|
|
||||||
{
|
|
||||||
parent::__construct($tracingRng);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function nextBool(int|float $prob = 0.5): bool
|
|
||||||
{
|
|
||||||
$rngSeq = count($this->tracingRng->calls);
|
|
||||||
$result = parent::nextBool($prob);
|
|
||||||
$this->boolCalls[] = [
|
|
||||||
'rngSeq' => $rngSeq,
|
|
||||||
'probability' => $prob,
|
|
||||||
'result' => $result,
|
|
||||||
];
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final class ComparisonGeneral extends General
|
|
||||||
{
|
|
||||||
public function getTurnTime(int $short = self::TURNTIME_FULL_MS): ?string
|
|
||||||
{
|
|
||||||
$formatted = (string)($this->getRaw()['turntime'] ?? '1970-01-01 00:00:00');
|
|
||||||
return match ($short) {
|
|
||||||
self::TURNTIME_FULL_MS => $formatted,
|
|
||||||
self::TURNTIME_FULL => substr($formatted, 0, 19),
|
|
||||||
self::TURNTIME_HMS => substr($formatted, 11, 8),
|
|
||||||
self::TURNTIME_HM => substr($formatted, 11, 5),
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getTurnTick(): ?int
|
|
||||||
{
|
|
||||||
return (int)($this->getRaw()['turntick'] ?? 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function comparisonExtractRankVar(array $raw): Map
|
|
||||||
{
|
|
||||||
$rankVars = new Map();
|
|
||||||
foreach ($raw as $rawKey => $rawValue) {
|
|
||||||
$key = RankColumn::tryFrom($rawKey);
|
|
||||||
if ($key !== null) {
|
|
||||||
$rankVars[$key] = $rawValue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $rankVars;
|
|
||||||
}
|
|
||||||
|
|
||||||
function comparisonBuildGeneral(
|
|
||||||
array $raw,
|
|
||||||
array $city,
|
|
||||||
array $nation,
|
|
||||||
int $year,
|
|
||||||
int $month,
|
|
||||||
bool $defender = false,
|
|
||||||
): General {
|
|
||||||
$aux = [];
|
|
||||||
if (array_key_exists('inheritBuff', $raw)) {
|
|
||||||
$aux['inheritBuff'] = $raw['inheritBuff'];
|
|
||||||
}
|
|
||||||
$raw['aux'] = Json::encode($aux);
|
|
||||||
$raw['owner'] = 0;
|
|
||||||
return new ComparisonGeneral(
|
|
||||||
$raw,
|
|
||||||
comparisonExtractRankVar($raw),
|
|
||||||
null,
|
|
||||||
$city,
|
|
||||||
$nation,
|
|
||||||
$year,
|
|
||||||
$month,
|
|
||||||
$defender,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function comparisonRunBattle(array $fixture): array
|
|
||||||
{
|
|
||||||
$seed = (string)($fixture['seed'] ?? 'battle-differential');
|
|
||||||
$year = (int)$fixture['year'];
|
|
||||||
$month = (int)$fixture['month'];
|
|
||||||
$startYear = (int)($fixture['startYear'] ?? 180);
|
|
||||||
$rawAttacker = $fixture['attackerGeneral'];
|
|
||||||
$rawAttackerCity = $fixture['attackerCity'];
|
|
||||||
$rawAttackerNation = $fixture['attackerNation'];
|
|
||||||
$rawDefenderCity = $fixture['defenderCity'];
|
|
||||||
$rawDefenderNation = $fixture['defenderNation'];
|
|
||||||
// 비교 fixture에 명시된 경우에만 ref runtime의 scenario action chain을
|
|
||||||
// 활성화합니다. 일반 비교 fixture의 기존 동작은 그대로 유지합니다.
|
|
||||||
$scenarioEffect = $fixture['scenarioEffect'] ?? null;
|
|
||||||
if ($scenarioEffect === '' || $scenarioEffect === 'None') {
|
|
||||||
$scenarioEffect = null;
|
|
||||||
}
|
|
||||||
if (
|
|
||||||
$scenarioEffect !== null
|
|
||||||
&& (!is_string($scenarioEffect) || getScenarioEffectClass($scenarioEffect) === null)
|
|
||||||
) {
|
|
||||||
throw new \InvalidArgumentException('scenarioEffect is invalid');
|
|
||||||
}
|
|
||||||
GameConst::$scenarioEffect = $scenarioEffect;
|
|
||||||
|
|
||||||
$tracingRng = new ComparisonTracingRNG(new LiteHashDRBG($seed));
|
|
||||||
$warRng = new ComparisonTracingRandUtil($tracingRng);
|
|
||||||
$attacker = new WarUnitGeneral(
|
|
||||||
$warRng,
|
|
||||||
comparisonBuildGeneral($rawAttacker, $rawAttackerCity, $rawAttackerNation, $year, $month),
|
|
||||||
$rawAttackerNation,
|
|
||||||
true,
|
|
||||||
);
|
|
||||||
$city = new WarUnitCity($warRng, $rawDefenderCity, $rawDefenderNation, $year, $month, $startYear);
|
|
||||||
|
|
||||||
$defenderList = [];
|
|
||||||
foreach ($fixture['defenderGenerals'] as $rawDefender) {
|
|
||||||
$defenderList[] = new WarUnitGeneral(
|
|
||||||
$warRng,
|
|
||||||
comparisonBuildGeneral($rawDefender, $rawDefenderCity, $rawDefenderNation, $year, $month, true),
|
|
||||||
$rawDefenderNation,
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
if (count($defenderList) && extractBattleOrder($city, $attacker) > 0) {
|
|
||||||
$defenderList[] = $city;
|
|
||||||
}
|
|
||||||
$summarizeDefenderOrder = static fn(WarUnit $unit): array => [
|
|
||||||
'id' => $unit instanceof WarUnitGeneral ? $unit->getGeneral()->getID() : 0,
|
|
||||||
'order' => extractBattleOrder($unit, $attacker),
|
|
||||||
];
|
|
||||||
$defenderOrderBeforeSort = array_map($summarizeDefenderOrder, $defenderList);
|
|
||||||
usort(
|
|
||||||
$defenderList,
|
|
||||||
fn(WarUnit $lhs, WarUnit $rhs): int =>
|
|
||||||
-(extractBattleOrder($lhs, $attacker) <=> extractBattleOrder($rhs, $attacker)),
|
|
||||||
);
|
|
||||||
$defenderOrderAfterSort = array_map($summarizeDefenderOrder, $defenderList);
|
|
||||||
|
|
||||||
$iterDefender = new \ArrayIterator($defenderList);
|
|
||||||
$iterDefender->rewind();
|
|
||||||
$finishedDefenders = [];
|
|
||||||
$getNextDefender = function (?WarUnit $previous, bool $requestNext) use (
|
|
||||||
$iterDefender,
|
|
||||||
$attacker,
|
|
||||||
&$finishedDefenders,
|
|
||||||
): ?WarUnit {
|
|
||||||
if ($previous !== null) {
|
|
||||||
$finishedDefenders[] = buildWarTraceUnitSnapshot($previous);
|
|
||||||
}
|
|
||||||
if (!$requestNext || !$iterDefender->valid()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$next = $iterDefender->current();
|
|
||||||
if (extractBattleOrder($next, $attacker) <= 0) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
$iterDefender->next();
|
|
||||||
return $next;
|
|
||||||
};
|
|
||||||
|
|
||||||
$events = [];
|
|
||||||
$conquered = processWar_NG(
|
|
||||||
$seed,
|
|
||||||
$attacker,
|
|
||||||
$getNextDefender,
|
|
||||||
$city,
|
|
||||||
static function (array $event) use (&$events): void {
|
|
||||||
$events[] = $event;
|
|
||||||
},
|
|
||||||
);
|
|
||||||
|
|
||||||
$attackerLogs = $attacker->getLogger()->rollback();
|
|
||||||
$defenderLogs = [];
|
|
||||||
foreach ($defenderList as $defenderUnit) {
|
|
||||||
if (!($defenderUnit instanceof WarUnitGeneral)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$snapshot = buildWarTraceUnitSnapshot($defenderUnit);
|
|
||||||
$defenderLogs[(string)$snapshot['id']] = $defenderUnit->getLogger()->rollback();
|
|
||||||
}
|
|
||||||
$cityLogs = $city->getLogger()->rollback();
|
|
||||||
|
|
||||||
return [
|
|
||||||
'engine' => 'ref',
|
|
||||||
'seed' => $seed,
|
|
||||||
'conquered' => $conquered,
|
|
||||||
'attacker' => buildWarTraceUnitSnapshot($attacker),
|
|
||||||
'city' => buildWarTraceUnitSnapshot($city),
|
|
||||||
'finishedDefenders' => $finishedDefenders,
|
|
||||||
'defenderOrder' => [
|
|
||||||
'before' => $defenderOrderBeforeSort,
|
|
||||||
'after' => $defenderOrderAfterSort,
|
|
||||||
],
|
|
||||||
'events' => $events,
|
|
||||||
'rng' => $tracingRng->calls,
|
|
||||||
'boolRng' => $warRng->boolCalls,
|
|
||||||
'logs' => [
|
|
||||||
'attacker' => $attackerLogs,
|
|
||||||
'defenders' => $defenderLogs,
|
|
||||||
'city' => $cityLogs,
|
|
||||||
],
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
$fixturePath = $argv[1] ?? null;
|
|
||||||
if ($fixturePath === '--jsonl') {
|
|
||||||
try {
|
|
||||||
while (($line = fgets(STDIN)) !== false) {
|
|
||||||
$line = trim($line);
|
|
||||||
if ($line === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$fixture = json_decode($line, true, flags: JSON_THROW_ON_ERROR);
|
|
||||||
echo json_encode(
|
|
||||||
comparisonRunBattle($fixture),
|
|
||||||
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION,
|
|
||||||
), PHP_EOL;
|
|
||||||
}
|
|
||||||
exit(0);
|
|
||||||
} catch (\Throwable $throwable) {
|
|
||||||
fwrite(STDERR, $throwable::class . ': ' . $throwable->getMessage() . PHP_EOL);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($fixturePath === null || ($fixturePath !== '-' && !is_file($fixturePath))) {
|
|
||||||
fwrite(STDERR, "usage: php compare/battle_trace.php <fixture.json|-|--jsonl>\n");
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$fixtureJson = $fixturePath === '-' ? stream_get_contents(STDIN) : file_get_contents($fixturePath);
|
|
||||||
$fixture = json_decode((string)$fixtureJson, true, flags: JSON_THROW_ON_ERROR);
|
|
||||||
echo json_encode(
|
|
||||||
comparisonRunBattle($fixture),
|
|
||||||
JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRESERVE_ZERO_FRACTION,
|
|
||||||
), PHP_EOL;
|
|
||||||
} catch (\Throwable $throwable) {
|
|
||||||
fwrite(STDERR, $throwable::class . ': ' . $throwable->getMessage() . PHP_EOL);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "AddGlobalBetray",
|
|
||||||
"args": [2, 1],
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2, 3],
|
|
||||||
"general": [
|
|
||||||
{ "id": 1, "values": { "name": "배신0", "betray": 0 } },
|
|
||||||
{ "id": 2, "values": { "name": "배신1", "betray": 1 } },
|
|
||||||
{ "id": 3, "values": { "name": "배신2", "betray": 2 } }
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 194,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2, 3]
|
|
||||||
},
|
|
||||||
"compactOutput": true
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "AssignGeneralSpeciality",
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2, 3],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "내정대상",
|
|
||||||
"nation": 1,
|
|
||||||
"age": 30,
|
|
||||||
"leadership": 40,
|
|
||||||
"strength": 45,
|
|
||||||
"intel": 80,
|
|
||||||
"special": "None",
|
|
||||||
"specage": 30,
|
|
||||||
"special2": "che_신산",
|
|
||||||
"specage2": 99,
|
|
||||||
"aux": {
|
|
||||||
"prev_types_special": ["che_경작"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "전투대상",
|
|
||||||
"nation": 1,
|
|
||||||
"age": 30,
|
|
||||||
"leadership": 80,
|
|
||||||
"strength": 75,
|
|
||||||
"intel": 40,
|
|
||||||
"special": "che_인덕",
|
|
||||||
"specage": 99,
|
|
||||||
"special2": "None",
|
|
||||||
"specage2": 30,
|
|
||||||
"dex1": 200,
|
|
||||||
"dex2": 10,
|
|
||||||
"dex3": 10,
|
|
||||||
"dex4": 10,
|
|
||||||
"dex5": 10,
|
|
||||||
"aux": {
|
|
||||||
"prev_types_special2": ["che_돌격"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"name": "계승대상",
|
|
||||||
"nation": 2,
|
|
||||||
"age": 30,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 50,
|
|
||||||
"special": "che_경작",
|
|
||||||
"specage": 99,
|
|
||||||
"special2": "None",
|
|
||||||
"specage2": 30,
|
|
||||||
"aux": {
|
|
||||||
"inheritSpecificSpecialWar": "che_의술",
|
|
||||||
"marker": 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2, 3]
|
|
||||||
},
|
|
||||||
"compactOutput": true
|
|
||||||
}
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "AutoDeleteInvader",
|
|
||||||
"compactOutput": true,
|
|
||||||
"args": [1],
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "ⓞ남만족",
|
|
||||||
"capital": 69,
|
|
||||||
"gennum": 1,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_병가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "ⓞ남만대왕",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 69,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 9
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"event": [
|
|
||||||
{
|
|
||||||
"id": 990001,
|
|
||||||
"action": [["AutoDeleteInvader", 1]]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"currentEventID": 990001
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "BlockScoutAction",
|
|
||||||
"args": [true],
|
|
||||||
"setup": {
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"nation": [
|
|
||||||
{ "id": 1, "values": { "name": "위", "level": 2, "scout": 0 } },
|
|
||||||
{ "id": 2, "values": { "name": "촉", "level": 2, "scout": 0 } }
|
|
||||||
],
|
|
||||||
"gameEnvironment": {
|
|
||||||
"block_change_scout": false
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"nationIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "MonthlyBoundary",
|
|
||||||
"compactOutput": true,
|
|
||||||
"environment": {
|
|
||||||
"year": 190,
|
|
||||||
"month": 12,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"starttime": "2026-07-25 00:00:00",
|
|
||||||
"turntime": "2026-07-25 02:00:00"
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"world": {
|
|
||||||
"hiddenSeed": "monthly-boundary-core-catalog"
|
|
||||||
},
|
|
||||||
"gameEnvironment": {
|
|
||||||
"isunited": 1,
|
|
||||||
"refreshLimit": 3,
|
|
||||||
"block_change_scout": false
|
|
||||||
},
|
|
||||||
"resetCities": true,
|
|
||||||
"deleteOtherCities": true,
|
|
||||||
"keepCityIds": [1, 2],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "경계도시",
|
|
||||||
"level": 1,
|
|
||||||
"nation": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 20000,
|
|
||||||
"agri": 1000,
|
|
||||||
"agri_max": 2000,
|
|
||||||
"comm": 1000,
|
|
||||||
"comm_max": 2000,
|
|
||||||
"secu": 1000,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 50,
|
|
||||||
"trade": 100,
|
|
||||||
"def": 1000,
|
|
||||||
"def_max": 2000,
|
|
||||||
"wall": 1000,
|
|
||||||
"wall_max": 2000,
|
|
||||||
"officer_set": 1,
|
|
||||||
"state": 31,
|
|
||||||
"term": 1,
|
|
||||||
"supply": 1,
|
|
||||||
"front": 2,
|
|
||||||
"conflict": {},
|
|
||||||
"dead": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "중립도시",
|
|
||||||
"level": 8,
|
|
||||||
"nation": 0,
|
|
||||||
"pop": 12000,
|
|
||||||
"pop_max": 22000,
|
|
||||||
"agri": 1200,
|
|
||||||
"agri_max": 2200,
|
|
||||||
"comm": 1200,
|
|
||||||
"comm_max": 2200,
|
|
||||||
"secu": 1200,
|
|
||||||
"secu_max": 2200,
|
|
||||||
"trust": 55,
|
|
||||||
"trade": 100,
|
|
||||||
"def": 1200,
|
|
||||||
"def_max": 2200,
|
|
||||||
"wall": 1200,
|
|
||||||
"wall_max": 2200,
|
|
||||||
"officer_set": 1,
|
|
||||||
"state": 0,
|
|
||||||
"term": 0,
|
|
||||||
"supply": 0,
|
|
||||||
"front": 0,
|
|
||||||
"conflict": {},
|
|
||||||
"dead": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "경계군주",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 0,
|
|
||||||
"age": 30,
|
|
||||||
"belong": 3,
|
|
||||||
"makelimit": 2,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 1000,
|
|
||||||
"crew": 100,
|
|
||||||
"train": 80,
|
|
||||||
"atmos": 70,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 50,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0,
|
|
||||||
"dex1": 0,
|
|
||||||
"dex2": 0,
|
|
||||||
"dex3": 0,
|
|
||||||
"dex4": 0,
|
|
||||||
"dex5": 0,
|
|
||||||
"personal": "None",
|
|
||||||
"special": "None",
|
|
||||||
"specage": 0,
|
|
||||||
"special2": "None",
|
|
||||||
"specage2": 0,
|
|
||||||
"betray": 0,
|
|
||||||
"bornyear": 160,
|
|
||||||
"deadyear": 250
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "경계재야",
|
|
||||||
"nation": 0,
|
|
||||||
"city": 2,
|
|
||||||
"officer_level": 0,
|
|
||||||
"npc": 0,
|
|
||||||
"age": 25,
|
|
||||||
"belong": 4,
|
|
||||||
"makelimit": 0,
|
|
||||||
"gold": 500,
|
|
||||||
"rice": 500,
|
|
||||||
"crew": 50,
|
|
||||||
"train": 60,
|
|
||||||
"atmos": 50,
|
|
||||||
"leadership": 40,
|
|
||||||
"strength": 40,
|
|
||||||
"intel": 40,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0,
|
|
||||||
"dex1": 0,
|
|
||||||
"dex2": 0,
|
|
||||||
"dex3": 0,
|
|
||||||
"dex4": 0,
|
|
||||||
"dex5": 0,
|
|
||||||
"personal": "None",
|
|
||||||
"special": "None",
|
|
||||||
"specage": 0,
|
|
||||||
"special2": "None",
|
|
||||||
"specage2": 0,
|
|
||||||
"betray": 0,
|
|
||||||
"bornyear": 165,
|
|
||||||
"deadyear": 250
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "경계국",
|
|
||||||
"color": "#123456",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"gold": 10000,
|
|
||||||
"rice": 20000,
|
|
||||||
"tech": 100,
|
|
||||||
"power": 10,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가",
|
|
||||||
"bill": 100,
|
|
||||||
"rate": 20,
|
|
||||||
"rate_tmp": 10,
|
|
||||||
"scout": 1,
|
|
||||||
"chief_set": 1,
|
|
||||||
"strategic_cmd_limit": 2,
|
|
||||||
"surlimit": 1,
|
|
||||||
"spy": "{}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"resetEvents": true,
|
|
||||||
"event": [
|
|
||||||
{
|
|
||||||
"id": 991001,
|
|
||||||
"target": "PRE_MONTH",
|
|
||||||
"priority": 1000,
|
|
||||||
"condition": true,
|
|
||||||
"action": [
|
|
||||||
["NoticeToHistoryLog", "aggregate-pre", 6]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 991002,
|
|
||||||
"target": "MONTH",
|
|
||||||
"priority": 1000,
|
|
||||||
"condition": true,
|
|
||||||
"action": [
|
|
||||||
["ProcessIncome", "gold"],
|
|
||||||
["NewYear"],
|
|
||||||
["ResetOfficerLock"],
|
|
||||||
["RandomizeCityTradeRate"],
|
|
||||||
["ChangeCity", "all", {"pop": "+10", "trust": 60}],
|
|
||||||
["NoticeToHistoryLog", "aggregate-month", 6],
|
|
||||||
["DeleteEvent"]
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"nationIds": [1],
|
|
||||||
"cityIds": [1, 2],
|
|
||||||
"eventIds": [991001, 991002],
|
|
||||||
"accessGeneralIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "NewYear",
|
|
||||||
"environment": {
|
|
||||||
"year": 191,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"age": 30,
|
|
||||||
"belong": 3
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"nation": 0,
|
|
||||||
"age": 30,
|
|
||||||
"belong": 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "NoticeToHistoryLog",
|
|
||||||
"args": ["<S>새해 알림</>", 6],
|
|
||||||
"environment": {
|
|
||||||
"year": 191,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ProcessIncome",
|
|
||||||
"args": ["gold"],
|
|
||||||
"environment": {
|
|
||||||
"year": 190,
|
|
||||||
"month": 7,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 5,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 1000,
|
|
||||||
"dedication": 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑국",
|
|
||||||
"capital": 1,
|
|
||||||
"gold": 10000,
|
|
||||||
"rice": 20000,
|
|
||||||
"level": 1,
|
|
||||||
"rate_tmp": 20
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑성",
|
|
||||||
"nation": 1,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 20000,
|
|
||||||
"agri": 1000,
|
|
||||||
"agri_max": 2000,
|
|
||||||
"comm": 1000,
|
|
||||||
"comm_max": 2000,
|
|
||||||
"secu": 1000,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 80,
|
|
||||||
"def": 500,
|
|
||||||
"def_max": 1000,
|
|
||||||
"wall": 500,
|
|
||||||
"wall_max": 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"nationIds": [1],
|
|
||||||
"cityIds": [1],
|
|
||||||
"nationEnvironmentKeys": ["prev_income_gold", "prev_income_rice"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ResetOfficerLock",
|
|
||||||
"environment": {
|
|
||||||
"year": 191,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"officer_set": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"chief_set": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"cityIds": [1],
|
|
||||||
"nationIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "CreateAdminNPC",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 12,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "CreateManyNPC",
|
|
||||||
"args": [2, 0],
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 5,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"turntime": "0193-05-01 00:00:00"
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "FinishNationBetting",
|
|
||||||
"args": [1],
|
|
||||||
"setup": {
|
|
||||||
"clearBetting": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"nation": [
|
|
||||||
{ "id": 1, "values": { "name": "위", "gennum": 1, "power": 100, "level": 2 } },
|
|
||||||
{ "id": 2, "values": { "name": "촉", "gennum": 1, "power": 300, "level": 0 } }
|
|
||||||
],
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{ "id": 1, "values": { "name": "장수1", "nation": 1, "owner": 1, "npc": 0 } },
|
|
||||||
{ "id": 2, "values": { "name": "장수2", "nation": 2, "owner": 2, "npc": 0 } }
|
|
||||||
],
|
|
||||||
"bettingInfo": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"type": "bettingNation",
|
|
||||||
"name": "천통국 예상",
|
|
||||||
"finished": false,
|
|
||||||
"selectCnt": 1,
|
|
||||||
"isExclusive": null,
|
|
||||||
"reqInheritancePoint": true,
|
|
||||||
"openYearMonth": 2400,
|
|
||||||
"closeYearMonth": 2424,
|
|
||||||
"candidates": [
|
|
||||||
{
|
|
||||||
"title": "위",
|
|
||||||
"info": "국력: 100<br>장수 수: 1<br>도시 수: 1",
|
|
||||||
"isHtml": true,
|
|
||||||
"aux": { "nation": 1 }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"title": "촉",
|
|
||||||
"info": "국력: 300<br>장수 수: 1<br>도시 수: 1",
|
|
||||||
"isHtml": true,
|
|
||||||
"aux": { "nation": 2 }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"winner": null
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bet": [
|
|
||||||
{ "betting_id": 1, "general_id": 0, "user_id": null, "betting_type": "[-1]", "amount": 100 },
|
|
||||||
{ "betting_id": 1, "general_id": 1, "user_id": 1, "betting_type": "[0]", "amount": 100 },
|
|
||||||
{ "betting_id": 1, "general_id": 2, "user_id": 2, "betting_type": "[1]", "amount": 100 }
|
|
||||||
],
|
|
||||||
"inheritancePrevious": {
|
|
||||||
"1": 900,
|
|
||||||
"2": 900
|
|
||||||
},
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 202,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"nationIds": [1, 2],
|
|
||||||
"ownerIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "InvaderEnding",
|
|
||||||
"compactOutput": true,
|
|
||||||
"setup": {
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"setAllCitiesNation": 1,
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준국",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"gameEnvironment": {
|
|
||||||
"isunited": 1,
|
|
||||||
"refreshLimit": 3
|
|
||||||
},
|
|
||||||
"event": [
|
|
||||||
{
|
|
||||||
"id": 990002,
|
|
||||||
"action": [["InvaderEnding"]]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"currentEventID": 990002
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "InvaderLifecycle",
|
|
||||||
"args": [10, 150, 100, 20],
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"resetEvents": true,
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준도시",
|
|
||||||
"level": 3,
|
|
||||||
"nation": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 10000,
|
|
||||||
"agri": 2000,
|
|
||||||
"agri_max": 20000,
|
|
||||||
"comm": 3000,
|
|
||||||
"comm_max": 30000,
|
|
||||||
"secu": 4000,
|
|
||||||
"secu_max": 40000,
|
|
||||||
"def": 5000,
|
|
||||||
"def_max": 50000,
|
|
||||||
"wall": 6000,
|
|
||||||
"wall_max": 60000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"values": {
|
|
||||||
"name": "남만",
|
|
||||||
"level": 4,
|
|
||||||
"nation": 0,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 10000,
|
|
||||||
"agri": 2000,
|
|
||||||
"agri_max": 20000,
|
|
||||||
"comm": 3000,
|
|
||||||
"comm_max": 30000,
|
|
||||||
"secu": 4000,
|
|
||||||
"secu_max": 40000,
|
|
||||||
"def": 5000,
|
|
||||||
"def_max": 50000,
|
|
||||||
"wall": 6000,
|
|
||||||
"wall_max": 60000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준국",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "군주",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 0,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 50,
|
|
||||||
"experience": 1000,
|
|
||||||
"dedication": 1000,
|
|
||||||
"dex1": 10,
|
|
||||||
"dex2": 20,
|
|
||||||
"dex3": 30,
|
|
||||||
"dex4": 40,
|
|
||||||
"dex5": 50,
|
|
||||||
"turntime": "0200-01-01 00:05:00"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"gameEnvironment": {
|
|
||||||
"isunited": 0,
|
|
||||||
"refreshLimit": 3
|
|
||||||
},
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"turntime": "0200-01-01 00:00:00",
|
|
||||||
"show_img_level": 3,
|
|
||||||
"fiction": [0]
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "LostUniqueItem",
|
|
||||||
"args": [0.2],
|
|
||||||
"environment": {
|
|
||||||
"year": 210,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 180
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑",
|
|
||||||
"npc": 0,
|
|
||||||
"horse": "che_명마_12_옥란백용구",
|
|
||||||
"weapon": "che_무기_15_의천검",
|
|
||||||
"book": "che_서적_01_효경전",
|
|
||||||
"item": "che_저지_삼황내문"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을",
|
|
||||||
"npc": 1,
|
|
||||||
"horse": "che_명마_12_사륜거",
|
|
||||||
"weapon": "che_무기_01_단도",
|
|
||||||
"book": "None",
|
|
||||||
"item": "che_부적_태현청생부"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "MergeInheritPointRank",
|
|
||||||
"environment": {
|
|
||||||
"year": 210,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 180
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"clearInheritanceOwnerIds": [100],
|
|
||||||
"gameEnvironment": {
|
|
||||||
"isunited": 0
|
|
||||||
},
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑",
|
|
||||||
"nation": 1,
|
|
||||||
"owner": 100,
|
|
||||||
"npc": 0,
|
|
||||||
"belong": 3,
|
|
||||||
"dex1": 1000,
|
|
||||||
"dex2": 0,
|
|
||||||
"dex3": 0,
|
|
||||||
"dex4": 0,
|
|
||||||
"dex5": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"inheritancePoints": [
|
|
||||||
{"ownerId": 100, "key": "previous", "value": 999},
|
|
||||||
{"ownerId": 100, "key": "lived_month", "value": 2},
|
|
||||||
{"ownerId": 100, "key": "max_domestic_critical", "value": 4},
|
|
||||||
{"ownerId": 100, "key": "active_action", "value": 15},
|
|
||||||
{"ownerId": 100, "key": "unifier", "value": 6},
|
|
||||||
{"ownerId": 100, "key": "tournament", "value": 7}
|
|
||||||
],
|
|
||||||
"rankData": [
|
|
||||||
{"generalId": 1, "type": "warnum", "value": 2},
|
|
||||||
{"generalId": 1, "type": "firenum", "value": 1},
|
|
||||||
{"generalId": 1, "type": "betwin", "value": 2},
|
|
||||||
{"generalId": 1, "type": "betgold", "value": 4000},
|
|
||||||
{"generalId": 1, "type": "betwingold", "value": 2000},
|
|
||||||
{"generalId": 1, "type": "inherit_earned_dyn", "value": 999},
|
|
||||||
{"generalId": 1, "type": "inherit_earned_act", "value": 11},
|
|
||||||
{"generalId": 1, "type": "inherit_earned", "value": 999},
|
|
||||||
{"generalId": 1, "type": "inherit_spent_dyn", "value": 9},
|
|
||||||
{"generalId": 1, "type": "inherit_spent", "value": 999}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"ownerIds": [100],
|
|
||||||
"inheritanceKeys": [
|
|
||||||
"previous",
|
|
||||||
"lived_month",
|
|
||||||
"max_domestic_critical",
|
|
||||||
"active_action",
|
|
||||||
"unifier",
|
|
||||||
"tournament"
|
|
||||||
],
|
|
||||||
"rankGeneralIds": [1],
|
|
||||||
"rankTypes": [
|
|
||||||
"inherit_earned",
|
|
||||||
"inherit_earned_act",
|
|
||||||
"inherit_earned_dyn",
|
|
||||||
"inherit_spent",
|
|
||||||
"inherit_spent_dyn"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "NationBettingLifecycle",
|
|
||||||
"args": [1, 100],
|
|
||||||
"bettorGeneralIds": [1, 2],
|
|
||||||
"bettorOwnerIds": [1, 2],
|
|
||||||
"setup": {
|
|
||||||
"clearBetting": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "위",
|
|
||||||
"color": "#111111",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 2000,
|
|
||||||
"tech": 100,
|
|
||||||
"power": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "촉",
|
|
||||||
"color": "#222222",
|
|
||||||
"capital": 2,
|
|
||||||
"gennum": 1,
|
|
||||||
"gold": 3000,
|
|
||||||
"rice": 4000,
|
|
||||||
"tech": 200,
|
|
||||||
"power": 300,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_병가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetCities": true,
|
|
||||||
"deleteOtherCities": true,
|
|
||||||
"keepCityIds": [1, 2],
|
|
||||||
"city": [
|
|
||||||
{ "id": 1, "values": { "name": "허창", "nation": 1, "level": 3 } },
|
|
||||||
{ "id": 2, "values": { "name": "성도", "nation": 2, "level": 3 } }
|
|
||||||
],
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{ "id": 1, "values": { "name": "장수1", "nation": 1, "city": 1, "owner": 1, "npc": 0 } },
|
|
||||||
{ "id": 2, "values": { "name": "장수2", "nation": 2, "city": 2, "owner": 2, "npc": 0 } }
|
|
||||||
],
|
|
||||||
"inheritancePrevious": {
|
|
||||||
"1": 1000,
|
|
||||||
"2": 1000
|
|
||||||
},
|
|
||||||
"rankData": [
|
|
||||||
{ "generalId": 1, "type": "inherit_spent_dyn", "value": 0 },
|
|
||||||
{ "generalId": 1, "type": "inherit_earned_act", "value": 0 },
|
|
||||||
{ "generalId": 2, "type": "inherit_spent_dyn", "value": 0 },
|
|
||||||
{ "generalId": 2, "type": "inherit_earned_act", "value": 0 }
|
|
||||||
],
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "NpcNationLifecycle",
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "점유도시",
|
|
||||||
"level": 5,
|
|
||||||
"nation": 1,
|
|
||||||
"pop": 10001,
|
|
||||||
"pop_max": 50001,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5001,
|
|
||||||
"comm": 2001,
|
|
||||||
"comm_max": 6001,
|
|
||||||
"secu": 3001,
|
|
||||||
"secu_max": 7001,
|
|
||||||
"def": 4001,
|
|
||||||
"def_max": 8001,
|
|
||||||
"wall": 5001,
|
|
||||||
"wall_max": 9001
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"values": {
|
|
||||||
"name": "건국도시",
|
|
||||||
"level": 5,
|
|
||||||
"nation": 0,
|
|
||||||
"pop": 10048,
|
|
||||||
"pop_max": 50048,
|
|
||||||
"agri": 1048,
|
|
||||||
"agri_max": 5048,
|
|
||||||
"comm": 2048,
|
|
||||||
"comm_max": 6048,
|
|
||||||
"secu": 3048,
|
|
||||||
"secu_max": 7048,
|
|
||||||
"def": 4048,
|
|
||||||
"def_max": 8048,
|
|
||||||
"wall": 5048,
|
|
||||||
"wall_max": 9048
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준국",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 0,
|
|
||||||
"tech": 120,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"gameEnvironment": {
|
|
||||||
"lastNPCTroopLeaderID": 40
|
|
||||||
},
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"turntime": "0200-01-01 00:00:00",
|
|
||||||
"show_img_level": 3,
|
|
||||||
"fiction": [0]
|
|
||||||
},
|
|
||||||
"observe": {}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "OpenNationBetting",
|
|
||||||
"args": [1, 500],
|
|
||||||
"setup": {
|
|
||||||
"clearBetting": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "위",
|
|
||||||
"color": "#111111",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 2000,
|
|
||||||
"tech": 100,
|
|
||||||
"power": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "촉",
|
|
||||||
"color": "#222222",
|
|
||||||
"capital": 2,
|
|
||||||
"gennum": 1,
|
|
||||||
"gold": 3000,
|
|
||||||
"rice": 4000,
|
|
||||||
"tech": 200,
|
|
||||||
"power": 300,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_병가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetCities": true,
|
|
||||||
"city": [
|
|
||||||
{ "id": 1, "values": { "nation": 1, "level": 3 } },
|
|
||||||
{ "id": 2, "values": { "nation": 2, "level": 3 } }
|
|
||||||
],
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{ "id": 1, "values": { "name": "장수1", "nation": 1, "city": 1, "owner": 1, "npc": 0 } },
|
|
||||||
{ "id": 2, "values": { "name": "장수2", "nation": 2, "city": 2, "owner": 2, "npc": 0 } }
|
|
||||||
],
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"cityIds": [1, 2],
|
|
||||||
"nationIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,178 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "PostUpdateMonthly",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 2,
|
|
||||||
"startyear": 193,
|
|
||||||
"seedYear": 193,
|
|
||||||
"seedMonth": 1
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"world": {
|
|
||||||
"hiddenSeed": "monthly-post-diplomacy-fixture"
|
|
||||||
},
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2, 3, 4],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2, 3, 4],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑장",
|
|
||||||
"nation": 1,
|
|
||||||
"npc": 2,
|
|
||||||
"crew": 0,
|
|
||||||
"gold": 0,
|
|
||||||
"rice": 0,
|
|
||||||
"leadership": 10,
|
|
||||||
"strength": 10,
|
|
||||||
"intel": 10,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을장",
|
|
||||||
"nation": 2,
|
|
||||||
"npc": 2,
|
|
||||||
"crew": 0,
|
|
||||||
"gold": 0,
|
|
||||||
"rice": 0,
|
|
||||||
"leadership": 10,
|
|
||||||
"strength": 10,
|
|
||||||
"intel": 10,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"name": "병장",
|
|
||||||
"nation": 3,
|
|
||||||
"npc": 2,
|
|
||||||
"crew": 0,
|
|
||||||
"gold": 0,
|
|
||||||
"rice": 0,
|
|
||||||
"leadership": 10,
|
|
||||||
"strength": 10,
|
|
||||||
"intel": 10,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"values": {
|
|
||||||
"name": "정장",
|
|
||||||
"nation": 4,
|
|
||||||
"npc": 2,
|
|
||||||
"crew": 0,
|
|
||||||
"gold": 0,
|
|
||||||
"rice": 0,
|
|
||||||
"leadership": 10,
|
|
||||||
"strength": 10,
|
|
||||||
"intel": 10,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑국",
|
|
||||||
"gennum": 2,
|
|
||||||
"level": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을국",
|
|
||||||
"gennum": 1,
|
|
||||||
"level": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"name": "병국",
|
|
||||||
"gennum": 1,
|
|
||||||
"level": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"values": {
|
|
||||||
"name": "정국",
|
|
||||||
"gennum": 1,
|
|
||||||
"level": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"diplomacy": [
|
|
||||||
{
|
|
||||||
"fromNationId": 1,
|
|
||||||
"toNationId": 2,
|
|
||||||
"state": 1,
|
|
||||||
"term": 1,
|
|
||||||
"dead": 777
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 2,
|
|
||||||
"toNationId": 1,
|
|
||||||
"state": 1,
|
|
||||||
"term": 1,
|
|
||||||
"dead": 888
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 1,
|
|
||||||
"toNationId": 3,
|
|
||||||
"state": 0,
|
|
||||||
"term": 5,
|
|
||||||
"dead": 250
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 3,
|
|
||||||
"toNationId": 1,
|
|
||||||
"state": 0,
|
|
||||||
"term": 5,
|
|
||||||
"dead": 50
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 3,
|
|
||||||
"toNationId": 4,
|
|
||||||
"state": 0,
|
|
||||||
"term": 1,
|
|
||||||
"dead": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 4,
|
|
||||||
"toNationId": 3,
|
|
||||||
"state": 0,
|
|
||||||
"term": 1,
|
|
||||||
"dead": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 2,
|
|
||||||
"toNationId": 4,
|
|
||||||
"state": 7,
|
|
||||||
"term": 1,
|
|
||||||
"dead": 999
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2, 3, 4],
|
|
||||||
"nationIds": [1, 2, 3, 4]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,162 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "PostUpdateMonthly",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 2,
|
|
||||||
"startyear": 193,
|
|
||||||
"seedYear": 193,
|
|
||||||
"seedMonth": 1
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"world": {
|
|
||||||
"hiddenSeed": "monthly-post-nation-stats-fixture"
|
|
||||||
},
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 2000,
|
|
||||||
"crew": 100,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 40,
|
|
||||||
"intel": 30,
|
|
||||||
"experience": 100,
|
|
||||||
"dedication": 200,
|
|
||||||
"dex1": 1000,
|
|
||||||
"dex2": 0,
|
|
||||||
"dex3": 0,
|
|
||||||
"dex4": 0,
|
|
||||||
"dex5": 0
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"nation": 2,
|
|
||||||
"npc": 2,
|
|
||||||
"gold": 3000,
|
|
||||||
"rice": 4000,
|
|
||||||
"crew": 200,
|
|
||||||
"leadership": 60,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 40,
|
|
||||||
"experience": 300,
|
|
||||||
"dedication": 400,
|
|
||||||
"dex1": 2000,
|
|
||||||
"dex2": 1000,
|
|
||||||
"dex3": 0,
|
|
||||||
"dex4": 0,
|
|
||||||
"dex5": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"rankData": [
|
|
||||||
{"generalId": 1, "type": "killcrew_person", "value": 100},
|
|
||||||
{"generalId": 1, "type": "deathcrew_person", "value": 0},
|
|
||||||
{"generalId": 2, "type": "killcrew_person", "value": 0},
|
|
||||||
{"generalId": 2, "type": "deathcrew_person", "value": 100}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑국",
|
|
||||||
"gold": 10000,
|
|
||||||
"rice": 20000,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"gennum": 9,
|
|
||||||
"power": 7
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을국",
|
|
||||||
"gold": 2000,
|
|
||||||
"rice": 3000,
|
|
||||||
"tech": 50,
|
|
||||||
"level": 1,
|
|
||||||
"gennum": 8,
|
|
||||||
"power": 8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑성",
|
|
||||||
"nation": 1,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000,
|
|
||||||
"agri": 100,
|
|
||||||
"agri_max": 200,
|
|
||||||
"comm": 100,
|
|
||||||
"comm_max": 200,
|
|
||||||
"secu": 100,
|
|
||||||
"secu_max": 200,
|
|
||||||
"def": 100,
|
|
||||||
"def_max": 200,
|
|
||||||
"wall": 100,
|
|
||||||
"wall_max": 200
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을성",
|
|
||||||
"nation": 2,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 2000,
|
|
||||||
"pop_max": 4000,
|
|
||||||
"agri": 200,
|
|
||||||
"agri_max": 400,
|
|
||||||
"comm": 200,
|
|
||||||
"comm_max": 400,
|
|
||||||
"secu": 200,
|
|
||||||
"secu_max": 400,
|
|
||||||
"def": 200,
|
|
||||||
"def_max": 400,
|
|
||||||
"wall": 200,
|
|
||||||
"wall_max": 400
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nationEnvironment": [
|
|
||||||
{
|
|
||||||
"nationId": 1,
|
|
||||||
"key": "max_power",
|
|
||||||
"value": {
|
|
||||||
"maxPower": 999,
|
|
||||||
"maxCrew": 50,
|
|
||||||
"maxCities": ["옛도시", "옛도시2"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{"nationId": 1, "key": "available_war_setting_cnt", "value": 1}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"nationIds": [1, 2],
|
|
||||||
"cityIds": [1, 2],
|
|
||||||
"rankGeneralIds": [1, 2],
|
|
||||||
"rankTypes": ["killcrew_person", "deathcrew_person"],
|
|
||||||
"nationEnvironmentKeys": ["max_power", "available_war_setting_cnt"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "PostUpdateMonthly",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 2,
|
|
||||||
"startyear": 193,
|
|
||||||
"seedYear": 193,
|
|
||||||
"seedMonth": 1
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"world": {
|
|
||||||
"hiddenSeed": "monthly-post-tail-2"
|
|
||||||
},
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"clearNeutralAuctions": true,
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 2],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"gameEnvironment": {
|
|
||||||
"tournament": 0,
|
|
||||||
"tnmt_trig": true,
|
|
||||||
"tnmt_pattern": [0, 1, 2, 3],
|
|
||||||
"prev_winner": null
|
|
||||||
},
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑장",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 5000,
|
|
||||||
"rice": 7000,
|
|
||||||
"crew": 100,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 40,
|
|
||||||
"intel": 30,
|
|
||||||
"experience": 100,
|
|
||||||
"dedication": 200
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을장",
|
|
||||||
"nation": 2,
|
|
||||||
"city": 2,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 6000,
|
|
||||||
"rice": 8000,
|
|
||||||
"crew": 200,
|
|
||||||
"leadership": 60,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 40,
|
|
||||||
"experience": 300,
|
|
||||||
"dedication": 400
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑국",
|
|
||||||
"capital": 1,
|
|
||||||
"gold": 10000,
|
|
||||||
"rice": 20000,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"gennum": 1,
|
|
||||||
"power": 7
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을국",
|
|
||||||
"capital": 2,
|
|
||||||
"gold": 2000,
|
|
||||||
"rice": 3000,
|
|
||||||
"tech": 50,
|
|
||||||
"level": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"power": 8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑성",
|
|
||||||
"nation": 1,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"front": 3,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "을성",
|
|
||||||
"nation": 2,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"front": 3,
|
|
||||||
"pop": 2000,
|
|
||||||
"pop_max": 4000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"nationIds": [1, 2],
|
|
||||||
"cityIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,143 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "PostUpdateMonthly",
|
|
||||||
"environment": {
|
|
||||||
"year": 195,
|
|
||||||
"month": 2,
|
|
||||||
"startyear": 193,
|
|
||||||
"seedYear": 195,
|
|
||||||
"seedMonth": 1
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"world": {
|
|
||||||
"hiddenSeed": "monthly-post-wander-fixture"
|
|
||||||
},
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"resetCities": true,
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "방랑성",
|
|
||||||
"nation": 4,
|
|
||||||
"level": 4,
|
|
||||||
"front": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "존속성",
|
|
||||||
"nation": 1,
|
|
||||||
"level": 4,
|
|
||||||
"front": 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2, 3],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "방랑주",
|
|
||||||
"nation": 4,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 2,
|
|
||||||
"gold": 2000,
|
|
||||||
"rice": 3000,
|
|
||||||
"crew": 100,
|
|
||||||
"makelimit": 0,
|
|
||||||
"belong": 7,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 40,
|
|
||||||
"intel": 30,
|
|
||||||
"experience": 100,
|
|
||||||
"dedication": 200
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "방랑객",
|
|
||||||
"nation": 4,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 1,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 1500,
|
|
||||||
"rice": 4000,
|
|
||||||
"crew": 200,
|
|
||||||
"makelimit": 0,
|
|
||||||
"belong": 5,
|
|
||||||
"leadership": 60,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 40,
|
|
||||||
"experience": 300,
|
|
||||||
"dedication": 400
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"name": "존속장",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 2,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 2,
|
|
||||||
"gold": 500,
|
|
||||||
"rice": 500,
|
|
||||||
"crew": 50,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 50,
|
|
||||||
"experience": 0,
|
|
||||||
"dedication": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1, 4],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "존속국",
|
|
||||||
"gennum": 1,
|
|
||||||
"level": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"values": {
|
|
||||||
"name": "방랑국",
|
|
||||||
"gennum": 2,
|
|
||||||
"level": 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"resetDiplomacy": true,
|
|
||||||
"diplomacy": [
|
|
||||||
{
|
|
||||||
"fromNationId": 1,
|
|
||||||
"toNationId": 4,
|
|
||||||
"state": 2,
|
|
||||||
"term": 0,
|
|
||||||
"dead": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fromNationId": 4,
|
|
||||||
"toNationId": 1,
|
|
||||||
"state": 2,
|
|
||||||
"term": 0,
|
|
||||||
"dead": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2, 3],
|
|
||||||
"nationIds": [1, 4],
|
|
||||||
"cityIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "PreUpdateMonthly",
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 12,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"syncEnvironment": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1, 2],
|
|
||||||
"general": [
|
|
||||||
{"id": 1, "values": {"makelimit": 2}},
|
|
||||||
{"id": 2, "values": {"makelimit": 0}}
|
|
||||||
],
|
|
||||||
"generalAccessLog": [
|
|
||||||
{"generalId": 1, "refreshScoreTotal": 101},
|
|
||||||
{"generalId": 2, "refreshScoreTotal": 1}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"rate": 35,
|
|
||||||
"rate_tmp": 10,
|
|
||||||
"strategic_cmd_limit": 2,
|
|
||||||
"surlimit": 1,
|
|
||||||
"spy": "{\"1\":1,\"2\":2}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{"id": 1, "values": {"state": 31, "term": 1, "conflict": {"1": 10}}},
|
|
||||||
{"id": 2, "values": {"state": 32, "term": 2, "conflict": {"1": 20}}},
|
|
||||||
{"id": 3, "values": {"state": 33, "term": 0, "conflict": {"1": 30}}},
|
|
||||||
{"id": 4, "values": {"state": 34, "term": 3, "conflict": {"1": 40}}},
|
|
||||||
{"id": 5, "values": {"state": 41, "term": 1, "conflict": {"1": 50}}},
|
|
||||||
{"id": 6, "values": {"state": 42, "term": 2, "conflict": {"1": 60}}},
|
|
||||||
{"id": 7, "values": {"state": 43, "term": 3, "conflict": {"1": 70}}}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1, 2],
|
|
||||||
"nationIds": [1],
|
|
||||||
"cityIds": [1, 2, 3, 4, 5, 6, 7],
|
|
||||||
"accessGeneralIds": [1, 2]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ProcessIncome",
|
|
||||||
"args": ["gold"],
|
|
||||||
"environment": {
|
|
||||||
"year": 190,
|
|
||||||
"month": 7,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 5,
|
|
||||||
"npc": 0,
|
|
||||||
"gold": 1000,
|
|
||||||
"rice": 1000,
|
|
||||||
"dedication": 100
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑국",
|
|
||||||
"capital": 1,
|
|
||||||
"gold": 10000,
|
|
||||||
"rice": 20000,
|
|
||||||
"level": 1,
|
|
||||||
"rate": 35,
|
|
||||||
"rate_tmp": 10
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "갑성",
|
|
||||||
"nation": 1,
|
|
||||||
"level": 4,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 20000,
|
|
||||||
"agri": 1000,
|
|
||||||
"agri_max": 2000,
|
|
||||||
"comm": 1000,
|
|
||||||
"comm_max": 2000,
|
|
||||||
"secu": 1000,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 80,
|
|
||||||
"def": 500,
|
|
||||||
"def_max": 1000,
|
|
||||||
"wall": 500,
|
|
||||||
"wall_max": 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"nationIds": [1],
|
|
||||||
"cityIds": [1],
|
|
||||||
"nationEnvironmentKeys": ["prev_income_gold", "prev_income_rice"]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,106 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ProcessSemiAnnual",
|
|
||||||
"resource": "gold",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "반기검증국",
|
|
||||||
"gold": 100001,
|
|
||||||
"rice": 7777,
|
|
||||||
"rate_tmp": 20,
|
|
||||||
"type": "che_도가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 50000,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5000,
|
|
||||||
"comm": 1001,
|
|
||||||
"comm_max": 5000,
|
|
||||||
"secu": 1001,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 55,
|
|
||||||
"def": 1001,
|
|
||||||
"def_max": 5000,
|
|
||||||
"wall": 1001,
|
|
||||||
"wall_max": 5000,
|
|
||||||
"dead": 123
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"supply": 0,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 50000,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5000,
|
|
||||||
"comm": 1001,
|
|
||||||
"comm_max": 5000,
|
|
||||||
"secu": 1001,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 55,
|
|
||||||
"def": 1001,
|
|
||||||
"def_max": 5000,
|
|
||||||
"wall": 1001,
|
|
||||||
"wall_max": 5000,
|
|
||||||
"dead": 123
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"nation": 0,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 50000,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5000,
|
|
||||||
"comm": 1001,
|
|
||||||
"comm_max": 5000,
|
|
||||||
"secu": 1001,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 55,
|
|
||||||
"def": 1001,
|
|
||||||
"def_max": 5000,
|
|
||||||
"wall": 1001,
|
|
||||||
"wall_max": 5000,
|
|
||||||
"dead": 123
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"gold": 10001,
|
|
||||||
"rice": 8888
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"cityIds": [1, 2, 3],
|
|
||||||
"nationIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ProcessSemiAnnual",
|
|
||||||
"resource": "gold",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "반기검증국",
|
|
||||||
"gold": 100001,
|
|
||||||
"rice": 7777,
|
|
||||||
"rate": 50,
|
|
||||||
"rate_tmp": 20,
|
|
||||||
"type": "che_중립"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 10000,
|
|
||||||
"pop_max": 50000,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5000,
|
|
||||||
"comm": 1001,
|
|
||||||
"comm_max": 5000,
|
|
||||||
"secu": 1001,
|
|
||||||
"secu_max": 2000,
|
|
||||||
"trust": 55,
|
|
||||||
"def": 1001,
|
|
||||||
"def_max": 5000,
|
|
||||||
"wall": 1001,
|
|
||||||
"wall_max": 5000,
|
|
||||||
"dead": 123
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"gold": 10001,
|
|
||||||
"rice": 8888
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"cityIds": [1],
|
|
||||||
"nationIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "ProcessWarIncome",
|
|
||||||
"environment": {
|
|
||||||
"year": 193,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190
|
|
||||||
},
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "전쟁수입국",
|
|
||||||
"gold": 1000,
|
|
||||||
"level": 1,
|
|
||||||
"type": "che_중립"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"name": "비활성국",
|
|
||||||
"gold": 2000,
|
|
||||||
"level": 0,
|
|
||||||
"type": "che_중립"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"name": "법가국",
|
|
||||||
"gold": 3000,
|
|
||||||
"level": 1,
|
|
||||||
"type": "che_법가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000,
|
|
||||||
"dead": 101
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"values": {
|
|
||||||
"nation": 1,
|
|
||||||
"supply": 0,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000,
|
|
||||||
"dead": 999
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"values": {
|
|
||||||
"nation": 2,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000,
|
|
||||||
"dead": 1000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"values": {
|
|
||||||
"nation": 3,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 2000,
|
|
||||||
"dead": 105
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"values": {
|
|
||||||
"nation": 0,
|
|
||||||
"supply": 1,
|
|
||||||
"pop": 999,
|
|
||||||
"pop_max": 1000,
|
|
||||||
"dead": 10
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"cityIds": [1, 2, 3, 4, 5],
|
|
||||||
"nationIds": [1, 2, 3]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,105 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "RaiseInvader",
|
|
||||||
"compactOutput": true,
|
|
||||||
"args": [10, 150, 100, 20],
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"deleteOtherGenerals": true,
|
|
||||||
"keepGeneralIds": [1],
|
|
||||||
"resetNations": true,
|
|
||||||
"deleteOtherNations": true,
|
|
||||||
"keepNationIds": [1],
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"level": 3,
|
|
||||||
"nation": 1,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 10000,
|
|
||||||
"agri": 2000,
|
|
||||||
"agri_max": 20000,
|
|
||||||
"comm": 3000,
|
|
||||||
"comm_max": 30000,
|
|
||||||
"secu": 4000,
|
|
||||||
"secu_max": 40000,
|
|
||||||
"def": 5000,
|
|
||||||
"def_max": 50000,
|
|
||||||
"wall": 6000,
|
|
||||||
"wall_max": 60000
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"values": {
|
|
||||||
"level": 4,
|
|
||||||
"nation": 0,
|
|
||||||
"pop": 1000,
|
|
||||||
"pop_max": 10000,
|
|
||||||
"agri": 2000,
|
|
||||||
"agri_max": 20000,
|
|
||||||
"comm": 3000,
|
|
||||||
"comm_max": 30000,
|
|
||||||
"secu": 4000,
|
|
||||||
"secu_max": 40000,
|
|
||||||
"def": 5000,
|
|
||||||
"def_max": 50000,
|
|
||||||
"wall": 6000,
|
|
||||||
"wall_max": 60000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준국",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"tech": 100,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"general": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "군주",
|
|
||||||
"nation": 1,
|
|
||||||
"city": 1,
|
|
||||||
"officer_level": 12,
|
|
||||||
"npc": 0,
|
|
||||||
"leadership": 50,
|
|
||||||
"strength": 50,
|
|
||||||
"intel": 50,
|
|
||||||
"experience": 1000,
|
|
||||||
"dedication": 1000,
|
|
||||||
"dex1": 10,
|
|
||||||
"dex2": 20,
|
|
||||||
"dex3": 30,
|
|
||||||
"dex4": 40,
|
|
||||||
"dex5": 50,
|
|
||||||
"turntime": "0200-01-01 00:05:00"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"turntime": "0200-01-01 00:00:00",
|
|
||||||
"show_img_level": 3,
|
|
||||||
"fiction": [0]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"generalIds": [1],
|
|
||||||
"cityIds": [1, 48],
|
|
||||||
"nationIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
{
|
|
||||||
"action": "RaiseNPCNation",
|
|
||||||
"setup": {
|
|
||||||
"resetCities": true,
|
|
||||||
"resetGenerals": true,
|
|
||||||
"resetNations": true,
|
|
||||||
"city": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "점유도시",
|
|
||||||
"level": 5,
|
|
||||||
"nation": 1,
|
|
||||||
"pop": 10001,
|
|
||||||
"pop_max": 50001,
|
|
||||||
"agri": 1001,
|
|
||||||
"agri_max": 5001,
|
|
||||||
"comm": 2001,
|
|
||||||
"comm_max": 6001,
|
|
||||||
"secu": 3001,
|
|
||||||
"secu_max": 7001,
|
|
||||||
"def": 4001,
|
|
||||||
"def_max": 8001,
|
|
||||||
"wall": 5001,
|
|
||||||
"wall_max": 9001
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"values": {
|
|
||||||
"name": "건국도시",
|
|
||||||
"level": 5,
|
|
||||||
"nation": 0,
|
|
||||||
"pop": 10048,
|
|
||||||
"pop_max": 50048,
|
|
||||||
"agri": 1048,
|
|
||||||
"agri_max": 5048,
|
|
||||||
"comm": 2048,
|
|
||||||
"comm_max": 6048,
|
|
||||||
"secu": 3048,
|
|
||||||
"secu_max": 7048,
|
|
||||||
"def": 4048,
|
|
||||||
"def_max": 8048,
|
|
||||||
"wall": 5048,
|
|
||||||
"wall_max": 9048
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nation": [
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"values": {
|
|
||||||
"name": "기준국",
|
|
||||||
"capital": 1,
|
|
||||||
"gennum": 1,
|
|
||||||
"tech": 120,
|
|
||||||
"level": 2,
|
|
||||||
"type": "che_유가"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"syncEnvironment": true
|
|
||||||
},
|
|
||||||
"environment": {
|
|
||||||
"year": 200,
|
|
||||||
"month": 1,
|
|
||||||
"startyear": 190,
|
|
||||||
"turnterm": 10,
|
|
||||||
"turntime": "0200-01-01 00:00:00",
|
|
||||||
"show_img_level": 3,
|
|
||||||
"fiction": [0]
|
|
||||||
},
|
|
||||||
"observe": {
|
|
||||||
"cityIds": [1, 48],
|
|
||||||
"nationIds": [1]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user