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
Regular → Executable
+102 -1
View File
@@ -103,5 +103,106 @@
"city.chat_accepted": "Mensagem enviada ao agente.",
"city.chat_error": "Desculpe, não consegui responder agora. Tente novamente.",
"city.chat_send": "Enviar",
"city.chat_with": "Conversando com"
"city.chat_with": "Conversando com",
"city.clock": "Horário",
"city.weather": "Clima",
"city.weather_clear": "Ensolarado",
"city.weather_cloudy": "Nublado",
"city.weather_rain": "Chuva",
"city.weather_storm": "Tempestade",
"city.vehicles_count": "veículos",
"city.pedestrians_count": "pedestres",
"auth.pending": "Sua conta aguarda aprovação do administrador.",
"auth.pending_title": "Aguardando aprovação",
"auth.pending_body": "Seu cadastro foi recebido. Um administrador precisa aprovar sua conta antes que você possa entrar na cidade. Você pode fechar esta página e tentar novamente mais tarde.",
"admin.citizens.title": "Cidadãos",
"admin.citizens.hint": "Aprove contas pendentes para criar o personagem na cidade.",
"admin.citizens.name": "Nome",
"admin.citizens.status": "Status",
"admin.citizens.character": "Personagem",
"admin.citizens.actions": "Ações",
"admin.citizens.approve": "Aprovar",
"admin.citizens.approved": "Cidadão aprovado e personagem criado.",
"admin.citizens.ban": "Banir",
"admin.citizens.banned": "Cidadão banido.",
"admin.citizens.cannot_ban_self": "Você não pode banir a própria conta.",
"admin.cities.title": "Cidades e território",
"admin.cities.hint": "Crie novas cidades ou expanda o território das existentes (+40 por quadra).",
"admin.cities.name": "Nome da cidade",
"admin.cities.create": "Criar cidade",
"admin.cities.created": "Cidade criada.",
"admin.cities.bounds": "Limites",
"admin.cities.expansions": "Expansões",
"admin.cities.expand": "Expandir",
"admin.cities.expanded": "Território expandido.",
"admin.cities.max_expansions": "Limite de expansões atingido.",
"nav.citizens": "Cidadãos",
"nav.cities": "Cidades",
"city.action_unknown": "Ação desconhecida.",
"city.action_ok": "Ação realizada.",
"city.no_food": "Você não tem comida no inventário.",
"city.no_water": "Você não tem água no inventário.",
"city.no_house": "Você precisa de uma casa concluída para dormir.",
"city.no_job": "Você não tem emprego. Candidate-se a uma vaga.",
"city.no_school": "Não há escola disponível nesta cidade.",
"city.job_other_city": "Esta vaga pertence a outra cidade.",
"city.job_education": "Educação insuficiente para esta vaga.",
"city.no_money": "Dinheiro insuficiente.",
"city.no_inventory": "Quantidade insuficiente no inventário.",
"city.out_of_bounds": "Posição fora dos limites da cidade.",
"city.no_materials": "Você precisa de 50 materiais para construir.",
"city.site_taken": "Este terreno já está ocupado.",
"city.build_started": "Construção iniciada. O ticker conclui a casa.",
"city.social_unknown": "Ação social desconhecida.",
"city.social_self": "Você não pode fazer isso consigo mesmo.",
"city.social_exists": "Relação já existe ou está pendente.",
"city.social_friend_sent": "Pedido de amizade enviado.",
"city.social_friend_ok": "Amizade aceita.",
"city.social_need_friend": "Vocês precisam ser amigos aceitos.",
"city.social_married": "Você já é casado(a).",
"city.social_married_ok": "Casamento realizado.",
"city.social_need_spouse": "Você precisa ser casado(a) para ter um filho.",
"city.social_child_ok": "Nasceu um filho na cidade!",
"city.chat_sent": "Mensagem enviada.",
"city.hud_hunger": "Fome",
"city.hud_thirst": "Sede",
"city.hud_energy": "Energia",
"city.hud_money": "Dinheiro",
"city.hud_state": "Estado",
"city.hud_education": "Educação",
"city.hud_inventory": "Inventário",
"city.hud_jobs": "Empregos",
"city.hud_actions": "Ações",
"city.hud_social": "Social",
"city.act_eat": "Comer",
"city.act_drink": "Beber",
"city.act_sleep": "Dormir",
"city.act_wake": "Acordar",
"city.act_work": "Trabalhar",
"city.act_stop": "Parar",
"city.act_study": "Estudar",
"city.act_buy": "Comprar kit",
"city.act_sell_v": "Vender produto",
"city.act_build": "Construir casa (50 mat.)",
"city.act_apply": "Candidate-se",
"city.act_friend": "Amizade",
"city.act_marry": "Casar",
"city.act_child": "Filho",
"city.me": "Meu personagem",
"city.citizens_near": "Cidadãos",
"city.apply_job": "Aplicar para",
"city.buy_hint": "Compra 1 comida+1 água+10 materiais",
"city.hospital_hit": "Você foi atropelado! Internado no hospital por 2 dias.",
"city.hospital_already": "Você já está internado no hospital.",
"city.hospital_blocked": "Você está internado no hospital e não pode fazer isso agora.",
"city.hospital_bed": "Internado no hospital",
"city.hospital_released": "Alta do hospital: você foi liberado.",
"city.hospital_title": "Hospitalizado",
"city.hospital_left": "Alta em",
"city.audio": "Áudio",
"city.vol_master": "Geral",
"city.vol_music": "Música",
"city.vol_sfx": "Efeitos",
"city.mute": "Mudo",
"city.audio_hint": "Volume salvo neste dispositivo."
}