寄售行上新货不知道挂多少钱,定价建议器按近三十笔成交的加权均价给出建议价:越新的成交权重越高,异常大单剔除,建议价随市场呼吸而不是拍脑袋。
成交写入样本环,建议价按时间衰减加权计算,超三十笔的旧样本挤出新环。actor是字符串,转对象后读样本。
local samples = {}
local function addSample(price)
table.insert(samples, { p = price, t = os.time() })
if #samples > 30 then
table.remove(samples, 1)
end
end
local function suggestPrice()
local sum, wsum = 0, 0
local now = os.time()
for _, s in ipairs(samples) do
local w = 3 - math.floor((now - s.t) / 3600)
if w < 1 then w = 1 end
sum = sum + s.p * w
wsum = wsum + w
end
if wsum == 0 then return 0 end
return math.floor(sum / wsum)
end
入环前与建议价比较,偏离五倍的样本标记为异常不参与统计,防单笔大单扭曲建议价。actor是字符串,转对象后留痕。
local function feedPrice(price)
local base = suggestPrice()
if base > 0 and (price > base * 5 or price < base / 5) then
setsysvar("PRICE_OUTLIER", price)
return
end
addSample(price)
end
构造递增成交序列验证建议价平滑跟随;注入十倍大单验证剔除闸门生效。上线后对比建议价与实际成交价的贴合度,建议价长期高于成交价说明样本被卖方操纵,查挂单侧。
os.time按秒衰减权重,同一小时内的成交权重相同,时效梯度要按更细粒度换算才平滑。samples表的读写没有锁,多入口并发写入在Lua单线程下安全,嵌到多线程环境要加队列。剔除五倍阈值的口径按绝对倍数,低价道具的一倍波动就超阈值,阈值改按分位数动态计算更公允。suggestPrice在样本为零时返回零,调用方要处理零值,显示层写“暂无行情”。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 装备回收商 NPC 每天按评分收购玩家的装备,裁决之杖、骨玉权杖按攻击、持久加权打分,榜上只要前五名。数…
实战应用:用在哪里 沙巴克攻城是全服行会战的最高舞台:攻方砸开城门、抢占皇宫,守方依托城墙与复活点反打。规则设计的关键是节奏…
实战应用:用在哪里 影分身玩法给法师职业补上生存短板:危急时刻召唤四个影分身分担仇恨,敌人需要在六格范围内分辨真身,猜错就浪…
实战应用:用在哪里 组队邀请、行会宣战这类关键信令丢了没有兜底,玩家只能反复手点,高峰期体验很差。重试机制给信令加确认回执:…
实战应用:用在哪里 新资料片上线首日预约量常是日常十倍,一口气全开会让数据库与登录网关同时过载。滚动开区把开区动作排成队列:…
实战应用:用在哪里 百人同屏的沙巴克外围战场,每个玩家每秒跑动会触发数次位置更新,全部即时下发时广播量随人数平方增长,网关先…