![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#2111
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
Elf-Drow, ты баг описываешь, предполагаешь или вопрос какой есть по реалезации?
Если первые два, то это не сюда. Сообщение отредактировал -fenix- - Mar 31 2006, 13:05 |
![]()
Сообщение
#2112
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
В скриптинге карты в принципе нет ничего сложного. (текущая версия карты для ПВ это небольшая библиотечка в ~800 строк, там ~50 функций описано).
А вот моделинг самой карты, плейсов для нее и всякие вспомогательные штуки, это скриптами не сделать. QUOTE(Elf-Drow @ Mar 31 2006, 11:10) [snapback]75488[/snapback] Знаешь, Айван, вроде вы в Проклятии сделали так, чтобы Геркан был с героем одной расы, то есть ты гном он гном, ты эльф он эльф. Но это не работает! Я играю за эльфа, но Геркан у меня гном! баг.. хотя странны. А делается просто - в палитре Герканы всех расс, при старте модуля создаем нужного, согласно расе игрока. Хоть полуорка (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#2113
|
|
Level 1 Класс: Волшебник Характер: Chaotic Neutral Раса: Полуэльф ![]() |
2[MoF]Darth_Nick: спасибо.
У меня еще один вопрос: как сделать, чтобы npc (хенч) уходил назад в свою область (дом) для будущего использования, как только он становится ненужным. Никак не сделать, чтобы нпс бежал на вейпоинт, находящийся в другой области? Может можно его туда телепортировать? |
![]()
Сообщение
#2114
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
QUOTE(Lanilor @ Mar 31 2006, 19:17) [snapback]75560[/snapback] Никак не сделать, чтобы нпс бежал на вейпоинт, находящийся в другой области? Может можно его туда телепортировать? Делай темный экран на пару секунд и телепортируй. С бегатней меж локами гемороя много всякого. отследить событие отсоединения можно в библиотеке x0_inc_henai. Строка 866. там ниже вставь, что если хенч с тэгом таким-то, то джампается туда-то. Не забудь билдануть скрипты потом, особено onConversation для хенчей. |
![]()
Сообщение
#2115
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Эльф ![]() |
Нафик мне факелы? :-) Мне надо спалить кучу обьектов..
в скрипте.. то как я это вижу.. берем обьект и получаем с него координаты уничтожаем обьект присваиваем следующий обьект (предыдущий не может быть так как он уничтожился строкой выше) создаем на месте обьекта костерчик и по новой.. а работает хз как а тупой перебор тагов (если их разными сделать) я тоже как бы сам соображу.. суть не в скрипте а в причине его не работоспособности.. вникнуть может ктонить? просто интересно. |
![]()
Сообщение
#2116
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
работает хз как, потому что написан хз как.
oFire = GetNearestObjectByTag("PLC_DRM_F01", GetNearestObjectByTag("PLC_DRM_FR", OBJECT_SELF)); это тебе все время одно и тоже давать будет: ближайший к твоей конструкции (Так как удаление не происходит мгновенно. Создание тоже не мгновенное.). NSS void main() { object oFire = GetObjectByTag("PLC_DRM_F00"); location lLoc = GetLocation(oFire); if (GetLocalInt(OBJECT_SELF, "Counter") == 1) return; SetLocalInt(OBJECT_SELF, "Counter", 2); DestroyObject(oFire); // центр, относительно которого берем ближайший объект на удаление object oCenter = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lLoc, FALSE, "PLC_DRM_FR"); // берем следующую кучу дров oFire = GetNearestObjectByTag("PLC_DRM_F01", oCenter); // пока есть дрова в локации.. тут бы лучше добавить проверки дистанции. while (GetIsObjectValid(oFire)) { lLoc = GetLocation(oFire); DestroyObject(oFire, 0.0f); // новый центр поиска - костерок на месте дров oCenter = CreateObject(OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lLoc, FALSE, "PLC_DRM_FR"); // следующие дрова oFire = GetNearestObjectByTag("PLC_DRM_F01", oCenter); } } Так примерно, не тестировал.. QUOTE(JCDenton @ Mar 31 2006, 19:52) [snapback]75570[/snapback] а тупой перебор тагов (если их разными сделать) я тоже как бы сам соображу.. не заметно как-то, что сообразишь. тут самый, что ни наесть, тупой перебор. |
![]()
Сообщение
#2117
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Эльф ![]() |
Ну Куда нам нубам до мудрого Лекса... (IMG:style_emoticons/kolobok_light/smile.gif) ))
Твой скрипт вешает невервинтер к чертям.. т.к. получается бесконечный цикл. Почему он там получается? потому что скрипт написан ХЗ как =) Сеня первое апреля но я тя не прикалываю.. проверь сам =) Кстати потому я и ввел второе условие в цикл.. чтобы не atl-ctrl-delete =) |
![]()
Сообщение
#2118
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
ну раз не получилось так (все из-за того же, создание и удаление + взятие одних и тех же по несколько раз)
делаем простейшую рекурсию lx_fire_start NSS void main() { if (GetLocalInt(OBJECT_SELF, "Counter") == 1) return; SetLocalInt(OBJECT_SELF, "Counter", 2); object oFire = GetObjectByTag("PLC_DRM_F00"); location lLoc = GetLocation(oFire); CreateObject(OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lLoc, FALSE, "PLC_DRM_FR"); ExecuteScript("lx_fire_main",oFire); DestroyObject(oFire,0.5); } lx_fire_main NSS void main() { SetLocalInt(OBJECT_SELF,"USED",TRUE); location lLoc = GetLocation(OBJECT_SELF); int i = 1; CreateObject(OBJECT_TYPE_PLACEABLE, "plc_flamelarge", lLoc, FALSE, "PLC_DRM_FR"); object oFire = GetNearestObjectByTag("PLC_DRM_F01", OBJECT_SELF,i); while (GetLocalInt(oFire,"USED")) { i++; oFire = GetNearestObjectByTag("PLC_DRM_F01", OBJECT_SELF,i); } if (GetIsObjectValid(oFire)) DelayCommand(0.4,ExecuteScript("lx_fire_main",oFire)); DestroyObject(OBJECT_SELF, 0.5f); } -- вместо того, чтоб панику поднимать, товарищ нуб, лучше бы подумали маленько (IMG:style_emoticons/kolobok_light/smile.gif) А не списывали начисто у мудрого Лекса. |
![]()
Сообщение
#2119
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Эльф ![]() |
Во, терь Лекс молодец, терь работает (IMG:style_emoticons/kolobok_light/yahoo.gif)
Вопросы(IMG:style_emoticons/kolobok_light/smile.gif) 1) Что такое рекурсия? ссылка на другой скрипт? 2) тот скрипт не работал изза того что "удаление/создание" проходят медленее чем остальная часть скрипта? 3) object GetNearestObjectByTag(string sTag, object oTarget=OBJECT_SELF, int nNth=1) что обозначает "int nNth"? как я понял из твоего скрипта.. Берется ближайший, потом 2-й ближайший.. 3-й и т.п. Так? |
![]()
Сообщение
#2120
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
1. рекурсия это в общем когда функция вызывает саму себя. В данном случае скрипт вызывает сам себя до определенного момента.
2. скорее всего. если там расставить задержки, которые бы потихоньку росли, поменять систему поиска следующего элемента, то мб все было бы ок. 3. это номер ближайшего объекта. по умолчанию 1, те ближайший. А можно брать второй, третий и Хый по удаленности. это все описано в лексиконе. |
![]()
Сообщение
#2121
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
изначально скрипт не работал именно из-за того, что не был указан третий параметр в функции GetNearestObjectByTag. так как фактическое удаление объекта происходит после окончания работы скрипта, то циклилось все на первом объекте. рекурсии-фигурсии... (IMG:style_emoticons/kolobok_light/crazy.gif)
|
![]()
Сообщение
#2122
|
|
Level 3 ![]() Класс: Тайный Лучник Характер: Chaotic Good Раса: Эльф ![]() |
Значит в принципе операции удаления происходят после выполнения Большей части скрипта?
Короче не юзать удаление обьектов в циклах, если с них таким методом снимаем координаты.. (IMG:style_emoticons/kolobok_light/biggrin.gif) Насчет карты в Проклятии.. Щелкаешь правой на тсурлаголе, выбераешь "рубануть". Слышешь вопли ПС "My weapon is not effect.." Ржешь.. Делаешь Alt-Ctrl-Delete. Закрываешь нвн. Заходшь аново и загружаешься с последней савы.. я такое сделал в момент прохождения половины первого мода.. а сохраняться я люблю только перед тем как вырубить камп.. :-) Но тем не менее карта это прикол, надо только сделать, чтобы в случае закрытия диалога - он появлялся снова. |
![]()
Сообщение
#2123
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
У меня, такой вопрос.
Можно ли восстановить хиты игроку кроме как регенерациями и EffectHeal? В общем, есть что-то, что не пишет в панель сообщений, кто и скока хитов восстановил? |
![]()
Сообщение
#2124
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
ForceRest()
EffectDamage (IMG:style_emoticons/kolobok_light/crazy.gif) можно временные хиты добавлять еще.. |
![]()
Сообщение
#2125
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
QUOTE(2_advanced @ Apr 3 2006, 20:18) [snapback]76072[/snapback] ForceRest() EffectDamage Иными словами - НЕТ! А жаль. |
![]()
Сообщение
#2126
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
-fenix-, как ты себе это представляешь? Игра основана на спасбросках и т.п. вещах, и поэтому все действия, которые осуществляются с персонажем, отображаются в логах. Не совсем понимаю, зачем тебе это нужно?
|
![]()
Сообщение
#2127
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
QUOTE(-fenix- @ Apr 3 2006, 18:22) [snapback]76076[/snapback] Иными словами - НЕТ! А жаль. QUOTE можно временные хиты добавлять еще..
|
![]()
Сообщение
#2128
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
Подмогите со скриптом, чтобы в модуль можно было играть к примеру только мужским полом...
|
![]()
Сообщение
#2129
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
|
![]()
Сообщение
#2130
|
|
Level 8 ![]() ![]() ![]() Класс: Теневой Танцор Характер: True Neutral Раса: Эльф ![]() |
Благодарствую...
Но также, знаете, не получилось заставить непися, к примеру подбегать к двери и бежать в другую локацию или просто исчезать, помогитеее... |
![]()
Сообщение
#2131
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Слушай, это есть в разделе новичков. Давай ка ты читай что есть. Нечего спрашивать что спрашивали сто раз.
|
![]()
Сообщение
#2132
|
|
Level 8 ![]() ![]() ![]() Класс: Тайный Лучник Характер: Lawful Good Раса: Эльф ![]() |
Привет,
Возникла идея, или лутше назвать "потребность", что бы когда ПС садился то у него с рук снимались перчатки (IMG:style_emoticons/kolobok_light/smile.gif) , с головы шлем, убирался меч и щит. А когда он вставал, ето под красивую анимацию надевалось все обратно. ПС: Может я и написал бы, но я не сталкивался с тем, как снимать или надевать что-то... |
![]()
Сообщение
#2133
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
NSS // Unequip oItem from whatever slot it is currently in. void ActionUnequipItem(object oItem) NSS // Equip oItem into nInventorySlot. // - nInventorySlot: INVENTORY_SLOT_* // * No return value, but if an error occurs the log file will contain // "ActionEquipItem failed." // // Note: // If the creature already has an item equipped in the slot specified, it will be // unequipped automatically by the call to ActionEquipItem. // // In order for ActionEquipItem to succeed the creature must be able to equip the // item oItem normally. This means that: // 1) The item is in the creature's inventory. // 2) The item must already be identified (if magical). // 3) The creature has the level required to equip the item (if magical and ILR is on). // 4) The creature possesses the required feats to equip the item (such as weapon proficiencies). void ActionEquipItem(object oItem, int nInventorySlot) NSS // Get the object which is in oCreature's specified inventory slot // - nInventorySlot: INVENTORY_SLOT_* // - oCreature // * Returns OBJECT_INVALID if oCreature is not a valid creature or there is no // item in nInventorySlot. object GetItemInSlot(int nInventorySlot, object oCreature=OBJECT_SELF) В скрипте, сажающим на стул добавь действия снятия вещей до того, как усаживать персонажа. Снятые вещи запомни в локальных переменных и пусти цикл, проверяющий, допустим, каждые 3 сек. сидит ли еще персонаж на стуле или нет. |
![]()
Сообщение
#2134
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Проверять через цикл не самая лучшая идея. Гонять циклы для всех сидящих персонажей, причем постоянно, только лишняя нагрузка на процессор. Лучше рядом посадить невидимое существо, которое будет слушать команды игрока или же составить список команд, которые можно будет запускать с быстрой панели. Например, решил он выполнить команду, сесть на стул, нажимаем на определенное действие в быстрой панели, решил встать, нажимаем другое действие. А там и соответствующие действия по раздеванию (IMG:style_emoticons/kolobok_light/smile.gif)
Кстати, интересная идея, надо поэкспериментировать. Есть что-то подобное у скриптов DMFI, но там вроде бы все команды видны в чате. |
![]()
Сообщение
#2135
|
|
Level 9 ![]() Класс: Вор Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] ![]() |
хертбиты у мобов на АИ работают и нормально..
процессор спалили пока только один (IMG:style_emoticons/kolobok_light/crazy.gif) ни какая микро проверялка с АИ не сравнится (IMG:style_emoticons/kolobok_light/offtopic.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 29th April 2025 - 18:00 |