Сървърната част на мултиплейър игра се състои от шест неща: акаунти на играчите, сесии и подбор на мачове (matchmaking), сървър с власт над състоянието на играта, което има значение, надеждно съхранение на прогреса, икономика, проверявана на сървъра, и инструменти за поддръжка на живо и обновления. Колко дълбоко ще стигнете с всяко от тях зависи от играта. Кооперативна игра за приятели може да се доверява на играчите повече от състезателен шутър с платени предмети, а цената на сървърната част следва този избор.
#Първо жанрът и рискът от измами
Преди да изберете технологии, отговорете на два въпроса: какво става, ако някой играч мами, и кой плаща за сървърите. Отговорите определят мрежовия модел.
| Тип игра | Обичаен модел | Компромис |
|---|---|---|
| Кооперативна с приятели | Един играч е домакин или релей свързва играчите | Евтино, но домакинът може да мами |
| Състезателна или класирана | Отделни авторитетни сървъри | Честни мачове, но със сървърен разход за всеки мач |
| Походова или асинхронна | Уеб API и база данни, без сървър в реално време | Просто и евтино, но забавянето не може да се скрие |
| Постоянен свят | Авторитетни сървъри и общо хранилище за света | Най-много работа по сървърната част |
Много игри комбинират моделите. Един шутър може да има авторитетни сървъри за мачовете, а профилът, инвентарът и магазинът да са обикновено уеб API с база данни.
#Акаунти, сесии и подбор на мачове
Играчът не бива да измисля нова парола, за да играе. Повечето игри вписват играчите чрез платформата, която те вече ползват, например Steam, PlayStation Network, Xbox, Game Center или Google Play Games, и свързват тази самоличност с вътрешен идентификатор на играча, който принадлежи на вас. Именно този идентификатор позволява на играча да запази прогреса си на различни платформи, ако по-късно добавите игра между платформите.
- Гост акаунтите улесняват старта на мобилни устройства, но трябва да е предвидено как гостът става пълноправен играч, без да загуби прогреса си.
- Токените за сесия трябва да са краткотрайни и да се проверяват от всяка услуга, включително от игровия сървър, когато играч влиза в мач.
- Изтриването на акаунт е част от проекта. Apple изисква приложенията, в които потребителят може да си създаде акаунт, да позволяват и изтриването му от самото приложение.
Подборът на мачове поставя играчите в опашка и сформира мачове по правила: рейтинг, регион, забавяне на връзката, размер на групата и режим на игра. Добрата система разширява правилата, колкото по-дълго чака играчът, така че и човек с необичайно ниво или в тих час да намери игра. Когато мачът е сформиран, сървърната част заделя сървър, изпраща данните за връзка на играчите и попълва освободени места, ако някой напусне.
#Власт на сървъра и защита от измами
При авторитетен сървър клиентът изпраща само действия, например „напред“ или „стрелба“, а сървърът изчислява симулацията и решава резултата. Клиентът никога не съобщава „улучих играча за 100 точки щета“ или „вече имам 5000 монети“. Той заявява действие, а решението е на сървъра.
Ако разчитате само на сървъра, играта би се усещала бавна при реална връзка, затова към нея се добавят три техники:
- Предвиждане на клиента: собственият герой на играча се движи веднага, а клиентът се коригира, когато пристигне отговорът на сървъра.
- Интерполация: другите играчи се показват леко назад във времето, между известни позиции, за да изглежда движението им гладко.
- Компенсация на забавянето: при проверка на изстрел сървърът връща другите играчи там, където ги е виждал стрелецът.
Сървърът проверява и дали действията са правдоподобни: скорост на движение, честота на стрелба, пряка видимост, време за презареждане на умения. Инструментите за защита от измами на клиента затрудняват мамещите, но допълват проверките на сървъра, без да ги заменят. Всичко, което е под контрола на клиента, решен играч може да промени.
#Съхранение на прогреса
Разделете данните на два вида. Състоянието на мача, като позиции, здраве и резултат, живее в паметта на игровия сървър няколко минути и след това се изхвърля. Данните на играча, като ниво, отключени неща, инвентар и покупки, се пазят в база данни и трябва да оцелеят при сривове, обновления и местене на сървъри.
- Записвайте в ясни моменти: в края на мач, при контролна точка или след покупка, и в рамките на транзакция в базата, за да не остане никога половин награда след срив.
- Въведете версии на формата на записа. Всяко обновление, което променя съдържанието на записа, има нужда от миграция за старите записи, тествана върху реални примери.
- Решете как се разрешават конфликти при облачните записи. Играч, който играе офлайн на две устройства, създава два различни записа. Правилото „печели последният запис“ е просто, но може да изтрие прогрес, затова при ценни данни ги обединявайте или питайте играча.
- Правете архиви и проверявайте възстановяването. Прогресът е това, което играчите ценят най-много, а изгубеният инвентар е най-бързият начин да изгубите общността.
#Икономика, проверявана на сървъра
Ако играчите могат да печелят, харчат, купуват или разменят нещо, икономиката живее на сървъра. Клиентът показва салдото и изпраща заявки, а сървърът проверява заявката, прилага я и я записва.
- Водете регистър на операциите. Записвайте всяко придобиване и всеки разход като отделен ред с причина, вместо само да презаписвате салдото. Така можете да отговаряте на запитвания към поддръжката и да откривате злоупотреби.
- Проверявайте покупките в магазина на сървъра. Apple и Google предлагат сървърни API за проверка на покупките в приложението. Давайте предмета едва след проверката и направете даването идемпотентно, за да не може повторена заявка да го достави два пъти. Същият подход е описан в статията какво е нужно за надеждна API интеграция.
- Размените трябва да са атомарни. Прехвърлянето на предмет от един играч на друг става в една транзакция, иначе създавате възможност за дублиране на предмети.
- Дайте на дизайнерите административни инструменти. Цените, шансовете за падане на предмети и наградите трябва да са данни, които екипът ви променя от контролен панел, с дневник на промените, без да се издава нов клиент.
#Поддръжка на живо и обновления
Издадената мултиплейър игра се променя всяка седмица, а сървърната част определя колко трудно ще е това.
- Отдалечените настройки и флаговете за функции позволяват да променяте баланса, да пускате събития и да изключите повредена функция без обновяване на клиента. Това е най-важно при мобилните игри, защото всяка нова версия минава през прегледа на магазина, преди да стигне до играчите.
- Проверката на версията при вход казва на клиента дали е съвместим със сървърите и насочва играчите със стара версия към обновяване, вместо да ги остави да получат грешка по време на мач.
- Постепенното обновяване на сървърите пуска нови сървъри с новата версия и оставя старите да се изпразнят, докато мачовете им свършат, така че никой не бива изхвърлен по средата на игра.
- Наблюдението обхваща броя играчи онлайн, времето за намиране на мач, сривовете на сървъри, грешките по отделни адреси на API и състоянието на базата данни. Поставете известия за стойностите, които означават, че играчите чакат или не могат да се свържат.
- План за връщане назад както за настройките на клиента, така и за версиите на сървъра, изпробван преди деня на пускане.
Започнете с малко. Първата онлайн версия може да работи с вход през платформата, прост подбор на мачове, един регион и няколко административни инструмента. Добавяйте региони, класирани опашки и събития, когато реалните играчи покажат къде е натоварването.
#Как може да помогне PN Scripts
PN Scripts разработва геймплей на Unity, Unreal, Godot или WebGL заедно с онлайн услугите зад него: акаунти, облачни записи, връзка с подбора на мачове и покупки, на Go, Laravel или друга подходяща технология. Мрежовият модел се избира според жанра, риска от измами и допустимото забавяне. Как подхождаме към такъв проект, ще видите на страницата за разработка на игри.
Коментари
Коментари
Напишете първия коментар.
Оставете коментар