belongsTo(Character::class); } /** * Create a new activity log entry */ public static function log(Character $character, string $action, string $description = null, string $ipAddress = null, string $userAgent = null): self { return self::create([ 'character_id' => $character->id, 'action' => $action, 'description' => $description, 'ip_address' => $ipAddress, 'user_agent' => $userAgent, ]); } /** * Log a crime attempt */ public static function logCrimeAttempt(Character $character, Crime $crime, bool $success, int $reward = 0): self { $result = $success ? 'success' : 'failure'; $description = "Attempted crime: {$crime->name} - {$result}"; if ($success) { $description .= " (Reward: \${$reward})"; } return self::log($character, 'crime_attempt', $description); } /** * Log money transaction */ public static function logMoneyTransaction(Character $character, string $type, int $amount, string $reason): self { $action = match($type) { 'earned' => 'money_earned', 'spent' => 'money_spent', 'deposited' => 'money_deposited', 'withdrew' => 'money_withdrew', default => 'money_transaction', }; $description = "\${$amount} {$type} - {$reason}"; return self::log($character, $action, $description); } /** * Log level up */ public static function logLevelUp(Character $character, int $newLevel): self { return self::log( $character, 'level_up', "Reached level {$newLevel}" ); } /** * Log character creation */ public static function logCharacterCreated(Character $character): self { return self::log( $character, 'character_created', "New character created: {$character->name}" ); } }