![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2551
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Люди. Как сделать так чтобы каждая раса начинала в разном городе. Типа челове в Человеческом городе. Эльф в эльфийском. и.т.д.
|
![]()
Сообщение
#2552
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
Написать простой скрипт, который проверяет расу игрока и кидает того в нужное место:
NSS // Под точкой старта, создаем триггер и на onEnter, вешаем код: void main() { string sRace; object oEnter = GetEnteringObject(); int nRace =GetRacialType(oEnter); int nInt = GetLocalInt(oEnter, "nEnterPlayer"); if (nInt == 1) return; if (GetIsPC(oEnter) == FALSE) return; SetLocalInt(oEnter, "nEnterPlayer", 1); switch (nRace) { case RACIAL_TYPE_DWARF: sRace = "DWARF"; break; case RACIAL_TYPE_GNOME: sRace = "GNOME"; break; case RACIAL_TYPE_HALFELF: sRace = "HALFELF"; break; case RACIAL_TYPE_HALFLING: sRace = "HALFLING"; break; case RACIAL_TYPE_HALFORC: sRace = "HALFORC"; break; case RACIAL_TYPE_HUMAN: sRace = "HUMAN"; break; case RACIAL_TYPE_ELF: sRace = "ELF"; break; } AssignCommand(oEnter, ClearAllActions()); AssignCommand(oEnter, ActionJumpToObject(GetWaypointByTag("WP_"+sRace+""))); } Теперь о его настройке. Для каждой рассы необходимо создать вайпоинт c тэгом: WP_+НАЗВАНИЕ_РАССЫ и разместить в нужном месте. Т.е скажем для людей это будет: WP_HUMAN, который соответственно будет находится в людском городе. Сообщение отредактировал Dik Morris - Sep 22 2006, 09:46 |
![]() ![]()
Сообщение
#2553
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Если честно, то я не въехал. (IMG:style_emoticons/kolobok_light/nea.gif)
Я имею ввиду. Что при создании нового перса он сразу начинается в определённом городе. Если ты написал то что мне надо. То я попробовал чот неправильно. Я давно не создавал все позабывал. Поэтому не ругай меня за мою тупость. |
![]()
Сообщение
#2554
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Кстати, какую-нить расу можно в скрипте не указывать. Тогда ее представитель появется в точке старта. Не поставить ее не получится, так что че ей просто так стоять? (IMG:style_emoticons/kolobok_light/smile.gif)
|
![]()
Сообщение
#2555
|
|
Вечно меняющийся ![]() Класс: Монах Характер: True Neutral Раса: Человек NWN: Скриптинг [Sn] ![]() |
-fenix-, логично. (IMG:style_emoticons/kolobok_light/smile.gif)
DarkDeivel, QUOTE Что при создании нового перса он сразу начинается в определённом городе именно это и написал. (IMG:style_emoticons/kolobok_light/smile.gif) PS: в скрипте была небольшая ошибка, но я исправил. Читай пост еще раз. И описание. (IMG:style_emoticons/kolobok_light/wink3.gif) |
![]()
Сообщение
#2556
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
ВОт код я повешал. Ты писал
Теперь о его настройке. Для каждой рассы необходимо создать вайпоинт c тэгом: WP_+НАЗВАНИЕ_РАССЫ и разместить в нужном месте. Т.е скажем для людей это будет: WP_HUMAN, который соответственно будет находится в людском городе. А вот WP_HUMAN куданить в скрипте записывать надО?? (IMG:style_emoticons/kolobok_light/biggrin.gif) |
![]()
Сообщение
#2557
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
не в скрипте.
- берешь ЛЮБОЙ вэйпоинт из палитры - ставишь его туда, где будут люди появляться - даешь ему тэг WP_HUMAN дальше по аналогии с другими рассами. что не ясно то? |
![]() ![]()
Сообщение
#2558
|
|
Level 3 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
QUOTE(Lex @ Sep 22 2006, 09:59) [snapback]92436[/snapback] не в скрипте. - берешь ЛЮБОЙ вэйпоинт из палитры - ставишь его туда, где будут люди появляться - даешь ему тэг WP_HUMAN дальше по аналогии с другими рассами. что не ясно то? Всё ясно. Все работает. (IMG:style_emoticons/kolobok_light/declare.gif) |
![]()
Сообщение
#2559
|
|
Level 2 ![]() Класс: Паладин Характер: Lawful Good Раса: Человек ![]() |
Пара вопросов по скриптам.
Есть скрипт, который сажает непися на стул (то что запостил в первый раз это был полный бред...) NSS void main() { ActionSit (GetNearestObjectByTag("SIT_STOOL", OBJECT_SELF)); } Но при разговоре с игроком непись ясное дело встаёт. Сам вопрос: как надо поменять скрипт, чтобы после завершения диалога непись опять садился? И ещё вопрос: Что надо поставит на триггер, чтобы когда на него наступит игрок к нему подбегал непись и начинал диалог, но этого бы не происходило пока переменная "Перем" скажем не равна 1? Сообщение отредактировал Diamond - Sep 23 2006, 15:01 |
![]()
Сообщение
#2560
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
NSS if (IsInConversation(OBJECT_SELF)) return; // если разговариваем - выход if (GetIsInCombat(OBJECT_SELF)) return; // если в бою - выход // в остальных случаях садимся ActionSit (GetNearestObjectByTag("SIT_STOOL", OBJECT_SELF)); Этот блок поставить в ХБ скрипт или в ЮД, в ту часть, которая отвечает за ХБ. скрипт для триггера и диалога НПС писали уже раз 100. поищи. |
![]()
Сообщение
#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 |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 15:54 |