feat(world): add persistent citizen simulation with needs, jobs, and social features

- Adds Character model with survival needs (hunger, thirst, energy) and state machine
- Implements city:tick world ticker for offline progression every minute
- Adds city territory expansion and building construction system
- Introduces job economy, inventory, and transaction audit trail
- Adds social graph (friends, marriage, children) and character chat
- Implements admin approval workflow for new registrations
- Adds hospital admission system for traffic accidents
- Includes comprehensive feature tests and world seeders
This commit is contained in:
2026-10-17 21:46:23 -03:00
parent 79d12fa2f4
commit 79ce2a1825
132 changed files with 11809 additions and 1036 deletions
+56
View File
@@ -0,0 +1,56 @@
@extends('layouts.app')
@section('title', __('admin.citizens.title'))
@section('content')
<div style="max-width: 960px; margin: 0 auto;">
<div class="card" style="margin-bottom:1.25rem;">
<h1 style="margin-top:0; color:#fff;">👥 {{ __('admin.citizens.title') }}</h1>
@if (session('status'))
<p style="color:#4ade80;">{{ session('status') }}</p>
@endif
<p style="color:var(--muted);">{{ __('admin.citizens.hint') }}</p>
</div>
<div class="card">
<table style="width:100%; border-collapse:collapse; color:var(--muted);">
<thead>
<tr style="text-align:left; border-bottom:1px solid var(--border);">
<th style="padding:.5rem;">{{ __('admin.citizens.name') }}</th>
<th style="padding:.5rem;">{{ __('Email') }}</th>
<th style="padding:.5rem;">{{ __('admin.citizens.status') }}</th>
<th style="padding:.5rem;">{{ __('admin.citizens.character') }}</th>
<th style="padding:.5rem;">{{ __('admin.citizens.actions') }}</th>
</tr>
</thead>
<tbody>
@foreach ($users as $u)
<tr style="border-bottom:1px solid var(--border);">
<td style="padding:.5rem; color:#fff;">{{ $u->name }}</td>
<td style="padding:.5rem;">{{ $u->email }}</td>
<td style="padding:.5rem;">
<span class="badge {{ $u->status === 'active' ? 'badge-user' : 'badge-admin' }}">{{ $u->status }}</span>
</td>
<td style="padding:.5rem;">{{ $u->character?->name ?? '—' }}</td>
<td style="padding:.5rem; display:flex; gap:.4rem; flex-wrap:wrap;">
@if ($u->status === 'pending')
<form method="POST" action="{{ route('admin.citizens.approve', $u) }}">
@csrf
<button type="submit" class="btn btn-primary">{{ __('admin.citizens.approve') }}</button>
</form>
@endif
@if ($u->status !== 'banned' && $u->id !== auth()->id())
<form method="POST" action="{{ route('admin.citizens.ban', $u) }}">
@csrf
<button type="submit" class="btn">{{ __('admin.citizens.ban') }}</button>
</form>
@endif
</td>
</tr>
@endforeach
</tbody>
</table>
<div style="margin-top:1rem;">{{ $users->links() }}</div>
</div>
</div>
@endsection