Jack_Stone, ищешь функцию CalcWeaponPosition в PlayerWeapons, копируешь ее и называешь как-нибудь типа CalcWeaponPositionFixed и далее в ней под строкой // weapon handle заменяешь
Добавлено (06.03.2017, 07:27) --------------------------------------------- Хочу прописать переменную для Nukeballs, но не выходит. Подскажите, пожалуйста, чего не хватает.
Помогите, пожалуйста с кодом. Я хочу сделать так, что биомех при ходьбе мог ранить других монстов и Сэма (как бык или бензопильщик при беге), прописал по аналогии, объявил все нужные переменные, но все равно не работает. Что может быть не так?
/************************************************************ * ATTACK FUNCTIONS * ************************************************************/ // touched another live entity void LiveEntityTouched(ETouch etouch) { if (m_penLastTouched!=etouch.penOther || _pTimer->CurrentTick()>=m_fLastTouchedTime+0.25f) { // hit angle FLOAT3D vDirection = en_vCurrentTranslationAbsolute; vDirection.Normalize(); ANGLE aHitAngle = FLOAT3D(etouch.plCollision)%vDirection; // only hit target in front of you if (aHitAngle < 0.0f) { // increase mass - only if not another bull if (!IsOfSameClass(this, etouch.penOther)) { IncreaseKickedMass(etouch.penOther); }
Сложно сказать с первого взгляда. Попробуй проставить CPrintF'ы где-нибудь в месте, где должен наноситься урон. Если в консоли не будет сообщения, то в самом начале процедуры и так далее. Проверь, соблюдаются ли все условия.
Сообщение отредактировалHeming_Hitrowski - Понедельник, 13.03.2017, 23:00
Поменяй родительский класс биомеханоида на CEnemyRunInto, иначе LiveEntityTouched не будет вызван.
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.
Ждать можно только в процедурах. Возможно несколько вариантов, в зависимости от ситуации. Если от игрового объекта ничего не требуется делать в течении этой секунды, можно использовать autowait. Если в это время могут обрабатываться другие события, то нужно написать wait с заданным временем ожидания:
Код
wait(1.0f) { on (EBegin) : { resume; } // тут обрабатываешь остальные события on (ETimer) : { // тут меняешь свою переменную stop; } }
А если в период ожидания объект может перейти в другое состояние (процедуру), нужно использовать CReminder (поищи функцию SpawnReminder). Он через заданное время пришлёт ивент EReminder.
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.
wait(1.0f) { on (EBegin) : { resume; } // тут обрабатываешь остальные события on (ETimer) : { // тут меняешь свою переменную stop; } }
SpawnReminder я нашел, но никак не пойму как он работает.
В конечном итоге функция уменьшения батарейки фонаря идет в PlayerWeapons (не знаю глупо это или нет, но это пока единственный рабочий способ, и то наполовину), и если прописывать ее как Event наряду со стрельбой и тд, то она, понятное дело, заглушает и стрельбу и всё остальное, пока фонарь включен.
Есть ли еще способ сделать уменьшение переменной не в PlayerWeapons, а в Player? Например, если менять что то стандартное - можно ли сделать так, чтобы Супер Бомба после нажатия на клавишу тратилась не один раз, а пока не нажмешь на клавишу снова? То же самое с фонарем - вкл/выкл, другими словами. Я спрашиваю это, потому что прописал батарейку по аналогии с Бомбой.
Сообщение отредактировалJack_Stone - Среда, 22.03.2017, 00:50
Налицо явное непонимание разницы между functions и procedures. Советую прочитать мою статью в последнем выпуске Serious Time ( http://www.serioussite.ru/load/raznoe/serious_time_1_5/10-1-0-2283 ), там я долго и подробно всё это объясняю. Уменьшать переменную раз в секунду ты можешь из любой процедуры.
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.
SLAwww, я в программировании ноль, потому наверное и вопросы глупые. Так что спасибо за помощь, обязательно прочту Что касается моего вопроса про фонарь, то я сделал что хотел, правда каким-то идиотским и совершенно случайным способом, но зато нужный результат получил.
Народ, скажите плиз, а можно поставить звуки от ударов ножа по поверхности? Я посмотрел что там с Bullet, много всего. С ножом, я так понял, то же самое? Или как то проще можно? Например сделать отсылку на Bullet.
Сообщение отредактировалJack_Stone - Воскресенье, 26.03.2017, 21:44
Думаю тебе прежде всего стоит разобраться, как работает луч. (мне тут придется много расписывать, и возможно не самым точным образом, поэтому я этого делать не буду. Но ты обязательно поэкспериментируй с CastRay) Подскажу:
Там есть условие, когда то, на что ударил луч, является брашем:
Heming_Hitrowski, я так и сделал просто я изначально хотел, чтобы при ударе по каждой поверхности проигрывался разный звук. А так то да)) Ничего тут сложного нет, прописал собственно как и все остальные звуки
Народ, подскажите, пожалуйста, следующее. В одном условии мне нужно прописать наличие оружия, неважно есть к нему патроны или нет, важно то, что его уже подбирали. Если точнее, то я про функцию AddDefaultAmmoForWeapon. У меня для каждого оружия по 2 переменных патронов - магазин и патроны в запасе, так вот я хочу сделать так, чтобы при ПЕРВОМ подборе AmmoPicked равнялось 0, а при последующих подборах оружия AmmoPicked равнялось количеству патронов в магазине, потому и логично каким-то образом прописать наличие оружия у Сэма. Может кто-нибудь с этим сталкивался уже?
Подскажите пожалуйста как сделать так, чтобы функция активировалась, когда Сэм находится внутри определенной области, как ,например, с SoundHolder - звук слышен, только если находишься в пределах FalloffRange. Возможно ли это сделать, не создавая отдельный класс-объект, а используя уже что-то готовое, хоть тот же SoundHolder, но чтобы при попадании в область FalloffRange, срабатывало что-то из другого класса - менялась какая-нибудь переменная. Это возможно?
Если попроще, то так -
Надо, чтобы во время нахождения на зоне FalloffRange какого-нибудь объекта, в Player.es какая-то переменная принимала значение TRUE, а при выходе из этой зоны становилась обратно FALSE.
Сообщение отредактировалJack_Stone - Пятница, 05.05.2017, 12:43
Ar2R-devil-PiNKy, так открыто всё а если добавляю еще пишет PARSE ERROR. Вот что за фигня. Может объявлять надо как-то по-особому и делать отсылку на Player?
Сообщение отредактировалJack_Stone - Пятница, 05.05.2017, 17:24
Jack_Stone, ошибка такого рода может быть вызвана любой лишней или недостающей скобкой, отсутствием точки с запятой и т.п. Нужно проверять не только строку, на которую указывает компилятор, но и весь блок/файл выше.
"Просто у него окрепшая физика, а ты ещё не дорос..."
То есть при попадании в область WatchPlayers m_bBuy становится TRUE, а значит и m_bBuyActive2 тоже должна становиться TRUE. Логически вроде бы правильно написано, но не работает, а виснет.
В общем вопрос - как сделать, чтобы изменение значения переменной в WatchPlayers меняло значение переменной в Player ?
Или правильнее делать отсылку сразу из WatchPlayers на Player ?
ЦитатаJack_Stone ()
((CPlayer*)&*m_penPlayer)->m_bBuyActive2 = TRUE;
Сообщение отредактировалJack_Stone - Суббота, 06.05.2017, 11:36