Приветствую вас, Гость | Суббота, 18.05.2024, 10:43
Главная ? Форум ? Новости соц.сетей ? Всё для uCoz ? Набор модераторов
Реклама
Мини-чат
Топ пользователей
Баннеробмен
Последние посты
Горячие обсуждения
  • Страница 1 из 1
  • 1
Форум » PAWNO » Pawn WIKI » "Облегчение" алгоритмов входов/выходов
"Облегчение" алгоритмов входов/выходов
L1ghT
13.03.2014, 23:01 | Сообщение # 20
Пользователи
Сообщений: 36
1

Как мы знаем, большинство людей делает алгоритмы для входов и выходов (дома, бизнесы, дополнительные постройки и т.д) простыми:

Код
for(new i = 0; i < value; i++)
{
     if(enterExitData[some_var] == i)
     {
         //...
         break;
     }
}
 Просто, но долго, так как нужно пробежаться по всем существующим входам и выходам.
Попробуем "облегчить" похожие алгоритмы с пробежкой, к примеру, у домов.
На замены пикапам (или чекпоинтам, или еще чему-нибудь) воспользуемся динамическими зонами, которые возможно создать с помощью Incognito's Streamer Plugin.
Для определения дома нам потребуется всего две глобальные переменные
(или же массив с двумя элементами), а также парочка локальных в
определенном месте.
Создание зон будет попарно: сначала зона для входа, потом зона для выхода.

Код
new areaEX[2];
//дальше код при обработке домов
for(new i = 0; i < value; i++)
{
    new ph[2];
    ph[0] = CreateDynamicSphere(hEXi,hEYi,hEZi,S);
    ph[1] = CreateDynamicSphere(hEEXi,hEEYi,hEEZi,S,i);
    if(i == 0) areaEX[0] = ph[0];
    elseif(i == value-1) areaEX[1] = ph[1];
    //...
}
 Где hEXi,hEYi,hEZi - координаты входа; hEEXi, hEEYi, hEEZi - координаты выхода; S -размер сферы; под 'i' имеется ввиду виртуальный мир, дабы
сферы выходов различных домов не совпадали, но это при условии, что
игроку переназначается виртуальный мир при "входе" в дом.
Теперь в areaEX хранятся предельные значения для динамических зон относительно домов.
Пусть у нас хранятся дома в таком виде:

Код
new houseData[value][enumerator/fields];
 Заранее нужно предупредить, что если были созданы динамические зоны ДО создания зон для домов - нас это не волнует.
Теперь для обработки мы будем использовать OnPlayerEnterDynamicArea:

Код
public OnPlayerEnterDynamicArea(playerid, areaid)
{
    //Проведем проверку, что зона принадлежит именно домам
    if(areaEX[0] <= areaid <= areaEX[1])
    {
       //Теперь узнаем, выход это или вход
       new house = areaid-areaEX[0];
       //Почему создали новую переменную? Чтобы не было косяков, если были созданы зоны до зон домов
       //При получении остатка деления на 2 получаем: 0 - вход, 1 - выход
       new houseIkd = house%2;
       house = (house-(house%2))/2;
       //ID дома теперь записан в house
       if(houseIkd == 0)
       {
          //при входе
       }
       else
       {
          //при выходе
       }
    }
    return 1;
}
 Сложнее обычного пробега, но время выполнения будет намного меньше.
Алгоритм можно переписать для схожих задач.
Замечание: При указании игроку позиции при входе/выходе позиции выхода/входа, на котором существует динамическая зона, будет хоть и
верной, но игроку будет вечно меняться позиция:
вход-выход-вход-выход-... . Возможные решения:
  • "Спрятать" динамическую зону выхода/входа при входе/выходе игрока в/из зоны и восстановить её через некоторое время.
  • Отвести отдельную переменную, указывающую на то, что игроку сменили позицию, но
    выполнять обработку для зон не нужно. При выходе из зоны
    (OnPlayerLeaveDynamicArea) сбросить значение переменной.


Автор: SDraw
/index/8-1
dernovoy1990
19.06.2014, 10:34 | Сообщение # 43
Пользователи
Сообщений: 1
0

Прошел недвано курс Павловых и партнеры по заработку на торгах по продаже недвижимости. Если чесно я просто в шоке) Мне рассказали о том, что можно купить даже гостиницу за одну зарплату а потом хоть продавай в 300 раз дороже, хоть делай что хочегь дело уже твое. Я бы не написал бы слюда если бы сам не проверил, толкьо я купил квартиру в центре за 35 000, оставил ее для своих пожилых родителей, а себе сейчас подыскиваю загородный домик. Это бомба просто, Павловы круто изменили мою жизнь
/index/8-389
Форум » PAWNO » Pawn WIKI » "Облегчение" алгоритмов входов/выходов
  • Страница 1 из 1
  • 1
Поиск: