PDA

Просмотр полной версии : [Вопрос] Привязка игроков к определенной местности.



Слава КПСС
04.10.2017, 23:10
Здравствуйте, я новичок в pawno, не могу реализовать привязку игроков к местности, думаю можно как нибудь через IsPlayerToKvadrat, но не понимаю как именно. Что по советуете? Пример: Чтобы игроки не могли покидать город, а при столкновении с границей их не пускало дальше и немного отбрасывало назад от неё. Заранее спасибо.

DeimoS
05.10.2017, 00:03
http://pro-pawn.ru/showthread.php?12630-SetPlayerWorldBounds

Слава КПСС
05.10.2017, 01:19
Огромное спасибо, даже не знал об этой функции)

DeimoS
05.10.2017, 01:34
Только учти, что это ограничение можно будет обойти читами :)
То бишь, надеяться на то, что эта функция не даст игроку, например, выбраться из тюрьмы - не стоит. Для подобных случаев лучше ввести дополнительные проверки координат. Например, можно воспользоваться функционалом стримера и создать динамическую зону.
Собственно, вот все существующие функции по созданию динамических зон:

native STREAMER_TAG_AREA CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCylinder(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCuboid(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
А их описание можешь нагуглить

Слава КПСС
05.10.2017, 14:13
То есть как я понял, если брать SetPlayerWorldBounds то его надо совмещать с прямоугольником и обширную проверку лепить уже через stock(распихивая по нужным вызовом включай таймеры), или же можно по месть только в PlayerSpawn? p.s Спасибо что помог :)

DeimoS
05.10.2017, 14:36
SetPlayerWorldBounds можно установить при первом спавне или в OnPlayerRequestClass. Этого будет достаточно.

А если используешь динамические зоны, дабы со стороны сервера можно было отследить выход за пределы зоны, то у стримера есть специальные автовызываемые функции на этот случай:

OnPlayerEnterDynamicArea
OnPlayerLeaveDynamicArea

Слава КПСС
05.10.2017, 15:36
Я решил испробовать на практике SetPlayerWorldBounds, и понял что для читеров хуже наказания, чем данная функция не будет. xD
Уверяю проверка через прямоугольник будет не нужна. :)

Alpano
05.10.2017, 15:51
Нужна, ибо читеры могут включить NOP на SetPlayerWorldBounds и им будет побоку какие ограничения вы к ним примените.

DeimoS
05.10.2017, 16:24
Нужна, ибо читеры могут включить NOP на SetPlayerWorldBounds и им будет побоку какие ограничения вы к ним примените.

Так же, как и обычный AirBreak не даст откидывать назад
Да и вообще, для кого я писал это? -_-

Только учти, что это ограничение можно будет обойти читами :)
То бишь, надеяться на то, что эта функция не даст игроку, например, выбраться из тюрьмы - не стоит. Для подобных случаев лучше ввести дополнительные проверки координат. Например, можно воспользоваться функционалом стримера и создать динамическую зону.
Собственно, вот все существующие функции по созданию динамических зон:

native STREAMER_TAG_AREA CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCylinder(Float:x, Float:y, Float:minz, Float:maxz, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCuboid(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
native STREAMER_TAG_AREA CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = sizeof points, worldid = -1, interiorid = -1, playerid = -1, priority = 0);
А их описание можешь нагуглить

SetPlayerWorldBounds просто отправляет данные о новых границах мира, которые впоследствии устанавливаются игровым движком. Сервер никак эти данные впоследствии не проверяет и не контролирует. А раз всё происходит искючительно на стороне клиента, то и изменить эти данные клиент может легко при желании.

Слава КПСС
05.10.2017, 16:35
Ну раз говорите надо - значит буду делать прямоугольник:)