添加项目文件。
This commit is contained in:
@@ -0,0 +1,335 @@
|
||||
|
||||
<title>击杀配置</title>
|
||||
|
||||
<style>
|
||||
.layui-form-label { width: 400px; }
|
||||
.kill-form legend { font-size: 14px; font-weight: normal; }
|
||||
.kill-form .layui-form-mid { font-size: 12px; color: #999; }
|
||||
.layui-elem-field { border-color: #666; }
|
||||
.kill-row { display: flex; flex-wrap: wrap; gap: 15px; margin: 10px 0; }
|
||||
.kill-row .layui-form-item { display: flex; align-items: center; margin: 0; white-space: nowrap; }
|
||||
.kill-row .layui-form-label { width: auto; text-align: right; padding-right: 8px; font-size: 14px; }
|
||||
.kill-row .layui-input-inline { width: 80px; }
|
||||
</style>
|
||||
|
||||
<div class="layui-card layadmin-header">
|
||||
<div class="layui-breadcrumb" lay-filter="breadcrumb">
|
||||
<a lay-href="">主页</a>
|
||||
<a><cite>游戏管理</cite></a>
|
||||
<a><cite>击杀配置</cite></a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="layui-fluid">
|
||||
<div class="layui-card">
|
||||
<div class="layui-card-header">
|
||||
<div class="layui-btn-container">
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" lay-filter="init-kill"><i class="layui-icon layui-icon-refresh"></i> 初始化配置</button>
|
||||
<button class="layui-btn layui-btn-sm" lay-filter="save-kill"><i class="layui-icon layui-icon-ok"></i> 保存配置</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-warm" lay-filter="reload-kill"><i class="layui-icon layui-icon-refresh"></i> 刷新</button>
|
||||
<button class="layui-btn layui-btn-sm layui-btn-normal" onclick="saveSection('KillConfig')"><i class="layui-icon layui-icon-export"></i> 保存到初始化文件</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-card-body">
|
||||
<form class="layui-form kill-form" id="form-kill" style="padding: 20px;">
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>用户设置</legend>
|
||||
</fieldset>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户盈亏调节</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="normalizationFactorPlayer" class="layui-input" placeholder="用户盈亏调节灵敏度">
|
||||
</div>
|
||||
<div class="layui-form-mid">公式: 原始玩家值 = -(当前余额-累计充值-注册赠送) / 此值, 玩家因子 = 1+原始玩家值。值越大调节越平缓。</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">击杀率下限</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="minPlayerModifier" class="layui-input" placeholder="击杀率下限倍数">
|
||||
</div>
|
||||
<div class="layui-form-mid">玩家因子最小值(下限)。<br>默认0.3=盈利再多也保持30%击杀率; 改为0=可能完全打不死鱼; 改为1=盈利再高也不压鱼</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">击杀率上限</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="maxPlayerModifier" class="layui-input" placeholder="击杀率上限倍数">
|
||||
</div>
|
||||
<div class="layui-form-mid">玩家因子最大值(上限)。<br>默认2.0=亏损再多最高200%击杀率; 改为1=亏损再多也不补偿; 改为5=亏损玩家可获5倍击杀率(易刷钱)</div>
|
||||
</div>
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>系统设置</legend>
|
||||
</fieldset>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">系统盈利目标</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="targetSystemProfit" class="layui-input" placeholder="系统期望累计盈利目标">
|
||||
</div>
|
||||
<div class="layui-form-mid">已弃用,实际由下方系统日收益替代。保留仅作参考</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">系统平滑系数</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="normalizationFactorSystem" class="layui-input" placeholder="系统调节平滑系数">
|
||||
</div>
|
||||
<div class="layui-form-mid">公式: 系统差值=(当日盈利-日目标)/此值, 系统因子=1+系统差值。值越大调节越平缓。</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">系统击杀下限</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="minSystemModifier" class="layui-input" placeholder="系统整体击杀率下限">
|
||||
</div>
|
||||
<div class="layui-form-mid">系统因子最小值(下限)。<br>默认0.95=系统亏损再大最低95%击杀率; 改为0.5=系统亏损时可以压到50%; 改为0=系统亏损时可完全禁止击杀(危险)</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">系统击杀上限</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="maxSystemModifier" class="layui-input" placeholder="系统整体击杀率上限">
|
||||
</div>
|
||||
<div class="layui-form-mid">系统因子最大值(上限)。<br>默认1.05=盈利再多最高105%; 改为1.2=系统可上调20%击杀率刺激消费; 改为1=关闭系统调节(永远固定1.0)</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">系统日收益</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="daySystemGold" class="layui-input" placeholder="系统每日收益金额">
|
||||
</div>
|
||||
<div class="layui-form-mid">当日系统净盈利的锚点值。实际盈利高于此→调高击杀率鼓励消费;低于此→调低击杀率回收金币。</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">全局播报最低金币</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="globalAnnounceMinGold" class="layui-input" placeholder="全局击杀播报最低金币">
|
||||
</div>
|
||||
<div class="layui-form-mid">击杀获得金币 ≥ 此值时才触发全局播报,0=全部播报</div>
|
||||
</div>
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>限制设置</legend>
|
||||
</fieldset>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">IP限制</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="ipCount" class="layui-input" placeholder="IP关联用户数限制">
|
||||
</div>
|
||||
<div class="layui-form-mid">相同IP关联超过此数量的用户会被屏蔽</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">违规值限制</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="violateValue" class="layui-input" placeholder="违规值限制" step="0.01">
|
||||
</div>
|
||||
<div class="layui-form-mid">公式: 被屏蔽用户直接使用此值作为玩家因子(跳过盈亏调节)。正常用户使用各自因子配置中的系统因子(默认1=不调节)。默认0.2=黑名单击杀率16%左右(KillWeight=8000时)。值越大击杀率越高(无限制范围,注意风险)</div>
|
||||
</div>
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>补偿系数 (CompensateQuota > 0 时生效)</legend>
|
||||
</fieldset>
|
||||
<div class="kill-row">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Boss鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="compensateBossRate" class="layui-input" placeholder="Boss鱼补偿系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">黄金鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="compensateGoldRate" class="layui-input" placeholder="黄金鱼补偿系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">特殊鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="compensateSpecialRate" class="layui-input" placeholder="特殊鱼补偿系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">普通鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="compensateOrdinary" class="layui-input" placeholder="普通鱼补偿系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-mid">在用户因子基础上按鱼种额外乘以系数(提升击杀率)。公式: 最终用户因子 = 限制范围(玩家因子 × 鱼种系数, 下限, 上限)</div>
|
||||
</div>
|
||||
<fieldset class="layui-elem-field layui-field-title">
|
||||
<legend>罚款系数 (PenaltyQuota > 0 时生效)</legend>
|
||||
</fieldset>
|
||||
<div class="kill-row">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">Boss鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="penaltyBossRate" class="layui-input" placeholder="Boss鱼罚款系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">黄金鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="penaltyGoldRate" class="layui-input" placeholder="黄金鱼罚款系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">特殊鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="penaltySpecialRate" class="layui-input" placeholder="特殊鱼罚款系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">普通鱼</label>
|
||||
<div class="layui-input-inline">
|
||||
<input type="number" name="penaltyOrdinary" class="layui-input" placeholder="普通鱼罚款系数" step="0.01">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-mid">在用户因子基础上按鱼种额外乘以系数(降低击杀率)。公式: 最终用户因子 = 限制范围(玩家因子 × 鱼种系数, 下限, 上限)</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
layui.use(['admin', 'form', 'layer'], function () {
|
||||
var $ = layui.$,
|
||||
admin = layui.admin,
|
||||
form = layui.form,
|
||||
layer = layui.layer,
|
||||
setter = layui.setter;
|
||||
|
||||
var gameConfig = null;
|
||||
|
||||
setTimeout(function() {
|
||||
if (window.parent && window.parent.$ && window.parent.layer) {
|
||||
window.parent.$('.layui-layer-shade').remove();
|
||||
window.parent.layer.closeAll();
|
||||
}
|
||||
$('.layui-layer-shade').remove();
|
||||
layer.closeAll();
|
||||
}, 100);
|
||||
|
||||
function loadConfig() {
|
||||
admin.req({
|
||||
method: "get",
|
||||
url: setter.baseurl + "adminapi/GameConfig",
|
||||
done: function (res) {
|
||||
if (res.code === 0 && res.data) {
|
||||
gameConfig = res.data;
|
||||
fillForms();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function fillForms() {
|
||||
if (gameConfig.killConfig) {
|
||||
var k = gameConfig.killConfig;
|
||||
$('#form-kill input[name="normalizationFactorPlayer"]').val(k.normalizationFactorPlayer || 50000);
|
||||
$('#form-kill input[name="minPlayerModifier"]').val(k.minPlayerModifier || 0.3);
|
||||
$('#form-kill input[name="maxPlayerModifier"]').val(k.maxPlayerModifier || 2.0);
|
||||
$('#form-kill input[name="targetSystemProfit"]').val(k.targetSystemProfit || 1000000);
|
||||
$('#form-kill input[name="normalizationFactorSystem"]').val(k.normalizationFactorSystem || 10000000);
|
||||
$('#form-kill input[name="minSystemModifier"]').val(k.minSystemModifier || 0.95);
|
||||
$('#form-kill input[name="maxSystemModifier"]').val(k.maxSystemModifier || 1.05);
|
||||
$('#form-kill input[name="daySystemGold"]').val(k.daySystemGold || 100000);
|
||||
$('#form-kill input[name="globalAnnounceMinGold"]').val(k.globalAnnounceMinGold || 0);
|
||||
$('#form-kill input[name="ipCount"]').val(k.ipCount || 5);
|
||||
$('#form-kill input[name="violateValue"]').val(k.violateValue || 0.2);
|
||||
if (k.compensateRate) {
|
||||
$('#form-kill input[name="compensateBossRate"]').val(k.compensateRate.bossRate || 1);
|
||||
$('#form-kill input[name="compensateGoldRate"]').val(k.compensateRate.goldRate || 1);
|
||||
$('#form-kill input[name="compensateSpecialRate"]').val(k.compensateRate.specialRate || 1);
|
||||
$('#form-kill input[name="compensateOrdinary"]').val(k.compensateRate.ordinary || 1);
|
||||
}
|
||||
if (k.penaltyRate) {
|
||||
$('#form-kill input[name="penaltyBossRate"]').val(k.penaltyRate.bossRate || 1);
|
||||
$('#form-kill input[name="penaltyGoldRate"]').val(k.penaltyRate.goldRate || 1);
|
||||
$('#form-kill input[name="penaltySpecialRate"]').val(k.penaltyRate.specialRate || 1);
|
||||
$('#form-kill input[name="penaltyOrdinary"]').val(k.penaltyRate.ordinary || 1);
|
||||
}
|
||||
}
|
||||
form.render();
|
||||
}
|
||||
|
||||
function initConfig() {
|
||||
layer.confirm('确定要初始化全部配置数据吗?此操作将清空现有数据!', function(idx) {
|
||||
layer.close(idx);
|
||||
admin.req({
|
||||
method: "get",
|
||||
url: setter.baseurl + "adminapi/GameConfig/InitSection/KillConfig",
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('初始化成功');
|
||||
loadConfig();
|
||||
} else {
|
||||
layer.msg(res.info || '初始化失败');
|
||||
}
|
||||
},
|
||||
fail: function(res) {
|
||||
layer.msg(res.info || '初始化失败');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('click', '[lay-filter="init-kill"]', function() {
|
||||
if (window.parent && window.parent.$ && window.parent.layer) {
|
||||
window.parent.$('.layui-layer-shade').remove();
|
||||
window.parent.layer.closeAll();
|
||||
}
|
||||
initConfig();
|
||||
});
|
||||
|
||||
$(document).on('click', '[lay-filter="reload-kill"]', function() {
|
||||
loadConfig();
|
||||
layer.msg('刷新成功');
|
||||
});
|
||||
|
||||
$(document).on('click', '[lay-filter="save-kill"]', function() {
|
||||
if (window.parent && window.parent.$ && window.parent.layer) {
|
||||
window.parent.$('.layui-layer-shade').remove();
|
||||
window.parent.layer.closeAll();
|
||||
}
|
||||
if (!gameConfig.killConfig) {
|
||||
gameConfig.killConfig = {};
|
||||
}
|
||||
var k = gameConfig.killConfig;
|
||||
k.normalizationFactorPlayer = parseInt($('#form-kill input[name="normalizationFactorPlayer"]').val()) || 50000;
|
||||
k.minPlayerModifier = parseFloat($('#form-kill input[name="minPlayerModifier"]').val()) || 0.3;
|
||||
k.maxPlayerModifier = parseFloat($('#form-kill input[name="maxPlayerModifier"]').val()) || 2.0;
|
||||
k.targetSystemProfit = parseInt($('#form-kill input[name="targetSystemProfit"]').val()) || 1000000;
|
||||
k.normalizationFactorSystem = parseInt($('#form-kill input[name="normalizationFactorSystem"]').val()) || 10000000;
|
||||
k.minSystemModifier = parseFloat($('#form-kill input[name="minSystemModifier"]').val()) || 0.95;
|
||||
k.maxSystemModifier = parseFloat($('#form-kill input[name="maxSystemModifier"]').val()) || 1.05;
|
||||
k.daySystemGold = parseInt($('#form-kill input[name="daySystemGold"]').val()) || 100000;
|
||||
k.globalAnnounceMinGold = parseInt($('#form-kill input[name="globalAnnounceMinGold"]').val()) || 0;
|
||||
k.ipCount = parseInt($('#form-kill input[name="ipCount"]').val()) || 5;
|
||||
k.violateValue = parseFloat($('#form-kill input[name="violateValue"]').val()) || 0.2;
|
||||
k.compensateRate = {
|
||||
bossRate: parseFloat($('#form-kill input[name="compensateBossRate"]').val()) || 1,
|
||||
goldRate: parseFloat($('#form-kill input[name="compensateGoldRate"]').val()) || 1,
|
||||
specialRate: parseFloat($('#form-kill input[name="compensateSpecialRate"]').val()) || 1,
|
||||
ordinary: parseFloat($('#form-kill input[name="compensateOrdinary"]').val()) || 1
|
||||
};
|
||||
k.penaltyRate = {
|
||||
bossRate: parseFloat($('#form-kill input[name="penaltyBossRate"]').val()) || 1,
|
||||
goldRate: parseFloat($('#form-kill input[name="penaltyGoldRate"]').val()) || 1,
|
||||
specialRate: parseFloat($('#form-kill input[name="penaltySpecialRate"]').val()) || 1,
|
||||
ordinary: parseFloat($('#form-kill input[name="penaltyOrdinary"]').val()) || 1
|
||||
};
|
||||
|
||||
admin.req({
|
||||
method: "post",
|
||||
contentType: "application/json;charset=UTF-8",
|
||||
url: setter.baseurl + "adminapi/GameConfig/Update",
|
||||
data: JSON.stringify(gameConfig),
|
||||
done: function (res) {
|
||||
if (res.code === 0 || res.code === 200) {
|
||||
layer.msg('保存成功');
|
||||
loadConfig();
|
||||
} else {
|
||||
layer.msg(res.info || '保存失败');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
window.saveSection=function(n){layui.admin.req({method:'get',url:(layui.setter.baseurl||'/')+'adminapi/GameConfig/SaveSection/'+n,done:function(r){layui.layer.msg(r.info||(r.code===0?'保存成功':'保存失败'))}})}
|
||||
|
||||
loadConfig();
|
||||
});
|
||||
</script>
|
||||
Reference in New Issue
Block a user