PDA

View Full Version : [Include] W_Streamers


White_116
04/09/2011, 03:27 PM
White_116 Static Object Streamer v5.0

Здравствуйте !

Решил выложить свой стример объектов.
Вы скажите очередной бесполезный стример, которых итак туева туча. А вот и нет. Главное то что, этот стример не вычисляет расстояние от игрока к объекту. Алгоритм его ЗОНЫ, по мне лучше квадраты ;)
Соответственно он не теряет время на всякие подсчёты и сортировку, что делает его быстрым.


Плюсы:
1. Космическая скорость обработки.
2. Не теряет скорость при увеличение количество объектов. Можно и миллион.
3. Обработка происходит если игрок сместится в другой квадрат или находясь в транспорте до его поворота.


Минусы:
1. Нельзя добавлять и удалять объекты вовремя работы стримера.
2. Нельзя прикреплять объекты!
3. Нельзя слишком далеко (более 100 - 300 метров) двигать и перемещать объекты (нужно производить анализ).


Функции:
native CreateStaticObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:dist=400.0); //Создание статического объекта
native StartStaticObjectsStreamer(krug, time); //Запуск стримера
native StopStaticObjectsStreamer(); //Остановка стримера
native OS_SetPlayerPos(playerid,Float:x,Float:y); //Принудительное обновление чанков при смене позиции игрока
native OS_PlayerConnect(playerid); //Подключение игрока
native OS_ChunksUpdate(playerid, OldChunk, NewChunk); //Принудительное обновление чанков
native OS_DestroyAllChunk(playerid); //Удаление всех чанков для игрока

native MoveStaticObject(objectid, Float:x, Float:y, Float:z, Float:s, Float:rx = -1000.0, Float:ry = -1000.0, Float:rz = -1000.0); //Движение объекта
native SetStaticObjectRot(objectid, Float:rx, Float:ry, Float:rz); //Смена ротации объекта
native SetStaticObjectPos(objectid, Float:x, Float:y, Float:z); //Смена позиции объекта

Стример нужно очень точно настраивать и для тех кто не понимает принцип действия вот готовые профили на дальность ~400 метров.

1. Для тех, у кого прям очень много объектов на 100 метров, любое количество кучек.
#define MAX_DlINA_DLYA_OBRABOTKI (3000) //Граница
#define MAX_RAZMER_CHUNKA (60) //Длина чанка
#define MAX_KOLV0_CHUNKOV_NA_STORONU (100) //Количество чанков на одну сторону границы
#define MAX_CHUNKS (10001) //Количество чанков
2. Для тех, у кого всё расставлено умеренно (рекомендую)
#define MAX_DlINA_DLYA_OBRABOTKI (3000) //Граница
#define MAX_RAZMER_CHUNKA (100) //Длина чанка
#define MAX_KOLV0_CHUNKOV_NA_STORONU (60) //Количество чанков на одну сторону границы
#define MAX_CHUNKS (3601) //Количество чанков
3. Для тех, у кого всё разбросанно мелкими кучками
#define MAX_DlINA_DLYA_OBRABOTKI (3000) //Граница
#define MAX_RAZMER_CHUNKA (200) //Длина чанка
#define MAX_KOLV0_CHUNKOV_NA_STORONU (30) //Количество чанков на одну сторону границы
#define MAX_CHUNKS (901) //Количество чанков


Стресс тест:
http://www.youtube.com/watch?v=-7rjkBBaEfM
Стресс тест - Пример.
#include <a_samp>
#define MAX_OBJECTS_KOLVO (300*300)
#define MAX_OBJECTS_STREAM (990)
#define MAX_OBJECTS_IN_CHUNK (50)
#define DeBug 1
#include <W_OS>

public OnFilterScriptInit()
{
for(new x=-3000; x < 3000; x+=20)
for(new y=-3000; y < 3000; y+=20)
CreateStaticObject(4338, x, y, 45.0, 0.0, 0.0, 0.0, 700.0);

StartStaticObjectsStreamer(7, 100);// 1 секунда, 200-2 секунды
return 1;
}
public OnFilterScriptExit()
{
StopStaticObjectsStreamer();
return 1;
}
public OnPlayerConnect(playerid)
{
OS_PlayerConnect(playerid);
return 1;
}
Для того чтобы не нужно было ждать прогрузку объектов при телепортации нужно заставить стример насильно обновить чанки. При смене позиции делаем так:
//....
OS_SetPlayerPos(playerid,x,y);//обновим объекты
SetPlayerPos(playerid,x,y,z);//телепортнём игрока.
//....Сначала создадутся объекты и лишь потом игрок телепортнётся в зону их видимости.

Установка.
-Закинуть W_OS.inc в папку include котороя расположена pawno/include/.
-Подключить инклуд в начале мода и ФС после строки #include <a_samp>

Внимание!
-Для того чтобы включить возможность перемещать и поворачивать объекты нужно сделать следующие:
#include <a_samp>
#define DinObj 1 //включает движение объектов.
#include <W_OS>
//...
-Очень долго компилируется. Запаситесь терпением.
-Большой размер AMX файла.

Просмотреть W_OS.inc 5.0: PASTEBIN (http://pastebin.com/zgkKSniS)
Скачать W_OS.inc 5.0: SolidFiles (http://www.solidfiles.com/d/ea88991cfc/)

Скачать WS 4.0: SolidFiles (http://solidfiles.com/d/1ecf33075e/)
Скачать WS 2.1: SolidFiles (http://solidfiles.com/d/5e732/)
Скачать WS 2.2 + WS 3.0: SolidFiles (http://solidfiles.com/d/194a/)

HappyScripter
04/09/2011, 04:58 PM
Да, еще один :p но много стримеров никогда не бывает. Понравилась переменная KolvoObjects и функция Analiz(), чувствуется калорит :mrgreen:

ЗЫ покидаете sa-mp? Просто так или ради чего-то другого?

White_116
04/09/2011, 05:35 PM
Понравилась переменная KolvoObjects и функция Analiz(), чувствуется калорит что первое в голову придё то и пишу :rolleyes:
а насчёт ухода - или или.

OKStyle
04/09/2011, 06:17 PM
Всё-таки зарелизил =)

White_116
04/09/2011, 06:22 PM
3 двиг попозже релизну, как ошибку убью.

Romanius
06/09/2011, 04:30 PM
Да, еще один :p но много стримеров никогда не бывает. Понравилась переменная KolvoObjects и функция Analiz(), чувствуется калорит :mrgreen:

ЗЫ покидаете sa-mp? Просто так или ради чего-то другого?

хм.. кажеца я знаю, кто вы....


Аффтор! Соблюдай грамматику)

Его нельзя назвать диманическим, так как при добовление и удалении объекта нужно производить анализ.

что в твоем понятии "динамичность" ?

White_116
06/09/2011, 04:57 PM
Аффтор! Соблюдай грамматику) туго с ней.
что в твоем понятии "динамичность" ? уменьшение, увеличение, изменение. В данном случае во время работы.

White_116
06/09/2011, 05:50 PM
3 двиг попозже релизну, как ошибку убью.

3 двиг релизнул, ошибку не решил (вырезал из кода). Смотрим и обсуждаем господа.

HappyScripter
06/09/2011, 07:51 PM
Романыч )) пришел всем пинков раздать, узнаю

Кстати, кто-то еще пользуется скриптовыми стримерами?

White_116
21/01/2012, 02:28 PM
ЗЫ покидаете sa-mp? Просто так или ради чего-то другого?
Как видно не покинул...

Выложил 4 версию. Качаем, тестируем.

GameMan
28/01/2012, 06:14 PM
Стример понравился. Буду им пользоваться

White_116
17/04/2013, 05:32 PM
Новая версия уважаемые форумчане.
В 5.0 новый движок. Думаю уже что-то быстрее не реально придумать. Проведена значительная оптимизация анализатора. В общем, смотрим не стесняемся.

OKStyle
17/04/2013, 05:49 PM
Интересно. А че не с Инкогнитовским тестил?

White_116
17/04/2013, 05:55 PM
Интересно. А че не с Инкогнитовским тестил?

Я С++ не понимаю а скриптово не реально. Пытался исходники смотреть, запутался весь.
Чисто теоретически мой быстрее должен быть, так как только создание и удаление. Нет сортировки.

AirKite
17/04/2013, 06:49 PM
Как я уже и говорил в теме W_Points, что принцип известен ещё с лохматых годов по стримеру, который работал именно таким образом. Стример от инкогнито, должен работать по схожему принципу (вот тут конечно не уверен, исходник не смотрел).

White_116
18/04/2013, 08:02 PM
Стример от инкогнито, должен работать по схожему принципу (вот тут конечно не уверен, исходник не смотрел).
Да их похоже никто не смотрел, никто внятного ответа дать не может.
"Просмотрел" исходник там в обработчике присутствует проверка на дистанцию, дальность видимости объекта.
Во всяком случае если там комбинированный режим (точно не могу сказать) мой всеровно побыстрее будет, так как он у меня мягко говоря - простой как табуретка.