72 lines
7.1 KiB
Markdown
72 lines
7.1 KiB
Markdown
# قوانین بازی، اقتصاد و قراردادهای رفتاری
|
||
|
||
## حالت، زمان و ورودی
|
||
|
||
- حالت جابهجایی `walk` یا `drive` است. GPS حالت مستقل `real.on` است و حرکت را به موقعیت گوشی میسپارد.
|
||
- شروع: ۵۰۰ هتومان، صفر خرید، XP صفر، مأموریت انجامشدهٔ خالی، ساعت ۰۸:۳۰.
|
||
- هر ثانیهٔ واقعی فعال = ده ثانیهٔ بازی؛ `state.minutes += dt * 10 / 60`.
|
||
- briefing، فروشگاه، نقشه، پنجرهٔ پایان و مخفیبودن document شبیهسازی را متوقف میکنند. زیرنویسها بهتنهایی حرکت را نمیبندند. پنل پرداخت شبیهسازی را متوقف نمیکند، اما `busy` حرکت پیاده را محدود میکند.
|
||
- WASD و جهتها: حرکت نسبی به دوربین/کنترل ماشین؛ Shift: دویدن؛ Space: ترمز دستی؛ F: سوار/پیاده؛ E: فروشگاه؛ C: کشیدن کارت؛ Escape: انصراف پیش از تأیید؛ M: نقشه.
|
||
- کنترل حروف با `KeyboardEvent.code` است تا کیبورد فارسی هم کار کند. چرخ ماوس فاصلهٔ دوربین را بین ۳ و ۱۲ تغییر میدهد. روی دسکتاپ Pointer Lock و در fallback/موبایل drag وجود دارد.
|
||
- موبایل joystick و دکمههای F، E و toggle دویدن دارد. E موبایل در مرحلهٔ ready کارت میکشد.
|
||
- سرعت هدف پیاده ۳٫۴ و دویدن ۶٫۵ متر/ثانیه با نرمسازی است. برخورد دایرهای شخصیت شعاع ۱ متر دارد. مرز جهان با فاصلهٔ ۱۵ متر محدود میشود.
|
||
|
||
## ماشین
|
||
|
||
سوارشدن در فاصلهٔ حداکثر ۴٫۵ متر و خارج پرداخت/مشغولی؛ پیادهشدن در قدرمطلق سرعت حداکثر ۳ متر/ثانیه. UI پیشنهاد پیادهشدن را با شرط محدودتر سرعت زیر ۱ و دستگاه نزدیک نشان میدهد. سمت خروج راننده بررسی برخورد میشود.
|
||
|
||
ثابتهای `CAR`: سقف جلو ۵۵٫۶ متر/ثانیه (حدود ۲۰۰ km/h)، عقب ۶، شتاب ۹٫۵، ترمز ۱۴، drag برابر ۱٫۶، فرمان حداکثر ۰٫۵۵ رادیان، wheelBase برابر ۲٫۷. فرمان در سرعت بالا محدودتر میشود. برخورد دیوار دو دایرهٔ جلو/عقب و حرکت زیرگام دارد. تصادف ترافیک سرعت را کم میکند و NPC پس از تماس طولانی حذف/بازپدید میشود. جریمهٔ نقدی، خسارت قابل تعمیر و سوخت وجود ندارد.
|
||
|
||
## پول و محصول
|
||
|
||
۱۰ هتومان = ۱۰۰٬۰۰۰ ریال؛ محاسبات با هتومان صحیح و نمایش با رقم فارسی است. قیمت هر دستگاه `Math.round(baseCost * priceFactor)` است؛ مثال آب کارخانه `round(15 × .5) = 8`.
|
||
|
||
| محصول | نوع | قیمت پایه هتومان |
|
||
|---|---|---:|
|
||
| آبمیوه | drink | ۳۵ |
|
||
| آب معدنی | drink | ۱۵ |
|
||
| شیر کاکائو | drink | ۴۰ |
|
||
| چای سرد | drink | ۴۵ |
|
||
| لیموناد | drink | ۴۰ |
|
||
| بیسکویت | snack | ۲۵ |
|
||
| شکلات | snack | ۳۰ |
|
||
| آجیل | snack | ۶۵ |
|
||
| کیک | snack | ۳۵ |
|
||
|
||
خرید نامحدود تا حد بودجه است؛ موجودی انبار، مصرف محصول، فروش دوباره و رزرو پول برای مأموریت نداریم. کانالهای عددی ۲۱ تا ۶۰ متعلق به نسخهٔ قدیمیاند؛ فروشگاه فعلی کارت محصول با productId دارد.
|
||
|
||
`purchaseBlocker` به ترتیب دستگاه/محصول ناشناخته، busy، بستهبودن و کمبود پول را کنترل میکند. بازبودن شامل ساعت شروع و فاقد ساعت پایان است: `start <= minutes % 1440 < end`. بازهٔ عبور از نیمهشب پشتیبانی نشده است.
|
||
|
||
## پرداخت و تحویل
|
||
|
||
`idle → approaching → ready → approved → delivery → idle`
|
||
|
||
- بازکردن فروشگاه: پیاده، دستگاه نزدیک (۳٫۴ متر در حالت مجازی)، عملیات تمامنشده و بدون busy/پرداخت فعال.
|
||
- انتخاب محصول و `beginPayment`: بدون برداشت؛ busy روشن و دوربین نزدیک کارتخوان.
|
||
- بعد از بیش از ۱ ثانیه آماده؛ تنها C/دکمهٔ کشیدن کارت خرید را ثبت و مبلغ را یک بار کسر میکند.
|
||
- انصراف در approaching یا ready بدون تغییر پول/خرید؛ پس از approved مجاز نیست.
|
||
- پس از بیش از ۱٫۲ ثانیهٔ approved، تحویل ۲٫۶ ثانیهای آغاز میشود. busy تا پایان تحویل باقی میماند.
|
||
- رکورد خرید شامل machineId، category، productId، type، price و minutes است. XP و جایزهٔ مأموریت در پایان تحویل اعمال میشوند، نه لحظهٔ انتخاب.
|
||
- همهچیز نمایشی و داخل مرورگر است؛ اتصال درگاه یا تراکنش واقعی وجود ندارد.
|
||
|
||
## امتیاز و درجه
|
||
|
||
هر خرید ۱۰۰ XP؛ اولین خرید از هر machineId، ۲۵۰؛ اولین ترکیب drink و snack در همان دستگاه، ۱۵۰؛ تکمیل پنج دستهٔ شهری park/university/school/metro/mall، ۵۰۰. factory و test در پاداش پنج دسته و explorer شمرده نمیشوند. خرید در real.on بعد از تحویل ۲۰۰ XP اضافه میدهد؛ کشف/ترکیب برای دستگاه آزمایشی هم ممکن است.
|
||
|
||
| درجه | حداقل XP |
|
||
|---|---:|
|
||
| تازهوارد | ۰ |
|
||
| کاوشگر | ۶۰۰ |
|
||
| راهبلد | ۱۴۰۰ |
|
||
| شکارچی دستگاه | ۲۶۰۰ |
|
||
| استاد نقشه | ۴۲۰۰ |
|
||
| افسانهٔ مشهد | ۶۵۰۰ |
|
||
|
||
مأموریتها تنها یک بار با missionsDone جایزه میدهند؛ مشخصات کامل در [مرجع](10-game-reference.md). activeMission اولین مأموریت انجامنشده است، ولی completeMissions همهٔ شرطها را بررسی میکند.
|
||
|
||
## پایان و reset
|
||
|
||
`checkEnd` در پایان خرید و تقریباً هر نیمثانیه بررسی میشود: همهٔ مأموریتها کامل یا `canAffordAnything` منفی. تابع بودجه دستگاه ارزان قابل خرید فعلی/با پایان ساعت دیرتر در همان روز را میشمارد، نه امکان کسب پول در آینده؛ محدودیتهای این رفتار در بازبینی آمده است.
|
||
|
||
reset پول، خرید، XP، ساعت، payment، spawn، ماشین، مأموریت، مقصد و greeting روبات را تازه میکند. reset فعلی پاکسازی کامل همهٔ timerها، گفتوگوها، GPS و انیمیشن کامیون نیست؛ Agent نباید آن را بدون تست کامل فرض کند.
|