![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1711
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Zirrex, дело может быть не в получении, а в потере вещей. Во многих системах есть такая вещь: при выходе персонажа с него снимаются все вещи с "Plot" флагом и отадются другому первому попавшемуся игроку. Это сделано для того, чтобы важные вещи не терялись, а оставались на сервере, и в сюжет не застопорился бы из-за их исчезновения. Симптомы похожи.
|
![]()
Сообщение
#1712
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
azathoth, вещи не Plot. Я вообще на сервере этот флажок не использую. С ним есть некоторые проблемы. Потом, вещи исчезают не в момент выхода, а в момент входа, причем перед этим должен произойти рестарт. dumbo правильно привел описание эвента, все вещи заново выдаются персонажу, когда он входит после рестарта на шард. Очень похоже, что в момент входа нескольких игроков, определенные вещи, какие именно, я знаю, теряют своих хозяев, и выдаются случайным образом. Если в новой версии не проявится подобный "глюк", значит удалось найти причину.
|
![]() ![]()
Сообщение
#1713
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Как обмануть функцию Random? Существует цикл, в который встроен переключатель (switch). В зависимости от настроек с уровнем, изменяется число от 1 до 5. Чем выше уровень персонажа, тем больше число. Чем выше число, тем больше case используется в переключателе. Т.е., если уровень ниже 7, то case всего 4. Цикл прокручивается 1 раз, а если уровень выше 7 уровня, то case 8, и цикл прокручивается 2 раза. Функция Random встроена в цикл, а значит, значение каждый раз новое. Но есть большой шанс, что цифра повторится. Когда цикл прокручивается 2 раза, изменить вторую цифру, если она совпадет с первой, легко, но когда таких чисел становится больше 2, то тут уже сложнее.
Для примера, берем Random(4)+1, и прокручиваем цикл 4 раза. Каждый раз должно получиться другое число, и числа не должны повториться. Но как этого добиться? |
![]()
Сообщение
#1714
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
QUOTE(Zirrex @ Jul 27 2006, 23:57) [snapback]88468[/snapback] берем Random(4)+1, и прокручиваем цикл 4 раза. Каждый раз должно получиться другое число, и числа не должны повториться это уже не случайное число. делай массив и на каждом проходе клади туда число. потом сверяй. |
![]()
Сообщение
#1715
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Вот, что говорит Яндекс.
http://www.yandex.ru/yandpage?&q=13740...%25D3%25D4%25C9 Но отсутствие массивов в NWN сильно мешает это реализовать. В конце концов, можно сделать псевдомассив, расположить там числа и перемешать. |
![]()
Сообщение
#1716
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
По вещам. Если скрипт стоит на OnAcquire, то цикл там лишний, ибо тогда скрипт пробегает по итему Н раз при Н итемах. Если на входе в мод/локу, то попробуй перенести его на триггер, который нельзя обойти. Как-то пробовал давно - некоторые функции в OnEnter локи или мода не работали помнится. Это я к тому, что у нас тоже стоит удаление вещей на входе, на триггере (в основном это ключи), но проблем никогда не было.
По рандому. Варианта 2. - попроще. Написать свой рандом (на базе нвновского) на сишный аналог. Т.е. берем Random() от большого уникального семени - время в секундах, другие рандомы и т.п., можно кучу разных результатов складывать, умножать на коэффициент, не важно, важно получить уникальное число побольше (скажем десятки тысяч), потом делим вывод рандома на нужный нам дайс с остатком. Что-то типа Random(nSeed) % 6 (получим число 0-5), дальше думаю все понятно. Конечно тоже не идеал, но совпадений становится меньше, проверно. - посложней. Записывать все выпадающие варианты. Скажем на локалку на вэйпоинте. В качестве строки. Если чисел до 10 (0-9), то все просто - просто пишем подряд в строку, и пока FindSubstring() выдает что-то отличное от -1 гоняем рандом в цикле. Если числа по 2+ цифр, то ставим между ними к примеру банальный прочерк при записи. Вроде так (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#1717
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
НВН ский рандом очень привязан к локациям и прочему. В итоге на малой локе рандом будет одни и тем же числом почти всегда. Я с этим столкнулся при случайных боях. У меян было 7 локаций примерно одного размера. В итоге почти неделю я искал ошибку в скрипте, всегда выдавало одно число. Скажем почти всегда. Из 10 раз 9 выпадало одно. Так что с рандомом поосторожней.
|
![]()
Сообщение
#1718
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Я сделал проще, у меня 20 case строк. В зависимости от требуемого числа (1-5) к стартову числу Random(4)+1 стал прибавлять 5, 9, 13, 17. В итоге у меня получилось, что когда цикл прокручивается 2 раза, число сначала берется в промежутке от 1 до 4, далее от 5 до 8, и т.д. Т.е., даже если цикл прокручивается 5 раз, числа никогда не повторятся.
denis0k, никаких эвентов, отдельный скрипт, который будет срабатывать только в момент смерти существа. А что касается предложения, то тут то все просто. Чтобы получилось уникальное число, можно написать такую строчку: Random(20) + (Random(20) / 20.00). Про запись уже думал. Только это лишняя проверка, и она заставит цикл прокручиваться лишний раз. А если не выпадет иное число очень долго, то цикл подвесит игру (IMG:style_emoticons/kolobok_light/smile.gif) |
![]()
Сообщение
#1719
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Столкнулся с такой ситуацией, когда невозможно рестартовать модуль. Доступа к серверу нету, скрипта для рестарта тоже нету. И что же? Такой возможности нет даже среди консольных команд. Спрашивается, а почему за время существования игры туда их не внесли? Есть ли вообще возможность рестарта с помощью консоли?
|
![]()
Сообщение
#1720
|
|
Level 12 ![]() Класс: Оборотень Характер: Chaotic Neutral Раса: Нежить NWN: Скриптинг [Sn] ![]() |
Для генерации двух несовпадающих чисел из N можно использовать такую хормулу:
NSS int var1 = Random(N); int var2 = (1 + var1 + Random(N - 1)) % N; Конечно, взятие остатка покруче, чем сравнение, зато все вычисляется за один проход, без потенциальной возможности зависнуть (IMG:style_emoticons/kolobok_light/biggrin.gif) Можно вывести хормулу и для большего количества чисел, но, к примеру, на моем компьютере выбор 3х уникальных вариантов из 5 происходил мгновенно, когда это когда-то делал. --- NSS void StartNewModule(string sModuleName) С именем того же модуля должен перезапускать его, во всяком случае в сингле работает. Сообщение отредактировал azathoth - Aug 1 2006, 16:21 |
![]()
Сообщение
#1721
|
|
Level 19 ![]() Класс: Воин Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] Gem of the North Край Лесов ![]() |
1. Рестарт из игры возможен только способом, написанным выше. Например, с дмской палки (но ее на данный момент конечно же нет, иначе проблемы бы не было).
2. Положить серв грубо, нвнх его должен поднять. Народных умельцев полно. |
![]()
Сообщение
#1722
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
У меня такой вопрос. В диологе NPS должен сказать определённую фразу несколько раз. Как сделать что бы не писать её ещё раз, то есть как обратиться к уже написаной фразе в разных местах.
|
![]()
Сообщение
#1723
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
Читай туториал Айвана. Там всё написано.
|
![]()
Сообщение
#1724
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
Спасибо разобрался, а как сделать, что бы после смерти NPS в журнале появлялась запись.
|
![]()
Сообщение
#1725
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
Переделай ЭТОТ скрипт под свои нужды, то есть:
NSS GiveXPToCreature(oKiller, 500); Замени на: NSS AddJournalQuestEntry("Таг_квеста", Номер_задания, oKiller); З.Ы: ЛУЧШАЯ_В_МИРЕ_КНОПКА |
![]()
Сообщение
#1726
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
Огромное спасибо! (IMG:style_emoticons/kolobok_light/thank_you.gif)
|
![]()
Сообщение
#1727
|
|
Level 5 ![]() ![]() Класс: Убийца Характер: Chaotic Neutral Раса: Полуэльф ![]() |
Привет!У меня вопрос,что нового в версии 1.66 чем она лучше предыдущих?Кто знает напишите.
|
![]()
Сообщение
#1728
|
|
Level 17 ![]() Класс: Волшебник Характер: Neutral Good Раса: Человек NWN: Скриптинг [PW] Axistown SR 1.9 NWNX ![]() |
QUOTE(Noah @ Aug 9 2006, 12:17) [snapback]89299[/snapback] Привет!У меня вопрос,что нового в версии 1.66 чем она лучше предыдущих?Кто знает напишите. Кстати, последний патч - 1.67. |
![]()
Сообщение
#1729
|
|
Mystery ![]() Класс: Маг Характер: Lawful Evil Раса: Тварь NWN: Контент Амен ![]() |
QUOTE(virusman @ Aug 9 2006, 12:20) [snapback]89300[/snapback] Кстати, последний патч - 1.67. Скоро уже 1.68 будет |
![]()
Сообщение
#1730
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Неужели мы наконец-то увидим в игре официальных лошадок? (IMG:style_emoticons/kolobok_light/smile.gif) Именно в этом патче обещали их, да и многие другие вкусности. Странно, когда известили, что поддерживать НВН больше не будут, и мы не увидим патча 1.68, пропала всякая надежда на дальнейшие косметические улучшения игры.
|
![]()
Сообщение
#1731
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
При помощи како функции можно определить тег только что купленного предмета?
Сообщение отредактировал Milfes - Aug 9 2006, 16:40 |
![]()
Сообщение
#1732
|
|
Level 4 ![]() ![]() Класс: Некромант Характер: Chaotic Evil Раса: Нежить ![]() |
В смысле только что купленного ????
NSS string GetTag(object oObject); QUOTE Description: Returns the tag of oObject. Returns an empty string if oObject is not a valid object. PC's do return a valid value - an empty string! This is because they have no string defined as thier tag (Even GetObjectByTag("") may return a PC object). |
![]()
Сообщение
#1733
|
|
Level 5 ![]() ![]() Класс: Друид Характер: Lawful Neutral Раса: Человек ![]() |
QUOTE В смысле только что купленного ???? Последний купленый в магазине обьект. Я правда не уверен, что это возможно. |
![]()
Сообщение
#1734
|
|
Level 9 ![]() Класс: Друид Характер: True Neutral Раса: Эльф NWN: Скриптинг [PW] Амен ![]() |
Milfes, не совсем тебя понятно, если честно. Тэги у вещей такие, какие ты назначил вещам в палитре, когда их делал. Узнать же тэг можно с помощью вышеописанной функции. Тебе надо сделать какую-нибудь вещь с возможностью использования уникальной силы на любой объект, и после использования этой вещи, запускать скрипт, с помощью которого узнавать тэг объекта, на который был наведен предмет.
|
![]()
Сообщение
#1735
|
|
![]() Класс: Пьяный Мастер Характер: Lawful Good Раса: Тварь MySQL, PHP, JavaScript Порядок Времени ![]() |
QUOTE(Milfes @ Aug 9 2006, 18:33) [snapback]89313[/snapback] Последний купленый в магазине обьект. Я правда не уверен, что это возможно. Почему же (IMG:style_emoticons/kolobok_light/wink3.gif) возможно. Правда вариант нетривиален (IMG:style_emoticons/kolobok_light/spiteful.gif) Объект торговца, скрипт onOpenStore ставим флаг, указывающий на то, что идет торговля скрипт onStoreClose снимаем этот флаг модуль onAcquireItem - проверяем флаг торговли, если true определяем тег предмета (функция указана выше (IMG:style_emoticons/kolobok_light/wink3.gif) ) и запоминаем в локалку, на тот же модуль к примеру. имхо. ну или это, onOpenStore - запоминаем весь инвентарь, onStoreClose - сравниваем текущий с запомненным (IMG:style_emoticons/kolobok_light/rofl.gif) |
![]() ![]() |
Текстовая версия | Сейчас: 16th July 2025 - 20:58 |