• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток!
    Стартовал новый литературный конкурс от "Ордена Хранителей" - "Пираты Миртанского моря".
    Каждый может принять в нём участие и снискать славу и уважение, а в случае занятия призового места ещё и получить награду. Дерзайте
  • Дорогие друзья, год подходит к концу, и пришло время подвести его итоги и наградить достойных

    Не ленитесь, голосуйте в этой теме за тех форумчан, которые по вашему мнению больше всех проявили себя в этом году
    По желанию, аргументировать свой выбор можете в теме обсуждения голосования.

Полезные советы

GeorG

Участник форума
Регистрация
27 Авг 2008
Сообщения
3.447
Благодарности
11
Баллы
295
Не знаю, нужны кому или нет? Просто здесь я думаю, могли бы отписаться все кто их может дать…

Просьба не засорять тему комментариями, а писать по существу четко и ясно, проверенные и подтвердившие себя в деле «полезные советы». Как можно подробнее объяснив их.
Просьба ко всем:
Для упрощения поиска, дабы не читать все подряд.
Кто пишет полезный совет указать его тематику любым другим цветом.
Например "Работа с GothicVDFS"


Упрощаем работу с GothicSourcer

Для тех, кто пользуется GothicSourcer. Иногда надоедает в ручную копировать из папки в папку файлы “GOTHIC.dat” и “ou.bin” для компиляции файла “*.VDF” или “*.mod”…
Не знаю, как остальным, но мне делать одну и туже операцию по 100 раз не захотелось, и я сделал файл «.CMD» с таким содержанием…

Код:
@echo off

DEL /F /Q "D:\Program Files\Gothic II\*.DMP"
copy /y"C:\Program Files\GothicSourcer V3.14\Gothic Projects\SolWorldsMainPatch\PrjGOTHIC\GOTHIC.dat""C:\Documents and Settings\Geor'G\ђ Ў®зЁ© бв®«\WorldsMainPatch\_WORK\DATA\SCRIPTS\_COMPILED\GOTHIC.dat"copy /y"C:\Program Files\GothicSourcer V3.14\Gothic Projects\SolWorldsMainPatch\PrjGOTHIC\ou.bin""C:\Documents and Settings\Geor'G\ђ Ў®зЁ© бв®«\WorldsMainPatch\_WORK\DATA\SCRIPTS\CONTENT\CUTSCENE\ou.bin"
GothicVDFS.exe /b .\WorldsMainPatch.vm
EXIT

И теперь не утруждаю себя в компиле .vdf файла (имя может быть любым), а приходится его компилеть ой как часто…

Объясню по «строчкам», что каждая команда значит…
Первая и вторая строка не столь важны как последующие…

1. echo: - переключение режима отображения команд на экране…
2. DEL: - удаляет файл «*.DMP» его всегда желательно удалять, когда экспериментируешь над игрой…
3. и 4. COPY: - копируют заранее подготовленные файлы «GOTHIC.dat» и «ou.bin» в нужную папку…
5. команда «GothicVDFS.exe /b .\WorldsMainPatch.vm» запускает прогу GothicVDFS.exe с заранее подготовленным скриптом (как его сделать смотрите ниже) и компилет ваш файл в файл “*.VDF” или “*.mod” для проверки и испытания ваших изменений…
6. Завершающая строка, выход и закрытия CMD файла, без предварительного уведомления…

Для удобства советую «GothicVDFS.exe» и файл скрипта, бросить в туже папку, где у вас находится ваш «.CMD» файл, тогда не надо будит прописывать дополнительно путь к файлам…

Кто поймет, что я здесь написал, тот я думаю, сможет это хорошо использовать,… а уж кто не поймет… эх... ::)

Как сделать скрипт:
Запускаете прогу «GothicVDFS.exe» жмёте на кнопку “Builder” (панель инструментов), заполняете пустые строчки как вам угодно (как это делать читайте справку по программе или тутореалы), после жмете на кнопку «Save Script» внизу окна программы…

P.S. Конечно надо пользоваться именами которые у вас, а не те которые я дал для примера…
P.P.S. Те не понятные буквы которые имеют быть место в строках (ђ Ў®зЁ© бв®«), обозначают «Рабочий стол»…
 
Последнее редактирование модератором:

Saturas


Модостроитель
Регистрация
11 Фев 2009
Сообщения
2.512
Благодарности
1.334
Баллы
315
Если кому надо то вот:

Выкладываю урок по быстрому созданию вейпоинтов в спейсере. (Без последующего соединения!!! соединяются автоматически!)
1.Создаем вейпоинт даем ему любое имя.
2.Выбираем только что созданный вейпоинт и нажимаем сочетание клавиш
Ctrl+I и вводим имя для нашего вейпоинта (при этом он автоматически создается)
итак продолжаем сколько угодно раз САМОЕ ГЛАВНОЕ ЭТО ЧТОБЫ ТОЛЬКО ЧТО СОЗДАННЫЙ ВЕЙПОИНТ ОСТАВАЛСЯ ВЫБРАННЫМ (хотя он итак будет выбран ;)) и при этом все созданные вейпоинты автоматически соединяются последовательно в цепь.
Результат удобно, просто, качественно и главное быстро!
 

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
2@GeorG:
Я делал проще: в настройках "сорсера"прописывал"путь к готике 2"как /MY_MOD.
Там уже лежат все необходимые файлы - текстуры, модели, нехватает только скриптов.
Как только отредактировал скрипты, скомпилировал, "сорсер"автоматически заменил “GOTHIC.dat” и “ou.bin”, осталось только запустить скрипт для GothicVDFS с рабочего стола. Мой образец в спойлере.
index.php
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.900
Благодарности
6.776
Баллы
1.625
2Saturas,
Ну не совсем качествоенно так получается, ты попробуй передвинуть вверх(а лучше вниз) первый вай, который создал и к которому прикриплял остальные. и посмотри что будет с прикрипленными ваями, не надо делать лестницу мобов - если конечно это не тригер(мувер обычно), костер(к кторому прикреплен огонь), и т.п.


ЗЫ. думаю тема достояна звания важная.
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Правило, которого следует придерживаться при написании диалогов:

Когда пишете диалоги, следует избегать слишком длинных "фраз". Я имею в виду то, что в AI_Output идет после знака комментария (после //), то, что появится в субтитрах, если они будут включены. Поскольку при отсутсвиии озвучки эти фразы зачастую просто не успеваешь прочесть. Поэтому, длинную"фразу"лучше разбить на несколько. Каждую в своем AI_Output.
 
Последнее редактирование модератором:

TemplaR

Участник форума
Регистрация
16 Ноя 2008
Сообщения
322
Благодарности
0
Баллы
175
Для тех кто в танке, так сказать. ::)
Когда делаетe локацию, лучше её делать по небольшим кусочкам, а затем склеивать воедино, детализация получается выше.
 

s@m


Модостроитель
Регистрация
2 Мар 2007
Сообщения
315
Благодарности
56
Баллы
195
Дам удобный совет по Spacer
Если вы летаете и не можете найти территорию или просто вам нужно увеличить дальность прорисовки нажмите View/Edit >Console и введите туда следующее: set clippingfactor 100
Этот метод лучше подходит когда открыт 3дс, так как в зене можно щёлкнуть на что либо 2 раза и камера сама туда прилетит ;)
 
Последнее редактирование модератором:

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Совет по Cкриптингу в Gothic Sourcer

А совет новичкам и неновичкам модостроения вот такого содержания...
Тем люди, которые начинают работу в GS, используя не скриптовую болванку, а по тем или иным причинам некий готовый проект(в частности декомпилированные скрипты от Акеллы) я советую разбить файлы диалогов и файлы НПСов на две подпапки. Получается структура Story/Npc --->> Story/NPC/Original + Story/NPC/$ВашМод$ (аналогично и с диалогами). Соответственно, не забываем в файле gothic.src заранее изменить(переадресовать) пути к файлам. Это делается быстро в любом текстовом редакторе с помощью замены Story/NPC на Story/NPC/Original

Поверьте, это очень приятное изменение, упрощающее работу и сокращающее время на нужные поиски.
P.S. Также можно для уж полного комфорта(ежели надо) разбить файлы на дополнительные подпапки (Story/NPC/Original/Paladin , Story/NPC/Original/FireMag и т.д. и т.п.)
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Альтернатива или дополнение к совету redleha: При разработке используйте системы контроля версий (например svn или, как его еще называют subversion). Особенно при коллективной разработке.
 

Marvіn

Участник форума
Регистрация
17 Апр 2008
Сообщения
99
Благодарности
9
Баллы
180
2kraw
Эта тема была создана, для полных открытых советов, 100% проверенных, и работающих.

Насчет subversive, то рационально и действительно полезная вещь при разработке больших проектов.
Система позволяет вести контроль версий, а также историю изменений кода, так что в любой момент можно сделать откат до последней рабочей версии вашего проекта.
Каждый сам для себя может установить свой локальный svn сервер.
Например для Windows OS можно скачать VISUAL SVN SERVER, легкий и простой в использовании. Также необходимо скачать TortoiseSVN для работы с файлами проекта.

Но эти варианты подходящие для одинокого разработчика. Если над проектом работают два и больше скриптера, тогда в этом случаи локальный svn сервер, теряет весь смысл использования. Для таких проектов можно использовать svn репозитории, дабы все имели доступ к файлам, вносить свои изменения не опасаясь что-то испортить.

В общем svn это тема обширная и про нее можно долго рассказывать...
Кому интересно может почитать вот эту документацию
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Дополнительно - небольшое описание из wiki о svn (subversion). Советую прочесть, хотя бы из любопытства "пропуская таблицы и диаграмы":) Возможно тогда увидите насколько это просто, полезно и упрощает работу над модом.

Культуру производства в массы!!!! *bravo*

Часть 1
Часть 2
Часть 3
 
Последнее редактирование модератором:

Feuermagier


Модостроитель
Регистрация
13 Апр 2008
Сообщения
934
Благодарности
136
Баллы
225
Совет по сборке миров: При соединении нескольких ZEN файлов в директории с ними не должно быть 3ds файлов с именами мешей, кторые есть в составе ZEN файлов, иначе меши, при совпадении имени, будут заменены.
 

redleha


Модостроитель
Регистрация
26 Фев 2008
Сообщения
735
Благодарности
665
Баллы
245
Расскажу небольшой секрет для новичков (и не новичков), как быстро получить и вообще получить анимации в готовом для игры формате (для Г2а) - то бишь скомпилированные man-файлы + суммарный msb-файл.

1. Получаем все исходные анимации , декомпилируя исходный msb-файл монстра/орка, например с помощью GS v.3.14. В итоге получаем кучу asc-файлов + один mds-файл.
2. Копируем все эти файлы в корень папки anims установленной игры(на всякий случай, хотя не обязательно) + asc-файлы своих анимаций.
3. Изменяем mds файл, находящийся в папке anims, в соответствии со вносимыми дополнениями.
4. Удаляем из папки Anims/_compiled файл %имямостра%.msb (+ man-файлы тех анимаций, которые вы изменяете).
5. Запускаем новую игру и вызываем этого монстра или ищем его в игре. Как только монстр начнет обрабатываться движком, то произойдет компиляция новых анимаций/недостающих обновлённых + сбор нового msb-файла.
6. Теперь в папке anims/_compiled вы увидите новые man-файлы анимаций + обновленный msb-файл.
Вот их то и нужно упаковывать в свой мод, чтоб эти анимы увидеть в игре на другом компе.

Если я что-то упустил, то прошу не пинать, а знающих модераторов подправить неточности или что-то ещё добавить (можно в личку, сам добавлю). Этот способ точно рабочий, лично проверял.
 

Ice

Участник форума
Регистрация
5 Ноя 2009
Сообщения
32
Благодарности
1
Баллы
160
Работа с комментариями.
Часто возникает необходимость отладить или переделать что-нибудь, а пока работа не закончена, изеняемый код держим под комментарием.
Чтобы немножко упростить себе жизнь вспомним пару древних програмистских приёмов:

1.
Поточный комментарий с меткой.
Раскомментировано:
//*DEBUG
func void myNewLouseFunction(){...};
//*/

Закомментировано:
/*DEBUG
func void myNewLouseFunction(){...};
//*/

Понятно, что комментируя тестируемый и отладочный код таким образом, мы можем запустить замену по файлам по строке "/*DEBUG" включая и выключая DEBUG функции.

2. Как быть если мы не хотим удалять старую реализацию пока новая полностью не готова, а запускать проек надо?
Добавим в потоковый комментарий "Реверс": /*/.
Работает дебаг:
//*DEBUG
func void myNewLouseFunction(){...};
/*/
func void myOldGoodFunction(){...};
//*/


Работает старая реализация:
/*DEBUG
func void myNewLouseFunction(){...};
/*/

func void myOldGoodFunction(){...};
//*/
Как и в п. 1 надо всего лишь переключать строку "//*DEBUG" на "/*DEBUG"
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
Я бы предложил не заморачиваться с подобными приемами, а поставить себе систему контроля версий. Например subversion. И история изменений есть в любой момент, и откатить можно, и "снимки" состояний исходников держать (например разные версии), и ветвить проект можно.

А самое главное - делать это достаточно удобно.
 

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
А я бы для начала предложил научиться пользоваться Соурсером в плане создания дублей проекта, вести нормальный, постоянный и понятный лог изменений в отдельный текстовый файл и ремарить не отлаженные куски кода понятными себе же комментариями, а после отладки чистить от мусора. Сделать отдельную тестовую сборку мода и прописать инишник и новичок сможет. И не хвататься за решение всех проблем сразу - поставил задачу, сделал, перешел к следующей.
Иначе через неделю-месяц перерыва не поможет ни svn, ни надписи DEBUG - вспоминать придется все с самого начала где и что чудил и имел ввиду. :)
 

kraw


Модостроитель
Регистрация
11 Окт 2005
Сообщения
2.095
Благодарности
871
Баллы
295
А я бы для начала предложил научиться пользоваться Соурсером в плане создания дублей проекта, вести нормальный, постоянный и понятный лог изменений в отдельный текстовый файл и ремарить не отлаженные куски кода понятными себе же комментариями, а после отладки чистить от мусора. Сделать отдельную тестовую сборку мода и прописать инишник и новичок сможет. И не хвататься за решение всех проблем сразу - поставил задачу, сделал, перешел к следующей.
Иначе через неделю-месяц перерыва не поможет ни svn, ни надписи DEBUG - вспоминать придется все с самого начала где и что чудил и имел ввиду. :)

А если одновременно с svn не лениться вести trac, то вообще будет все просто. На каждую ошибку, доработку и т. п. заводить отдельный тикет. И в комментариях тикета делать ссылки на ревизии svn. А по завершении доработки, исправлении ошибки , тикет закрывать.

Тогда точно ничего не потеряется.

Но тут нужно придерживаться (как и в иных способах) элементарной технологической дисциплины. Иначе все бесполезно и ничто не поможет.
 

Ice

Участник форума
Регистрация
5 Ноя 2009
Сообщения
32
Благодарности
1
Баллы
160
Регулярные выражения.
Часто возникает ситуация внесения большого числа однотипных изменений в код.
Например желаем добавить общий обработчик к массиву функций Eqip_xxx(). В файле примера такая функция встречается 62 раза, добавлять вручную-мартышкин труд.
Часть файла до применения зменений.
PHP:
func void Equip_1H_02()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,Waffenbonus_02);
		MELEEWEAPONINDEX = 2;
		BONUSHW = 2;
	};
};

func void UnEquip_1H_02()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,-Waffenbonus_02);
		MELEEWEAPONINDEX = 0;
		BONUSHW = 0;
	};
};

func void Equip_1H_04()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,Waffenbonus_04);
		MELEEWEAPONINDEX = 4;
		BONUSHW = 2;
	};
};

func void UnEquip_1H_04()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,-Waffenbonus_04);
		MELEEWEAPONINDEX = 0;
		BONUSHW = 0;
	};
};

func void equip_crossbow_heavy()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 6;
		BONUSRW = 2;
	};
};

func void equip_crossbow_veryheavy()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 8;
		BONUSRW = 2;
	};
};

func void unequip_bow_light()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 0;
		BONUSRW = 0;
	};
};

func void unequip_bow_medium()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 0;
		BONUSRW = 0;
	};
};
Для использования регулярных выражений в Windows часто используются сторонние редакторы. Их поддержка хорошо реализована в PsPad
Вставим содержимое нашего файла в редактор и выберем в меню Поиск->Заменить (Ctrl+H). В появившемся окне выберем пункт Регулярные выражения.
А теперь посмотрим внимательнее на код в фале.
В каждой функции существует строка BONUSRW = или BONUSHW =.
При экипировке = конкретному значению при разэкипировке =0;
Воспользуемся этим и в "Найти" запишем регулярное выражение для поиска:
(BONUS.W = [1-9]);
Что здесь написано:
[1-9] - в квадратных скобках, означает 1-ин символ в перечне от 1 до 9.
() - круглые скобки, означают запомнить найденый текст для последующей обработки!
. - точка между S и W обознач 1-ин любой символ. В примере она заменяет или R или H.
В поле заменить добавим:
$1;\n Equip();
Это значит:
$1 - вставить снова найденное выражение содержащееся в круглых скобках. В примере это (BONUS.W = [1-9]). Иными словами вернуть на место, что изъяли. (В Notepad++ следует использовать \1 вмето $1)= \1;\n Equip();
Плюс ";"
\n - сивол перевода на новую строку.
Equip(); - добавляемый вызов функции с отступом.
Жмём ОК. Применить для всех. И:
PHP:
func void Equip_1H_02()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,Waffenbonus_02);
		MELEEWEAPONINDEX = 2;
        BONUSHW = 2;
      Equip();
	};
};

func void UnEquip_1H_02()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,-Waffenbonus_02);
		MELEEWEAPONINDEX = 0;
		BONUSHW = 0;
	};
};

func void Equip_1H_04()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,Waffenbonus_04);
		MELEEWEAPONINDEX = 4;
		BONUSHW = 2
     Equip();
	};
};

func void UnEquip_1H_04()
{
	if(self.id == 0)
	{
		B_AddFightSkill(self,NPC_TALENT_1H,-Waffenbonus_04);
		MELEEWEAPONINDEX = 0;
		BONUSHW = 0;
	};
};

func void equip_crossbow_heavy()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 6;
  BONUSRW = 2;
      Equip();
	};
};

func void equip_crossbow_veryheavy()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 8;
  BONUSRW = 2;
      Equip();
	};
};

func void unequip_bow_light()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 0;
		BONUSRW = 0;
	};
};

func void unequip_bow_medium()
{
	if(self.id == 0)
	{
		RANGEWEAPONINDEX = 0;
		BONUSRW = 0;
	};
};

Функции unequip_xxx() c BONUSHW = 0; остались нетронуты.
оператор "(круглые скобки)" может быть использован в строке несколько раз, переменная для возврата найденного соответственно $1 $2 и т.д. (В Notepad++ следует использовать \1 вмето $1)
 

Ice

Участник форума
Регистрация
5 Ноя 2009
Сообщения
32
Благодарности
1
Баллы
160
Notepad++
Обновлено 2011.03.05
Обновлено 2011.03.15
Alt+B
при изменении файла находящегося под контролем SVN, достаточно нажать Alt+B, чтобы сравнить его с последним сохранённым варинтом базы SVN.
Настройка SVN

Подсветка синтаксиса в стиле GothicSourcer для Notepad++.
Обновлено. Дополнения от 2011.03.15
Файл stylers.xml в каталоге установке Notepad++
Заменить секцию <LexerType name="d" desc="D" ext="">

PHP:
 <LexerType name="d" desc="D" ext="">
            <WordsStyle name="DEFAULT" styleID="0" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="IDENTIFIER" styleID="14" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="INSTRUCTION WORD" styleID="6" fgColor="0000FF" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="instre1">func var instance prototype</WordsStyle>
            <WordsStyle name="KEWORD1" styleID="7" fgColor="C1C100" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="instre2">hero other self item victim</WordsStyle>
            <WordsStyle name="KEWORD2" styleID="8" fgColor="800080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" keywordClass="type1"></WordsStyle>
            <WordsStyle name="KEWORD3" styleID="9" fgColor="804000" bgColor="FFFFFF" fontName="" fontStyle="2" fontSize="" keywordClass="type2">aivar attribute bodymass bodyStateInterruptableOverr canChangeTargetDuringInvest canTurnDuringInvest change_atr change_value condition cond_atr cond_value count daily_routine damage damageTotal damageType damage_per_level description disguiseGuild duration effect exp exp_next failure failureConditions fight_tactic flags guild HitChance hp,hp_max id important information inv_animate inv_rotx inv_roty inv_rotz inv_zbias isMultiEffect item_azi item_elevdo item_elevup item_prio item_range1 item_range2 level lp magic mag_circle mainflag material mission mob_azi mob_elevdo mob_elevup mob_prio mob_range1 mob_range2 munition name nameID noFocus npc npcType npc_azi npc_elevdo,npc_elevup npc_longrange npc_prio npc_range1 npc_range2 nr nutrition obsolete obsoleteConditions offer offerConditions on_equip on_state on_unequip owner ownerGuild permanent protection range reaction requested_amount requested_cat requested_item running scemeName senses senses_range slot spawnDelay spawnPoint spell spellType start_aistate success successConditions targetCollectAlgo targetCollectAzi targetCollectElev targetCollectRange targetCollectType text time_per_mana trade trade_amount trade_item value visual visual_change visual_skin voice voicePitch weapon wear weight wp voicePitch bodymass daily_routine start_aistate spawnPoint spawnDelay senses senses_range aivar wp exp exp_next lp bodyStateInterruptableOverr noFocus </WordsStyle>
            <WordsStyle name="KEWORD4" styleID="20" fgColor="800080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" keywordClass="type3">C_NPC C_ITEM C_Info c_mission c_focus c_spell c_itemreact</WordsStyle>
            <WordsStyle name="KEWORD5" styleID="21" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type4" />
            <WordsStyle name="KEWORD6" styleID="22" fgColor="000000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" keywordClass="type5" />
            <WordsStyle name="NUMBER" styleID="5" fgColor="0080C0" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="STRING" styleID="10" fgColor="800000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="CHARACTER" styleID="12" fgColor="808080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="OPERATOR" styleID="13" fgColor="808000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT" styleID="1" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT LINE" styleID="2" fgColor="008000" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT DOC" styleID="3" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT NESTED" styleID="4" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT LINE DOC" styleID="15" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
            <WordsStyle name="COMMENT DOC KEYWORD" styleID="16" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="1" fontSize="" />
            <WordsStyle name="COMMENT DOC KEYWORD ERROR" styleID="17" fgColor="008080" bgColor="FFFFFF" fontName="" fontStyle="0" fontSize="" />
        </LexerType>
Сочетание клавиш Alt+S сравнивает с сохранённой копией.

Конфиг для плагина к Notepad++ SourceCookifie
Плагин строит дерево переменных и функций в открытом/ых файлах.
Позволяет быстро переходить к месту объявления.
Обновлено. Исправления и дополнения от 2011.03.05
Clipboard03.jpg

Представленное регулярное выражение, в текущей версии плагина, не позволяет выявить переменные и константы записанные на одной строке.

Добавить в конец файла SourceCookifier.languages.xml (Notepad++\plugins\Config\SourceCookifier.languages.xml )
перед тегом </SerializableDictionaryOfStringLanguage>
Добавлять/заменять редактором отличным от Notepad++, иначе изменения не будут внесены!

Warning!
В связи с тем, что бэкслеш перед "\s*" в тексте поста не отображается, воспользуйтесь аттачем!!!
Посмотреть вложение SourceCookifier.languages.txt

PHP:
 <item>
    <key>
      <string>D</string>
    </key>
    <value>
      <Language xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <BuildIn>false</BuildIn>
        <Extensions>
          <string>.d</string>
        </Extensions>
        <TagTypes>
          <item>
            <key>
              <string>c</string>
            </key>
            <value>
              <TagType>
                <Description>const [c]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*const\s+([a-Z_]+)\\s+([a-Z_0-9]+)\\s*=\\s*(.*)+;/\2access:\1signature:\3/c/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>false</TrackCaret>
                <IconFilename>php_class_constants.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
          <item>
            <key>
              <string>C</string>
            </key>
            <value>
              <TagType>
                <Description>Class[C]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*classs+([a-Z_]+)/\1/C/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>false</TrackCaret>
                <IconFilename>python_class.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
          <item>
            <key>
              <string>i</string>
            </key>
            <value>
              <TagType>
                <Description>instance [i]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*instances+([a-Z_]*)\\s*((\\s*[a-Z_]*\\s*))/\1signature:\2/i/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>false</TrackCaret>
                <IconFilename>c_interface.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
          <item>
            <key>
              <string>P</string>
            </key>
            <value>
              <TagType>
                <Description>Prototype [P]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*prototype\\s+([a-Z_]*)\\s*((\\s*[a-Z_]*\\s*))/\1signature:\2/P/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>false</TrackCaret>
                <IconFilename>c_property.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
          <item>
            <key>
              <string>f</string>
            </key>
            <value>
              <TagType>
                <Description>function [f]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*func\\s+([a-Z_]*)\\s+([a-Z_0-9]*)\\s*((.*))/\2access:\1signature:\3/f/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>true</TrackCaret>
                <IconFilename>pascal_function.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
          <item>
            <key>
              <string>a</string>
            </key>
            <value>
              <TagType>
                <Description>variables [a]</Description>
                <BuildIn>false</BuildIn>
                <RegexPatterns>
                  <string>/\\s*var\\s+([a-Z_]*)\\s+([a-Z_0-9]*)([[a-Z_0-9]*])*;/\2access:\1signature:\3/a/ei</string>
                </RegexPatterns>
                <Show>true</Show>
                <TrackCaret>false</TrackCaret>
                <IconFilename>c_union.png</IconFilename>
                <ForeColor>-16777216</ForeColor>
              </TagType>
            </value>
          </item>
        </TagTypes>
      </Language>
    </value>
  </item>
 

Ice

Участник форума
Регистрация
5 Ноя 2009
Сообщения
32
Благодарности
1
Баллы
160
Notepad++
.
Ctrl+Space
Ctrl+Shift+Space

Коллекция встроенных функций и констант Gothic II для автодополнения в Notepad++
по Ctrl+Space и Ctrl+Shift+Space(для дополнения аргументов функциий)
Дополнено 2011.03.15 17:44
Рекомендуется обновиться! Испраления 2011.03.16 21:52
Clipboard01.jpgClipboard02.jpg
Положить в Notepad++\plugins\APIs\ содержимое архива
Посмотреть вложение d.zip
Взято из GothocSourcer (IntFuncGothic2_ru.d):
  1. Встроенные функции Готики 2.
Взято из Vam_tutor.chm:

  1. Глобальные константы.
  2. Константы AI.
  3. Состояния тела НПС, фокусы камеры и параметры гильдий
  4. 4. Инициализация восприятий.
  5. 5. Функции обработки восприятий людей.
  6. 6. Функции обработки восприятий монстров.
  7. 7. Описание обработчиков состояний НПС.
  8. 8. Функции состояний людей.
  9. 9. Функции состояний монстров.
  10. 10. Функции распорядка дня людей.
  11. 11. Функции распорядка дня монстров.
  12. 12. Вспомогательные В_ функции для людей.
  13. 13. Вспомогательные С_ функции для людей (compare функции).
  14. 14. Отношения между гильдиями.
  15. 15. Магия.
  16. 16. Заклинания.
  17. 17. Обработчики состояний заклинаний.
  18. 18. Разные AI функции.
  19. 19. Обработчики состояний функций распорядка дня для людей.
не чувствительно к регистру!
 
Сверху Снизу