Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Все о стримере - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Урок ]
Все о стримере Как правильно использовать стример
Оценка: -----

#1
Пользователь офлайн   PrometeyShow 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Всем добрый вечер друзья, поздравляю всех с новым годом! Ну и это как таковой мой первый урок, и подобного я на RUS порталах pawn не видал, долгие годы я парил себе мозг, именно со стримером, как же его все-таки верно юзать?
Многие говорили мол ставь объекты пола CreateObject и все, игроки мол падать не будут, но это все ничего. Вижу часто вы задаёте вопросы: Прорисовка объектов а именно ее дистанция. Сейчас я объясню вам все о прорисовке и о том как же ее грамотно юзать.

И так, поставив значение в 500.00 в значении stream_distance вы не исправите свои проблемы. Как часто это бывает мы все качаем мапп с пабов, ибо это и хорошо, и красиво. Но все-же, многие порталы переделывают маппинг, соответственно некоторый код они ставят именно так:
new object[100];
object[0] = CreateDynamicObject(980, 0, 0, 0, 0, 0, 0, -1, -1, -1, 300.00, 300.00);
object[1] = CreateDynamicObject(980, 0, 0, 0, 0, 0, 0, -1, -1, -1, 300.00, 300.00);
object[2] = CreateDynamicObject(980, 0, 0, 0, 0, 0, 0, -1, -1, -1, 300.00, 300.00);
object[3] = CreateDynamicObject(980, 0, 0, 0, 0, 0, 0, -1, -1, -1, 300.00, 300.00);


В чем же проблема? Да в том что можно просто создать одну переменную и по очереди привязывать к ней объекты.
new objid;
objid = CreateDynamicObject(...);
SetDynamicObjectMaterial(objid, ...);


Многие пишут мол: Ставь дистанцию выше. Но они и сами не понимают как работает стример.

Стример имеет лимит видимых объектов игрока. Соответственно, если в вашем моде имеется CreateObject это -1 в лимите, то-есть 999 объектов может видеть игрок. Стандартный лимит: 1000. Соответственно чем меньше CreateObject тем больше объектов вы будете видеть. Совет:

Для интерьеров дистанцию ставьте не выше: 200.00 если инт не такой массивный.
Для зданий не более 300.00 но ежели нужно дальше то не выше 600.00 ибо в дальнейшем не вижу смысла, так как сама игра уже не будет прорисовывать объекты дальше.

Если кто не понял про лимиты, построим ситуацию: У меня около мэрии есть 100 CreateObject и 901 CreateDynamicObject. И вот 901 объект мы не будем видеть, или же самый ближний. Так-как лимит нам не позволяет. Уберем 1 CerateObject и все ок.

Надеюсь с прорисовкой мы разобрались? Ниже вы увидите все лимиты и максимальные значения.
Ловите еще небольшой сток для подсчета количества объектов:
В OnGameModeInit
public OnGameModeInit(playerid)
{ 
    check_object();
    return true;
}


Сам сток
stock check_object()
{
    new obj = CreateDynamicObject(980, 0, 0, 0, 0, 0, 0);
    DestroyDynamicObject(obj);
    printf("Объектов всего %d", obj);
}


Теперь перейдём к транспорту, почему к нему? Потому-что если вы во весь мод выставите CreateDynamicObject вы попросту увидите такую картину: весь транспорт будет раскидан по серверу, ибо когда вы отходите от объектов, они удаляются.
Соответственно объект на котором стоит транспорт лучше преобразовать в CreateObject ибо решение данной проблемы я думал как сделать, мол когда игрок подходит к объекту попросту спавнить тс. Но это не особо эффективно и для вас и для мода. Ибо при высоком онлайне будет выполняться много кода вечно.

С полом на CreateObject можно решить проблему следующим способом:

stock SetPPos(playerid, Float: x, Float: y, Float: z, int, virt)
{
    SetTimerEx("UnFreeze", 3000, false, "i", playerid);
    SetPlayerPos(playerid, x, y, z);
    SetPlayerInterior(playerid, int);
    SetPlayerVirtualWorld(playerid, virt);
    TogglePlayerControlable(playerid, true);
}
forward UnFreeze(playerid);
public UnFreeze(playerid)
{
    TogglePlayerControlable(playerid, false);
    return true;
}


Теперь игрок при телепорте в инт будет заморожен на 3 секунды, именно этого времени хватит дабы интерьер прогрузился. После прохода 3 секунд: игрок размораживается. Извините но без заморозки никак. Это самый изи способ.
А так-же в OnGameModeInit добавьте: Streamer_VisibleItems(STREAMER_TYPE_OBJECT, 1000);
Данная функция устанавливает вручную лимит объектов вокруг игрока.
Ну а теперь лимиты:

- Лимит объектов вокруг игрока: 1000
- Лимит дистанции от объекта: 600.0
- Лимит объектов Streamer: Неограничен

Бывает ситуация когда вы юзаете SetDynamicObjectPos. И при тп объекта нужно подвигаться дабы он появился, ну а если вы не можете двинуться? Ибо игрок скажем заморожен.
В данной ситуации вам поможет функция: Streamer_Update данная функция принудительно обновляет стример для игрока. Но а если вам трубется обновить для всех игроков то:

foreach(Player, i)
    Streamer_Update(i);


Надеюсь вам все понравилось, и я объяснил довольно понятно, как же юзать стример.
Ежели есть ошибки, пишите в комменты, всем пока друзья!

Сообщение отредактировал PrometeyShow: 01 Январь 2018 - 00:06

1

#2
Пользователь офлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Раскрыть информацию
Зачем жирный шрифт? Не читаемо.
0

#3
Пользователь офлайн   PrometeyShow 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияRomzes (31 Декабрь 2017 - 23:51) писал:

Зачем жирный шрифт? Не читаемо.

Заменил.
0

#4
Пользователь офлайн   SooBad 

  • SB org
  • Вставить ник
  • Раскрыть информацию
Краткость долгое время являлась сестрой таланта, но после прочтения данной статьи ей пришлось сменить пол.

Цитата

Для зданий не более 300.00 но ежели нужно дальше то не выше 600.00 ибо в дальнейшем не вижу смысла, так как сама игра уже не будет прорисовывать объекты дальше.

Вам на портал по написанию сочинений, сударь, ибо в интернете еще не существует программ, позволяющих удалять воду и расставлять слова в нужном смысловом порядке.
P.S. С Новым Годом!
P.S.S

Цитата

Многие говорили ...

Скрытый текст [Показать]

Сообщение отредактировал SooBad: 01 Январь 2018 - 01:54

0

#5
Пользователь офлайн   Nexius 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
Название статьи не соответствует её содержанию. Заходя в тему "всё о стримере", ожидаешь как минимум увидеть объяснение работы функций Streamer_(Get/Set)IntData, Streamer_(Get/Set)FloatData, Streamer_GetItem(Internal/Streamer)ID, а не только информацию о решении конкретной проблемы с объектами.

Сугубо по теме:
Количество созданных объектов можно подсчитывать гораздо оптимальнее, чем создавать и удалять новый. Для этого есть функция Streamer_CountItems.
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей