![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#11
|
|||
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
0Х0 - это размер предмета - пришлось создать в файле baseitems.2da новый предмет-контейнер В сингле использовать эту фишку я особого смысла не вижу, так в нем спокойно можно пользоваться стандартной базой данных
Это, конечно, баг движка, но именно он позволяет сделать предмет, который нельзя выделить и использовать (только надо предупредить игрока, чтобы он очистил от предметов 4 ячейки в левом нижнем углу 1 страницы инвентаря, т.к. хотя размер нулевой, но 4 ячейки все таки используются и исли на этом месте лежат какие-то предметы, то доступ к ним может пропасть). Смысл в том, что технически игрок носит свой сейф с собой (чем достигается высокая надежность хранения вещей), но доступ к сейфу имеет только через специальное устройство (в виде плэйсэйбла в здании банка), к которому привязаны скрипты взаимодействия с контейнером. Если на шарде есть выпадение вещей после смерти (но обычно делается так, что плотовые вещи не выпадают), то наличие сейфа, в котором ироки могут хранить ценные неиспользуемые предметы, является очень ценной функцией для них. Для сингла я бы рекомендовал использовать шкурку-контейнер, так как , по-моему , при восстановлении игры она не пропадает. Сообщение отредактировал Тобур - Jan 26 2005, 00:04 |
||
![]()
Сообщение
#12
|
|
Level 5 ![]() Класс: Обыватель Характер: Lawful Neutral Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Я знаю, что 0х0 это размеры вещи. Просто не знал, что движок такие размеры позволяет. Эту вещь нельзя выделить, можно только скриптово обратиться, так?
Я не хочу БД юзать. |
![]()
Сообщение
#13
|
|
Пингвиноид ![]() Класс: Обыватель Характер: True Neutral Раса: Человек ![]() |
По просьбе DBColl'a выкладываю свои умозаключения. Надеюсь, темой не обшибся...
К вопросу о букве "я" в тулсете Итак, есть проблема - при вводе буквы "я" в скриптах компилятор потом напрочь отказывается работать. Логически подумаем. Для начала несколько вводных: 1) Маленькая буква "я" имеет ASCII-код 255 (знающие уже догадались, остальным разжевываю) 2) Старые реализации сишной stdlib содержат функцию char fgetc(FILE *stream); 3) Есть глобальная переменная errno сишной библиотеки stdlib Проследим за компилятором. Считывая функцией fgetc очередной символ, он ожидает следующий символ или EOF при конце файла или ошибке. EOF принимает значение -1. Теперь возьмем букву "я", которая при выставленных всех битах имеет значение при signed char равным именно -1 (unsigned char(255) = signed char(-1)). То есть, получая из потока букву "я" компилятор считает, что достигнут конец файла или произошла какая-то ошибка. И ничтоже сумнявшися вываливается с сообщением об ошибке. При этом глобальная переменная errno остается равной 0 (нет ошибок, нет EOF). При написании компилятора разработчики проверяют только результат fgetc, не проверяя при этом errno. Отсюда и спотыкания компилятора. В новом тулсете и компиляторе такой проблемы уже не будет, потому что в современных реализациях stdlib fgetc возвращает уже тип int, а это четыре байта, а не один. Поэтому буква "я" будет распознаваться нормально. С причиной реакции компилятора на букву "я" разобрались. Как исправить? Дизасемблировать компилятор, вставить проверку errno, поменять заголовок исполняемого PE-файла. Заголовок нужно будет поменять, потому что проверка на errno займет, как минимум, дополнительно пару десятков байт. Поэтому в PE-заголовке нужно будет поменять размер сегмента кода. К сожалению я не знаю формат PE-заголовка (хоть он и берет начало от pure COFF формата, с которого начинался и линуксовый ELF-формат). Также я не знаю, как из ассемблера вызвать виндовый stdlib (достучаться к переменной errno в частности). Подытожим, что нужно для решения проблемы: 1) Дизассемблер (решаемо - ищется в Интернете) 2) Спецификация исполняемого PE-файла (решаемо - ищется в Интернете) 3) Вызов stdlib функций из ассемблера (с трудом, но решаемо - в Интернете или методом проб и ошибок) 4) Желание (не решаемо - мне по жизни лень. Профессия обязывает) Осталось найти на 4-й пункт пионера и проблема буквы "я" будет решена. P.S. Мечтательно так: вот был бы тулсет OpenSource... |
![]()
Сообщение
#14
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
почти все умозаключения далеки от реальности(кроме, пожалуй, дизассемблера) :drag:
но как катализатор пригодились... -> http://dumbo.nm.ru ps. на звание пионера не претендую, бо был я там - не понравилось... |
![]()
Сообщение
#15
|
|
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Есть путь полегче. "я" можно назвать, например, объект, и вставлять GetName(...). Так было сделано на Сиале, ещё до моего прихода, и это работает. Если же мучить экзешник, это прийдётся делать после каждого патча...
|
![]()
Сообщение
#16
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
этот "путь полегче" относится к, можно сказать, азам. и он не зависит от версии. да. но это же жутко неудобно! хотя, понятное дело, можно привыкнуть и пальцами ног писать скрипты... ;) насчет обновлений - не проблема: если это кому-нибудь будет нужно, забацаю универсальный патчер.
|
![]()
Сообщение
#17
|
|
Level 3 ![]() Класс: Обыватель Характер: Lawful Good Раса: Человек ![]() |
Хм. Я с этим столкнулся недавно. Вообще как-то русский в скриптах не применял, при любой возможности использую язык оригинала.
|
![]()
Сообщение
#18
|
|||||
Пингвиноид ![]() Класс: Обыватель Характер: True Neutral Раса: Человек ![]() |
На то они и умозаключения, чтобы быть ошибочными. Если не влом отписать - кратко, каковы реалии?
;) Без обид. Пионеры есть и сейчас. Но именно советским - и я был. В комсомол буквально на год не успел... :this: :D Сообщение отредактировал slavaz - Feb 21 2005, 10:58 |
||||
![]()
Сообщение
#19
|
|||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
НУЖНО!!! :good: |
||
![]()
Сообщение
#20
|
|||
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
slavaz если вкратце, то примерно так - вычитывается весь файл в буфер, потом идет разбор:
соотв-но, когда встречается "я" (0xff), FLAG становится -1 за счет signed типов (movsx FLAG, ch) - так что это скорее косяк биоповаров. ну а невозможность ввода русских букавок - это просто за счет проверки символов isgraph - вторая половина _ctype, как известно, пуста... так что либо заполнять _ctype значениями, скажем, _IS_PUN, либо заменить тельце isgraph на проверку char > 0x20. DBColl ок, как выкрою, так накатаю. только вот мне бы помогли старые версии nwtoolset.exe, clcompile(чем больше разных - тем лучше) - если есть у кого, было бы неплохо... ;) Сообщение отредактировал dumbo - Feb 21 2005, 13:28 |
||
![]()
Сообщение
#21
|
|||
Пингвиноид ![]() Класс: Обыватель Характер: True Neutral Раса: Человек ![]() |
2dumbo: МАМА родная моя! :shout: Действительно примерно такой алгоритм? Моего уважения к биоваревцам как кодерам убавилось, ей Богу...
Я, блин, как всегда, занадто глубоко укопался... не учел человеческий фактор... :swoon: По поводу ранних версий тулсета - думаю, DBColl поможет... :yes: В любом случае спасибо, вся общественность будет тебе благодарна. |
||
![]()
Сообщение
#22
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
dumbo
Скажи, а возможно еще все-таки сделать, чтобы в редакторе скриптов было возможно печатать по-русски? Сможешь ли ты такое провернуть? У меня есть тулсет СоУ 1.32. Дать? |
![]()
Сообщение
#23
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
DBColl
ты скачай и посмотри... я это сразу сделал... :drag: |
![]()
Сообщение
#24
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
dumbo э, что то я не понял! А мне ссылку? :rolleyes:
|
![]()
Сообщение
#25
|
|
Level 10 ![]() Класс: Волшебник Характер: Neutral Evil Раса: Человек ![]() |
Вот нахимичел в тулсете, и получилось я попробовал поставить вместо DestroyObject, DestroyEffect!
И усё получилось эффект удаляется. |
![]()
Сообщение
#26
|
|||||
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
Это что за новая функция такая??? :)
Ого! Я уже скачал, но еще не смотрел его просто... КУЛ! РЕСПЕКТИЩЕ! 3 года существования тулсета без русского языка и ответов новичкам, что НЕВОЗМОЖНО набирать русский текст в тулсете - копируйте через буфер, УШЛО В ПРОШЛОЕ! УРА, Товарищи! :good: :BRAVO: :BRAVO: |
||||
![]()
Сообщение
#27
|
|
Level 5 ![]() ![]() Класс: Рейнджер Характер: Neutral Good Раса: Человек ![]() |
[B]Прошу прошенья за флуд.
Это что, Думбо дизассемблировал nwtoolset.exe, исправил его и теперь можно русскиими буквами писать и "я" исползывать. Обалдеть! :D :good: :D //А вот я купил Си++ для чайников, сейчас вот изучаю, через сколько времени я также смогу? :lol: А чего биовары, этого сами не сделали?! У них ведь вообще все исходники есть? Кстати, можно мне тоже попрыбывать принести пользу? :) Может быть это и так все знают. Скрипты можно легко и не принужденно (почти) писать и компилировать без тулсета. (Тулсет большой, на слабых машинах долго грузится, в общем иногда этот может быть полезно). Для этого: 1. Качаем Адитор - текстовый редактор такой и устанавливаем его. (отсюда, например, но не уверен что у меня последняя версия) 2. Прописываем в autoxec.bat путь к папке utils в каталоге nwn. Что-то вроде SET PATH=с:\games\nwn\utils;%PATH% (Правильно написал? Вроде, усе работает? Кстати как в ХР/2К с autoxec'ом, все также? А то у меня 98-е.) Естественно, после этого нужно перезагрузить компьютер, чтобы настройки вступили в силу. 3. Запускаем адитор и идем в настройки: Edit -> Preferences На вкладке, File types -> Еxecute в поле File extension пишем: nss В поле Command line: clcompile &f Cтавим галочку Capture Output и нажимаем Add 4. На вкладке Interface -> Other убираем галочку Start in last visited directory. В противном случае скомпилированный файл будет появлятся в папке, где вы прошлый раз сохраняли файл (бага наверное). 5. По желанию и вкусу, настроить подсветку nss (файл подсветки нужно кинуть в папку с адитором) . Усе! Теперь можно открывать .nss-файлы aditor-ом и компилировать нажатием кнопочки Execute. Соббщения компилятуры пудут перехвачены и появятся в открывшемся снизу окошке самого aditor'a. Может похожую штуку и другие редакторы умеют делать. Но я знаю только про этот. Надеюсь это будет хотя-бы кому-нибудь полезно. Я вообще windows commander'ом пользуюсь и у меня nss в адиторе по F4 открываются. :) Добавлено в [mergetime]1109099859[/mergetime] Соббщения компилятуры пудут перехвачены мдя - это я видимо, обкурился, малость... :drag: Сообщение отредактировал Friedrich - Feb 22 2005, 22:15 |
![]()
Сообщение
#28
|
|
Level 9 ![]() Класс: Фея Характер: Chaotic Evil Раса: Тварь NWN: Скриптинг [PW] ![]() |
пользуясь случаем, поздравляю всех с праздником! :hunter:
как и обещал, забацал универсальный патчер Сообщение отредактировал dumbo - Feb 23 2005, 09:51 |
![]()
Сообщение
#29
|
|
4-х Кубовый ![]() Класс: Некромант Характер: Lawful Evil Раса: Человек NWN: Скриптинг [Sn] Проклятие Левора ![]() |
dumbo
РЕСПЕКТИЩЕ ТЕБЕ ОГРОМНЫЙ. Ты не смотри, что мало кто отреагировал. Просто еще никто нифига не понял вокруг, ЧТО произошло ;). Так что действительно готовься ловить респекты ;). :good: |
![]()
Сообщение
#30
|
|
Миловидный Бегрюссунг ![]() Класс: Воин Характер: Chaotic Good Раса: Человек NWN: Модмейкер Проклятие Левора Порядок Времени ![]() |
Хм, вот дела :) Де ж ты раньше был? РЕСПЕКТ. Однозначно. :yes:
|
![]()
Сообщение
#31
|
|
Level 6 ![]() Класс: Фея Характер: Chaotic Good Раса: Элементаль NWN: Маппинг Gem of the North ![]() |
ОФИГЕННО!!! :) ГДЕ ЖЕ ТЫ БЫЛ 2 ГОДА НАЗАД? РЕСПЕКТ!!! :good: :good: :good:
|
![]()
Сообщение
#32
|
|||||
![]() Класс: Обыватель Характер: Chaotic Good Раса: Человек NWN: Скриптинг [Sn] ![]() |
dumbo, блин. Да за это не только памятник надо ставить! Молодец! :good: Спасибо за сделанное. :yes: И огроменный РЕСПЕКТ!!! Отдельное спасибо slavaz`у за то, что натолкнул МОЗГ на эту мысль.
Действительно, народ революцию пропустил. И я вместе с ними. Я рад, что нахожусь на форуме с такими людьми. |
||||
![]()
Сообщение
#33
|
|||
Level 10 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Контент ![]() |
dumbo: Вот это да! Это и есть ВКЛАД в развитие! (Респект +1) :D
Да уж... Чертыре поста да еще и в "фишках про скрипты"... Народ же всю революцию пропустил! Срочно ссылку во все места! З.Ы. Надеюсь, биоповара не сильно обидятся... Вообще-то дизассемблировать программные продукты не OpenSource (или любой GNU) низя (а OpenSource не нужно)... |
||
![]()
Сообщение
#34
|
|
Level 2 ![]() Класс: Монах Характер: Lawful Good Раса: Человек NWN: Скриптинг [PW] ![]() |
Круто! Правда у меня сомнения по поводу возможных багов и использования модов в следующих версиях тулсета, но сделана действительно нужная вещь
|
![]()
Сообщение
#35
|
|
Level 8 ![]() ![]() ![]() Класс: Маг Характер: Lawful Good Раса: Полуэльф ![]() |
DBColl ХМ, а у меня 1.32... На вашем 1.64 пойдут мои модули?
dumbo Молодец!! Скачал я патч... Попробую... Это ж действительно переворот! Никаких тебе больше ненужных точек с тегами "YA" и проч...!!! :BRAVO: :BRAVO: :yahoo: |
![]() ![]() |
Текстовая версия | Сейчас: 7th July 2025 - 11:54 |