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

Тонкости скриптов


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

вроде как, все это доступно в MGE XE 0.9.9

для использования нужно:

  1. Скачать искомый МГЕ
  2. Распаковать архив в папку с игрой. Взять оттуда папку mwedit и закинуть ее в папку с твоим mwedit c заменой файлов
  3. После этого, по идее, должно работать

Но важно отметить - далеко не у каждого есть MGE XE 0.9.9

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

  • 7 месяцев спустя...
  • Ответов 339
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

В руководстве для чайников пишут, что по непроверенным данным с форумов, функция additem/removeitem не работает на контейнерах. Это, похоже, не совсем так. Чтобы эта функция исправно работала на контейнерах, необходимо в в свойствах контейнера снять галочку References persist. Изменено пользователем Malbogatra
Ссылка на комментарий
Поделиться на другие сайты

References persist даёт доступ до контейнера в глобальном скрипте, если вы не находитесь в одной локации с ним. функция additem работает прекрасно, removeitem как-то криво, не всегда удаляет вещи, я для себя решил проблему полным уничтожением контейнера( в моём случае это оптимальное решение было).
Ссылка на комментарий
Поделиться на другие сайты

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

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

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

  • 1 месяц спустя...
Приветствую! Кто-нибудь подскажет скрипт? Нужно чтобы при активации объекта повышался навык на N часов, и чтобы повторное нажатие и соответственно, повышение навыка, было только через эти N часов. Или чтобы раз в сутки бафал, без разницы, главное чтобы эффект не суммировался.
Ссылка на комментарий
Поделиться на другие сайты

begin Sc

short state

if menumode ==1

return

endif

if onactivate == 1

if state != dayspassed

cast "spell", player

set state to dayspassed

else

Messagebox "Вы уже использовали бафф"

endif

endif

end

что то типа того.

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

что то типа того.

Что-то нет:

 

begin

short state

if menumode ==1

return

endif

if onactivate == 1

if state != dayspassed

cast "fortify enchant skill", player

set state to dayspassed

else

Messagebox "Вы уже использовали бафф"

endif

endif

end

 

спелл fortify enchant skill стандартный. анимация каста есть, в игрока не прилетает.

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

Эффект касание? Хотя и касание должно работать. Надо глядеть в чем дело в игре. Изменено пользователем mortuus
Ссылка на комментарий
Поделиться на другие сайты

Проблемы с коллизиями небось.

Я просто не пойму какая анимация каста. Такая анимация есть только у нпк(не?), а как я понял у нас активатор. Может и коллизии, а может надо отсечку каста иначе делать.
Ссылка на комментарий
Поделиться на другие сайты

Я просто не пойму какая анимация каста. Такая анимация есть только у нпк(не?), а как я понял у нас активатор. Может и коллизии, а может надо отсечку каста иначе делать.

Под анимацией каста имелся в виду, похоже, Casting Effect, тот же что и у алтарей.

Когда я делал Better Traps у меня возникла похожая проблема с ловушками-Камнями Душ, решилось уменьшением размера коллизии.

 

Могу порекоммендовать сменить модель активатора на модель алтаря, если не поможет - проблема действительно где-то в скрипте.

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

  • 1 месяц спустя...
Парни напомните, как синтаксически верно сделать строку с проверкой на кол-во определенного предмета в контейнере, заранее спасибо.
Ссылка на комментарий
Поделиться на другие сайты

Вот же лол, у меня там кавычка стояла неправильная) А я уж начал грешить на память)

Морт спасибо, твои кавычки и выручили!

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

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

Нужна помощь в правке скрипта. Куча всего, я так и не разобралась во всех тонкостях, которые он выполняет. Скрипт к Детям Морроувинда. Помимо прочего, заставляет детей исчезать ночью. Что нужно поменять, чтобы было наоборот: днем ребенок исчезал, а ночью появлялся? (хочу наделать детских копий и в дома поместить - днем на улице, ночью дома, но с одним и тем же ID чревато (у меня слетала анимация))

 

 

begin EM_Kidsschedule2script<br><br>; By Nigedo.<br>; This script is for all kids who require only scheduled behaviour and recall  when attacked<br>; scripts disable/enable while unseen and timing reworked by abot<br><br>Short nolore<br>Short knowyou<br>Short OnPCHitMe<br>Short removeDay<br>Short count<br>Short extraBounty<br><br>short i1<br>float t1<br>float x1<br>float y1<br>float x2<br>float y2<br>float x3<br>float y3<br><br>if ( MenuMode == 1 )<br>    return<br>endif    <br><br>if ( i1 >= 10 )<br>    set x2 to ( GetDistance player )<br>    if ( x2 > 500 )<br>        set i1 to 1<br>        set x1 to ( player->GetPos X )<br>        set y1 to ( player->GetPos Y )<br>        set y3 to ( player->GetAngle Z )<br><br>        set x2 to GetPos X<br>        set y2 to GetPos Y<br><br>        set x2 to ( x2 - x1 )<br>        set y2 to ( y2 - y1 )<br><br>        set x3 to ( y2 * y2 )<br>        if ( x3 < 0.000001 )<br>            return<br>        endif<br><br>        set x3 to ( x2 / y2 )<br><br>        if ( x2 > 0 )<br>            if ( y2 > 0 )<br>                if ( x3 > 1 )<br>                    if ( y3 < -45 )<br>                        set i1 to 0<br>                    endif<br>                else<br>                    if ( y3 < -90 )<br>                        set i1 to 0<br>                    endif<br>                    if ( y3 > 135 )<br>                        set i1 to 0<br>                    endif<br>                endif<br>            else<br>                if ( x3 < -1 )<br>                    if ( y3 < 0 )<br>                        if ( y3 > -135 )<br>                            set i1 to 0<br>                        endif<br>                    endif<br>                else<br>                    if ( y3 < 45 )<br>                        if ( y3 > -90 )<br>                            set i1 to 0<br>                        endif<br>                    endif<br>                endif<br>            endif<br>        else<br>            if ( y2 > 0 )<br>                if ( x3 < -1 )<br>                    if ( y3 > 45 )<br>                        set i1 to 0<br>                    endif<br>                else<br>                    if ( y3 > 90 )<br>                        set i1 to 0<br>                    endif<br>                    if ( y3 < -135 )<br>                        set i1 to 0<br>                    endif<br>                endif<br>            else<br>                if ( x3 > 1 )<br>                    if ( y3 > 0 )<br>                        if ( y3 < 135 )<br>                            set i1 to 0<br>                        endif<br>                    endif<br>                else<br>                     if ( y3 > -35 )<br>                        if ( y3 < 90 )<br>                            set i1 to 0<br>                        endif<br>                    endif<br>                endif<br>            endif<br>        endif<br><br>        if ( i1 == 0 ) ; player is not looking at me<br>            if ( GetDisabled == 0 )<br>                disable<br>            else<br>                enable<br>            endif<br>        endif<br>    endif   <br>    set i1 to 0<br>endif<br><br>if ( t1 < 5 )<br>    set t1 to ( t1 + GetSecondsPassed )<br>else<br>    set t1 to ( ( Random 10001 ) / 10000.0 )<br>    if ( GameHour > 20 )<br>        set i1 to 1<br>    elseif ( GameHour < 8 )<br>        set i1 to 1<br>    else<br>        set i1 to 0<br>    endif<br>    if ( i1 == 1 )<br>        if ( GetDisabled == 0 )<br>            set i1 to 10<br>            return<br>        endif<br>    else ; daytime<br>        if ( day != removeDay )<br>            if ( GetDisabled == 1 )<br>                set i1 to 20<br>                return<br>            endif<br>        endif<br>    endif<br>endif<br><br>if ( CellChanged == 1 )<br>    if ( GameHour > 20 )<br>        set i1 to 1<br>    elseif ( GameHour < 8 )<br>        set i1 to 1<br>    else<br>        set i1 to 0<br>    endif<br>    if ( GetInterior == 1 )<br>        if ( i1 == 1 )<br>            if ( GetDisabled == 0 )<br>                disable<br>            endif<br>        elseif ( GetDisabled == 1 )<br>            enable<br>        endif<br>        return<br>    endif<br>endif<br><br>if ( GetDisabled == 1 )<br>    return<br>endif<br>    <br>if ( GetEffect sEffectRecall )    ; Recall cast completed<br>    set removeDay To Day; Trigger unscheduled disable for one day<br>    disable<br>    return<br>elseif ( OnPCHitMe == 1 )<br>    SetHealth 1000    ; Prevent more attacks from killing kid<br>    Cast "1EM_kidsrecall" Player    ; Face Player and cast kids recall spell<br>    if ( extraBounty == 0 )<br>        ModPCCrimeLevel 2000    ; Add extra fine for this crime<br>        set extraBounty To 1<br>    elseif ( GetPCCrimeLevel == 0 )<br>        set OnPCHitMe To 0<br>        set extraBounty To 0<br>    endif<br>endif<br><br>End

 

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

замени хоть   на пустое, нечитабельно ж
А самим никак? Две кнопки же нажать.

 

 

begin EM_Kidsschedule2script

 

; By Nigedo.

; This script is for all kids who require only scheduled behaviour and recall when attacked

; scripts disable/enable while unseen and timing reworked by abot

 

Short nolore

Short knowyou

Short OnPCHitMe

Short removeDay

Short count

Short extraBounty

 

short i1

float t1

float x1

float y1

float x2

float y2

float x3

float y3

 

if ( MenuMode == 1 )

return

endif

 

if ( i1 >= 10 )

set x2 to ( GetDistance player )

if ( x2 > 500 )

set i1 to 1

set x1 to ( player->GetPos X )

set y1 to ( player->GetPos Y )

set y3 to ( player->GetAngle Z )

 

set x2 to GetPos X

set y2 to GetPos Y

 

set x2 to ( x2 - x1 )

set y2 to ( y2 - y1 )

 

set x3 to ( y2 * y2 )

if ( x3 < 0.000001 )

return

endif

 

set x3 to ( x2 / y2 )

 

if ( x2 > 0 )

if ( y2 > 0 )

if ( x3 > 1 )

if ( y3 < -45 )

set i1 to 0

endif

else

if ( y3 < -90 )

set i1 to 0

endif

if ( y3 > 135 )

set i1 to 0

endif

endif

else

if ( x3 < -1 )

if ( y3 < 0 )

if ( y3 > -135 )

set i1 to 0

endif

endif

else

if ( y3 < 45 )

if ( y3 > -90 )

set i1 to 0

endif

endif

endif

endif

else

if ( y2 > 0 )

if ( x3 < -1 )

if ( y3 > 45 )

set i1 to 0

endif

else

if ( y3 > 90 )

set i1 to 0

endif

if ( y3 < -135 )

set i1 to 0

endif

endif

else

if ( x3 > 1 )

if ( y3 > 0 )

if ( y3 < 135 )

set i1 to 0

endif

endif

else

if ( y3 > -35 )

if ( y3 < 90 )

set i1 to 0

endif

endif

endif

endif

endif

 

if ( i1 == 0 ) ; player is not looking at me

if ( GetDisabled == 0 )

disable

else

enable

endif

endif

endif

set i1 to 0

endif

 

if ( t1 < 5 )

set t1 to ( t1 + GetSecondsPassed )

else

set t1 to ( ( Random 10001 ) / 10000.0 )

if ( GameHour > 20 )

set i1 to 1

elseif ( GameHour < 8 )

set i1 to 1

else

set i1 to 0

endif

if ( i1 == 1 )

if ( GetDisabled == 0 )

set i1 to 10

return

endif

else ; daytime

if ( day != removeDay )

if ( GetDisabled == 1 )

set i1 to 20

return

endif

endif

endif

endif

 

if ( CellChanged == 1 )

if ( GameHour > 20 )

set i1 to 1

elseif ( GameHour < 8 )

set i1 to 1

else

set i1 to 0

endif

if ( GetInterior == 1 )

if ( i1 == 1 )

if ( GetDisabled == 0 )

disable

endif

elseif ( GetDisabled == 1 )

enable

endif

return

endif

endif

 

if ( GetDisabled == 1 )

return

endif

 

if ( GetEffect sEffectRecall ) ; Recall cast completed

set removeDay To Day; Trigger unscheduled disable for one day

disable

return

elseif ( OnPCHitMe == 1 )

SetHealth 1000 ; Prevent more attacks from killing kid

Cast "1EM_kidsrecall" Player ; Face Player and cast kids recall spell

if ( extraBounty == 0 )

ModPCCrimeLevel 2000 ; Add extra fine for this crime

set extraBounty To 1

elseif ( GetPCCrimeLevel == 0 )

set OnPCHitMe To 0

set extraBounty To 0

endif

endif

 

End

 

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

тогда уже так

 

begin EM_Kidsschedule2script
; By Nigedo.
; This script is for all kids who require only scheduled behaviour and recall when attacked
; scripts disable/enable while unseen and timing reworked by abot
Short nolore
Short knowyou
Short OnPCHitMe
Short removeDay
Short count
Short extraBounty
short i1
float t1
float x1
float y1
float x2
float y2
float x3
float y3
if ( MenuMode == 1 )
return
endif
if ( i1 >= 10 )
set x2 to ( GetDistance player )
if ( x2 > 500 )
set i1 to 1
set x1 to ( player->GetPos X )
set y1 to ( player->GetPos Y )
set y3 to ( player->GetAngle Z )
set x2 to GetPos X
set y2 to GetPos Y
set x2 to ( x2 - x1 )
set y2 to ( y2 - y1 )
set x3 to ( y2 * y2 )
if ( x3 < 0.000001 )
return
endif
set x3 to ( x2 / y2 )
if ( x2 > 0 )
if ( y2 > 0 )
if ( x3 > 1 )
if ( y3 < -45 )
set i1 to 0
endif
else
if ( y3 < -90 )
set i1 to 0
endif
if ( y3 > 135 )
set i1 to 0
endif
endif
else
if ( x3 < -1 )
if ( y3 < 0 )
if ( y3 > -135 )
set i1 to 0
endif
endif
else
if ( y3 < 45 )
if ( y3 > -90 )
set i1 to 0
endif
endif
endif
endif
else
if ( y2 > 0 )
if ( x3 < -1 )
if ( y3 > 45 )
set i1 to 0
endif
else
if ( y3 > 90 )
set i1 to 0
endif
if ( y3 < -135 )
set i1 to 0
endif
endif
else
if ( x3 > 1 )
if ( y3 > 0 )
if ( y3 < 135 )
set i1 to 0
endif
endif
else
if ( y3 > -35 )
if ( y3 < 90 )
set i1 to 0
endif
endif
endif
endif
endif
if ( i1 == 0 ) ; player is not looking at me
if ( GetDisabled == 0 )
disable
else
enable
endif
endif
endif
set i1 to 0
endif
if ( t1 < 5 )
set t1 to ( t1 + GetSecondsPassed )
else
set t1 to ( ( Random 10001 ) / 10000.0 )
if ( GameHour > 20 )
set i1 to 1
elseif ( GameHour < 8 )
set i1 to 1
else
set i1 to 0
endif
if ( i1 == 1 )
if ( GetDisabled == 0 )
set i1 to 10
return
endif
else ; daytime
if ( day != removeDay )
if ( GetDisabled == 1 )
set i1 to 20
return
endif
endif
endif
endif
if ( CellChanged == 1 )
if ( GameHour > 20 )
set i1 to 1
elseif ( GameHour < 8 )
set i1 to 1
else
set i1 to 0
endif
if ( GetInterior == 1 )
if ( i1 == 1 )
if ( GetDisabled == 0 )
disable
endif
elseif ( GetDisabled == 1 )
enable
endif
return
endif
endif
if ( GetDisabled == 1 )
return
endif
if ( GetEffect sEffectRecall ) ; Recall cast completed
set removeDay To Day; Trigger unscheduled disable for one day
disable
return
elseif ( OnPCHitMe == 1 )
SetHealth 1000 ; Prevent more attacks from killing kid
Cast "1EM_kidsrecall" Player ; Face Player and cast kids recall spell
if ( extraBounty == 0 )
ModPCCrimeLevel 2000 ; Add extra fine for this crime
set extraBounty To 1
elseif ( GetPCCrimeLevel == 0 )
set OnPCHitMe To 0
set extraBounty To 0
endif
endif
End

 

 

по идее эту секцию

if ( GameHour > 20 )
set i1 to 1
elseif ( GameHour < 8 )
set i1 to 1
else
set i1 to 0
endif

нужно заменить на

set i1 to 0
if ( GameHour > 8 )
if ( GameHour < 20 )
set i1 to 1
endif
endif

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

Большое спасибо, вроде бы сработало!

 

Может ли кто еще подсказать, как сделать, допустим, что-то вроде сторожевого кричера? Есть библиотека, дверной проем там открытый в общий зал, где есть NPС, но форма комнаты такая, что большая ее часть не просматривается. NPC ставить не хочу туда, но сигналку какую-то стоит поставить, чтобы безнаказанно тырить книги нельзя было...

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

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

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

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

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

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

Войти

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

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

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