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

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!
  • Друзья, доброго времени суток! Спешите принять участие в оценке работ на конкурсе "Таинственные миры" 2024!
    Ждем именно вас!

    Ссылка на конкурсную тему - тык
    Ссылка на тему с работами участников- тык

Не стесняюсь спросить....

Black-noy

Участник форума
Регистрация
11 Янв 2009
Сообщения
95
Благодарности
1
Баллы
155
Dimmell написал(а):
Bloodshot написал(а):
2. Как поменять тексты в записках и книгах? Что и где копировать нужно?
Я хочу заменить их из Акелловского перевода.
В GothicSourcer есть очень полезная и нужная вещь - Поиск.
Для тех, кто не знает - папочка с биноклем (при наведении - подсказка "Найти в файлах"). Вбиваешь book и по всему проекту будет произведен поиск. А дальше найдешь, что хочешь изменить. Книги и свитки расположены в нескольких файлах (IT_Addon_Written и т.д.)
Это не то. Там все по-немецки написано, а мне нужен русский текст, чтобы я мог его изменить сам. Вот где он находится (книги, записки, документы)? Кто знает, помоите
 
Последнее редактирование модератором:

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Bloodshot написал(а):
Это не то. Там все по-немецки написано, а мне нужен русский текст, чтобы я мог его изменить сам. Вот где он находится (книги, записки, документы)? Кто знает, помоите

По-немецки?! ???
Значит, версия у вас немецкая, тогда какой там русский язык? Или я не так что-то понял?
Dimmell прав, все тексты игры там...IT_Addon_Written.d, а также в некоторых файлах MissionItems... В некоторых модах, и в "возвращении"в частности, некоторые тексты упрятаны в другие файлы; в возвращении это файл StoryB_Story_checkadwinpresence.d
и некоторые в папке _misk_.
Но какой там немецкий язык? ???
 
Последнее редактирование модератором:

vmazz

Участник форума
Регистрация
18 Дек 2008
Сообщения
218
Благодарности
1
Баллы
165
Господин Bloodshotпросто-напросто смотрит скрипты из G2MDK, они там действительно немецкие.

Скачай декомпилированные акелловские скриптыи там уже смотри. Чтоб скомпилировать все обратно используй GothicSourcer 3.14 . И вообще читай, читай, читай. Все это уже было написано 150 раз. Прочитай обязательно это! И прошарь весь ЭТОТ сайт.
 

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Давно хотел сказать.
Часть ссылок >>здесь<< нерабочая.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
DUSTinghoFFman, все ссылки проверил - все работает, если что-то не сскачивается с внещних источников или с mod.wog.ru, то извеняюсь - поправить не могу.
 

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Это конечно не критично, но описания языка нет.
>>ссылка<<

ВОЛЬТИзвеняюсь - почему-то сразу незаметил, ссылка рабочяа есть во втором посте
 
Последнее редактирование модератором:

Black-noy

Участник форума
Регистрация
11 Янв 2009
Сообщения
95
Благодарности
1
Баллы
155
Возникла ошибка такого характера:
Я всего лишь изменил текст записки Декстера с:
func void UseBanditLetter()
{
var int nDocID;
nDocID = Doc_Create();
Doc_SetPages(nDocID,1);
Doc_SetPage(nDocID,0,"letters.TGA",0);
Doc_SetMargins(nDocID,-1,50,50,50,50,1);
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,"");
Doc_SetFont(nDocID,0,FONT_Book);
Doc_PrintLine(nDocID,0,"Задерживать всех мужчин,");
Doc_PrintLine(nDocID,0,"которые приходят с гор.");
Doc_PrintLine(nDocID,0,"Если у кого-то не будет документов,");
Doc_PrintLine(nDocID,0,"то это и будет тот самый человек.");
Doc_PrintLine(nDocID,0,"Не дайте ему обмануть вас.");
Doc_PrintLine(nDocID,0,"он обычный колдун.");
Doc_PrintLine(nDocID,0,"Не упускайте его из виду,");
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,"скорее всего это и есть тот, кого");
Doc_PrintLine(nDocID,0,"вступить с ним в контакт.");
Doc_PrintLine(nDocID,0,"С этим письмом я шлю вам 30 золотых,");
Doc_PrintLine(nDocID,0,"тридцать золотых монет.");
Doc_PrintLine(nDocID,0,"Принесите его голову к камню,");
Doc_PrintLine(nDocID,0,"кто убьет этого человека.");
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,"Сообщения раздавать всем своим.");
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,".....D.");
Doc_PrintLine(nDocID,0,"");
Doc_SetMargins(nDocID,-1,200,50,50,50,1);
Doc_Show(nDocID);
};
на:
func void UseBanditLetter()
{
var int nDocID;
nDocID = Doc_Create();
Doc_SetPages(nDocID,1);
Doc_SetPage(nDocID,0,"letters.TGA",0);
Doc_SetMargins(nDocID,-1,50,50,50,50,1);
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,"");
Doc_SetFont(nDocID,0,FONT_Book);
Doc_PrintLine(nDocID,0,"Задерживайте всех, спустившихся с гор.");
Doc_PrintLine(nDocID,0,"Вполне вероятно, что через проход");
Doc_PrintLine(nDocID,0,"попытается пройти старик.");
Doc_PrintLine(nDocID,0,"Не дайте ему обмануть вас -");
Doc_PrintLine(nDocID,0,"это очень опасный колдун.");
Doc_PrintLine(nDocID,0,"Не упускайте его из виду,");
Doc_PrintLine(nDocID,0,"возможно, человек, которого мы ищем,");
Doc_PrintLine(nDocID,0,"выйдет с ним на связь.");
Doc_PrintLine(nDocID,0,"С этим письмом я посылаю вам");
Doc_PrintLine(nDocID,0,"сто золотых монет и лист с изображением");
Doc_PrintLine(nDocID,0,"нужного нам человека. Покажите его всем своим.");
Doc_PrintLine(nDocID,0,"Я дам еще сто золотых любому,");
Doc_PrintLine(nDocID,0,"кто принесет его голову к камню,");
Doc_PrintLine(nDocID,0,"возле заброшенной башни-аванпоста,");
Doc_PrintLine(nDocID,0,"близ поместья зажиточного крестьянина");
Doc_PrintLine(nDocID,0,"");
Doc_PrintLine(nDocID,0,"Смотрите в оба! .D.");
Doc_PrintLine(nDocID,0,"");
Doc_SetMargins(nDocID,-1,200,50,50,50,1);
Doc_Show(nDocID);
};
Затем начал компилировать и получил вот такую критическую ошибку:
Story\B_Story\C_DiegoTooFar.d(53): Ошибка: Неизвестный идентификатор: SLF

else if((Npc_GetDistToWP(hero,"OC_CENTER_02") < (slf + tolerance)) || (Npc_GetDistToWP(hero,"OC_CENTER_05") < (slf + tolerance)))
{ return LOC_BURG;
Подскажите, что я сделал не так?
 
Последнее редактирование модератором:

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Эта ошибка и у меня выскакивала, причем черт знает, почему "сорсер"так реагирует.
Дело не в записке, а в том скрипте (C_DiegoTooFar.d). Вроде мне Dimmell подсказал, как исправить: сейчас у меня там стоит

Код:
else if((Npc_GetDistToWP(hero,"OC_CENTER_02") < (12000 + tolerance)) || (Npc_GetDistToWP(hero,"OC_CENTER_05") < (12000 + tolerance)
{
return LOC_BURG;
}

Все работает, ошибок не обнаружено.
Но я тоже давно хотел получить комментарий профи, почему "сорсер"так упорно выдаёт эту ошибку?
 
Последнее редактирование модератором:

Marvіn

Участник форума
Регистрация
17 Апр 2008
Сообщения
99
Благодарности
9
Баллы
180
DUSTinghoFFman
Это решение которое тебе подсказал Dimmell реализовано в аккеловских скриптах!
Но я тоже давно хотел получить комментарий профи, почему "сорсер"так упорно выдаёт эту ошибку?
А почему ее там не должно быть? Sourcer верно ругается. slf это аргумент, обычно ссылка на класс C_NPC. Если, например:

название функции(var C_Npc slf) {
то внутри этой функции можно оперировать с идентификатором slf, а иначе будет ошибка.
}

как я посмотрел то функция C_DiegoTooFar(var int tolerance) передает только целочисленный параметр tolerance и никакой ссылки slf на класс C_NPC здесь нет, так что все правильно. ;)

P.S. Более того slf даже не объявленная как переменная внутри функции (например var slf = 1000;) и к глобальным ссылкам\переменным этот идентификатор тоже не относится, так что можно сказать это набор символов с фонаря...
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
DUSTinghoFFman написал(а):
Эта ошибка и у меня выскакивала, причем черт знает, почему "сорсер"так реагирует.

Все работает, ошибок не обнаружено.
Но я тоже давно хотел получить комментарий профи, почему"сорсер"так упорно выдаёт эту ошибку?
Если я не ошибаюсь, у тебя эта ошибка выскочила после декомпиляции моего датника. Хотя у меня ошибки при компилляции не было, и число точно стоит 12000 (сам правил руками после разборки мода - тоже выдавал ошибку). С этим же сталкивался и при компиляции других модов. Можно предположить, что Сорсер может сделать эту ошибку или при компиляции, или при декомпиляции. Но вот как определить когда ошибка появляется? :(
 
Последнее редактирование модератором:

DUSTinghoFFman

Участник форума
Регистрация
24 Май 2008
Сообщения
904
Благодарности
4
Баллы
185
Получить бы комментарий Vam`a... ::)
 

Black-noy

Участник форума
Регистрация
11 Янв 2009
Сообщения
95
Благодарности
1
Баллы
155
Я хочу сделать, инвентарь, как в Г1. Это тут делается? Если тут, то как?
const string TXT_INV_CAT[9] =
{
"",
"Оружие",
"Вооружение",
"Магия",
"Артефакты",
"Питание",
"Напитки",
"Письма",
"Различное"};
Подскажите, где, если не тут.

2. Тут изменяются пороги опыта (например, 1 сила - 1 оч.обучения, при достижении следующего порога - 2 оч.об. и так далее)
const int YPOS_GoldGiven = 34;
const int YPOS_GoldTaken = 34;
const int YPOS_ItemGiven = 37;
const int YPOS_ItemTaken = 40;
const int YPOS_LOGENTRY = 45;
const int YPOS_LevelUp = 50;
const int YPOS_XPGained = 55;
const int YPOS_XPGAINEDQUIT = 65;
const int YPOS_LEVELUPQUIT = 60;
Опять же, подскажите, как изменить пороги.
Заранее спасибо.
 
Последнее редактирование модератором:

MEG@VOLT

★★★★★★★★★
ТехАдмин
Регистрация
24 Мар 2006
Сообщения
9.176
Благодарности
6.158
Баллы
1.565
Bloodshot,
1) Меню меняется в файлах Gothic.ini и в menu.dat(его надо декомпилить и править).
Но если честно - сколько я не пытался сделать тоже самое - все мои результаты оказались плачевными - может просто на тот момент у меня было мало опыта?! не знаю, но я решил отказаться от этой затеи. и уже больше 4х лет не пробовал.
2) Обычно при учениях скрипт вышлядит примерно так hero.lp * kosten - это нужное кол-во очков обучения умноженное на так называемую "главу характеристик".
Воооот и в общем найди такой файл B_GetLearnCostTalent.d внем написанны все эти kosten'ы - поправь все на равные одоному - и у тебя не будет прибавляться требуемость к увеличенным очкам обучения.
 
Последнее редактирование:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Dimmell написал(а):
DUSTinghoFFman написал(а):
Эта ошибка и у меня выскакивала, причем черт знает, почему "сорсер"так реагирует.

Все работает, ошибок не обнаружено.
Но я тоже давно хотел получить комментарий профи, почему"сорсер"так упорно выдаёт эту ошибку?
Если я не ошибаюсь, у тебя эта ошибка выскочила после декомпиляции моего датника. Хотя у меня ошибки при компилляции не было, и число точно стоит 12000 (сам правил руками после разборки мода - тоже выдавал ошибку). С этим же сталкивался и при компиляции других модов. Можно предположить, что Сорсер может сделать эту ошибку или при компиляции, или при декомпиляции. Но вот как определить когда ошибка появляется? :(
Там нет никакой ошибки, :)
Этот баг выражен в том что данная функция идет с переопределением типа Инстанции, Соурсер при любом раскладе не в состоянии выявить и правильно декомпилировать переопределенный тип, и автоматом задает число, которое выявлено, но не является истинным для этого типа, и тому что в данной функции должно быть записано (!)

В корне программы Соурсера есть текстовые файлы:
RedefinedFunc.dsc - для переопределенных функций
RedefinedLocalVariable.dsc - для переопределенных переменных.
Смотрим что у нас идет с переопределенным типом, и это регистрируем в соответствующем файле с указанием типа инстанции и типа на который он переопределяется.
После чего, при декомпиляции вашего проекта Соурсер уже будет знать что данная функция/переменная идет с переопределением типа, и тогда декомпиляция будут проходить верно. Т.е. будет указано верное значение в функции или переменной, конкретно для этого варианта.(!)

Более того, то что ты писал ранее вообще в корне не правильно:
P.S. Более того slf даже не объявленная как переменная внутри функции (например var slf = 1000;) и к глобальным ссылкам\переменным этот идентификатор тоже не относится, так что можно сказать это набор символов с фонаря...
Что до slf, то если эта глобальная константа ни как не задекларирована в скриптах, ровным счетом не говорит о том что она от фонаря, ибо она задекларирована прямо в двиге. ;)
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
MaGoth,
Я ,наверное, перегрелся :D , но причем здесь
Этот баг выражен в том что данная функция идет с переопределением типа Инстанции, Соурсер при любом раскладе не в состоянии выявить и правильно декомпилировать переопределенный тип, и автоматом задает число, которое выявлено, но не является истинным для этого типа, и тому что в данной функции должно быть записано (!)
Идет проверка условия (Npc_GetDistToWP(hero,"OC_CENTER_02") < (12000 + tolerance)), в котором почему-то меняется 12000 на slf при компиляции/декомпиляции.
В указанных файлах нет вообще упоминания Npc_GetDistToWP, значит должно тупо и не глядя обрабатываться без вмешательства.
То, что двиг не всегда корректно обрабатывает условия проверки в которых есть какие-либо вычисления (12000 + tolerance), это понятно, и лично я предпочитаю добавить переменную, сделать вычисления, а переменную записать в условие.
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Dimmell написал(а):
MaGoth,
Я ,наверное, перегрелся :D , но причем здесь
Этот баг выражен в том что данная функция идет с переопределением типа Инстанции, Соурсер при любом раскладе не в состоянии выявить и правильно декомпилировать переопределенный тип, и автоматом задает число, которое выявлено, но не является истинным для этого типа, и тому что в данной функции должно быть записано (!)
Идет проверка условия (Npc_GetDistToWP(hero,"OC_CENTER_02") < (12000 + tolerance)), в котором почему-то меняется 12000 на slf при компиляции/декомпиляции.
В указанных файлах нет вообще упоминания Npc_GetDistToWP, значит должно тупо и не глядя обрабатываться без вмешательства.
То, что двиг не всегда корректно обрабатывает условия проверки в которых есть какие-либо вычисления (12000 + tolerance), это понятно, и лично я предпочитаю добавить переменную, сделать вычисления, а переменную записать в условие.
Наверное тебе виднее... ;)

Смотрим немецкий скрипт C_DiegoTooFar.d из Г2МДК:
// --------------------------
const int LOC_ANGAR = 1;
const int LOC_ICE = 2;
const int LOC_SWAMP = 4;
const int LOC_FIRE = 3;
const int LOC_LAKE = 5;
const int LOC_XARDAS = 6;
const int LOC_FAJETHMINE = 7;
const int LOC_SILVESTROMINE = 8;
const int LOC_GRIMESMINE = 9;
const int LOC_BURG = 10;
const int LOC_ORCBARRIER = 11;
const int LOC_ORCBARRIER_FAR = 12;
// ---------------------------
func int C_DiegoTooFar(var int tolerance) //tolerance wichtig in Dialog, sonst macht SC nach triggern der Info einen Schritt zu weit und Diego kann nicht mehr kommentieren!
{
if (Npc_GetDistToWP (hero, "SPAWN_OW_SHADOWBEAST_10_01") < (4000 + tolerance))
{
return LOC_ANGAR;
}
else if (Npc_GetDistToWP (hero,"OW_ICEREGION_ENTRANCE_01") < (3000 + tolerance))
{
return LOC_ICE;
}
else if (Npc_GetDistToWP (hero,"OW_PATH_046") < (1800 + tolerance))
{
return LOC_SWAMP;
}
else if (Npc_GetDistToWP (hero,"CASTLE_5") < (1500 + tolerance))
{
return LOC_FIRE;
}
else if (Npc_GetDistToWP (hero,"MT16") < (6500 + tolerance))
|| (Npc_GetDistToWP (hero,"MT13") < (5500 + tolerance))
{
return LOC_LAKE;
}
else if (Npc_GetDistToWP (hero,"DT_MAINGATE") < (500 + tolerance))
|| (Wld_GetPlayerPortalGuild() == GIL_DMT)
|| ( (Npc_GetDistToWP (hero,"DT_E3_03") < 1000) && (Npc_GetHeightToNpc(self, hero) >1000) ) //freies Stьck oben
{
return LOC_XARDAS;
}
else if (Npc_GetDistToWP (hero,"OW_NEWMINE_03") < (2500 + tolerance))
|| (Npc_GetDistToWP (hero,"OW_NEWMINE_03_B") < (2500 + tolerance))
{
return LOC_FAJETHMINE;
}
else if (Npc_GetDistToWP (hero,"OW_MINE3_OUT") < (1200 + tolerance))
{
return LOC_SILVESTROMINE;
}
else if (Npc_GetDistToWP (hero,"OW_PATH_266") < (3000 + tolerance))
{
return LOC_GRIMESMINE;
}
else if (Npc_GetDistToWP (hero,"OC_CENTER_02") < (12000 + tolerance))
|| (Npc_GetDistToWP (hero,"OC_CENTER_05") < (12000 + tolerance))
{
return LOC_BURG;
}
else if (Npc_GetDistToWP (hero,"OC_ORCBARRIER_08") < (5000 + tolerance))
|| (Npc_GetDistToWP (hero,"PATH_OC_PSI_01") < (5000 + tolerance))
{
return LOC_ORCBARRIER;
}
else if (Npc_GetDistToWP (hero,"OW_PATH_BLOODFLY01_SPAWN01") < (5000 + tolerance))
{
return LOC_ORCBARRIER_FAR;
};

return FALSE; //DEFAULT
};

В файле скрипта с ошибкой нужно вместо slf прописать нормальное значение - 12000. если больше ошибок нет, сохраняем и компилим датник и оушник.
Затем, в файле RedefinedFunc.dsc, папки system Соурсера, прописываем в конце этого файла:
int C_DiegoTooFar(int#); (и не забываем пробить один Ретурн:))

И теперь попробуем декомпилировать свой свеже-скомпилированный датник, смотрим на результат.

Ps. Если не трудно, то скиньте данный файл с ошибкой после декомпиляции.
Хотелось бы на сам файл с ошибкой глянуть..
И я так понял что декомпилировались скрипты не оригинальной Готики2-НВ, а мода какого нить, или?!

Как увижу файл попробую сказать в чем точно грабля.. :)
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Немного о переопределенных типах by Vam

Пример:
Строка int# b_doupgrade.itemInstance; говорит компилятору что в функции b_doupgrade локальная переменная itemInstance имеет переопределенный тип (int ->instance).
Другой вопрос - для чего это нужно?
Разработчики языка скриптов упростили некоторые типы переменных: есть основные переменные (int, float, string, func, class, instance и т.д.), но нет производных переменных - указателей и ссылок (формат записи: тип* - указатель, тип& - ссылка), которые представляют из себя адреса места в памяти, где расположена переменная.
Попробую пояснить: например, функция
C_ITEM Npc_GetEquippedArmor(C_NPC n0); возвращает не сам класс C_ITEM, а только адрес класса, в нормальном языке программирования это должно бы выглядеть так C_ITEM* (указатель) или C_ITEM& (ссылка), тоже относится и к аргументу с типом C_NPC.
В связи с такими упрощениями в скриптах невозможно создать функцию возвращающую производный тип. Это могут делать только встроенные функции экзешника, но жить-то надо - и было принято упрощение использовать вместо производных типов (адресов объектов) простой тип INT. К типу INT переопределяется только тип INSTANCE.
Поясню:
Например, функция void Npc_RemoveInvItem(c_npc owner,int itemInstance);, второй аргумент функции имеет тип int, но это не простой тип, а переопределенный, при вызове функции здесь записывается имя конкретной инстанции (например, ItFo_Apple - яблоко будет удалено из инвентаря). Но так как проверки на типы раньше не было, можно было бы записать в качестве второго аргумента любое число, например 10345, - всё бы скомпилировалось, но в игре из инвентаря был бы удален предмет, имеющий номер инстанции 10345, а что это - сказать трудно (в процессе компиляции первая инстанция получает номер 1, вторая - 2 и т.д.).
Дальше - чтобы проверить правильность присвоения таких переопределенных типов необходимо их отделить от типа int, вот это и выполняется в файлах RedefinedFunc.d - переопределенные параметры (помечены #) функций и RedefinedLocalVariable.d - переопределенные локальные переменные.
Далее - Декомпиляция: встретив число, например, 10345 типа int декомпилятор должен распознать, что это действительно int или номер (ссылка) инстанции, если правильного распознавания не будет, то к чему это приведет - смотри выше, правда, если скрипты не править, а только декомпилировать, а потом компилировать, то ошибки не будет, её не будет и в том случае, если новую инстанцию добавить в конец списка; а если в середину, то все номера инстанций будут смещены, в итоге вместо яблока получишь что-то другое.
Эти же два файла нужны и для правильного распознавания переопределенных типов при декомпиляции. В них записаны функции и переменные оригинальных скриптов (какие встретил), если же в модах Готик встречаются новые функции с переопределенными параметрами, то их необходимо зарегистрировать в этих файлах для избежания возможных ошибок.
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
MaGoth
Хотелось бы на сам файл с ошибкой глянуть..
И я так понял что декомпилировались скрипты не оригинальной Готики2-НВ, а мода какого нить, или?!
В том-то и весь прикол, что компилировалось Возвращение без ошибок, отправлялось DUSTinghoFFmanу и декомпилировалось им с этой ошибкой. :)
Получается что Сорсер
Далее - Декомпиляция: встретив число, например, 10345 типа int декомпилятор должен распознать, что это действительно int или номер (ссылка) инстанции, если правильного распознавания не будет, то к чему это приведет - смотри выше, правда, если скрипты не править, а только декомпилировать, а потом компилировать, то ошибки не будет, её не будет и в том случае, если новую инстанцию добавить в конец списка; а если в середину, то все номера инстанций будут смещены, в итоге вместо яблока получишь что-то другое.
встретив 12000 может распознать как 12000, а может как slf.
А раз разрабы "упростили некоторые типы переменных", тем более надо избегать применения арифметических операций в условиях и т.п.
PS. Благодарю за полезную инфу. :)
 
Последнее редактирование модератором:

MaGoth

★★★★★★★★★★★
Администратор
Регистрация
7 Янв 2003
Сообщения
19.371
Благодарности
7.803
Баллы
995
Dimmell написал(а):
В том-то и весь прикол, что компилировалось Возвращение без ошибок, отправлялось DUSTinghoFFmanу и декомпилировалось им с этой ошибкой. :)
То что оно успешно скомпилировалось не говорит ни о чем, как авторы Возвращения, так и ты сам, могли, и скорее всего исправили данную ошибку, добавив правильное значение. Но это не говорит о том почему эта ошибка вылазит постоянно при декомпиляции. Я же просто указал на вероятное решение этой проблемы. Кстати авторы сами могли не знать что такие фокусы встречаются. :)
И поэтому не вносили в соответствующий файл в Редефинед декларации для этой функции.


Получается что Сорсер встретив 12000 может распознать как 12000, а может как slf.
А раз разрабы "упростили некоторые типы переменных", тем более надо избегать применения арифметических операций в условиях и т.п.
PS. Благодарю за полезную инфу. :)
Получается лишь то, что выше уже было ОЗВУЧЕНО.:
В скрипты были внесены изменения, по инстанциям произошел сдвиг счетчка, отсюда, и выскакивает slf (!) при декомпиляции компилированного проекта. А так как данный аргумент функции не зарегистрирован Декомпилер и сбивается.

В прочем однозначно с уверенностью в 100%, я и сам не могу сказать, так как у меня нет этого датника, и я его не изучал. Но поведение Соурсера указывает именно на это. ;)
 
Последнее редактирование модератором:

Dimmell

Участник форума
Регистрация
23 Ноя 2008
Сообщения
2.899
Благодарности
111
Баллы
285
MaGoth,
мне важно было узнать что
Декомпилер и сбивается.
Главное чтобы компилер правильно паковал. ;)
В прочем однозначно с уверенностью в 100%, я и сам не могу сказать, так как у меня нет этого датника, и я его не изучал.
Файл C_DiegoTooFar.d в Возвращении абсолютно идентичен Глобалу. :)
 
Сверху Снизу