Files
chatroom/database/seeders/AutoFishingCardSeeder.php
lkddi 63679a622f 功能:随机浮漂钓鱼防挂机 + 商店自动钓鱼卡
核心变更:
1. FishingController 重写
   - cast(): 生成随机浮漂坐标(x/y%) + 一次性 token
   - reel(): 必须携带 token 才能收竿(防脚本绕过)
   - 检测自动钓鱼卡剩余时间并返回给前端

2. 前端钓鱼逻辑重写
   - 抛竿后显示随机位置 🪝 浮漂动画(全屏飘动)
   - 鱼上钩时浮漂「下沉」动画,8秒内点击浮漂才能收竿
   - 超时未点击:鱼跑了,token 也失效
   - 持有自动钓鱼卡:自动点击,紫色提示剩余时间

3. 商店新增「🎣 自动钓鱼卡」分组
   - 3档:2h(800金)/8h(2500金)/24h(6000金)
   - 图标徽章显示剩余有效时间(紫色)
   - 购买后即时激活,无需手动操作

4. 数据库
   - shop_items.type 加 auto_fishing 枚举
   - shop_items.duration_minutes 新字段(分钟精度)
   - Seeder 写入 3 张卡数据

防挂机原理:按钮 → 浮漂随机位置,脚本无法固定坐标点击
2026-03-01 16:19:45 +08:00

69 lines
2.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* 文件功能:初始化自动钓鱼卡商品数据
*
* 共 3 档2小时卡、8小时卡、24小时卡。
* 激活后钓鱼无需手动点击浮漂,系统自动收竿。
* 可重复运行updateOrCreate 幂等)。
*/
namespace Database\Seeders;
use App\Models\ShopItem;
use Illuminate\Database\Seeder;
class AutoFishingCardSeeder extends Seeder
{
/**
* 写入 3 档自动钓鱼卡数据。
*/
public function run(): void
{
$cards = [
[
'slug' => 'auto_fishing_2h',
'name' => '自动钓鱼卡2小时',
'icon' => '🎣',
'description' => '激活后2小时内钓鱼无需手动点击浮漂系统自动收竿。',
'price' => 800,
'type' => 'auto_fishing',
'duration_minutes' => 120,
'sort_order' => 201,
'is_active' => true,
],
[
'slug' => 'auto_fishing_8h',
'name' => '自动钓鱼卡8小时',
'icon' => '🎣',
'description' => '激活后8小时内钓鱼无需手动点击浮漂系统自动收竿。超值之选',
'price' => 2500,
'type' => 'auto_fishing',
'duration_minutes' => 480,
'sort_order' => 202,
'is_active' => true,
],
[
'slug' => 'auto_fishing_24h',
'name' => '自动钓鱼卡24小时',
'icon' => '🎣',
'description' => '激活后24小时内钓鱼无需手动点击浮漂系统自动收竿。重度钓鱼爱好者必备',
'price' => 6000,
'type' => 'auto_fishing',
'duration_minutes' => 1440,
'sort_order' => 203,
'is_active' => true,
],
];
foreach ($cards as $card) {
ShopItem::updateOrCreate(
['slug' => $card['slug']],
$card
);
}
$this->command->info('✅ 3 张自动钓鱼卡已写入 shop_items。');
}
}