GameSpaceChangedNotify.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:22k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include "KWin32.h"
  2. #include "Windows.h"
  3. #include "../../core/src/coreshell.h"
  4. #include "../../core/src/GameDataDef.h"
  5. #include "../../core/src/CoreObjGenreDef.h"
  6. #include "Windows.h"
  7. #include "KEngine.h"
  8. #include "Elem/Wnds.h"
  9. #include "Elem/MouseHover.h"
  10. #include "UiCase/UiPlayerBar.h"
  11. #include "UiCase/UiStatus.h"
  12. #include "UiCase/UiTrade.h"
  13. #include "UiCase/UiSkills.h"
  14. #include "UiCase/UiItem.h"
  15. #include "UiCase/UiShop.h"
  16. #include "UiCase/UiMsgSel.h"
  17. #include "UiCase/UiMsgCentrePad.h"
  18. #include "UiCase/UiInformation2.h"
  19. #include "UiCase/UiSysMsgCentre.h"
  20. #include "UiCase/UiTeamManage.h"
  21. #include "UiCase/UiSelPlayerNearby.h"
  22. #include "UiCase/UiChatCentre.h"
  23. #include "UiCase/UiStoreBox.h"
  24. #include "UiCase/UiTaskNote.h"
  25. #include "UiCase/UiNewsMessage.h"
  26. #include "UiCase/UiStrengthRank.h"
  27. #include "UiCase/UiTongManager.h"
  28. #include "UiCase/UiTongCreateSheet.h"
  29. #include "../Login/Login.h"
  30. #include "UiCase/UiParadeItem.h"
  31. #include "KTongProtocol.h"
  32. #include "../S3Client.h"
  33. #include "UiShell.h"
  34. #include "../../Engine/Src/Text.h"
  35. bool UiCloseWndsInGame(bool bAll);
  36. extern iCoreShell* g_pCoreShell;
  37. void GameWorldTips(unsigned int uParam, int nParam);
  38. //--------------------------------------------------------------------------
  39. // 功能:接受游戏世界数据改变通知的函数
  40. //--------------------------------------------------------------------------
  41. void CoreDataChangedCallback(unsigned int uDataId, unsigned int uParam, int nParam)
  42. {
  43. KUiTrade* pTradeBar = NULL;
  44. switch(uDataId)
  45. {
  46. case GDCNI_HOLD_OBJECT:
  47. Wnd_DragFinished();
  48. if (uParam && ((KUiObjAtRegion*)uParam)->Obj.uGenre != CGOG_NOTHING)
  49. {
  50. KUiDraggedObject Obj;
  51. Obj.uGenre = ((KUiObjAtRegion*)uParam)->Obj.uGenre;
  52. Obj.uId = ((KUiObjAtRegion*)uParam)->Obj.uId;
  53. Obj.DataW = ((KUiObjAtRegion*)uParam)->Region.Width;
  54. Obj.DataH = ((KUiObjAtRegion*)uParam)->Region.Height;
  55. Wnd_DragBegin(&Obj, DrawDraggingGameObjFunc);
  56. }
  57. break;
  58. case GDCNI_PLAYER_BASE_INFO: //主角的一些不易变的数据
  59. {
  60. KUiStatus* pBar = KUiStatus::GetIfVisible();
  61. if (pBar)
  62. pBar->UpdateBaseData();
  63. KUiPlayerBaseInfo Info;
  64. memset(&Info, 0, sizeof(KUiPlayerBaseInfo));
  65. g_pCoreShell->GetGameData(GDI_PLAYER_BASE_INFO, (int)&Info, 0);
  66. if (Info.nCurFaction >= 0)
  67. KUiMsgCentrePad::QueryAllChannel();
  68. else
  69. {
  70. KUiMsgCentrePad::CloseSelfChannel(KUiMsgCentrePad::ch_Faction);
  71. if (Info.nCurTong != 0)
  72. {
  73. KUiMsgCentrePad::QueryAllChannel();
  74. }
  75. else
  76. {
  77. KUiMsgCentrePad::CloseSelfChannel(KUiMsgCentrePad::ch_Tong);
  78. }
  79. }
  80. }
  81. break;
  82. case GDCNI_PLAYER_RT_ATTRIBUTE:
  83. {
  84. KUiStatus* pBar = KUiStatus::GetIfVisible();
  85. if (pBar)
  86. pBar->UpdateData();
  87. }
  88. break;
  89. case GDCNI_PLAYER_IMMED_ITEMSKILL://主角的立即使用物品与武功
  90. if (uParam)
  91. {
  92. KUiGameObject* pObj = (KUiGameObject*)uParam;
  93. KUiPlayerBar* pBar = KUiPlayerBar::GetIfVisible();
  94. if (pBar)
  95. {
  96. if (nParam >= 0)
  97. pBar->UpdateItem(nParam, pObj->uGenre, pObj->uId);
  98. else
  99. pBar->UpdateSkill(-nParam - 1, pObj->uGenre, pObj->uId);
  100. }
  101. }
  102. break;
  103. case GDCNI_OBJECT_CHANGED:
  104. if (uParam)
  105. {
  106. KUiObjAtContRegion* pObject = (KUiObjAtContRegion*)uParam;
  107. if (pObject->eContainer == UOC_ITEM_TAKE_WITH)
  108. {
  109. pTradeBar = KUiTrade::GetIfVisible();
  110. if (pTradeBar)
  111. {
  112. pTradeBar->OnChangedTakewithItem((KUiObjAtRegion*)uParam, nParam);
  113. }
  114. else
  115. {
  116. KUiItem* pItemsBar = KUiItem::GetIfVisible();
  117. if (pItemsBar)
  118. pItemsBar->UpdateItem((KUiObjAtRegion*)uParam, nParam);
  119. }
  120. }
  121. else if (pObject->eContainer == UOC_EQUIPTMENT)
  122. {
  123. KUiStatus* pEquips = KUiStatus::GetIfVisible();
  124. if (pEquips)
  125. pEquips->UpdateEquip((KUiObjAtRegion*)uParam, nParam);
  126. }
  127. else if (pObject->eContainer == UOC_STORE_BOX)
  128. {
  129. KUiStoreBox* pStoreBox = KUiStoreBox::GetIfVisible();
  130. if (pStoreBox)
  131. pStoreBox->UpdateItem((KUiObjAtRegion*)uParam, nParam);
  132. }
  133. else if (pObject->eContainer == UOC_TO_BE_TRADE)
  134. {
  135. KUiTrade* pTrade = KUiTrade::GetIfVisible();
  136. if (pTrade)
  137. pTrade->OnSelfChangedItem(pObject, nParam);
  138. }
  139. else if (pObject->eContainer == UOC_IN_HAND)
  140. {
  141. Wnd_DragFinished();
  142. if (pObject->Obj.uGenre != CGOG_NOTHING)
  143. {
  144. KUiDraggedObject Obj;
  145. Obj.uGenre = pObject->Obj.uGenre;
  146. Obj.uId = pObject->Obj.uId;
  147. Obj.DataW = pObject->Region.Width;
  148. Obj.DataH = pObject->Region.Height;
  149. Wnd_DragBegin(&Obj, DrawDraggingGameObjFunc);
  150. }
  151. }
  152. else if (pObject->eContainer == UOC_IMMEDIA_ITEM)
  153. {
  154. KUiPlayerBar* pBar = KUiPlayerBar::GetIfVisible();
  155. if (pBar)
  156. {
  157. if (nParam)
  158. pBar->UpdateItem(pObject->Region.h, pObject->Obj.uGenre, pObject->Obj.uId);
  159. else
  160. pBar->UpdateItem(pObject->Region.h, CGOG_NOTHING, 0);
  161. }
  162. }
  163. else if (pObject->eContainer == UOC_IMMEDIA_SKILL)
  164. {
  165. KUiPlayerBar* pBar = KUiPlayerBar::GetIfVisible();
  166. if (pBar)
  167. {
  168. if (nParam)
  169. pBar->UpdateSkill(pObject->Region.h, pObject->Obj.uGenre, pObject->Obj.uId);
  170. else
  171. pBar->UpdateSkill(pObject->Region.h, CGOG_NOTHING, 0);
  172. }
  173. }
  174. }
  175. break;
  176. case GDCNI_LIVE_SKILL_BASE: //生活技能数值变化
  177. {
  178. KUiSkills* pPad = KUiSkills::GetIfVisible();
  179. if (pPad)
  180. pPad->UpdateLiveBaseData();
  181. }
  182. break;
  183. case GDCNI_FIGHT_SKILL_POINT: //剩余战斗技能点数变化
  184. {
  185. KUiSkills* pPad = KUiSkills::GetIfVisible();
  186. if (pPad)
  187. {
  188. pPad->UpdateFightRemainPoint(nParam);
  189. }
  190. }
  191. break;
  192. case GDCNI_SKILL_CHANGE: //新掌握了一个技能
  193. if (uParam)
  194. {
  195. KUiSkills::UpdateSkill((KUiSkillData*)uParam, nParam);
  196. }
  197. break;
  198. /* case GDCNI_PLAYER_LEADERSHIP: //主角统帅能力相关的数据发生变化
  199. {
  200. KUiManage* pBar = KUiManage::GetIfVisible();
  201. if (pBar)
  202. pBar->UpdateLeaderData();
  203. }
  204. break;
  205. */
  206. case GDCNI_TRADE_START:
  207. if (uParam)
  208. {
  209. UiCloseWndsInGame(false);
  210. KUiTrade::OpenWindow((KUiPlayerItem*)uParam);
  211. }
  212. break;
  213. case GDCNI_TRADE_DESIRE_ITEM: //对方增减想交易的物品
  214. pTradeBar = KUiTrade::GetIfVisible();
  215. if (pTradeBar)
  216. pTradeBar->OnOppositeChangedItem((KUiObjAtRegion*)uParam, nParam);
  217. break;
  218. case GDCNI_TRADE_OPER_DATA: //交易状态变化
  219. pTradeBar = KUiTrade::GetIfVisible();
  220. if (pTradeBar)
  221. pTradeBar->UpdateOperData();
  222. break;
  223. case GDCNI_TRADE_END: //交易结束
  224. pTradeBar = KUiTrade::GetIfVisible();
  225. if (pTradeBar)
  226. pTradeBar->UpdateTradeEnd(nParam);
  227. break;
  228. case GDCNI_NPC_TRADE:
  229. if (nParam)
  230. KUiShop::OpenWindow();
  231. else
  232. KUiShop::CloseWindow();
  233. break;
  234. case GDCNI_NPC_TRADE_ITEM:
  235. {
  236. KUiShop* pShop = KUiShop::GetIfVisible();
  237. if (pShop)
  238. pShop->UpdateData();
  239. }
  240. break;
  241. case GDCNI_QUESTION_CHOOSE:
  242. KUiMsgSel::OpenWindow((KUiQuestionAndAnswer*)uParam);
  243. break;
  244. case GDCNI_GAME_START:
  245. {
  246. g_LoginLogic.NotifyToStartGame();
  247. Wnd_GameSpaceHandleInput(true);
  248. KUiMsgCentrePad::ReleaseActivateChannelAll();
  249. KUiMsgCentrePad::QueryAllChannel();
  250. }
  251. break;
  252. case GDCNI_SPEAK_WORDS: //npc说话内容
  253. //uParam = (KUiInformationParam*) pWordDataList 指向KUiInformationParam数组
  254. //nParam = pWordDataList包含KUiInformationParam元素的数目
  255. if (uParam && nParam)
  256. g_UiInformation2.SpeakWords((KUiInformationParam*)uParam, nParam);
  257. break;
  258. case GDCNI_INFORMATION:
  259. if (uParam)
  260. {
  261. KUiInformationParam* pInformation = (KUiInformationParam*)uParam;
  262. KWndWindow* pCaller = pInformation->bNeedConfirmNotify ? ((KWndWindow*)WND_GAMESPACE) : 0;
  263. UIMessageBox2(pInformation->sInformation, pInformation->nInforLen,
  264. pInformation->sConfirmText, pCaller, 0);
  265. }
  266. break;
  267. case GDCNI_CHAT_GROUP:
  268. KUiChatCentre::UpdateData(UICC_U_ALL, 0, 0);
  269. break;
  270. case GDCNI_CHAT_FRIEND: //聊天好友发生变化
  271. KUiChatCentre::UpdateData(UICC_U_GROUP, 0, nParam);
  272. break;
  273. case GDCNI_CHAT_FRIEND_STATUS: //聊天好友状态发生变化
  274. KUiChatCentre::UpdateData(UICC_U_FRIEND, uParam, nParam);
  275. break;
  276. case GDCNI_TEAM:
  277. {
  278. KUiTeamManage* pPad = KUiTeamManage::GetIfVisible();
  279. if (pPad)
  280. pPad->UpdateData((KUiPlayerTeam*)uParam);
  281. if (uParam)
  282. KUiMsgCentrePad::QueryAllChannel();
  283. else
  284. KUiMsgCentrePad::CloseSelfChannel(KUiMsgCentrePad::ch_Team);
  285. }
  286. break;
  287. // case GDCNI_TEAM_NEARBY_LIST:
  288. // KUiTeamManage::UpdateNearbyTeams((KUiTeamItem*)uParam, nParam);
  289. // break;
  290. case GDCNI_SWITCH_CURSOR:
  291. Wnd_SwitchCursor(nParam);
  292. break;
  293. case GDCNI_SYSTEM_MESSAGE:
  294. if (uParam)
  295. KUiSysMsgCentre::AMessageArrival((KSystemMessage*)uParam, (void*)nParam);
  296. break;
  297. case GDCNI_OPEN_STORE_BOX:
  298. KUiStoreBox::OpenWindow();
  299. KUiItem::OpenWindow();
  300. break;
  301. case GDCNI_SWITCHING_SCENEPLACE:
  302. break;
  303. // flying add this branch to deal with the task record from server.
  304. case GDCNI_MISSION_RECORD:
  305. if (uParam)
  306. {
  307. KMissionRecord* pRecord = (KMissionRecord*)uParam;
  308. KUiTaskNote::WakeUp(pRecord->sContent, pRecord->nContentLen, pRecord->uValue);
  309. }
  310. break;
  311. case GDCNI_PK_SETTING:
  312. break;
  313. case GDCNI_VIEW_PLAYERITEM:
  314. KUiParadeItem::OpenWindow((KUiPlayerItem*)uParam);
  315. break;
  316. case GDCNI_PLAYER_BRIEF_PROP:
  317. GameWorldTips(uParam, nParam);
  318. break;
  319. case GDCNI_NEWS_MESSAGE: //新闻消息
  320. if (uParam)
  321. KUiNewsMessage::MessageArrival((KNewsMessage*)uParam, (SYSTEMTIME*)nParam);
  322. break;
  323. case GDCNII_RANK_INDEX_LIST_ARRIVE:
  324. KUiStrengthRank::OpenWindow();
  325. KUiStrengthRank::NewIndexArrive(uParam, (KRankIndex *)nParam);
  326. break;
  327. case GDCNII_RANK_INFORMATION_ARRIVE:
  328. KUiStrengthRank::NewRankArrive(uParam, (KRankMessage *)nParam);
  329. break;
  330. case GDCNI_TONG_INFO:
  331. KUiTongManager::TongInfoArrive((KUiPlayerRelationWithOther *)uParam, (KTongInfo *)nParam);
  332. break;
  333. case GDCNI_TONG_MEMBER_LIST:
  334. KUiTongManager::NewDataArrive((KUiGameObjectWithName *)uParam, (KTongMemberItem *)nParam);
  335. break;
  336. case GDCNI_TONG_ACTION_RESULT:
  337. KUiTongManager::ResponseResult((KUiGameObjectWithName *)uParam, nParam);
  338. break;
  339. case GDCNI_OPEN_TONG_CREATE_SHEET:
  340. if(uParam)
  341. KUiTongCreateSheet::OpenWindow();
  342. else
  343. KUiTongCreateSheet::CloseWindow();
  344. break;
  345. }
  346. }
  347. //////////////////////////////////////////////////////
  348. void KClientCallback::CoreDataChanged(unsigned int uDataId, unsigned int uParam, int nParam)
  349. {
  350. CoreDataChangedCallback(uDataId, uParam, nParam);
  351. }
  352. typedef std::map<std::string, std::string> BLACKLIST;
  353. BLACKLIST g_BlackListUserNames;
  354. #define BLACKLIST_UNITNAME  "黑名单"
  355. struct BlacklistNotify : public AddinNotify
  356. {
  357. virtual int RenameUnitGroup(const char* Unit, const char* Name, const char* NewName, const STRINGLIST& friends);
  358. virtual int MoveUnitGroup(const char* Unit, const char* Name, const char* Name2, const STRINGLIST& friends);
  359. virtual int DeleteUnitGroup(const char* Unit, const char* Name, const STRINGLIST& friends);
  360. virtual int DeleteUnitMember(const char* Unit, const char* Name);
  361. virtual int MoveUnitMember(const char* Unit, const char* Name, const char* Group);
  362. void SendNotifyGroupFriend(const char* Unit, const std::string& group, const STRINGLIST& friends);
  363. void SendNotifyDeleteFriend(const char* Unit, const char* Name);
  364. };
  365. BlacklistNotify s_LNotify;
  366. void ClearBlackList()
  367. {
  368. g_BlackListUserNames.clear();
  369. }
  370. void CreateBlackListUnit()
  371. {
  372. ClearBlackList();
  373. KUiChatCentre::AddAddinUnit(BLACKLIST_UNITNAME, &s_LNotify);
  374. }
  375. void AddBlackList(const char* strName, const char* strGroup)
  376. {
  377. if (strName && strName[0] != 0 && strGroup)
  378. {
  379. g_BlackListUserNames[strName] = strGroup;
  380. if (g_BlackListUserNames.size() > 0)
  381. {
  382. int nUnit = KUiChatCentre::FindUnitIndex(BLACKLIST_UNITNAME);
  383. if (nUnit >= 0)
  384. {
  385. KUiChatCentre::AddFriendInfo(nUnit, (char*)strName, (char*)strGroup);
  386. }
  387. }
  388. }
  389. }
  390. void RemoveBlackList(char* strName)
  391. {
  392. if (strName && strName[0] != 0)
  393. {
  394. BLACKLIST::iterator i = g_BlackListUserNames.find(strName);
  395. if (i != g_BlackListUserNames.end())
  396. {
  397. g_BlackListUserNames.erase(i);
  398. int nUnit = KUiChatCentre::FindUnitIndex(BLACKLIST_UNITNAME);
  399. if (nUnit >= 0)
  400. {
  401. KUiChatCentre::DeleteFriend(nUnit, strName, true);
  402. }
  403. }
  404. }
  405. }
  406. bool IsInBlackName(char* strName)
  407. {
  408. if (strName && strName[0] != 0)
  409. {
  410. return g_BlackListUserNames.find(strName) != g_BlackListUserNames.end();
  411. }
  412. return false;
  413. }
  414. int SaveBlackListPrivateSetting(KIniFile* pFile, LPCSTR lpSection, int nStart)
  415. {
  416. int i = nStart;
  417. char szKey[10];
  418. char szLine[256];
  419. BLACKLIST::iterator iU = g_BlackListUserNames.begin();
  420. while (iU != g_BlackListUserNames.end())
  421. {
  422. sprintf(szKey, "%d", i);
  423. sprintf(szLine, "AddBlackList("%s", "%s")", iU->first.c_str(), iU->second.c_str());
  424. pFile->WriteString(lpSection, szKey, szLine);
  425. i++;
  426. iU++;
  427. }
  428. return i;
  429. }
  430. int BlacklistNotify::RenameUnitGroup(const char* Unit, const char* Name, const char* NewName, const STRINGLIST& friends)
  431. {
  432. AddinNotify::RenameUnitGroup(Unit, Name, NewName, friends);
  433. if (NewName && NewName[0])
  434. SendNotifyGroupFriend(Unit, std::string(NewName), friends);
  435. return 0;
  436. }
  437. int BlacklistNotify::MoveUnitGroup(const char* Unit, const char* Name, const char* Name2, const STRINGLIST& friends)
  438. {
  439. AddinNotify::MoveUnitGroup(Unit, Name, Name2, friends);
  440. if (Name2 && Name2[0])
  441. SendNotifyGroupFriend(Unit, std::string(Name2), friends);
  442. return 0;
  443. }
  444. int BlacklistNotify::DeleteUnitGroup(const char* Unit, const char* Name, const STRINGLIST& friends)
  445. {
  446. AddinNotify::DeleteUnitGroup(Unit, Name, friends);
  447. if (Name && Name[0])
  448. SendNotifyGroupFriend(Unit, "", friends);
  449. return 0;
  450. }
  451. int BlacklistNotify::DeleteUnitMember(const char* Unit, const char* Name)
  452. {
  453. AddinNotify::DeleteUnitMember(Unit, Name);
  454. SendNotifyDeleteFriend(Unit, Name);
  455. return 0;
  456. }
  457. int BlacklistNotify::MoveUnitMember(const char* Unit, const char* Name, const char* Group)
  458. {
  459. AddinNotify::MoveUnitMember(Unit, Name, Group);
  460. if (Name && Name[0])
  461. {
  462. STRINGLIST friends;
  463. friends.push_back(Name);
  464. SendNotifyGroupFriend(Unit, Group, friends);
  465. }
  466. return 0;
  467. }
  468. void BlacklistNotify::SendNotifyGroupFriend(const char* Unit, const std::string& group, const STRINGLIST& friends)
  469. {
  470. if (strcmp(Unit, BLACKLIST_UNITNAME) == 0)
  471. {
  472. STRINGLIST::const_iterator i = friends.begin();
  473. while (i != friends.end())
  474. {
  475. g_BlackListUserNames[(*i)] = group;
  476. i++;
  477. }
  478. }
  479. }
  480. void BlacklistNotify::SendNotifyDeleteFriend(const char* Unit, const char* Name)
  481. {
  482. if (strcmp(Unit, BLACKLIST_UNITNAME) == 0)
  483. {
  484. RemoveBlackList((char*)Name);
  485. }
  486. }
  487. ///////////////////////////////////////////////////////////////////////////////
  488. void KClientCallback::ChannelMessageArrival(DWORD nChannelID, char* szSendName, const char* pMsgBuff, unsigned short nMsgLength, bool bSucc)
  489. {
  490. if (!bSucc)
  491. {
  492. char szInfo[256];
  493. int n = sprintf(szInfo, "抱歉, 频道还未开放,消息无法发到!");
  494. KUiMsgCentrePad::SystemMessageArrival(szInfo, n);
  495. return;
  496. }
  497. int nIndex = -1;
  498. if (nChannelID == -1) //gm alias ID
  499. {
  500. //找到系统频道
  501. int nChannelDataCount = KUiMsgCentrePad::GetChannelCount();
  502. for (int n = 0; n < nChannelDataCount; n++)
  503. {
  504. if (KUiMsgCentrePad::IsChannelType(n, KUiMsgCentrePad::ch_GM))
  505. {
  506. nIndex = n;
  507. break;
  508. }
  509. }
  510. if (nIndex < 0)
  511. return;
  512. nChannelID = KUiMsgCentrePad::GetChannelID(nIndex);
  513. if (nChannelID == -1)
  514. return;
  515. }
  516. else
  517. {
  518. nIndex = KUiMsgCentrePad::GetChannelIndex(nChannelID);
  519. if (nIndex < 0)
  520. return;
  521. if (IsInBlackName(szSendName))
  522. return;
  523. }
  524. KUiMsgCentrePad::NewChannelMessageArrival(nChannelID, szSendName, pMsgBuff, nMsgLength);
  525. if (KUiMsgCentrePad::GetChannelSubscribe(nIndex) &&
  526. KUiMsgCentrePad::IsChannelType(nIndex, KUiMsgCentrePad::ch_Screen))
  527. {
  528. KUiPlayerItem SelectPlayer;
  529. int nKind = -1;
  530. if (g_pCoreShell->FindSpecialNPC(szSendName, &SelectPlayer, nKind) && nKind == kind_player)
  531. {
  532. g_pCoreShell->ChatSpecialPlayer(&SelectPlayer, pMsgBuff, nMsgLength);
  533. }
  534. }
  535. }
  536. void KClientCallback::MSNMessageArrival(char* szSourceName, char* szSendName, const char* pMsgBuff, unsigned short nMsgLength, bool bSucc)
  537. {
  538. if (!bSucc)
  539. {
  540. char szInfo[256];
  541. int n = sprintf(szInfo, "抱歉, %s 不在游戏中,消息无法发到!", szSendName);
  542. KUiMsgCentrePad::SystemMessageArrival(szInfo, n);
  543. return;
  544. }
  545. if (IsInBlackName(szSourceName))
  546. return;
  547. KUiMsgCentrePad::NewMSNMessageArrival(szSourceName, szSendName, pMsgBuff, nMsgLength);
  548. //if (!KUiPlayerBar::IsSelfName(szSourceName)) //不是自己说的放到头顶
  549. //{
  550. // KUiPlayerItem SelectPlayer;
  551. // int nKind = -1;
  552. // if (g_pCoreShell->FindSpecialNPC((char*)KUiPlayerBar::SelfName(), &SelectPlayer, nKind) && nKind == kind_player)
  553. // {
  554. // strncpy(SelectPlayer.Name, szSourceName, 32); //为了显示别人的名字
  555. // g_pCoreShell->ChatSpecialPlayer(&SelectPlayer, pMsgBuff, nMsgLength);
  556. // }
  557. //}
  558. }
  559. void KClientCallback::NotifyChannelID(char* ChannelName, DWORD channelid, BYTE cost)
  560. {
  561. KUiMsgCentrePad::OpenChannel(ChannelName, channelid, cost);
  562. }
  563. void KClientCallback::FriendInvite(char* roleName)
  564. {
  565. if (roleName && roleName[0] != 0)
  566. {
  567. // 通知界面有人申请添加聊天好友
  568. KSystemMessage sMsg;
  569. KUiPlayerItem sPlayer;
  570. strcpy(sPlayer.Name, roleName);
  571. sPlayer.nIndex = -1;
  572. sPlayer.uId = 0;
  573. sPlayer.nData = 0;
  574. sprintf(sMsg.szMessage, MSG_CHAT_GET_FRIEND_APPLY, roleName);
  575. sMsg.eType = SMT_FRIEND;
  576. sMsg.byConfirmType = SMCT_UI_FRIEND_INVITE;
  577. sMsg.byPriority = 3;
  578. sMsg.byParamSize = sizeof(KUiPlayerItem);
  579. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, (int)&sPlayer);
  580. }
  581. }
  582. void KClientCallback::AddFriend(char* roleName, BYTE answer)
  583. {
  584. if (roleName && roleName[0] != 0)
  585. {
  586. if (answer == answerAgree)
  587. {
  588. KSystemMessage sMsg;
  589. KUiPlayerItem sPlayer;
  590. memset(&sPlayer, 0, sizeof(KUiPlayerItem));
  591. strcpy(sPlayer.Name, roleName);
  592. sPlayer.uId = 0;
  593. sPlayer.nIndex = -1;
  594. sprintf(sMsg.szMessage, MSG_CHAT_ADD_FRIEND_SUCCESS, roleName);
  595. sMsg.eType = SMT_FRIEND;
  596. sMsg.byConfirmType = SMCT_UI_INTERVIEW;
  597. sMsg.byPriority = 2;
  598. sMsg.byParamSize = sizeof(KUiPlayerItem);
  599. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, (int)&sPlayer);
  600. int nUnit = KUiChatCentre::FindUnitIndexByRoleNameAtServerUnit(roleName);
  601. if (nUnit >= 0)
  602. {
  603. KUiChatCentre::DeleteFriend(nUnit, roleName, false);
  604. }
  605. KUiChatCentre::AddFriendInfo(0, roleName, "");
  606. KUiChatCentre::FriendStatus(0, roleName, stateOnline);
  607. }
  608. else if (answer == answerDisagree)
  609. {
  610. // 通知界面pRefuse->m_szName拒绝了他的交友申请
  611. KSystemMessage sMsg;
  612. sprintf(sMsg.szMessage, MSG_CHAT_REFUSE_FRIEND, roleName);
  613. sMsg.eType = SMT_FRIEND;
  614. sMsg.byConfirmType = SMCT_CLICK;
  615. sMsg.byPriority = 1;
  616. sMsg.byParamSize = 0;
  617. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  618. }
  619. else if (answer == answerUnable)
  620. {
  621. // 通知界面添加某人为好友操作失败
  622. KSystemMessage sMsg;
  623. sprintf(sMsg.szMessage, MSG_CHAT_ADD_FRIEND_FAIL, roleName);
  624. sMsg.eType = SMT_NORMAL;
  625. sMsg.byConfirmType = SMCT_NONE;
  626. sMsg.byPriority = 0;
  627. sMsg.byParamSize = 0;
  628. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  629. }
  630. }
  631. }
  632. void KClientCallback::FriendStatus(char* roleName, BYTE state)
  633. {
  634. if (roleName && roleName[0] != 0)
  635. {
  636. int nUnit = KUiChatCentre::FindUnitIndexByRoleNameAtServerUnit(roleName);
  637. if (nUnit >= 0 && KUiChatCentre::FriendStatus(nUnit, roleName, state))
  638. {
  639. // 通知界面有好友上线
  640. KSystemMessage sMsg;
  641. if (state == stateOnline)
  642. sprintf(sMsg.szMessage, MSG_CHAT_FRIEND_ONLINE, roleName);
  643. else if (state == stateOffline)
  644. sprintf(sMsg.szMessage, MSG_CHAT_FRIEND_OFFLINE, roleName);
  645. else
  646. return;
  647. sMsg.eType = SMT_NORMAL;
  648. sMsg.byConfirmType = SMCT_NONE;
  649. sMsg.byPriority = 0;
  650. sMsg.byParamSize = 0;
  651. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  652. }
  653. }
  654. }
  655. void KClientCallback::FriendInfo(char* roleName, char* unitName, char* groupName, BYTE state)
  656. {
  657. if (roleName && roleName[0] != 0 && unitName && groupName)
  658. {
  659. int nUnit = 0;
  660. if (unitName[0])
  661. nUnit = KUiChatCentre::FindUnitIndex(unitName);
  662. if (nUnit >= 0)
  663. {
  664. int nUnitOld = KUiChatCentre::FindUnitIndexByRoleNameAtServerUnit(roleName);
  665. if (nUnitOld >= 0 && nUnitOld != nUnit)
  666. {
  667. KUiChatCentre::DeleteFriend(nUnitOld, roleName, false);
  668. }
  669. KUiChatCentre::AddFriendInfo(nUnit, roleName, groupName);
  670. KUiChatCentre::FriendStatus(nUnit, roleName, state);
  671. }
  672. }
  673. }
  674. void KClientCallback::AddPeople(char* unitName, char* roleName)
  675. {
  676. if (roleName && roleName[0] != 0 && unitName)
  677. {
  678. int nUnit = KUiChatCentre::FindUnitIndex(unitName);
  679. if (nUnit >= 0)
  680. {
  681. int nUnitOld = KUiChatCentre::FindUnitIndexByRoleNameAtServerUnit(roleName);
  682. if (nUnitOld >= 0 && nUnitOld != nUnit)
  683. {
  684. KUiChatCentre::DeleteFriend(nUnitOld, roleName, false);
  685. }
  686. KUiChatCentre::AddFriendInfo(nUnit, roleName, "");
  687. KUiChatCentre::FriendStatus(nUnit, roleName, stateOnline);
  688. }
  689. }
  690. }
  691. #define LEVEL_TIPS_INI "\Ui\杂烩.ini"
  692. //--------------------------------------------------------------------------
  693. // 功能:等级的贴士
  694. //--------------------------------------------------------------------------
  695. void LevelTips(int nNewLevel)
  696. {
  697. char szMsg[256], szBuf[16];
  698. KIniFile Ini;
  699. int nMsgLen;
  700. if(Ini.Load(LEVEL_TIPS_INI))
  701. {
  702. Ini.GetString("LevelUpTips", itoa(nNewLevel, szBuf, 10), "", szMsg, sizeof(szMsg));
  703. nMsgLen = TEncodeText(szMsg, strlen(szMsg));
  704. if(nMsgLen)
  705. {
  706.     KUiMsgCentrePad::SystemMessageArrival(szMsg, nMsgLen);
  707. }
  708. }
  709. }
  710. //--------------------------------------------------------------------------
  711. // 功能:门派的贴士
  712. //--------------------------------------------------------------------------
  713. void FactionTips(int nbJoin)
  714. {
  715. char szMsg[256] = "";
  716. KIniFile Ini;
  717. int nMsgLen;
  718. if(Ini.Load(LEVEL_TIPS_INI))
  719. {
  720. if (nbJoin)
  721. Ini.GetString("FactionTips", "Join", "", szMsg, sizeof(szMsg));
  722. nMsgLen = TEncodeText(szMsg, strlen(szMsg));
  723. if(nMsgLen)
  724. {
  725.     KUiMsgCentrePad::SystemMessageArrival(szMsg, nMsgLen);
  726. }
  727. }
  728. }
  729. //--------------------------------------------------------------------------
  730. // 功能:贴士老大
  731. //--------------------------------------------------------------------------
  732. void GameWorldTips(unsigned int uParam, int nParam)
  733. {
  734. if(uParam == PBP_LEVEL)
  735. LevelTips(nParam);
  736. else if(uParam == PBP_FACTION)
  737. FactionTips(nParam);
  738. }