Истребители багов! от 3 августа 2017г.
Проблемы с корабельным креслом
Перевод от H_Rush
В этом выпуске «Истребителей багов!» Марк Эйбент устраняет баг, который возникает во время появления игрока внутри корабля в мультиплеере.
Проблема в том, что игрок физически связывается с креслом корабля, но также он физически связывается с самим кораблем. Это делается, чтобы точно знать, когда игрок находится внутри корабля, и когда он садится в кресло на корабле.
Когда игрок садится в кресло, код должен определять, что игрок и кресло физически корректно объединены. Но, к сожалению, этого не происходит.
Для примера Марк создает Cutlass, и все идет хорошо до тех пор, пока клиент не доходит до этого состояния объединения и не пытается присоединить кресло к соответствующему порту на корабле. Из-за наличия в кресле игрока клиент не понимает, что происходит, и все ломается. В итоге персонаж умирает и оказывается выброшенным в космос.
Что происходит на самом деле: когда кресло появляется, система заключает, что к нему должен быть прикреплен игрок. Поэтому она прикрепляет игрока к креслу до того, как кресло окажется прикреплено к кораблю. Из-за всяких странностей в работе системы порой получается так, что прикрепленный к креслу игрок не прикрепляется к кораблю.
Для решения проблемы нужно наладить корректное взаимодействие между тремя сущностями: кораблем, креслом и игроком. Необходимо, чтобы игрок в кресле оказывался соединен с кораблем.
Марк добавил в код флаг, который определяет, находится ли в кресле появившегося корабля игрок. Если да, то система сначала прикрепляет персонажа к креслу, затем прикрепляет кресло к кораблю и создает между ними связь.