Перейти к содержанию

Как Реализовать Перезарядку Оружия.


kotovstomat

Рекомендуемые сообщения

Опубликовано

Теория:

 

//сброс global variable0
0: if global variable0==7
	  then global variable0==0

//проверка - если произошла перезарядка, то возвращаем скорость триггерера в исходное значение
1: if global variable0==0
	  then stat 11 of triggerer: adjust by 5

//если патроны в магазине кончились, то есть global variable==6, то переход на линию 4
2: if global variable0==6
	  then goto line4
else global variable0=global variable0+1

3: return and skip default

//здесь можно вставить звук перезарядки оружия вместо (num). Кстати, можно в Арканум вставлять звуки помимо существующих или нет?
4: play sound (num) at triggerer

//триггерер изображает популярный в фоллауте жест
5: have triggerer perform animation 12

//уменьшаеи скорость триггерера, вроде как "отнимаем action points". При следующем выстреле будет потрачено больше AP
6: stat 11 of triggerer: adjust by -5

7: return and skip default

 

Вешается скрипт на HIT и MISS, то есть учитывается каждый выстрел. Можно еще напрячься и повесить на CRITICAL HIT и CRITICAL MISS, но возни очень много с ними. Практически реализовать это тоже не слишком сложно. Возможно, стоит сделать проверку триггерера на скорость, чтобы она не стала внезапно отрицательной. Или снимать процент со скорости. Самая большая задача - сидеть и вешать этот скрипт каждому прототипу огнестрельного оружия. Время это займет прилично.

 

Так вот у меня вопрос - стоит ли овчинка выделки?

 

Популярный в Фоллауте жест - это когда криттер делает поклон в одну четверть, отклянчивает зад, вытягивает руки и делает вращательные движения типа "наматывание проволоки". Этим простым и незамысловатым движением криттер открывает ящики, шкафчики, ворует, лечит, использует компьютер и другие не менее интересные и полезные вещи.

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

 

Работает или нет - понятия не имею. В теории все замечательно выходит) Возможно, будет разница между реалтаймом и пошаговым режимами.

Опубликовано

Что за гвара 0? Где она устанавливается (в скрипте)? Почему именно глобал, а не локал?

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

любой глобал вар берем. Ноль - это так, для примера. Проще конечно взять локал вар, но будет ли она сохраняться для каждого нового вызова скрипта?

 

С глобал варами вообще засада. Потому что если в висинити будут хотя бы два криттера, имеющих огнестрельное оружие, то для каждого надо будет завести свою глобал вару.

 

/я не пробовал его писать, и скорее всего не буду. Просто пришла в голову мысль по аналогии с тем скриптом что я пишу, и решил сюда выложить, вдруг кому пригодится/

 

а все переменные по умолчанию 0, не так ли? тогда к чему ее где-то в скрипте устанавливать?

Опубликовано
Проще конечно взять локал вар, но будет ли она сохраняться для каждого нового вызова скрипта?

Да.

 

С глобал варами вообще засада. Потому что если в висинити будут хотя бы два криттера, имеющих огнестрельное оружие, то для каждого надо будет завести свою глобал вару.

... Поэтому лучше использовать локал вару.

 

Должен быть какой-то инкремент на подсчет выстрелов, например:

0. Local 0 = Local 0 + 1 // Сделан выстрел... 

1. IF Local 0 <= 5 // Проверка на кол-во выстрелов.
THEN do nothing
ELSE goto line X 

/* 
Если сделано 6 выстрелов, то переход на строчку с скрипта, где анимация, уменьшение скорости и установка Local 0 = 0. 
*/

2. return and RUN default

 

Ну, это так, в теории. :) Возможно лучше использовать Counter'ы.

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

все правильно, да. Ну раз можно с локал варами, тогда остается ровно одна проблема - развешать этот скрипт в прототипы.

А нужен ли он народу?

 

else global variable0=global variable0+1

 

вот мой инкремент!

 

Уменьшению скорости обязательно должно следовать ее обратное увеличение, поэтому я настаиваю на этих строках:

//сброс global variable0

0: if global variable0==7

then global variable0==0

 

//проверка - если произошла перезарядка, то возвращаем скорость триггерера в исходное значение

1: if global variable0==0

then stat 11 of triggerer: adjust by 5

Естественно, заменяя global на local.

 

Но это все лирика и сотрясание воздуха. Кому нужен этот скрипт? Реально тактическую составляющую, даже минимальную, в пошаговый режим он не внесет. Или внесет? Пока что получается красивая теория, почти как опыты в пробирке.

Опубликовано
else global variable0=global variable0+1

 

вот мой инкремент!

Это не будет работать - вара спрятана за условием; строго говоря ее вообще не существует. Инкремент должен быть в первой строчке.

 

 

P.S. Рекомендую использовать ScriptEd от Dj Unique. :wink:

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

да, эта штука гораздо удобнее чем сцрмейкер. Спасибо.

 

Попробую написать и потестить.

 

 

УПД: удобнее то удобнее, но скрипт написаный в сокманки, отлично себя зарекомендовавший в игре, наотказ не хочет компилиться в скриптеде. Он, видите ли, не признает вычитание

 

(5): invalid action opcode "Local 8 = 11 - Local 0"

Опубликовано

Наверное, все же в рамках идеи нужно использовать Counter нежели гл. или лок. вары, в плане сохранения переменных: локал вар - для скрипта, каунтер - для моба. Если я ничего не забыл... :)

 

Ты попробуй скрипт просто к мобу в WorldEd привяжи, протестируй (создай тестовый мод с картой).

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

Зачем для моба counter? Это нецелевое расходование средств) Нам ведь нужно только учитывать количество вылетевших патронов. Это HIT и MISS.

Опубликовано
УПД: удобнее то удобнее, но скрипт написаный в сокманки, отлично себя зарекомендовавший в игре, наотказ не хочет компилиться в скриптеде. Он, видите ли, не признает вычитание

 

(5): invalid action opcode "Local 8 = 11 - Local 0"

 

У меня эта строчка комплится. :)

Настроить, наверное, надо, у меня примерно так в ScriptEd.ini:

[General]
DATPath=D:\GAMES\ARCANUM
DLG_Editor=D:\Games\Arcanum Modding\DLG Debugger\dlgdebug.exe
MES_Editor=D:\Games\Arcanum Modding\MES Editor\mesedit.exe
Read File List=0
Debug Mode=0
Use Compressed Data=1
OpcodeBoxMaxItems=25
Generate Dialogue Lines=0

[Files]
Open_DLG_LastDir=D:\Games\Arcanum\data\scr
Save_DLG_LastDir=D:\Games\Arcanum\data\scr
LastModuleDir=TestMod

Главное - путь к DAT'ам в каталоге с игрой.

 

 

Зачем для моба counter? Это нецелевое расходование средств) Нам ведь нужно только учитывать количество вылетевших патронов. Это HIT и MISS.

Один моб = одна ед. огнестрельного оружия в игре, но на всех один скрипт... :wink:

И москаль, и хохол — хитрые люди, и хитрость обоих выражается в притворстве: первый любит притворяться дураком, а второй умным. © В.О. Ключевский.

Опубликовано

0. Local 0 = Local 0 + 1

1. damage Triggerer unresistably for Local 0 points of type 0 damage

2. IF Local 0 <= 5
THEN goto line 5

3. have Triggerer perform animation 12

4. stat 11 of Triggerer: adjust by -5

5. return and SKIP default

 

Нет, увы, локал варами тут никак. У меня уже есть поправленный прото с приклепленными на него скриптами на HIT и MISS.

 

Строка один у меня вроде отладчика, чтобы состояние лвар0 контролировать)

 

Так вот, каждый выстрел Триггерер получает дмг ровно 1.

 

А что там с каунтерами? Как их применять?

 

УПД: с каунтерами все ясно. Заменил в коде локал0 на каунтер0. Все отлично работает без всяких там мобов. Скрипт у меня в .про прописан. Завтра буду доводить до ума. А пока уже почти три ночи и у меня голова плохо думает.

Опубликовано

На конкретный момент работающий код, повешенный на HIT и MISS, имеет следующий вид:

 

0. Counter 0 = Counter 0 + 1

1. IF Counter 0 == 7
THEN do nothing
ELSE goto line 4

2. Counter 0 = 0

3. stat 1 of Player: adjust by 4

4. IF Counter 0 <= 5
THEN goto line 7

5. have Triggerer perform animation 12

6. stat 1 of Player: adjust by -4

7. return and SKIP default

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
×
×
  • Создать...