# گیتا کوین

> بازیکن چطور گیتا کوین به دست می‌آورد و خرج می‌کند، بازی چطور موجودی را نشان می‌دهد، سکه را امن می‌دهد و با بازیکنانی که هنوز وارد نشده‌اند چه می‌کند.

## گیتا کوین چطور کار می‌کند
**گیتا کوین** واحد پول بازینس است. بازیکن آن را در بازی شما **به دست می‌آورد** (برد مسابقه، رتبه‌ی تورنمنت، هدیه، خرید بسته) و در [فروشگاه جایزه](rewards.md) برای جایزه‌های واقعی **خرج می‌کند**. موجودی **روی پلتفرم** نگه داشته می‌شود، نه در دیتابیس شما:

| کار | چه کسی | چطور |
| --- | --- | --- |
| **نمایش** موجودی | کلاینت شما | [`user/get-coin`](platform-api.md#step-6-read-the-balance) با توکن کاربر بازیکن |
| **دادن** سکه | سرور شما | [`client/add-coin`](platform-api.md#step-5-give-gita-coins) با توکن کلاینت |
| **خرج کردن** سکه | بازیکن | داخل صفحه‌ی فروشگاه جایزه؛ بازی شما کاری نمی‌کند |

> [!WARNING]
> هیچ‌وقت عددی را که به‌صورت محلی ذخیره شده موجودی حساب نکنید و هیچ‌وقت اجازه ندهید کلاینت سکه اضافه کند.

## نمایش موجودی
موجودی را تازه کنید:

- بلافاصله بعد از اینکه کلاینت توکنش را گرفت
- **وقتی یک صفحه‌ی بازینس بسته می‌شود**، چون شاید بازیکن در فروشگاه جایزه سکه خرج کرده باشد
- وقتی بازی دوباره به جلو می‌آید
- بعد از اینکه سرور شما سکه داد

تا وقتی موجودی معلوم نیست یا درخواست شکست خورده، `…` نشان دهید یا آن را پنهان کنید. **هیچ‌وقت `0` نشان ندهید**؛ بازیکن خیال می‌کند سکه‌هایش از دست رفته.

## دادن سکه به‌شکل امن
هر پرداخت یک **`transactionId` یکتا لازم دارد که از ماهیت همان پرداخت ساخته شده**، مثلاً `match:17` یا `reward_claim:42` ([فرمول](platform-api.md#step-5-give-gita-coins)). در نتیجه:

- تلاش دوباره، دو بار زدن دکمه یا درخواست تکراری هیچ‌وقت دو بار پرداخت نمی‌کند: پلتفرم تکرار را با `400` رد می‌کند
- آن `400` را به معنی «قبلاً پرداخت شده» بگیرید و حساب‌داری خودتان را تمام کنید
- هر پرداخت را در **دفتر حساب خودتان** هم ثبت کنید (به چه کسی، چقدر، چرا)، برای پشتیبانی و گزارش

## بازیکنانی که هنوز وارد نشده‌اند
مهمان هم یک کاربر ناشناس بازینس دارد، پس *می‌شود* به او سکه داد. ولی خیلی از بازی‌ها مرز را **وارد شدن** می‌گذارند:

| نوع پرداخت | بازیکن وارد نشده | چرا |
| --- | --- | --- |
| **دریافت‌ها**: جایزه‌ای که بازیکن برای گرفتنش دکمه می‌زند (برد، جایزه‌ی تورنمنت، هدیه) | با خطای «اول وارد شو» رد کنید؛ کلاینت صفحه‌ی ورود را باز می‌کند و بعد از ورود موفق دوباره تلاش می‌کند | سکه‌ای که با آن جایزه‌ی واقعی می‌خرند باید مال یک حساب واقعی باشد |
| **پرداخت‌هایی که نباید شکست بخورند**: خرید پرداخت‌شده‌ای که گیتا کوین دارد | سکه‌ها را در یک **موجودی امانی محلی** روی سرور نگه دارید | سفارش پرداخت‌شده هیچ‌وقت نباید شکست بخورد |
| وقتی بازیکن وارد شد | کل موجودی امانی را با یک `add-coin` (با `transactionId` مخصوص خودش) به بازینس منتقل کنید و بعد موجودی محلی را صفر کنید | سکه‌ها دقیقاً یک بار منتقل می‌شوند |

وقتی بازینس **خاموش** است هم جایزه‌های گیتا کوین را در همان موجودی محلی نگه دارید تا اقتصاد بازی بدون کلید هم قابل تست باشد.

## ارز را صادقانه نشان دهید
- همه جا آن را «گیتا کوین» بنامید و آیکون مخصوصش را بگذارید.
- بیلدی که **بدون** بازینس منتشر می‌شود نباید جایزه‌ی گیتا کوین تبلیغ کند.

کد آماده: [دادن سکه](samples-server.md#giving-gita-coins)، [نمایش موجودی](samples-client.md#showing-the-balance).
