feat: add siegetank unit set and implement messaging system

- Created a new unit set for "siegetank" with various crew types and their attributes.
- Implemented a messaging system with types, payloads, and storage functionality.
- Added tests for the messaging system to ensure correct behavior for different message types (private, national, public, diplomacy).
This commit is contained in:
2025-12-30 08:19:10 +00:00
parent 519a0a76cb
commit c5cba31418
16 changed files with 8697 additions and 0 deletions
+2
View File
@@ -1,4 +1,5 @@
import type { GameSessionTokenPayload } from '@sammo-ts/common';
import type { Prisma } from '@prisma/client';
import type { TurnDaemonTransport } from './daemon/transport.js';
@@ -100,6 +101,7 @@ export interface NationRow {
}
export interface DatabaseClient {
$queryRaw<T = unknown>(query: Prisma.Sql): Promise<T>;
worldState: {
findFirst(args?: unknown): Promise<WorldStateRow | null>;
};
+118
View File
@@ -0,0 +1,118 @@
import type { MessagePayload, MessageRecordDraft, MessageType } from '@sammo-ts/logic';
import type { DatabaseClient } from '../context.js';
export interface MessageView {
id: number;
msgType: MessageType;
src: MessagePayload['src'];
dest: MessagePayload['dest'] | null;
text: string;
option?: MessagePayload['option'] | null;
time: string;
}
interface MessageRow {
id: number;
mailbox: number;
type: MessageType;
src: number;
dest: number;
time: Date;
valid_until: Date;
message: unknown;
}
const parsePayload = (value: unknown): MessagePayload => {
if (typeof value === 'string') {
return JSON.parse(value) as MessagePayload;
}
return value as MessagePayload;
};
const formatMessageTime = (value: Date): string => {
const pad = (input: number) => input.toString().padStart(2, '0');
return `${value.getFullYear()}-${pad(value.getMonth() + 1)}-${pad(
value.getDate()
)} ${pad(value.getHours())}:${pad(value.getMinutes())}:${pad(value.getSeconds())}`;
};
const toMessageView = (row: MessageRow): MessageView => {
const payload = parsePayload(row.message);
return {
id: row.id,
msgType: row.type,
src: payload.src,
dest: row.type === 'public' ? null : payload.dest,
text: payload.text,
option: payload.option ?? null,
time: formatMessageTime(new Date(row.time)),
};
};
export const insertMessage = async (
db: DatabaseClient,
draft: MessageRecordDraft
): Promise<number> => {
const rows = await db.$queryRaw<Array<{ id: number }>>`
INSERT INTO message (mailbox, type, src, dest, time, valid_until, message)
VALUES (
${draft.mailbox},
${draft.msgType},
${draft.srcId},
${draft.destId},
${draft.time},
${draft.validUntil},
CAST(${JSON.stringify(draft.payload)} AS jsonb)
)
RETURNING id
`;
const id = rows[0]?.id;
if (!id) {
throw new Error('Failed to insert message row.');
}
return id;
};
export const fetchMessagesFromMailbox = async (params: {
db: DatabaseClient;
mailbox: number;
msgType: MessageType;
limit: number;
fromSeq: number;
}): Promise<MessageView[]> => {
const fromSeq = Math.max(params.fromSeq, 0);
const rows = await params.db.$queryRaw<MessageRow[]>`
SELECT id, mailbox, type, src, dest, time, valid_until, message
FROM message
WHERE mailbox = ${params.mailbox}
AND type = ${params.msgType}
AND valid_until > NOW()
AND id >= ${fromSeq}
ORDER BY id DESC
LIMIT ${params.limit}
`;
return rows.map(toMessageView);
};
export const fetchOldMessagesFromMailbox = async (params: {
db: DatabaseClient;
mailbox: number;
msgType: MessageType;
toSeq: number;
limit: number;
}): Promise<MessageView[]> => {
const rows = await params.db.$queryRaw<MessageRow[]>`
SELECT id, mailbox, type, src, dest, time, valid_until, message
FROM message
WHERE mailbox = ${params.mailbox}
AND type = ${params.msgType}
AND valid_until > NOW()
AND id < ${params.toSeq}
ORDER BY id DESC
LIMIT ${params.limit}
`;
return rows.map(toMessageView);
};
+50
View File
@@ -0,0 +1,50 @@
import type { MessageTarget } from '@sammo-ts/logic';
import type { DatabaseClient, GeneralRow } from '../context.js';
const DEFAULT_NATION = {
name: '재야',
color: '#000000',
};
export const resolveNationInfo = async (
db: DatabaseClient,
nationId: number
): Promise<{ name: string; color: string }> => {
if (nationId <= 0) {
return DEFAULT_NATION;
}
const nation = await db.nation.findUnique({ where: { id: nationId } });
if (!nation) {
return DEFAULT_NATION;
}
return { name: nation.name, color: nation.color };
};
export const buildTargetFromGeneral = async (
db: DatabaseClient,
general: GeneralRow
): Promise<MessageTarget> => {
const nation = await resolveNationInfo(db, general.nationId);
return {
generalId: general.id,
generalName: general.name,
nationId: general.nationId,
nationName: nation.name,
color: nation.color,
icon: '',
};
};
export const buildNationTarget = (
nationId: number,
nationName: string,
color: string
): MessageTarget => ({
generalId: 0,
generalName: '',
nationId,
nationName,
color,
icon: '',
});
+276
View File
@@ -12,8 +12,24 @@ import {
shiftGeneralTurns,
shiftNationTurns,
} from './turns/reservedTurns.js';
import {
MESSAGE_MAILBOX_NATIONAL_BASE,
MESSAGE_MAILBOX_PUBLIC,
sendMessage,
type MessageDraft,
type MessageRecordDraft,
type MessageType,
} from '@sammo-ts/logic';
import { buildNationTarget, buildTargetFromGeneral, resolveNationInfo } from './messages/targets.js';
import {
fetchMessagesFromMailbox,
fetchOldMessagesFromMailbox,
insertMessage,
type MessageView,
} from './messages/store.js';
const zRunReason = z.enum(['schedule', 'manual', 'poke']);
const zMessageType = z.enum(['private', 'public', 'national', 'diplomacy']);
const zTurnRunBudget = z.object({
budgetMs: z.number().int().positive(),
@@ -244,6 +260,266 @@ export const appRouter = router({
}),
}),
}),
messages: router({
getRecent: authedProcedure
.input(
z.object({
generalId: z.number().int().positive(),
sequence: z.number().int().optional(),
})
)
.query(async ({ ctx, input }) => {
const general = await ctx.db.general.findUnique({
where: { id: input.generalId },
});
if (!general) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'General not found.',
});
}
const sequence = input.sequence ?? -1;
const nationId = general.nationId;
const mailboxes = {
private: general.id,
public: MESSAGE_MAILBOX_PUBLIC,
national: MESSAGE_MAILBOX_NATIONAL_BASE + nationId,
diplomacy: MESSAGE_MAILBOX_NATIONAL_BASE + nationId,
} satisfies Record<MessageType, number>;
const [privateMessages, publicMessages, nationalMessages, diplomacyMessages] =
await Promise.all([
fetchMessagesFromMailbox({
db: ctx.db,
mailbox: mailboxes.private,
msgType: 'private',
limit: 15,
fromSeq: sequence,
}),
fetchMessagesFromMailbox({
db: ctx.db,
mailbox: mailboxes.public,
msgType: 'public',
limit: 15,
fromSeq: sequence,
}),
fetchMessagesFromMailbox({
db: ctx.db,
mailbox: mailboxes.national,
msgType: 'national',
limit: 15,
fromSeq: sequence,
}),
fetchMessagesFromMailbox({
db: ctx.db,
mailbox: mailboxes.diplomacy,
msgType: 'diplomacy',
limit: 15,
fromSeq: sequence,
}),
]);
const messageBuckets: Record<MessageType, MessageView[]> = {
private: privateMessages,
public: publicMessages,
national: nationalMessages,
diplomacy: diplomacyMessages,
};
let nextSequence = sequence;
let minSequence = sequence;
let lastType: MessageType | null = null;
const updateSequence = (type: MessageType, messages: Array<{ id: number }>) => {
for (const message of messages) {
if (message.id > nextSequence) {
nextSequence = message.id;
}
if (message.id <= minSequence) {
minSequence = message.id;
lastType = type;
}
}
};
updateSequence('private', privateMessages);
updateSequence('public', publicMessages);
updateSequence('national', nationalMessages);
updateSequence('diplomacy', diplomacyMessages);
if (lastType === 'private' && messageBuckets.private.length > 0) {
messageBuckets.private.pop();
} else if (
lastType === 'public' &&
messageBuckets.public.length > 0
) {
messageBuckets.public.pop();
} else if (
lastType === 'national' &&
messageBuckets.national.length > 0
) {
messageBuckets.national.pop();
} else if (
lastType === 'diplomacy' &&
messageBuckets.diplomacy.length > 0
) {
messageBuckets.diplomacy.pop();
}
return {
result: true,
...messageBuckets,
sequence: nextSequence,
nationId: nationId,
generalName: general.name,
latestRead: {
diplomacy: 0,
private: 0,
},
};
}),
getOld: authedProcedure
.input(
z.object({
generalId: z.number().int().positive(),
to: z.number().int().positive(),
type: zMessageType,
})
)
.query(async ({ ctx, input }) => {
const general = await ctx.db.general.findUnique({
where: { id: input.generalId },
});
if (!general) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'General not found.',
});
}
const nationId = general.nationId;
const mailboxes = {
private: general.id,
public: MESSAGE_MAILBOX_PUBLIC,
national: MESSAGE_MAILBOX_NATIONAL_BASE + nationId,
diplomacy: MESSAGE_MAILBOX_NATIONAL_BASE + nationId,
} satisfies Record<MessageType, number>;
const messageBuckets: Record<MessageType, MessageView[]> = {
private: [],
public: [],
national: [],
diplomacy: [],
};
const messages = await fetchOldMessagesFromMailbox({
db: ctx.db,
mailbox: mailboxes[input.type],
msgType: input.type,
toSeq: input.to,
limit: 15,
});
messageBuckets[input.type] = messages;
return {
result: true,
keepRecent: true,
sequence: 0,
nationId,
generalName: general.name,
...messageBuckets,
};
}),
send: authedProcedure
.input(
z.object({
generalId: z.number().int().positive(),
mailbox: z.number().int(),
text: z.string().min(1),
})
)
.mutation(async ({ ctx, input }) => {
const general = await ctx.db.general.findUnique({
where: { id: input.generalId },
});
if (!general) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'General not found.',
});
}
const src = await buildTargetFromGeneral(ctx.db, general);
const now = new Date();
const validUntil = new Date('9999-12-31T00:00:00Z');
let msgType: MessageType;
let dest = src;
if (input.mailbox === MESSAGE_MAILBOX_PUBLIC) {
msgType = 'public';
} else if (input.mailbox >= MESSAGE_MAILBOX_NATIONAL_BASE) {
const destNationId =
input.mailbox - MESSAGE_MAILBOX_NATIONAL_BASE;
if (destNationId <= 0) {
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'Invalid nation mailbox.',
});
}
const nationInfo = await resolveNationInfo(
ctx.db,
destNationId
);
dest = buildNationTarget(
destNationId,
nationInfo.name,
nationInfo.color
);
msgType =
destNationId === general.nationId
? 'national'
: 'diplomacy';
} else if (input.mailbox > 0) {
const destGeneral = await ctx.db.general.findUnique({
where: { id: input.mailbox },
});
if (!destGeneral) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'Destination general not found.',
});
}
dest = await buildTargetFromGeneral(ctx.db, destGeneral);
msgType = 'private';
} else {
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'Invalid mailbox.',
});
}
const draft: MessageDraft = {
msgType,
src,
dest,
text: input.text,
time: now,
validUntil,
option: {},
};
const result = await sendMessage(
{
insertMessage: (draft: MessageRecordDraft) =>
insertMessage(ctx.db, draft),
},
draft
);
return { msgType, msgId: result.receiverId };
}),
}),
turnDaemon: router({
run: procedure
.input(
@@ -0,0 +1,80 @@
{
"che": {
"1": "하북",
"2": "중원",
"3": "서북",
"4": "서촉",
"5": "남중",
"6": "초",
"7": "오월",
"8": "동이"
},
"chess": {
"1": "킹",
"2": "퀸",
"3": "룩",
"4": "나이트",
"5": "비숍",
"6": "폰",
"7": "빈칸"
},
"cr": {
"1": "하북",
"2": "중원",
"3": "서북",
"4": "서촉",
"5": "남중",
"6": "초",
"7": "오월",
"8": "동이"
},
"ludo_rathowm": {
"1": "호넷 마인령",
"2": "케이브리스 마인령",
"3": "카라의 숲",
"4": "샹그릴라",
"5": "제스 북부",
"6": "제스 남부",
"7": "헬만 서부",
"8": "헬만 동부",
"9": "리자스 남부",
"10": "리자스 북부",
"11": "JAPAN",
"12": "자유도시 동부",
"13": "자유도시 서부",
"14": "AL교"
},
"miniche": {
"1": "하북",
"2": "중원",
"3": "서북",
"4": "서촉",
"5": "남중",
"6": "초",
"7": "오월",
"8": "동이"
},
"miniche_b": {
"1": "하북",
"2": "중원",
"3": "서북",
"4": "서촉",
"5": "남중",
"6": "초",
"7": "오월",
"8": "동이"
},
"miniche_clean": {
"1": "하북",
"2": "중원",
"3": "서북",
"4": "서촉",
"5": "남중",
"6": "초",
"7": "오월",
"8": "동이"
},
"pokemon_v1": {
"1": "관동 지방"
}
}
@@ -0,0 +1,263 @@
{
"id": "basic",
"name": "basic",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"표준적인 궁병입니다.",
"궁병은 회피특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 8,
"rice": 8,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 1.8
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"높은 구조물 위에서 공격합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 2.4
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
}
]
}
@@ -0,0 +1,1358 @@
{
"id": "che",
"name": "che",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1101,
"armType": 1,
"name": "청주병",
"attack": 100,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"중원"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1102,
"armType": 1,
"name": "수병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 11,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"오월"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1103,
"armType": 1,
"name": "자객병",
"attack": 100,
"defence": 150,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"저"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"은밀하고 날쌥니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1104,
"armType": 1,
"name": "근위병",
"attack": 150,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"최강의 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1105,
"armType": 1,
"name": "등갑병",
"attack": 100,
"defence": 225,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"남중"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"등갑을 두른 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1106,
"armType": 1,
"name": "백이병",
"attack": 175,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"2": 1.1,
"3": 0.9,
"5": 1.1
},
"defenceCoef": {
"2": 0.9,
"3": 1.1,
"5": 0.9
},
"info": [
"정예 보병입니다. 불리한 싸움도 버텨냅니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"표준적인 궁병입니다.",
"궁병은 선제사격을 하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1201,
"armType": 2,
"name": "궁기병",
"attack": 100,
"defence": 100,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"동이"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.9,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.1,
"5": 0.8
},
"info": [
"말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1202,
"armType": 2,
"name": "연노병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서촉"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"화살을 연사합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1203,
"armType": 2,
"name": "강궁병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"양양"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강건한 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1204,
"armType": 2,
"name": "석궁병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"건업"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강력한 화살을 쏩니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1301,
"armType": 3,
"name": "백마병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 12,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"하북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"백마의 위용을 보여줍니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1302,
"armType": 3,
"name": "중장기병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"갑주를 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1303,
"armType": 3,
"name": "돌격기병",
"attack": 200,
"defence": 100,
"speed": 8,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"흉노"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"저돌적으로 공격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1304,
"armType": 3,
"name": "철기병",
"attack": 100,
"defence": 250,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"강"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"철갑을 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1305,
"armType": 3,
"name": "수렵기병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 15,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"산월"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"날쎄고 빠른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1306,
"armType": 3,
"name": "맹수병",
"attack": 250,
"defence": 175,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"남만"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"어느 누구보다 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1307,
"armType": 3,
"name": "호표기병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"허창"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"정예 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1401,
"armType": 4,
"name": "신귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 20,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"초"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신출귀몰한 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1402,
"armType": 4,
"name": "백귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 9,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"오환"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1403,
"armType": 4,
"name": "흑귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 11,
"rice": 9,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"왜"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1404,
"armType": 4,
"name": "악귀병",
"attack": 130,
"defence": 130,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"장안"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"백병전에도 능숙합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 8,
"rice": 8,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1406,
"armType": 4,
"name": "황귀병",
"attack": 110,
"defence": 110,
"speed": 7,
"avoid": 0,
"magicCoef": 0.8,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"고도로 훈련된 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1407,
"armType": 4,
"name": "천귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"갑주를 두른 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1408,
"armType": 4,
"name": "마귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"날카로운 무기를 가진 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 14,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067
},
"info": [
"높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 18,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 2.4
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1502,
"armType": 5,
"name": "벽력거",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 5,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067
},
"info": [
"상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1503,
"armType": 5,
"name": "목우",
"attack": 50,
"defence": 200,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"0": 1.8
},
"defenceCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"1106": 1
},
"info": [
"상대를 저지하는 특수병기입니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_저지시도",
"che_저지발동"
],
"iActionList": null
}
]
}
@@ -0,0 +1,1315 @@
{
"id": "che_except_siege",
"name": "che_except_siege",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1101,
"armType": 1,
"name": "청주병",
"attack": 100,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"중원"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1102,
"armType": 1,
"name": "수병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 11,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"오월"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1103,
"armType": 1,
"name": "자객병",
"attack": 100,
"defence": 150,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"저"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"은밀하고 날쌥니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1104,
"armType": 1,
"name": "근위병",
"attack": 150,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"최강의 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1105,
"armType": 1,
"name": "등갑병",
"attack": 100,
"defence": 225,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"남중"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"등갑을 두른 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1106,
"armType": 1,
"name": "백이병",
"attack": 175,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"2": 1.1,
"3": 0.9,
"5": 1.1
},
"defenceCoef": {
"2": 0.9,
"3": 1.1,
"5": 0.9
},
"info": [
"정예 보병입니다. 불리한 싸움도 버텨냅니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"표준적인 궁병입니다.",
"궁병은 선제사격을 하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1201,
"armType": 2,
"name": "궁기병",
"attack": 100,
"defence": 100,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"동이"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.9,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.1,
"5": 0.8
},
"info": [
"말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1202,
"armType": 2,
"name": "연노병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서촉"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"화살을 연사합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1203,
"armType": 2,
"name": "강궁병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"양양"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강건한 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1204,
"armType": 2,
"name": "석궁병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"건업"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강력한 화살을 쏩니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1301,
"armType": 3,
"name": "백마병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 12,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"하북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"백마의 위용을 보여줍니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1302,
"armType": 3,
"name": "중장기병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"갑주를 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1303,
"armType": 3,
"name": "돌격기병",
"attack": 200,
"defence": 100,
"speed": 8,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"흉노"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"저돌적으로 공격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1304,
"armType": 3,
"name": "철기병",
"attack": 100,
"defence": 200,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"강"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"철갑을 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1305,
"armType": 3,
"name": "수렵기병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 15,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"산월"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"날쎄고 빠른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1306,
"armType": 3,
"name": "맹수병",
"attack": 250,
"defence": 175,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"남만"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"어느 누구보다 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1307,
"armType": 3,
"name": "호표기병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"허창"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"정예 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1401,
"armType": 4,
"name": "신귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 20,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"초"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신출귀몰한 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1402,
"armType": 4,
"name": "백귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 9,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"오환"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1403,
"armType": 4,
"name": "흑귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 11,
"rice": 9,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"왜"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1404,
"armType": 4,
"name": "악귀병",
"attack": 130,
"defence": 130,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"장안"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"백병전에도 능숙합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 8,
"rice": 8,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1406,
"armType": 4,
"name": "황귀병",
"attack": 110,
"defence": 110,
"speed": 7,
"avoid": 0,
"magicCoef": 0.8,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"고도로 훈련된 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1407,
"armType": 4,
"name": "천귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"갑주를 두른 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1408,
"armType": 4,
"name": "마귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"날카로운 무기를 가진 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 14,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.2,
"1106": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067
},
"info": [
"높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1502,
"armType": 5,
"name": "벽력거",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 5,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.2,
"1106": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067
},
"info": [
"상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1503,
"armType": 5,
"name": "목우",
"attack": 50,
"defence": 200,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"0": 1.2
},
"defenceCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"1106": 1
},
"info": [
"상대를 저지하는 특수병기입니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_저지시도",
"che_저지발동"
],
"iActionList": null
}
]
}
@@ -0,0 +1,836 @@
{
"id": "cr",
"name": "cr",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"표준적인 궁병입니다.",
"궁병은 선제사격을 하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1104,
"armType": 1,
"name": "근위병",
"attack": 150,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"최강의 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1106,
"armType": 1,
"name": "백이병",
"attack": 175,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"2": 1.1,
"3": 0.9,
"5": 1.1
},
"defenceCoef": {
"2": 0.9,
"3": 1.1,
"5": 0.9
},
"info": [
"정예 보병입니다. 불리한 싸움도 버텨냅니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 97201,
"armType": 2,
"name": "화랑",
"attack": 175,
"defence": 150,
"speed": 8,
"avoid": 15,
"magicCoef": 0.05,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"한",
"서라벌"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.9,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.1,
"5": 0.8
},
"info": [
"특수한 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1204,
"armType": 2,
"name": "석궁병",
"attack": 200,
"defence": 125,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"건업"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강력한 화살을 쏩니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1303,
"armType": 3,
"name": "돌격기병",
"attack": 200,
"defence": 125,
"speed": 8,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"서량",
"안정"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"저돌적으로 공격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1307,
"armType": 3,
"name": "호표기병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"허창"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"정예 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1306,
"armType": 3,
"name": "맹수병",
"attack": 250,
"defence": 175,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"운남"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"어느 누구보다 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 8,
"rice": 8,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1404,
"armType": 4,
"name": "악귀병",
"attack": 130,
"defence": 130,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"장안"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"백병전에도 능숙합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1407,
"armType": 4,
"name": "천귀병",
"attack": 90,
"defence": 130,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"갑주를 두른 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 14,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"높은 구조물 위에서 공격합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 2.4
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1502,
"armType": 5,
"name": "벽력거",
"attack": 135,
"defence": 100,
"speed": 6,
"avoid": 5,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112
},
"defenceCoef": {
"1": 0.833,
"2": 0.833,
"3": 0.833,
"4": 0.833,
"1106": 0.909
},
"info": [
"상대에게 돌덩이를 날립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 97101,
"armType": 1,
"name": "중장보병",
"attack": 150,
"defence": 175,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"전천후 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1202,
"armType": 2,
"name": "연노병",
"attack": 150,
"defence": 175,
"speed": 8,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"화살을 연사합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1304,
"armType": 3,
"name": "철기병",
"attack": 175,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"철갑을 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1401,
"armType": 4,
"name": "신귀병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 20,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신출귀몰한 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
}
]
}
@@ -0,0 +1,1974 @@
{
"id": "event_more_crewtype",
"name": "event_more_crewtype",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1101,
"armType": 1,
"name": "청주병",
"attack": 100,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"중원"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1102,
"armType": 1,
"name": "수병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 11,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"오월"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1103,
"armType": 1,
"name": "자객병",
"attack": 100,
"defence": 150,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"저"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"은밀하고 날쌥니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1104,
"armType": 1,
"name": "근위병",
"attack": 150,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"최강의 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1105,
"armType": 1,
"name": "등갑병",
"attack": 100,
"defence": 225,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"남중"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"등갑을 두른 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1106,
"armType": 1,
"name": "백이병",
"attack": 175,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"2": 1.1,
"3": 0.9,
"5": 1.1
},
"defenceCoef": {
"2": 0.9,
"3": 1.1,
"5": 0.9
},
"info": [
"정예 보병입니다. 불리한 싸움도 버텨냅니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 91100,
"armType": 1,
"name": "대검병",
"attack": 150,
"defence": 225,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"완"
]
},
{
"type": "ReqNationAux",
"key": "can_대검병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"대형 검을 사용합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 91101,
"armType": 1,
"name": "강습병",
"attack": 175,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"북평"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"철퇴를 사용합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 91102,
"armType": 1,
"name": "극병",
"attack": 250,
"defence": 150,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 18,
"rice": 18,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"저"
]
},
{
"type": "ReqNationAux",
"key": "can_극병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8
},
"info": [
"긴 극을 사용합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"표준적인 궁병입니다.",
"궁병은 선제사격을 하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1201,
"armType": 2,
"name": "궁기병",
"attack": 100,
"defence": 100,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"동이"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.9,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.1,
"5": 0.8
},
"info": [
"말을 타고 잘 피합니다. 특히 다른 궁병보다 보병에게 조금 더 강합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1202,
"armType": 2,
"name": "연노병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서촉"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"화살을 연사합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1203,
"armType": 2,
"name": "강궁병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"양양"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강건한 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1204,
"armType": 2,
"name": "석궁병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"건업"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"강력한 화살을 쏩니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 91200,
"armType": 2,
"name": "화랑",
"attack": 150,
"defence": 150,
"speed": 8,
"avoid": 25,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"위례"
]
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"궁술 실력이 뛰어납니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 91201,
"armType": 2,
"name": "화시병",
"attack": 225,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"장사"
]
},
{
"type": "ReqNationAux",
"key": "can_화시병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"불이 붙은 화살을 날립니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 91202,
"armType": 2,
"name": "원융노병",
"attack": 250,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 20,
"rice": 19,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"흉노"
]
},
{
"type": "ReqNationAux",
"key": "can_원융노병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"3": 1.2,
"1": 0.8,
"5": 1.2
},
"defenceCoef": {
"3": 0.8,
"1": 1.2,
"5": 0.8
},
"info": [
"먼 거리에서 적을 제압합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1301,
"armType": 3,
"name": "백마병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 12,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"하북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"백마의 위용을 보여줍니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1302,
"armType": 3,
"name": "중장기병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"서북"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"갑주를 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1303,
"armType": 3,
"name": "돌격기병",
"attack": 200,
"defence": 100,
"speed": 8,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"흉노"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"저돌적으로 공격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1304,
"armType": 3,
"name": "철기병",
"attack": 100,
"defence": 250,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"강"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"철갑을 두른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1305,
"armType": 3,
"name": "수렵기병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 15,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"산월"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"날쎄고 빠른 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1306,
"armType": 3,
"name": "맹수병",
"attack": 250,
"defence": 175,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"남만"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"어느 누구보다 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1307,
"armType": 3,
"name": "호표기병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"허창"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"정예 기병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 91300,
"armType": 3,
"name": "양마기병",
"attack": 200,
"defence": 175,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 15,
"rice": 15,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"한중"
]
}
],
"attackCoef": {
"1": 1.1,
"2": 0.9,
"5": 1.1
},
"defenceCoef": {
"1": 0.9,
"2": 1.1,
"5": 0.9
},
"info": [
"험준한 지형에서 뛰어납니다.",
"불리한 싸움도 버텨냅니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 91301,
"armType": 3,
"name": "산저병",
"attack": 225,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 15,
"rice": 15,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"수춘"
]
},
{
"type": "ReqNationAux",
"key": "can_산저병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"무식할 정도로 전장을 누빕니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 91302,
"armType": 3,
"name": "상병",
"attack": 225,
"defence": 250,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 24,
"rice": 24,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"남만"
]
},
{
"type": "ReqNationAux",
"key": "can_상병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8
},
"info": [
"거대한 코끼리와 함께합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1401,
"armType": 4,
"name": "신귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 20,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"초"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신출귀몰한 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1402,
"armType": 4,
"name": "백귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 9,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"오환"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 튼튼합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1403,
"armType": 4,
"name": "흑귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 11,
"rice": 9,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"왜"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"저렴하고 강력합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1404,
"armType": 4,
"name": "악귀병",
"attack": 130,
"defence": 130,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"장안"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"백병전에도 능숙합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 8,
"rice": 8,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1406,
"armType": 4,
"name": "황귀병",
"attack": 110,
"defence": 110,
"speed": 7,
"avoid": 0,
"magicCoef": 0.8,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"낙양"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"고도로 훈련된 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1407,
"armType": 4,
"name": "천귀병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"갑주를 두른 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1408,
"armType": 4,
"name": "마귀병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"날카로운 무기를 가진 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 91400,
"armType": 4,
"name": "음귀병",
"attack": 110,
"defence": 110,
"speed": 7,
"avoid": 15,
"magicCoef": 0.7,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"강릉"
]
},
{
"type": "ReqNationAux",
"key": "can_음귀병사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"악기를 연주하여 적을 혼란시킵니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 91401,
"armType": 4,
"name": "향귀병",
"attack": 100,
"defence": 120,
"speed": 8,
"avoid": 5,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 4000
},
{
"type": "ReqHighLevelCities",
"level": 8,
"count": 4
},
{
"type": "ReqNotChief"
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"독특한 향을 피웁니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 91402,
"armType": 4,
"name": "무희",
"attack": 180,
"defence": 80,
"speed": 7,
"avoid": 10,
"magicCoef": 0.6,
"cost": 18,
"rice": 17,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCitiesWithCityLevel",
"level": 8,
"cities": [
"왜"
]
},
{
"type": "ReqNationAux",
"key": "can_무희사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"검무를 추는 귀병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 14,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112,
"91300": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067,
"91300": 1.112
},
"info": [
"높은 구조물 위에서 공격합니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 18,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 2.4,
"1106": 1.112,
"91300": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067,
"91300": 1.067
},
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1502,
"armType": 5,
"name": "벽력거",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 5,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.8,
"1106": 1.112,
"91300": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067,
"91300": 1.112
},
"info": [
"상대에게 돌덩이를 날립니다. 첫 공격은 성벽을 향합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_선제사격시도",
"che_선제사격발동"
],
"iActionList": [
"che_성벽선제"
]
},
{
"id": 1503,
"armType": 5,
"name": "목우",
"attack": 50,
"defence": 200,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1,
"0": 1.8
},
"defenceCoef": {
"1": 1,
"2": 1,
"3": 1,
"4": 1
},
"info": [
"상대를 저지하는 특수병기입니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": [
"che_저지시도",
"che_저지발동"
],
"iActionList": null
},
{
"id": 91500,
"armType": 5,
"name": "화륜차",
"attack": 300,
"defence": 0,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 40,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqNationAux",
"key": "did_특성초토화",
"op": ">=",
"value": 1
},
{
"type": "ReqChief"
},
{
"type": "ReqNationAux",
"key": "can_화륜차사용",
"op": "==",
"value": 1
}
],
"attackCoef": {
"1": 1.25,
"2": 1.25,
"3": 1.25,
"4": 1.25,
"0": 1.25,
"1106": 1.112,
"91300": 1.112
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2,
"1106": 1.067,
"91300": 1.067
},
"info": [
"불타는 바퀴로 적진을 붕괴시킵니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
}
]
}
@@ -0,0 +1,1843 @@
{
"id": "ludo_rathowm",
"name": "ludo_rathowm",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"표준적인 보병입니다. 보병은 방어특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217101,
"armType": 1,
"name": "마물병",
"attack": 110,
"defence": 160,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 9,
"rice": 10,
"requirements": [
{
"type": "ReqRegions",
"regions": [
"호넷 마인령",
"케이브리스 마인령"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"마군 지역 기본병종입니다. 조금더 강하지만 쌀을 많이 소비합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217102,
"armType": 1,
"name": "중장보병",
"attack": 100,
"defence": 250,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"헬만 동부"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"헬만 특유의 견고한 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217103,
"armType": 1,
"name": "흑의 군 보병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"리자스 남부",
"리자스 북부"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"흑의 군 전통의 체계적인 훈련으로 공격력을 보완했습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217104,
"armType": 1,
"name": "용병",
"attack": 125,
"defence": 175,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"자유도시 동부"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"일반 보병보다 비싸지만 받은 만큼은 일해줍니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217105,
"armType": 1,
"name": "사메라이",
"attack": 175,
"defence": 150,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 11,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"제스 남부"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"검으로 난무를 가하는 몬스터 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217106,
"armType": 1,
"name": "템플나이트병",
"attack": 75,
"defence": 275,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"AL교"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"공격을 포기하고 오직 방어에만 집중합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217107,
"armType": 1,
"name": "메이드병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"메이드의 묘지"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"켓셀링크 휘하의 날렵한 전투메이드입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217108,
"armType": 1,
"name": "요괴병",
"attack": 150,
"defence": 150,
"speed": 8,
"avoid": 0,
"magicCoef": 0,
"cost": 11,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"오슈"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"단단한 육체를 믿고 적진을 돌파합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217109,
"armType": 1,
"name": "리자스 친위병",
"attack": 150,
"defence": 200,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"리자스성"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"여왕을 수호하는 리자스 최강의 보병 정예보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217110,
"armType": 1,
"name": "케이브리스 마물병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"케이브리스의 성"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"케이브리스 직속의 마물 정예 전투보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217111,
"armType": 1,
"name": "투신",
"attack": 200,
"defence": 300,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 28,
"rice": 23,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCities",
"cities": [
"투신도시"
]
}
],
"attackCoef": {
"2": 1.2,
"3": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"2": 0.8,
"3": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"성마교단 유적에서 발굴된 사상 최강의 보병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_방어력증가5p"
],
"iActionList": null
},
{
"id": 217200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 10,
"rice": 10,
"requirements": [],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"표준적인 궁병입니다. 궁병은 회피특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217201,
"armType": 2,
"name": "투척마물병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"호넷 마인령"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"날렵함을 포기하고 도끼를 투척합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217202,
"armType": 2,
"name": "백의 군 궁병",
"attack": 100,
"defence": 100,
"speed": 8,
"avoid": 30,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"리자스 남부"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"전략을 활용하여 치고 빠지기에 능합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217203,
"armType": 2,
"name": "벌레술사병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"호박성"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"벌레들을 부려 몸을 보호하는 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217204,
"armType": 2,
"name": "저격암살병",
"attack": 225,
"defence": 75,
"speed": 5,
"avoid": 10,
"magicCoef": 0,
"cost": 14,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"블라디보스토크"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"독을 바른 탄환으로 적의 목숨을 앗아갑니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217205,
"armType": 2,
"name": "호루스병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 20,
"magicCoef": 0,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"거대전함"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"민첩하게 파고드는 호루스족 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217206,
"armType": 2,
"name": "튤립병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"커스텀"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"최첨단병기 튤립으로 적을 폭격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217207,
"armType": 2,
"name": "아이스플레임 궁병",
"attack": 150,
"defence": 150,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 13,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"라그나로크 아크"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"혁명을 성공으로 이끈 정예 게릴라 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217208,
"armType": 2,
"name": "카라 궁병",
"attack": 225,
"defence": 225,
"speed": 7,
"avoid": 30,
"magicCoef": 0,
"cost": 25,
"rice": 25,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCities",
"cities": [
"펜실 카우"
]
}
],
"attackCoef": {
"1": 0.8,
"3": 1.2,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 1.2,
"3": 0.8,
"5": 0.8,
"217502": 1
},
"info": [
"선조의 힘을 이어받은 최강의 카라 정예 궁병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217300,
"armType": 3,
"name": "기동병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 11,
"rice": 11,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"표준적인 기동병입니다. 기동병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217301,
"armType": 3,
"name": "하치온나",
"attack": 175,
"defence": 100,
"speed": 7,
"avoid": 15,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"자유도시 서부"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"작은 몸으로 회피하며 따끔한 일격을 먹이는 몬스터 기동병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217302,
"armType": 3,
"name": "적의 군 기동병",
"attack": 200,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 12,
"rice": 13,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"리자스 북부"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"리자스군의 자랑인 기동부대입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217303,
"armType": 3,
"name": "안드로이드 기동병",
"attack": 175,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 13,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"악의 탑"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"파이아르가 개발한 최첨단 안드로이드 기동병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217304,
"armType": 3,
"name": "파란쵸 기동병",
"attack": 200,
"defence": 100,
"speed": 8,
"avoid": 5,
"magicCoef": 0,
"cost": 13,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"파란쵸 왕국"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"적진을 일점돌파하는 파란쵸왕국의 돌격 기동병입니다. "
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217305,
"armType": 3,
"name": "비행마물병",
"attack": 150,
"defence": 100,
"speed": 8,
"avoid": 15,
"magicCoef": 0,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"죽음의 대지"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"비행마물에 올라탄 기동마물병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217306,
"armType": 3,
"name": "마물조련사병",
"attack": 250,
"defence": 200,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"랑그바우"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"무시무시한 몬스터에 올라타서 싸우는 극강의 기동병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217307,
"armType": 3,
"name": "기마병",
"attack": 200,
"defence": 150,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 14,
"rice": 14,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"오와리"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"JAPAN 특유의 기마에 올라타 적을 짓밟는 기동병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217308,
"armType": 3,
"name": "엔젤나이트",
"attack": 300,
"defence": 200,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 25,
"rice": 25,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCities",
"cities": [
"떨어진 궁도"
]
}
],
"attackCoef": {
"1": 1.2,
"2": 0.8,
"5": 1.2,
"217502": 1
},
"defenceCoef": {
"1": 0.8,
"2": 1.2,
"5": 0.8,
"217502": 1
},
"info": [
"신의 명령으로 파멸을 내리기 위해 강림했습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": [
"che_기병병종전투"
],
"iActionList": null
},
{
"id": 217400,
"armType": 4,
"name": "마법병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 9,
"rice": 9,
"requirements": [],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"마법을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217401,
"armType": 4,
"name": "마물 마법병",
"attack": 90,
"defence": 90,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 11,
"rice": 9,
"requirements": [
{
"type": "ReqRegions",
"regions": [
"호넷 마인령",
"케이브리스 마인령"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"마군 지역 기본병종입니다. 조금더 강하지만 금을 많이 소비합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217402,
"armType": 4,
"name": "카라 마법병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 20,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"카라의 숲"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신속히 움직이며 카라의 저주로 적을 공격합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217403,
"armType": 4,
"name": "제스 마법병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"제스 북부"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"마법국가 제스의 전통있는 마법병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217404,
"armType": 4,
"name": "무녀",
"attack": 80,
"defence": 80,
"speed": 8,
"avoid": 10,
"magicCoef": 0.6,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"JAPAN"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"신마법과 함께 신통한 춤으로 활력을 불어넣는 마법병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217405,
"armType": 4,
"name": "프로즌",
"attack": 90,
"defence": 70,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 10,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"헬만 서부"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"백병전에 불리한 연약한 몸으로 마법 사용에 집중하는 몬스터입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217406,
"armType": 4,
"name": "마소한 마법병",
"attack": 70,
"defence": 90,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 11,
"rice": 10,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqRegions",
"regions": [
"케이브리스 마인령"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"로브를 여러겹 둘러입은 마물마법병입니다. 직접 전투보단 마법에 집중합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217407,
"armType": 4,
"name": "신관병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 5,
"magicCoef": 0.6,
"cost": 9,
"rice": 11,
"requirements": [
{
"type": "ReqTech",
"tech": 2000
},
{
"type": "ReqCities",
"cities": [
"카이즈"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"AL교의 전투신관입니다. 몸을 보호하는 성스러운 마법을 사용합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217408,
"armType": 4,
"name": "중장마법병",
"attack": 80,
"defence": 130,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"로제스그라드"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"두터운 로브를 입고 불길한 주문을 읊습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217409,
"armType": 4,
"name": "악마병",
"attack": 130,
"defence": 80,
"speed": 7,
"avoid": 15,
"magicCoef": 0.6,
"cost": 11,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"올드제스"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"고대 제스 왕가의 계약에 따라 소환된 흑마법병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217410,
"armType": 4,
"name": "호넷 마물병",
"attack": 130,
"defence": 130,
"speed": 7,
"avoid": 0,
"magicCoef": 0.6,
"cost": 12,
"rice": 12,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"구 마왕성"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"호넷 직속의 최강 마물 마법병입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217411,
"armType": 4,
"name": "Z가디언",
"attack": 180,
"defence": 180,
"speed": 7,
"avoid": 0,
"magicCoef": 0.7,
"cost": 28,
"rice": 20,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCities",
"cities": [
"라그나로크 아크"
]
}
],
"attackCoef": {
"5": 1.2
},
"defenceCoef": {
"5": 0.8
},
"info": [
"제스의 기술력이 집약된 최고의 마법병기입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217500,
"armType": 5,
"name": "정란",
"attack": 150,
"defence": 150,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 5,
"requirements": [
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 1.8
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"높은 구조물 위에서 공격합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 20,
"rice": 5,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": {
"1": 0.8,
"2": 0.8,
"3": 0.8,
"4": 0.8,
"0": 2.4
},
"defenceCoef": {
"1": 1.2,
"2": 1.2,
"3": 1.2,
"4": 1.2
},
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 217502,
"armType": 5,
"name": "튤립3호",
"attack": 275,
"defence": 300,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 35,
"rice": 15,
"requirements": [
{
"type": "ReqTech",
"tech": 5000
},
{
"type": "ReqCities",
"cities": [
"커스텀"
]
}
],
"attackCoef": [],
"defenceCoef": [],
"info": [
"파괴적인 위력과 정말 파괴적인 비용을 자랑하는 전차입니다. "
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
}
]
}
@@ -0,0 +1,303 @@
{
"id": "siegetank",
"name": "siegetank",
"defaultCrewTypeId": 1100,
"armTypes": {
"1": "보병",
"2": "궁병",
"3": "기병",
"4": "귀병",
"5": "차병"
},
"crewTypes": [
{
"id": 1000,
"armType": 0,
"name": "성벽",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 0,
"magicCoef": 0,
"cost": 99,
"rice": 9,
"requirements": [
{
"type": "Impossible"
}
],
"attackCoef": [],
"defenceCoef": {
"1": 1.2
},
"info": [
"성벽입니다.",
"생성할 수 없습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1100,
"armType": 1,
"name": "보병",
"attack": 100,
"defence": 150,
"speed": 7,
"avoid": 10,
"magicCoef": 0,
"cost": 18,
"rice": 18,
"requirements": [],
"attackCoef": {
"2": 1.2,
"3": 0.8
},
"defenceCoef": {
"2": 0.8,
"3": 1.2
},
"info": [
"표준적인 보병입니다.",
"보병은 방어특화이며,",
"상대가 회피하기 어렵습니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1200,
"armType": 2,
"name": "궁병",
"attack": 100,
"defence": 100,
"speed": 7,
"avoid": 20,
"magicCoef": 0,
"cost": 20,
"rice": 20,
"requirements": [],
"attackCoef": {
"3": 1.2,
"1": 0.8
},
"defenceCoef": {
"3": 0.8,
"1": 1.2
},
"info": [
"표준적인 궁병입니다.",
"궁병은 회피특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1300,
"armType": 3,
"name": "기병",
"attack": 150,
"defence": 100,
"speed": 7,
"avoid": 5,
"magicCoef": 0,
"cost": 22,
"rice": 22,
"requirements": [],
"attackCoef": {
"1": 1.2,
"2": 0.8
},
"defenceCoef": {
"1": 0.8,
"2": 1.2
},
"info": [
"표준적인 기병입니다.",
"기병은 공격특화입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1400,
"armType": 4,
"name": "귀병",
"attack": 80,
"defence": 80,
"speed": 7,
"avoid": 5,
"magicCoef": 0.5,
"cost": 18,
"rice": 18,
"requirements": [],
"attackCoef": [],
"defenceCoef": [],
"info": [
"계략을 사용하는 병종입니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1405,
"armType": 4,
"name": "남귀병",
"attack": 60,
"defence": 60,
"speed": 7,
"avoid": 10,
"magicCoef": 0.8,
"cost": 16,
"rice": 16,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
}
],
"attackCoef": [],
"defenceCoef": [],
"info": [
"전투를 포기하고 계략에 몰두합니다."
],
"initSkillTrigger": null,
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1500,
"armType": 5,
"name": "정란",
"attack": 100,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 7,
"rice": 3,
"requirements": [],
"attackCoef": [
1.8
],
"defenceCoef": [],
"info": [
"높은 구조물 위에서 공격합니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1501,
"armType": 5,
"name": "충차",
"attack": 150,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 10,
"rice": 3,
"requirements": [
{
"type": "ReqTech",
"tech": 1000
},
{
"type": "ReqMinRelYear",
"year": 3
}
],
"attackCoef": [
2.4
],
"defenceCoef": [],
"info": [
"엄청난 위력으로 성벽을 부수어버립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1502,
"armType": 5,
"name": "벽력거",
"attack": 200,
"defence": 100,
"speed": 6,
"avoid": 0,
"magicCoef": 0,
"cost": 20,
"rice": 4,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"업"
]
}
],
"attackCoef": [
1.8
],
"defenceCoef": [],
"info": [
"상대에게 돌덩이를 날립니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
},
{
"id": 1503,
"armType": 5,
"name": "목우",
"attack": 50,
"defence": 200,
"speed": 5,
"avoid": 0,
"magicCoef": 0,
"cost": 15,
"rice": 3,
"requirements": [
{
"type": "ReqTech",
"tech": 3000
},
{
"type": "ReqCities",
"cities": [
"성도"
]
}
],
"attackCoef": [],
"defenceCoef": [],
"info": [
"상대를 저지하는 특수병기입니다."
],
"initSkillTrigger": [
"che_성벽부상무효"
],
"phaseSkillTrigger": null,
"iActionList": null
}
]
}
+1
View File
@@ -3,6 +3,7 @@ export type { RandomGenerator } from '@sammo-ts/common';
export * from './actions/index.js';
export * from './constraints/index.js';
export * from './logging/index.js';
export * from './messages/index.js';
export * from './ports/world.js';
export * from './ports/worldSnapshot.js';
export * from './scenario/index.js';
+1
View File
@@ -0,0 +1 @@
export * from './message.js';
+168
View File
@@ -0,0 +1,168 @@
export type MessageType = 'public' | 'private' | 'national' | 'diplomacy';
export const MESSAGE_MAILBOX_PUBLIC = 9999;
export const MESSAGE_MAILBOX_NATIONAL_BASE = 9000;
export interface MessageTarget {
generalId: number;
generalName: string;
nationId: number;
nationName: string;
color: string;
icon: string;
}
export type MessageOption = Record<string, unknown>;
export interface MessageDraft {
msgType: MessageType;
src: MessageTarget;
dest: MessageTarget;
text: string;
time: Date;
validUntil: Date;
option?: MessageOption | null;
}
export interface MessagePayload {
src: MessageTarget;
dest: MessageTarget;
text: string;
option?: MessageOption | null;
}
export interface MessageRecordDraft {
mailbox: number;
msgType: MessageType;
srcId: number;
destId: number;
time: Date;
validUntil: Date;
payload: MessagePayload;
}
export interface MessageStore {
insertMessage(draft: MessageRecordDraft): Promise<number>;
}
export const isValidMailbox = (mailbox: number): boolean =>
mailbox > 0 && mailbox <= MESSAGE_MAILBOX_PUBLIC;
export const resolveReceiverMailbox = (draft: MessageDraft): number => {
switch (draft.msgType) {
case 'public':
return MESSAGE_MAILBOX_PUBLIC;
case 'national':
case 'diplomacy':
return MESSAGE_MAILBOX_NATIONAL_BASE + draft.dest.nationId;
case 'private':
return draft.dest.generalId;
}
};
export const resolveSenderMailbox = (draft: MessageDraft): number | null => {
switch (draft.msgType) {
case 'public':
return null;
case 'private':
return draft.src.generalId !== draft.dest.generalId
? draft.src.generalId
: null;
case 'national':
return draft.src.nationId !== draft.dest.nationId
? MESSAGE_MAILBOX_NATIONAL_BASE + draft.src.nationId
: null;
case 'diplomacy':
return MESSAGE_MAILBOX_NATIONAL_BASE + draft.src.nationId;
}
};
const buildPayload = (
draft: MessageDraft,
optionOverride?: MessageOption | null
): MessagePayload => ({
src: draft.src,
dest: draft.dest,
text: draft.text,
option: optionOverride ?? draft.option ?? {},
});
const buildRecord = (
draft: MessageDraft,
mailbox: number,
optionOverride?: MessageOption | null
): MessageRecordDraft => {
const payload = buildPayload(draft, optionOverride);
let srcId = draft.src.generalId;
let destId = draft.dest.generalId;
if (draft.msgType === 'public') {
destId = MESSAGE_MAILBOX_PUBLIC;
} else if (draft.msgType === 'national' || draft.msgType === 'diplomacy') {
srcId = MESSAGE_MAILBOX_NATIONAL_BASE + draft.src.nationId;
destId = MESSAGE_MAILBOX_NATIONAL_BASE + draft.dest.nationId;
}
return {
mailbox,
msgType: draft.msgType,
srcId,
destId,
time: draft.time,
validUntil: draft.validUntil,
payload,
};
};
const buildSenderOption = (
draft: MessageDraft,
receiverId: number
): MessageOption => {
const option = {
...(draft.option ?? {}),
receiverMessageID: receiverId,
};
if (draft.msgType === 'diplomacy' && 'action' in option) {
const { action: _action, ...rest } = option;
return rest;
}
return option;
};
// 메시지 전달 규칙(수신/송신 복사본)을 그대로 유지한다.
export const sendMessage = async (
store: MessageStore,
draft: MessageDraft,
options: { sendDestOnly?: boolean } = {}
): Promise<{ receiverId: number; senderId?: number }> => {
const receiverMailbox = resolveReceiverMailbox(draft);
if (!isValidMailbox(receiverMailbox)) {
throw new Error(`Invalid receiver mailbox: ${receiverMailbox}`);
}
const receiverRecord = buildRecord(draft, receiverMailbox);
const receiverId = await store.insertMessage(receiverRecord);
if (!receiverId) {
throw new Error('Failed to send receiver message.');
}
if (options.sendDestOnly) {
return { receiverId };
}
const senderMailbox = resolveSenderMailbox(draft);
if (!senderMailbox || senderMailbox === receiverMailbox) {
return { receiverId };
}
const senderRecord = buildRecord(
draft,
senderMailbox,
buildSenderOption(draft, receiverId)
);
const senderId = await store.insertMessage(senderRecord);
return senderId ? { receiverId, senderId } : { receiverId };
};
+109
View File
@@ -0,0 +1,109 @@
import { describe, expect, it } from 'vitest';
import {
MESSAGE_MAILBOX_NATIONAL_BASE,
MESSAGE_MAILBOX_PUBLIC,
sendMessage,
type MessageDraft,
type MessageRecordDraft,
type MessageStore,
type MessageTarget,
} from '../src/messages/message.js';
const buildTarget = (overrides: Partial<MessageTarget> = {}): MessageTarget => ({
generalId: 1,
generalName: '테스트',
nationId: 1,
nationName: '나라',
color: '#000000',
icon: '',
...overrides,
});
class InMemoryMessageStore implements MessageStore {
private nextId = 1;
public readonly records: Array<{ id: number; draft: MessageRecordDraft }> = [];
async insertMessage(draft: MessageRecordDraft): Promise<number> {
const id = this.nextId++;
this.records.push({ id, draft });
return id;
}
}
const buildDraft = (overrides: Partial<MessageDraft> = {}): MessageDraft => ({
msgType: 'private',
src: buildTarget({ generalId: 10, nationId: 1 }),
dest: buildTarget({ generalId: 20, nationId: 2 }),
text: '안녕',
time: new Date('2025-01-01T00:00:00Z'),
validUntil: new Date('9999-12-31T00:00:00Z'),
option: {},
...overrides,
});
describe('sendMessage', () => {
it('sends a private message to receiver and sender', async () => {
const store = new InMemoryMessageStore();
const draft = buildDraft();
const result = await sendMessage(store, draft);
expect(result.receiverId).toBe(1);
expect(result.senderId).toBe(2);
expect(store.records).toHaveLength(2);
expect(store.records[0].draft.mailbox).toBe(draft.dest.generalId);
expect(store.records[1].draft.mailbox).toBe(draft.src.generalId);
expect(store.records[0].draft.payload.option).not.toHaveProperty(
'receiverMessageID'
);
expect(store.records[1].draft.payload.option).toMatchObject({
receiverMessageID: 1,
});
});
it('sends only one national message when nations match', async () => {
const store = new InMemoryMessageStore();
const draft = buildDraft({
msgType: 'national',
dest: buildTarget({ generalId: 0, nationId: 1 }),
});
const result = await sendMessage(store, draft);
expect(result.senderId).toBeUndefined();
expect(store.records).toHaveLength(1);
expect(store.records[0].draft.mailbox).toBe(
MESSAGE_MAILBOX_NATIONAL_BASE + 1
);
});
it('keeps public messages in the shared mailbox only', async () => {
const store = new InMemoryMessageStore();
const draft = buildDraft({
msgType: 'public',
dest: buildTarget({ generalId: 0, nationId: 0 }),
});
const result = await sendMessage(store, draft);
expect(result.senderId).toBeUndefined();
expect(store.records).toHaveLength(1);
expect(store.records[0].draft.mailbox).toBe(MESSAGE_MAILBOX_PUBLIC);
});
it('removes diplomacy action from sender copy', async () => {
const store = new InMemoryMessageStore();
const draft = buildDraft({
msgType: 'diplomacy',
option: { action: 'test', payload: 1 },
dest: buildTarget({ generalId: 0, nationId: 2 }),
});
await sendMessage(store, draft);
const senderPayload = store.records[1].draft.payload.option ?? {};
expect(senderPayload).not.toHaveProperty('action');
expect(senderPayload).toMatchObject({ payload: 1 });
});
});