This commit is contained in:
2024-03-11 14:21:31 +00:00
parent c9c974d191
commit 2266cad0f8
13 changed files with 250 additions and 22 deletions
+13
View File
@@ -0,0 +1,13 @@
import type { DiplomacyState, NationID } from "@/defs.js";
export interface Diplomacy {
_id: string;
lowerNationID: NationID;
higherNationID: NationID;
state: DiplomacyState;
lowerNationDeadCrew?: number;
higherNationDeadCrew?: number;
}
@@ -0,0 +1,29 @@
import type { NationID } from "@/defs.js";
export interface IDiplomaticLetter {
_id: string;
srcNationID: NationID;
destNationID: NationID;
prevID?: string;
state: 'proposed' | 'accepted' | 'rejected' | 'canceled' | 'replaced';
srcSigner: {
generalID: string;
generalName: string;
icon: string;
};
destSigner: {
generalID: string;
generalName: string;
icon: string;
};
textBrief: string;
textDetail: string;
createdAt: Date;
updatedAt: Date;
}
@@ -1,6 +1,6 @@
import type { GeneralID } from "@/defs.js";
//게임 외부적인 General Rank ㅈ어
//게임 외부적인 General Rank
export interface IGeneralExternalRankEntity {
generalID: GeneralID;
+10
View File
@@ -0,0 +1,10 @@
import type { GeneralID } from "@/defs.js";
export interface IGeneralTurn {
generalID: GeneralID;
turn: {
action: string;
arg?: Record<string, unknown>;
brief: string;
}[];
}
View File
+14
View File
@@ -0,0 +1,14 @@
import type { StaffLevel } from "@/defs.js";
export interface INationTurn {
_id: string;
nationID: string;
officerLevel: StaffLevel,
turn: {
action: string;
arg?: Record<string, unknown>;
brief: string;
}[];
}
@@ -5,7 +5,7 @@ export interface IGeneralEntity {
ownerID?: UserID;
npcType: NpcType;
affinity?: number;
picture?: string;
icon?: string;
name: GeneralName;
ownerName?: UserName;
nationID: NationID;
@@ -0,0 +1,31 @@
import type { GeneralID, GeneralName, NationName, ScenarioID, ServerID, UserID, UserName } from "@/defs.js"
import type { IGeneralRankEntity } from "../GeneralRankEntity.js";
import type { IGeneralExternalRankEntity } from "../External/GeneralExternalRankEntity.js";
export interface IHallOfFame {
_id: string
serverID: ServerID;
serverIdx: number;
season: number;
scenarioID: ScenarioID;
scenarioName: string;
generalID: GeneralID;
generalName: GeneralName;
ownerID: UserID;
ownerName: UserName;
icon: string;
nationName: NationName;
nationColor: string;
startTime: Date;
endTime: Date;
ingame: IGeneralRankEntity;
external: IGeneralExternalRankEntity;
}
@@ -0,0 +1,32 @@
import type { CityID, CityLevel, CityState, NationID, NpcType, OfficerLevel, RegionID, ServerID } from "@/defs.js";
export interface IHistory {
_id: string;
serverID: ServerID;
year: number;
month: number;
mapBase: string;
nations: Map<NationID, {
name: string;
color: string;
cities: Set<CityID>;
generals: {
name: string;
npcType: NpcType;
}[];
}>;
cities: Map<CityID, {
nationID: NationID;
name: string;
hasSupply: boolean;
level: CityLevel;
state: CityState;
regionID: RegionID;
remainWarMonth: number;
}>
globalHistory: string[];
globalAction: string[];
}
@@ -0,0 +1,28 @@
import type { CityLevel, GeneralID, ServerID, UserID } from "@/defs.js";
import type { IGeneralEntity } from "../GeneralEntity.js";
import type { IGeneralRankEntity } from "../GeneralRankEntity.js";
export interface OldGeneral {
_id: string;
serverID: ServerID;
generalID: GeneralID;
ownerID?: UserID;
lastYearMonth: number;
general: IGeneralEntity;
rank: IGeneralRankEntity;
troopName?: string;
cityBasic: {
name: string;
level: CityLevel;
}
nationBasic: {
name: string;
color: string;
};
createdAt: Date;
}
@@ -0,0 +1,34 @@
import type { GeneralID, GeneralName, ItemID, ItemKeyType, NationID, NpcType, OfficerLevel, PersonalityType, ServerID, SpecialityDomesticType, SpecialityWarType, UserID } from "@/defs.js";
import type { INationEntity } from "../NationEntity.js";
export interface IOldNation {
_id: string;
serverID: ServerID;
nationID: NationID;
nation: INationEntity;
lastYearMonth: number;
members: Record<number, {
generalID: GeneralID;
generalName: GeneralName;
ownerID?: UserID;
ownerName?: string;
npcType?: NpcType;
icon?: string;
officerLevel: OfficerLevel;
officerCityID?: number;
}>
history: {
year: number;
month: number;
text: string[];
};
createdAt: Date;
}
+55 -18
View File
@@ -19,6 +19,7 @@ export type RegionID = number & { zz_t?: "RegionID" };
//서버 ID
export type ServerID = number & { zz_t?: "ServerID" };
export type ScenarioID = number & { zz_t?: "ScenarioID" };
//TODO: 무언가의 keyof 로 바꿔야함
export type NationType = string & { zz_t?: "NationType" };
@@ -43,18 +44,7 @@ export const enum NpcType {
npc_invader = 9,
}
export const enum OfficerLevel {
//재야
none = 0,
//일반
normal = 1,
//도시관직
cityLeadership = 2,
cityIntel = 3,
cityStrength = 4,
export const enum StaffLevel {
//지력관직
staffIntel3 = 5,
staffIntel2 = 7,
@@ -70,7 +60,45 @@ export const enum OfficerLevel {
//군주
lord = 12,
}
export const enum CityOfficerLevel {
cityLeadership = 2,
cityIntel = 3,
cityStrength = 4,
}
//XXX: const enum의 merge가 없어?
export const enum OfficerLevel {
//재야
none = 0,
//일반
normal = 1,
//도시관직
cityLeadership = CityOfficerLevel.cityLeadership,
cityIntel = CityOfficerLevel.cityIntel,
cityStrength = CityOfficerLevel.cityStrength,
//지력관직
staffIntel3 = StaffLevel.staffIntel3,
staffIntel2 = StaffLevel.staffIntel2,
staffIntel1 = StaffLevel.staffIntel1,
//무력관직
staffStrength3 = StaffLevel.staffStrength3,
staffStrength2 = StaffLevel.staffStrength2,
staffStrength1 = StaffLevel.staffStrength1,
//참모
staffChief = StaffLevel.staffChief,
//군주
lord = StaffLevel.lord,
}
export const enum DiplomaticPermission {
@@ -103,12 +131,6 @@ export const enum FrontStatus {
NearEmpty = 3,
}
export const enum CityOfficerLevel {
cityLeadership = 2,
cityIntel = 3,
cityStrength = 4,
}
//XXX: 기존처럼 값 하나만 유지할 것인가?
export const enum CityState {
//일반
@@ -135,6 +157,21 @@ export const enum CityState {
thief = 9,
}
//NOTE: PHP버전과 수치가 다름
export const enum DiplomacyState{
//중립
neutral = 0,
//선포중
declare = 1,
//전쟁중
war = 2,
//불가침
inviolable = 7,
}
/* 전용 stat이어서 확장하고자 하는경우 아래와 같이 확장 가능
```ts
declare module "@/defs.js" {
+2 -2
View File
@@ -38,7 +38,7 @@ export interface IUser {
allowGatewayAction?: ServerActionType[];
penalty?: Map<string, Date>;
picture?: string;
icon?: string;
useImgSvr?: boolean;
regDate: Date;
@@ -75,7 +75,7 @@ export const User = new Schema<IUser>({
},
penalty: { type: Map, required: false, of: Date },
picture: { type: String, required: false },
icon: { type: String, required: false },
useImgSvr: { type: Boolean, required: false },
regDate: { type: Date, required: true },