Форум «Лабортории Mod-Tec»

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas


Помощь по скриптам Fallout 3 и Fallout: New Vegas

Сообщений 271 страница 300 из 350

271

Всем привет!
Как в скрипте писать проверку на уровень игрока?
Или с помощью какой скриптовой команды можно отнимать здоровье у игрока в процентах?

Отредактировано OZOZ-13 (26.07.11 16:10:35)

0

272

tundruck73 написал(а):

MuxauJl, огромное спасибо! И прошу прощения, что не поблагодарил раньше - всему виной проблемка со связью

Да не за что :)

OZOZ-13 написал(а):

Всем привет!
Как в скрипте писать проверку на уровень игрока?

Код:
    GetLevel
________________________________________
Синтаксис: 
[ActorID.]GetLevel
Функция GetLevel возвращает текущий уровень вызывающего актера (ActorID).

Следовательно:
if (Player.GetLevel >= 20) - условие выполнится если уровень игрока больше или равен 20.

0

273

MuxauJl, а на счет здоровья отнимающегося в процентах ничего не знаешь?

0

274

Там оно не в процентах отнимается/пробавляется, а в спец. игровых единицах. Точно не помню как им манипулировать (из-за проблем с компом не могу в редакторе посмотреть), сейчас Сергея позову, может он подскажет.

0

275

OZOZ-13, MuxauJl, функция, позволяющая уменьшать/повышать здоровье НПЦ/игрока выглядит так:

Код:
ActorRef.ModAV Health -10

Где:
ActorRef - Ref-имя НПЦ или Player;
ModAV - функция изменения параметра актера (Actor Value);
Health - параметр "Здоровье" выбранного актера;
"-" (минус) - алгебраический знак вычитания;
10 - значение, которое вычитается из здоровья актера.

А вообще, OZOZ-13, что конкретно требуется? Опишите ситуацию.

0

276

А какая фуркция на проверку Enable ли объект ? Если проверка на Disable вот:
if Tup.GetDisabled == 1 то может ли быть проверка на Enable вот эта функция if GetIsReference Tup == 1 ?

0

277

Серёга написал(а):

А какая фуркция на проверку Enable ли объект ? Если проверка на Disable вот:
if Tup.GetDisabled == 1 то может ли быть проверка на Enable вот эта функция if GetIsReference Tup == 1 ?

Enable - противоположность Disable. Поэтому проверка такая:
if Tup.GetDisabled == 0
или
if Tup.GetDisabled != 1

+1

278

MuxauJl, Ясно, спасибо за информацию, а то сам бы как всегда часов 6 эксперементировал бы с функциями как это обычно я делаю  :rofl:

0

279

Sergey_Ros, ситуация такая: игрок находится в тригерре и у него каждые пол секунды должно отниматься по 10% здоровья. Это как бы уда током который отнимает здоровье. Отнимать здоровье в процентах нужно по следующей причине: если у игрока 30 уровень и много здоровья, то он может находится в этом триггере дольше чем игрок с 1 уровнем. Нужно что бы не зависимо от уровня у всех игроков была одинаковая ситуация.

0

280

OZOZ-13, Лучше сдела проверку на уровень, если уровень меньше 5 тогда урон 5, если уровень больше 10 и меньше 15 тогда урон 20, если уровень больше 15 и выше тогда урон 50.

0

281

А я вот замарочился и написал скрипт:

Код:
scn ModTecReduceNPCHealth

short sShockOn
float fPCHealthPercent
float fTimer
float fTimeLimiter

Begin onTriggerEnter
set sShockOn to 1
End

Begin onTriggerLeave
set sShockOn to 0
set fTimer to 0
set fTimeLimiter to 0
End

Begin GameMode
if (sShockOn == 1)
set fTimer to (fTimer + GetSecondsPassed)
	if (fTimer >= fTimeLimiter) && (fTimer <= (fTimeLimiter + .5))
    if (fPCHealthPercent == 0) && (Player.GetDead != 1)
    	set fPCHealthPercent to (Player.GetAV Health / 10)
    endif
    Player.ModAV Health -fPCHealthPercent
    set fTimeLimiter to (fTimeLimiter + .5)
	endif
endif
End

Работает так:
- ГГ заходит в триггер;
- скрипт считывает текущее кол-во ОЗ у ГГ;
- скрипт записывает в переменную fPCHealthPercent 10% ОЗ ГГ;
- и каждые пол секунды отнимает у ГГ ОЗ, если тот в триггере.

НО. Есть нюанс - если у ГГ 20 ОЗ, скрипт будет отнимать лишь 2 очка здоровья, тогда как при 500 ОЗ он будет отнимать 50 очков. Вроде бы и то, что требовалось, но чисто гипотетически скрипт не может убить ГГ. Хотя, зная, что все числовые операции в системе обычно округляются в меньшую сторону, ГГ все же умрет. В общем, нужно тестировать.

+1

282

Sergey_Ros, редактор указывает на ошибку в этом месте:

Код:
Player.ModAV Health -fPCHealthPercent

Как это исправить?

Отредактировано OZOZ-13 (28.07.11 09:15:42)

0

283

OZOZ-13 написал(а):

Код:Player.ModAV Health -fPCHealthPercent Как это исправить?

Убери "-" следовательно строчка будет выглядеть так Player.ModAV Health fPCHealthPercent. И вобще проверяй скрипты на валидаторе, ЗДЕСЬ.

Отредактировано Серёга (28.07.11 10:21:20)

0

284

OZOZ-13 написал(а):

Как это исправить?

Дописать "-" (минус) перед десяткой в строке:

Код:
set fPCHealthPercent to (Player.GetAV Health / -10)

Так как если убрать минус в "Player.ModAV Health fPCHealthPercent", то получится, что ГГ наоборот будут начисляться ОЗ (значение-то будет положительным).

0

285

Привет всем, тут такая проблемма. Я установил на активатор скрипт:

Скрипт|Скрипт

SCN aaaStreetCarModGoScript

short button
short activated

begin onactivate player
showmessage aaaStreetCarModMessage1
set activated to 1
end

begin gamemode
if (activated == 1)
    set button to getbuttonpressed
    if button == 0
    player.additem aaaStreetCarMod1 1
    player.EquipItem aaaStreetCarMod1
    aaaStreetCarModGoRef.disable
    set activated to 2
    elseif button == 0
endif
endif
end

Но при одевании брони скрипт на ней не работает, а работает только если самостоятельно в игре одень броню, вот скрипт на броню:

Спойлер|Скрипт

SCN aaaStreetCarArmorScript

short Driving
float ModSpeed
float Timer
short HealOnce

begin OnEquip
Set Driving to 1
Set ModSpeed to 100
DisablePlayerControls 0 0 1 0 0 1 1
end   

begin OnUnEquip
Set Driving to 0
Player.Setav SpeedMult 100
EnablePlayerControls
end

begin GameMode
if(HealOnce == 1)
    Player.Restoreav LeftMobilityCondition 1
    Set HealOnce to 0
endif

if Driving == 1
    Player.CastImmediateOnSelf aaaStreetCarSitOnActorPlayerEffect
    if ( Timer > 0 )
        Set Timer to ( Timer - GetSecondsPassed )
    else
       
        Set ModSpeed to ModSpeed+(300-0.004*ModSpeed*ModSpeed)*0.5
        Player.Setav SpeedMult ModSpeed    

        Player.Damageav LeftMobilityCondition 1
        Set HealOnce to 1
         Set Timer to 1
       
        PlayGroup Forward 2
    endif
    endif

end

Как сделать чтобы при нажатии на активатор одевалась броня и использовала сама скрипт ? А то почему то скрипт не работает на броне если я одеваю броню другим скриптом.

И вот ещё вопрос, объясните значение кнопок на функции IsKeyPressed, ну типа как IsKeyPressed 25 это действие на кнопку P а например какая кнопка Е ?

Ну у меня после нажатия на кнопку P или Е или другой какой нибудь кнопкой будет удалятся броня из инвенторя.

И при том как выкинуть из инвенторя эту бронь тогда должен активироватся один раз такой скрипт:

Скрипт|Скрипт

scn aaaStreetCarQuest2Script

float tmp

Begin GameMode
set tmp to player.getpos x + 200
player.setpos x tmp
player.placeatme aaaStreetCarModGo == 1
player.removeitem aaaStreetCarMod1 1
return
endif
End

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

Отредактировано Серёга (29.07.11 01:23:59)

0

286

Серёга, по пунктам.

Скрипт первый

Код:
if button == 0
elseif button == 0
endif

Вот что думает программа: если нажата первая кнопка в сообщении, то выполнить скрипт, иначе, если нажата первая кнопка, то ничего не делать. Я так понимаю, нужно изменить "0" на "1" в условии elseif.

Броня может не одеваться из-за этой логической ошибки. Но есть и второй вариант: нужно сделать небольшую задержку между добавлением брони в инвентарь и ее одеванием.

Серёга написал(а):

А то почему то скрипт не работает на броне если я одеваю броню другим скриптом.

Что за "другой скрипт"? Можно код в студию?

Серёга написал(а):

И вот ещё вопрос, объясните значение кнопок на функции IsKeyPressed

Параметр у функции IsKeyPressed является числом-кодом. Вот список всех клавиш и соответствующих им кодов: FOSE Command Docs

Серёга написал(а):

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

Используйте блок onDrop в скрипте брони.

0

287

Sergey_Ros написал(а):

Вот что думает программа: если нажата первая кнопка в сообщении, то выполнить скрипт, иначе, если нажата первая кнопка, то ничего не делать. Я так понимаю, нужно изменить "0" на "1" в условии elseif.

Не помогло, второй вариант ещё не пробывал.

Sergey_Ros написал(а):

Параметр у функции IsKeyPressed является числом-кодом. Вот список всех клавиш и соответствующих им кодов: FOSE Command Docs

Выбрал себе нужную кнопку, спасибо за ссылку.

Sergey_Ros написал(а):

Используйте блок onDrop в скрипте брони.

Скрипт работает, но теперь в этом скрипте эта строчка безполезная (это скрипт на активатор):

Скрипт|Скрипт

SCN aaaStreetCarModGoScript

short button
short activated

begin onactivate player
showmessage aaaStreetCarModMessage1
set activated to 1
end

begin gamemode
if (activated == 1)
    set button to getbuttonpressed
    if button == 0
    player.additem aaaStreetCarMod1 1
    player.EquipItem aaaStreetCarMod1
    aaaStreetCarModGoRef.disable
    set activated to 2
    elseif button == 0
endif
endif
end

Можно ли как нибудь без постоянной реф ссылки сделать ищезновение объекта при активации (каждый раз) ? Просто у меня бронь выкинуть нельзя, а бронь щитается транспортом, можно только удалить из инвенторя зажав Tab ну и при удалении объекта, как вы поняли появляется этот объект aaaStreetCarModGo рядом с гг. Но теперь при появлении объекта если я его активирую он не ищезает так как нет постоянной реф ссылки, а будит ли работать player.placeatme aaaStreetCarModGoRef == 1 появление объекта с реф ссылкой ? И вот ещё проблема, после удаления брони из инвенторя скрипт с брони всё равно действует на гг, как это исправить ?

Отредактировано Серёга (30.07.11 02:27:12)

0

288

Серёга написал(а):

Можно ли как нибудь без постоянной реф ссылки сделать ищезновение объекта при активации (каждый раз) ?

Если нужно disable'нуть объект, на котором и висит скрипт, достаточно просто написать "Disable". То есть:

Код:
player.EquipItem aaaStreetCarMod1
disable
set activated to 2
Серёга написал(а):

И вот ещё проблема, после удаления брони из инвенторя скрипт с брони всё равно действует на гг, как это исправить ?

В блоке OnDrop на броне нужно сбросить все переменные на начальные значения.

0

289

Здравствуйте. Понадобился вот такой вот скрипт...
Нужно что бы когда гг активировал кровать тух экран. после он просыпался в 16:00 следующего дня и проигрывалась анимация как он встаёт с этой кровати. на счёт последнего можно использовать player.MoveTo idref кровати но при этом гг тупо лежит и при нажимании любых клавиш он всёравно лежит. тем более камера от 1 становится ужасна, можно смотреть сквозь текстуры. ElRayQueenBedRightREF - id кроватки.
Большое спасибо что делали для меня скрипты, надеюсь сей час вы тоже мне поможете)

0

290

Musstafar написал(а):

когда гг активировал кровать тух экран

Используйте функцию "imod FadeToBlackISFX" для плавного затухания экрана в черное.

Musstafar написал(а):

после он просыпался в 16:00 следующего дня

Вставьте в тело скрипта такой код:

Код:
set GameHour to 16
set GameDayPassed to (GameDayPassed + 1)
Musstafar написал(а):

анимация как он встаёт с этой кровати

Хм... Анимации вставания с постели у ГГ нет. Но точно знаю, что есть моды, добавляющие такую возможность.

0

291

Sergey_Ros написал(а):

set GameHour to 16 set GameDayPassed to (GameDayPassed + 1)

не пойму куда вставить, вставляю в скрипт. Скрипт перестаёт сохранять.

0

292

Musstafar, я ошибся во второй строке. Нужно писать "set GameDaysPassed to (GameDayPassed + 1)".

0

293

Musstafar, Можно взять с начала фола нв, там гг лежит (вид от первого лица) и через 5 секунд встает.

Sergey_Ros написал(а):

Если нужно disable'нуть объект, на котором и висит скрипт, достаточно просто написать "Disable". То есть:

Sergey_Ros написал(а):

В блоке OnDrop на броне нужно сбросить все переменные на начальные значения.

Я так сделал но теперь активатор перестал появлятся возле меня после удаления брони из инвенторя. А когда я сбросил переменные в блоке OnDrop нечего не изменялось.

0

294

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

0

295

Sergey_Ros, Ну это не проэкт а просто обычный мод "транспорт".

Вот скрипт на активатор (после того как убрал постоянную реф ссылку, после удаления из инвенторя брони теперь активатор не появляется, точно не знаю из-за чего):

Скрипт|Скрипт

short button
short activated
float timer

begin onactivate player
showmessage aaaStreetCarModMessage1
set activated to 1
end

begin gamemode
if (activated == 1)
    set button to getbuttonpressed
    if button == 0
player.additem aaaStreetCarMod1 1
player.EquipItem aaaStreetCarMod1
    disable
endif
    set activated to 2
    elseif button == 1
endif
end

Вот скрипт на броню:

Скрипт|Скрипт

short Driving
float ModSpeed
float Timer
short HealOnce
float tmp

begin OnEquip
Set Driving to 1
Set ModSpeed to 100
DisablePlayerControls 0 0 1 0 0 1 1
end   

begin OnUnEquip
Set Driving to 0
Player.Setav SpeedMult 100
EnablePlayerControls
end

begin GameMode
if ( HealOnce == 1 )
    Player.Restoreav LeftMobilityCondition 1
    Set HealOnce to 0
endif

if Driving == 1
    Player.CastImmediateOnSelf aaaStreetCarSitOnActorPlayerEffect
    if ( Timer > 0 )
        Set Timer to ( Timer - GetSecondsPassed )
    else
       
        Set ModSpeed to ModSpeed+(300-0.004*ModSpeed*ModSpeed)*0.5
        Player.Setav SpeedMult ModSpeed    

        Player.Damageav LeftMobilityCondition 1
        Set HealOnce to 1
         Set Timer to 1
       
        PlayGroup Forward 2
    endif
    endif

end

begin OnDrop
;Set Driving to 0
;Player.Setav SpeedMult 100
;EnablePlayerControls             ;пробывал не писать эти строки всё тогда работало, написал работать перестало
set tmp to player.getpos x + 200
player.setpos x tmp
player.placeatme aaaStreetCarModGo
player.EquipItem aaaStreetCarMod1
player.removeitem aaaStreetCarMod1 1
endif
End

Скрипт с квеста:

Скрипт|Скрипт

short sToggle

BEGIN GameMode
  If IsKeyPressed 15 != sToggle
    Set sToggle To sToggle == 0
if sToggle
    player.RemoveItem aaaStreetCarMod1 1
else
    player.RemoveItem aaaStreetCarMod1 1
endif
endif
End

У меня 3 ошибки

1. Когда удаляю броню, в любом случае скрипт с брони на меня действует (как бы я не  пытался поставить переменные назад).
2. При том как я нажимаю на активатор броня одевается но не использует скрипт (пробывал ставить таймер, не помогло).
3. При удалении из инвенторя брони (скрипт всё равно действует) и активатор почему то перестал рядом появлятся, это или из-за тоо что я убрал реф ссылку и оставил disable или из-за вот этих строк в блоке OnDrop


;Set Driving to 0
;Player.Setav SpeedMult 100
;EnablePlayerControls

Вроде всё.

0

296

Sergey_Ros написал(а):

Нужно писать "set GameDaysPassed to (GameDayPassed + 1)".

Да спасибо, можно мне было и самому догадаться, только нужно ещё и в скобках дописать S.

Серёга написал(а):

Можно взять с начала фола нв, там гг лежит (вид от первого лица) и через 5 секунд встает.

Можно попробовать, но вот только я даже не могу найти ни скрипта, ни анимации... К Кровати на которой в начале лежит гг вообще непривязано не какого скрипта. А квест который даётся в самом начале я не могу найти... Если перевести название квеста на английский (Ain't That a Kick in the Head) и в вести его в поиск гека то не чего не находит.

Отредактировано Musstafar (31.07.11 12:24:52)

0

297

Musstafar, Все начальные квесты начинаются на VCG и CG то что ты хочешь сделать вроде сделали через аи пакет и подключили на него анимацию.

Отредактировано Серёга (31.07.11 13:17:25)

0

298

Серёга написал(а):

Все начальные квесты начинаются на VCG и CG то что ты хочешь сделать вроде сделали через аи пакет и подключили на него анимацию.

а есть ли какой нибудь туториал на эту тему?
а то ясам думаю не смогу этого сделать. Или может быть вы сами объясните мне по шагам...
Но всё равно спасибо за желание помочь

Отредактировано Musstafar (31.07.11 15:35:06)

0

299

Серёга, попробуйте исправленные версии скриптов.
Скрипт активатора.

Скрипт

short button
short activated

Begin OnActivate player
ShowMessage aaaStreetCarModMessage1
set activated to 1
End

Begin GameMode
if (activated == 1)
    set button to GetButtonPressed
    if button == 0
    player.AddItem aaaStreetCarMod1 1
    player.EquipItem aaaStreetCarMod1
    set activated to 2
    Disable
    elseif button == 1
    endif
endif
End

Скрипт брони.

Скрипт

short Driving
float ModSpeed
float Timer
short HealOnce
float tmp
ref Myself

Begin OnEquip
set Driving to 1
set ModSpeed to 100
DisablePlayerControls 0 0 1 0 0 1 1
End

Begin OnUnequip
set Driving to 0
Player.SetAV SpeedMult 100
EnablePlayerControls
End

Begin GameMode
if (Myself == 0)
    set Myself to GetSelf
    if (Player.GetEquipped Myself == 1) && (Driving != 1)
    set Driving to 1
    set ModSpeed to 100
    DisablePlayerControls 0 0 1 0 0 1 1
    endif
endif

if Driving == 1
    Player.CastImmediateOnSelf aaaStreetCarSitOnActorPlayerEffect
    if (Timer > 0)
    set Timer to (Timer - GetSecondsPassed)
    else

    set ModSpeed to ModSpeed+(300-0.004*ModSpeed*ModSpeed)*0.5
    Player.SetAV SpeedMult ModSpeed
    Player.Damageav LeftMobilityCondition 1
    set HealOnce to 1
    set Timer to 1

    PlayGroup Forward 2
    endif
endif

if (HealOnce == 1)
    Player.Restoreav LeftMobilityCondition 1
    set HealOnce to 0
endif
End

Begin OnDrop
set tmp to player.GetPos x + 200
Player.PlayGroup Idle 1
player.SetPos x tmp
Player.SetAV SpeedMult 100
EnablePlayerControls
set Driving to 0
player.PlaceAtMe aaaStreetCarModGo
Disable
MarkForDelete
End

Вопросы:
1) В чем суть квестового скрипта?
2) В чем заключается эффект, который не убирается? Что именно происходит.

0

300

Sergey_Ros, Попробую как трафик обновится, после 12.
1. При зажатии TAB броня удаляется с инвенторя гг.

2. Убирается эффект actor effect и то только анимация которую я туда поставил, а я туда ставил эффект анимации и эффект скорости. Один эффект анимации ищезает но я как летал в броне, так и летаю (без неё) когда она удаляется из инвентаря.

Sergey_Ros, Теперь при нажатии на вервый button выбивает ошибку в игре.

Отредактировано Серёга (01.08.11 02:21:15)

0


Вы здесь » Форум «Лабортории Mod-Tec» » G.E.C.K. Community » Помощь по скриптам Fallout 3 и Fallout: New Vegas