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": "Message sent to agent.",
"city.chat_error": "Sorry, I can't reply right now. Please try again.",
"city.chat_send": "Send",
"city.chat_with": "Chatting with"
"city.chat_with": "Chatting with",
"city.clock": "Time",
"city.weather": "Weather",
"city.weather_clear": "Sunny",
"city.weather_cloudy": "Cloudy",
"city.weather_rain": "Rain",
"city.weather_storm": "Storm",
"city.vehicles_count": "vehicles",
"city.pedestrians_count": "pedestrians",
"auth.pending": "Your account is awaiting administrator approval.",
"auth.pending_title": "Awaiting approval",
"auth.pending_body": "Your registration was received. An administrator must approve your account before you can enter the city. You can close this page and try again later.",
"admin.citizens.title": "Citizens",
"admin.citizens.hint": "Approve pending accounts to create their city character.",
"admin.citizens.name": "Name",
"admin.citizens.status": "Status",
"admin.citizens.character": "Character",
"admin.citizens.actions": "Actions",
"admin.citizens.approve": "Approve",
"admin.citizens.approved": "Citizen approved and character created.",
"admin.citizens.ban": "Ban",
"admin.citizens.banned": "Citizen banned.",
"admin.citizens.cannot_ban_self": "You cannot ban your own account.",
"admin.cities.title": "Cities and territory",
"admin.cities.hint": "Create new cities or expand existing territory (+40 per block).",
"admin.cities.name": "City name",
"admin.cities.create": "Create city",
"admin.cities.created": "City created.",
"admin.cities.bounds": "Bounds",
"admin.cities.expansions": "Expansions",
"admin.cities.expand": "Expand",
"admin.cities.expanded": "Territory expanded.",
"admin.cities.max_expansions": "Expansion limit reached.",
"nav.citizens": "Citizens",
"nav.cities": "Cities",
"city.action_unknown": "Unknown action.",
"city.action_ok": "Action completed.",
"city.no_food": "You have no food in inventory.",
"city.no_water": "You have no water in inventory.",
"city.no_house": "You need a completed house to sleep.",
"city.no_job": "You are unemployed. Apply for a job.",
"city.no_school": "No school available in this city.",
"city.job_other_city": "That job belongs to another city.",
"city.job_education": "Not enough education for this job.",
"city.no_money": "Not enough money.",
"city.no_inventory": "Not enough inventory quantity.",
"city.out_of_bounds": "Position outside city bounds.",
"city.no_materials": "You need 50 materials to build.",
"city.site_taken": "This lot is already occupied.",
"city.build_started": "Construction started. The ticker finishes the house.",
"city.social_unknown": "Unknown social action.",
"city.social_self": "You cannot do that to yourself.",
"city.social_exists": "Relationship already exists or is pending.",
"city.social_friend_sent": "Friend request sent.",
"city.social_friend_ok": "Friendship accepted.",
"city.social_need_friend": "You must be accepted friends first.",
"city.social_married": "You are already married.",
"city.social_married_ok": "Marriage completed.",
"city.social_need_spouse": "You must be married to have a child.",
"city.social_child_ok": "A child was born in the city!",
"city.chat_sent": "Message sent.",
"city.hud_hunger": "Hunger",
"city.hud_thirst": "Thirst",
"city.hud_energy": "Energy",
"city.hud_money": "Money",
"city.hud_state": "State",
"city.hud_education": "Education",
"city.hud_inventory": "Inventory",
"city.hud_jobs": "Jobs",
"city.hud_actions": "Actions",
"city.hud_social": "Social",
"city.act_eat": "Eat",
"city.act_drink": "Drink",
"city.act_sleep": "Sleep",
"city.act_wake": "Wake up",
"city.act_work": "Work",
"city.act_stop": "Stop",
"city.act_study": "Study",
"city.act_buy": "Buy kit",
"city.act_sell_v": "Sell product",
"city.act_build": "Build house (50 mat.)",
"city.act_apply": "Apply",
"city.act_friend": "Friend",
"city.act_marry": "Marry",
"city.act_child": "Child",
"city.me": "My character",
"city.citizens_near": "Citizens",
"city.apply_job": "Apply for",
"city.buy_hint": "Buys 1 food + 1 water + 10 materials",
"city.hospital_hit": "You were hit by a vehicle! Hospitalized for 2 days.",
"city.hospital_already": "You are already in the hospital.",
"city.hospital_blocked": "You are hospitalized and cannot do that right now.",
"city.hospital_bed": "Hospitalized",
"city.hospital_released": "Hospital discharge: you are free to go.",
"city.hospital_title": "Hospitalized",
"city.hospital_left": "Discharge in",
"city.audio": "Audio",
"city.vol_master": "Master",
"city.vol_music": "Music",
"city.vol_sfx": "Effects",
"city.mute": "Mute",
"city.audio_hint": "Volume saved on this device."
}