• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Не стесняюсь спросить....

hell9999

Участник форума
Регистрация
12 Апр 2008
Сообщения
2.049
Благодарности
1.169
Баллы
340
В Story_Globals можно не вписывать, если кроме собственно из файла с едой он ниоткуда больше вызываться не будет. Если и в других файлах будет использоваться, тогда нужно вписывать в стори глобалс.
Записано все нормально, без явных ошибок. Так что все в норме.
Только не совсем понятно, зачем столько замедлений выставлено.
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Val Der Marix, и правильно, что сомнение тебя не покидает. И скорей всего из за этой константы. Т.е. объявил, а не использовал. Так будет правильней:
if(MustyApple_Bonus == MustyApple_Bonus_MAX)
И многие наверное это знают.
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
И еще после получения бонуса, надо б обнулить значение MustyApple_Bonus. :)
 

Val Der Marix

Участник форума
Регистрация
1 Июн 2007
Сообщения
1.227
Благодарности
32
Баллы
245
hell9999, Включая награду за квесты и появление у торговцев? Но ведь если вписать "просто, чтобы не ошибиться" - ничего страшного?
А четверное замедление - это специально. Если я правильно помню, экран после этого будет дико колыхаться. Скопипастил этот момент с косяка.
Jr13San, Понял. А если бонус многоступенчатый? Как раз один такой был:
func void Use_RawFlesh()
{
Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_RawFlesh);
if(Npc_IsPlayer(self))
{
RawFlesh_Bonus = RawFlesh_Bonus + 1;
if(RawFlesh_Bonus == 25)
{
B_RaiseAttribute(self,ATR_STRENGTH,2);
PrintScreen("Силы врага переходят к тебе!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 55)
{
B_RaiseAttribute(self,ATR_STRENGTH,3);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Жизни невинных текут в твоих венах...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 90)
{
B_RaiseAttribute(self,ATR_STRENGTH,5);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Души людей наполняют твое тело...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 130)
{
B_RaiseAttribute(self,ATR_STRENGTH,10);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Пожиратель Душ Хориниса!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
};
};


При этом, в Story_Globals:


var int RawFlesh_Bonus;
const int RawFlesh_Bonus_MAX = 130;
Midlight, Ммм...мне казалось, обнулять надо только когда бонус многоразовый, нэ? :)
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
Val Der Marix, а ну если так то да. :)
 

Val Der Marix

Участник форума
Регистрация
1 Июн 2007
Сообщения
1.227
Благодарности
32
Баллы
245
И последний вопросик, очень уж наболевший:
В выше(ниже)описанном коде на многоступенчатый бонус - все ли там правильно, и правильно ли записано это в Story_Globals? Предполагается, что чем больше ешь - тем сильнее плюшки. А то просто глянуть эту хитрость негде, а бонус для атмосферности бы очень бы пригодился. Кто знает такие вещи - подскажите, плз. Обещаю потом больше не беспокоить :)
func void Use_RawFlesh()
{
Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_RawFlesh );
if(Npc_IsPlayer(self))
{
RawFlesh_Bonus = RawFlesh_Bonus + 1;
if(RawFlesh_Bonus == 25)
{
B_RaiseAttribute(self,ATR_STRENGTH,2);
PrintScreen("Силы врага переходят к тебе!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 55)
{
B_RaiseAttribute(self,ATR_STRENGTH,3);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Жизни невинных текут в твоих венах...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 90)
{
B_RaiseAttribute(self,ATR_STRENGTH,5);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Души людей наполняют твое тело...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
if(RawFlesh_Bonus == 130)
{
B_RaiseAttribute(self,ATR_STRENGTH,10);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Пожиратель Душ Хориниса!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
};
};


При этом, в Story_Globals:


var int RawFlesh_Bonus;
const int RawFlesh_Bonus_MAX = 130;
 

Jr13San


Модостроитель
Регистрация
1 Апр 2010
Сообщения
449
Благодарности
266
Баллы
230
Val Der Marix, чуть-чуть оптимизировал твою функцию:
func void Use_RawFlesh()
{
Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_RawFlesh);

if(Npc_IsPlayer(self))
{
RawFlesh_Bonus = RawFlesh_Bonus + 1;
if(RawFlesh_Bonus == 25)
{
B_RaiseAttribute(self,ATR_STRENGTH,2);
PrintScreen("Силы врага переходят к тебе!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
}
else if(RawFlesh_Bonus == 55)
{
B_RaiseAttribute(self,ATR_STRENGTH,3);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Жизни невинных текут в твоих венах...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
}
else if(RawFlesh_Bonus == 90)
{
B_RaiseAttribute(self,ATR_STRENGTH,5);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Души людей наполняют твое тело...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
}
else if(RawFlesh_Bonus == 130)
{
B_RaiseAttribute(self,ATR_STRENGTH,10);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Пожиратель Душ Хориниса!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
};
};
};

Ещё можешь заменить название шрифта "FONT_OLD_20_WHITE.TGA" на соответствующую константу.
И если не используешь константу "RawFlesh_Bonus_MAX", то удали её.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
Jr13San,
:eek:
Может корректней и на 3 символа меньше так:
RawFlesh_Bonus += 1; :)

и заменить все числа "-1" на "none"
можно еще забор в зеленый цвет покрасить... Только скрипту от этого ни теплее, ни холоднее.
А разбираться и вспоминать потом почему цифры красил и какие в какой цвет - себе дороже. :)
ЗЫ. Человек учится писать, а вы ему сразу советуете свои варианты оптимизации. Пусть руками все набирает и шчупает. И пусть все пока наглядно будет в скрипте, чтобы у него основы схемы в мозгу отложились.
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
У кого есть болванка скриптовая от WSA ?
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Saturas, у меня есть. Причем с выкинутыми заморочками типа Ратши:D. Т.е. полностью чистая. Единственое что там добавленно от себя: перенес руны, свитки, оружие из классической Г2. Может быть что-то еще - уже не помню....
Как молоды мы были...:D

P.S. Jr13San оптимизации в вашем коде я не вижу вообще. А вот то что скрипт стал менее читаемым это факт. Я поставил бы вместо
RawFlesh_Bonus += true;
это
++RawFlesh_Bonus;
Думаете даже от этого что-то бы изменилось?
Оптимизация это когда уменьшается число операций, а то что вы написали ничего не меняет.
В данном случае я бы поступил бы так:
func void Use_RawFlesh()
{
Npc_ChangeAttribute(self,ATR_HITPOINTS,HP_RawFlesh );
if(Npc_IsPlayer(self))
{
++RawFlesh_Bonus;
switch(RawFlesh_Bonus)
{
case 25:
B_RaiseAttribute(self,ATR_STRENGTH,2);
PrintScreen("Силы врага переходят к тебе!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
break;

case 55:
B_RaiseAttribute(self,ATR_STRENGTH,3);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Жизни невинных текут в твоих венах...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
break;

case 90:
B_RaiseAttribute(self,ATR_STRENGTH,5);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Души людей наполняют твое тело...", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
break;

case 130:
B_RaiseAttribute(self,ATR_STRENGTH,10);
B_RaiseAttribute(self,ATR_HITPOINTS_MAX,5);
PrintScreen("Пожиратель Душ Хориниса!", -1,-1,"FONT_OLD_20_WHITE.TGA",3);
Snd_Play("LevelUp");
break;
}
};
};

Да и вообще по мне скрипт у Val Der Marix'а намного более читаемый и достаточно грамотный и оптимизировать там не чего.
 

Midlight

Участник форума
Регистрация
8 Июн 2011
Сообщения
155
Благодарности
1
Баллы
185
М-м, а case или break разве в скриптах можно использовать? *???*
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Midlight, на самом деле не проверял поддерживает ли компиллятор полностью язык с++, но то что в таких конструкциях следует пользоваться оператором switch железно, он для этого и предназначен. А case и break это всего лишь ключевые слова не путай;).
 

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
не, свичей там нету, откуда?)
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
прочитал про свитчи, кэйс и брейк в Дедаулисе - сполз под стол.... *lol*
Господа!
Лето уже кончилось - остывайте! :D :D :D
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.770
Благодарности
557
Баллы
275
Ребята три вопроса от новичка.

1. Создавал в максе не большое зданьице, время от времени проверял через Spacer, как будет выглядеть. Вроде всё нормально, но возникла проблема - при просмотре через Spacer, пропали некоторые полигоны на стенах, хотя в максе они есть. В чём может быть проблема? (извините за скудное описание проблемы)

2. Создал не большую локацию, порезал её на части, как теперь правильно всё сохранить и экспортировать в 3ds, а главное, как потом соединить всё воедино.

3. И хотел узнать, как лучше всего поступить со зданиями, приаттачить в максе или же вставить потом через Spacer?
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Ребята три вопроса от новичка.

1. Создавал в максе не большое зданьице, время от времени проверял через Spacer, как будет выглядеть. Вроде всё нормально, но возникла проблема - при просмотре через Spacer, пропали некоторые полигоны на стенах, хотя в максе они есть. В чём может быть проблема? (извините за скудное описание проблемы)

2. Создал не большую локацию, порезал её на части, как теперь правильно всё сохранить и экспортировать в 3ds, а главное, как потом соединить всё воедино.

3. И хотел узнать, как лучше всего поступить со зданиями, приаттачить в максе или же вставить потом через Spacer?

1. Возможно не правильная работа порталов. Порталы есть?
2. При резке модели ее опорная точка остается одинаковой для обеих частей меша, так что проблем с экспортом/импортом быть не должно. Просто удаляешь все кроме конкретной части - ее экспортируешь, потом с другими частями поступаешь аналогично. При импорте выбираешь опцию "объединить".
3. Приаттачить в максе. Иначе с подгонкой замучаешься.Да и с порталами вряд ли что получится...
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.770
Благодарности
557
Баллы
275
1. Возможно не правильная работа порталов. Порталы есть?
2. При резке модели ее опорная точка остается одинаковой для обеих частей меша, так что проблем с экспортом/импортом быть не должно. Просто удаляешь все кроме конкретной части - ее экспортируешь, потом с другими частями поступаешь аналогично. При импорте выбираешь опцию "объединить".
3. Приаттачить в максе. Иначе с подгонкой замучаешься.Да и с порталами вряд ли что получится...

Нет, порталов пока нету. С экспортом и соединением частей разобрался
 

Ilot

Участник форума
Регистрация
17 Сен 2010
Сообщения
798
Благодарности
297
Баллы
245
Ребята три вопроса от новичка.

1. Создавал в максе не большое зданьице, время от времени проверял через Spacer, как будет выглядеть. Вроде всё нормально, но возникла проблема - при просмотре через Spacer, пропали некоторые полигоны на стенах, хотя в максе они есть. В чём может быть проблема? (извините за скудное описание проблемы)...

Скрин можно? (В максе и спейсере)
 

Test Level

Участник форума
Регистрация
1 Ноя 2011
Сообщения
1.770
Благодарности
557
Баллы
275
Скрин можно? (В максе и спейсере)

Есть сохранка в максе на первый этаж (без фундамента). Всё не текстурировано, просто наожежен дефолтный цвет в максе. Если подойдёт, то выложу.
 
Сверху Снизу