Показать сообщение отдельно
Старый 09.12.2006, 23:24   #926
MaGoth
A.G.F.C.
  Аватар для MaGoth
 
Регистрация: 04.09.2006
Сообщений: 20
MaGoth вне форума

По умолчанию Re: М:Декомпилятор скриптов Готики

Vam'u:

Ну собсно, это старо... *Опять 25. :(
При декомпиляции собранного и рабочего dat-файла, полезло следующее:

Вывод ошибок декомпиллером при первой компиляции, декомпилированного dat-файла:
1. AI\AI_Intern\Perception.d(4): Ошибка: Неизвестный идентификатор: READYWEAP
2. AI\AI_Intern\Perception.d(15): Ошибка: Неизвестный идентификатор: READYWEAP
3. AI\AI_Intern\Perception.d(16): Ошибка: Неизвестный идентификатор: READYWEAP

Вместо "READYWEAP", должно быть "9999".

Содержимое файла Perception.d:

Cпойлер(щелкните, чтобы прочесть):
Код:
func void InitPerceptions(){ * * *Perc_SetRange(PERC_ASSESSDAMAGE,READYWEAP); * * *Perc_SetRange(PERC_ASSESSOTHERSDAMAGE,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_ASSESSDEFEAT,WATCHFIGHT_DIST_MAX); * * *Perc_SetRange(PERC_ASSESSMURDER,PERC_DIST_ACTIVE_MAX); * * *Perc_SetRange(PERC_ASSESSTHREAT,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_DRAWWEAPON,PERC_DIST_DIALOG); * * *Perc_SetRange(PERC_ASSESSFIGHTSOUND,3000); * * *Perc_SetRange(PERC_ASSESSQUIETSOUND,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_ASSESSTHEFT,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_ASSESSUSEMOB,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_ASSESSENTERROOM,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_ASSESSMAGIC,READYWEAP); * * *Perc_SetRange(PERC_ASSESSSTOPMAGIC,READYWEAP); * * *Perc_SetRange(PERC_ASSESSTALK,PERC_DIST_DIALOG); * * *Perc_SetRange(PERC_ASSESSWARN,PERC_DIST_INTERMEDIAT); * * *Perc_SetRange(PERC_MOVEMOB,PERC_DIST_DIALOG); * * *Perc_SetRange(PERC_ASSESSSURPRISE,FIGHT_DIST_CANCEL); * * *Perc_SetRange(PERC_OBSERVEINTRUDER,100); * * *Perc_SetRange(PERC_ASSESSREMOVEWEAPON,100); * * *Perc_SetRange(PERC_CATCHTHIEF,100); * * *Perc_SetRange(PERC_ASSESSCALL,100); * * *Perc_SetRange(PERC_MOVENPC,100); * * *Perc_SetRange(PERC_ASSESSCASTER,100); * * *Perc_SetRange(PERC_NPCCOMMAND,100); * * *Perc_SetRange(PERC_OBSERVESUSPECT,100);};func void Perception_Set_Normal(){ * * *self.senses = SENSE_HEAR | SENSE_SEE; * * *self.senses_range = PERC_DIST_ACTIVE_MAX; * * *if(Npc_KnowsInfo(self,1) || C_NpcIsGateGuard(self)) * * *{ * * * * * *Npc_SetPercTime(self,0.3); * * *} * * *else * * *{ * * * * * *Npc_SetPercTime(self,1); * * *}; * * *Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessPlayer); * * *Npc_PercEnable(self,PERC_ASSESSENEMY,B_AssessEnemy); * * *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic); * * *Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage); * * *Npc_PercEnable(self,PERC_ASSESSMURDER,B_AssessMurder); * * *Npc_PercEnable(self,PERC_ASSESSTHEFT,B_AssessTheft); * * *Npc_PercEnable(self,PERC_ASSESSUSEMOB,B_AssessUseMob); * * *Npc_PercEnable(self,PERC_ASSESSENTERROOM,B_AssessPortalCollision); * * *Npc_PercEnable(self,PERC_ASSESSTHREAT,B_AssessThreat); * * *Npc_PercEnable(self,PERC_DRAWWEAPON,B_AssessDrawWeapon); * * *Npc_PercEnable(self,PERC_ASSESSFIGHTSOUND,B_AssessFightSound); * * *Npc_PercEnable(self,PERC_ASSESSQUIETSOUND,B_AssessQuietSound); * * *Npc_PercEnable(self,PERC_ASSESSWARN,B_AssessWarn); * * *Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk); * * *Npc_PercEnable(self,PERC_MOVEMOB,B_MoveMob);};func void Perception_Set_Minimal(){ * * *self.senses = SENSE_HEAR | SENSE_SEE; * * *self.senses_range = PERC_DIST_ACTIVE_MAX; * * *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic); * * *Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_AssessDamage); * * *Npc_PercEnable(self,PERC_ASSESSMURDER,B_AssessMurder); * * *Npc_PercEnable(self,PERC_ASSESSTHEFT,B_AssessTheft); * * *Npc_PercEnable(self,PERC_ASSESSUSEMOB,B_AssessUseMob); * * *Npc_PercEnable(self,PERC_ASSESSENTERROOM,B_AssessPortalCollision);};func void B_ClearPerceptions(var C_Npc slf){ * * *Npc_PercDisable(slf,PERC_ASSESSPLAYER); * * *Npc_PercDisable(slf,PERC_ASSESSENEMY); * * *Npc_PercDisable(slf,PERC_ASSESSBODY); * * *Npc_PercDisable(slf,PERC_ASSESSMAGIC); * * *Npc_PercDisable(slf,PERC_ASSESSDAMAGE); * * *Npc_PercDisable(slf,PERC_ASSESSMURDER); * * *Npc_PercDisable(slf,PERC_ASSESSTHEFT); * * *Npc_PercDisable(slf,PERC_ASSESSUSEMOB); * * *Npc_PercDisable(slf,PERC_ASSESSENTERROOM); * * *Npc_PercDisable(slf,PERC_ASSESSTHREAT); * * *Npc_PercDisable(slf,PERC_DRAWWEAPON); * * *Npc_PercDisable(slf,PERC_ASSESSFIGHTSOUND); * * *Npc_PercDisable(slf,PERC_ASSESSQUIETSOUND); * * *Npc_PercDisable(slf,PERC_ASSESSWARN); * * *Npc_PercDisable(slf,PERC_ASSESSTALK); * * *Npc_PercDisable(slf,PERC_MOVEMOB); * * *Npc_PercDisable(slf,PERC_ASSESSOTHERSDAMAGE); * * *Npc_PercDisable(slf,PERC_ASSESSSTOPMAGIC); * * *Npc_PercDisable(slf,PERC_ASSESSSURPRISE);};func void perception_set_orc(){ * * *Npc_SetPercTime(self,1); * * *if((self.flags & NPC_FLAG_GHOST) == 0) * * *{ * * * * * *self.senses = SENSE_HEAR | SENSE_SEE; * * * * * *self.senses_range = PERC_DIST_ACTIVE_MAX; * * * * * *self.aivar[AIV_MM_FollowTime] = FOLLOWTIME_LONG; * * * * * *self.aivar[AIV_MM_FollowInWater] = TRUE; * * * * * *Npc_PercEnable(self,PERC_ASSESSENEMY,B_MM_AssessEnemy); * * * * * *Npc_PercEnable(self,PERC_ASSESSPLAYER,B_AssessPlayer); * * * * * *Npc_PercEnable(self,PERC_ASSESSMAGIC,B_AssessMagic); * * * * * *Npc_PercEnable(self,PERC_ASSESSDAMAGE,B_MM_AssessDamage); * * * * * *Npc_PercEnable(self,PERC_ASSESSOTHERSDAMAGE,B_MM_AssessOthersDamage); * * * * * *Npc_PercEnable(self,PERC_ASSESSMURDER,B_MM_AssessOthersDamage); * * * * * *Npc_PercEnable(self,PERC_ASSESSTALK,B_AssessTalk); * * *} * * *else * * *{ * * * * * *self.senses = 0; * * * * * *self.senses_range = 0; * * * * * *self.aivar[AIV_MM_FollowTime] = 0; * * * * * *self.aivar[AIV_MM_FollowInWater] = FALSE; * * * * * *Npc_PercEnable(self,PERC_ASSESSUSEMOB,B_AssessUseMob); * * * * * *Npc_PercEnable(self,PERC_MOVEMOB,B_MoveMob); * * * * * *Npc_PercDisable(self,PERC_ASSESSMURDER); * * * * * *Npc_PercDisable(self,PERC_ASSESSTALK); * * * * * *Npc_PercDisable(self,PERC_ASSESSPLAYER); * * * * * *Npc_PercDisable(self,PERC_ASSESSENEMY); * * * * * *Npc_PercDisable(self,PERC_ASSESSBODY); * * * * * *Npc_PercDisable(self,PERC_ASSESSMAGIC); * * * * * *Npc_PercDisable(self,PERC_ASSESSDAMAGE); * * * * * *Npc_PercDisable(self,PERC_ASSESSTHEFT); * * * * * *Npc_PercDisable(self,PERC_DRAWWEAPON); * * * * * *Npc_PercDisable(self,PERC_ASSESSENTERROOM); * * * * * *Npc_PercDisable(self,PERC_ASSESSTHREAT); * * * * * *Npc_PercDisable(self,PERC_ASSESSFIGHTSOUND); * * * * * *Npc_PercDisable(self,PERC_ASSESSQUIETSOUND); * * * * * *Npc_PercDisable(self,PERC_ASSESSWARN); * * * * * *Npc_PercDisable(self,PERC_ASSESSOTHERSDAMAGE); * * * * * *Npc_PercDisable(self,PERC_ASSESSSTOPMAGIC); * * * * * *Npc_PercDisable(self,PERC_ASSESSSURPRISE); * * *};};


После того как исправил ошибочные аргументы, запустил повторную компиляцию, и еще сюрпрайз... которого до этого не было. *:(

1. Story\B_Story\C_DiegoTooFar.d(25): Ошибка: Нельзя преобразовать тип int *в instance

Содержимое файла C_DiegoTooFar.d:

Cпойлер(щелкните, чтобы прочесть):
Код:
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){ * * *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") < (hero + tolerance)) * * *{ * * * * * *return LOC_SWAMP; * * *}
Вместо (hero + tolerance), долно быть (1800 + 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))) * * *{ * * * * * *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;};


В файле, RedefinedFunc.dsc смотрел, там все вроде нормально, по первой ошибке, приведенных функций в этом файле не обнаружено.
Вопрос, а их самим туда нужно прописывать, если да то кагда это нужно делать, в каких случаях?

Содержимое файла CRedefinedFunc.dsc:

Cпойлер(щелкните, чтобы прочесть):
Код:
void B_PlayerFindItem(int#,int);int B_SetPlayerMap(int#);int# B_GetPlayerMap(void);int# PLAYER_HOTKEY_SCREEN_MAP(void);void B_RemoveNpc(int#);int B_GiveInvItems(instance,instance,int#,int);void B_UseItem(instance,int#);int# B_GetBestPlayerMap(void);int# B_GetAnyPlayerMap(void);void B_SetNpcVisual(instance,int,string,int,int,int#);void B_KillNpc(int#);int C_NpcHasAmmo(instance,int#);void B_ExchangeRoutine(int#,string);void B_SetPermAttitude(int#,int);void B_ClearImmortal(int#);void B_SetNpcType(int#,int);void B_ChangeGuild(int#,int);


Вот собсно, за сим усе. *;)
Удачи в отлове, этих мелких гаденышей... И скорейшем выходе новой версии ;D.
Отправить личное сообщение для Ответить с цитированием