| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- <?php
- require_once __DIR__ . '/vendor/autoload.php';
- // 启动Laravel应用
- $app = require_once __DIR__ . '/bootstrap/app.php';
- $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class);
- $kernel->bootstrap();
- use Illuminate\Support\Facades\DB;
- use App\Module\Game\Models\GameConsumeGroup;
- use App\Module\Game\Models\GameConsumeItem;
- use App\Module\Game\Models\GameRewardGroup;
- use App\Module\Game\Models\GameRewardItem;
- use App\Module\Game\Enums\CONSUME_TYPE;
- use App\Module\Game\Enums\REWARD_TYPE;
- echo "开始迁移物品合成系统到组系统模式...\n";
- try {
- DB::transaction(function () {
- // 获取所有配方
- $recipes = DB::table('kku_item_recipes')->get();
- echo "找到 " . count($recipes) . " 个配方需要迁移\n";
- foreach ($recipes as $recipe) {
- echo "处理配方: {$recipe->name} (ID: {$recipe->id})\n";
- // 1. 创建消耗组
- $consumeGroup = createConsumeGroup($recipe);
- echo " - 创建消耗组: {$consumeGroup->name} (ID: {$consumeGroup->id})\n";
- // 2. 创建奖励组
- $rewardGroup = createRewardGroup($recipe);
- echo " - 创建奖励组: {$rewardGroup->name} (ID: {$rewardGroup->id})\n";
- // 3. 更新配方记录
- DB::table('kku_item_recipes')
- ->where('id', $recipe->id)
- ->update([
- 'consume_group_id' => $consumeGroup->id,
- 'reward_group_id' => $rewardGroup->id,
- 'updated_at' => now(),
- ]);
- echo " - 配方 {$recipe->name} 迁移完成\n\n";
- }
- });
- echo "迁移完成!\n";
- } catch (Exception $e) {
- echo "迁移失败: " . $e->getMessage() . "\n";
- echo "堆栈跟踪:\n" . $e->getTraceAsString() . "\n";
- }
- /**
- * 创建消耗组
- */
- function createConsumeGroup($recipe)
- {
- // 创建消耗组
- $consumeGroup = GameConsumeGroup::create([
- 'name' => "合成消耗: {$recipe->name}",
- 'code' => "craft_consume_{$recipe->id}",
- 'description' => "配方 {$recipe->name} 的消耗组",
- ]);
- // 添加材料消耗项
- $materials = DB::table('kku_item_recipe_materials')
- ->where('recipe_id', $recipe->id)
- ->get();
- foreach ($materials as $material) {
- GameConsumeItem::create([
- 'group_id' => $consumeGroup->id,
- 'consume_type' => CONSUME_TYPE::ITEM->value,
- 'target_id' => $material->item_id,
- 'quantity' => $material->quantity,
- 'param1' => 0,
- 'param2' => 0,
- 'extra_data' => null,
- ]);
- echo " - 添加材料消耗: 物品ID {$material->item_id}, 数量 {$material->quantity}\n";
- }
- // 添加货币消耗项
- if ($recipe->coin_cost) {
- $coinCost = json_decode($recipe->coin_cost, true);
- if (is_array($coinCost)) {
- foreach ($coinCost as $currency => $amount) {
- // 根据货币类型获取对应的fund_config_id
- $fundConfigId = getFundConfigId($currency);
- if ($fundConfigId) {
- GameConsumeItem::create([
- 'group_id' => $consumeGroup->id,
- 'consume_type' => CONSUME_TYPE::FUND_CONFIG->value,
- 'target_id' => $fundConfigId,
- 'quantity' => $amount,
- 'param1' => 0,
- 'param2' => 0,
- 'extra_data' => null,
- ]);
- echo " - 添加货币消耗: {$currency} {$amount}\n";
- }
- }
- }
- }
- return $consumeGroup;
- }
- /**
- * 创建奖励组
- */
- function createRewardGroup($recipe)
- {
- // 创建奖励组
- $rewardGroup = GameRewardGroup::create([
- 'name' => "合成奖励: {$recipe->name}",
- 'code' => "craft_reward_{$recipe->id}",
- 'description' => "配方 {$recipe->name} 的奖励组",
- 'is_random' => false,
- 'random_count' => 1,
- 'reward_mode' => 1, // 权重选择模式
- ]);
- // 添加物品奖励项
- GameRewardItem::create([
- 'group_id' => $rewardGroup->id,
- 'reward_type' => REWARD_TYPE::ITEM->value,
- 'target_id' => $recipe->result_item_id,
- 'param1' => $recipe->result_min_quantity,
- 'param2' => $recipe->result_max_quantity,
- 'quantity' => $recipe->result_min_quantity, // 基础数量
- 'weight' => 1.0,
- 'probability' => $recipe->success_rate, // 成功率作为概率
- 'is_guaranteed' => $recipe->success_rate >= 100 ? true : false,
- 'extra_data' => null,
- ]);
- echo " - 添加物品奖励: 物品ID {$recipe->result_item_id}, 数量 {$recipe->result_min_quantity}-{$recipe->result_max_quantity}, 成功率 {$recipe->success_rate}%\n";
- return $rewardGroup;
- }
- /**
- * 获取货币对应的fund_config_id
- */
- function getFundConfigId($currency)
- {
- $mapping = [
- 'gold' => 1, // 金币
- 'silver' => 2, // 银币
- 'copper' => 3, // 铜币
- // 根据实际情况添加更多映射
- ];
- return $mapping[$currency] ?? null;
- }
|