Приветствую Вас Гость | RSSГлавная | Пара вопросов по Lua - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Пара вопросов по Lua
AltSk0PДата: Четверг, 30.04.2015, 06:51 | Сообщение # 1
Краб
Группа: Проверенные
Сообщений: 19
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Всем привет.
Суть: при выстреле из определенного вида оружия создаю эмиттер и присваиваю ему переменную, ссылающубся на выстрелившего актора.

Код
function Create(self)
self.curdist = 20
    for i = 1,MovableMan:GetMOIDCount()-1 do
       self.gun = MovableMan:GetMOFromID(i);
     if self.gun.PresetName == "Centipede Mk2" and self.gun.ClassName == "HDFirearm" and (self.gun.Pos-self.Pos).Magnitude < self.curdist then
       self.actor = MovableMan:GetMOFromID(self.gun.RootID);
      if MovableMan:IsActor(self.actor) then
    self.parent = ToActor(self.actor);
    self.parentgun = ToHDFirearm(self.gun);
    self.parentgun.ToDelete = true;
    self.parent:FlashWhite(760);
    local sparticle = CreateAEmitter("Centipede Sound","Medical Supplies.rte");
    sparticle.Pos = self.parent.Pos;
    MovableMan:AddParticle(sparticle);
    local cparticle = CreateAEmitter("CentipedeController","Medical Supplies.rte");
    cparticle.Pos = self.parent.Pos;
    cparticle.parent = self.parent;
    MovableMan:AddParticle(cparticle);
      end
     end
    end
    self.ToDelete = true;
end

Строка cparticle.parent = self.parent . Проблема в том, что скрипт созданного эмиттера переменную parent не читает ни под каким видом - т.е. не происходит никаких действий, с ним связанных. Вопрос: как присвоить переменную правильно, чтобы потом ее можно было использовать в отдельном скрипте? Запускать ту же проверку в другом скрипте не предлагать, не работает.

Вопрос №2. Есть код таймера:

Код
function Create(self)
    health2add = 2
    CF_HealTimer = Timer();
    CF_HealTimer:Reset();
    CF_HealThisTime = false;
end

function Update(self)

    if CF_HealTimer:IsPastSimMS(1500) then
       CF_HealThisTime = true;
       CF_HealTimer:Reset();
    end

if CF_HealThisTime = true then
       --actions
end

if CF_HealThisTime = true then
       CF_HealThisTime = false;
    end

end
Проблема: то ли не сбрасывается таймер, то ли не снимается переменная CF_HealThisTime, понять я так и не смог.

Буду благодарен за помощь/советы.
 
BlumpДата: Четверг, 30.04.2015, 16:51 | Сообщение # 2
Краб
Группа: Проверенные
Сообщений: 736
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
AltSk0P, чёрт возьми! Этож тот самый код, из которого я сделал своё первое зелье лечения!
Думаю, у AEmitter'а cparticle нет такого заранее заданного параметра parent). Ты ссылаешься на параметр самого объекта. К таким параметрам также можно отнести массу, скорость, остроту и т.п.
Как я понял, ты хочешь прикрепить как-то этот эмиттер к актору? Тут нужно создавать отдельный скрипт для этого эмиттера. Надо просто присвоить какому-нибудь неиспользуемому/ненужному параметру эмиттера значение, равное ID парента (в твоём случае, это будет self.parent). Типо, cparticle.Sharpness = self.Parent.ID. Затем, в скрипте этого эмиттера использовать остроту (Sharpness) для поиска этого parent'a.
 
puksusДата: Четверг, 30.04.2015, 16:52 | Сообщение # 3
Краб
Группа: Модераторы
Сообщений: 900
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
ну, в луа оператор сравнения на равенство ==, а не = , поэтому, в проверке условия ты сначала присваиваешь переменной CF_HealThisTime значение true, а затем выполняется логическое условие, состоящее из одной переменной CF_HealThisTime, а она уже тру. Естественно, всегда заходишь в этот иф.
Ну, по крайней мере, так бы произошло в сишке.


Сообщение отредактировал puksus - Четверг, 30.04.2015, 16:56
 
BlumpДата: Четверг, 30.04.2015, 17:05 | Сообщение # 4
Краб
Группа: Проверенные
Сообщений: 736
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
AltSk0P, таак, второй код.
Тут непонятно немного. Ты хочешь, чтобы действие выполнялось повторно через определённый промежуток времени? Или чтобы оно начало выполняться просто через определённое время (с момента создания, так скажем)?
-Если первое, то никаких лишних переменных (CF_HealThisTime в твоём случае) не надо. Просто, переместить команду, которая должна выполняться с определнным интервалом, в блок с таймером (например: вместо ненужного CF_HealThisTime).
-Если второе, то сбрасывать таймер не надо. А, да и в начале (в function Create()) не нужно лишний раз сбрасывать таймер - он здесь существует для конктретного объета, и его не могут использовать другие аналогичные объекты. Тем более, даже если его могли бы использовать все аналогичные объекты, то прикинь, какая штука получится, если у одного объекта ещё тамймер не отсчитал положенное время, а его уже обнуляет другой объект).
 
BlumpДата: Четверг, 30.04.2015, 17:06 | Сообщение # 5
Краб
Группа: Проверенные
Сообщений: 736
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
puksus, точно же! В условие же другой знак равенства (точнее, проверки равенства). А я тут сижу, думаю...
AltSk0P, короче, просто поменя в строке "if CF_HealThisTime = true", знак "=" на "==".


Сообщение отредактировал Blump - Четверг, 30.04.2015, 17:07
 
AltSk0PДата: Четверг, 30.04.2015, 21:33 | Сообщение # 6
Краб
Группа: Проверенные
Сообщений: 19
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Огромное спасибо, работает, как часы.


Цитата
AltSk0P, чёрт возьми! Этож тот самый код, из которого я сделал своё первое зелье лечения!
 Беспардонно и нагло стырил его из кода Unmapped Lands, там, где элитных солдат ранг лечит wink
 
BlumpДата: Пятница, 01.05.2015, 10:28 | Сообщение # 7
Краб
Группа: Проверенные
Сообщений: 736
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
AltSk0P, а я спёр из мода Xenobiology)
Кстати, если ты будешь проверять код, то советую поглядывать в консоль КК. Он там пишет об ошибке в коде с точностью до строки.


Сообщение отредактировал Blump - Пятница, 01.05.2015, 10:43
 
SfabrikanДата: Пятница, 01.05.2015, 12:15 | Сообщение # 8
Краб
Группа: Половина модератора
Сообщений: 1330
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
puksus, открою тебе секрет, когда переменная Boolearn (Я не помню), то при проверке условия можно вообще не писать ==, достаточно после иф написать названия этой самой переменой и все (Естественно условие сработает когда перменая труе, если фалс то условие пропускается). Ну можно для удобства писать, никто не запрещает.
 
puksusДата: Пятница, 01.05.2015, 12:42 | Сообщение # 9
Краб
Группа: Модераторы
Сообщений: 900
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Sfabrikan, открою тебе секрет, я знаю. Более того, можно даже инты и флоты в условие вместо булевской переменной пихать. Всё, что не ноль - то тру. Можно даже числовые константы использовать.
while(1); //бесконечный цикл
if(true){} //всегда зайдём
if(-0.5){} //всегда зайдём


Сообщение отредактировал puksus - Пятница, 01.05.2015, 12:51
 
SfabrikanДата: Понедельник, 04.05.2015, 10:13 | Сообщение # 10
Краб
Группа: Половина модератора
Сообщений: 1330
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Цитата puksus ()
Sfabrikan, открою тебе секрет, я знаю. Более того, можно даже инты и флоты в условие вместо булевской переменной пихать. Всё, что не ноль - то тру. Можно даже числовые константы использовать.
while(1); //бесконечный цикл
if(true){} //всегда зайдём
if(-0.5){} //всегда зайдём

Открою тебе секрет, я знаю. Можно даже функции писать
 
puksusДата: Понедельник, 04.05.2015, 10:34 | Сообщение # 11
Краб
Группа: Модераторы
Сообщений: 900
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
Открою тебе секрет, я знаю. Функции, помимо написания, можно ещё и даже перегружать. Возможно, не во всех языках.

Сообщение отредактировал puksus - Понедельник, 04.05.2015, 10:40
 
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Последние темы Читаемые темы Последние зарегистрированные пользователи
Флудильня! [gjrfytn]

RPG games have attracted a lot of attention recently latest [tonyrose2003]

Качалка не выходя из дома [tonyrose2003]

Хы! [tonyrose2003]

HELP [tonyrose2003]

The Sims 3 [greendayone82]

ЯДЕРНЫЙ ТРОН!!! [greendayone82]

Очень интересная игра [greendayone82]

Проблема с Loadouts [mekkievbk]

CC теперь в Open Source и B33 с мультиплеером !!! [gjrfytn]

[1]>Флудильня! [4432]

[2]>Свалка арта. [777]

[3]>Фан-арт по Cortex Command [349]

[4]>игра обломи предыдущего [322]

[5]>Песенки или музыка. [261]

[6]>Russian Combat Small Arms {B24-B27} [239]

[7]>[UNITED TERRAN FORCES] [234]

[8]>Выход 24 билда. [214]

[9]>Elzirs [212]

[10]>Cortex Command - Online Deathmatch [199]

tonyrose2003 [02.07.2024|06:03]

ktota12345678 [23.06.2024|20:14]

BlackShadow7755 [11.04.2024|22:28]

ghost4559 [28.03.2024|12:29]

rostislavpoarkov55 [21.03.2024|10:44]

dawidponomaryow [08.03.2024|21:16]

nekoplay18 [31.01.2024|20:10]

Provv [19.10.2023|20:58]

ranatolevnko200 [01.10.2023|17:56]

Silencer18 [24.07.2023|21:52]


Вверх
Русский Фан Сайт Cortex Command © 2024.