feat: 增加自定义头像上传、自动压缩与自动清理功能,统一全站头像路径读取逻辑
This commit is contained in:
@@ -48,21 +48,21 @@ return new class extends Migration
|
||||
['alias' => 'level_warn', 'body' => '5', 'guidetxt' => '警告所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_mute', 'body' => '50', 'guidetxt' => '禁言所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_kick', 'body' => '60', 'guidetxt' => '踢人所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_announcement','body' => '60', 'guidetxt' => '设置公告所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_announcement', 'body' => '60', 'guidetxt' => '设置公告所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_ban', 'body' => '80', 'guidetxt' => '封号所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_banip', 'body' => '90', 'guidetxt' => '封IP所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'level_freeze', 'body' => '14', 'guidetxt' => '冻结账号所需等级', 'created_at' => $now, 'updated_at' => $now],
|
||||
|
||||
// ── 随机事件 ──────────────────────────────────────────────
|
||||
['alias' => 'auto_event_chance','body' => '10', 'guidetxt' => '随机事件触发概率(百分比,1-100)', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'auto_event_chance', 'body' => '10', 'guidetxt' => '随机事件触发概率(百分比,1-100)', 'created_at' => $now, 'updated_at' => $now],
|
||||
|
||||
// ── 魅力系统 ──────────────────────────────────────────────
|
||||
['alias' => 'charm_cross_sex', 'body' => '2', 'guidetxt' => '异性聊天每条消息增加的魅力值', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'charm_same_sex', 'body' => '1', 'guidetxt' => '同性聊天每条消息增加的魅力值', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'charm_hourly_limit','body' => '20', 'guidetxt' => '每小时通过聊天获取的魅力值上限(防刷屏)', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'charm_hourly_limit', 'body' => '20', 'guidetxt' => '每小时通过聊天获取的魅力值上限(防刷屏)', 'created_at' => $now, 'updated_at' => $now],
|
||||
|
||||
// ── 排行榜 ────────────────────────────────────────────────
|
||||
['alias' => 'leaderboard_limit','body' => '20', 'guidetxt' => '🏆 排行榜每榜显示人数', 'created_at' => $now, 'updated_at' => $now],
|
||||
['alias' => 'leaderboard_limit', 'body' => '20', 'guidetxt' => '🏆 排行榜每榜显示人数', 'created_at' => $now, 'updated_at' => $now],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
* username_blacklist — 用户改名后的旧名称保留黑名单
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
* 记录所有用户经验/金币/魅力的变动来源与金额,支持今日排行与活动统计
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ return new class extends Migration
|
||||
public function down(): void
|
||||
{
|
||||
// 先把现有 NULL 行补一个兜底值,再改回 NOT NULL
|
||||
DB::statement("UPDATE `username_blacklist` SET `reserved_until` = NOW() + INTERVAL 365 DAY WHERE `reserved_until` IS NULL");
|
||||
DB::statement("ALTER TABLE `username_blacklist` MODIFY `reserved_until` TIMESTAMP NOT NULL");
|
||||
DB::statement('UPDATE `username_blacklist` SET `reserved_until` = NOW() + INTERVAL 365 DAY WHERE `reserved_until` IS NULL');
|
||||
DB::statement('ALTER TABLE `username_blacklist` MODIFY `reserved_until` TIMESTAMP NOT NULL');
|
||||
}
|
||||
};
|
||||
|
||||
@@ -12,42 +12,42 @@ return new class extends Migration
|
||||
{
|
||||
DB::table('marriage_configs')->insertOrIgnore([
|
||||
[
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_mutual_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '协议离婚冷静期(天)',
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_mutual_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '协议离婚冷静期(天)',
|
||||
'description' => '协议离婚成功后,多少天内不能再次结婚 (支持设置为 0)',
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
],
|
||||
[
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_auto_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '系统强制离婚冷静期(天)',
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_auto_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '系统强制离婚冷静期(天)',
|
||||
'description' => '单方面申请协议离婚但对方不管,导致超时后系统强制离婚的冷静期',
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
],
|
||||
]);
|
||||
|
||||
|
||||
// 由于离婚有 mutual, auto, forced 等,我们同时添加 forced 参数的插入以防遗漏
|
||||
DB::table('marriage_configs')->insertOrIgnore([
|
||||
[
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_forced_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '单方强制离婚冷静期(天)',
|
||||
'group' => '时间规则',
|
||||
'key' => 'divorce_forced_cooldown',
|
||||
'value' => 70,
|
||||
'label' => '单方强制离婚冷静期(天)',
|
||||
'description' => '通过单方面强制解除契约功能导致的离婚冷静期',
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
]
|
||||
'min' => 0,
|
||||
'max' => 365,
|
||||
'created_at' => now(),
|
||||
'updated_at' => now(),
|
||||
],
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
* red_packet_claims:红包领取记录(先到先得,每人只能领一次)
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
* 默认 gold,兼容已有记录。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 记录每次系统/管理员投放的神秘箱信息,包含类型、暗号、奖惩范围及领取状态。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 记录每个箱子被哪位用户在何时用什么暗号领取,以及实际奖励金额。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 记录每期彩票的开奖状态、号码、奖池金额、派奖结果。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 透明记录每期奖池的每笔变动(售票入池、派奖扣除、滚存、系统注入)。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
* 记录每用户每注的选号、中奖等级、派奖金额。
|
||||
*
|
||||
* @author ChatRoom Laravel
|
||||
*
|
||||
* @version 1.0.0
|
||||
*/
|
||||
|
||||
|
||||
@@ -55,15 +55,15 @@ class AutoFishingCardSeeder extends Seeder
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'slug' => 'auto_fishing_72h',
|
||||
'name' => '自动钓鱼卡(72小时)',
|
||||
'icon' => '🎣',
|
||||
'description' => '激活后72小时内,钓鱼无需手动点击浮漂,系统自动收竿。钓鱼大神终极之选!',
|
||||
'price' => 15000,
|
||||
'type' => 'auto_fishing',
|
||||
'slug' => 'auto_fishing_72h',
|
||||
'name' => '自动钓鱼卡(72小时)',
|
||||
'icon' => '🎣',
|
||||
'description' => '激活后72小时内,钓鱼无需手动点击浮漂,系统自动收竿。钓鱼大神终极之选!',
|
||||
'price' => 15000,
|
||||
'type' => 'auto_fishing',
|
||||
'duration_minutes' => 4320,
|
||||
'sort_order' => 204,
|
||||
'is_active' => true,
|
||||
'sort_order' => 204,
|
||||
'is_active' => true,
|
||||
],
|
||||
];
|
||||
|
||||
|
||||
@@ -43,73 +43,73 @@ class FishingEventSeeder extends Seeder
|
||||
|
||||
$events = [
|
||||
[
|
||||
'sort' => 1,
|
||||
'emoji' => '🦈',
|
||||
'name' => '大鲨鱼',
|
||||
'message' => '钓到一条大鲨鱼!获得经验30、金币50',
|
||||
'exp' => 30,
|
||||
'jjb' => 50,
|
||||
'weight' => 15,
|
||||
'sort' => 1,
|
||||
'emoji' => '🦈',
|
||||
'name' => '大鲨鱼',
|
||||
'message' => '钓到一条大鲨鱼!获得经验30、金币50',
|
||||
'exp' => 30,
|
||||
'jjb' => 50,
|
||||
'weight' => 15,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 2,
|
||||
'emoji' => '🐟',
|
||||
'name' => '娃娃鱼',
|
||||
'message' => '钓到一条娃娃鱼,到集市卖得80个金币',
|
||||
'exp' => 0,
|
||||
'jjb' => 80,
|
||||
'weight' => 15,
|
||||
'sort' => 2,
|
||||
'emoji' => '🐟',
|
||||
'name' => '娃娃鱼',
|
||||
'message' => '钓到一条娃娃鱼,到集市卖得80个金币',
|
||||
'exp' => 0,
|
||||
'jjb' => 80,
|
||||
'weight' => 15,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 3,
|
||||
'emoji' => '🐠',
|
||||
'name' => '大草鱼',
|
||||
'message' => '钓到一只大草鱼,吃下增加经验20、金币30',
|
||||
'exp' => 20,
|
||||
'jjb' => 30,
|
||||
'weight' => 20,
|
||||
'sort' => 3,
|
||||
'emoji' => '🐠',
|
||||
'name' => '大草鱼',
|
||||
'message' => '钓到一只大草鱼,吃下增加经验20、金币30',
|
||||
'exp' => 20,
|
||||
'jjb' => 30,
|
||||
'weight' => 20,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 4,
|
||||
'emoji' => '🐡',
|
||||
'name' => '小鲤鱼',
|
||||
'message' => '钓到一条小鲤鱼,增加经验10、金币20',
|
||||
'exp' => 10,
|
||||
'jjb' => 20,
|
||||
'weight' => 20,
|
||||
'sort' => 4,
|
||||
'emoji' => '🐡',
|
||||
'name' => '小鲤鱼',
|
||||
'message' => '钓到一条小鲤鱼,增加经验10、金币20',
|
||||
'exp' => 10,
|
||||
'jjb' => 20,
|
||||
'weight' => 20,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 5,
|
||||
'emoji' => '💧',
|
||||
'name' => '落水惨败',
|
||||
'message' => '鱼没钓到,摔到河里损失金币30',
|
||||
'exp' => 0,
|
||||
'jjb' => -30,
|
||||
'weight' => 15,
|
||||
'sort' => 5,
|
||||
'emoji' => '💧',
|
||||
'name' => '落水惨败',
|
||||
'message' => '鱼没钓到,摔到河里损失金币30',
|
||||
'exp' => 0,
|
||||
'jjb' => -30,
|
||||
'weight' => 15,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 6,
|
||||
'emoji' => '👊',
|
||||
'name' => '被抓殴打',
|
||||
'message' => '偷钓鱼塘被主人发现,一阵殴打!金币减少10',
|
||||
'exp' => 0,
|
||||
'jjb' => -10,
|
||||
'weight' => 10,
|
||||
'sort' => 6,
|
||||
'emoji' => '👊',
|
||||
'name' => '被抓殴打',
|
||||
'message' => '偷钓鱼塘被主人发现,一阵殴打!金币减少10',
|
||||
'exp' => 0,
|
||||
'jjb' => -10,
|
||||
'weight' => 10,
|
||||
'is_active' => true,
|
||||
],
|
||||
[
|
||||
'sort' => 7,
|
||||
'emoji' => '🎉',
|
||||
'name' => '超级大奖',
|
||||
'message' => '运气爆棚!钓到大鲨鱼、大草鱼、小鲤鱼各一条!经验+50,金币+200!',
|
||||
'exp' => 50,
|
||||
'jjb' => 200,
|
||||
'weight' => 5,
|
||||
'sort' => 7,
|
||||
'emoji' => '🎉',
|
||||
'name' => '超级大奖',
|
||||
'message' => '运气爆棚!钓到大鲨鱼、大草鱼、小鲤鱼各一条!经验+50,金币+200!',
|
||||
'exp' => 50,
|
||||
'jjb' => 200,
|
||||
'weight' => 5,
|
||||
'is_active' => true,
|
||||
],
|
||||
];
|
||||
|
||||
@@ -70,16 +70,16 @@ class GameConfigSeeder extends Seeder
|
||||
'description' => '管理员随时投放或系统定时自动投放神秘箱,最快发送暗号的用户开箱获得奖励。',
|
||||
'enabled' => false,
|
||||
'params' => [
|
||||
'auto_drop_enabled' => false, // 是否自动定时投放
|
||||
'auto_interval_hours' => 2, // 自动投放间隔(小时)
|
||||
'auto_drop_enabled' => false, // 是否自动定时投放
|
||||
'auto_interval_hours' => 2, // 自动投放间隔(小时)
|
||||
'claim_window_seconds' => 60, // 领取窗口(秒)
|
||||
'normal_reward_min' => 500, // 普通箱最低奖励
|
||||
'normal_reward_max' => 2000, // 普通箱最高奖励
|
||||
'rare_reward_min' => 5000, // 稀有箱最低奖励
|
||||
'rare_reward_max' => 20000, // 稀有箱最高奖励
|
||||
'trap_penalty_min' => 200, // 黑化箱最低惩罚
|
||||
'trap_penalty_max' => 1000, // 黑化箱最高惩罚
|
||||
'trap_chance_percent' => 10, // 黑化箱触发概率(%)
|
||||
'normal_reward_min' => 500, // 普通箱最低奖励
|
||||
'normal_reward_max' => 2000, // 普通箱最高奖励
|
||||
'rare_reward_min' => 5000, // 稀有箱最低奖励
|
||||
'rare_reward_max' => 20000, // 稀有箱最高奖励
|
||||
'trap_penalty_min' => 200, // 黑化箱最低惩罚
|
||||
'trap_penalty_max' => 1000, // 黑化箱最高惩罚
|
||||
'trap_chance_percent' => 10, // 黑化箱触发概率(%)
|
||||
],
|
||||
],
|
||||
|
||||
@@ -121,13 +121,13 @@ class GameConfigSeeder extends Seeder
|
||||
|
||||
// ─── 钓鱼小游戏 ──────────────────────────────────────────────
|
||||
[
|
||||
'game_key' => 'fishing',
|
||||
'name' => '钓鱼小游戏',
|
||||
'icon' => '🎣',
|
||||
'game_key' => 'fishing',
|
||||
'name' => '钓鱼小游戏',
|
||||
'icon' => '🎣',
|
||||
'description' => '消耗金币抛竿,等待浮漂下沉后点击收竿,随机获得奖励或惩罚。持有自动钓鱼卡可自动循环。',
|
||||
'enabled' => false,
|
||||
'params' => [
|
||||
'fishing_cost' => 5, // 每次抛竿消耗金币
|
||||
'enabled' => false,
|
||||
'params' => [
|
||||
'fishing_cost' => 5, // 每次抛竿消耗金币
|
||||
'fishing_wait_min' => 8, // 浮漂等待最短秒数
|
||||
'fishing_wait_max' => 15, // 浮漂等待最长秒数
|
||||
'fishing_cooldown' => 300, // 收竿后冷却秒数
|
||||
@@ -136,36 +136,36 @@ class GameConfigSeeder extends Seeder
|
||||
|
||||
// ─── 双色球彩票 ──────────────────────────────────────────────
|
||||
[
|
||||
'game_key' => 'lottery',
|
||||
'name' => '双色球彩票',
|
||||
'icon' => '🎟️',
|
||||
'game_key' => 'lottery',
|
||||
'name' => '双色球彩票',
|
||||
'icon' => '🎟️',
|
||||
'description' => '每日一期,选3红球(1-12)+1蓝球(1-6),按奖池比例派奖,无一等奖滚存累积。',
|
||||
'enabled' => false,
|
||||
'params' => [
|
||||
'enabled' => false,
|
||||
'params' => [
|
||||
// ── 开奖时间 ──
|
||||
'draw_hour' => 20, // 每天几点开奖(24小时制)
|
||||
'draw_minute' => 0, // 几分开奖
|
||||
'stop_sell_minutes' => 2, // 开奖前几分钟停止购票
|
||||
'draw_hour' => 20, // 每天几点开奖(24小时制)
|
||||
'draw_minute' => 0, // 几分开奖
|
||||
'stop_sell_minutes' => 2, // 开奖前几分钟停止购票
|
||||
|
||||
// ── 购票限制 ──
|
||||
'ticket_price' => 100, // 每注金币
|
||||
'max_tickets_per_user' => 50, // 每期单人最多购票注数
|
||||
'max_tickets_per_buy' => 10, // 单次最多购买注数
|
||||
'ticket_price' => 100, // 每注金币
|
||||
'max_tickets_per_user' => 50, // 每期单人最多购票注数
|
||||
'max_tickets_per_buy' => 10, // 单次最多购买注数
|
||||
|
||||
// ── 奖池分配比例(%)──
|
||||
'pool_ratio' => 70, // 购票金额进奖池比例
|
||||
'prize_1st_ratio' => 60, // 一等奖占奖池%
|
||||
'prize_2nd_ratio' => 20, // 二等奖占奖池%
|
||||
'prize_3rd_ratio' => 10, // 三等奖占奖池%
|
||||
'carry_ratio' => 10, // 强制滚存比例%
|
||||
'pool_ratio' => 70, // 购票金额进奖池比例
|
||||
'prize_1st_ratio' => 60, // 一等奖占奖池%
|
||||
'prize_2nd_ratio' => 20, // 二等奖占奖池%
|
||||
'prize_3rd_ratio' => 10, // 三等奖占奖池%
|
||||
'carry_ratio' => 10, // 强制滚存比例%
|
||||
|
||||
// ── 固定小奖 ──
|
||||
'prize_4th_fixed' => 150, // 四等奖固定金额/注
|
||||
'prize_5th_fixed' => 50, // 五等奖固定金额/注
|
||||
'prize_4th_fixed' => 150, // 四等奖固定金额/注
|
||||
'prize_5th_fixed' => 50, // 五等奖固定金额/注
|
||||
|
||||
// ── 超级期 ──
|
||||
'super_issue_threshold' => 3, // 连续几期无一等奖触发超级期
|
||||
'super_issue_inject' => 20000, // 超级期系统注入金额上限
|
||||
'super_issue_inject' => 20000, // 超级期系统注入金额上限
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
/**
|
||||
* 文件功能:商店初始商品数据填充器
|
||||
* 初始化9种商品:4种单次特效卡 + 4种周卡 + 改名卡
|
||||
*
|
||||
* @package Database\Seeders
|
||||
*/
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
Reference in New Issue
Block a user