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

M[FR] MWSE скрипты


aL☢

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

ааа. Видимо поэтому у многих так и осталось неприятие МВСЕ

 

Угу. Я с ним знаком еще с ранних глючных версий и не менее глючных ранних плагинов под МВСЕ. никогда не забуду, как у меня в одном плагине сбился скрипт и по всему ввардену был скурим. Летали драконы по почти всем городам, да...

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Скрипт, считывающий параметры взятого в руки оружия (в данном случае - вес)

 

Пример скрипта для отображения веса

begin weaponWeight

long variable
long itemRef
long itemCount
long itemID
long itemType
long itemValue
float itemWeight
long itemName
long myRef
long itemEquip

setx myRef to xGetRef "player"
setx itemID itemCount itemType itemValue itemWeight itemName itemRef to myRef->xContentList itemRef
setx itemEquip to myRef->xHasItemEquipped itemID

ifx (itemEquip)
  if (itemType == 1346454871)
  set variable to itemWeight
  StopScript weaponWeight
  return
  endif
endif

end

В данном примере вес записывается в глобальную переменную. Функция также позволяет позволяет вернуть:

itemID - айди предмета, например, "iron axe"

itemCount - кол-во в слоте

itemValue - цена предмета

itemWeight - вес предмета

itemName - название предмета, например, "железный топор"

itemRef - ссылка на след. предмет в коллекции. Не подходит для работы с предметом

itemType - тип, согласно классификации типов МВСЕ

1230259009 = ACTI (Activator)

1212369985 = ALCH (Alchemy/Potion)

1095782465 = APPA (Alchemy Apparatus)

1330467393 = ARMO (Armour)

1263488834 = BOOK (Book/Scroll)

1414483011 = CLOT (Clothing)

1414418243 = CONT (Container)

1095062083 = CREA (Creature)

1380929348 = DOOR (Door)

1380404809 = INGR (Ingredient)

1129727308 = LEVC (Levelled Creature)

1230390604 = LEVI (Levelled Item)

1212631372 = LIGH (Light)

1262702412 = LOCK (Lockpick)

1129531725 = MISC (Misc. Item)

1598246990 = NPC_ (NPC)

1112494672 = PROB (Probe)

1095779666 = REPA (Repair Tool)

1414546259 = SCPT (Script)

1195658835 = SNDG (Sound Generator)

1413567571 = STAT (Static)

1346454871 = WEAP (Weapon)

 

 

Замена числового значения в строке

if (itemType == 1346454871)

позволит переориентировать скрипт с оружия на броню, например.

 

 

Изменено пользователем cepoe
Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Работа со скилами

 

Последние пару версий MWSE содержат функции работы со скилами - xGetSkillInfo и xSetSkillInfo.

Как известно, у каждого скила есть прокачиваемый аттрибут, специализация и до 4 параметров. Параметры отвечают за прокачку скила - каждое действие (по сути - имя параметра) прокачивает скилл на определенную величину. Для работы с функциями нужны id скилов.

Например, акробатика (прокачивает силу, специализация - скрытность) прокачивается от прыжка (на 0.15) и от падения с нанесением вреда здоровью (на 3.00).

  • xGetSkillInfo

Текст скрипта:

begin aa_test
long my_ref
setx my_ref to xGetRef "player"
long attribute
long specialization
float action1
float action2
float action3
float action4
setx attribute specialization action1 action2 action3 action4 to my_ref->xGetSkillInfo 20 // 20 - акробатика
xMessageFix "attr.: %d, spec.: %d" attribute specialization
MessageBox "1111111111111111111111111111"
MessageBox "1: %f, 2: %f:, 3: %f:, 4: %f:" action1 action2 action3 action4
end

 

Результат работы:

xGetSkillInfo.png

Судя по всему, атрибуты и специализация - это тоже id. Проверял для разных скилов - значения меняются.

Ну и в след. сообщении цифры 1-4 соответствуют значениям параметров скила. Неиспользуемые параметры возвращают 1, что неудобно... Но уж как есть.

  • xSetSkillInfo

Позволяет менять все параметры скила. Отличный инструмент для плагиностроения.

Текст скрипта:

begin aa_test2
long my_ref
setx my_ref to xGetRef "player"
long result
long attribute
long specialization
float action1
float action2
float action3
float action4
set attribute to 1
set specialization to 1
set action1 to 0.11
set action2 to 0.11
set action3 to 1
set action4 to 1
setx result to my_ref->xSetSkillInfo 20 attribute specialization action1 action2 action3 action4 // result = 1 в случае успеха и 0 в обратном случае
xMessageFix "result: %d" result
MessageBox "1111111111111111111111111111"
end

 

Результат работы:

xSetSkillInfo_1.png

Как видно, функция отработала и вернула "1".

Я был недоверчив и поэтому запустил проверку все ли прошло успешно на самом деле.

Текст скрипта:

begin aa_test2
long my_ref
setx my_ref to xGetRef "player"
long result
long attribute
long specialization
float action1
float action2
float action3
float action4
set attribute to 1
set specialization to 1
set action1 to 0.11
set action2 to 0.11
set action3 to 1
set action4 to 1
setx result to my_ref->xSetSkillInfo 20 attribute specialization action1 action2 action3 action4
// создаю дополнительные переменные для возврата значений скила
long attribute1
long specialization1
float action11
float action21
float action31
float action41
setx attribute1 specialization1 action11 action21 action31 action41 to my_ref->xGetSkillInfo 20
xMessageFix "attr.: %d, spec.: %d" attribute specialization
MessageBox "1111111111111111111111111111"
MessageBox "1: %f, 2: %f:, 3: %f:, 4: %f:" action1 action2 action3 action4
end

 

Результат работы:

xSetSkillInfo_2.png

Все работает :)

Поздравляю мододелов с новым инструментом)

Изменено пользователем cepoe
Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

Все вопросы по плагину можно задавать тут:

 

http://www.fullrest.ru/forum/topic/36164-morrowind-fullrest-repack/

http://www.fullrest.ru/forum/topic/40977-beta-test-mfr-20/

 

При необходимости тему можно будет заново открыть, закрываю все лишнее, чтобы не захламлять основной канал, для "хлама" у нас есть архив МФР.

Ссылка на комментарий
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...