Новые сообщения Участники Правила Поиск
Помощь по SDK для Serious Sam 1.05/1.07
Molodec Вторник, 27.03.2012, 10:59 | Сообщение # 1321


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
В С++ особо не разбираюсь. Только синтаксис и то средне. Поэтому интересуюсь о сложности реализации поставленной задачи.
Когда то мы обсуждали как сделать так чтобы в ДМ трупы игроков не исчезали. А оставались на полу. Вроде бы дошли до того что нужно сделать создание аналогичной модели.. с теми же координатами и т.д.
На сколько это сложно?


SLAwww Вторник, 27.03.2012, 11:16 | Сообщение # 1322


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Это элементарно.

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.

and so ended our search.
Molodec Вторник, 27.03.2012, 11:49 | Сообщение # 1323


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
SLAwww, для профессионала такого уровня как ты - конечно же :).
А вообще там же куча проблем наверное - определение координат, скина. А если я хочу чтобы его еще можно было разорвать на части то тут наверное нужно еще и поле с названием модели запомнить. А если подумать что модель игрока состоит из атачментов...


SeriousAlexej Вторник, 27.03.2012, 14:20 | Сообщение # 1324


Serious Editor
Сообщений: 1246
Награды: 52
Замечания: 0%
 
SLAwww, я вот прикинул как это сделать... Сперва как бы создать МХ2 там, где лежит игрок, передать ему ModelObject игрока и синхронизировать анимки. Я подобное делать уже пытался, но у меня не выходило передать МХ2 нужную модельку (пришлось копировать нужную ентитю) :( Ни после инициализации класса, ни до. Может, надо было синхронизировать модели?

Molodec Вторник, 27.03.2012, 14:25 | Сообщение # 1325


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
SeriousAlexej, что за МХ2?

SeriousAlexej Вторник, 27.03.2012, 14:32 | Сообщение # 1326


Serious Editor
Сообщений: 1246
Награды: 52
Замечания: 0%
 
ModelHolder2

Molodec Вторник, 27.03.2012, 14:33 | Сообщение # 1327


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
А двоечка откуда? Это стандартный класс? :)

SeriousAlexej Вторник, 27.03.2012, 14:40 | Сообщение # 1328


Serious Editor
Сообщений: 1246
Награды: 52
Замечания: 0%
 
Да, стандартный) У него побольше функций, чем у первого) Его и используют в редакторе. Ему то я и не могу передать файл модели и текстуры(

SLAwww Вторник, 27.03.2012, 14:44 | Сообщение # 1329


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Ты даже не взялся за работу, но уже рассуждаешь о ее якобы запредельной сложности. Это такой намек на то, чтобы тебе дали готовый код? Достаточно скопировать параметры текущей модели в свежесозданный CModelHolder2 когда игрок умирает. С ограничением числа наспавненых таким методом моделей - чуть сложнее, но только чуть-чуть. Задавай вопросы уже когда начнешь пытаться это сделать.

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.

and so ended our search.
Molodec Вторник, 27.03.2012, 14:53 | Сообщение # 1330


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
SLAwww, господи, ты чего. Я не намекал не на что.
А если бы и намекал, то сразу бы деньги предложил. Но как ты видишь, я ведь не делал этого. :)
Я спросил о сложности задачи, чтобы понять стоит ли игра свеч. Ты сказал что все элементарно. А я вот задумался, не все же так элементарно как ты говоришь. И решил тебе напомнить о трудностях, которые, ты возможно не учел. Но как сейчас вижу - все таки учел. И даже более того - объяснил что нужно делать. Так что я тебе и так благодарен. :)
Просто не надо делать из меня "попрошайку". Ок? :)


SLAwww Вторник, 27.03.2012, 15:17 | Сообщение # 1331


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Как скажешь, но я не имел ввиду, что попросить кусок готового кода - это так плохо. Если тебе совсем непонятно, как выбросить в CWorld неисчезающую тушку игрока, пару строчек мне набросать не сложно, лишь бы ты понял, как они работают. Сложнее будет с числом трупов - оптимальным решением здесь будет небольшая модификация CModelHolder2 для создания на его базе односвязного списка. Можно, конечно, просто каждый раз итерировать по объектам в мире, чтобы определить число наспавненных моделей, но моя ЭВМ на лампах и перфокартах будет лагать всеми своими реле от такого излишнего расточительства. ) Еще есть любезно предоставленный кротами CDynamicContainer. Который не сериализуется, ага, так что как минимум те же итерации при загрузке игры.

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.

and so ended our search.
Molodec Вторник, 27.03.2012, 15:24 | Сообщение # 1332


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
SLAwww, а возможно решением с числом трупов можно сделать - как у Debris? Точно не помню как там. Но сейчас предположу. Сделать так, чтобы было 2 конструктора. В один передается время, а в другой нет. Если не передается то оно равно там -1 или чтото типа, чтобы не учитывать, а если же было передано, тогда оно будет как Debris - через определенное время уничтожаться. И, кол-во трупов будет постепенно уменьшаться, что поможет компу не погибнуть в столь жестоком моде..
Ну естественно в самом модел холдере случай для -1 прописать. Чтобы ничего не отсчитывало.


SLAwww Вторник, 27.03.2012, 17:45 | Сообщение # 1333


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Можно и с одним конструктором это провернуть, в С++ есть такая фишка, как аргументы, передаваемые по умолчанию. Лично я бы сделал односвязный список трупов, и удалял их с конца, когда игрок их не видит (CCastRay в помощь).

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.

and so ended our search.
seriously_petr Вторник, 27.03.2012, 18:22 | Сообщение # 1334


Сообщений: 446
Награды: 4
Замечания: 0%
 
Извините за то что вмешиваюсь. :)
SLAwww, Может я ошибаюсь, но я обнаружил одну деталь - игрок вроде всё равно сможет увидеть исчезновение трупа смотря из-за угла с видом от 3л. (луч будет прерываться стеной и игра будет считать что игрок не видит, но на самом деле он увидит)

Можете считать мои слова за бред если они не верные, просто я хочу помочь =)

Добавлено (27.03.2012, 18:22)
---------------------------------------------
Да и у меня ещё возник вопросик - как сделать чтобы у трупов мобов и игроков были свои жизни, просто в оригинале трупы взрываются в куски только получая определённое значение урона.

SLAwww Вторник, 27.03.2012, 19:06 | Сообщение # 1335


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Действительно, исчезновение модели можно заметить. ) В таком случае, рекомендую проверять CPlacement3D игрока, и если он отвернулся от модели (смотрит в противоположную сторону), находясь на достаточном расстоянии от неё, то модель гарантировано можно прятать.
А чтобы у трупов было здоровье, прячь их сразу же, когда появляются, и создавай на их месте идентичные им модели.


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.

and so ended our search.
seriously_petr Вторник, 27.03.2012, 19:57 | Сообщение # 1336


Сообщений: 446
Награды: 4
Замечания: 0%
 
SLAwww, Наверно то что я скажу вызовет массовый фэйспальм.

Как создать модель? :)
Сообщение отредактировал petr_kustov - Вторник, 27.03.2012, 20:01


SeriousAlexej Вторник, 27.03.2012, 20:03 | Сообщение # 1337


Serious Editor
Сообщений: 1246
Награды: 52
Замечания: 0%
 
petr_kustov,
Code
// synchronize with another model (copy animations/attachments positions etc from there)
    void Synchronize(CModelObject &moOther);

труп->GetModelObject()->Synchronize(игрок->GetModelObject());
Сообщение отредактировал SeriousAlexej - Вторник, 27.03.2012, 20:03


seriously_petr Вторник, 27.03.2012, 20:30 | Сообщение # 1338


Сообщений: 446
Награды: 4
Замечания: 0%
 
SeriousAlexej, Объясни поподробнее что вписывать и куда, я тупой ***** нифига не понимаю.

я понял только что

"труп->GetModelObject()->Synchronize(игрок->GetModelObject()); "
надо вписать после смерти.

oh


SLAwww Вторник, 27.03.2012, 22:29 | Сообщение # 1339


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
SeriousAlexej, по-моему, усложняешь задачу. Есть ведь у CModelObject:
Code
// copy from another object of same class
   void Copy(CModelObject &moOther);

petr_kustov, правильно понял. Только перед этим "труп" надо создать:
Code
CEntityPointer penCorpse = GetWorld()->CreateEntity_t(GetPlacement(), CTFILENAME("Classes\\ModelHolder2.ecl"));

А модель врага спрятать с помощью SwitchToEditorModel();


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.

and so ended our search.
Molodec Среда, 28.03.2012, 10:11 | Сообщение # 1340


Developer
Сообщений: 2430
Награды: 34
Замечания: 0%
 
SLAwww, SeriousAlexej, спасибо за помощь. Попробую :)

seriously_petr Среда, 28.03.2012, 11:24 | Сообщение # 1341


Сообщений: 446
Награды: 4
Замечания: 0%
 
SLAwww, Расскажи поподробнее как работает CCastRay и как им пользоваться :D

Просто прочитав прошлые комменты у меня появилась идея - расширить ИИ врагов добавив им функцию вести огонь из укрытия - из-за любого препятствия мешающего пройти пулям.

Добавлено (28.03.2012, 11:24)
---------------------------------------------
И как указать на саму ентитю на врага:

penCorpse->GetModelObject()->Synchronize(игрок->GetModelObject());
Сообщение отредактировал petr_kustov - Среда, 28.03.2012, 11:25


SLAwww Среда, 28.03.2012, 20:15 | Сообщение # 1342


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
petr_kustov, ну неужели сложно нажать Find in files и посмотреть CCastRay? Там ведь куча мест, где он используется. Что касается последнего вопроса, если эта строчка находится в коде энтити, которая оставляет за собой труп, то указывать на себя не обязательно, то есть, "игрок->" можно заменить на "this->", либо вообще убрать.

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.

and so ended our search.
seriously_petr Среда, 28.03.2012, 20:23 | Сообщение # 1343


Сообщений: 446
Награды: 4
Замечания: 0%
 
SLAwww,

Вписал
SwitchToEditorModel();
CEntityPointer penCorpse = GetWorld()->CreateEntity_t(GetPlacement(), CTFILENAME("Classes\\ModelHolder2.ecl"));
penCorpse->GetModelObject()->Copy(GetModelObject());

пишет

E:/Mymod/Sources/EntitiesMP/EnemyBase.es(2784) : error C2664: 'Copy' : cannot convert parameter 1 from 'class CModelObject *' to 'class CModelObject &'
A reference that is not to 'const' cannot be bound to a non-lvalue


SLAwww Среда, 28.03.2012, 20:45 | Сообщение # 1344


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
penCorpse->GetModelObject()->Copy(*GetModelObject());
Забыл указатель разименовать. И не забудь инициализировать труп после создания.
penCorpse->Initialize();


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.

and so ended our search.
seriously_petr Среда, 28.03.2012, 22:33 | Сообщение # 1345


Сообщений: 446
Награды: 4
Замечания: 0%
 
SLAwww,
Die(EDeath eDeath)
{
// not alive anymore
SetFlags(GetFlags()&~ENF_ALIVE);

SwitchToEditorModel();
CEntityPointer penCorpse = GetWorld()->CreateEntity_t(GetPlacement(), CTFILENAME("Classes\\ModelHolder2.ecl"));
penCorpse->GetModelObject()->Copy(*GetModelObject());
penCorpse->Initialize();

при убийстве любого врага вылетает игра с такой ошибкой

Прикрепления: 8836254.jpg (39.1 Kb)


SLAwww Среда, 28.03.2012, 22:52 | Сообщение # 1346


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
Попробуй Initialize поставить перед копированием модели.

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.

and so ended our search.
seriously_petr Четверг, 29.03.2012, 17:23 | Сообщение # 1347


Сообщений: 446
Награды: 4
Замечания: 0%
 
SLAwww,

1. Как трупу дать физику

penCorpse->SetPhysicsFlags(EPF_MODEL_CORPSE);
penCorpse->SetCollisionFlags(ECF_CORPSE);

penCorpse->Initialize();

Даёт вылет редактор при Disappear time больше 0

2. Как трупу прописать свои жизни

3. Как у второго(старого трупа) убрать физику (колизию и физик флаги)


SLAwww Четверг, 29.03.2012, 20:35 | Сообщение # 1348


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
1) Меняй флаги после инициализации, а не перед.
2) ((CModelHolder2&)(*m_penCorpse)).m_fHealth = (здоровье) ;
3) SwitchToEditorModel();
Если нужно не прятать саму модель, а только убрать физику, то penCorpse->SetCollisionFlags(ECF_IMMATERIAL);


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.

and so ended our search.
seriously_petr Пятница, 30.03.2012, 12:44 | Сообщение # 1349


Сообщений: 446
Награды: 4
Замечания: 0%
 
MasterST, Попробуй посмотреть как устроена сложность "Ментал". :D

Добавлено (30.03.2012, 12:44)
---------------------------------------------
SLAwww, Почему у трупа не появляется колизия, он как призрак, а у того у которого SwitchToEditorModel(); у него остается физика, и он как невидимое препятсятвие

SLAwww Пятница, 30.03.2012, 18:19 | Сообщение # 1350


Рряа? ^..^
Сообщений: 2398
Награды: 27
Замечания: 0%
 
А откуда ты знаешь, чья это коллизия? У тебя ведь труп остаётся как раз на том месте, где находился враг или игрок.

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.

and so ended our search.
Поиск: