Как найти оффсеты смены вида NPC в MU Online?

Автор DarkSim, 2012 Авг. 11, 04:14

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Ключевые слова [SEO] оффсеты mu onlinenpc mu разработкисмена вида npcобновление с клиентом 1item_interкак узнать item_inter

DarkSim

В общем не так давно попросили найти оффсеты смены вида вещей некоторых NPC (таких как Marlon, Soldier Elf и прочие, одетые с помощью Preview).

Гебрид поднимал подобную тему, но как оказалось большинству нужны конкретные оффсеты, а не объяснение того как все работает, собственно:

Спойлер
//Marlon:

*(WORD*)(0x0051983A + 7)        = ITEM2(7, 9);          // -> First Weapon Slot
*(BYTE*)(0x00519846 + 6)        = 8;                    // -> First Weapon Level

*(WORD*)(0x00519850 + 7)        = -1;                  // -> Second Weapon Slot

*(WORD*)(0x005197CC + 7)        = ITEM2(7, 9);          // -> Helm Slot
*(BYTE*)(0x005197D8 + 6)        = 7;                    // -> Helm Level

*(WORD*)(0x005197E2 + 7)        = ITEM2(8, 9);          // -> Armor Slot
*(BYTE*)(0x005197EE + 6)        = 7;                    // -> Armor Level

*(WORD*)(0x005197F8 + 7)        = ITEM2(9, 9);          // -> Pants Slot
*(BYTE*)(0x00519804 + 6)        = 7;                    // -> Pants Level

*(WORD*)(0x0051980E + 7)        = ITEM2(10, 9);        // -> Gloves Slot
*(BYTE*)(0x0051981A + 6)        = 7;                    // -> Gloves Level

*(WORD*)(0x00519824 + 7)        = ITEM2(11, 9);        // -> Boots Slot
*(BYTE*)(0x00519830 + 6)        = 7;                    // -> Boots Level

//Elf Soldier:

*(WORD*)(0x005155A8 + 7)        = ITEM2(12, 3);        // -> Wings Slot

*(WORD*)(0x005155B4 + 7)        = ITEM2(7, 24);        // -> Helm Slot
*(BYTE*)(0x005155F0 + 6)        = 13;                  // -> Helm Level

*(WORD*)(0x005155C0 + 7)        = ITEM2(8, 24);        // -> Armor Slot
*(BYTE*)(0x005155FA + 6)        = 13;                  // -> Armor Level

*(WORD*)(0x005155CC + 7)        = ITEM2(9, 24);        // -> Pants Slot
*(BYTE*)(0x00515604 + 6)        = 13;                  // -> Pants Level

*(WORD*)(0x005155D8 + 7)        = ITEM2(10, 24);        // -> Gloves Slot
*(BYTE*)(0x0051560E + 6)        = 13;                  // -> Gloves Level

*(WORD*)(0x005155E4 + 7)        = ITEM2(11, 24);        // -> Boots Slot
*(BYTE*)(0x00515618 + 6)        = 13;                  // -> Boots Level

//Chaos Card Master:

*(WORD*)(0x0051A741 + 7)        = ITEM2(12, 1);        // -> Wings Slot
*(WORD*)(0x0051A705 + 7)        = ITEM2(7, 30);        // -> Helm Slot
*(WORD*)(0x0051A711 + 7)        = ITEM2(8, 30);        // -> Armor Slot
*(WORD*)(0x0051A71D + 7)        = ITEM2(9, 30);        // -> Pants Slot
*(WORD*)(0x0051A729 + 7)        = ITEM2(10, 30);        // -> Gloves Slot
*(WORD*)(0x0051A735 + 7)        = ITEM2(11, 30);        // -> Boots Slot

*(DWORD*)(0x0051A74A + 3)      = 7;                    // -> Set Level

// Crossbow Guard

*(WORD*)(0x00519F07 + 7)        = ITEM2(7, 9);          // -> Helm Slot
*(WORD*)(0x00519F13 + 7)        = ITEM2(8, 9);          // -> Armor Slot
*(WORD*)(0x00519F1F + 7)        = ITEM2(9, 9);          // -> Pants Slot
*(WORD*)(0x00519F2B + 7)        = ITEM2(10, 9);        // -> Gloves Slot
*(WORD*)(0x00519F37 + 7)        = ITEM2(11, 9);        // -> Boots Slot

*(WORD*)(0x00519F43 + 7)        = ITEM2(4, 11);        // -> First Weapon Slot
*(WORD*)(0x00519F4F + 7)        = ITEM2(4, 7);          // -> Second Weapon Slot

// Berdysh Guard

*(WORD*)(0x0051A012 + 7)        = ITEM2(7, 9);          // -> Helm Slot
*(WORD*)(0x0051A01E + 7)        = ITEM2(8, 9);          // -> Armor Slot
*(WORD*)(0x0051A02A + 7)        = ITEM2(9, 9);          // -> Pants Slot
*(WORD*)(0x0051A036 + 7)        = ITEM2(10, 9);        // -> Gloves Slot
*(WORD*)(0x0051A042 + 7)        = ITEM2(11, 9);        // -> Boots Slot

*(WORD*)(0x0051A04E + 7)        = ITEM2(3, 7);          // -> First Weapon Slot
[свернуть]

Версия клиента 1.03.25 (он же 1.03Y+ JPN).

Ну и пока я рылся не мог не заметить как WebZen особенно подчеркнули важность Soldier Elf'a, выделив ему аж отдельную функцию для внешнего вида:

// -> 515596 -> 1 Call
int gMakePreviewSoldierElf(Preview * gPreview)
{
gPreview->WingsSlot            = ITEM2(12, 3);
// ----
gPreview->HelmSlot            = ITEM2(7, 24);
gPreview->HelmLevel            = 13;
// ----
gPreview->ArmorSlot            = ITEM2(8, 24);
gPreview->ArmorLevel        = 13;
// ----
gPreview->PantsSlot            = ITEM2(9, 24);
gPreview->PantsLevel        = 13;
// ----
gPreview->GlovesSlot        = ITEM2(10, 24);
gPreview->GlovesLevel        = 13;
// ----
gPreview->BootsSlot            = ITEM2(11, 24);
gPreview->BootsLevel        = 13;
// ----
gPreview->Action            = eAction::Fly;
gPreview->ModelScale        = 0x3F800000;
gPreview->SelectZone        += 70.0;
// ----
return gPreview->IndexResult;
}

Это кстати фактическое доказательство того, что если потрахаться с маином не долгое время - можно воспроизвести основные структуры, это я к словам от "знатоков", которые во всю твердят, что это все нереальное дело...

И чуть не забыл - ITEM2 это макрос:
#define ITEM_INTER        887 // У каждой версии он свой
#define ITEM2(x, y)        ((x * 512) + y + ITEM_INTER)

Скриншоты:
## здесь был скриншот ##
--
## здесь был скриншот ##

Телега

Простите за глупый вопрос, но как узнать "ITEM_INTER" ?

Edit: узнал. Для 6,3 GMO майна (1.4.4) ITEM_INTER = 493

DarkSim

#2
Телега
1. Search for -> All command sequences... -> push 1 push 8e

2. Переходим к результату (по идеи должен быть всего один) и видим ITEM_INTER в HEX:


----
HEX -> DEC
377 = 887
----
Проверял только на новых маинах (Season 3+)

Похожие темы (5)

Сообщений: 37
Просмотров: 22933

Сообщений: 127
Просмотров: 40406

Сообщений: 32
Просмотров: 13875