- Хроники
- Interlude
- Исходники
- Присутствуют
- Сборка
- другая
Доброй ночи дорогие форумчане.
Потребовалось реализовать "SP" персонажа как валюту (для того что бы можно было вставлять в мультиселл)
Опишу что делал, прошу сильно не гнобить так как навыков Java не имею (скажите ну и нехер тогда лезть, ну мб и правы)
Делал по аналогу "L2Item.ITEM_ID_PC_BANG_POINTS"
И так в файлах где я нашел данный итем (ITEM_ID_PC_BANG_POINTS) я проделал следующие действия.
1) source\gameserver\l2p\gameserver\templates\L2Item.java создал новый новый предмет
2) source\gameserver\l2p\gameserver\data\xml\holder\MultiSellHolder.java я продублировал но с изменениями
3) source\gameserver\l2p\gameserver\clientpackets\RequestMultiSellChoose.java так продублировал
Компилится все без ошибок, геймсервер чистый, но суть проблемы в том что когда нажимаешь на мультисел и кликаешь по итему вылетает крит клиента
Ну собственно так же создал итем в базе sp point c id15236 и в патче создал.
Потребовалось реализовать "SP" персонажа как валюту (для того что бы можно было вставлять в мультиселл)
Опишу что делал, прошу сильно не гнобить так как навыков Java не имею (скажите ну и нехер тогда лезть, ну мб и правы)
Делал по аналогу "L2Item.ITEM_ID_PC_BANG_POINTS"
И так в файлах где я нашел данный итем (ITEM_ID_PC_BANG_POINTS) я проделал следующие действия.
1) source\gameserver\l2p\gameserver\templates\L2Item.java создал новый новый предмет
Код:
public static final int ITEM_ID_SP_POINTS = 15236;
2) source\gameserver\l2p\gameserver\data\xml\holder\MultiSellHolder.java я продублировал но с изменениями
Код:
else if(ingredient.getItemId() == L2Item.ITEM_ID_SP_POINTS)
{
if(!itms.contains(ingredient.getItemId()) && player.getSp() >= ingredient.getItemCount())
itms.add(ingredient.getItemId());
continue;
}
3) source\gameserver\l2p\gameserver\clientpackets\RequestMultiSellChoose.java так продублировал
Код:
else if(ingridientItemId == L2Item.ITEM_ID_SP_POINTS)
{
if(activeChar.getSp() < total_amount)
{
activeChar.sendMessage(activeChar.isLangRus() ? "Вам не хватает SP поинтов." : "You are short of SP points.");
return;
}
if(!ingridient.getMantainIngredient())
_items.add(new ItemData(ingridientItemId, total_amount, null));
}
Код:
else if(id.getId() == L2Item.ITEM_ID_SP_POINTS)
{
activeChar.addSp((int)-count);
activeChar.sendPacket(new SystemMessage(SystemMessage.SP_HAS_DECREASED_BY_S1).addNumber(count));
}
Код:
else if (in.getItemId() == L2Item.ITEM_ID_SP_POINTS)
activeChar.addSp(in.getItemCount() * this._amount);
}
Код:
2023.2.15 23:31:26
OS : Windows Vista 6.2 (Build: 9200)
CPU : GenuineIntel PentiumPro-class processor @ 2901 MHz with 2047MB RAM
Video : Radeon (TM) RX 470 Graphics (7000)
General protection fault!
History: UUIDATA_ITEM::execGetSetItemIDList <- UObject::execClassContext <- (ToolTip Transient.ToolTip0 @ Function Interface.ToolTip.735 : 156B) <- UObject::ProcessEvent <- (ToolTip Transient.ToolTip0, Function Interface.ToolTip.OnEvent) <- XMLUIManager::ExecuteUIEvent <- NCTooltipManager::MakeTooltipInfo <- NCNameCtrl::SetNameData <- UUIAPI_MULTISELLNEEDEDITEM::execAddData <- UObject::execClassContext <- (MultiSellWnd Transient.MultiSellWnd0 @ Function Interface.MultiSellWnd.OnClickItem : 021F) <- UObject::ProcessEvent <- (MultiSellWnd Transient.MultiSellWnd0, Function Interface.MultiSellWnd.OnClickItem) <- NCItemWnd::OnLButtonUp <- NCVirtualWndMain::PassToFocusedWindow <- NCVirtualWndMain::PassToFocusedWindow <- NCVirtualWndMain::PassToFocusedWindow <- NCVirtualWndMain::DispatchWndMsg <- NConsoleWnd::DispatchWndMsgX <- NConsoleWnd::MasterConsoleEventProcess <- UEngine::InputEvent <- UWindowsViewport::CauseInputEvent <- UWindowsViewport::UpdateInput <- UViewport::ReadInput <- APlayerController::Tick <- ALineagePlayerController::Tick <- TickAllActors <- ULevel::Tick <- (NetMode=0) <- TickLevel <- UGameEngine::Tick <- UpdateWorld <- MainLoop
Ну собственно так же создал итем в базе sp point c id15236 и в патче создал.