Приветствую Вас Гость | RSSГлавная | Пара вопросов по Lua - Форум | Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Cortex Command » Вопросы по моддингу » Пара вопросов по Lua
Пара вопросов по Lua
AltSk0PДата: Четверг, 30.04.2015, 06:51 | Сообщение # 1
Краб
Группа: Проверенные
Сообщений: 23
Награды: 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
Коалиция
Группа: Проверенные
Сообщений: 777
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
AltSk0P, чёрт возьми! Этож тот самый код, из которого я сделал своё первое зелье лечения!
Думаю, у AEmitter'а cparticle нет такого заранее заданного параметра parent). Ты ссылаешься на параметр самого объекта. К таким параметрам также можно отнести массу, скорость, остроту и т.п.
Как я понял, ты хочешь прикрепить как-то этот эмиттер к актору? Тут нужно создавать отдельный скрипт для этого эмиттера. Надо просто присвоить какому-нибудь неиспользуемому/ненужному параметру эмиттера значение, равное ID парента (в твоём случае, это будет self.parent). Типо, cparticle.Sharpness = self.Parent.ID. Затем, в скрипте этого эмиттера использовать остроту (Sharpness) для поиска этого parent'a.


Моддинг - это сезонное. По крайней мере, у меня...
 
puksusДата: Четверг, 30.04.2015, 16:52 | Сообщение # 3
Пукс
Группа: Модераторы
Сообщений: 939
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
ну, в луа оператор сравнения на равенство ==, а не = , поэтому, в проверке условия ты сначала присваиваешь переменной CF_HealThisTime значение true, а затем выполняется логическое условие, состоящее из одной переменной CF_HealThisTime, а она уже тру. Естественно, всегда заходишь в этот иф.
Ну, по крайней мере, так бы произошло в сишке.


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


Моддинг - это сезонное. По крайней мере, у меня...
 
BlumpДата: Четверг, 30.04.2015, 17:06 | Сообщение # 5
Коалиция
Группа: Проверенные
Сообщений: 777
Награды: 0  +
Репутация:  ±
Замечания:  ±
Статус: Offline
puksus, точно же! В условие же другой знак равенства (точнее, проверки равенства). А я тут сижу, думаю...
AltSk0P, короче, просто поменя в строке "if CF_HealThisTime = true", знак "=" на "==".


Моддинг - это сезонное. По крайней мере, у меня...

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


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


Моддинг - это сезонное. По крайней мере, у меня...

Сообщение отредактировал Blump - Пятница, 01.05.2015, 10:43
 
SfabrikanДата: Пятница, 01.05.2015, 12:15 | Сообщение # 8
Швабри
Группа: Половина модератора
Сообщений: 1470
Награды: 1  +
Репутация:  ±
Замечания:  ±
Статус: Offline
puksus, открою тебе секрет, когда переменная Boolearn (Я не помню), то при проверке условия можно вообще не писать ==, достаточно после иф написать названия этой самой переменой и все (Естественно условие сработает когда перменая труе, если фалс то условие пропускается). Ну можно для удобства писать, никто не запрещает.

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


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

Открою тебе секрет, я знаю. Можно даже функции писать


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

Сообщение отредактировал puksus - Понедельник, 04.05.2015, 10:40
 
Форум » Cortex Command » Вопросы по моддингу » Пара вопросов по Lua
Страница 1 из 11
Поиск:
Статистика Форума
Последние темы Читаемые темы Последние зарегистрированные пользователи
Хорошие фильмы [puksus]

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

District 9 Multi-National United (MNU) [Xterian]

Песенки или музыка. [puksus]

Super Weapons of AcoACorp [puksus]

Black Ravens v.0.8.8 {B27} [degtyar02]

Outposts v.1.5.1 {B32} [Xterian]

OnLine Tech [alexgamer0092]

Новые Бункеры [Xterian]

Command & Conquer [alexgamer0092]

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

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

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

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

[5]>Black Ravens v.0.8.8 {B27} [288]

[6]>Выход 24 билда. [281]

[7]>[UNITED TERRAN FORCES] [274]

[8]>Улучшения форума [270]

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

[10]>Russian Combat Small Arms {B24-B27} [263]

serezhka8402 [16.11.2017|13:23]

fedorofflucka2017 [14.11.2017|18:43]

abramovfilip1989 [10.11.2017|11:18]

maksa1990ra [04.11.2017|15:55]

dimatchagin [01.11.2017|07:55]

doktorkto529 [31.10.2017|20:30]

lvivua [29.10.2017|12:30]

farsj10i2 [24.10.2017|14:44]

adrianfames [14.10.2017|08:24]

alexgamer0092 [07.10.2017|02:00]


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