Quote:
Originally Posted by migisenpai
nMenu is an NPC flag that tells the client whether to allow the menu to be accessible or not via the lish that appears when u interact with an NPC.
You said that you wanted to make your own "NPC menu" is why i suggested the snippet of code from my first comment. But if you just want to see nMenu then by all means you are on track. Unpack 005_00005.IMG and you can see it there.
|
Hmm. So I should look into "005_00005.IMG". Allright. I ve already used Megabyte's imgtools but that didnt worked. It didnt gave me any info just some "nSpeech" data. I will try other ways to look deeper thank you. :handsdown:
Quote:
Originally Posted by lnwnuyhodd
Code:
void NPCUI::InitForClickNPC( NPC_OBJECT *tNPC_INFO )
{
int i;
int j;
int k;
int m;
int n;
int l;
int v9;
UI::OffAllSubUI(1);
self->nInfo = tNPC_INFO->nInfo;
self->mActive = 1;
self->nPage[0] = -1;
self->nPage[1] = -1;
self->nPage[2] = -1;
self->nPage[3] = -1;
self->nPage[4] = -1;
self->nPage[5] = -1;
for ( i = 0; i < 100; i++ )
self->bIsClick[i] = 0;
for ( j = 0; j < 10; j++ )
self->mMenuBtn[j] = 0;
for ( k = 0; k < 6; k++ )
{
self->nIndex[k] = 0;
for ( l = 0; l < 9; l++ )
self->uInv[k][l] = 0;
}
self->mMenuBtn[0] = 1;
self->mMenuBtn[1] = 2;
v9 = 2;
for ( m = 0; m < 100; m++ )
{
if ( self->nInfo->nMenu[m] == 2 && v9 <= 8 )
{
switch ( m )
{
case 0:
self->mMenuBtn[v9++] = 4;
break;
case 1:
self->mMenuBtn[v9++] = 5;
break;
case 2:
self->mMenuBtn[v9++] = 6;
break;
case 3:
self->mMenuBtn[v9++] = 7;
break;
case 4:
self->mMenuBtn[v9++] = 8;
break;
case 5:
self->mMenuBtn[v9++] = 9;
break;
case 6:
self->mMenuBtn[v9++] = 10;
break;
case 7:
self->mMenuBtn[v9++] = 11;
break;
case 8:
self->mMenuBtn[v9++] = 12;
break;
case 9:
self->mMenuBtn[v9++] = 13;
break;
case 10:
self->mMenuBtn[v9++] = 46;
break;
case 11:
self->mMenuBtn[v9++] = 22;
break;
case 12:
self->mMenuBtn[v9++] = 15;
break;
case 13:
self->mMenuBtn[v9++] = 16;
break;
case 14:
self->mMenuBtn[v9++] = 17;
break;
case 15:
self->mMenuBtn[v9++] = 41;
break;
case 16:
self->mMenuBtn[v9++] = 42;
break;
case 17:
self->mMenuBtn[v9++] = 18;
break;
case 18:
self->mMenuBtn[v9++] = 14;
break;
case 19:
self->mMenuBtn[v9++] = 20;
break;
case 20:
self->mMenuBtn[v9++] = 21;
break;
case 21:
self->mMenuBtn[v9++] = 47;
break;
case 22:
self->mMenuBtn[v9++] = 23;
break;
case 23:
self->mMenuBtn[v9++] = 19;
break;
case 24:
if ( mMAIN[0].mWorldIndex == 40 )
self->mMenuBtn[v9] = 0;
else
self->mMenuBtn[v9] = 24;
++v9;
break;
case 25:
self->mMenuBtn[v9++] = 25;
break;
case 26:
self->mMenuBtn[v9++] = 26;
break;
case 27:
self->mMenuBtn[v9++] = 27;
break;
case 28:
if ( mMAIN[0].mWorldIndex == 40 )
self->mMenuBtn[v9] = 0;
else
self->mMenuBtn[v9] = 28;
++v9;
break;
case 29:
if ( mMAIN[0].mWorldIndex == 40 )
self->mMenuBtn[v9] = 0;
else
self->mMenuBtn[v9] = 48;
++v9;
break;
case 30:
self->mMenuBtn[v9++] = 29;
break;
case 31:
self->mMenuBtn[v9++] = 30;
break;
case 32:
self->mMenuBtn[v9++] = 55;
break;
case 33:
self->mMenuBtn[v9++] = 40;
break;
case 34:
self->mMenuBtn[v9++] = 54;
break;
case 35:
self->mMenuBtn[v9++] = 36;
break;
case 36:
self->mMenuBtn[v9++] = 33;
break;
case 37:
self->mMenuBtn[v9++] = 34;
break;
case 38:
if ( mMAIN[0].mWorldIndex == 40 )
self->mMenuBtn[v9] = 0;
else
self->mMenuBtn[v9] = 35;
++v9;
break;
case 39:
self->mMenuBtn[v9++] = 37;
break;
case 40:
self->mMenuBtn[v9++] = 38;
break;
case 41:
self->mMenuBtn[v9++] = 39;
break;
case 42:
self->mMenuBtn[v9++] = 43;
break;
case 43:
self->mMenuBtn[v9++] = 44;
break;
case 44:
self->mMenuBtn[v9++] = 45;
break;
case 45:
self->mMenuBtn[v9++] = 49;
break;
case 46:
self->mMenuBtn[v9++] = 50;
break;
case 47:
self->mMenuBtn[v9++] = 51;
break;
case 48:
self->mMenuBtn[v9++] = 52;
break;
case 49:
self->mMenuBtn[v9++] = 53;
break;
case 52:
self->mMenuBtn[v9++] = 58;
break;
case 53:
self->mMenuBtn[v9++] = 59;
break;
case 54:
self->mMenuBtn[v9++] = 56;
break;
case 56:
self->mMenuBtn[v9++] = 61;
break;
case 57:
self->mMenuBtn[v9++] = 62;
break;
case 58:
self->mMenuBtn[v9++] = 63;
break;
case 62:
self->mMenuBtn[v9++] = 64;
break;
case 65:
self->mMenuBtn[v9++] = 66;
break;
case 66:
self->mMenuBtn[v9++] = 67;
break;
case 67:
self->mMenuBtn[v9++] = 68;
break;
case 68:
self->mMenuBtn[v9++] = 69;
break;
case 69:
self->mMenuBtn[v9++] = 70;
break;
case 70:
self->mMenuBtn[v9++] = 71;
break;
case 71:
self->mMenuBtn[v9++] = 72;
break;
case 72:
self->mMenuBtn[v9++] = 73;
break;
default:
continue;
}
}
}
self->mMenuBtn[9] = 3;
self->nWorkIdx = 0;
for ( n = 0; n < 5; n++ )
self->nSpeechNum[n] = n >= self->nInfo->nSpeechNum;
self->nSpeechIndex = -1;
if ( tNPC_INFO->nAction.aSort != 1 )
{
tNPC_INFO->nAction.aSort = 1;
tNPC_INFO->nAction.aFrame = 0.0f;
if ( tNPC_INFO->nInfo->nIndex != 63 && tNPC_INFO->nInfo->nIndex != 113 && tNPC_INFO->nInfo->nIndex != 213 && tNPC_INFO->nInfo->nIndex != 313 && tNPC_INFO->nInfo->nIndex != 7 )
tNPC_INFO->nAction.aFront = UTIL::GetYAngle( tNPC_INFO->nAction.aLocation[0], tNPC_INFO->nAction.aLocation[2], mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[0], mPLAY[0].mAVATAR_OBJECT[0].mDATA.aAction.aLocation[2]);
NPC_OBJECT::PlayActionSound( tNPC_INFO );
}
}
mMenuBtn[0] = 1; //talk
mMenuBtn[1] = 2; //quest
mMenuBtn[9] = 3; //close menu
... etc
for .IMG
Code:
//int tMenuIndex = self->mMenuBtn[?];
int NPCUI::Init_000( int tMenuIndex )
{
int result;
switch ( tMenuIndex )
{
case 1:
result = 408;
break;
case 2:
result = 411;
break;
case 3:
result = 423;
break;
case 4:
result = 468;
break;
case 5:
result = 456;
break;
case 6:
result = 450;
break;
case 7:
result = 447;
break;
case 8:
result = 414;
break;
case 9:
result = 2394;
break;
case 10:
result = 462;
break;
case 11:
result = 417;
break;
case 12:
result = 459;
break;
case 13:
result = 728;
break;
case 14:
result = 3327;
break;
case 15:
result = 746;
break;
case 16:
result = 831;
break;
case 17:
result = 960;
break;
case 18:
result = 976;
break;
case 19:
result = 3330;
break;
case 20:
result = 417;
break;
case 21:
result = 1172;
break;
case 22:
result = 3307;
break;
case 23:
result = 3310;
break;
case 24:
result = 3502;
break;
case 25:
result = 1360;
break;
case 26:
result = 1480;
break;
case 27:
result = 1565;
break;
case 28:
result = 1590;
break;
case 29:
result = 1631;
break;
case 30:
result = 1662;
break;
case 33:
result = 2426;
break;
case 34:
result = 456;
break;
case 35:
result = 2650;
break;
case 36:
result = 1815;
break;
case 37:
result = 2813;
break;
case 38:
result = 2976;
break;
case 39:
result = 3079;
break;
case 40:
result = 3133;
break;
case 41:
result = 3144;
break;
case 42:
result = 3139;
break;
case 43:
result = 3158;
break;
case 44:
result = 3161;
break;
case 45:
result = 3172;
break;
case 46:
result = 3176;
break;
case 47:
result = 3195;
break;
case 48:
result = 3199;
break;
case 49:
result = 3202;
break;
case 50:
result = 3205;
break;
case 51:
result = 3244;
break;
case 52:
result = 3266;
break;
case 53:
result = 3291;
break;
case 54:
result = 3449;
break;
case 55:
result = 3706;
break;
case 56:
result = 3513;
break;
case 58:
result = 3779;
break;
case 59:
result = 3782;
break;
case 61:
result = 417;
break;
case 62:
result = 2999;
break;
case 63:
result = 3902;
break;
case 64:
result = 3970;
break;
case 66:
result = 3999;
break;
case 67:
result = 4002;
break;
case 68:
result = 4018;
break;
case 69:
result = 4022;
break;
case 70:
result = 4026;
break;
case 71:
result = 4122;
break;
case 72:
result = 4126;
break;
case 73:
result = 4148;
break;
default:
result = 0;
break;
}
return result;
}
|
Well, there are a lot of information here thank you. The main problem is I cant acquire these infos in my client. Are these infos taken by IDA from 0005_0005.IMG ? or twelvesky2.exe. Cant see those codes via disassemlers...
Thanks for help. :handsdown: