石器百科 开始游戏

战斗系统

石器时代是回合制战斗:每回合所有人先下指令,然后服务端按速度把所有动作排成一列依次结算。本文按「一回合里发生的事」的顺序讲,每节先说结论,再给出原版服务端(gmsv)里的公式。

本文的公式都来自 2.5 原版服务端源码(battle/battle.c、battle/battle_event.c、battle/battle_magic.c 等),并以该版本 include/version.h 实际打开的功能为准。网页版的战斗引擎 packages/shared/protocol/sa-battle-sim.ts 照着这些代码移植;有出入的地方会单独注明。

一回合的流程

  1. 下指令:玩家和宠物各自选择攻击、咒术、捕捉、防御、道具、换宠、逃跑等。野怪和自动参战的宠物由 AI 决定。
  2. 偷袭判定(只在开战第一回合):可能有一方被偷袭,第一回合整方不能行动。
  3. 排出手顺序:按「敏捷 + 随机」从快到慢排序。
  4. 合击判定:排在相邻位置、打同一个目标的同伴可能凑成合击。
  5. 依次行动:每次攻击依次判定闪避、会心一击、伤害、属性修正、防御减伤,然后判定击飞、反击。
  6. 异常状态结算:轮到某人行动时,先扣他的异常状态回合数,中毒在这时扣血。
  7. 胜负判定:某一方能战斗的玩家(或野怪)全部倒下,战斗结束,开始结算经验和掉落。

偷袭(先制)

开战时服务端用我方队长的运气做一次判定(玩家对玩家和剧情战不判定):

队长运气 我方偷袭敌人(敌方第一回合不能动) 我方被偷袭(我方第一回合不能动)
5 20% 0%
4 15% 1%
3 10% 2%
2 5% 4%
1 及其他 0% 6%

被偷袭的一方第一回合所有指令都被跳过,第二回合起恢复正常。

出处:battle/battle_event.c BATTLE_SurpriseCheck(RAND(1,100) <= a 为我方先制,a < Rnd < a+b 为被偷袭);battle/battle.c BATTLE_Init 设置 BSIDE_FLG_SURPRISE,BATTLE_Battling 中被偷袭方跳过行动。

出手顺序

每回合每个人算一个「出手值」,按出手值从大到小依次行动。出手值以敏捷为基础,再减去一个随机量,所以敏捷接近的两个人谁先谁后每回合都不一定。

指令 出手值
普通攻击、防御、咒术等(默认) W - 随机(0 ~ W×0.3)
使用道具 W - 随机(0 ~ W×0.3) + W×0.15

其中 W = 敏捷 + 20。也就是说:

  • 出手值最多比 W 低 30%,敏捷高出对方约 43% 以上就一定先动。
  • 使用道具有 15% 的出手加成,补血药一般能抢在敌人前面用出来。
  • 骑宠时,近战的敏捷按「人物敏捷×0.2 + 骑宠敏捷×0.8」计算;装备投掷武器时是「人物×0.8 + 骑宠×0.2」。骑宠的规则详见 骑宠。
  • 出手值最低为 1。

出处:battle/battle.c BATTLE_DexCalc、EntrySort(qsort 按 dex 降序);骑宠换算 battle/battle_event.c BATTLE_adjustRidePet3A(_BATTLE_NEWPOWER 开启时的分支)。

普通攻击的伤害

基础伤害

先算出攻击方的攻击力 A 和受击方的有效防御 D:

  • D = 防御力 × 0.70。
  • 骑宠时:近战攻击力 = 人物攻×0.8 + 骑宠攻×0.8;投掷武器攻击力 = 人物攻 + 骑宠攻×0.4;防御力 = (人物防×0.7 + 骑宠防×0.7) 再 ×0.70。
  • 受击方石化时,D 翻倍。
  • 野怪的攻击力和防御力各会随机多出 0~9% 左右(_NPCENEMY_ADDPOWER)。

然后分三种情况:

情况 伤害
A ≥ D × 8/7(攻击明显高于防御) (A - D) × 2 + 随机(0 ~ A/8) - A/16
D ≤ A < D × 8/7(差不多) 随机(0 ~ A/16)
A < D(打不动) 随机(0 ~ 1)

所以伤害主要看「攻击减防御」的差值,乘 2 后再加减最多 A/16 的浮动。攻击力只比防御高一点点时,伤害会骤降到很小。

之后依次套用:属性修正(下一节)、装备附带的「额外伤害 / 附加防御」(各取 30%~100% 的随机值相减),最后伤害不低于 0。

出处:battle/battle_event.c BATTLE_DamageCalc(常数 DAMAGE_RATE = 2.0、D_16 = 1/16、D_8 = 1/8);_ADD_DEAMGEDEFC 段为装备额外伤害。

防御指令

受击方本回合选了「防御」(且没有混乱)时,伤害再乘一个随机系数:

概率 25% 25% 20% 15% 10% 5%
伤害倍率 0 ×0.1 ×0.2 ×0.3 ×0.4 ×0.5

平均下来只吃约 17% 的伤害。代价是:防御状态下不会闪避(闪避判定直接跳过)。

出处:battle/battle_event.c BATTLE_GuardAdjust、BATTLE_AttackSeq;BATTLE_DuckCheck 开头「BATTLE_COM_GUARD 时 return FALSE」。

最终伤害小于 1 时会变成随机 0 或 1;为 0 则显示为 Miss(被防御挡下时显示为完全防御)。

地水火风属性

属性构成

每个角色、宠物、野怪身上有地、水、火、风四种属性值,以百分比计(合计不超过 100%)。100% 减去四属性之和就是「无属性」部分。例如「地 30% 水 70%」的宠物没有无属性部分;「火 40%」的宠物有 60% 是无属性。骑宠时,人物的属性取人物和骑宠的平均值。

克制关系

属性相克是一个循环:地克水、水克火、火克风、风克地。

攻击方 \ 受击方 地 水 火 风 无
地 1.0 1.5 1.0 0.6 1.5
水 0.6 1.0 1.5 1.0 1.5
火 1.0 0.6 1.0 1.5 1.5
风 1.5 1.0 0.6 1.0 1.5
无 0.6 0.6 0.6 0.6 1.0

可以看出几个要点:

  • 克制方打被克方 ×1.5,被克方打回去 ×0.6;其余属性之间(包括同属性)都是 ×1.0。
  • 有属性打无属性一律 ×1.5,无属性打有属性一律 ×0.6。属性越「纯」,打普通目标越占便宜。

混合属性怎么算

双方都是混合属性时,伤害按「攻击方每种成分 × 受击方每种成分 × 对应倍率」加权求和:

属性后伤害 = 伤害 × Σ(攻方成分i% × 守方成分j% × 倍率[i][j])

例:地 100% 的宠物攻击「水 50% 无 50%」的目标:1.0 × (0.5×1.5 + 0.5×1.5) = 1.5,伤害 ×1.5。

出处:battle/battle_event.c BATTLE_AttrCalc(AJ_UP 1.5、AJ_SAME 1.0、AJ_DOWN 0.6、D_ATTR = 1/(100×100))、BATTLE_GetAttr(无属性 = ATTR_MAX(100) - 四属性和;骑宠时人物与骑宠取平均)。

场地属性

有些咒术(「大地的精灵」「水的精灵」「火炎的精灵」「疾风的精灵」等)会把整个战场变成某种属性,持续数回合。场地属性下双方各算一个场地系数:

场地系数 = 0.5 + 自身该属性% × 场地强度% × 0.5

伤害再乘 攻方系数 / 守方系数。场地强度在 60%~100% 之间(看咒术等级)。例如 100% 地场地中,地 100% 的攻击方系数 1.0,地 0% 的受击方系数 0.5,伤害 ×2;反过来被打则 ×0.5。没有场地属性时双方都是 0.5,不影响伤害。「调和的精灵」可以把场地恢复成无属性。

出处:battle/battle_event.c BATTLE_FieldAttAdjust(AJ_BOTTOM 0.5、AJ_PLUS 0.5)、BATTLE_AttrAdjust;咒术数值见 data/magic.txt MAGIC_FieldAttChange 各行。

闪避

被普通攻击时,受击方先做闪避判定。闪避率由双方敏捷差决定:

大 = 双方敏捷中较大者,小 = 较小者
比例 = 受击方敏捷 ≥ 攻击方敏捷 ? 1 : 受击方敏捷 / 攻击方敏捷
闪避率(%) = √((大 - 小) / 0.02) × 比例 + 受击方运气(仅玩家) + 各种修正
  • 双方敏捷相同时,基础闪避是 0(只剩运气)。敏捷差距越大闪避越高,但如果自己比对方慢,还要乘上「自己/对方」的比例。
  • 计算前会先调整敏捷:野怪打宠物时野怪敏捷 ×0.8;玩家方打宠物时宠物敏捷 ×0.8;非玩家打玩家时攻击方敏捷 ×0.6;玩家打非玩家时受击方敏捷 ×0.6。
  • 受击方本回合在施咒术时,除数从 0.02 变成 0.027(闪避略低)。
  • 攻击方处于酒醉状态:受击方闪避 +20~30。
  • 攻击方用弓:闪避 +40(代码里 +20 写了两次)。
  • 上限 75%,下限 1(即 0.01%)。
  • 以下情况不能闪避:选择防御、被麻痹/睡眠/石化/魔障、身上有光/镜/守护精灵效果。
  • 合击不能被闪避。

举例(不含运气、不含类型修正):

受击方敏捷 攻击方敏捷 闪避率
100 60 √2000 ≈ 44.7%
100 90 √500 ≈ 22.4%
100 100 0%
60 100 44.7 × 0.6 ≈ 26.8%

出处:battle/battle_event.c BATTLE_DuckCheck(gKawashiPara = 0.02 / 0.027、KAWASHI_MAX_RATE = 75、RAND(1,10000) <= per)。

会心一击

没被闪避的攻击,接着判定会心一击。公式和闪避同一个结构,但换成攻击方的立场:

比例 = 攻击方敏捷 ≥ 受击方敏捷 ? 1 : 攻击方敏捷 / 受击方敏捷
会心率(%) = (√((大 - 小) / 0.09) + 武器会心值 × 0.5) × 比例 + 攻击方运气(仅玩家)
  • 宠物打野怪时野怪敏捷 ×0.8;玩家打非玩家时受击方敏捷 ×0.6。
  • 野怪打宠物、或非玩家打玩家时,改用线性公式:((大 - 小) / 10 + 武器会心×0.5) × 比例,数值通常小得多。
  • 会心一击的伤害 = 普通伤害 + 受击方防御力 × 攻击方等级 / 受击方等级 × 0.5,无视一部分防御,等级越高于对方越痛。
  • 弓的会心一击没有额外伤害(照普通伤害算,只是显示为会心)。

出处:battle/battle_event.c BATTLE_CriticalCheckPlayer(gCriticalPara = 0.09)、BATTLE_CriDamageCalc、BATTLE_AttackSeq(ITEM_BOW 分支)。

反击

被普通攻击后,**本回合同样选择了「攻击」**的受击方有机会反击。反击也可能再被反击,最多来回 5 次。

  • 任何一方装备投掷类武器(回力镖、投掷斧、投掷石等)都不会发生反击。
  • 有光/镜/守护精灵效果时反击不造成伤害。
  • 反击伤害 ×0.75。

反击率(反击者为玩家时):

基础 = √((大 - 小) / 0.08) × 比例    (比例:反击者敏捷较低时 = 反击者/对方)
反击率(%) = 基础 × 武器相性 × 0.1 + 反击者运气

武器相性表(反击者武器 × 对方武器,数值越大越容易反击):

反击者 \ 对方 徒手 斧 棍棒 枪 弓
徒手 10 9 8 8 5
斧 10 9 7 7 6
棍棒 9 8 10 10 7
枪 8 8 10 10 7
弓 6 6 8 8 9

反击者为宠物或野怪时不看武器:反击率 = 基础值(上限 100%);宠物技能「不防守战法」等会再加成。

出处:battle/battle_event.c BATTLE_CounterCalc(gCounterPara = 0.08)、CounterTbl、BATTLE_CounterCheckPlayer/Pet、BATTLE_Counter(damage *= 0.75);battle/battle.c BATTLE_Battling 中 for( k = 0; k < 5 ...) 反击循环。

合击与连击

合击:按出手顺序排下来,若某人选择普通攻击(非投掷武器、能行动),有一定概率(我方 50%、野怪 20%)成为合击发起人;紧接在他后面出手、同一方、打同一个目标的人会一起加入合击。合击一起结算伤害,不能被闪避。

徒手连打:等级 10 以上的玩家,用没有设定攻击次数的武器(包括徒手)攻击时,每次攻击掷 1~1000:

掷出 攻击次数
≤ 10 + 运气×5 5~10 次
≤ 30 + 运气×5 3 次
≤ 70 + 运气×5 2 次
其余 1 次

出处:battle/battle.c ComboCheck / ComboCheck2、BATTLE_Battling 中 attack_max 的计算。

击飞

一次受到的伤害 ≥ 最大HP × 1.2 + 20,或者倒下后溢出的伤害累计达到这个值,就会被击飞(飞出画面)。

  • 被击飞的玩家立刻离开战斗;在非决斗战斗中会被送回记录点(最后登记的长老处),并脱离队伍,魅力 -4(10 级以下减半)。
  • 被击飞的宠物退出战斗,不再是出战宠物,忠诚度下降。
  • 野怪被击飞照常计算经验。

出处:battle/battle_event.c BATTLE_DamageSub(maxhp * 1.2 + 20);battle/battle.c BATTLE_UltimateExtra(CH_FIX_PLAYEULTIMATE = -4)。

异常状态

原版共有六种基础异常:中毒、麻痹、睡眠、石化、酒醉、混乱。2.5 服务端另外编进了精灵咒术带来的虚弱、剧毒、魔障、沉默。

一个人同一时间只能有一种异常:已经带着任何一种异常的目标,不会再被附加新的异常。

状态 效果 解除
中毒 每次轮到自己时扣血:max(1, ((体力+腕力+耐力+敏捷)/100 - 20) / 4)(四项为内部数值,即每项「点数」相加后减 20 再除 4)。不会毒死,最多扣到剩 1 HP 回合数到、净化精灵(毒)、对应道具
麻痹 无法行动 回合数到、净化精灵(麻痹)
睡眠 无法行动;被攻击命中就会醒来 被打、回合数到、净化精灵(睡眠)
石化 无法行动;防御力 ×2 回合数到、净化精灵(石化)
酒醉 自己的攻击更容易被闪避(对方闪避 +20~30) 回合数到、净化精灵(酒醉)
混乱 每次行动有 80% 机率改成攻击随机一个目标(敌我不分,不会打自己);混乱时「防御」无效 回合数到、净化精灵(混乱)
剧毒 每回合扣血(算法同中毒);回合数耗尽时直接阵亡 净化精灵(剧毒)
魔障 无法行动 净化精灵(魔障)
沉默 不能使用咒术 净化精灵(沉默)、破除沉默
虚弱 防御和敏捷下降(magic.txt 说明为 20%) 净化精灵(虚弱)
  • 麻痹、睡眠、石化、魔障在中招当回合就会取消本回合的指令。
  • 回合数在自己每次轮到行动时减 1。
  • 战斗结束时所有异常状态全部清除,不会带出战斗。
  • 投掷石命中时会尝试附加 1 回合麻痹(按下面的麻痹命中率判定)。

出处:battle/battle.c BATTLE_StatusSeq、Compute_Down、BATTLE_CanMoveCheck、BATTLE_Exit(BATTLE_BadStatusAllClr);battle/battle_event.c StatusTbl / aszStatus、BATTLE_DamageWakeUp、BATTLE_DamageCalc(石化防御 ×2)。

异常命中率

宠物技能(毒攻击等)和精灵咒术附加异常时,用同一个公式:

命中率(%) = 基础值 + 等级修正 + 施放方运气 - 目标该异常抗性 - 体力系数
等级修正 = (施放方等级 - 目标等级) × 倍率,限制在 ±上限之内(决斗中为 0)
体力系数 = 目标体力 / (体力+腕力+耐力+敏捷) / 0.25 × 10
来源 基础值 倍率 上限
攻击附带(宠物技能) 30 2.0 ±40
精灵咒术 magic.txt 中「成」后面的数字(15~50) 1.0 ±30
  • 命中率最高 80%。四项均衡的目标体力系数约为 10;体力点得越多越难中异常。
  • 麻痹例外:固定 20 - 麻痹抗性。
  • 中招后持续回合:咒术为 magic.txt 中 turn 后的数字;攻击附带为技能设定的回合 +1。

出处:battle/battle_event.c BATTLE_StatusAttackCheck、BATTLE_Attack(suitpoison = 30、Range 40、Bai 2.0);battle/battle_magic.c MAGIC_StatusChange_Battle、BATTLE_MultiStatusChange(Range 30、Bai 1.0)。

逃跑

选择「逃跑」后在自己的出手顺序到时判定。

  • 决斗(玩家对玩家)中逃跑必定成功,但会扣 DP,见 PK 与决斗。
  • 宠物不能单独逃跑。主人逃跑成功时宠物一起离开。
  • 逃跑成功的人会脱离队伍。

一般战斗的逃跑率:

系数 c = 本场已尝试逃跑次数(含这次)+ 1
Δ = 敌方平均等级 - 自己等级
运气 5:95 × c
运气 4:60 × c - 2Δ
运气 3:50 × c - 2Δ
运气 2:40 × c - 2Δ
运气 1:30 × c - 2Δ
成功条件:随机(1~100) < 上述值

运气取角色的运气值并限制在 1~5。同等级、运气 1 的角色第一次逃跑约 59%,第二次约 89%,第三次起必定成功。敌人等级比自己高时逃跑率下降(每高 1 级 -2%)。

出处:battle/battle_event.c BATTLE_EscapeCheck、BATTLE_Escape(先 escape++ 再以 escape+1 计算,故第一次尝试 c = 2)。

网页版目前第一次尝试按 c = 1 计算(packages/tools/src/game/rules.ts escapeRate),第一次逃跑会比原版难一些。

战斗中捕捉

对可捕捉的野生宠物使用「捕捉」指令,成功率大致取决于:目标剩余 HP 越少越好、自己等级和敏捷越高越好、目标的捕获难度、自己的运气和魅力(整体乘以 魅力/50)。目标处于睡眠时成功率 +15%,上限 99%。等级比自己高出超过 5 级的宠物抓不到。决斗中不能捕捉。

详细公式和抓宠技巧见 宠物。

出处:battle/battle_event.c BATTLE_CaptureCheck。

咒术(魔法)

人物的「咒术」来自装备在身上的精灵类道具:战斗中选咒术时列出的是装备栏里带魔法的道具,消耗的 MP 由道具本身决定。咒术的种类定义在 data/magic.txt,2.5 数据里共有以下几大类:

类别 例子 说明
回复 治愈的精灵、滋润的精灵、恩惠的精灵 回复自己 / 单人 / 我方全体 HP
复活 复活精灵 让气绝的同伴复活并回复 HP
状态回复 净化精灵(毒/麻痹/石化/混乱/酒醉/睡眠…)、高等净化精灵 解除对应异常(单人或全体)
异常 猛毒/毒雾、硬化/石化、混乱/混迷、酒/酩酊、睡眠/昏睡的精灵 让敌人陷入异常,3~6 回合
场地属性 大地/水/火炎/疾风的精灵、调和的精灵 改变场地属性(见上文)
属性反转 彩虹的精灵(单人)、极光的精灵(全体) 反转属性
防护 光的精灵(吸收 1 次)、镜子的精灵(反射 1 次)、守护的精灵(无效 2 次) 抵挡普通攻击
攻击魔法 岩石撞击、水柱、火球、风刃 等(Lv1~Lv4),毁天灭地 地水火风属性魔法攻击
其他 变幻的精灵(变身成自己的宠物)、虚弱、魔障、沉默、魔法防御、奔龙阵等召唤 —
  • 咒术和普通攻击的出手顺序计算相同(敏捷+20 减随机 0~30%)。
  • 攻击魔法的威力受人物该属性的魔法熟练度和目标的魔法抗性影响:威力 × (1 + 魔法等级/10) × ((熟练度×1.4 - 抗性)² / 熟练度² + 随机0~0.19);熟练度越高,魔法越不容易「失手」。
  • 网页版尚未移植光/镜/守护等「伤害反应」类效果。

出处:data/magic.txt;magic/magic.c MAGIC_Use(MP 取 ITEM_MAGICUSEMP);battle/battle_command.c「J|」指令(只接受装备栏 CHAR_HEAD ~ CHAR_EQUIPPLACENUM);攻击魔法 battle/battle_magic.c BATTLE_MultiAttMagic(_FIX_MAGICDAMAGE 分支)。

2.5 原版数据中哪些攻击魔法有对应的精灵道具可以取得,本文未逐一确认。

遇敌

野外走路时,服务端每走一步做一次遇敌判定。每个区域(data/encount.txt)设定了遇敌率的下限和上限:

每走一步:
  若 随机(0~119) < 当前遇敌值 → 遇敌,当前遇敌值重置为下限
  否则 当前遇敌值 +1(不超过上限)

也就是说,每一步的遇敌机率是 当前遇敌值 / 120,越久没遇敌越容易遇到,遇到一次后回到最低。

  • 站在传送点上、或目标格子上有可见的 NPC 敌人时不会触发。
  • 服务端配置 ENEMYACTION 可以整体降低遇敌(除数变为 120 × ENEMYACTION),原版默认为 1(私服可改)。

出处:char/char_walk.c(rand()%(120*getEnemyAction()) < cep、遇敌后 cep = minep、否则 cep++);char/encount.c ENCOUNT_getEncountPercentMin/Max;configfile.c getEnemyAction(限制在 1~100)。

驱魔、诱魔类道具

道具 效果
多黑洛斯肉 接下来 100 步内,遇敌率上下限都 ×0.2(降低 80%)。组队时作用在队长身上
龙王的守护、除剂、神签(大吉) 完全不遇敌,持续约 6 分钟(服务端每 60 秒计一次,共 6 次),结束时提示「守护消失了」
太阳神的首饰 Lv 1 装备后在萨伊那斯(100)、加鲁卡(200) 两张大地图上不遇敌
太阳神的首饰 Lv 2 再加上吉鲁岛(300)、沙姆岛(400)
太阳神的首饰 Lv 3 再加上五十年前波拉岛(500)
炎之圣石、神签(大凶) 反向效果:站在原地也会不断遇敌,走一步即失效。适合原地练级

出处:item/item_event.c ITEM_useEffectTohelos(参数 -80|100 = 修正率 | 步数)、ITEM_useNoenemy、ITEM_equipNoenemy(noen:40/80/120)、ITEM_useEncounter;net.c setNoenemy(6)与每 60 秒递减;data/itemset.txt 对应行。

经验分配

谁打倒怪物,谁拿经验。服务端在每次有怪物倒下时,把经验发给「打出致命一击的那次行动」的参与者(合击时是所有参与合击的人和宠物):

  • 每个参与者都拿全额,不是平分。没出手的队友、没出战的宠物都拿不到。
  • 骑宠拿骑乘者那份的 60%。
  • 等级比怪物高 5 级以上开始打折:经验 × (20 - 等级差) / 15;等级差 20 以上只拿 1 点。
自己比怪物高 经验
5 级以内(或比怪物低) 100%
6 级 93%
10 级 67%
15 级 33%
19 级 7%
20 级以上 1 点
  • 战斗结束时倒下的玩家拿不到这场的经验(宠物同理)。
  • 怪物的经验值:enemy.txt 有填就用填的;否则按等级查基础表,再加上「(成长档次 + 抗性/特殊加成) × 等级」。
  • 怪物身上的掉落物随机分给参与击倒的人之一,每人每场最多保留 3 件。
  • 达到等级上限后不再获得经验,详见 人物属性与成长。
  • 装备带有 EXPUP 参数的道具可以额外增加经验。
  • 本服务端版本开启了「战斗金钱」:每场战斗结束时,活着的玩家获得 等级 × BATTLEGOLD 石币(原版默认 0,私服可改)。

出处:battle/battle.c BATTLE_AddExpItem(EXPGET_MAXLEVEL 5、EXPGET_DIV 15、骑宠 nowexp *= 0.6、getitem[3])、BATTLE_GetExpGold(CHAR_ISDIE 时 return)、BATTLE_GetExp(_BATTLE_GOLD、_ITEM_ADDEQUIPEXP);char/enemy.c ENEMY_getExp。

战败与倒下

与野怪的普通战斗中:

情况 结果
玩家倒下(HP 归零) 魅力 -2(10 级以下 -1),出战宠物忠诚度下降;战斗结束后 HP 变为 1,留在原地,不扣经验、不扣钱
玩家被击飞 魅力 -4(10 级以下 -2);立刻被送回记录点并脱离队伍
宠物倒下 忠诚度下降;战斗结束后 HP 变为 1
宠物被击飞 忠诚度大幅下降,退出出战位置
全队倒下 战斗结束,所有人按上面的规则处理,没有额外惩罚
主人攻击自己的宠物 宠物忠诚度下降
  • 剧情 / 特殊战斗如果标记为「无风险」,以上魅力和忠诚惩罚都不计算。
  • 决斗中倒下或被击飞没有魅力、忠诚惩罚,也不会被送回记录点,只影响 DP。

出处:battle/battle.c BATTLE_NormalDeadExtra(CH_FIX_PLAYERDEAD = -2)、BATTLE_UltimateExtra、BATTLE_Exit(倒下者 CHAR_HP = 1);include/battle.h CH_FIX_*、AI_FIX_*;battle/battle_event.c BATTLE_AttackSeq(主人打宠 AI_FIX_SEKKAN)。

其他细节

  • 求救与参战:战斗中按「求救」后,附近的玩家可以面对正在战斗的你按「参战」加入。决斗不能参战。
  • 换宠:战斗中可以把出战宠物换成另一只,详见 宠物。
  • 超时:服务端在一个指令阶段超过 1 小时仍没下指令时,会把还没下指令的玩家移出战斗(客户端本身有 99 秒倒数,到时自动送出指令)。
  • 宠物是否听从指令由忠诚度决定,可能不听话、乱打甚至逃跑,详见 宠物。

出处:battle/battle.c BATTLE_RescueTry、BATTLE_RescueEntry(BATTLE_TYPE_P_vs_P 时拒绝)、BATTLE_TimeOutCheck(BATTLE_TIME_LIMIT = 60*60)。