описание:после смерти актора запускается таймер на 20-30 сек.,после чего на месте смерти первого появляется такой же новый.(т.к. "возрождение",как я понял,невозможно даже в Lua)
В ини актора в самом начале добавь: (лучше скопируй это с ини Torden'а моего мода)
AddEffect = MOPixel PresetName = TW Particle S Mass = 0.008 RestThreshold = -500 //LifeTime = 100 Sharpness = 0 HitsMOs = 0 GetsHitByMOs = 0 AirResistance = 0.1 GlobalAccScalar = 0.0 ScriptPath = <путь до скрипта> Color = Color R = 255 G = 0 B = 255 Atom = Atom Material = Material CopyOf = Air TrailColor = Color R = 255 G = 0 B = 255 TrailLength = 5
Добавлено (07.01.2011, 15:26) --------------------------------------------- Затем, в той части, которая описывает самого актора, добавь: AddEmitter = AEmitter CopyOf = TW Emitter S
Теперь рядом с актором будет спавниться частица, к которой прикреплен скрипт.
Добавлено (07.01.2011, 15:43) --------------------------------------------- А вот скрипт к той частице. Теперь пробуй и пиши, какие ошибки выдавало в консоли.
Code
function Create(self)
if not self.ResAct then self.ResActT = {} self.ResActT.Timer = Timer(); end self.ResAct = nil; -- сам актор self.ResActN = "<имя актора>";
local curdist = 30; -- проверяем, есть ли поблизости актор с нужным именем for i = 1,MovableMan:GetMOIDCount()-1 do target = MovableMan:GetMOFromID(i); if target.PresetName == self.ResActN then local avgx = target.Pos.X - self.Pos.X; local avgy = target.Pos.Y - self.Pos.Y; local dist = math.sqrt(avgx ^ 2 + avgy ^ 2); if dist < curdist then self.ResAct = target; end end end
if self.ResAct == nil then -- если актор не найден, то частица убирается self.ToDelete = true; self.LifeTime = 0; end
end
function Update(self)
self.ToDelete = false; -- это чтобы частица никуда не делась self.ToSettle = false;
if self.ResAct then -- если наш чух когда-то существовал хотя бы if MovableMan:IsActor(self.ResAct) -- если он сейчас жив if string.find(self.ResAct.PresetName ,self.ResActN) ~= nil then -- и если его имя равно его имени, лол self.Vel = Vector(0,0); -- устанавливаем скорость и позицию частицы так, чтоб она была рядом с актором self.Pos = self.ResAct.Pos; self.RAPos = self.ResAct.Pos; -- обновляем позицию актора, чтоб потом в ее же заспавнить нового чухана else self.ToDelete = true; -- иначе удаляем self.LifeTime = 0; end else if not self.RTCHlolper then -- обнуляем таймер, который отсчет вести будет self.ResActT.Timer:Reset(); self.RTCHlolper = 1; end if self.ResActT.Timer:IsPastSimMS(10000) then -- если прошло 10 секунд local actor = CreateAHuman("имя","папка с модом"); -- спавним нового актора actor.Pos = self.RAPos; actor.Team = 0; -- (вроде бы) MovableMan:AddActor(actor); end end end
end
Сообщение отредактировал Dantalion13 - Пятница, 07.01.2011, 15:44
Dantalion13, зачем всё так сложно то? Гораздо проще написать два маленьких скрипта. Первый прикрепляется к актору, второй к некоторому эмиттеру. Скрипт 1 создает при смерти актора некий эмиттер. Второй скрипт включает таймер, по истечении которого эмиттер уничтожается, образуя актора. А можно даже и без луа. Мой YouTube канал.
Интересно, только я помню мод "Гринков - самый бесстрашный из клонов"? Если вы читаете этот текст, значит вы посетили кладбище моей юности. Прощай, cortexcommandru.3dn.ru, ты для меня много значил когда-то.
Спаси свою душу, используй ВОЛШЕБНЫЙ ПОИСК! Если вы читаете этот текст, значит вы посетили кладбище моей юности. Прощай, cortexcommandru.3dn.ru, ты для меня много значил когда-то.
Добавлено (08.01.2011, 01:48) --------------------------------------------- Инквизитор, будь человеком: дай скрин ошибки или опиши словами, чего там не так.
была бы ошибка,я её решил бы(или сюда выложил).всё нормально работает,без ошибок.только он не воскресает.
Добавлено (08.01.2011, 13:37) --------------------------------------------- скрипт гринкова работает,только слишком быстро,а как замедлить хз.а вот тот,что Thunder-ский вообще не пашет.
Как насчет сделать гранату? И единственным ее осколком, гибом, сделать нового человечка. И таймер гранате задать. Если решишь пойти по этому пути, подгоню недостающий код спавна и активации гранаты при смерти чушка.
Сообщение отредактировал Dantalion13 - Суббота, 08.01.2011, 21:38
Ага, и ты забыл сказать, что солдат будет неподконтролен игроку. Если вы читаете этот текст, значит вы посетили кладбище моей юности. Прощай, cortexcommandru.3dn.ru, ты для меня много значил когда-то.
Во-первых, не гранату, а частицу MOPixel, как делают все цивилизованные мододелы. Во-вторых, как ты будешь переносить информацию о команде актора? Тащемта, я могу сказать тебе решение, но мне интересно, что ты скажешь. Если вы читаете этот текст, значит вы посетили кладбище моей юности. Прощай, cortexcommandru.3dn.ru, ты для меня много значил когда-то.
Любой более-менее сложный луа-мод. Фишка в том, что остроту любого объекта можно прямо во время игры через луа менять как хочешь. И она, разумеется, остается локально для этого конкретного объекта. Причем параметр остроты есть даже у акторов, хоть по идее он и не нужен, зато знающим мододелам оставляет целую числовую переменную для хранения каких угодно данных, за что Дане спасибо. Если вы читаете этот текст, значит вы посетили кладбище моей юности. Прощай, cortexcommandru.3dn.ru, ты для меня много значил когда-то.
Для каждого объекта ведь можно назначать некоторые свои переменные? А потом их использовать. В коде почти всегда встречается назначение переменных такого типа: self.perscons На них можно зарезервировать что угодно. А потом использовать хоть где. Можно ведь создать гранату а после этого назначить её значение переменной granade.teamact равной self.team А потом при разрушении гранаты через функцию Destroy(self) создать актора и назначить ему команду, равную значению переменной гранаты teamact . И зачем мучится с гранатой? Я же ранее привел более простой пример.