行会成员之间缺乏正式的切磋渠道,私下约战没有奖励激励。行会演武堂让成员在行会驻地内切磋比武:切磋胜负给双方积分,周积分排行前三获得行会贡献与限定称号。切磋的核心是让切磋有规则、有奖励、有排行,把PVP从野外混战变成有组织的竞技。
切磋由一方发起另一方同意后开始,战斗中双方不掉装备不掉经验;切磋有三分钟时限,超时按剩余血量百分比判定胜负。示例代码如下:
-- 行会演武堂:切磋规则
local player = class(actor)
local function startSpar(player, opponentName)
local mate = class(opponentName)
if mate == nil then
sendmsg(player, 1, 0, "对方不在线。")
return
end
local myGuild = getmyguild(player)
local oppGuild = getmyguild(mate)
if myGuild ~= oppGuild then
sendmsg(player, 1, 0, "只能与同会成员切磋。")
return
end
setplayvar(player, "HUMAN", "SparOpponent", opponentName, true)
setplayvar(mate, "HUMAN", "SparOpponent", getbaseinfo(player, 3), true)
sendmsg(player, 1, 0, "切磋开始,时限 3 分钟!")
end
切磋胜利积三分失败积一分,周积分排行前三获得行会贡献与演武堂限定称号;积分每周一清零重计,保证每周都有新的排名机会。示例代码如下:
-- 积分结算:排行与奖励
local player = class(actor)
local SPAR_REWARDS = {{3, "演武高手", 100}, {2, "演武新秀", 50}, {1, "演武参与者", 20}}
local function settleSpar(player, sortedMembers)
for rank, m in ipairs(sortedMembers) do
local mate = class(m.name)
if rank <= 3 then
setplayvar(mate, "HUMAN", "SparTitle", SPAR_REWARDS[rank][2], true)
setplayvar(mate, "HUMAN", "SectContrib",
tonumber(getplayvar(mate, "HUMAN", "SectContrib") or 0) + SPAR_REWARDS[rank][3], true)
sendmsg(mate, 1, 0, "演武堂第 " .. rank .. " 名!贡献 +" .. SPAR_REWARDS[rank][3])
end
end
end
验证四条路径:切磋发起与同意流程正确、三分钟超时按血量判定胜负、周积分清零后重新累计、跨会切磋被拒绝。运营看三个数据:每周切磋场次、参与切磋的成员占比、切磋成员的周留存率,切磋参与率低于两成增加切磋奖励的行会贡献倍率;留存率提升证明切磋促进了社交黏性。
切磋曾不掉血不掉蓝,变成了纯粹的动画演示毫无紧张感,改为切磋中正常扣血但死亡不负惩罚。积分排行曾按累计总分不按胜率,高活跃低胜率的成员排在低活跃高胜率之上,排行改为按胜率与场次加权。切磋冷却曾缺失,两人反复互刷积分,同对角色之间加一小时的切磋冷却。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
学员常见误区 Lua函数可返回多个值,学员用固定变量数接收时如果变量少于返回值,多余返回值被静默丢弃;如果变量多于返回值,多…
设计初衷 行会建筑的死穴是一次全解锁:会员没有逐步建设的过程感。梯度设计让每栋建筑都有前置条件和资源门槛。 数值模型 建筑分…
设计初衷 婚姻系统的属性加成是社交玩法的经济锚点:加成太弱没人结婚,太强则"为了属性被迫结婚"扭曲了社交本质。婚姻边界的设计…
设计初衷 宝箱类玩法的信任危机都源于同一句话:"概率是不是骗人的。"期望公示把概率从事后争议变成事前契约:奖池概率表全量公示…
设计初衷 流拍物(拍卖未成交的退回物品)堆积在卖家背包里成为死资产:低价值物流拍后无人问津,高价值物流拍后卖家不愿降价重拍。…
业务场景 沙巴克战功榜每周结算,玩家提交战功前不知道"再打多少能进前 10、前 10 的奖励是什么"。名次预览:输入自己的战…