Пусть твоя карта называется MyMap
Через W3DMapEditor на карте создаёшь эммитер со свойствами name=Trigger1 lib=Collision Sphere
и поставь его в нужное место на карте.
Trigger1 - меняешь на имя своего триггера.
Сохраняешь карту. Твоя карта должна быть зарегистрирована в Scripts.xml примерно так:
Code
<?xml version='1.0' ?>
<xomArchive>
<xomObjects>
<XDataBank id='id-0'>
<Section>0</Section>
...
<StringResources href="MyMapName"/>
...
<ContainerResources href='MyMap'/>
...
</XDataBank>
...
<XStringResourceDetails id='MyMapName'>
<Value>Моя супер карта</Value>
<Name>MyMapName</Name>
<Flags>80</Flags>
</XStringResourceDetails>
...
<XContainerResourceDetails id='MyMap'>
<Value href='MyMap-0'/>
<Name>MyMap</Name>
<Flags>80</Flags>
</XContainerResourceDetails>
<WXFE_LevelDetails id='Multi.MyMap-0'>
<Frontend_Name>MyMapName</Frontend_Name>
<Frontend_Briefing>FETXT.Jur.Chute.Brief</Frontend_Briefing>
<Frontend_Image>icon.tga</Frontend_Image>
<Level_ScriptName>MyMap,wormpot</Level_ScriptName>
<Level_FileName>MyMap</Level_FileName>
<Objectives></Objectives>
<Level_Number>42</Level_Number>
<Level_Type>0</Level_Type>
<Lock></Lock>
<Theme_Type>5</Theme_Type>
<Preview_Type>0</Preview_Type>
<BonusTime>600</BonusTime>
</WXFE_LevelDetails>
...
</xomObjects>
</xomArchive>
Можно не мучаться, а просто заменять уже существующую карту, но всё равно надо менять, или добавлять свои скрипты, короче тут много нюансов и надо пробовать. Регистрируешь эммитер в файле databanks/MyMap.xml, примерно вот так:
Code
<?xml version='1.0' ?>
<xomArchive>
<xomObjects>
<XDataBank id='id-0'>
...
<ContainerResources href='Trig1'/>
...
</XDataBank>
...
<XContainerResourceDetails id='Trig1'>
<Value href='Trig1-0'/>
<Name>Trig1</Name>
<Flags>121</Flags>
</XContainerResourceDetails>
<TriggerDataContainer id='Trig1-0'>
<Spawn>Trigger1</Spawn>
<Radius>200</Radius>
<Index>1</Index>
<TeamCollect>0</TeamCollect>
<TeamDestroy>4</TeamDestroy>
<HitPoints>1</HitPoints>
<SheepCollect>2000</SheepCollect>
<PayloadCollect>2000</PayloadCollect>
<GirderCollect>0</GirderCollect>
<WormCollect>0</WormCollect>
<AffectsAI>0</AffectsAI>
</TriggerDataContainer>
...
</xomObjects>
</xomArchive>
Затем эммитер можно использовать в lua используя новое имя Trig1.
Для этого создаёшь файл MyMap.lua, используя к примеру stdvs.lua в качестве основы, или просто изменяешь stdvs.lua.
Сначала создаёшь триггер в Initialize:
Code
function Initialise()
-- ...
SetData("Trigger.Visibility", 0) --Триггер невидимый
lib_SpawnTrigger("Trig1")
-- ...
end
Потом, когда в игре ты его уничтожаешь, вызывается функция:
Code
function Trigger_Destroyed()
local TriggerIndex = GetData("Trigger.Index")
if TriggerIndex == 1 then --определяется в тэге <Index>1</Index>
--тут код при уничтожении триггера, к примеру какой-то особый взрыв
end
end
А если червь собирает триггер, то
Code
function Trigger_Collected()
local TriggerIndex = GetData("Trigger.Index")
if TriggerIndex == 1 then
--тут код при сборе триггера, к примеру твоё увеличение здоровья
end
end