+
숙련도
{{ dexType }}
{{ dexInfo.name }}
{{ (dex / 1000).toLocaleString(undefined, { minimumFractionDigits: 1, maximumFractionDigits: 1 }) }}K
-
예약턴
-
- {{ turn.brief }}
+
예약턴
+
+ {{ turn.brief }}
@@ -161,12 +161,16 @@ const dexList = computed((): [string, number, DexInfo][] => {
}
.general-card-turn {
- .bg1 {
- border-left: solid 1px gray;
+ > div {
+ height: calc(64px / 3);
+ border-bottom: solid 1px gray;
+ border-right: solid 1px gray;
}
- > div {
- border-bottom: solid 1px gray;
+ > .command{
+ font-size: 90%;
+ display: grid;
+ align-content: center;
}
}
diff --git a/hwe/ts/defs/API/Nation.ts b/hwe/ts/defs/API/Nation.ts
index 126f2278..85b26c67 100644
--- a/hwe/ts/defs/API/Nation.ts
+++ b/hwe/ts/defs/API/Nation.ts
@@ -7,79 +7,79 @@ export type SetBlockWarResponse = ValidResponse & {
};
export type GeneralListItemP0 = {
- no: number,
- name: string,
- nation: number,
- npc: number,
- injury: number,
- leadership: number,
- strength: number,
- intel: number,
- explevel: number,
- dedlevel: number,
- gold: number,
- rice: number,
- killturn: number,
- picture: string,
- imgsvr: 0 | 1,
- age: number,
- specialDomestic: GameObjClassKey,
- specialWar: GameObjClassKey,
- personal: GameObjClassKey,
- belong: number,
- connect: number,
+ no: number;
+ name: string;
+ nation: number;
+ npc: number;
+ injury: number;
+ leadership: number;
+ strength: number;
+ intel: number;
+ explevel: number;
+ dedlevel: number;
+ gold: number;
+ rice: number;
+ killturn: number;
+ picture: string;
+ imgsvr: 0 | 1;
+ age: number;
+ specialDomestic: GameObjClassKey;
+ specialWar: GameObjClassKey;
+ personal: GameObjClassKey;
+ belong: number;
+ connect: number;
- officerLevel: number, //권한에따라 태수,군사,시종 노출 여부가 다름
- officerLevelText: string,
- lbonus: number,
- ownerName: string | null, //NPC 출력용에 따라 결과가 다름
- honorText: string,
- dedLevelText: string,
- bill: number,
- reservedCommand: TurnObj[] | null,
+ officerLevel: number; //권한에따라 태수,군사,시종 노출 여부가 다름
+ officerLevelText: string;
+ lbonus: number;
+ ownerName: string | null; //NPC 출력용에 따라 결과가 다름
+ honorText: string;
+ dedLevelText: string;
+ bill: number;
+ reservedCommand: TurnObj[] | null;
- autorun_limit: number,
+ autorun_limit: number;
- troop: number,
-}
+ city: number;
+ troop: number;
+};
export type GeneralListItemP1 = {
- con: number,
- specage: number,
- specage2: number,
- leadership_exp: number,
- strength_exp: number,
- intel_exp: number,
+ con: number;
+ specage: number;
+ specage2: number;
+ leadership_exp: number;
+ strength_exp: number;
+ intel_exp: number;
- dex1: number,
- dex2: number,
- dex3: number,
- dex4: number,
- dex5: number,
+ dex1: number;
+ dex2: number;
+ dex3: number;
+ dex4: number;
+ dex5: number;
- city: number,
- experience: number,
- dedication: number,
- officer_level: number,
- officer_city: number,
- defence_train: number,
- crewtype: GameObjClassKey,
- crew: number,
- train: number,
- atmos: number,
- turntime: string,
- recent_war: string,
- horse: GameObjClassKey,
- weapon: GameObjClassKey,
- book: GameObjClassKey,
- item: GameObjClassKey,
+ experience: number;
+ dedication: number;
+ officer_level: number;
+ officer_city: number;
+ defence_train: number;
+ crewtype: GameObjClassKey;
+ crew: number;
+ train: number;
+ atmos: number;
+ turntime: string;
+ recent_war: string;
+ horse: GameObjClassKey;
+ weapon: GameObjClassKey;
+ book: GameObjClassKey;
+ item: GameObjClassKey;
- warnum: number,
- killnum: number,
- deathnum: number,
- killcrew: number,
- deathcrew: number,
- firenum: number,
+ warnum: number;
+ killnum: number;
+ deathnum: number;
+ killcrew: number;
+ deathcrew: number;
+ firenum: number;
} & GeneralListItemP0;
export type GeneralListItemP2 = GeneralListItemP1;
@@ -87,45 +87,48 @@ export type GeneralListItemP2 = GeneralListItemP1;
export type RawGeneralListItem = GeneralListItemP0 | GeneralListItemP1 | GeneralListItemP2;
export type GeneralListItem =
- (GeneralListItemP0 & { st0: true, st1: false, st2: false, permission: 0 }) |
- (GeneralListItemP1 & { st0: true, st1: true, st2: false, permission: 1 }) |
- (GeneralListItemP2 & { st0: true, st1: true, st2: true, permission: 2 | 3 | 4 });
+ | (GeneralListItemP0 & { st0: true; st1: false; st2: false; permission: 0 })
+ | (GeneralListItemP1 & { st0: true; st1: true; st2: false; permission: 1 })
+ | (GeneralListItemP2 & { st0: true; st1: true; st2: true; permission: 2 | 3 | 4 });
type ResponseEnv = {
- year: number,
- month: number,
- turntime: string,
- turnterm: number,
- killturn: number,
+ year: number;
+ month: number;
+ turntime: string;
+ turnterm: number;
+ killturn: number;
autorun_user?: {
- limit_minutes: number,
- options: Record
,
- }
-}
+ limit_minutes: number;
+ options: Record;
+ };
+};
-export type RawGeneralListP0 = ValidResponse & {
- permission: 0,
- column: (keyof GeneralListItemP0)[],
- list: ValuesOf[][],
- troops: {id: number, name: string, turntime: string}[],
- env: ResponseEnv,
-}
+type RawGeneralCommon = {
+ troops: { id: number; name: string; turntime: string; reservedCommand: string[] }[];
+ env: ResponseEnv;
+ myGeneralID: number;
+};
-export type RawGeneralListP1 = ValidResponse & {
- permission: 1,
- column: (keyof GeneralListItemP1)[],
- list: ValuesOf[][],
- troops: {id: number, name: string, turntime: string}[],
- env: ResponseEnv,
-}
+export type RawGeneralListP0 = ValidResponse &
+ RawGeneralCommon & {
+ permission: 0;
+ column: (keyof GeneralListItemP0)[];
+ list: ValuesOf[][];
+ };
-export type RawGeneralListP2 = ValidResponse & {
- permission: 2 | 3 | 4,
- column: (keyof GeneralListItemP2)[],
- list: ValuesOf[][],
- troops: {id: number, name: string, turntime: string}[],
- env: ResponseEnv,
-}
+export type RawGeneralListP1 = ValidResponse &
+ RawGeneralCommon & {
+ permission: 1;
+ column: (keyof GeneralListItemP1)[];
+ list: ValuesOf[][];
+ };
+
+export type RawGeneralListP2 = ValidResponse &
+ RawGeneralCommon & {
+ permission: 2 | 3 | 4;
+ column: (keyof GeneralListItemP2)[];
+ list: ValuesOf[][];
+ };
export type GeneralListResponse = RawGeneralListP0 | RawGeneralListP1 | RawGeneralListP2;
@@ -141,16 +144,18 @@ export type NationItem = NationStaticItem & {
strategic_cmd_limit: number;
surlimit: number;
tech: number;
-}
+};
export type LiteNationInfoResponse = ValidResponse & {
nation: NationStaticItem;
-}
+};
-export type NationInfoResponse = (ValidResponse & {
- nation: NationStaticItem;
-}) | (ValidResponse &{
- nation: NationItem;
- impossibleStrategicCommandLists: [string, number][];
- troops: Record;
-})
\ No newline at end of file
+export type NationInfoResponse =
+ | (ValidResponse & {
+ nation: NationStaticItem;
+ })
+ | (ValidResponse & {
+ nation: NationItem;
+ impossibleStrategicCommandLists: [string, number][];
+ troops: Record;
+ });
diff --git a/hwe/ts/util/convertIterableToMap.ts b/hwe/ts/util/convertIterableToMap.ts
new file mode 100644
index 00000000..ad98f75c
--- /dev/null
+++ b/hwe/ts/util/convertIterableToMap.ts
@@ -0,0 +1,10 @@
+export function convertIterableToMap(
+ values: Iterable,
+ key: K
+): Map {
+ const result = new Map();
+ for (const obj of values) {
+ result.set(obj[key] as V, obj);
+ }
+ return result;
+}
diff --git a/hwe/ts/v_troop.ts b/hwe/ts/v_troop.ts
new file mode 100644
index 00000000..45e11217
--- /dev/null
+++ b/hwe/ts/v_troop.ts
@@ -0,0 +1,15 @@
+import "@scss/troop.scss";
+
+import { createApp } from 'vue'
+import PageTroop from '@/PageTroop.vue';
+import { BootstrapVue3, BToastPlugin } from 'bootstrap-vue-3'
+import { auto500px } from "./util/auto500px";
+import { htmlReady } from "./util/htmlReady";
+import { insertCustomCSS } from "./util/customCSS";
+
+auto500px();
+
+htmlReady(() => {
+ insertCustomCSS();
+});
+createApp(PageTroop).use(BootstrapVue3).use(BToastPlugin).mount('#app')
\ No newline at end of file
diff --git a/hwe/v_troop.php b/hwe/v_troop.php
new file mode 100644
index 00000000..6923ed9a
--- /dev/null
+++ b/hwe/v_troop.php
@@ -0,0 +1,40 @@
+setReadOnly();
+$userID = Session::getUserID();
+
+$db = DB::db();
+$gameStor = KVStorage::getStorage($db, 'game_env');
+
+?>
+
+
+
+
+
+
+
+ = UniqueConst::$serverName ?>: 부대 편성
+ = WebUtil::printStaticValues([
+ 'staticValues' => [
+ 'serverNick' => DB::prefix(),
+ 'mapName' => GameConst::$mapName,
+ 'unitSet' => GameConst::$unitSet,
+ ]
+ ], false) ?>
+ = WebUtil::printJS('../d_shared/common_path.js') ?>
+ = WebUtil::printCSS('../d_shared/common.css') ?>
+
+ = WebUtil::printDist('vue', 'v_troop', true) ?>
+
+
+
+
+
+
+
\ No newline at end of file