Создавая вот таким образом энтити, ты объявляешь локальную переменную, которая нигде не запоминается (мы потом не сможем уничтожить этот лайт). Правильнее будет вот так:
Я не уверен, что эта строчка вообще что-то даст. Если ты хочешь присвоить лайту light animation, то можно записать это так: [code((CLight*)&*m_penLight)->m_aoLightAnimation.SetData_t(CTFILENAME("Animations\\Flashlight.ani"));[/code] При этом тебе нужно будет в самом верху класса дописать #include связанный с классом Light (чтобы как раз не было ошибки undefined). 3.
Код
else if (m_penLight != NULL){
можно записать просто как
Код
else {
Сообщение отредактировалHeming_Hitrowski - Понедельник, 03.10.2016, 11:36
спасибо за советы, но что то опять не выходит. У меня короче получилось так: прописал две кнопки - вкл. (желтый Light) и выкл. (черный Light). Heming_Hitrowski, ((CLight*)&*m_penLight)->m_aoLightAnimation.SetData_t(CTFILENAME("Animations\\Flashlight.ani")) очень даже работает. Но есть проблема - вот эти 2 Light`а каким-то образом перебивают Light при стрельбе, даже если, например, в самом начале уровня нажать кнопку либо ВКЛ., либо ВЫКЛ., то свет от оружия нейтрализуется. Вариант фонаря не идеальный, но тоже сойдет.
Добавлено (03.10.2016, 21:29) --------------------------------------------- самое интересное то, что в этом коде только вот этого и хватает - ((CLight*)&*m_penLight)->m_aoLightAnimation.SetData_t(CTFILENAME("Animations\\Flashlight.ani")). Больше никакие переменные не нужны. Но непонятно как теперь передвинуть эту анимацию чуть дальше от Сэма.
Добавлено (03.10.2016, 21:32) --------------------------------------------- вот такой вот код, для выключения такой же, только анимация другая
Код
// turn on flashlight void Flashlight(){ { m_aoLightAnimation.SetData_t(CTFILENAME("Animations\\Flashlight.ani")); } };
Ты тут очень сильно нагородил)) Дело в том, что переменная m_aoLightAnimation используется как раз для вспышки при стрельбе, и ее ВООБЩЕ НЕ НАДО ТРОГАТЬ ЧТОБЫ СДЕЛАТЬ ФОНАРЬ, иначе произойдет такой ужас, который ты описал. Прочитай еще раз что мы тебе предлагали и старайся делать все по шагам.
Для начала давай попробуем все же заспавнить лайт, раз уж ты решил работать именно с ним, а не с Projectile.
По нажатии кнопки фонаря давай попробуем добавить вот такой код.
Код
CPlacement3D pl = GetPlacement(); // получили позицию игрока pl.pl_PositionVector(2) += 1.0f; // сдвинули ее чуть повыше, чтобы лайт не был в "земле" m_penLight = CreateEntity(pl, CLASS_LIGHT); // объяви CLASS_LIGHT заранее, в блоке components m_penLight->Initialize(); // инициализируем лайт на обработанных координатах
Что-нибудь происходит при выполнении?
Сообщение отредактировалHeming_Hitrowski - Вторник, 04.10.2016, 00:00
Heming_Hitrowski, нет, не происходит, но всё компилируется нормально.
Добавлено (04.10.2016, 00:26) --------------------------------------------- Хотя неее, что то да есть уже) сам Light появляется и исчезает при нажатии кнопки, но свет не производит.
Добавлено (04.10.2016, 00:28) --------------------------------------------- вот с этим кодом
Добавлено (04.10.2016, 00:28) --------------------------------------------- я вообще запутался уже))
Добавлено (04.10.2016, 00:32) --------------------------------------------- с твоим кодом точно также работает, но света нет
Код
// turn on off flashlight void Flashlight(){
if (m_penLight == NULL){ CPlacement3D pl = GetPlacement(); // получили позицию игрока pl.pl_PositionVector(2) += 1.0f; // сдвинули ее чуть повыше, чтобы лайт не был в "земле" m_penLight = CreateEntity(pl, CLASS_LIGHT); // объяви CLASS_LIGHT заранее, в блоке components m_penLight->Initialize(); } else { m_penLight->Destroy(); m_penLight = NULL;
}
};
Добавлено (04.10.2016, 10:10) --------------------------------------------- может он просто телепортирует модель лайта, а "физические свойства" надо отдельно прописывать? но как?
Heming_Hitrowski, всё то же самое. Как будто и не менял ничего. Света нет.
Добавлено (04.10.2016, 21:21) --------------------------------------------- (CTrigger*)&*m_penTrigger)->m_strName = "New Trigger";
эта строка вообще никак не влияет, написать можно любой набор букв на месте "New Trigger"
Добавлено (04.10.2016, 22:20) --------------------------------------------- попробовал ту же схему с моделью, та же фигня: почему то не меняет тип проджектайла - всегда выстреливает ракету, которая убивает Сэма
Добавлено (04.10.2016, 23:00) --------------------------------------------- тут и правда используется ракета Сэма, но это ладно. Я сделал так, чтобы она не летела, а как сделать так, чтобы она приатачилась к Сэму и двигалась вместе с ним?
Добавлено (06.10.2016, 10:30) --------------------------------------------- ВСЕМ, кто помогал мне с созданием фонарика, СПАСИБО, особенно Heming_Hitrowski, ) наконец-то получилось но вот чего я не пойму, так это почему он начал светить только тогда, когда прописал эту строчку:
(CTrigger*)&*m_penTrigger)->m_strName = "New Trigger";
эта строка вообще никак не влияет, написать можно любой набор букв на месте "New Trigger"
Оно и логично.) Попробуй сам себе объяснить этот код и понять, что он делает. Если не получится, вот спойлер.
Мы приводим класс CEntityPointer к типу CTrigger, затем присваиваем переменной m_strName значение New Trigger. А что за переменная m_strName? Это имя объекта. Что фактически изменится, если ты изменишь имя? Ничего) Я тебе просто пытался на пальцах объяснить это, но, видимо, оказалось недостаточно понятно) Тоже самое можно делать и с другими переменными класса Trigger, например, Message.
Код
m_penLight->SetParent( this);
Эта строчка привязывает лайт к игроку (на манер свойства Parent в Serious Editor). this - это как раз указатель на класс Player. Поэтому лайт движется за игроком) Это конечно грубый способ, но работать будет.
Сообщение отредактировалHeming_Hitrowski - Четверг, 06.10.2016, 13:52
ну теперь то до меня дошло)) хотелось бы теперь узнать, как изменить свойства лайта - яркость и цвет.
Добавлено (06.10.2016, 23:29) --------------------------------------------- я пытался с этим разобраться и очень долго, но никак
Добавлено (06.10.2016, 23:32) --------------------------------------------- и еще у меня какая-то фигня с GameMP.dll, не компилируется, выдает 14 ошибок, может дело в Dependencies? как там галки надо расставить?
Jack_Stone, в Light.es есть переменная 2 COLOR m_colColor "Color" 'C' =C_GRAY,
Она же отвечает за цвет лайта, и по сути, за его яркость.
COLOR - это тип переменной, он принимает значения в шестнадцатеричной системе счисления (старожилы меня поправят, вообще это тип ULONG, но значения, видимо, для удобства записывают по другому). Но что такое C_GRAY? Это уже определенная в движке константа, смотри, что можно обнаружить, если ты зайдешь в Engine/Graphics/Color.h
Соответственно, лайту можно задать, например, C_WHITE и он будет ярче. (CLight*)&*penLight)->m_colColor = C_WHITE;
Можно и не пользоваться константами и записать значение самому. Вот как по сути расшифровывается запись цвета: 0xRRGGBBAA. Где RR - это Red, GG - это Green, BB - это Blue и AA - это альфа-канал (для лайта можно оставить 00). Осталось только подставить нужные цифры) Вот как это выглядело бы с белым цветом.
(CLight*)&*penLight)->m_colColor = 0xFFFFFF00;
Могу ошибаться, конечно, нет компилятора под рукой, но должно работать)
Сообщение отредактировалHeming_Hitrowski - Суббота, 08.10.2016, 14:05
Настроил SDK, вылазит ошибка G:\MYMOD\Sources\GameMP\stdafx.h(14) : fatal error C1083: Cannot open include file: 'EntitiesMP/Global.h': No such file or directory Error executing cl.exe. Поиск по сайту мне не помог, в настройках stdafx стоит create precompiled header, в других местах use precompilled header, компиляция отдельно этого файла дает такую же точно ошибку. Помогите, пожалуйста.
NucaCat, Global.h генерируется из Global.es компилятором ECC. При сборке компилятор студии не может найти заголовочный файл и этому могут быть следующие ричины:
- У тебя не собран проект EntitiesMP. Это может быть из-за того что не правильно настроены зависимости проектов. EntitiesMP должен собираться в первую очередь. - У тебя не правильно указаны пути к Includes в Options->Directories.
Ситуация. Я делал мод. Потом был конкурс и я его заморозил. Сейчас я к нему вернулся, но вот у меня при запуске уровня вот такая ошибка выскакивает. https://yadi.sk/i/jY_7TGSVweRre З.Ы. Раньше работал на другом компьютере. Потом винт с него переставил в компьютер на котором работаю сейчас.
Всё очень серьёзно. P.S. Не пишите мне на Email, пишите в Л.С.
Используешь 1.10? Вылетает на всех уровнях, или только на твоих?
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
У тебя последняя стабильная версия кода с гитхаба? Сам собирал в 2013/2015 студии?
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
Where did all the dragons go? We searched in the hills and we searched down the canyons, we even scanned the depths of the caves with our armour, swords and lanterns. Oh, if only had we seen him lurch, from his glorious skull covered perch.
CRACK went his claws and SMACK swipped the tail, a ROAR of might, one big BITE.
я хочу прописать еще одни автоматные патроны. Сделал по аналогии с Bullets - прописал в PlayerWeapons, AmmoItem, AmmpPack, HUD, но все равно выдает ошибки и пишет это тип патронов не объявлен, а где не понятно. Может я что-то пропустил, где-то еще нужно объявлять их?
Jack_Stone, Что не объявлено? Где не объявлено? Так на словах трудно понять что там у тебя происходит, косяк можно допустить где угодно. Ошибку, которая вылазит при компиляции хотя бы прикладывал бы, а ещё лучше заодно и куски кода где и что ты менял.
Так я не знаю, потому и спрашиваю, может где-то еще нужно прописывать, объявлять новые патроны. потому что с++ ничего не пишет кроме как UNDECLARED, хотя по сути везде где нужно я объявил новую переменную новых патронов - в PlayerWeapons, AmmoItem, AmmpPack, HUD. На счет менял-не менял: я ничего не менял, а просто добавил строки по аналогии с Bullets.
Jack_Stone, Undeclared - это как раз то что и не объявлено. Поэтому тебя и попросили дать скрин этих ошибок или написать так, что именно не объявлено и где, чтобы помочь тебе