Город Мастеров
IPB

Здравствуйте, гость ( Вход | Регистрация )

 Правила этого форума ПРАВИЛА РАЗДЕЛА
> Всякого рода фишки, (касающиеся скриптов) постить сюда
Tarre Talliorne
сообщение Aug 11 2004, 19:36
Сообщение #1


Level 8
***

Класс: Псионик
Характер: Chaotic Good
Раса: Человек
NWN: Скриптинг [Sn]



Тема создана главнм образом для новичков, но и более опытным товарищая почитать тоже не помешает. Итак. Минимум флейма. Максимум инфы. Начну я (кто бы сомневался :-) )

1. LevelUpHenchman(). С помощью этой функции можно... повысить уровень ПС (применив ее к ПС, конечно) без распределения этим самым ПС всех плюшек. Действие фишки можно наблюдать в первой главе ХотУ. Когда в начальном диалоге (при заходе чаром малых уровней) выозникает выбор: повысить уровень самому или автомастически. Этот самый автоматический вариант и реализован с помощью LevelUpHenchman.

2. Тонкость конструкции if (condition) { . . . }.
Neverwinter Script Source
if (1) { return TRUE; }

вернет TRUE. Никогда не задумывались почему? Дело в том, что при "заявлении" условие автоматически приравнивается(==) к TRUE. TRUE в свою очередь численно равно 1 (FALSE = 0, в этом в можете убедиться, открыв nwscript.nss). Поэтому наше форма и возвращает 1. Посему
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt")==1)

можно с легкостью заменить на
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt"))


Не использовать в данном виде! См. пост _kaa_ и мой ответ.

3. Известно почти всем, но все же.
Neverwinter Script Source
int n1 = 1;
int n2 = 2;
int n3 = 3;
int n4 = 4;

то же, что и
Neverwinter Script Source
int n1 = 1, n2 = 2, n3 = 3, n4 = 4;

Аналогично и с float, string, effect и другими типами данных.

4. Упрощенная модель if {} else {}
Допустим,
Neverwinter Script Source
if (nA > 5)
{
nB = TRUE;
}
else
{
nB = FALSE;
}

то же, что

Neverwinter Script Source
nB = (nA > 5) ? TRUE : FALSE;


т.е. все, что до '?' - условие, все, что после вопроса до двоеточия - присвоение в случае истинности утвержения в скобках, после двоеточия - в случае ложности.

Продолжение следует. Если у вас есть то, чем можно поделиться и что заслуживает всеобщего внимания , прошу.
Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения
 
Открыть новую тему
Ответов
slavaz
сообщение Feb 20 2005, 13:18
Сообщение #2


Пингвиноид
Иконки Групп

Класс: Обыватель
Характер: 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...

Вернуться в начало страницы
Скопировать ник в поле быстрого ответа
+Ответить с цитированием данного сообщения

Сообщений в этой теме
- Tarre Talliorne   Всякого рода фишки   Aug 11 2004, 19:36
- - _kaa_   Цитата(Tarre Talliorne @ Aug 11 2004, 19:36) ...   Aug 11 2004, 21:45
- - Tarre Talliorne   Destinguo, _kaa_, destinguo! Сеньк :-) 5.Д...   Aug 11 2004, 22:09
- - Shad   Вот ещё пара идентичных функций для работы с эффек...   Nov 4 2004, 09:20
- - Lemegeton   Простейшая вещь, но может, кому пригодится? Когда...   Nov 22 2004, 20:14
- - Tarre Talliorne   По-моему это лишнее: новые скрипты жрут размер мод...   Dec 31 2004, 17:36
- - DBColl   Tarre Talliorne Если есть ХОРОШАЯ система именов...   Jan 2 2005, 00:02
- - Tarre Talliorne   6.Вот как-то вот так... Помнится, с годик назад ст...   Jan 15 2005, 20:34
- - Тобур   QUOTE (Lemegeton @ Nov 22 2004, 20:14) что позволя...   Jan 25 2005, 21:37
- - Lex   так...не понял про - 0x0. Это как? (не в смысле ч...   Jan 25 2005, 21:44
- - Тобур   0Х0 - это размер предмета - пришлось создать в фай...   Jan 25 2005, 21:53
- - Lex   Я знаю, что 0х0 это размеры вещи. Просто не знал, ...   Jan 25 2005, 22:23
- - slavaz   По просьбе DBColl'a выкладываю свои умозаключе...   Feb 20 2005, 13:18
- - dumbo   почти все умозаключения далеки от реальности(кроме...   Feb 20 2005, 20:04
- - Shad   Есть путь полегче. "я" можно назвать, на...   Feb 20 2005, 23:37
- - dumbo   этот "путь полегче" относится к, можно с...   Feb 20 2005, 23:55
- - Shad   Хм. Я с этим столкнулся недавно. Вообще как-то рус...   Feb 21 2005, 01:29
- - slavaz   QUOTE (dumbo @ Feb 20 2005, 20:04)почти все ...   Feb 21 2005, 10:56
- - DBColl   QUOTE (dumbo @ Feb 20 2005, 22:55) насчет об...   Feb 21 2005, 12:29
- - dumbo   slavaz если вкратце, то примерно так - вычитываетс...   Feb 21 2005, 13:27
- - slavaz   2dumbo: МАМА родная моя! Действительно прим...   Feb 21 2005, 14:06
- - DBColl   dumbo Скажи, а возможно еще все-таки сделать, чт...   Feb 21 2005, 17:03
- - dumbo   DBColl ты скачай и посмотри... я это сразу сделал....   Feb 21 2005, 23:42
- - Aiwan   dumbo э, что то я не понял! А мне ссылку?   Feb 22 2005, 00:30
- - Nokoll   Вот нахимичел в тулсете, и получилось я попробовал...   Feb 22 2005, 00:45
- - DBColl   QUOTE (Nokoll @ Feb 21 2005, 23:45)Вот нахим...   Feb 22 2005, 11:24
- - Friedrich   [B]Прошу прошенья за флуд. Это что, Думбо дизассем...   Feb 22 2005, 22:11
- - dumbo   пользуясь случаем, поздравляю всех с праздником...   Feb 23 2005, 09:48
- - DBColl   dumbo РЕСПЕКТИЩЕ ТЕБЕ ОГРОМНЫЙ. Ты не смотри, чт...   Feb 23 2005, 14:17
- - Aiwan   Хм, вот дела Де ж ты раньше был? РЕСПЕКТ. Однозна...   Feb 23 2005, 14:25
- - Lexey aka Hawk   ОФИГЕННО!!! ГДЕ ЖЕ ТЫ БЫЛ 2 ГОДА НАЗА...   Feb 23 2005, 14:47
- - Tiger Greyhawk   QUOTE (dumbo @ Feb 23 2005, 09:48)как и обещ...   Feb 24 2005, 03:36
- - Lemegeton   dumbo: Вот это да! Это и есть ВКЛАД в развитие...   Feb 24 2005, 10:32
- - Тобур   Круто! Правда у меня сомнения по поводу возмож...   Feb 26 2005, 18:05
- - MasterMage   DBColl ХМ, а у меня 1.32... На вашем 1.64 пойдут...   Mar 7 2005, 18:51
- - Клемент Астилон   Присоединяюсь. Респект   Mar 11 2005, 22:31
- - MasterMage   А вы знаете, что можно запустить скрипт, дав его т...   Mar 11 2005, 22:38
- - 2_advanced   древняя хреновинка. позволяет делать автопатчеры д...   Sep 12 2005, 03:54
- - 2_advanced   обновлено..   Sep 17 2005, 14:33
- - Aiwan   Очень аккуратно пользуйтесь функцией Neverwinter ...   Sep 17 2005, 20:11
- - NedWarN   Несложный но интересный способ установления камеры...   Sep 20 2005, 02:31
- - Aiwan   Известно, что патчить сейвы низя... НО. Если компи...   Sep 7 2006, 19:00
- - Lex   можно. я те еще в начале года об этом говорил: htt...   Sep 7 2006, 19:17
- - Aiwan   Я мучался чтолько лет не зная, что РС в режиме кат...   Sep 17 2006, 11:31
- - Lamonde   Сегодня заметил, что: У PC появилась собственная ...   Dec 20 2008, 23:34
- - Aiwan   Ну, решили что хватит через зад использовать шкуры...   Dec 21 2008, 14:46
|- - Lamonde   Цитата(Aiwan @ Dec 21 2008, 15:46) Ну, ре...   Dec 21 2008, 18:03
- - Ogneslav   Цитата"PC Properties" Тоже нашел эту шк...   Dec 21 2008, 19:51
- - Ilerien   Шкурка эта создана с единственной целью - чтобы ча...   Dec 22 2008, 00:45
|- - Lamonde   Цитата(Ilerien @ Dec 22 2008, 01:45) Шкур...   Dec 22 2008, 13:19
- - Ogneslav   Может я ошибаюсь конечно, но помоему скриптом можн...   Dec 22 2008, 14:37
- - Ilerien   ЦитатаПолучается, что вешать переменные на нее бес...   Dec 22 2008, 21:43
- - Ogneslav   ЦитатаНе налезет. А если в 2da создать отдельный в...   Dec 22 2008, 22:12
- - Ilerien   Да можно хоть саму шкурку изменить в 2да, чтобы на...   Dec 22 2008, 22:41
- - Ogneslav   Цитатаитемы в этим слотах используются в качестве ...   Dec 23 2008, 19:17
- - Deirel   Народ, никто не подбросит идею, как сделать распис...   Mar 21 2009, 21:05
- - Lex   http://nwnmod.narod.ru/stat_anim_npc2.htm вместо р...   Mar 22 2009, 11:11
- - Deirel   Спасибо!=)   Mar 22 2009, 11:44
- - DNAlchemist   Забавная вещь, при использовании действия ActionMo...   Oct 21 2011, 07:37
- - Flaristan   А ActionForceMoveToObject не спасает?   Oct 21 2011, 14:42
2 страниц V   1 2 >


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 26th April 2025 - 10:21