Доброго вечера. Не работал второй (правый)слот инвентаря под ушки, маски. Починил это, он стал работать, но сразу 2 слота (например ушки + маска) одеть не могу. Один снимается (с правого слота) второй одевается (в левый слот).
Мой код решения проблемы с этим слотом.
Код:
if (BodyPart == 65536) //Если используется слот Hair
{
if (pItem->pSID->nItemID == 7680) //Если этот айтем ушки.
{
BodyPart = 262144; //вставляем его в правый слот
}else
{
BodyPart = 65536; //Иначе все остальное вставляем в левый слот.
}
}
Как научить их дружить? сделать не взаимозменяемыми ?(естественно шляпы и короны я отдельно выведу, чтобы они занимали 2 слота)
Функции ItemListFix и InventoryUpdateFix
В итемдате есть параметр slot_bit_type, в плане с шапками он принимает hair, hair2 и hairall (кажется), что собсна и есть - право, лево и оба сразу.
А у вас всё выглядит так, как будто уши использую в датапаке Hair, а вы хардкодом в движке их перегоняете в Hair2.
Я может конечно не до конца чёто понял, но выглядит со стороны всё именно так.
В итемдате есть параметр slot_bit_type, в плане с шапками он принимает hair, hair2 и hairall (кажется), что собсна и есть - право, лево и оба сразу.
А у вас всё выглядит так, как будто уши использую в датапаке Hair, а вы хардкодом в движке их перегоняете в Hair2.
Я может конечно не до конца чёто понял, но выглядит со стороны всё именно так.
у ванги в датапаке не работает hair2, hairall, все ставит в левую ячейку. здесь нужно именно в его исходном коде копать. я даже готов для каждого итема писать условие, в какую ячейку ставить, лишь бы оно их не стокало, но оно все выходит взаимозаменяемо, не важно, в какой ячейке стоит
у ванги в датапаке не работает hair2, hairall, все ставит в левую ячейку. здесь нужно именно в его исходном коде копать. я даже готов для каждого итема писать условие, в какую ячейку ставить, лишь бы оно их не стокало, но оно все выходит взаимозаменяемо, не важно, в какой ячейке стоит
Сам Vanganth пытался переделать слоты.
Можете найти в коде громадную функцию CSharedFactory::ReallocatePaperDoll() . И судя по тому что она закомменчена, он это дело забросил. Это очень непросто патчить каждую функцию которая работает с предметами и инвентарем. Но вы можете пробововать.
А еще можно задействовать другие слоты - например слот для белья или плащей
Сам Vanganth пытался переделать слоты.
Можете найти в коде громадную функцию CSharedFactory::ReallocatePaperDoll() . И судя по тому что она закомменчена, он это дело забросил. Это очень непросто патчить каждую функцию которая работает с предметами и инвентарем. Но вы можете пробововать.
А еще можно задействовать другие слоты - например слот для белья или плащей
Хммм, а это идея, сделать маски, их не так уж много, тип слота нижнее белье, и уже условием переставлять их в слот правый hair2. Стоит попробовать на заменяемость, если сервер пропустит такое, и будет одеваться 2 предмета, все окей. Для hairall я решение нашёл, оно работает. Занимает 2 ячейки.
That's right, the error is fixed by sending the value of slothairex and slothairall to itemparser.cpp. But the variable accepted by this parameter in l2server.exe is a uint and can hold a maximum of 65536. An overflow occurs. You need to change the variable type from uint v152 to UINT64.
Сам Vanganth пытался переделать слоты.
Можете найти в коде громадную функцию CSharedFactory::ReallocatePaperDoll() . И судя по тому что она закомменчена, он это дело забросил. Это очень непросто патчить каждую функцию которая работает с предметами и инвентарем. Но вы можете пробововать.
А еще можно задействовать другие слоты - например слот для белья или плащей
Может стоит inventory поковырять и обратить внимание как устроен оружие 1 и 2 рук, и щит, и опираясь на это сделать правку для своих ячеек, если конечно верно выставлены слоты в дп
в моей сборке ch4-il на базе вагназ в далеком 2014 я по нормальному дополнил эти слоты. переписывать функции и патчить там многовато. главное стек расширять в десятке функций