战斗系统
石器时代是回合制战斗:每回合所有人先下指令,然后服务端按速度把所有动作排成一列依次结算。本文按「一回合里发生的事」的顺序讲,每节先说结论,再给出原版服务端(gmsv)里的公式。
本文的公式都来自 2.5 原版服务端源码(
battle/battle.c、battle/battle_event.c、battle/battle_magic.c等),并以该版本include/version.h实际打开的功能为准。网页版的战斗引擎packages/shared/protocol/sa-battle-sim.ts照着这些代码移植;有出入的地方会单独注明。
一回合的流程
- 下指令:玩家和宠物各自选择攻击、咒术、捕捉、防御、道具、换宠、逃跑等。野怪和自动参战的宠物由 AI 决定。
- 偷袭判定(只在开战第一回合):可能有一方被偷袭,第一回合整方不能行动。
- 排出手顺序:按「敏捷 + 随机」从快到慢排序。
- 合击判定:排在相邻位置、打同一个目标的同伴可能凑成合击。
- 依次行动:每次攻击依次判定闪避、会心一击、伤害、属性修正、防御减伤,然后判定击飞、反击。
- 异常状态结算:轮到某人行动时,先扣他的异常状态回合数,中毒在这时扣血。
- 胜负判定:某一方能战斗的玩家(或野怪)全部倒下,战斗结束,开始结算经验和掉落。
偷袭(先制)
开战时服务端用我方队长的运气做一次判定(玩家对玩家和剧情战不判定):
| 队长运气 | 我方偷袭敌人(敌方第一回合不能动) | 我方被偷袭(我方第一回合不能动) |
|---|---|---|
| 5 | 20% | 0% |
| 4 | 15% | 1% |
| 3 | 10% | 2% |
| 2 | 5% | 4% |
| 1 及其他 | 0% | 6% |
被偷袭的一方第一回合所有指令都被跳过,第二回合起恢复正常。
出处:
battle/battle_event.cBATTLE_SurpriseCheck(RAND(1,100) <= a为我方先制,a < Rnd < a+b为被偷袭);battle/battle.cBATTLE_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.cBATTLE_DexCalc、EntrySort(qsort按 dex 降序);骑宠换算battle/battle_event.cBATTLE_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.cBATTLE_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.cBATTLE_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.cBATTLE_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.cBATTLE_FieldAttAdjust(AJ_BOTTOM 0.5、AJ_PLUS 0.5)、BATTLE_AttrAdjust;咒术数值见data/magic.txtMAGIC_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.cBATTLE_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.cBATTLE_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.cBATTLE_CounterCalc(gCounterPara = 0.08)、CounterTbl、BATTLE_CounterCheckPlayer/Pet、BATTLE_Counter(damage *= 0.75);battle/battle.cBATTLE_Battling中for( k = 0; k < 5 ...)反击循环。
合击与连击
合击:按出手顺序排下来,若某人选择普通攻击(非投掷武器、能行动),有一定概率(我方 50%、野怪 20%)成为合击发起人;紧接在他后面出手、同一方、打同一个目标的人会一起加入合击。合击一起结算伤害,不能被闪避。
徒手连打:等级 10 以上的玩家,用没有设定攻击次数的武器(包括徒手)攻击时,每次攻击掷 1~1000:
| 掷出 | 攻击次数 |
|---|---|
| ≤ 10 + 运气×5 | 5~10 次 |
| ≤ 30 + 运气×5 | 3 次 |
| ≤ 70 + 运气×5 | 2 次 |
| 其余 | 1 次 |
出处:
battle/battle.cComboCheck/ComboCheck2、BATTLE_Battling中attack_max的计算。
击飞
一次受到的伤害 ≥ 最大HP × 1.2 + 20,或者倒下后溢出的伤害累计达到这个值,就会被击飞(飞出画面)。
- 被击飞的玩家立刻离开战斗;在非决斗战斗中会被送回记录点(最后登记的长老处),并脱离队伍,魅力 -4(10 级以下减半)。
- 被击飞的宠物退出战斗,不再是出战宠物,忠诚度下降。
- 野怪被击飞照常计算经验。
出处:
battle/battle_event.cBATTLE_DamageSub(maxhp * 1.2 + 20);battle/battle.cBATTLE_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.cBATTLE_StatusSeq、Compute_Down、BATTLE_CanMoveCheck、BATTLE_Exit(BATTLE_BadStatusAllClr);battle/battle_event.cStatusTbl/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.cBATTLE_StatusAttackCheck、BATTLE_Attack(suitpoison = 30、Range 40、Bai 2.0);battle/battle_magic.cMAGIC_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.cBATTLE_EscapeCheck、BATTLE_Escape(先escape++再以escape+1计算,故第一次尝试 c = 2)。网页版目前第一次尝试按 c = 1 计算(
packages/tools/src/game/rules.tsescapeRate),第一次逃跑会比原版难一些。
战斗中捕捉
对可捕捉的野生宠物使用「捕捉」指令,成功率大致取决于:目标剩余 HP 越少越好、自己等级和敏捷越高越好、目标的捕获难度、自己的运气和魅力(整体乘以 魅力/50)。目标处于睡眠时成功率 +15%,上限 99%。等级比自己高出超过 5 级的宠物抓不到。决斗中不能捕捉。
详细公式和抓宠技巧见 宠物。
出处:
battle/battle_event.cBATTLE_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.cMAGIC_Use(MP 取ITEM_MAGICUSEMP);battle/battle_command.c「J|」指令(只接受装备栏CHAR_HEAD ~ CHAR_EQUIPPLACENUM);攻击魔法battle/battle_magic.cBATTLE_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.cENCOUNT_getEncountPercentMin/Max;configfile.cgetEnemyAction(限制在 1~100)。
驱魔、诱魔类道具
| 道具 | 效果 |
|---|---|
| 多黑洛斯肉 | 接下来 100 步内,遇敌率上下限都 ×0.2(降低 80%)。组队时作用在队长身上 |
| 龙王的守护、除剂、神签(大吉) | 完全不遇敌,持续约 6 分钟(服务端每 60 秒计一次,共 6 次),结束时提示「守护消失了」 |
| 太阳神的首饰 Lv 1 | 装备后在萨伊那斯(100)、加鲁卡(200) 两张大地图上不遇敌 |
| 太阳神的首饰 Lv 2 | 再加上吉鲁岛(300)、沙姆岛(400) |
| 太阳神的首饰 Lv 3 | 再加上五十年前波拉岛(500) |
| 炎之圣石、神签(大凶) | 反向效果:站在原地也会不断遇敌,走一步即失效。适合原地练级 |
出处:
item/item_event.cITEM_useEffectTohelos(参数-80|100= 修正率 | 步数)、ITEM_useNoenemy、ITEM_equipNoenemy(noen:40/80/120)、ITEM_useEncounter;net.csetNoenemy(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.cBATTLE_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.cENEMY_getExp。
战败与倒下
与野怪的普通战斗中:
| 情况 | 结果 |
|---|---|
| 玩家倒下(HP 归零) | 魅力 -2(10 级以下 -1),出战宠物忠诚度下降;战斗结束后 HP 变为 1,留在原地,不扣经验、不扣钱 |
| 玩家被击飞 | 魅力 -4(10 级以下 -2);立刻被送回记录点并脱离队伍 |
| 宠物倒下 | 忠诚度下降;战斗结束后 HP 变为 1 |
| 宠物被击飞 | 忠诚度大幅下降,退出出战位置 |
| 全队倒下 | 战斗结束,所有人按上面的规则处理,没有额外惩罚 |
| 主人攻击自己的宠物 | 宠物忠诚度下降 |
- 剧情 / 特殊战斗如果标记为「无风险」,以上魅力和忠诚惩罚都不计算。
- 决斗中倒下或被击飞没有魅力、忠诚惩罚,也不会被送回记录点,只影响 DP。
出处:
battle/battle.cBATTLE_NormalDeadExtra(CH_FIX_PLAYERDEAD = -2)、BATTLE_UltimateExtra、BATTLE_Exit(倒下者CHAR_HP = 1);include/battle.hCH_FIX_*、AI_FIX_*;battle/battle_event.cBATTLE_AttackSeq(主人打宠AI_FIX_SEKKAN)。
其他细节
- 求救与参战:战斗中按「求救」后,附近的玩家可以面对正在战斗的你按「参战」加入。决斗不能参战。
- 换宠:战斗中可以把出战宠物换成另一只,详见 宠物。
- 超时:服务端在一个指令阶段超过 1 小时仍没下指令时,会把还没下指令的玩家移出战斗(客户端本身有 99 秒倒数,到时自动送出指令)。
- 宠物是否听从指令由忠诚度决定,可能不听话、乱打甚至逃跑,详见 宠物。
出处:
battle/battle.cBATTLE_RescueTry、BATTLE_RescueEntry(BATTLE_TYPE_P_vs_P时拒绝)、BATTLE_TimeOutCheck(BATTLE_TIME_LIMIT = 60*60)。