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

Помогите со скриптом


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

Уважаемые скрипт-мейкеры! Я решил сделать плагин. Я со скриптами вроде дружу, но сложные - это, пока, не для меня. Вот такая задумка: чтоб в плагине был предмет (Например - рунный камень), при активации которого появлялось меню с предложением его "включить"(а если он включен, то "выключить" и предолжением его "использовать" (если он включен). При "использовании" появляется меню, в котором можно выбрать или перемещение в основные города, появление в инвентаре оружия/доспехов, которые автоматически одеваются на игрока, а при снятии исчезают, добавлениие различных харрактеристик игроку. За эту красоту игрок должен как-нибудь расплачиваться. Например, когда предмет "Включен" герои не может спать, отдыхать, у него исчезает каждый день маленько золота, или еще что-то в этом духе.

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

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

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

В зависимости от выбраного варианта выполняется то или иное действие, телепортироваться кудато - "coc ячейка", "coe координаты", добавить доспех - player->additem armor 1 , одеть - кажись player->equip armor, и тп.. Оплату услуг камушка, исчезание снятых доспехов, изменение характеристик игрока можно огранизовать одним глобальным скиптом. Неочень понял как у тебя сабж должен включаться и выключаться.

В разделе файлы-учебники для морра http://www.fullrest.ru/files/help/morrowind.html лежит Morrowind Scripting for Dummies, большую часть ответов и решений можно найти там ;-)

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

Это все понятно, и учебничек я читал, но у меня проблемы со монжеством вложенных тегов Messagebox. А "Включается" она так: есть ДВА предмета, с одинаковой моделью, но разными скриптами. Первая с простым - При активации предмета появляется окно с одной кнопкой "Включить", по нажатию на эту кнопку, включается сторонний скрипт, который первый предмет удаляет, а второй (С большим скриптом) дает игроку. На второй вещи (Той которая дает оружие и тп.) в скрипте, там где действия по нажатию на кнопку "Выключить" прописывается активация еще одного строрннего скрипта, который вторую вещ удаляет, а первую дает. Итого две вещи со скриптами, и еще два скрипта ни к чему не привязанные. Что-то типа такого.

Я вообще его недели две пытался сделать (В смысле скрипт), но он почему-то не работал и вешал игушку :-(

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

есть ДВА предмета, с одинаковой моделью, но разными скриптами. Первая с простым - При активации предмета появляется окно с одной кнопкой "Включить", по нажатию на эту кнопку, включается сторонний скрипт, который первый предмет удаляет, а второй (С большим скриптом) дает игроку. На второй вещи (Той которая дает оружие и тп.) в скрипте, там где действия по нажатию на кнопку "Выключить" прописывается активация еще одного строрннего скрипта, который вторую вещ удаляет, а первую дает. Итого две вещи со скриптами, и еще два скрипта ни к чему не привязанные. Что-то типа такого.

 

Хмм... Что-то вроде такого?

Это для первого:

 

Begin Script1

 

;только рунный камень должен быть предметом, который можно надеть. Иначе как ты планируешь, чтобы произошло "включение"?

 

short status

short button

short OnPCEquip

 

if ( MenuMode == 1 )

return

endif

 

if ( OnPCEquip == 1 )

Set Status to 10

Set OnPCEquip to 0

Endif

 

If ( status == 10 ) ;показать меню

MessageBox "Вы хотите включить предмет?", "Включить", "Отмена"

Set Status to 20

Elseif ( status == 20 ) ;ждать ответа

Set button to GetButtonPressed

If ( button == -1 ) ;пока нет ответа

Return

Elseif ( button == 0 )

Player -> removeitem "первый предмет" 1

Player -> additem "второй предмет" 1

Elseif ( button == 1 ) ; отмена включения

 

Set status to 0

Endif

Endif

 

End

 

Для второго:

Begin Script2

 

;только игроку придется его заново "одевать"

 

short status

short button

short OnPCEquip

 

if ( MenuMode == 1 )

return

endif

 

if ( OnPCEquip == 1 )

Set Status to 10

Set OnPCEquip to 0

Endif

 

If ( status == 10 ) ;показать меню

MessageBox "Вы хотите включить предмет?", "Включить", "Выключить"

Set Status to 20

Elseif ( status == 20 ) ;ждать ответа

Set button to GetButtonPressed

If ( button == -1 ) ;пока нет ответа

Return

Elseif ( button == 0 )

 

Player -> additem "оружие" 1

Elseif ( button == 1 ) ; отмена включения

Player -> removeitem "второй предмет" 1

Player -> additem "первый предмет" 1

Set status to 0

Endif

Endif

 

End

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

Хм... А зачем ДВА предмета? Там вообще одним предметом и одним скриптом обойтись можна... Тем более, что в скрипте предложенном LofZ есть ошибка - она из скрипта привязанного к предмету удаляет сам предмет. Морровинд вывалится от этого. Я подумаю над этим скриптом и выложу когда будет готово.
Ссылка на комментарий
Поделиться на другие сайты

Сделал я этот скрипт. Создаешь МискИтем и вешаешь на него вот такой скрипт:

Begin DoD_Artefact

short button; indicates button index.
short question; 2 - teleport question
short state;0 - Nothing, 1 - asking 
short acction;0 - activate/deactivate, 1 - teleport, 2 - equipment.
short activated
short OnPCEquip

if ( OnPCEquip == 1 )
set OnPCEquip to 0
set state to 1
set question to 1
if ( activated == 0 )
	MessageBox "Вы хотите активировать артефакт?" "Да" "Нет"
else
	MessageBox "Что вы хотите сделать с артефактом?" "Выключить" "Телепортироваться" "Броня" "Ничего"
endif
endif

if ( state == 0 )
return
else
set button to GetButtonPressed
if ( button == -1 )
	return
endif
set state to 0
endif	

if ( question == 2 )
set question to 0
if ( button == 0 )
	Player->coc "Balmora"
	return
elseif ( button == 1 )
	Player->coc "Vivec"
	return
elseif ( button == 2 )
	Player->coc "Ald-ruhn"
	return
else
	return
endif
endif

set question to 0

if ( activated == 0 )
if ( button == 0 )
	set activated to 1
	Player->AddSpell "DoD_Artefact_Effect"
	return
else
	return
endif
else
if ( button == 0 )
	set activated to 0
	Player->RemoveSpell "DoD_Artefact_Effect"
	if ( Player->GetItemCount "DoD_Mega_Cuirass" > 0 )
		Player->RemoveItem "DoD_Mega_Cuirass" 1
	endif
	return
elseif ( button == 1 )
	set question to 2
	set state to 1
	MessageBox "Куда вы хотите телепортироваться?" "Балмора" "Вивек" "Альдрун" "Никуда"
elseif ( button == 2 )
	if ( Player->GetItemCount "DoD_Mega_Cuirass" > 0 )
		Player->RemoveItem "DoD_Mega_Cuirass" 1
	else
		Player->AddItem "DoD_Mega_Cuirass" 1
	endif
	return
else
	return
endif
endif

End

Потом создай спелл типа Характеристика с ИД DoD_Artefact_Effect. Он будет даваться игроку при активированном артефакте. Добавь туда негативных эффектов (замороженная магия, усталость, обуза... еще что хошь...)

Далее, создаешь кирасу с ИД DoD_Mega_Cuirass и вешаешь на нее вот этот скрипт:

Begin Mega_Equipment_Cuirass

short OnPCEquip
short OnPCDrop
short count
short broken

if ( broken == 0 )
if ( count > 10 )
	set broken to 1
	MessageBox "Кираса сломалась и не будет одеваться" "OK"
endif
endif

if ( OnPCEquip == 0 ); предмет не надет
if ( broken == 0 )
	Player -> Equip, "DoD_Mega_Cuirass"; надеть кирасу!
	set count to count + 1
endif
else
set count to 0
endif

End

Что нужно доделать:

  1. Для добавления новых предметов брони, просто скопируй скрипт брони, только замени ее ИД на ИД нового предмета, а иакже в скрипте артефакта подобавляй AddItem и RemoveItem для нового предмета.
  2. Вместо coc для телепортации лучше используй PositionCell (ибо в Альдрун телепортит посреди Скара... неэстетично...), глянь в MSFD для деталей.
  3. Бронь снять нельзя. Только с помощью артефакта. Но если бронь полностью разрушена, то ее можна будет снять и выкинуть... и потом, после ремонта, одевать и снимать уже по желанию.. Тут, в принципе, можна выкрутится, но мне влом... может позже...

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

Пнятно. Только вот в чем прикол: Эта броня не должна ломаться. Ну а во всем остальном - Респект и уважуха! (Как говорил Павел Воля) :-)
Ссылка на комментарий
Поделиться на другие сайты

Броня не должна ломаться

 

Кажется, это даже скриптом не сделаешь. Можно в характеристике брони Health поставить какую-нибудь бешеную цифру типа 999999999999, сколько там девяток поместится, через столько ударов броня сломается. Если там девять миллионов с гаком, вряд ли это произойдет на нашем веку.)))

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

А как скриптом отследить, что бронь сломалась?

Можно, в принципе, просто таймером удалять\добавлять раз в минуту.

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

Я что-то левым ухом слышал, что есть какая-то функция, которая отправлает 1 если бронь сломалась, но не в оригинальном Морре, а в Бладмуне или в Трибунале
Ссылка на комментарий
Поделиться на другие сайты

Нет такой функции. По крайней мере, я о ней не знаю. И МСФД тожа. Однако есть один хитрый ход, который в данном случае применим - если на вещь нацепить скрипт, который постоянно ее к игроку пришпиливает, то при поломке она постоянно будет слетать-одеваться (цикл слетела-оделась по разу в каждом кадре). Это довольно легко отловить - если в каждом кадре одежка спадает-одевается на протяжении 5-10 кадров - значит сломана. Ибо игрок низачто не сможет снимать/одевать в ручную с такой скоростью. Дело даже не в скорости нажатия на кнопку, а в способе обработки. Морр нажатие/отпускание на кнопку только раз в кадр отслеживает. Именно этот способ в моем скрипте и применен. Там только вместо сообщения, что предмет сломан надо написать удаление/добавления этого самого предмета. Или реально, как Дез предлагает - по таймеру.
Ссылка на комментарий
Поделиться на другие сайты

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

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

Создать учетную запись

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

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

Войти

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

Войти
  • Последние посетители   0 пользователей онлайн

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