AMX MOD X
Вторник, 23.04.2024, 20:59:33



Приветствую Вас Гость | RSS
[ Главная ] [ spawn points - AMX Mod X Форум ] [ Регистрация ] [ Вход ]
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]

Вниманию участников! Данный форум теперь является архивом и вскором времени здесь нельзя будет создавать новых тем! Просьба всем для общения и создания новых тем перейти на наш новый форум: http://amxmodx.su/

  • Страница 1 из 1
  • 1
Модератор форума: slogic, AlMod  
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » spawn points (все о них, родных)
spawn points
slogicДата: Понедельник, 27.11.2006, 01:31:04 | Сообщение # 1
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Тема создана в качестве продолжения темы http://forums.alliedmods.net/showthread.php?t=26632

Используемые сокращения:
SP - spawn point
HLSDK - Half-Life SDK
BSP - формат файла, которых содержит все данные о карте

SP - это структура, у которой актуальны следующие свойства:
.origin - положение SP в пространстве;
.angles - угол поворота рождаемой модели SP в градусах (обычно задается параметр Y - yaw, отсальные равны нулю); в BSP файле всегда задается только один параметр - Y;
.classname - класс SP; используемые классы: info_player_start, info_player_deathmatch, info_vip_start и info_player_coop

Иногда пытаются задавать и .v_angle (куда будет по умолчанию смотреть рождемый игрок), но использования этого свойства зависит от spawn-движка. По-моему оригинальный spawn-движок не используется это свойство. А вот CSDM использует.

К SP имеют отношения следующие фрагменты из HLSDK:
player.cpp::EntSelectSpawnPoint()
player.cpp::IsSpawnPointValid()
gamerules.cpp::GetPlayerSpawnSpot()

Как именно загружаются SP из BSP файла из HLSDK вы не узнаете.

Что удалось выяснить:
1) В plugin_precache() точки еще не созданы
2) В plugin_init() точки из карты уже загружены
3) Изменение classname уже загруженной точки практически ничего полезного не дает. Влияет только на функцию find_entity(), но реально игроки исходного класса (который был до изменения classname) как рождались там, так и будут рождаться
4) удалять созданные SP (remove_entity()) нельзя, т.к. это приведет к глюкам: при рождении игроки могут оказаться по пояс в земле и торчать там пока суициднишься (видимо это происходит на месте удаленных entity, т.е. они где-то линкуются в списки)
5) SP - это не global object, т.к. свойство globalname у них пустое (а global объекты линкуются в списки)
7) SP с координатами {0, 0, 0} является служебной и не может использоваться для рождения игроков
8) при рождении в точке игрок приподнимается на 1 единицу пространства
9) при рождении игрока, если не найдены свободные SP, то придудительно убиваются все игроки в радиусе(?) 128 единиц пространства выбранного SP

Вот что мне непонятно:
1) VEN сказал, что есть механиз перехвата инициализации свойств SP перед их рождением. Я о нем вообще не в курсе. Его можно реализовать без FakeMeta? Раписывть не обязательно: примеров будет достаточно.
2) SP не обязательно рождать (т.е. применять к ним DispatchSpawn()), хотя если и рождать SP, то ничего плохого (по кр. мере я) не будет. Может все-таки правильнее их рождать?
3) Что будет если я применю DispatchKeyValue() к уже сущетсвующему объекту? (собираюсь проверить)
4) Как правильно удалять SP?

Добавлено (2006-11-27, 1:31 Am)
---------------------------------------------
УРРРРРРРРРА! 6 часов ковыряния непрошли напрасно! Я сделал это! Оказывается п.7 - это ключ к моему решению! SP можно отключить! Т.о. в precache я создал 16 нулевых точек для CT, потом когда оригинальные SP прогурзились, существующие CT я отключил (они в DM картах для монстров и не имеют стратегического назначения), потом половину из существующих точек для T я копирую (origin и angles) на созданные в precache CT точки, и тут же обнуляю, т.е. отключаю T-точки. Супер! Работает идеально! Кстати, если менять класс у SP, то это может влиять негативно: если переимновать класс у самой первой SP в очереди, то можно сразу получить сообщение, что CT или T team is full. Вот такие вот дела.

 
VENДата: Понедельник, 27.11.2006, 19:34:58 | Сообщение # 2
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Quote
VEN сказал, что есть механиз перехвата инициализации свойств SP перед их рождением. Я о нем вообще не в курсе.
KeyValue data о чем-нибудь говорит?
Для всех map entities при инициализации карты "пуляются" KVD структуры до Spawn'инга. После Spawn KVD структуру entity не изменить.

Quote
Его можно реализовать без FakeMeta?
Engine:
pfn_keyvalue - hookable/blockable =>
copy_keyvalue - get
DispatchKeyValue - set

Quote
SP не обязательно рождать (т.е. применять к ним DispatchSpawn()), хотя если и рождать SP, то ничего плохого (по кр. мере я) не будет. Может все-таки правильнее их рождать?
Все дело в том, что в большинстве случаев для SP "пуляются" только classname/angles/origin KVD, эти данные впоследующем идут в pev структуру entity. Т.о. можно сразу менять pev структуру и не использовать KVD метод.

Quote
Что будет если я применю DispatchKeyValue() к уже сущетсвующему объекту? (собираюсь проверить)
Для прореспавненого объекта - ничего хорошего. KVD может быть установлена только до Spawn.

Quote
Как правильно удалять SP?
RemoveEntity on KeyValue/Spawn.

Quote
в precache я создал 16 нулевых точек
Я же тебе говорил, что все делается элементарно, и не нужно было голову забивать. Создаешь в plugin_precache сколько надо SP, по мере создания оригинальных копируешь измененные/неизмененные параметры в свои SP и удаляешь оригинальные.

Сообщение отредактировал VEN - Понедельник, 27.11.2006, 19:40:30
 
slogicДата: Понедельник, 27.11.2006, 20:21:43 | Сообщение # 3
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
Quote (VEN)
по мере создания оригинальных копируешь измененные/неизмененные параметры в свои SP и удаляешь оригинальные

С этим в AMX проблемы. Там нельзя перехватывать KVD структуры (или я слепой).
 
VENДата: Понедельник, 27.11.2006, 20:30:28 | Сообщение # 4
AMXX-Скриптинг-Эксперт
Группа: Админы
Сообщений: 1892
Репутация: 45
Статус: Не в сети
Кинь zip с инклудами - гляну - может найду.
Но я предупреждал, что ты будешь "спотыкаться" с АМХ - так и выходит.
Не пора ли перейти на АМХХ кодинг?
Если будешь продолжать "серьезно" кодить - не выдержишь - перейдешь все равно рано или поздно, либо забросишь совсем.
 
slogicДата: Понедельник, 27.11.2006, 20:46:03 | Сообщение # 5
Генералиссимус
Группа: Админы
Сообщений: 1941
Репутация: 47
Статус: Не в сети
AMX 0.9.9 точно не держит, а вот для AMX 2006.3 есть такая вещица:
Code
// Called when an entity gets a keyvalue set on it from the engine.
// Use copy_keyvalue to get the keyvalue information
forward keyvalue(entity);

Нашел после анализа файла amxmodx_to_amx.inc.

Ну что ж, будет время, изучу и сделаю два варианта компиляции.

 
AMX Mod X Форум » Скриптинг » Помощь по скриптингу » spawn points (все о них, родных)
  • Страница 1 из 1
  • 1
Поиск:

AMX Mod X Russian Community © 2006-2024