diff --git a/app/Http/Controllers/Game/CharacterController.php b/app/Http/Controllers/Game/CharacterController.php index 1f4816d..e4ea38e 100644 --- a/app/Http/Controllers/Game/CharacterController.php +++ b/app/Http/Controllers/Game/CharacterController.php @@ -74,6 +74,8 @@ class CharacterController extends Controller 'max_energy' => config('game.energy.max', 100), 'health' => config('game.health.start_amount', 100), 'max_health' => config('game.health.max', 100), + 'nerve' => config('game.nerve.start_amount', 100), + 'max_nerve' => config('game.nerve.max', 100), 'strength' => 5, 'defense' => 5, 'speed' => 5, diff --git a/app/Models/Character.php b/app/Models/Character.php index ed8c061..84ae96c 100644 --- a/app/Models/Character.php +++ b/app/Models/Character.php @@ -21,7 +21,6 @@ use Illuminate\Database\Eloquent\Relations\HasMany; * @property int $max_energy * @property int $nerve * @property int $max_nerve - * @property \Illuminate\Support\Carbon|null $nerve_regen_at * @property int $health * @property int $max_health * @property int $strength @@ -53,7 +52,6 @@ class Character extends Model 'max_energy', 'nerve', 'max_nerve', - 'nerve_regen_at', 'health', 'max_health', 'strength', @@ -72,7 +70,6 @@ class Character extends Model 'in_hospital_until' => 'datetime', 'in_jail_until' => 'datetime', 'last_action_at' => 'datetime', - 'nerve_regen_at' => 'datetime', 'status' => CharacterStatus::class, ]; diff --git a/app/Services/Game/CrimeService.php b/app/Services/Game/CrimeService.php index c289f2a..c0a48c4 100644 --- a/app/Services/Game/CrimeService.php +++ b/app/Services/Game/CrimeService.php @@ -37,16 +37,16 @@ class CrimeService throw new \Exception('Character cannot perform actions right now.'); } + // Consume nerve first so energy is never deducted if nerve is insufficient + if (!$this->nerveService->consume($character, $crime->nerve_cost)) { + throw new \Exception('Not enough nerve to attempt this crime.'); + } + // Consume energy if (!$this->energyService->consume($character, $crime->energy_cost, 'crime')) { throw new \Exception('Not enough energy to attempt this crime.'); } - // Consume nerve - if (!$this->nerveService->consume($character, $crime->nerve_cost)) { - throw new \Exception('Not enough nerve to attempt this crime.'); - } - // Calculate success rate $successRate = $crime->calculateSuccessRate($character); $isSuccess = random_int(0, 9999) / 10000 <= $successRate; diff --git a/database/seeders/CrimeSeeder.php b/database/seeders/CrimeSeeder.php index 4c2d7c1..dcb11a7 100644 --- a/database/seeders/CrimeSeeder.php +++ b/database/seeders/CrimeSeeder.php @@ -29,6 +29,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 500, 'experience' => 50, 'energy_cost' => 10, + 'nerve_cost' => 1, 'cooldown' => 60, 'requires_level' => 1, 'location_id' => $downtown?->id ?? null, @@ -43,6 +44,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 1500, 'experience' => 100, 'energy_cost' => 15, + 'nerve_cost' => 2, 'cooldown' => 120, 'requires_level' => 3, 'location_id' => $downtown?->id ?? null, @@ -57,11 +59,12 @@ class CrimeSeeder extends Seeder 'reward_max' => 1000, 'experience' => 75, 'energy_cost' => 12, + 'nerve_cost' => 1, 'cooldown' => 120, 'requires_level' => 1, 'location_id' => $downtown?->id ?? null, ], - + // Industrial District Crimes [ 'name' => 'Factory Theft', @@ -73,6 +76,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 3000, 'experience' => 150, 'energy_cost' => 20, + 'nerve_cost' => 2, 'cooldown' => 180, 'requires_level' => 5, 'location_id' => $industrial?->id ?? null, @@ -87,11 +91,12 @@ class CrimeSeeder extends Seeder 'reward_max' => 5000, 'experience' => 200, 'energy_cost' => 25, + 'nerve_cost' => 3, 'cooldown' => 300, 'requires_level' => 8, 'location_id' => $industrial?->id ?? null, ], - + // Waterfront Crimes [ 'name' => 'Smuggling', @@ -103,6 +108,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 8000, 'experience' => 250, 'energy_cost' => 30, + 'nerve_cost' => 3, 'cooldown' => 300, 'requires_level' => 10, 'location_id' => $waterfront?->id ?? null, @@ -117,11 +123,12 @@ class CrimeSeeder extends Seeder 'reward_max' => 15000, 'experience' => 400, 'energy_cost' => 40, + 'nerve_cost' => 5, 'cooldown' => 600, 'requires_level' => 15, 'location_id' => $waterfront?->id ?? null, ], - + // Generic Crimes (available everywhere) [ 'name' => 'Car Theft', @@ -133,6 +140,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 4000, 'experience' => 120, 'energy_cost' => 20, + 'nerve_cost' => 2, 'cooldown' => 180, 'requires_level' => 5, 'location_id' => null, @@ -147,6 +155,7 @@ class CrimeSeeder extends Seeder 'reward_max' => 6000, 'experience' => 200, 'energy_cost' => 25, + 'nerve_cost' => 3, 'cooldown' => 300, 'requires_level' => 7, 'location_id' => null,