FiLE | Дата: Воскресенье, 01.01.2012, 18:08 | Сообщение # 1 |
Группа:
Разработчики
Сообщений: 681
Награды: 70
Город: Одесса
Замечания: 0%
Статус:
| RemoveBuilding Global "RemoveBuildingForPlayer"
Уважаемые пользователи SAMP! Я с радостью хочу представить вам функцию "RemoveBuilding" (Удаление Стандартных Обьектов Игры)
Инструкция:
В последнее время игроки на моем сервере просили создавать постройки на участках карты, где это было невозможно раньше, но теперь реально с функцией RemoveBuildingForPlayer. Я еще не использовал эту функцию на своем сервере и мне было интересно, чтобы лучше всего применить эту функцию для всех игроков, независимо от того, сейчас они на сервере или только зашли. Моим решением было использование инклуда (include)!
Короче говоря: этот инклуд устраняет необходимость использования RemoveBuildingForPlayer для всех игроков (используя цикл), а также избавляет от необходимости вызова этой функции когда игрок соединяется с сервером. Этот инклуд также создает такие функции как: 'RestoreBuilding' и 'RemoveSpecificBuilding'
Функции:
RemoveBuilding
Code RemoveBuilding(modelid, Float:oX, Float:oY, Float:oZ, Float:oRadius = 0.25, Float:orX = 0.0, Float:orY = 0.0, Float:orZ = 0.0)
Эта функция такая-же как и RemoveBuildingForPlayer, но в ней нету параметра "playerid". Она помещает обьект в глобальный массив (в пределах инклуда) и удаляет его для всех подключенных игроков. Если игрок заходит на сервер, даже после использования этой функции, то все равно функция удаления для этого игрока срабатывает. В этом инклуде указание радиуса не является обязательным. Вы просто можете сделать
Code RemoveBuilding(modelid, x, y, z);
и эта функция будет работать прекрасно. Эта функция также имеет возможность вращения координат объектов. Если вы хотите использовать 'RestoreBuilding' в какой-то момент, то Вы должны указать её. Эта функция возвращает 'slotid' который является массивом слотов данных, которые сохранятся после вызова этой функции. Если Вы хотите вызвать RestoreBuilding для конкретного объекта, Вы должны сохранить в переменной, что возвращает эта функция. Соблюдайте:
Code new rem_obj = RestoreBuilding(modelid, x, y, z, radius, rx, ry, rz);
Чтобы удалить здание точно, то вам нужно указать координаты вращения.
RemoveSpecificBuilding
Code RemoveSpecificBuilding(modelid)
С помощью этой функции вы можете просто указать 'modelid' для удаления объекта по всей карте. Она возвращает 'slotid' для данного конкретного объекта, однако Вы не можете восстановить объекты после этой функции, т.к. не даются координаты.
RestoreBuilding
Code RestoreBuilding(slotid)
Эта функция позволяет восстановить конкретное здание, которое было удалено с помощью функции RemoveBuilding. Вы должны указать 'slotid', которое возвращает функция RemoveBuilding. Функция RestoreBuilding будет заново создавать объект с помощью функции SAMP CreateObject. Как это работает:
Code new RemoveObjectVar;
public OnFilterScriptInit() { RemoveObjectVar = RemoveBuilding(1697, 236.9922, 1835.3438, 23.2344, 0.25, 356.8584, 0.0000, -0.7854); }
CMD:restore(playerid, params[]) { #pragma unused params RestoreBuilding(RemoveObjectVar); return SendClientMessage(playerid, COLOUR_GREEN, "The static object has been restored."), 1; }
CountRemovedObjects
Code CountRemovedObjects()
Эта функция возвращает, сколько было уничтожено объектов функцией "RemoveBuilding"
Установка
Вам нужно будет скачать инклуд (и скопировать в pawno > includes). Ссылка для скачивания расположена ниже в статъе.
Code #include <removebuilding> //Example
По умолчанию "лимит удаляемых объектов" = 100. Если хотите увеличить, то редактируйте инклуд.
Code #define MAX_REMOVED_OBJECTS 500 #include <removebuilding>
Помните, чем выше число - больше массив и больше потребления памяти.
После этого можно приступить к использованию "RemoveBuilding". Вам нужно будет изменить строки RemoveBuildingForPlayer на RemoveBuilding и тогда все будет правильно.
Ошибки\Вопросы
Ошибки и вопросы, список обновлений, исправлений смотрите в источнике.
Заключение: Я тестировал этот скрипт, и могу подтвердить, что он работал отлично для меня. Я еще не тестировал его на публичном сервере, и поэтому скрипт не был полностью протестирован., хотя и должен работать прекрасно. Если у Вас возникли вопросы, не стесняйтесь спрашивать!
Переведено - FiLE --Источник статьи-- Переведено на скорую руку, все ошибки и корректировки статьи указывайте, исправим.
Сообщение отредактировал FiLE - Воскресенье, 01.01.2012, 18:13 |
|
|
|
Kw33ck | Дата: Воскресенье, 01.01.2012, 20:16 | Сообщение # 2 |
Местный
Группа:
Продвинутые
Сообщений: 620
Награды: 8
Город: Empire Bay
Репутация: 1405
Замечания: 60%
Статус:
| Чето опять все функции сампа дорабатываются скриптизёрами...
>>> Внимание: GTA 5 Online на пиратке! <<<
>>> Внимание: Mafia 2 Multiplayer ВКонтакте! <<<
Мои завистники: 1 место - Eakwarp (постоянная зависть в сторону моих успехов и уровня развития) - Стаж > 4х лет! 2 место - PeRaN (подлиза, признавшая моё превосходство, но не желающая что-либо исправлять по моим советам) - Стаж > 3х лет! 3 место - Тут можешь оказаться ты!
|
|
|
|
JasonGordon | Дата: Среда, 24.05.2017, 23:48 | Сообщение # 3 |
Уверенный в себе
Группа:
Продвинутые
Сообщений: 190
Награды: 0
Город: Париж
Репутация: 100
Замечания: 0%
Статус:
| Сколько всего объектов можно удалить с помощью "RemoveBuilding"? Больше 1000 можно?
|
|
|
|