石器百科 开始游戏

家族

家族是石器时代里最大的社交单位:一群玩家挂同一个家族名,共享声望排名、家族频道、留言板和银行;声望够高的家族还能占领庄园,拿到族长家、免费护士、家族银行、庄园商店税收等福利。本文按「建立 → 经营 → 争夺庄园」的顺序讲,所有数字来自原版服务端源码。

要先说明一点:家族的大部分数据(成员名单、声望、共同帐户、庄园归属)不在游戏服务器 gmsv 里,而是保存在帐号服务器 saac(AC)里,gmsv 只是转发请求。本文同时查了两边的源码,凡是只有 saac 能决定的数字都会注明「saac」。

出处:gmsv char/family.c、include/family.h;saac acfamily.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/ 下的地图文件头。

二、成立家族

条件与费用

到家族管理员处选「申请成立新的家族」,要同时满足:

  1. 还没有加入任何家族;不在战斗中。
  2. 等级 30 以上,或者已经转生过(转生后等级不限)。
  3. 完成成人礼(事件旗标 4)。
  4. 身上至少 10000 石币(成立手续费,直接扣除)。

通过后会弹出成立表单,填写:家族名称、家族主旨(不填会记成「无」)、从身上宠物里选一只家族守护兽、选一个守护精灵(光明或黑暗)。

出处:char/family.c CheckLeaderQ(FMLEADERLV = 30、NPC_EventCheckFlg(meindex, 4))、FAMILY_Add;npc/npc_familyman.c 第 5 号窗口。

注意事项:

  • 家族名称不能含半角或全角空格,也不能与已有家族重名(saac 返回「已经有相同名字的家族成立了!」)。
  • 原版代码是先扣 1 万石币再检查名称和守护兽:名称里有空格、或没选守护兽时直接返回,钱不会退。只有在 saac 那边失败(重名、家族数满)时才退还 10000。所以提交前一定确认名称没有空格、确实选了宠物。
  • 全服最多 1000 个家族(saac MAX_FAMILY)。

出处:char/family.c FAMILY_Add、ACAddFM;saac acfamily.c ACAddFM。

「正式成立」:凑满 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.c ACMemberJoinFM、ACMemberLeaveFM、delovertimeFMMem。网页版同样取 5(sa-server.ts FM_MIN_MEMBER)。

三、加入、审核与退出

申请加入

  1. 找家族管理员选「申请加入现有家族」,会列出全部家族。名称为蓝色的家族表示停止招募。
  2. 选一个家族按「加入」,你会变成「申请中」,族长(在线时)会收到「(名字 lv:等级)正要求加入您的家族喔!」。
  3. 要等族长或长老审核通过才算正式成员。

限制:组队中、战斗中不能申请;已经在别的家族(或申请中以外的状态)不能申请;对方关闭招募时会提示「此家族目前不愿意招收成员!」;家族满 100 人(saac MAX_MEMBERNUM)提示人数已到上限,满员时 saac 会自动关闭招募。

出处:char/family.c FAMILY_Join、ACJoinFM;saac ACJoinFM。

自动清理

情况 期限 结果
申请后一直没被审核 7 天 申请自动作废
正式成员很久没上线 15 天(每次上线/下线重置) 自动退出家族
族长 不过期 —

出处:saac acfamily.h PREDELMEMBER_TIME 60*60*24*15(注释写 30 天,实际值 15 天);ACJoinFM、ACFMCharLogin、ACFMCharLogout、delovertimeFMMem。

退出与解散

在家族管理员处选「退出或者解散家族」:

  • 一般成员:直接退出。退出时会被强制下骑、恢复原本外形。
  • 族长退出 = 解散家族,会再弹一次「家族解散了就无法再救回唷!」确认。解散时家族共同帐户的存款一并清空(家族管理员原话:「家族解散,家族存款也将一并清除喔!」),庄园也会被收回。
  • 家族正在约战庄园时,族长不能解散。
  • _FM_JOINLIMIT:退出后要等 JOINFAMILYTIME 小时才能再加入别的家族。这个值默认为 0(不限制),私服可改。

出处:char/family.c FAMILY_Leave、ACLeaveFM、ACDelFM;configfile.c getJoinFamilyTime;saac ACDelFM。

四、职位与权限

家族里有四种身份:族长、长老、一般成员、申请中。

操作 族长 长老 成员
审核申请 / 开除成员 可 可 —
开关招募 可 可 —
任命长老 可 — —
修改家族主旨、重选守护兽 可 — —
族长广播(频道 5) 可 — —
从家族共同帐户取钱 可 可 —
存钱到共同帐户 可 可 可
预约家族 PK、挑战/申请庄园、召唤族人 可 — —
在家族之间留言板发言 可 — —
让位 可 — —
  • 长老最多 3 位(saac FMELDERNUM 3;游戏内说明写 5 位,与代码不符)。长老人选必须符合族长资格:Lv30 以上或已转生、并完成成人礼。
  • 家族正在进行 PK 时不能开除成员(「家族目前正在战斗中,所以无法审核成员。」)。
  • 让位:族长从在线、符合族长资格的族人中选一位,对方同意后互换身份。让位后原守护兽标记被清除,新族长要到家族管理员处重新指定守护兽。

出处:char/family.c FAMILY_CheckMember、FAMILY_SetAcceptFlag、FAMILY_FixRule、FAMILY_LeaderFunc(CHANGE|L/Q/A)、ACFMJob;saac ACFMAssignOcp、ACFixFMData(kindflag 11);gmsv char/char.c 登录时以 CheckLeaderQ 决定 eventflag。

五、守护兽与守护精灵

家族守护兽

成立时从族长身上的宠物里选一只。它的作用:

  • 家族加工 / 家族料理:守护兽本身会加工(合成)或料理时,用它合成会套用家族等级的成分基础值,家族越强合出来越好(见下表),而且成分上限更高。
  • 不能交易、不能当宠物邮件:交易时提示「家族守护兽无法交易!」,寄宠物邮件时提示「家族守护兽无法传递邮件喔!」。
  • 寄放在宠物店不影响(族长登录时会同时检查身上和寄放的宠物)。

族长每次登录时,如果身上和寄放处都找不到守护兽,会提示「家族守护兽消失了!请立刻再选定一只守护兽,否则家族在七天之後会消失唷!」,并重置 7 天删除计时。按 saac 的删除逻辑,这个计时只会删除未正式成立的家族;已成立的家族重新选守护兽即可(选完 saac 会取消删除计时)。

重选守护兽:族长在家族窗口里选「守护兽」,只有原来那只确实不在了才允许(「原本的守护兽还在唷。」)。

出处:char/family.c ACFMCharLogin、FAMILY_FixRule(X|P);char/trade.c TRADE_CheckItembuf(-15);char/petmail.c PETMAIL_sendPetMail;saac ACFixFMData kindflag 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.c fmdplevelexp[]、getFmLv、FAMILY_Detail(/100);item/item_gen.c PetLv[]、PET_ADD_INGRED。

守护精灵

成立时二选一,之后不能更改:

  • 光明精灵:族人施放魔法表第 0–31 号(以及第 105–107 号,仅道具施放的那条路径)的精灵时,MP 消耗 ×0.7(取整)。
  • 黑暗精灵:魔法表第 32–81 号的精灵 MP 消耗 ×0.7。

家族管理员的说法是「光明精灵省回复、防御系咒术的气力,黑暗精灵省攻击性咒术的气力」。代码只按魔法表编号区间判断,这两段区间具体对应哪些精灵本文没有逐条核对。

出处:magic/magic.c MAGIC_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.c FMAdvTbl[]、NPC_EventSetFlg、AddFMAdv;char/char_data.c(饲育,level > 30、exp2 / 20000);item/item_gen.c(syndp、fooddp);saac ACFixFMData(MAXRECVPOP 5000000、MAXFMPOPNUM)。

个人声望与家族总声望

每个角色有自己的个人声望:上面五类之外,人物升级时也会涨(本级所需经验 ÷ 20000),但人物升级只加个人声望,不加家族分项。个人声望上限 100,000,000。

家族的排名用的是家族总声望:

家族声望 = 冒险 + 饲育 + 合成 + 料理 + 战斗
家族总声望 = 家族声望 + Σ 正式成员的个人声望

族人在家族里赚到的冒险/饲育/合成/料理声望会同时加到家族分项和自己的个人声望,所以在总声望里等于算了两次;新成员加入时自带的个人声望也会算进总声望。这意味着拉高等级、声望高的玩家入族,能直接拉高家族排名。

出处:char/char_base.c CHAR_HandleExp、CHAR_earnFame(MAX_PERSONALFAME);saac ACFixFMData、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.c FAMILY_Channel;char/char_talk.c CHAR_Talk(: 与频道 5)。

家族留言版

功能 谁能用
家族成员列表 族员可看;族长/长老可在这里审核、开除、任命
家族留言 本家族成员留言,最多保存 35 条
家族之间留言板 所有家族都能看,只有族长能写,最多 140 条
申请家族据点 族长申请无主庄园(见下节)
家族间强者表 综合声望及各分项排行

出处:npc/npc_fmdengon.c;saac acfamily.h(FAMILY_MEMONUM 35、FMSMEMONUM 140)。

八、家族银行

家族银行管理员有两个帐户:

家族个人帐户(存的是你自己的钱)

  • 存款必须先加入家族;取款不受限制——退出家族后只要还有余额,照样能领。
  • 个人帐户上限 1 亿石币(游戏内说明写一千万,与代码不符);取出后身上的钱不能超过携带上限(100 万 + 转生次数 × 180 万)。

家族共同帐户

  • 任何正式成员都能存;只有族长和长老能取。
  • 上限 1 亿石币(saac FMMAXGOLD)。saac 在存入后直接把超出部分截掉,不会退回,存之前留意余额。
  • 庄园商店的税收也进这个帐户(见第九节)。

出处:char/family.c FAMILY_Bank(G 个人、T 共同);include/char_base.h CHAR_MAXBANKGOLDHAVE (10000*10000);char/char_base.c CHAR_getMaxHaveGold;saac ACFixFMData kindflag 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);saac data/fmpointdir/db_fmpoint;npc/npcutil.c addNpcFamilyTax。

拥有庄园的福利

  • 族长家:守门员只放「拥有这座庄园的家族成员」或持有该庄园家族邀请函的人进入(邀请函在进门时收走)。
  • 家族小护士(族长家):免费补满 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.c NPC_AddItemBuy(maxgold*0.4);char/char_base.c CHAR_FmLeaderRide、data/leaderride.txt。

申请无主庄园

庄园没有主人时,族长在家族留言版 → 申请家族据点里选择即可迁入。条件(saac 判定):

  • 申请人是族长,不在战斗中;
  • 家族还没有庄园(一个家族只能有一座);
  • 该庄园确实无主;
  • 家族正式成员 ≥ 1 人(MINAPPLYPNUM)。

游戏内说明写「声望 1000 且 30 人以上」,但这份 saac 只检查以上几项。

出处:char/family.c FAMILY_SetPoint、ACSetFMPoint;saac ACSetFMPoint(MINAPPLYPNUM 1)。

踢馆:挑战有主庄园

本服务端开了 _MANOR_PKRULE 与 _FIX_FAMILY_PK_LIMIT,规则如下:

下战书的条件(到该庄园的踢馆登记人处):

  1. 必须是族长,且家族已正式成立。
  2. 自己的家族综合声望排行前 20 名。
  3. 家族还没有庄园(若服务器把 FMPOINTPK 设为开启,则已有庄园的家族也能挑战别的庄园——默认关闭,私服可改)。
  4. 家族没有正在挑战另一座庄园。
  5. 时间在 18:00 至次日 02:59(以 UTC+8 计)。
  6. 该庄园不在准备期或休战期。

流程:

  1. 下战书后进入准备期 1 天(challengewait = 86400 秒;开战时刻会对齐到整点后 30 分)。期间随时可以问登记人剩余时间。
  2. 开战前一小时内,族长可以到家族召唤员处召唤族人(不在战斗中、不在 PK 地图上的正式成员会收到邀请;接受会脱离队伍并传送过去)。
  3. 时间到,双方族人通过家族对战向导进入庄园竞技场(每方最多 50 人,单人入场,组队要先解散),再经过 15 分钟准备时间后开战。
  4. 场内开放决斗,打输或逃跑的人会被「战败离场」送出。某一方场内人数先归零即败;庄园战没有时间到点判定。
  5. 挑战方获胜即取得庄园;若开了 FMPOINTPK 且挑战方原本另有庄园,两家会对换庄园。防守方获胜则保住庄园。
  6. 不论胜负,之后进入休战期 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.c NPC_FMWarpManLoop;npc/npc_fmpkcallman.c;configfile.c getFmPointPK。

十、家族 PK 场

不涉及庄园的家族对战在 PK竞技聚会场 141 进行(从竞技场 130 进入),共 5 个场地:草原 142、丛林 143、武斗场 144、水池 145、树洞 146,每个场地由一位场地预约人管理。

预约

  • 只有已正式成立家族的族长能预约(其他人只能看赛程)。
  • 每位预约人管理 24 个时段,每 60 分钟一场(fightinterval = 60);当前这一场不能预约。
  • 每个家族在同一位预约人处只能排一场。
  • 选时段 → 从家族列表选对手 → 设定细节:准备时间 140 分钟(默认 5)、每方最多人数 150(默认 50)、胜利条件(生存战 / 打飞战)。
  • 设定要在 60 个循环拍(约 60 秒)内完成,否则作废;送出后,对方族长要在约 20 分钟内到同一位预约人那里点同一时段表示接受,否则挑战作废。

出处:npc/npc_scheduleman.c;data/npc/family/scheduleman.arg1~5(challengetimeout:1200、settingtimeout:60、fightinterval:60,超时按 loopinterval 1000 毫秒一拍递减)。

开打

  1. 对战时段一到(整点),场内广播「可以准备进场了!」;双方族人找该场地的家族对战向导入场(申请中的人不能进场,组队要先解散,人数达到设定上限就进不去)。
  2. 族长可在聚会场的家族召唤员处召唤族人(开战前一小时内)。
  3. 准备时间倒数结束后「开战罗~!!」,场内开放决斗。
  4. 胜负:
    • 任一方场内人数归零,另一方立即获胜;双方都归零算平手。
    • 到该小时第 59 分仍未分出胜负:生存战比剩余人数,多者胜;打飞战比「进场人数 − 剩余人数」(被打出场的人数),少者胜;相同算平手。
  5. 胜方家族的 PK 声望增加「败方家族声望 ÷ 10」,败方减少同样数值(败方 PK 声望下限 −20,000,000)。双方族人会收到「家族声望提高/减少了 N 点」(N 已换算成显示值)。
  6. 结束后所有人被送回向导旁边。

出处:npc/npc_fmwarpman.c(FMWARPMAN_CLEANPLACE 59、win 0/1、CheckLeavePK);callfromac.c / char/family.c ACFixFMPK(data / 100);saac ACFixFMPK(award = fmpopular / 10、MINFMPOPNUM)。

另外,在任一家族 PK 地图上,不同家族的玩家不能组队。

出处:char/char_party.c CHAR_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.ts showPlayerMenu(注释「2.5 没有『邀请加入家族』」)。