Screenshot
[Only registered and activated users can see links. Click Here To Register...]
Serverside - C++
Clientside - C++
Clientside - Python
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]
Serverside - C++
- packet.h: sucht nach & fügt darunterCode:
HEADER_CG_ITEM_DROP2 = 20,
ein.Code:HEADER_CG_ITEM_DESTROY = 21,
- packet.h: sucht nach & fügt darunterCode:
typedef struct command_item_drop2 { [...] } TPacketCGItemDrop2;ein.Code:typedef struct command_item_destroy { BYTE header; TItemPos Cell; } TPacketCGItemDestroy; - packet_info.cpp: sucht nach & fügt darunterCode:
Set(HEADER_CG_ITEM_DROP2, sizeof(TPacketCGItemDrop2), "ItemDrop2", true);
ein.Code:Set(HEADER_CG_ITEM_DESTROY, sizeof(TPacketCGItemDestroy), "ItemDestroy", true);
- input_main.cpp: sucht nach & fügt darunterCode:
void CInputMain::ItemDrop2(LPCHARACTER ch, const char * data) { [...] }ein.Code:void CInputMain::ItemDestroy(LPCHARACTER ch, const char * data) { struct command_item_destroy * pinfo = (struct command_item_destroy *) data; if (ch) ch->DestroyItem(pinfo->Cell); } - input_main.cpp: sucht nach & fügt darunterCode:
case HEADER_CG_ITEM_DROP2: [...] break;
ein.Code:case HEADER_CG_ITEM_DESTROY: if (!ch->IsObserverMode()) ItemDestroy(ch, c_pData); break;
- char_item.cpp: Sucht nach & fügt darüberCode:
bool CHARACTER::DropItem(TItemPos Cell, BYTE bCount)
ein.Code:bool CHARACTER::DestroyItem(TItemPos Cell) { LPITEM item = NULL; if (!CanHandleItem()) { if (NULL != DragonSoul_RefineWindow_GetOpener()) ChatPacket(CHAT_TYPE_INFO, LC_TEXT("°*È*âÀ» ¿¬ »óÅ¿¡¼*´Â ¾ÆÀÌÅÛÀ» ¿Å±æ ¼ö ¾ø½À´Ï´Ù.")); return false; } if (IsDead()) return false; if (!IsValidItemPosition(Cell) || !(item = GetItem(Cell))) return false; if (item->IsExchanging()) return false; if (true == item->isLocked()) return false; if (quest::CQuestManager::instance().GetPCForce(GetPlayerID())->IsRunning() == true) return false; if (item->GetCount() <= 0) return false; SyncQuickslot(QUICKSLOT_TYPE_ITEM, Cell.cell, 255); ITEM_MANAGER::instance().RemoveItem(item); ChatPacket(CHAT_TYPE_INFO, LC_TEXT("Du hast %s zerstoert."), item->GetName()); return true; } - char.h: sucht nach & fügt darüberCode:
bool DropItem(TItemPos Cell, BYTE bCount=0);
ein.Code:bool DestroyItem(TItemPos Cell);
- input.h: sucht nach & fügt darunterCode:
void ItemDrop2(LPCHARACTER ch, const char * data);
ein.Code:void ItemDestroy(LPCHARACTER ch, const char * data);
Clientside - C++
- packet.h: sucht nach & fügt darunterCode:
HEADER_CG_ITEM_DROP2 = 20,
ein.Code:HEADER_CG_ITEM_DESTROY = 21,
- packet.h: sucht nach & fügt darunterCode:
typedef struct command_item_drop2 { [...] } TPacketCGItemDrop2;ein.Code:typedef struct command_item_destroy { BYTE header; TItemPos pos; } TPacketCGItemDestroy; - PythonNetworkStreamPhaseGameItem.cpp: sucht nach & fügt darunterCode:
bool CPythonNetworkStream::SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count) { [...] }ein.Code:bool CPythonNetworkStream::SendItemDestroyPacket(TItemPos pos) { if (!__CanActMainInstance()) return true; TPacketCGItemDestroy itemDestroyPacket; itemDestroyPacket.header = HEADER_CG_ITEM_DESTROY; itemDestroyPacket.pos = pos; if (!Send(sizeof(itemDestroyPacket), &itemDestroyPacket)) { Tracen("SendItemDestroyPacket Error"); return false; } return SendSequence(); } - PythonNetworkStreamModule.cpp: sucht nach & fügt darunterCode:
PyObject* netSendItemDropPacket(PyObject* poSelf, PyObject* poArgs) { [...] }ein.Code:PyObject* netSendItemDestroyPacket(PyObject* poSelf, PyObject* poArgs) { TItemPos Cell; if (!PyTuple_GetInteger(poArgs, 0, &Cell.cell)) return Py_BuildException(); CPythonNetworkStream& rkNetStream = CPythonNetworkStream::Instance(); rkNetStream.SendItemDestroyPacket(Cell); return Py_BuildNone(); } - PythonNetworkStreamModule.cpp: sucht nach & fügt darunterCode:
{ "SendItemDropPacketNew", netSendItemDropPacketNew, METH_VARARGS },ein.Code:{ "SendItemDestroyPacket", netSendItemDestroyPacket, METH_VARARGS }, - PythonNetworkStream.h: sucht nach & fügt darunterCode:
bool SendItemDropPacketNew(TItemPos pos, DWORD elk, DWORD count);
ein.Code:bool SendItemDestroyPacket(TItemPos pos);
Clientside - Python
- uiCommon.py: sucht nach & fügt darunterCode:
class QuestionDialog(ui.ScriptWindow): [...]
ein.Code:class QuestionDialogItem(ui.ScriptWindow): def __init__(self): ui.ScriptWindow.__init__(self) self.__CreateDialog() def __del__(self): ui.ScriptWindow.__del__(self) def __CreateDialog(self): pyScrLoader = ui.PythonScriptLoader() pyScrLoader.LoadScriptFile(self, "uiscript/questiondialogitem.py") self.board = self.GetChild("board") self.textLine = self.GetChild("message") self.acceptButton = self.GetChild("accept") self.destroyButton = self.GetChild("destroy") self.cancelButton = self.GetChild("cancel") def Open(self): self.SetCenterPosition() self.SetTop() self.Show() def Close(self): self.Hide() def SetWidth(self, width): height = self.GetHeight() self.SetSize(width, height) self.board.SetSize(width, height) self.SetCenterPosition() self.UpdateRect() def SAFE_SetAcceptEvent(self, event): self.acceptButton.SAFE_SetEvent(event) def SAFE_SetCancelEvent(self, event): self.cancelButton.SAFE_SetEvent(event) def SetAcceptEvent(self, event): self.acceptButton.SetEvent(event) def SetDestroyEvent(self, event): self.destroyButton.SetEvent(event) def SetCancelEvent(self, event): self.cancelButton.SetEvent(event) def SetText(self, text): self.textLine.SetText(text) def SetAcceptText(self, text): self.acceptButton.SetText(text) def SetCancelText(self, text): self.cancelButton.SetText(text) def OnPressEscapeKey(self): self.Close() return TRUE - uiScript/questiondialogitem.py: aus dem Anhang herunterladen, einfügen & packen.
- game.py: sucht in der definition __DropItem nach dem ersten & ersetzt es durchCode:
itemDropQuestionDialog = uiCommon.QuestionDialog()
Code:itemDropQuestionDialog = uiCommon.QuestionDialogItem()
- game.py: ein paar Zeilen da drunter findet ihr & fügt darunterCode:
itemDropQuestionDialog.SetAcceptEvent(lambda arg=TRUE: self.RequestDropItem(arg))
ein.Code:itemDropQuestionDialog.SetDestroyEvent(lambda arg=TRUE: self.RequestDestroyItem(arg))
- game.py: sucht nach & fügt darunterCode:
def RequestDropItem(self, answer): [...]
ein.Code:def RequestDestroyItem(self, answer): if not self.itemDropQuestionDialog: return if answer: dropType = self.itemDropQuestionDialog.dropType dropNumber = self.itemDropQuestionDialog.dropNumber if player.SLOT_TYPE_INVENTORY == dropType: if dropNumber == player.ITEM_MONEY: return else: self.__SendDestroyItemPacket(dropNumber) self.itemDropQuestionDialog.Close() self.itemDropQuestionDialog = None constInfo.SET_ITEM_DROP_QUESTION_DIALOG_STATUS(0)
- game.py: sucht nach & fügt darunterCode:
def __SendDropItemPacket(self, itemVNum, itemCount, itemInvenType = player.INVENTORY): [...]
ein.Code:def __SendDestroyItemPacket(self, itemVNum, itemInvenType = player.INVENTORY): if uiPrivateShopBuilder.IsBuildingPrivateShop(): chat.AppendChat(chat.CHAT_TYPE_INFO, localeInfo.DROP_ITEM_FAILURE_PRIVATE_SHOP) return net.SendItemDestroyPacket(itemVNum)
- locale/xx/locale_interface.txt: fügt dort irgendwo ein.Code:
DESTROY Zerstören
[Only registered and activated users can see links. Click Here To Register...]