NPCWnd.cpp
上传用户:cydong117
上传日期:2009-11-10
资源大小:638k
文件大小:19k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. /******************************************************************************************************************
  2.                                                                                                                    
  3. 葛碘疙:
  4. 累己磊:
  5. 累己老:
  6. [老磊][荐沥磊] : 荐沥 郴侩
  7.                                                                                                                    
  8. *******************************************************************************************************************/
  9. #include "StdAfx.h"
  10. #define MAX_NPCSTR_HEIGHT 129
  11. #define MAX_SHOW_LINE 6
  12. #define POS_DRAWSTART_Y 40
  13. #define LINE_GAP 5
  14. #define BUILD_GUILD "@@BUILDGUILDNOW" // 巩颇 汲赋
  15. #define GUILD_WAR "@@GUILDWAR" // 巩里 脚没
  16. #define WITHDRAWAL_CASTLE "@@WITHDRAWAL" // 捣阑 茫绰促.
  17. #define RECEIPT_CASTLE "@@RECEIPTS" // 捣阑 嘎变促.
  18. #define SCRIPT_GENTEXT 1
  19. #define SCRIPT_BUTTON 2
  20. #define SCRIPT_RETURN 3
  21. #define SCRIPT_TAG 4
  22. COLORREF ScriptTxtColor[] = { RGB(0, 0, 0), // 0 : Black
  23. RGB(255, 0, 0), // 1 : Red
  24. RGB(0, 128, 0), // 2 : Green
  25. RGB(128, 128, 0),  // 3 : Olive
  26. RGB(128, 128, 128), // 4 : Gray
  27. RGB(128, 0, 0), // 5 : Marron
  28. RGB(0, 128, 128), // 6 : Teal
  29. RGB(0, 0, 128), // 7 : Navy
  30. RGB(192, 192, 192), // 8 : Silver
  31. RGB(128, 0, 128), // 9 : Purple
  32. RGB(0, 255, 0), // 10 : Lime
  33. RGB(0, 0, 255), // 11 : Blue
  34. RGB(255, 255, 255), // 12 : White
  35. RGB(255, 0, 255), // 13 : Fuchsia
  36. RGB(0, 255, 255), // 14 : Aqua
  37. RGB(255, 255, 0), // 15 : Yellow
  38. RGB(1, 1, 1), // 16 : Default
  39. };
  40. class CScriptLine
  41. {
  42. public:
  43. BYTE m_btScriptType;
  44. char *m_pszScriptText;
  45. char *m_pszScriptCommand;
  46. RECT m_Rect;
  47. bool m_fIsSelected;
  48. bool m_fIsFocused;
  49. public:
  50. CScriptLine()
  51. {
  52. m_pszScriptText = NULL;
  53. m_pszScriptCommand = NULL;
  54. m_fIsFocused = FALSE;
  55. m_fIsSelected = FALSE;
  56. }
  57. ~CScriptLine()
  58. {
  59. // if (m_pszScriptText) delete [] m_pszScriptText;
  60. // if (m_pszScriptCommand) delete [] m_pszScriptCommand;
  61. }
  62. };
  63. CPDLList<CScriptLine> ScriptList;
  64. char szQuestNPCName[64];
  65. char *CheckText(char *pszScript)
  66. {
  67. if (pszScript)
  68. {
  69. char *pszText = pszScript;
  70. while (*pszText)
  71. {
  72. if (*pszText == '\' || *pszText == '<' || *pszText == '{')
  73. return pszText;
  74. pszText++;
  75. }
  76. }
  77. return NULL;
  78. }
  79. char *AddScriptLine(char *pszLine, int nLineLen, int nType)
  80. {
  81. CScriptLine* pScriptLine = new CScriptLine;
  82. if (pScriptLine)
  83. {
  84. pScriptLine->m_btScriptType = nType;
  85. switch (nType)
  86. {
  87. case SCRIPT_GENTEXT:
  88. {
  89. pScriptLine->m_pszScriptText = new char[nLineLen];
  90. memcpy(pScriptLine->m_pszScriptText, pszLine, nLineLen);
  91. pScriptLine->m_pszScriptText[nLineLen] = '';
  92. ScriptList.AddNode(pScriptLine);
  93. return NULL;
  94. }
  95. case SCRIPT_RETURN:
  96. {
  97. ScriptList.AddNode(pScriptLine);
  98. return NULL;
  99. }
  100. case SCRIPT_BUTTON:
  101. {
  102. char *pszEndCmd;
  103. char *pszDevide;
  104. if (pszEndCmd = (char *)strchr(pszLine, '>'))
  105. {
  106. *pszEndCmd = '';
  107. if (pszDevide = (char *)strchr(pszLine, '/'))
  108. {
  109. *pszDevide = '';
  110. pScriptLine->m_pszScriptCommand = new char[pszEndCmd - pszDevide];
  111. pScriptLine->m_pszScriptText = new char[pszDevide - pszLine];
  112. strcpy(pScriptLine->m_pszScriptCommand, ++pszDevide);
  113. strcpy(pScriptLine->m_pszScriptText, ++pszLine);
  114. ScriptList.AddNode(pScriptLine);
  115. }
  116. return ++pszEndCmd;
  117. }
  118. return NULL;
  119. }
  120. case SCRIPT_TAG:
  121. {
  122. char *pszEndCmd;
  123. char *pszDevide;
  124. if (pszEndCmd = (char *)strchr(pszLine, '}'))
  125. {
  126. *pszEndCmd = '';
  127. if (pszDevide = (char *)strchr(pszLine, '/'))
  128. {
  129. *pszDevide = '';
  130. pScriptLine->m_pszScriptCommand = new char[pszEndCmd - pszDevide];
  131. pScriptLine->m_pszScriptText = new char[pszDevide - pszLine];
  132. strcpy(pScriptLine->m_pszScriptCommand, ++pszDevide);
  133. strcpy(pScriptLine->m_pszScriptText, ++pszLine);
  134. ScriptList.AddNode(pScriptLine);
  135. }
  136. return ++pszEndCmd;
  137. }
  138. return NULL;
  139. }
  140. }
  141. }
  142. delete pScriptLine;
  143. return NULL;
  144. }
  145. void DevideScript(char *pszScript)
  146. {
  147. char *pszText = pszScript;
  148. char *pszPaser;
  149. int  nLineLen = 0;
  150. while (*pszText)
  151. {
  152. if (pszPaser = CheckText(pszText))
  153. {
  154. nLineLen = pszPaser - pszText;
  155. switch (*pszPaser)
  156. {
  157. case '\':
  158. {
  159. if (nLineLen >= 1)
  160. AddScriptLine(pszText, nLineLen, SCRIPT_GENTEXT);
  161. AddScriptLine(NULL, 0, SCRIPT_RETURN);
  162. pszText = ++pszPaser;
  163. break;
  164. }
  165. case '<':
  166. {
  167. if (nLineLen >= 1)
  168. AddScriptLine(pszText, nLineLen, SCRIPT_GENTEXT);
  169. pszText = AddScriptLine(pszPaser, nLineLen, SCRIPT_BUTTON);
  170. break;
  171. }
  172. case '{':
  173. {
  174. if (nLineLen >= 1)
  175. AddScriptLine(pszText, nLineLen, SCRIPT_GENTEXT);
  176. pszText = AddScriptLine(pszPaser, nLineLen, SCRIPT_TAG);
  177. break;
  178. }
  179. }
  180. }
  181. }
  182. }
  183. CNPCWnd::CNPCWnd()
  184. {
  185. m_nStartLine = 0;
  186. m_nMaxLine = MAX_SHOW_LINE;
  187. }
  188. CNPCWnd::~CNPCWnd()
  189. {
  190. ResetDialog();
  191. }
  192. VOID CNPCWnd::CreateNPCChatWnd(INT nID, CWHWilImageData* pxWndImage, INT nFrameImgIdx, INT nStartX, INT nStartY, INT nWidth, INT nHeight, BOOL bCanMove)
  193. {
  194. CreateGameWnd(nID, pxWndImage, nFrameImgIdx, bCanMove, nStartX, nStartY, nWidth, nHeight);
  195. m_xMsgBox.Load(&(g_xGameProc.m_xInterface.m_xInterImgEx));
  196. }
  197. VOID CNPCWnd::ShowNPCChatWnd()
  198. {
  199. SIZE tSize;
  200. RECT tRect;
  201. CScriptLine* pScriptLine;
  202. int nLineCnt = 0;
  203. int nLine = 0;
  204. int POS_DRAWSTART_X = 60;
  205. int MAX_NPCSTR_WIDTH = 430;
  206. tRect = GetGameWndRect(); // Get Window Rect
  207. ShowGameWnd();
  208. ScriptList.MoveCurrentToTop();
  209. COLORREF TextColor = ScriptTxtColor[12];
  210. for (int i = 0; i < ScriptList.GetCounter(); i++)
  211. {
  212. pScriptLine = ScriptList.GetCurrentData();
  213. switch (pScriptLine->m_btScriptType)
  214. {
  215. case SCRIPT_GENTEXT:
  216. {
  217. char szTempText[1024];
  218. tSize = g_xMainWnd.GetStrLength(NULL, NULL, pScriptLine->m_pszScriptText);
  219. if (nLine + tSize.cx > MAX_NPCSTR_WIDTH)
  220. {
  221. int nLen = strlen(pScriptLine->m_pszScriptText);
  222. int nCount = 0;
  223. for (int i = 0; i < nLen; i++)
  224. {
  225. if (pScriptLine->m_pszScriptText[i] < 0)
  226. {
  227. szTempText[nCount++] =  pScriptLine->m_pszScriptText[i++];
  228. szTempText[nCount] =  pScriptLine->m_pszScriptText[i];
  229. szTempText[nCount + 1] = '';
  230. }
  231. else
  232. {
  233. szTempText[nCount] =  pScriptLine->m_pszScriptText[i];
  234. szTempText[nCount + 1] = '';
  235. }
  236. tSize = g_xMainWnd.GetStrLength(NULL, NULL, szTempText);
  237. if (nLine + tSize.cx >= MAX_NPCSTR_WIDTH)
  238. {
  239. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  240. g_xMainWnd.PutsHan(NULL, tRect.left + POS_DRAWSTART_X + nLine, tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y,
  241. TextColor, RGB(0, 0, 0), szTempText);
  242. nLineCnt++;
  243. nLine = 0;
  244. nCount = 0;
  245. }
  246. else
  247. nCount++;
  248. }
  249. if (nCount)
  250. {
  251. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  252. g_xMainWnd.PutsHan(NULL, tRect.left + POS_DRAWSTART_X + nLine, tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y,
  253. TextColor, RGB(0, 0, 0), szTempText);
  254. nLine += tSize.cx;
  255. }
  256. }
  257. else
  258. {
  259. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  260. g_xMainWnd.PutsHan(NULL, tRect.left + POS_DRAWSTART_X + nLine, tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y,
  261. TextColor, RGB(0, 0, 0), pScriptLine->m_pszScriptText);
  262. nLine += tSize.cx;
  263. }
  264. break;
  265. }
  266. case SCRIPT_RETURN:
  267. nLineCnt++;
  268. nLine = 0;
  269. break;
  270. case SCRIPT_BUTTON:
  271. {
  272. char szTempText[1024];
  273. HFONT hFont = NULL;
  274. COLORREF color = RGB(255, 255, 0);
  275. if (pScriptLine->m_fIsFocused)
  276. hFont = g_xMainWnd.CreateGameFont("奔覆", 9, 0, FW_NORMAL, FALSE, TRUE);
  277. if (pScriptLine->m_fIsSelected)
  278. color = RGB(255, 0, 0);
  279. tSize = g_xMainWnd.GetStrLength(NULL, NULL, pScriptLine->m_pszScriptText);
  280. if (nLine + tSize.cx > MAX_NPCSTR_WIDTH)
  281. {
  282. int nLen = strlen(pScriptLine->m_pszScriptText);
  283. int nCount = 0;
  284. int nRow = 0;
  285. pScriptLine->m_Rect.left = tRect.left + POS_DRAWSTART_X + nLine;
  286. pScriptLine->m_Rect.top = tRect.top + (nLineCnt * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y;
  287. pScriptLine->m_Rect.right = pScriptLine->m_Rect.left + MAX_NPCSTR_WIDTH;
  288. for (int i = 0; i < nLen; i++)
  289. {
  290. if (pScriptLine->m_pszScriptText[i] < 0)
  291. {
  292. szTempText[nCount++] =  pScriptLine->m_pszScriptText[i++];
  293. szTempText[nCount] =  pScriptLine->m_pszScriptText[i];
  294. szTempText[nCount + 1] = '';
  295. }
  296. else
  297. {
  298. szTempText[nCount] =  pScriptLine->m_pszScriptText[i];
  299. szTempText[nCount + 1] = '';
  300. }
  301. tSize = g_xMainWnd.GetStrLength(NULL, NULL, szTempText);
  302. if (nLine + tSize.cx >= MAX_NPCSTR_WIDTH)
  303. {
  304. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  305. g_xMainWnd.PutsHan(NULL, tRect.left + POS_DRAWSTART_X + nLine, tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y,
  306. color, RGB(0, 0, 0), szTempText, hFont);
  307. nLineCnt++;
  308. nRow++;
  309. nLine = 0;
  310. nCount = 0;
  311. }
  312. else
  313. nCount++;
  314. }
  315. if (nCount)
  316. {
  317. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  318. g_xMainWnd.PutsHan(NULL, tRect.left + POS_DRAWSTART_X + nLine, tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y,
  319. color, RGB(0, 0, 0), szTempText, hFont);
  320. nRow++;
  321. nLine += tSize.cx;
  322. }
  323. pScriptLine->m_Rect.bottom = pScriptLine->m_Rect.top + (nRow * (tSize.cy + LINE_GAP));
  324. }
  325. else
  326. {
  327. pScriptLine->m_Rect.left = tRect.left + POS_DRAWSTART_X + nLine;
  328. pScriptLine->m_Rect.top = tRect.top + ((nLineCnt - m_nStartLine) * (tSize.cy + LINE_GAP)) + POS_DRAWSTART_Y;
  329. pScriptLine->m_Rect.right = pScriptLine->m_Rect.left + tSize.cx;
  330. pScriptLine->m_Rect.bottom = pScriptLine->m_Rect.top + tSize.cy;
  331. if (nLineCnt >= m_nStartLine && nLineCnt <= m_nStartLine + MAX_SHOW_LINE)
  332. g_xMainWnd.PutsHan(NULL, pScriptLine->m_Rect.left, pScriptLine->m_Rect.top,
  333. color, RGB(0, 0, 0), pScriptLine->m_pszScriptText, hFont);
  334. nLine += tSize.cx;
  335. }
  336. DeleteObject(hFont);
  337. break;
  338. }
  339. case SCRIPT_TAG:
  340. {
  341. if (strcmp(pScriptLine->m_pszScriptText, "FCOLOR") == 0)
  342. {
  343. int nColor = atoi(pScriptLine->m_pszScriptCommand);
  344. TextColor = ScriptTxtColor[nColor];
  345. }
  346. else if (strcmp(pScriptLine->m_pszScriptText, "NPCIMG") == 0)
  347. {
  348. if (!m_xNPCImage.m_pbCurrImage)
  349. {
  350. // m_xNPCImage.DeleteImage();
  351. m_xNPCImage.NewLoad(".\Data\NPCFace.WIL", FALSE, TRUE);
  352. }
  353. if (m_xNPCImage.NewSetIndex(1))
  354. g_xMainWnd.DrawWithImageForComp(40, 30, m_xNPCImage.m_lpstNewCurrWilImageInfo->shWidth, 
  355. m_xNPCImage.m_lpstNewCurrWilImageInfo->shHeight, 
  356. (WORD *)m_xNPCImage.m_pbCurrImage);
  357. POS_DRAWSTART_X = 150;
  358. MAX_NPCSTR_WIDTH = 365;
  359. }
  360. break;
  361. }
  362. }
  363. ScriptList.MoveNextNode();
  364. }
  365. m_nMaxLine = nLineCnt;
  366. }
  367. BOOL CNPCWnd::OnLButtonDown(POINT ptMouse)
  368. {
  369. CScriptLine* pScriptLine;
  370. ScriptList.MoveCurrentToTop();
  371. for (int i = 0; i < ScriptList.GetCounter(); i++)
  372. {
  373. pScriptLine = ScriptList.GetCurrentData();
  374. if (pScriptLine->m_btScriptType == SCRIPT_BUTTON)
  375. {
  376. if (PtInRect(&pScriptLine->m_Rect, ptMouse))
  377. pScriptLine->m_fIsSelected = TRUE;
  378. else
  379. pScriptLine->m_fIsSelected = FALSE;
  380. }
  381. ScriptList.MoveNextNode();
  382. }
  383. return FALSE;
  384. }
  385. BOOL CNPCWnd::OnLButtonUp(POINT ptMouse)
  386. {
  387. CScriptLine* pScriptLine;
  388. ScriptList.MoveCurrentToTop();
  389. for (int i = 0; i < ScriptList.GetCounter(); i++)
  390. {
  391. pScriptLine = ScriptList.GetCurrentData();
  392. if (pScriptLine->m_btScriptType == SCRIPT_BUTTON)
  393. {
  394. if (PtInRect(&pScriptLine->m_Rect, ptMouse))
  395. {
  396. if (pScriptLine->m_pszScriptCommand[0] == '@' && pScriptLine->m_pszScriptCommand[1] == '@')
  397. {
  398. if (strcmp(pScriptLine->m_pszScriptCommand, "@@buildguildnow") == 0)
  399. {
  400. char szBuildGuild[128];
  401. sprintf(szBuildGuild, "%s%c%s", pScriptLine->m_pszScriptCommand, 13, "啊力飘屈荤颇");
  402. g_xClientSocket.SendNPCMessage(CM_MERCHANTDLGSELECT,(DWORD)m_nNpcId, 0, szBuildGuild);
  403. }
  404. }
  405. else
  406. g_xClientSocket.SendNPCMessage(CM_MERCHANTDLGSELECT,(DWORD)m_nNpcId, 0, pScriptLine->m_pszScriptCommand);
  407. }
  408. }
  409. pScriptLine->m_fIsSelected = FALSE;
  410. ScriptList.MoveNextNode();
  411. }
  412. return FALSE;
  413. }
  414. void CNPCWnd::OnMouseMove(POINT ptMouse)
  415. {
  416. CScriptLine* pScriptLine;
  417. ScriptList.MoveCurrentToTop();
  418. for (int i = 0; i < ScriptList.GetCounter(); i++)
  419. {
  420. pScriptLine = ScriptList.GetCurrentData();
  421. if (pScriptLine->m_btScriptType == SCRIPT_BUTTON)
  422. {
  423. if (PtInRect(&pScriptLine->m_Rect, ptMouse))
  424. pScriptLine->m_fIsFocused = TRUE;
  425. else
  426. pScriptLine->m_fIsFocused = FALSE;
  427. }
  428. ScriptList.MoveNextNode();
  429. }
  430. }
  431. void CNPCWnd::ResetDialog()
  432. {
  433. CScriptLine* pScriptLine;
  434. ScriptList.MoveCurrentToTop();
  435. for (int i = 0; i < ScriptList.GetCounter();)
  436. {
  437. pScriptLine = ScriptList.GetCurrentData();
  438. if (pScriptLine)
  439. delete pScriptLine;
  440. ScriptList.DeleteCurrentNodeEx();
  441. }
  442. m_nStartLine = 0;
  443. m_nMaxLine = MAX_SHOW_LINE;
  444. }
  445. VOID CNPCWnd::OnScrollDown()
  446. {
  447. if (m_nMaxLine > MAX_SHOW_LINE)
  448. {
  449. if (m_nStartLine <= 0)
  450. m_nStartLine = 0;
  451. else
  452. m_nStartLine--;
  453. }
  454. }
  455. VOID CNPCWnd::OnScrollUp()
  456. {
  457. if (m_nMaxLine > MAX_SHOW_LINE)
  458. {
  459. if (m_nStartLine >= m_nMaxLine)
  460. m_nStartLine = m_nMaxLine;
  461. else
  462. m_nStartLine++;
  463. }
  464. }
  465. //////////////////////////////////////////////////////////////////
  466. BOOL CNPCWnd::ClickCommandProcess(CMTxtBtn* ClickedBtn) // 酒贰 俊 乐绰 巴甸 辆钦
  467. {
  468. /* m_pClickedTxtBtn = ClickedBtn;
  469. if(ClickedBtn!=NULL)
  470. {
  471. if(strcmp(m_xTxtAnalysis.UpperCase(ClickedBtn->Param),BUILD_GUILD)==0) // 巩颇 汲赋 贸府
  472. {
  473. CHAR szMsg[MAX_PATH];
  474. HINSTANCE hLib;
  475. hLib = LoadLibrary("Ats.dll"); // Load Dll
  476. LoadString(hLib,ASK_MAKE_BIG_GUILD,szMsg,MAX_PATH);
  477. FreeLibrary(hLib);
  478. if(!m_xMsgBox.IsActive()) SetWndRectExtend();
  479. m_xMsgBox.ShowMessageBox(szMsg,MSG_EDITEXIST|MSG_BTN_OK); // OK
  480. SetNpcEditBoxPos();
  481. // 巩颇 汲赋芒阑 凯绊 巩颇 疙阑 涝仿 罐绰促.
  482. m_nNpcMsgState = 1;
  483. return TRUE;
  484. }
  485. else if(strcmp(m_xTxtAnalysis.UpperCase(ClickedBtn->Param),GUILD_WAR)==0) // 巩颇傈里
  486. {
  487. CHAR szMsg[MAX_PATH];
  488. HINSTANCE hLib;
  489. hLib = LoadLibrary("Ats.dll"); // Load Dll
  490. LoadString(hLib,ASK_OTHERSNAME,szMsg,MAX_PATH);
  491. FreeLibrary(hLib);
  492. if(!m_xMsgBox.IsActive()) SetWndRectExtend();
  493. m_xMsgBox.ShowMessageBox(szMsg,MSG_EDITEXIST|MSG_BTN_OK); // OK
  494. SetNpcEditBoxPos();
  495. // 巩里阑 且 惑措 巩颇甫 涝仿 罐绰促.
  496. m_nNpcMsgState = 2;
  497. return TRUE;
  498. }
  499. else if(strcmp(m_xTxtAnalysis.UpperCase(ClickedBtn->Param),WITHDRAWAL_CASTLE)==0) // 己 陛绊俊辑 捣 哗扁
  500. {
  501. CHAR szMsg[MAX_PATH];
  502. HINSTANCE hLib;
  503. hLib = LoadLibrary("Ats.dll"); // Load Dll
  504. LoadString(hLib,ASK_WITHDRAWAL,szMsg,MAX_PATH);
  505. FreeLibrary(hLib);
  506. if(!m_xMsgBox.IsActive()) SetWndRectExtend();
  507. m_xMsgBox.ShowMessageBox(szMsg,MSG_EDITEXIST|MSG_BTN_OK); // OK
  508. SetNpcEditBoxPos();
  509. // 己 陛绊芒阑 凯绢 哗绢尘 捣阑 涝仿 罐绰促.
  510. m_nNpcMsgState = 3;
  511. return TRUE;
  512. }
  513. else if(strcmp(m_xTxtAnalysis.UpperCase(ClickedBtn->Param),RECEIPT_CASTLE)==0) // 己 陛绊俊 捣 持扁
  514. {
  515. CHAR szMsg[MAX_PATH];
  516. HINSTANCE hLib;
  517. hLib = LoadLibrary("Ats.dll"); // Load Dll
  518. LoadString(hLib,ASK_RECEIPT,szMsg,MAX_PATH);
  519. FreeLibrary(hLib);
  520. if(!m_xMsgBox.IsActive()) SetWndRectExtend();
  521. m_xMsgBox.ShowMessageBox(szMsg,MSG_EDITEXIST|MSG_BTN_OK); // OK
  522. SetNpcEditBoxPos();
  523. // 己 陛绊芒阑 凯绢 持阑 捣 咀荐甫 涝仿 罐绰促.
  524. m_nNpcMsgState = 4;
  525. return TRUE;
  526. }
  527. else
  528. {
  529. m_nNpcMsgState = 0;
  530. m_pClickedTxtBtn = NULL;
  531. SendCommandToSrv(ClickedBtn->Param);
  532. }
  533. }
  534. // 酒公巴档 贸府 窍瘤 臼澜 */
  535. return FALSE;
  536. }
  537. BOOL CNPCWnd::SendCommandToSrv(CHAR* szMsg)
  538. {
  539. // 扁夯 皋矫瘤 贸府
  540. g_xClientSocket.SendNPCMessage(CM_MERCHANTDLGSELECT,(DWORD)m_nNpcId,0,szMsg);
  541. return FALSE;
  542. }
  543. VOID CNPCWnd::SetWndRectExtend(VOID)
  544. {
  545. // m_rectExtended = m_rcWnd;
  546. // m_rcWnd.left = 0;
  547. // m_rcWnd.top = 0;
  548. // m_rcWnd.right = 800;
  549. // m_rcWnd.bottom = 560;
  550. }
  551. VOID CNPCWnd::SetWndRectReduce(VOID)
  552. {
  553. // m_rcWnd = m_rectExtended;
  554. }
  555. VOID CNPCWnd::SetNpcEditBoxPos(VOID)
  556. {
  557. // Edit Box 包访
  558. // m_rcEditBoxFrame.left = 247;
  559. // m_rcEditBoxFrame.top = 256;
  560. // m_rcEditBoxFrame.right = 467;
  561. // m_rcEditBoxFrame.bottom = 272;
  562. // MoveWindow(g_xChatEditBox.GetSafehWnd(), g_xMainWnd.m_rcWindow.left + m_rcWnd.left + m_rcEditBoxFrame.left, 
  563. // g_xMainWnd.m_rcWindow.top + m_rcWnd.top + m_rcEditBoxFrame.top, 
  564. // m_rcEditBoxFrame.right - m_rcEditBoxFrame.left, 
  565. // m_rcEditBoxFrame.bottom - m_rcEditBoxFrame.top, TRUE);
  566. // SetWindowText(g_xChatEditBox.GetSafehWnd(),NULL);
  567. // g_xChatEditBox.SetLimitText(30);
  568. // SetFocus(g_xChatEditBox.GetSafehWnd());
  569. // ShowWindow(g_xChatEditBox.GetSafehWnd(), SW_SHOW);
  570. }
  571. VOID CNPCWnd::OnEnterKeyDown(VOID)
  572. {
  573. CHAR szTxt[MAX_PATH];
  574. ZeroMemory(szTxt,MAX_PATH);
  575. if(m_xMsgBox.IsActive())
  576. {
  577. SetWndRectReduce();
  578. GetWindowText(g_xChatEditBox.GetSafehWnd(),szTxt,MAX_PATH);
  579. if(szTxt[0]==NULL)
  580. {
  581. strncpy(szTxt,g_xChatEditBox.m_szInputMsg,strlen(g_xChatEditBox.m_szInputMsg));
  582. }
  583. // For Editbox to Chatting
  584. SetFocus(g_xMainWnd.GetSafehWnd());
  585. ShowWindow(g_xChatEditBox.GetSafehWnd(), SW_HIDE);
  586. g_xChatEditBox.SetLimitText(90);// 眉泼芒 Limit length 肺 官操绢 霖促.
  587. MoveWindow(g_xChatEditBox.GetSafehWnd(), g_xMainWnd.m_rcWindow.left+_INPUT_EDITWND_XPOS, 
  588. g_xMainWnd.m_rcWindow.top+_INPUT_EDITWND_YPOS, _INPUT_EDITWND_WIDTH, _INPUT_EDITWND_HEIGHT, TRUE);
  589. switch(m_nNpcMsgState)
  590. {
  591. case 1:
  592. case 2:
  593. // 巩颇 积己
  594. // 巩里 脚没
  595. {
  596. CHAR szMsg[MAX_PATH*2];
  597. strcpy(szMsg,m_pClickedTxtBtn->Param);
  598. strcat(szMsg,"/");
  599. strcat(szMsg,szTxt);
  600. SendCommandToSrv(szMsg);
  601. break;
  602. }
  603. case 3:
  604. case 4:
  605. {
  606. // 己磊陛 茫扁
  607. // 己磊陛 嘎扁扁
  608. break;
  609. }
  610. }
  611. g_xChatEditBox.m_szInputMsg[0] = NULL;
  612. SetWindowText(g_xChatEditBox.GetSafehWnd(),NULL);
  613. m_xMsgBox.HideMessageBox();
  614. }
  615. }
  616. BOOL CNPCWnd::OnMsgInputted(VOID)
  617. {
  618. if(!m_xMsgBox.IsActive())
  619. return FALSE;
  620. OnEnterKeyDown();
  621. return TRUE;
  622. }