#include "SunClientPrecompiledHeader.h" #ifdef _NA_000000_20140120_SMART_NPC_SYSTEM #include "uiSmartNpcDialogMan/uiSmartNpcDialogMan.h" #include "uiSmartNpcDialogMan/uiSmartNpcDialogReply.h" #include "InterfaceManager.h" #include "ObjectManager.h" #include "PacketStruct_CG_SmartNPC.h" #include "Hero.h" #include "GlobalFunc.h" #include "ItemUnitRenderer.h" #include "ItemTypeList.h" #include "ItemInfoParser.h" #include "RewardInfoList.h" #include "ItemManager.h" #include "uiToolTipMan/uiToolTipMan.h" #include "MouseHandler.h" #include "Mouse.h" #include "Application.h" #include "json/json.h" uiSmartNpcDialogReply::uiSmartNpcDialogReply(InterfaceManager* ui_manager) : uiSmartNpcDialog(ui_manager), list_control_(NULL), item_unit_renderer_(NULL) { dialog_type_ = SmartDialogType_Reply; RegisterControlPosition(StrToWzID("B999"), kControl_Button_B999); RegisterControlPosition(StrToWzID("T999"), kControl_Text_T999); RegisterControlPosition(StrToWzID("L000"), kControl_List_L000); RegisterControlPosition(StrToWzID("B001"), kControl_Button_B001); RegisterControlPosition(StrToWzID("B002"), kControl_Button_B002); RegisterControlPosition(StrToWzID("B003"), kControl_Button_B003); RegisterControlPosition(StrToWzID("E001"), kControl_Edit_E001); RegisterControlPosition(StrToWzID("SLT0"), kControl_Button_SLT0); RegisterControlPosition(StrToWzID("SLT1"), kControl_Button_SLT1); RegisterControlPosition(StrToWzID("SLT2"), kControl_Button_SLT2); RegisterControlPosition(StrToWzID("SLT3"), kControl_Button_SLT3); RegisterControlPosition(StrToWzID("SLT4"), kControl_Button_SLT4); RegisterControlPosition(StrToWzID("P006"), kControl_Picture_P006); RegisterControlPosition(StrToWzID("P007"), kControl_Picture_P007); RegisterControlPosition(StrToWzID("P008"), kControl_Picture_P008); RegisterControlPosition(StrToWzID("P009"), kControl_Picture_P009); RegisterControlPosition(StrToWzID("P010"), kControl_Picture_P010); for (int i = 0; i < uiSmartNpcDialogMan::MaxReplyButton; ++i) { button_event_id[i].event_id = 0; button_event_id[i].step = 0; } } uiSmartNpcDialogReply::~uiSmartNpcDialogReply() { } VOID uiSmartNpcDialogReply::Init(CDrawBase* pDrawBase) { draw_ = pDrawBase; SCItemSlotContainer::Init(kSlotTotalCount, SI_SMARTNPC); // ·£´õ·¯ ÃʱâÈ­ item_unit_renderer_ = new ItemUnitRenderer; item_unit_renderer_->Init(uiBase::GetDrawBase(), kSlotTotalCount); uiBase::Init(pDrawBase); } void uiSmartNpcDialogReply::Release() { if(item_unit_renderer_) { item_unit_renderer_->Release(); delete item_unit_renderer_; item_unit_renderer_ = NULL; } } BOOL uiSmartNpcDialogReply::CreateControls(BYTE sub_type) { CDialogWZ* dialog_ = GetDialogWZ(); // ui ¹«´Ì - Áß¾Ó»ó´Ü CCtrlPictureWZ* picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P000")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 100, dialog_->GetDlgY(), 100, 20); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 430; image_sub_info.m_sFRect.fTopY = 940; image_sub_info.m_sFRect.fWidth = 100; image_sub_info.m_sFRect.fHeight = 20; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); picture_control->SetDiscardMessage(true); } // ui ¹«´Ì - ÁÂÃø»ó´Ü picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P001")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 12, dialog_->GetDlgY() + 11, 100, 20); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 430; image_sub_info.m_sFRect.fTopY = 960; image_sub_info.m_sFRect.fWidth = 100; image_sub_info.m_sFRect.fHeight = 20; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); picture_control->SetDiscardMessage(true); } // ui ¹«´Ì - ¿ìÃø»ó´Ü picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P002")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 168, dialog_->GetDlgY() + 11, 100, 20); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 430; image_sub_info.m_sFRect.fTopY = 980; image_sub_info.m_sFRect.fWidth = 100; image_sub_info.m_sFRect.fHeight = 20; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); picture_control->SetDiscardMessage(true); } // â À̸§ CCtrlStaticWZ* static_control = CreateContorlStatic(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("T999")); if (static_control == NULL) { return FALSE; } else { static_control->MoveWindowWZ(dialog_->GetDlgX() + 24, dialog_->GetDlgY() + 12, 233, 17); } CCtrlButtonWZ* button_control; // x ¹öư if (sub_type != SmartDialogSubType_ForceOk) { button_control = CreateContorlCloseButton(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("B999")); if (button_control == NULL) { return FALSE; } else { button_control->MoveWindowWZ(dialog_->GetDlgX() + 248, dialog_->GetDlgY() + 13, 17, 17); } } // ¸®½ºÆ® if ((sub_type == SmartDialogSubType_Ok) || (sub_type == SmartDialogSubType_OkNo) || (sub_type == SmartDialogSubType_OkNoCancle) || (sub_type == SmartDialogSubType_ForceOk)) { CCtrlListWZ* list_control = CreateContorlList(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("L000")); if (list_control == NULL) { return FALSE; } else { list_control->MoveWindowWZ(dialog_->GetDlgX() + 27, dialog_->GetDlgY() + 49, 211, 62); list_control_ = list_control; RECT list_rect = list_control_->GetSizeRect(); ftext_render_.Init(draw_, list_rect); ftext_render_.SetMargin(0,0,0,-5); ftext_render_.SetGap(0,0); ftext_render_.convertLineInfo(); } // ¸®½ºÆ® µÚ¿¡ À̹ÌÁö1 picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P003")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 21, dialog_->GetDlgY() + 41, 238, 77); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 5; image_sub_info.m_fTileCornerY = 5; image_sub_info.m_nType = SI_TSUBINFO::DrawType_TileExpand; image_sub_info.m_sFRect.fTopX = 398; image_sub_info.m_sFRect.fTopY = 147; image_sub_info.m_sFRect.fWidth = 17; image_sub_info.m_sFRect.fHeight = 17; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); } // ¸®½ºÆ® µÚ¿¡ À̹ÌÁö2 picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P004")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 13, dialog_->GetDlgY() + 33, 254, 93); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 12; image_sub_info.m_fTileCornerY = 12; image_sub_info.m_nType = SI_TSUBINFO::DrawType_TileExpand; image_sub_info.m_sFRect.fTopX = 390; image_sub_info.m_sFRect.fTopY = 0; image_sub_info.m_sFRect.fWidth = 26; image_sub_info.m_sFRect.fHeight = 26; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); } } // 3Á¾ ¹öư if ((sub_type == SmartDialogSubType_Ok) || (sub_type == SmartDialogSubType_ForceOk)) { button_control = CreateContorlButton(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Button_B001)); if (button_control == NULL) { return FALSE; } else { button_control->MoveWindowWZ(dialog_->GetDlgX() + 88, dialog_->GetDlgY() + 125, 104, 29); } } else if ((sub_type == SmartDialogSubType_OkNo) || (sub_type == SmartDialogSubType_Edit) || (sub_type == SmartDialogSubType_Slot) || (sub_type == SmartDialogSubType_SlotInput)) { for (int i = 0; i < 2; ++i) { button_control = CreateContorlButton(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Button_B001+i)); if (button_control == NULL) { return FALSE; } else { button_control->MoveWindowWZ(dialog_->GetDlgX() + 33 + (i*110), dialog_->GetDlgY() + 125, 104, 29); } } } else if (sub_type == SmartDialogSubType_OkNoCancle) { for (int i = 0; i < 3; ++i) { button_control = CreateContorlButton(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Button_B001+i)); if (button_control == NULL) { return FALSE; } else { button_control->MoveWindowWZ(dialog_->GetDlgX() + 19 + (83*i), dialog_->GetDlgY() + 125, 79, 29); } } } // ¿¡µðÆ® if (sub_type == SmartDialogSubType_Edit) { // ¿¡µðÆ® µÚ¿¡ À̹ÌÁö picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, StrToWzID("P005")); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 27, dialog_->GetDlgY() + 49, 221, 69); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = ""; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 0; image_sub_info.m_sFRect.fTopY = 0; image_sub_info.m_sFRect.fWidth = 0; image_sub_info.m_sFRect.fHeight = 0; image_sub_info.m_color = 0xA0000000; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); } // ¿¡µðÆ®ÄÁÆ®·Ñ CCtrlMultilineEditWZ* edit_control = CreateContorlEdit(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Edit_E001)); if (edit_control == NULL) { return FALSE; } else { edit_control->MoveWindowWZ(dialog_->GetDlgX() + 27, dialog_->GetDlgY() + 49, 231, 69); GlobalFunc::SetFocus((SolarDialog*)this, edit_control); } } // ½½·Ô À̹ÌÁö if ((sub_type == SmartDialogSubType_Slot) || (sub_type == SmartDialogSubType_SlotInput)) { // ½½·Ô ¹è°æ À̹ÌÁö picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Picture_P011)); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 17, dialog_->GetDlgY() + 38, 246, 87); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 5; image_sub_info.m_fTileCornerY = 5; image_sub_info.m_nType = SI_TSUBINFO::DrawType_TileExpand; image_sub_info.m_sFRect.fTopX = 398; image_sub_info.m_sFRect.fTopY = 147; image_sub_info.m_sFRect.fWidth = 17; image_sub_info.m_sFRect.fHeight = 17; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); } for (int i = 0; i < 5; ++i) { // ½½·Ô µÚ¿¡ À̹ÌÁö picture_control = CreateContorlPicture(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Picture_P006+i)); if (picture_control == NULL) { return FALSE; } else { picture_control->MoveWindowWZ(dialog_->GetDlgX() + 32 + (i*(44)), dialog_->GetDlgY() + 65, 36, 36); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = "Common_bg01.tga"; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 531; image_sub_info.m_sFRect.fTopY = 245; image_sub_info.m_sFRect.fWidth = 36; image_sub_info.m_sFRect.fHeight = 36; image_sub_info.m_color = 0xffffffff; //RGBA(255,255,255,255); picture_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); } button_control = CreateContorlButton(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY, GetControlID_byPosition(kControl_Button_SLT0+i)); if (button_control == NULL) { return FALSE; } else { button_control->MoveWindowWZ(dialog_->GetDlgX() + 34 + (i*(44)), dialog_->GetDlgY() +67, 32, 32); SI_TSUBINFO image_sub_info; image_sub_info.Initialize(); image_sub_info.m_blIs = true; image_sub_info.m_sImageName = ""; image_sub_info.m_blUseGradation = false; image_sub_info.m_fTileCornerX = 0; image_sub_info.m_fTileCornerY = 0; image_sub_info.m_nType = SI_TSUBINFO::DrawType_Whole; image_sub_info.m_sFRect.fTopX = 0; image_sub_info.m_sFRect.fTopY = 0; image_sub_info.m_sFRect.fWidth = 0; image_sub_info.m_sFRect.fHeight = 0; image_sub_info.m_color = 0; button_control->SetCtrlDetailImageFormat(E_BASE, &image_sub_info); image_sub_info.Initialize(); button_control->SetCtrlDetailImageFormat(E_ON, &image_sub_info); button_control->SetCtrlDetailImageFormat(E_CLICK, &image_sub_info); button_control->SetCtrlDetailImageFormat(E_DISABLE, &image_sub_info); button_control->SetCtrlDetailImageFormat(E_CHECK, &image_sub_info); } } } return TRUE; } void uiSmartNpcDialogReply::SetControlText(BYTE contorl_index, const TCHAR *text_massage) { if (contorl_index >= kControl_Size) { return; } switch (contorl_index) { case kControl_Text_T999: { CCtrlStaticWZ* control = static_cast(GetControlWZ_byPosition(contorl_index)); if (control) { control->SetTextWZ(text_massage); } } break; case kControl_Button_B001: case kControl_Button_B002: case kControl_Button_B003: { CCtrlButtonWZ* control = static_cast(GetControlWZ_byPosition(contorl_index)); if (control) { control->SetTextWZ(text_massage); } } break; case kControl_List_L000: { SetTextMessage(text_massage); } break; } } void uiSmartNpcDialogReply::SetControlEventID(BYTE contorl_index, DWORD event_id, DWORD step) { if (contorl_index >= kControl_Size) { return; } switch (contorl_index) { case kControl_Button_B001: case kControl_Button_B002: case kControl_Button_B003: { CCtrlButtonWZ* control = static_cast(GetControlWZ_byPosition(contorl_index)); if (control) { int index = contorl_index - kControl_Button_B001; button_event_id[index].event_id = event_id; button_event_id[index].step = step; } } break; } } void uiSmartNpcDialogReply::SetSlotItem(BYTE slot_index, DWORD item_code, DWORD item_number) { // º¸»ó ½½·Ô °»½Å if (kSlotTotalCount <= slot_index) { return; } InsertSlot(kControl_Button_SLT0 + slot_index, item_code, item_number); } void uiSmartNpcDialogReply::OnShowWindow(BOOL val) { if (val) { if (GetSubType() == SmartDialogSubType_ForceOk) { g_InterfaceManager.LockDlgs(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY); } else { keyMsg msg; ZeroMemory(&msg,sizeof(msg)); msg.dwType=eDoType_SmartReply_Dialog; msg.wParam=IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY; msg.DoSomething=GlobalFunc::DoSmartNpcReplyDialog; g_KeyQueueManager.PushBack(msg); } } else { if (GetSubType() == SmartDialogSubType_ForceOk) { g_InterfaceManager.UnLockDlgs(); } else { g_KeyQueueManager.DeleteMsg(eDoType_SmartReply_Dialog); } } } void uiSmartNpcDialogReply::OnRenderSolarDialog() { if (GetSubType() == SmartDialogSubType_ForceOk) { RECT rc; POINT pt = g_pApplication->Get2DModeMapping(); SetRect(&rc, 0, 0, pt.x, pt.y); g_pSunRenderer->ColorFill(WzColor_RGBA(0,0,0,128), 0, 0, static_cast(rc.right), static_cast(rc.bottom)); GetDialogWZ()->OnDraw(true); } ftext_render_.Render(); if (item_unit_renderer_) { item_unit_renderer_->Render(); } RenderTooltip(); } void uiSmartNpcDialogReply::OnUpdateSolarDialog() { if (GetOwnerKey() != 0) { Object* object = (g_ObjectManager.GetObject(GetOwnerKey())); if (object && g_pHero) { WzVector vDiff = object->GetPosition() - g_pHero->GetVisiblePos(); float distance = VectorLength2(&vDiff); if (distance > (DISTANCE_NPC_MEET * DISTANCE_NPC_MEET)) { //g_InterfaceManager.DeleteInterface(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_MENU); SetDestroyWindow(TRUE); return; } } } if (list_control_ == NULL) { return; } RECT list_rect = list_control_->GetSizeRect(); ftext_render_.SetRect(list_rect); } void uiSmartNpcDialogReply::MessageProc(SI_MESSAGE* message) { if (IsLock()) return; switch (message->eResultMsg) { case RT_MSG_LBUTTONCLICK: OnLButtonClick(message); break; case RT_MSG_RBUTTONCLICK: OnRButtonClick(message); break; case RT_MSG_MOUSEOVER: { POSTYPE position = static_cast(GetControlPosition_byID(message->dwCtrlID)); if (position >= 0 && position < this->GetMaxSlotNum()) { if (!IsEmpty(position)) { SCSlot& rSlot = GetSlot(position); m_MouseOverObject.eMouseOverType = eMOUSE_OVER_SLOT; m_MouseOverObject.pSlot = &rSlot; } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } else { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } } break; default: SolarDialog::MessageProc(message); break; } } bool uiSmartNpcDialogReply::OnLButtonClick(SI_MESSAGE* message) { switch (GetControlPosition_byID(message->dwCtrlID)) { case kControl_Button_B999: { g_InterfaceManager.DeleteInterface(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY); } break; case kControl_Button_B001: case kControl_Button_B002: case kControl_Button_B003: { DWORD control_position = GetControlPosition_byID(message->dwCtrlID); int index = control_position - kControl_Button_B001; EVENT_IDSTEP& event_id = button_event_id[index]; MSG_CG_NPCDIALOG_ON_CLICK_SHOWMESSAGEBOX_CMD send_packet( g_pHero->GetObjectKey(), GetOwnerKey(), event_id.event_id, event_id.step); // ÆÄ½Ì Json::Value root; root["BUTTON"] = index+1; // ¿¹ : 1, ¾Æ´Ï¿À : 2, Ãë¼Ò : 3, x¹öưÀº ±×³É â ´ÝÀ½ // ¿¡µðÆ® CCtrlMultilineEditWZ* edit_control = static_cast(GetControlWZ_byPosition(kControl_Edit_E001)); if (edit_control) { TCHAR edit_message[256] = {0,}; edit_control->GetTextWZ(edit_message, 256); root["EDIT"] = edit_message; } CCtrlButtonWZ* button_control = static_cast(GetControlWZ_byPosition(kControl_Button_SLT0)); if (button_control) { Json::Value slot_list; for (POSTYPE pos = kControl_Button_SLT0; pos <= kControl_Button_SLT4; ++pos) { Json::Value slot; if (IsEmpty(pos) == FALSE) { SCSlot& sc_slot = GetSlot(pos); slot["ITEMCODE"] = sc_slot.GetCode(); slot["ITEMNUMBER"] = sc_slot.GetNum(); slot_list.append(slot); } } root["SLOTS"] = slot_list; } Json::FastWriter writer; std::string string = writer.write(root); strncpy(send_packet.data_, string.c_str(), 1024); send_packet.data_length_ = string.length(); GlobalFunc::SendPacket(CI_GAMESERVERIDX, &send_packet, sizeof(send_packet)); g_InterfaceManager.DeleteInterface(IM_SMARTNPCDIALOG_MANAGER::SMARTNPCDIALOG_REPLY); } break; case kControl_Button_SLT0: case kControl_Button_SLT1: case kControl_Button_SLT2: case kControl_Button_SLT3: case kControl_Button_SLT4: { DWORD control_position = GetControlPosition_byID(message->dwCtrlID); CControlWZ* control = GetControlWZ_byPosition(control_position); if (control) { RECT rcSlot = control->GetSizeRect(); MouseHandler::Instance()->ItemTransaction(SI_SMARTNPC, (POSTYPE)control_position, &rcSlot); } } break; default: { } break; } return true; } bool uiSmartNpcDialogReply::OnRButtonClick(SI_MESSAGE* message) { DWORD control_pos = GetControlPosition_byID(message->dwCtrlID); switch (control_pos) { case kControl_Button_SLT0: case kControl_Button_SLT1: case kControl_Button_SLT2: case kControl_Button_SLT3: case kControl_Button_SLT4: { if (MouseHandler::Instance()->IsExistItemAtHand() != TRUE) { this->DeleteSlot(static_cast(control_pos), NULL); } } break; default: { } break; } return true; } void uiSmartNpcDialogReply::RenderTooltip() { int iMouseX = Mouse::Instance()->GetMouseX(); int iMouseY = Mouse::Instance()->GetMouseY(); BOOL bMouseOver = FALSE; for (POSTYPE pos = kControl_Button_SLT0; pos <= kControl_Button_SLT4; ++pos) { CControlWZ* control = GetControlWZ_byPosition(pos); if (control == NULL) { continue; } RECT rc = control->GetSizeRect(); if (rc.left <= iMouseX && rc.right >= iMouseX) { if (rc.top <= iMouseY && rc.bottom >= iMouseY) { bMouseOver = TRUE; } } } if (bMouseOver == FALSE) { m_MouseOverObject.eMouseOverType = eMOUSE_OVER_MAX; } else { if (m_MouseOverObject.eMouseOverType == eMOUSE_OVER_SLOT) { uiToolTipMan* tooltip_manager = (uiToolTipMan*)g_InterfaceManager.GetUserInterfaceManager(UIMAN_TOOLTIP); if (tooltip_manager) { tooltip_manager->RegisterSlotInfoTooltip(m_MouseOverObject.pSlot); tooltip_manager->SetTooltipDialogID(GetDialogKey()); } } } } void uiSmartNpcDialogReply::SetTextMessage(const TCHAR *text_massage) { if (list_control_ == NULL) { return; } ftext_render_.ClearSentence(); ftext_render_.SetBeginLineIndex(0); FTextParser parser; FTextSentence sentence; TCHAR str_format[INTERFACE_STRING_LENGTH]={0,}; BOOL result = parser.Parser(text_massage, sentence); if (result == TRUE) { ftext_render_.Append(sentence); ftext_render_.convertLineInfo(); } } RC::eSLOT_INSERT_RESULT uiSmartNpcDialogReply::InsertSlot(POSTYPE at_pos, DWORD type_code, DWORD type_index) { DeleteSlot(at_pos,NULL); BASE_ITEMINFO* item_info = ItemInfoParser::Instance()->GetItemInfo(type_code); if (item_info == NULL) { return RC_INSERT_SLOT_FAILED; } static DWORD SERIAL = 10000000; SCItemSlot item_slot; item_slot.SetSlotType(ST_ITEM); item_slot.SetCode(static_cast(type_code)); item_slot.SetSerial(++SERIAL); if (type_index >= RewardInfo::MIN_ITEM_TYPECODE) { // Àåºñ/ÆêÀÇ ¾ÆÀÌÅÛŸÀÔ/Ä¿½ºÅ͸¶ÀÌ¡ ¾ÆÀÌÅÛ Ã³¸® const ItemType* item_type_info = ItemTypeList::Instance()->FindItemType(type_index); { KindOfItemType::value_type kind_of_item = item_type_info->GetItemType(); nsSlot::ItemTypeChanger::ChangeItemByType(&item_slot, kind_of_item); } item_slot.SetEnchant( item_type_info->GetEnchant() ); item_slot.SetNum(1); } else { item_slot.SetNum(static_cast(type_index)); } // ½½·Ô¿¡ ³ÖÀ½ eSLOT_INSERT_RESULT slot_insert_result = SCSlotContainer::InsertSlot(at_pos, item_slot); CControlWZ* control_ptr = GetControlWZ(GetControlID_byPosition(at_pos)); if(control_ptr) { RECT rect = control_ptr->GetSizeRect(); SCSlot& real_slot = GetSlot(at_pos); if (item_unit_renderer_) { item_unit_renderer_->AddItemUnit(item_slot.GetSerial(), item_slot.GetCode(), &rect, &real_slot, control_ptr); } else { assert(item_unit_renderer_); } ReFreshRenderSlot(); } return slot_insert_result; } //------------------------------------------------------------------------------ BOOL uiSmartNpcDialogReply::DeleteSlot(POSTYPE at_pos, SCSlot* slot_out) { if (item_unit_renderer_) { item_unit_renderer_->RemoveItemUnit(GetSlot(at_pos).GetSerial()); } SCSlotContainer::DeleteSlot(at_pos, slot_out); ReFreshRenderSlot(); return TRUE; } //------------------------------------------------------------------------------ void uiSmartNpcDialogReply::DeleteAllSlot() { if (item_unit_renderer_ == NULL) { assert(item_unit_renderer_); return; } for (int slot_pos = kControl_Button_SLT0; slot_pos <= kControl_Button_SLT4; ++slot_pos) { if (IsEmpty(slot_pos)) { continue; } this->DeleteSlot(slot_pos, NULL); } } SCSlotContainer* uiSmartNpcDialogReply::GetSlotContainer() { return static_cast(this); } ItemUnitRenderer* uiSmartNpcDialogReply::GetItemUnitRender() const { return item_unit_renderer_; } RC::eSLOT_INSERT_RESULT uiSmartNpcDialogReply::InsertSlot(POSTYPE at_pos, SCSlot& IN inputed_slot) { DeleteSlot(at_pos,NULL); // °°Àº ¾ÆÀÌÅÛÀ» ¶Ç ¿Ã¸± °æ¿ì ±âÁ¸²¨ Á¦°Å for (int slot_pos = kControl_Button_SLT0; slot_pos <= kControl_Button_SLT4; ++slot_pos) { if (IsEmpty(slot_pos)) { continue; } SCSlot& slot = GetSlot(slot_pos); if (slot.GetSerial() == inputed_slot.GetSerial()) { DeleteSlot(slot_pos,NULL); } } RC::eSLOT_INSERT_RESULT result = SCSlotContainer::InsertSlot(at_pos, inputed_slot); ReFreshRenderSlot(); return result; } void uiSmartNpcDialogReply::ReFreshRenderSlot() { ItemUnitRenderer::RenderUnit* item_unit_render = NULL; RECT slot_rect; CControlWZ* control_ptr = NULL; for (int i = kControl_Button_SLT0; i <= kControl_Button_SLT4; ++i) { SCSlot& rSlot = GetSlot(i); if (IsEmpty(i)) { continue; } // º¸¿©Áà¾ßÇÒ ¸ñ·Ï if(item_unit_renderer_ == NULL) { continue; } item_unit_render = item_unit_renderer_->GetItemUnit(rSlot.GetSerial()); control_ptr = GetControlWZ(GetControlID_byPosition(i)); if (control_ptr == NULL) { continue; } slot_rect = control_ptr->GetSizeRect(); if (item_unit_render == NULL) { item_unit_render = item_unit_renderer_->AddItemUnit(rSlot.GetSerial(), rSlot.GetCode(), &slot_rect, &rSlot ,control_ptr); } else { item_unit_renderer_->ChangePositionItemUnit(rSlot.GetSerial(), &slot_rect, control_ptr); } } } #endif //_NA_000000_20140120_SMART_NPC_SYSTEM