家族
家族是石器时代里最大的社交单位:一群玩家挂同一个家族名,共享声望排名、家族频道、留言板和银行;声望够高的家族还能占领庄园,拿到族长家、免费护士、家族银行、庄园商店税收等福利。本文按「建立 → 经营 → 争夺庄园」的顺序讲,所有数字来自原版服务端源码。
要先说明一点:家族的大部分数据(成员名单、声望、共同帐户、庄园归属)不在游戏服务器 gmsv 里,而是保存在帐号服务器 saac(AC)里,gmsv 只是转发请求。本文同时查了两边的源码,凡是只有 saac 能决定的数字都会注明「saac」。
出处:gmsv
char/family.c、include/family.h;saacacfamily.c、include/acfamily.h。
一、相关 NPC 在哪里
| NPC | 位置 | 作用 |
|---|---|---|
| 家族管理员 | 萨姆吉尔的村长家 1006 (18,24)、玛丽娜丝的村长家 2006 (29,16)、加加的村长家 3006 (25,16)、卡鲁它那的村长家 4006 (18,23);另有霍特尔、卡坦、多多、乌鲁力、奇喀喀、奇努伊、达那、福尔德的长老/村长家各一位 | 介绍家族、成立、加入、退出/解散 |
| 家族留言版 | 四大村村长家(萨姆吉尔 (16,19)、玛丽娜丝 (23,19)、加加 (18,17)、卡鲁它那 (19,18))、四个庄园族长家,以及上面那些长老/村长家 | 成员列表、家族留言、家族之间留言板、申请庄园、声望排行 |
| 家族银行 | 四大村村长家(萨姆吉尔 (18,30)、玛丽娜丝 (29,20)、加加 (27,20)、卡鲁它那 (16,30))与四个庄园族长家 | 家族个人帐户、家族共同帐户 |
| 踢馆登记人 | 萨姆吉尔庄园 1040 (47,29)、玛丽娜丝的庄园 2030 (60,41)、加加村的庄园 3030 (59,35)、卡鲁它那庄园 4030 (29,17) | 挑战庄园 |
| 场地预约人 ×5 | PK竞技聚会场 141:(46,17)、(46,34)、(29,46)、(3,31)、(3,15) | 预约家族 PK |
| 家族召唤员 | 每个庄园各一位(如萨姆吉尔庄园 (48,25)),PK竞技聚会场 (26,16) | 族长召集族人到场 |
| 家族对战向导 | 每个庄园各一位(如萨姆吉尔庄园 (47,23)),聚会场里每个场地一位 | 放族人进入对战场 |
出处:
data/npc/family/familyman.create、fmdengon.create、bankman.create、scheduleman.create、data/npc/genout/family.create;地图名取自data/map/family/下的地图文件头。
二、成立家族
条件与费用
到家族管理员处选「申请成立新的家族」,要同时满足:
- 还没有加入任何家族;不在战斗中。
- 等级 30 以上,或者已经转生过(转生后等级不限)。
- 完成成人礼(事件旗标 4)。
- 身上至少 10000 石币(成立手续费,直接扣除)。
通过后会弹出成立表单,填写:家族名称、家族主旨(不填会记成「无」)、从身上宠物里选一只家族守护兽、选一个守护精灵(光明或黑暗)。
出处:
char/family.cCheckLeaderQ(FMLEADERLV = 30、NPC_EventCheckFlg(meindex, 4))、FAMILY_Add;npc/npc_familyman.c第 5 号窗口。
注意事项:
- 家族名称不能含半角或全角空格,也不能与已有家族重名(saac 返回「已经有相同名字的家族成立了!」)。
- 原版代码是先扣 1 万石币再检查名称和守护兽:名称里有空格、或没选守护兽时直接返回,钱不会退。只有在 saac 那边失败(重名、家族数满)时才退还 10000。所以提交前一定确认名称没有空格、确实选了宠物。
- 全服最多 1000 个家族(saac
MAX_FAMILY)。
出处:
char/family.cFAMILY_Add、ACAddFM;saacacfamily.cACAddFM。
「正式成立」:凑满 5 人
刚建好的家族处于「未成立」状态,成立提示说「请在7天之内召集到10名族人」,游戏内说明也写 10 人,但实际判定在 saac:正式成员(含族长)达到 5 人即标记为「已成立」(fmsetupflag = 1)。
- 成立后 7 天内(
PREDEL_TIME = 7 天)没凑满,家族会被自动删除,所有在线成员收到「由於您的家族在七天之内没有召收到10名家族成员,所以被迫解散了!」。 - 已成立的家族如果因为有人退出而掉回 5 人以下,立刻变回未成立,并重新开始 7 天倒计时。
- 很多功能只对「已成立」家族开放:预约家族 PK、挑战庄园、召唤族人。
出处:saac
include/acfamily.h(MIN_MEMBERNUM 5、PREDEL_TIME 60*60*24*7)、acfamily.cACMemberJoinFM、ACMemberLeaveFM、delovertimeFMMem。网页版同样取 5(sa-server.tsFM_MIN_MEMBER)。
三、加入、审核与退出
申请加入
- 找家族管理员选「申请加入现有家族」,会列出全部家族。名称为蓝色的家族表示停止招募。
- 选一个家族按「加入」,你会变成「申请中」,族长(在线时)会收到「(名字 lv:等级)正要求加入您的家族喔!」。
- 要等族长或长老审核通过才算正式成员。
限制:组队中、战斗中不能申请;已经在别的家族(或申请中以外的状态)不能申请;对方关闭招募时会提示「此家族目前不愿意招收成员!」;家族满 100 人(saac MAX_MEMBERNUM)提示人数已到上限,满员时 saac 会自动关闭招募。
出处:
char/family.cFAMILY_Join、ACJoinFM;saacACJoinFM。
自动清理
| 情况 | 期限 | 结果 |
|---|---|---|
| 申请后一直没被审核 | 7 天 | 申请自动作废 |
| 正式成员很久没上线 | 15 天(每次上线/下线重置) | 自动退出家族 |
| 族长 | 不过期 | — |
出处:saac
acfamily.hPREDELMEMBER_TIME 60*60*24*15(注释写 30 天,实际值 15 天);ACJoinFM、ACFMCharLogin、ACFMCharLogout、delovertimeFMMem。
退出与解散
在家族管理员处选「退出或者解散家族」:
- 一般成员:直接退出。退出时会被强制下骑、恢复原本外形。
- 族长退出 = 解散家族,会再弹一次「家族解散了就无法再救回唷!」确认。解散时家族共同帐户的存款一并清空(家族管理员原话:「家族解散,家族存款也将一并清除喔!」),庄园也会被收回。
- 家族正在约战庄园时,族长不能解散。
_FM_JOINLIMIT:退出后要等JOINFAMILYTIME小时才能再加入别的家族。这个值默认为 0(不限制),私服可改。
出处:
char/family.cFAMILY_Leave、ACLeaveFM、ACDelFM;configfile.cgetJoinFamilyTime;saacACDelFM。
四、职位与权限
家族里有四种身份:族长、长老、一般成员、申请中。
| 操作 | 族长 | 长老 | 成员 |
|---|---|---|---|
| 审核申请 / 开除成员 | 可 | 可 | — |
| 开关招募 | 可 | 可 | — |
| 任命长老 | 可 | — | — |
| 修改家族主旨、重选守护兽 | 可 | — | — |
| 族长广播(频道 5) | 可 | — | — |
| 从家族共同帐户取钱 | 可 | 可 | — |
| 存钱到共同帐户 | 可 | 可 | 可 |
| 预约家族 PK、挑战/申请庄园、召唤族人 | 可 | — | — |
| 在家族之间留言板发言 | 可 | — | — |
| 让位 | 可 | — | — |
- 长老最多 3 位(saac
FMELDERNUM 3;游戏内说明写 5 位,与代码不符)。长老人选必须符合族长资格:Lv30 以上或已转生、并完成成人礼。 - 家族正在进行 PK 时不能开除成员(「家族目前正在战斗中,所以无法审核成员。」)。
- 让位:族长从在线、符合族长资格的族人中选一位,对方同意后互换身份。让位后原守护兽标记被清除,新族长要到家族管理员处重新指定守护兽。
出处:
char/family.cFAMILY_CheckMember、FAMILY_SetAcceptFlag、FAMILY_FixRule、FAMILY_LeaderFunc(CHANGE|L/Q/A)、ACFMJob;saacACFMAssignOcp、ACFixFMData(kindflag 11);gmsvchar/char.c登录时以CheckLeaderQ决定eventflag。
五、守护兽与守护精灵
家族守护兽
成立时从族长身上的宠物里选一只。它的作用:
- 家族加工 / 家族料理:守护兽本身会加工(合成)或料理时,用它合成会套用家族等级的成分基础值,家族越强合出来越好(见下表),而且成分上限更高。
- 不能交易、不能当宠物邮件:交易时提示「家族守护兽无法交易!」,寄宠物邮件时提示「家族守护兽无法传递邮件喔!」。
- 寄放在宠物店不影响(族长登录时会同时检查身上和寄放的宠物)。
族长每次登录时,如果身上和寄放处都找不到守护兽,会提示「家族守护兽消失了!请立刻再选定一只守护兽,否则家族在七天之後会消失唷!」,并重置 7 天删除计时。按 saac 的删除逻辑,这个计时只会删除未正式成立的家族;已成立的家族重新选守护兽即可(选完 saac 会取消删除计时)。
重选守护兽:族长在家族窗口里选「守护兽」,只有原来那只确实不在了才允许(「原本的守护兽还在唷。」)。
出处:
char/family.cACFMCharLogin、FAMILY_FixRule(X|P);char/trade.cTRADE_CheckItembuf(-15);char/petmail.cPETMAIL_sendPetMail;saacACFixFMDatakindflag 3/5、delovertimeFMMem。
家族等级与守护兽合成
家族等级由族长看到的家族总声望(内部值)决定:
| 家族等级 | 总声望内部值上限 | 约等于界面显示 | 守护兽合成基础值 |
|---|---|---|---|
| 0 | ≤ 10,000 | ≤ 100 | 0 |
| 1 | ≤ 30,000 | ≤ 300 | 33 |
| 2 | ≤ 100,000 | ≤ 1,000 | 52 |
| 3 | ≤ 500,000 | ≤ 5,000 | 77 |
| 4 | ≤ 1,500,000 | ≤ 15,000 | 108 |
| 5 | ≤ 5,000,000 | ≤ 50,000 | 145 |
| 6 | ≤ 15,000,000 | ≤ 150,000 | 188 |
| 7 | ≤ 50,000,000 | ≤ 500,000 | 237 |
| 8 | ≤ 200,000,000 | ≤ 2,000,000 | 292 |
| 9 | ≤ 500,000,000 | ≤ 5,000,000 | 353 |
| 10 | > 500,000,000 | > 5,000,000 | 420 |
声望在界面上显示的是内部值 ÷ 100(例如家族详细资料里的家族声望、个人声望都是 /100 后的数字)。合成的完整规则见 料理与合成。
出处:
char/family.cfmdplevelexp[]、getFmLv、FAMILY_Detail(/100);item/item_gen.cPetLv[]、PET_ADD_INGRED。
守护精灵
成立时二选一,之后不能更改:
- 光明精灵:族人施放魔法表第 0–31 号(以及第 105–107 号,仅道具施放的那条路径)的精灵时,MP 消耗 ×0.7(取整)。
- 黑暗精灵:魔法表第 32–81 号的精灵 MP 消耗 ×0.7。
家族管理员的说法是「光明精灵省回复、防御系咒术的气力,黑暗精灵省攻击性咒术的气力」。代码只按魔法表编号区间判断,这两段区间具体对应哪些精灵本文没有逐条核对。
出处:
magic/magic.cMAGIC_Use、MAGIC_DirectUse(MP_RATE 0.7);data/npc/family/familyman.conf第 2200–2203 号窗口。
六、家族声望
家族的强弱用声望衡量,有五个分项:冒险、饲育、合成、料理、战斗(PK)。
怎么涨
| 分项 | 来源 | 每次增加(内部值) |
|---|---|---|
| 冒险 | 族人第一次完成某个任务事件 | 按事件旗标查 FMAdvTbl:例如成人礼(旗标 4)= 10,旗标 1 = 15,旗标 35 = 225,旗标 46 = 840,旗标 71 = 15000,旗标 72 = 20000,旗标 117 = 15000;多数旗标为 0 |
| 饲育 | 族人的宠物在 31 级以上升级 | 宠物上一级的累计经验 ÷ 20000 |
| 合成 | 族人用宠物合成出装备 | 产物各成分值之和 ÷ 200 |
| 料理 | 族人用宠物料理出食物 | √(成分值之和) × 2^(成分种类数−2) × 随机 0~6 ÷ 200 |
| 战斗 | 家族 PK 场胜负 | 胜方从败方转走败方声望的 1/10(见第九节) |
- 同一个事件只算第一次,重复完成不会再加(「防洗声望」)。
- 申请中的人做这些事只涨个人声望,不进家族。
- 单次超过 5,000,000 的增量会被 saac 拒收;各分项上限 100,000,000。
出处:
npc/npcutil.cFMAdvTbl[]、NPC_EventSetFlg、AddFMAdv;char/char_data.c(饲育,level > 30、exp2 / 20000);item/item_gen.c(syndp、fooddp);saacACFixFMData(MAXRECVPOP 5000000、MAXFMPOPNUM)。
个人声望与家族总声望
每个角色有自己的个人声望:上面五类之外,人物升级时也会涨(本级所需经验 ÷ 20000),但人物升级只加个人声望,不加家族分项。个人声望上限 100,000,000。
家族的排名用的是家族总声望:
家族声望 = 冒险 + 饲育 + 合成 + 料理 + 战斗
家族总声望 = 家族声望 + Σ 正式成员的个人声望
族人在家族里赚到的冒险/饲育/合成/料理声望会同时加到家族分项和自己的个人声望,所以在总声望里等于算了两次;新成员加入时自带的个人声望也会算进总声望。这意味着拉高等级、声望高的玩家入族,能直接拉高家族排名。
出处:
char/char_base.cCHAR_HandleExp、CHAR_earnFame(MAX_PERSONALFAME);saacACFixFMData、ACMemberJoinFM、ACFixFMPK(fmtotalfame)。
七、家族频道与留言板
家族频道
每个家族有 6 个频道:
| 频道 | 名称 | 人数上限 |
|---|---|---|
| 0 | 全 | 200 |
| 1~4 | 小包厢 | 各 50 |
| 5 | 族长广播(只有族长能用) | — |
- 在家族窗口里加入频道后,你说的话只有同频道的族人听得到;进出频道会通知同频道的人。
- 在频道中想跟身边的人说话:在句子开头加
:(半角冒号)。反过来,不在频道中时句首加:,会把这句话发到你上一次加入的频道(快速频道)。 - 族长加入频道 5 后说的话,会以「[族长广播]名字: 内容」发给所有在线的正式成员和长老。
- 家族频道只在同一台游戏服务器(星球)内有效。
游戏内说明与家族管理员写的是「全频 50 人、包厢 10 人」,那是未开 _FMVER21 时的数值;本服务端开了 _FMVER21,按上表。
出处:
include/family.h(FAMILY_MAXCHANNEL 5、FAMILY_MAXMEMBER 200、FAMILY_MAXCHANNELMEMBER 50);char/family.cFAMILY_Channel;char/char_talk.cCHAR_Talk(:与频道 5)。
家族留言版
| 功能 | 谁能用 |
|---|---|
| 家族成员列表 | 族员可看;族长/长老可在这里审核、开除、任命 |
| 家族留言 | 本家族成员留言,最多保存 35 条 |
| 家族之间留言板 | 所有家族都能看,只有族长能写,最多 140 条 |
| 申请家族据点 | 族长申请无主庄园(见下节) |
| 家族间强者表 | 综合声望及各分项排行 |
出处:
npc/npc_fmdengon.c;saacacfamily.h(FAMILY_MEMONUM 35、FMSMEMONUM 140)。
八、家族银行
家族银行管理员有两个帐户:
家族个人帐户(存的是你自己的钱)
- 存款必须先加入家族;取款不受限制——退出家族后只要还有余额,照样能领。
- 个人帐户上限 1 亿石币(游戏内说明写一千万,与代码不符);取出后身上的钱不能超过携带上限(100 万 + 转生次数 × 180 万)。
家族共同帐户
- 任何正式成员都能存;只有族长和长老能取。
- 上限 1 亿石币(saac
FMMAXGOLD)。saac 在存入后直接把超出部分截掉,不会退回,存之前留意余额。 - 庄园商店的税收也进这个帐户(见第九节)。
出处:
char/family.cFAMILY_Bank(G个人、T共同);include/char_base.hCHAR_MAXBANKGOLDHAVE (10000*10000);char/char_base.cCHAR_getMaxHaveGold;saacACFixFMDatakindflag 6;npc/npc_bankman.c。
九、庄园
本服务端开了 _FAMILY_MANORNUM_CHANGE,庄园数量为 4 座(游戏内说明的「九大庄园」不适用):
| 庄园 | 庄园地图 | 族长家 | 对应村庄(收税) |
|---|---|---|---|
| 萨姆吉尔庄园 | 1040 | 1041 | 萨姆吉尔村(地图号 10xx) |
| 玛丽娜丝的庄园 | 2030 | 2031 | 玛丽娜丝村(20xx) |
| 加加村的庄园 | 3030 | 3031 | 加加村(30xx) |
| 卡鲁它那庄园 | 4030 | 4031 | 卡鲁它那村(40xx) |
出处:
include/version.h(MANORNUM 4、FMPOINTNUM 4);saacdata/fmpointdir/db_fmpoint;npc/npcutil.caddNpcFamilyTax。
拥有庄园的福利
- 族长家:守门员只放「拥有这座庄园的家族成员」或持有该庄园家族邀请函的人进入(邀请函在进门时收走)。
- 家族小护士(族长家):免费补满 HP、MP,宠物也会复活补满;组队时全队一起补。
- 家族银行:族长家里也有一位。
- 秘书(族长家):只有本庄园的族长能找她制作家族邀请函(萨姆吉尔 19001、玛丽娜丝 19002、加加 19003、卡鲁它那 19004)。她的选单里还有「学习骑乘同意书」(道具编号 19005~19008),但这几个编号在原版
itemset.txt中不存在,做不出来。 - 庄园税收:任何人在对应村庄(地图号 ÷ 100 = 10/20/30/40)的 NPC 商店买东西,成交额的 40% 由系统额外打进拥有该庄园的家族共同帐户(买家不用多付钱)。
- 家族骑宠:拥有庄园的家族可按职位骑
leaderride.txt指定的骑宠(族长三个名额、长老后两个、成员最后一个)。原版family.c里这段代码前面多了一行return;,以那份源码编译的服务端可能执行不到;网页版按family.c.bak的写法实现。详见 骑宠。
出处:
data/npc/genout/wpm_2030_56_27等守门员设定;npc/npc_fmhealer.c;npc/npc_fmletter.c、data/npc/family/fmletter.conf;npc/npc_itemshop.cNPC_AddItemBuy(maxgold*0.4);char/char_base.cCHAR_FmLeaderRide、data/leaderride.txt。
申请无主庄园
庄园没有主人时,族长在家族留言版 → 申请家族据点里选择即可迁入。条件(saac 判定):
- 申请人是族长,不在战斗中;
- 家族还没有庄园(一个家族只能有一座);
- 该庄园确实无主;
- 家族正式成员 ≥ 1 人(
MINAPPLYPNUM)。
游戏内说明写「声望 1000 且 30 人以上」,但这份 saac 只检查以上几项。
出处:
char/family.cFAMILY_SetPoint、ACSetFMPoint;saacACSetFMPoint(MINAPPLYPNUM 1)。
踢馆:挑战有主庄园
本服务端开了 _MANOR_PKRULE 与 _FIX_FAMILY_PK_LIMIT,规则如下:
下战书的条件(到该庄园的踢馆登记人处):
- 必须是族长,且家族已正式成立。
- 自己的家族综合声望排行前 20 名。
- 家族还没有庄园(若服务器把
FMPOINTPK设为开启,则已有庄园的家族也能挑战别的庄园——默认关闭,私服可改)。 - 家族没有正在挑战另一座庄园。
- 时间在 18:00 至次日 02:59(以 UTC+8 计)。
- 该庄园不在准备期或休战期。
流程:
- 下战书后进入准备期 1 天(
challengewait = 86400秒;开战时刻会对齐到整点后 30 分)。期间随时可以问登记人剩余时间。 - 开战前一小时内,族长可以到家族召唤员处召唤族人(不在战斗中、不在 PK 地图上的正式成员会收到邀请;接受会脱离队伍并传送过去)。
- 时间到,双方族人通过家族对战向导进入庄园竞技场(每方最多 50 人,单人入场,组队要先解散),再经过 15 分钟准备时间后开战。
- 场内开放决斗,打输或逃跑的人会被「战败离场」送出。某一方场内人数先归零即败;庄园战没有时间到点判定。
- 挑战方获胜即取得庄园;若开了
FMPOINTPK且挑战方原本另有庄园,两家会对换庄园。防守方获胜则保住庄园。 - 不论胜负,之后进入休战期 2 天(
peacewait = 172800秒),期间不能挑战。
庄园战在 _MANOR_PKRULE 下不转移家族声望,只决定庄园归属(游戏内说明说胜方还能拿到败方 1/10 声望,与代码不符)。
出处:
npc/npc_manorsman.c(PK_LIMIT 20、p->tm_hour<18 && p->tm_hour>2、NPC_ManorSavePKSchedule的dueltime与人数 50);data/npc/family/manorsman.arg1~4;npc/npc_fmwarpman.cNPC_FMWarpManLoop;npc/npc_fmpkcallman.c;configfile.cgetFmPointPK。
十、家族 PK 场
不涉及庄园的家族对战在 PK竞技聚会场 141 进行(从竞技场 130 进入),共 5 个场地:草原 142、丛林 143、武斗场 144、水池 145、树洞 146,每个场地由一位场地预约人管理。
预约
- 只有已正式成立家族的族长能预约(其他人只能看赛程)。
- 每位预约人管理 24 个时段,每 60 分钟一场(
fightinterval = 60);当前这一场不能预约。 - 每个家族在同一位预约人处只能排一场。
- 选时段 → 从家族列表选对手 → 设定细节:准备时间 1
40 分钟(默认 5)、每方最多人数 150(默认 50)、胜利条件(生存战 / 打飞战)。 - 设定要在 60 个循环拍(约 60 秒)内完成,否则作废;送出后,对方族长要在约 20 分钟内到同一位预约人那里点同一时段表示接受,否则挑战作废。
出处:
npc/npc_scheduleman.c;data/npc/family/scheduleman.arg1~5(challengetimeout:1200、settingtimeout:60、fightinterval:60,超时按loopinterval 1000毫秒一拍递减)。
开打
- 对战时段一到(整点),场内广播「可以准备进场了!」;双方族人找该场地的家族对战向导入场(申请中的人不能进场,组队要先解散,人数达到设定上限就进不去)。
- 族长可在聚会场的家族召唤员处召唤族人(开战前一小时内)。
- 准备时间倒数结束后「开战罗~!!」,场内开放决斗。
- 胜负:
- 任一方场内人数归零,另一方立即获胜;双方都归零算平手。
- 到该小时第 59 分仍未分出胜负:生存战比剩余人数,多者胜;打飞战比「进场人数 − 剩余人数」(被打出场的人数),少者胜;相同算平手。
- 胜方家族的 PK 声望增加「败方家族声望 ÷ 10」,败方减少同样数值(败方 PK 声望下限 −20,000,000)。双方族人会收到「家族声望提高/减少了 N 点」(N 已换算成显示值)。
- 结束后所有人被送回向导旁边。
出处:
npc/npc_fmwarpman.c(FMWARPMAN_CLEANPLACE 59、win0/1、CheckLeavePK);callfromac.c/char/family.cACFixFMPK(data / 100);saacACFixFMPK(award = fmpopular / 10、MINFMPOPNUM)。
另外,在任一家族 PK 地图上,不同家族的玩家不能组队。
出处:
char/char_party.cCHAR_JoinParty(fmpkflnum[])。
十一、网页版说明
网页版把上面这些规则移植进了自己的服务端:家族资料存放在服务端的家族表里(替代 saac),成立门槛、5 人成立、100 人上限、3 位长老、频道、银行、庄园挑战(准备 1 天、休战 2 天、18:00–03:00)、家族 PK 预约与 40% 庄园税都按原版数值实现。和原版一样,网页版没有「邀请别人加入家族」的功能:入族只能到家族管理员处申请,再由族长或长老在成员列表里审核。
出处:
packages/tools/src/sa-server.ts家族与家族 PK 场相关段落;packages/client/src/ui/SocialUI.tsshowPlayerMenu(注释「2.5 没有『邀请加入家族』」)。