![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2561
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Со стулом теперь всё ОК (IMG:style_emoticons/kolobok_light/good.gif) Спасибо!
Сообщение отредактировал Diamond - Sep 23 2006, 16:13 |
![]()
Сообщение
#2562
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Вопрос: Есть скрипт на ТекстПоявляетсяПри
NSS int StartingConditional() { // Inspect local variables if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_sailok") != 1)) return FALSE; if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_sajala") != 1)) return FALSE; if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_ship_contr") != 1)) return FALSE; if(!(GetLocalInt(GetPCSpeaker(), "ar1_leave_ship_merc") != 1)) return FALSE; return TRUE; } Но мне нужно, чтобы строка диалога исчезала только если все 4 переменныи равны 1, а в этом вареанте она исчезает если одна равна 1. |
![]()
Сообщение
#2563
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
NSS int StartingConditional() { object oPC = GetPCSpeaker(); if (GetLocalInt(oPC, "ar1_leave_sailok") == 1 && GetLocalInt(oPC, "ar1_leave_sajala") == 1 && GetLocalInt(oPC, "ar1_leave_ship_contr") == 1 && GetLocalInt(oPC, "ar1_leave_ship_merc") == 1) { return FALSE; } else return TRUE; } Когда все 4 переменные равны TRUE, то строка исчезает. Иначе - висит. Сообщение отредактировал Dik Morris - Sep 24 2006, 19:30 |
![]()
Сообщение
#2564
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
а при компиляци не ругается на некое невозвращенное значение функции? (IMG:style_emoticons/kolobok_light/crazy.gif)
имхо else return TRUE; заменить на просто return TRUE; |
![]()
Сообщение
#2565
|
|
Level 5 ![]() Класс: Волшебник Характер: Chaotic Good Раса: Дракон NWN: Скриптинг [Sn] ![]() |
QUOTE(2_advanced @ Sep 25 2006, 00:20) [snapback]92679[/snapback] а при компиляци не ругается на некое невозвращенное значение функции? if-else типа друг друга дополняют, так что не ругается! (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2566
|
|
Level 1 Класс: Некромант Характер: Lawful Evil Раса: Человек ![]() |
Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит
:-(( |
![]()
Сообщение
#2567
|
|
Level 4 ![]() ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек ![]() |
QUOTE(Ilrilan @ Sep 27 2006, 11:57) [snapback]92874[/snapback] Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит :-(( Ясно дело, не ловится. Программно это дело не решается. |
![]()
Сообщение
#2568
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
внешним софтом отлавливать посыл пакета на выход =)
а чтоб не альтились - сделать спец палку с диалогом, бутящую персов =) |
![]()
Сообщение
#2569
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(Ilrilan @ Sep 27 2006, 09:57) [snapback]92874[/snapback] Как можно поймать событие что человек альтанулся? Не резко нажал Disconnect, а взял и выткнул физически сетевой шнур из компа. Или у него просто обрыв связи был. OnClientLeave почему-то этот момент не ловит интересный метод "альтования", однако. при описываемом тобой раскладе, альтующийся извращенец быстро склеит ласты, ибо сервер пакет выхода не видит, и думает что чел здесь. и только через минуту таймаута сервак по отсутствию "пингов" поймет, что чела нет и спокойно завершит сессию, записав состояние перса. а состояние это скорее всего будет "несвежим", и зайдя обратно чел будет тщетно взывать к ДМам "БАГ!Я ЗОШОЛ МЕРТВЫЙ!!!!А БЫЛ ЖИВОЙ!!!!" (IMG:style_emoticons/kolobok_light/shout.gif) . так что способ этот относится скорее к сепукке, нежели к позорному бегству. QUOTE(2_advanced @ Sep 27 2006, 16:31) [snapback]92904[/snapback] внешним софтом отлавливать посыл пакета на выход =) это "ответ чемберлену" на нормальное альтование. (IMG:style_emoticons/kolobok_light/wink3.gif) |
![]()
Сообщение
#2570
|
|
Level 8 ![]() ![]() ![]() Класс: Бледный Мастер Характер: Chaotic Neutral Раса: Человек ![]() |
QUOTE(dumbo @ Sep 28 2006, 02:41) [snapback]92934[/snapback] интересный метод "альтования", однако. при описываемом тобой раскладе, альтующийся извращенец быстро склеит ласты, ибо сервер пакет выхода не видит, и думает что чел здесь. и только через минуту таймаута сервак по отсутствию "пингов" поймет, что чела нет и спокойно завершит сессию, записав состояние перса. В большинстве случаев так и будет, но не всегда. Если клиент линуховый и его убивают, то сервер тут же отключает чела, даже не получив пакет выхода. Видать как-то еще обрабатывается состояние сокета. |
![]() ![]()
Сообщение
#2571
|
|
Level 1 Класс: Самурай Характер: True Neutral Раса: Полуэльф ![]() |
Пытался сделать дверь которая закрывается 20 часов вечера и открывается в 8 утра.
Что не правильно? Ставил на OnHeartBeat NSS void main()
{ object door=OBJECT_SELF; { if (GetIsOpen(door)==FALSE && GetTimeHour()>=8 && GetTimeHour()<20) { ActionUnlockObject(door); ActionOpenDoor(door); } if (GetIsOpen(door)==TRUE && GetTimeHour()>=20 && GetTimeHour()<8) { ActionCloseDoor(door); ActionLockObject(door); } } } Сообщение отредактировал Animeslave - Oct 2 2006, 08:22 |
![]()
Сообщение
#2572
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
А что не работает?
зы: запирать дверь лучше NSS // Set the locked state of oTarget, which can be a door or a placeable object.
void SetLocked(object oTarget, int bLocked) |
![]()
Сообщение
#2573
|
|
Level 1 Класс: Самурай Характер: True Neutral Раса: Полуэльф ![]() |
Lex спасибо, что перенес. Хочу сильно извениться за свои слова. Простите!
И Lex Если это ты мне, то дело не в том, что плохо запирается, а в том, что, вообще, в назначеный час, не закрываестя, или не открывается дверь. ps: извеняюсь за неинформативность. Сообщение отредактировал Animeslave - Oct 2 2006, 21:10 |
![]()
Сообщение
#2574
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
- Ну для начала у тебя неверное условие:
"GetTimeHour()>=20 && GetTimeHour()<8" Время не может быть одновременно больше 20 и меньше 8. Там надо не И, а ИЛИ ставить. - потом у тебя идет проверка на открытость/закрытость двери, а надо бы на запертость - ну и если дверь заперта на ключ, то ты ее некорректно отпираешь, поэтому открыть ее не получается утром.. ну а вечером не закрывается потому что условие неверное. В итоге что-то такое получается: (скрипт из ПЛ, только тут наоборот, днем закрыто, а ночью открыто.. ночной храм был) NSS void main()
{ int H = GetTimeHour(); object oSelf = OBJECT_SELF; if ((H>=8)&&(H<20)&&(!GetLocked(oSelf))) { SetLocked(oSelf,TRUE); ActionCloseDoor(oSelf); } if (((H>=20)||(H<8))&&(GetLocked(oSelf))) { SetLocked(oSelf,FALSE); ActionCloseDoor(oSelf); } } |
![]()
Сообщение
#2575
|
|
Level 1 Класс: Самурай Характер: True Neutral Раса: Полуэльф ![]() |
Lex спасибо за помощь нашел ошибку. переправил скрипт.
NSS void main() { object door=OBJECT_SELF; { if (GetTimeHour()>=8 && GetTimeHour()<20) { if (GetLocked(door)==TRUE) { SetLocked(door, FALSE); ActionOpenDoor(door); } else { ActionOpenDoor(door); } } else { if (GetLocked(door)==FALSE) { ActionCloseDoor(door); SetLocked(door, TRUE); } else { ActionCloseDoor(door); } } } } Все также на OnHeartBeat двери. И Начальное состояние двери закрыто. Проверил работает ps: Твой скрипт,Lex, почемуто отказывается работать. LEX: ну у меня работал и работает до сих пор, хотя и старенький, его надо бы оптимизировать. Сообщение отредактировал Lex - Oct 3 2006, 22:41 |
![]()
Сообщение
#2576
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Чертишь триггер перед дверью сразу. И вешаешь на ОнЕнтер триггера скрипт:
NSS //:://////////////////////////////////////////////
//:: OnEnter am_ten_door_d_n //:: Copyright © 2005 WRG! //::////////////////////////////////////////////// /* Триггер закрыв. двери ночью и открыв. днем/утром */ //::////////////////////////////////////////////// //:: Created By: Aiwan //:: Created On: 20.04.2005 //::////////////////////////////////////////////// void main() { object oDoor = GetNearestObject(OBJECT_TYPE_DOOR); int iLock = GetLocalInt(oDoor, "LOCKED_NIGHT"); if ((GetIsNight()&&iLock==TRUE)||(GetIsDay()||GetIsDawn()&&iLock==FALSE)) { return; } if (GetIsNight()) { SetLocked(oDoor, TRUE); SetLocalInt(oDoor, "LOCKED_NIGHT", TRUE); return; } if (GetIsDay()||GetIsDawn() && iLock == TRUE) { SetLocked(oDoor, FALSE); SetLocalInt(oDoor, "LOCKED_NIGHT", FALSE); } } |
![]()
Сообщение
#2577
|
|
Level 9 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек NWN: Модмейкер Рыцарская Сага ![]() |
Маленькая модернизация скрипта Лекса. Можно менять час закрытия у нужной двери.
NSS //:://///////////////////////////////////////
//:: Закрытие двери: день - ночь. Слот ХБ //:: Created By: Gennady //::///////////////////////////////////////// void main() { object oSelf = OBJECT_SELF; int T = GetTimeHour(); int iNewT = StringToInt(GetLockKeyTag(oSelf)); // Новый час ЗАКРЫТИЯ int iT = 21; // БАЗОВЫЙ час ЗАКРЫТИЯ if (iNewT >= 1) iT = iNewT; if(T>=iT || T<6) { AssignCommand(oSelf, ActionCloseDoor(oSelf)); AssignCommand(oSelf, ActionDoCommand(SetLocked(oSelf, TRUE))); } else AssignCommand(oSelf, SetLocked(oSelf, FALSE)); } /* Если в слоте тэга ключа стоит цифра, то это новый час закрытия этой двери */ Сообщение отредактировал gennady - Oct 4 2006, 14:15 |
![]()
Сообщение
#2578
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
gennady, имхо:
- прятать инфу в LockKeyTag когда можно уже локалки делать в тулсе как-то попахивает нафталином (IMG:style_emoticons/kolobok_light/smile.gif) - ставить SetLocked в очередь совершенно не обязательно. Фишка в том, что SetLocked(..,TRUE) можно сделать даже открытой двери. И закрыв ее - мы сразу ее и запрем. (ну эт так, придирка) - чтобы не сравнивать каждый раз if (iNewT >= 1) iT = iNewT; проще вписать базовый час открытия в локалку (если ее не задал пользователь) и потом всегда работать с локалкой. - ну и самое главное - ты не проверяешь, заперта ли уже дверь или нет, а значит всю ночь (с 21 до 6) ты будешь ее закрывать и запирать. Это лишнее. доступно объяснил? (IMG:style_emoticons/kolobok_light/smile.gif) Animeslave в принципе нормальный скрипт привел, только там else лишние малек. так же у Айва неплохой вариант, позволяющий не загружать ХБ, только его конечно лучше немного переписать в плане структуры и проверок - корявенький. А идея интересная. |
![]()
Сообщение
#2579
|
|
![]() Класс: Пьяный Мастер Характер: Lawful Good Раса: Тварь MySQL, PHP, JavaScript Порядок Времени ![]() |
не совсем понял смыла таких эээ... больших скриптов (IMG:style_emoticons/kolobok_light/pardon.gif) я бы написал нечто вроде
NSS int nLock = GetTimeHour() < GetLocalInt(OBJECT_SELF, "open_time") || GetTimeHour() >= GetLocalInt(OBJECT_SELF, "close_time"); if( GetLocked(OBJECT_SELF) != nLock ) { if( nLock ) AssignCommand(OBJECT_SELF, ActionCloseDoor(OBJECT_SELF)); SetLocked(OBJECT_SELF, nLock); } не проверял понятно (IMG:style_emoticons/kolobok_light/pardon.gif) можно еще добавить проверку на open_time > close_time (IMG:style_emoticons/kolobok_light/scratch_one-s_head.gif) |
![]() ![]()
Сообщение
#2580
|
|
Level 4 ![]() ![]() Класс: Клерик Характер: Lawful Neutral Раса: Человек ![]() |
Какой скрипт (если есть) отвечает за восстановление заклинаний у кастеров?
|
![]()
Сообщение
#2581
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS ForceRest(oPC); Такой не помогает? |
![]()
Сообщение
#2582
|
|
Level 1 Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф ![]() |
Человек я здесь новый, но перейду сразу к делу. Меня интересует следующее - как ограничить развитие oPC по классу (т.е. задать для пользователя развитие только по тому классу, который определит разработчик). Или скажите хотя бы, как называется скрипт, который описывает все классы.
|
![]()
Сообщение
#2583
|
|
Level 19 ![]() Класс: Обыватель Характер: True Neutral Раса: Дварф NWN: Контент ![]() |
Тебе нужен не скрипт, а classes.2da
Там есть столбец PlayerClass: 1 - игрок может выбирать при генерации, 0 - нет. Сообщение отредактировал Vhall - Oct 26 2006, 14:19 |
![]()
Сообщение
#2584
|
|
Level 1 Класс: Рейнджер Характер: Lawful Neutral Раса: Эльф ![]() |
Это я знаю, но мне этот вариант не подходит. Мысль в следующем: oPC развивается по классу который задал автор, но по ходу игры некоторые NPC могут предоставить возможность обучатся и по другому классу. Вся сложность в том, что необходимо выдержать линейность сюжета, а иначе полная белеберда получится.
|
![]()
Сообщение
#2585
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
хм.. ну в принципе можно сделать следующее:
перевести все классы, кроме начального в позицию "престиж класс". (или что наверное более логично - сделать копии нужных классов в формате престижа, закрыв базовые классы). Так как в условия взятия престижа можно внести локалку (те определенная локалка имеет определенное значение), то установив ее в диалоге нужном, можно открыть нужный престиж класс. Я ясно выражаюсь? (IMG:style_emoticons/kolobok_light/smile.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 13:30 |