Advertisement
Guest User

AbnormalStatusWnd.uc

a guest
Mar 11th, 2025
39
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.51 KB | None | 0 0
  1. class AbnormalStatusWnd extends UIScript;
  2.  
  3. const NSTATUSICON_FRAMESIZE = 12;
  4. const NSTATUSICON_MAXCOL = 12;
  5. const NSTATUSICON_SIZE = 26;
  6.  
  7. var int m_NormalStatusRow;
  8. var int m_EtcStatusRow;
  9. var int m_ShortStatusRow;
  10.  
  11. var bool m_bOnCurState;
  12. var bool isAltPressed;
  13.  
  14. var WindowHandle Me;
  15. var StatusIconHandle StatusIcon;
  16.  
  17. function OnLoad()
  18. {
  19. RegisterEvent( EV_AbnormalStatusNormalItem );
  20. RegisterEvent( EV_AbnormalStatusEtcItem );
  21. RegisterEvent( EV_AbnormalStatusShortItem );
  22.  
  23. RegisterEvent( EV_Restart );
  24. RegisterEvent( EV_Die );
  25. RegisterEvent( EV_ShowReplayQuitDialogBox );
  26. RegisterEvent( EV_LanguageChanged );
  27.  
  28. m_NormalStatusRow = -1;
  29. m_EtcStatusRow = -1;
  30. m_ShortStatusRow = -1;
  31.  
  32. m_bOnCurState = false;
  33.  
  34. InitHandle();
  35. }
  36.  
  37. function InitHandle()
  38. {
  39. Me = GetHandle( "AbnormalStatusWnd" );
  40. StatusIcon = StatusIconHandle( GetHandle( "AbnormalStatusWnd.StatusIcon" ) );
  41. }
  42.  
  43. function OnEnterState( name a_PreStateName )
  44. {
  45. m_bOnCurState = true;
  46. UpdateWindowSize();
  47. }
  48.  
  49. function OnExitState( name a_NextStateName )
  50. {
  51. m_bOnCurState = false;
  52. }
  53.  
  54. function OnEvent(int Event_ID, string param)
  55. {
  56. if (Event_ID == EV_AbnormalStatusNormalItem)
  57. {
  58. HandleAddNormalStatus(param);
  59. }
  60. else if (Event_ID == EV_AbnormalStatusEtcItem)
  61. {
  62. HandleAddEtcStatus(param);
  63. }
  64. else if (Event_ID == EV_AbnormalStatusShortItem)
  65. {
  66. HandleAddShortStatus(param);
  67. }
  68. else if (Event_ID == EV_Restart)
  69. {
  70. HandleRestart();
  71. }
  72. else if (Event_ID == EV_Die)
  73. {
  74. HandleDie();
  75. }
  76. else if (Event_ID == EV_ShowReplayQuitDialogBox)
  77. {
  78. HandleShowReplayQuitDialogBox();
  79. }
  80. else if (Event_ID == EV_LanguageChanged)
  81. {
  82. HandleLanguageChanged();
  83. }
  84. }
  85.  
  86.  
  87. function OnKeyUp(EInputKey nKey)
  88. {
  89. if (nKey == IK_alt)
  90. {
  91. isAltPressed = false;
  92. debug("key up");
  93. }
  94. }
  95.  
  96. function OnKeyDown(EInputKey nKey)
  97. {
  98. if (nKey == IK_alt)
  99. {
  100. isAltPressed = true;
  101. debug("key down");
  102. }
  103.  
  104. //IK_Tab
  105. //if (nKey == IK_N )
  106. //{
  107. //debug("keyinput");
  108. //getmyClanInfo();
  109. //NoblessMenuValidate();
  110. //}
  111. //if (nKey == IK_alt + IK_N )
  112. //{
  113. //debug("keyinput");
  114. //getmyClanInfo();
  115. //NoblessMenuValidate();
  116. //}
  117. }
  118.  
  119. //function OnLButtonDblClick(int X, int Y)
  120. function OnLButtonDown(WindowHandle a_WindowHandle, int X, int Y)
  121. {
  122.  
  123. local Rect windowBounds;
  124. local int targetRow;
  125. local int targetCol;
  126.  
  127. local StatusIconInfo info;
  128. local SkillInfo skillInfo;
  129.  
  130.  
  131. if (IsKeyDown(IK_alt) == false)
  132. return;
  133.  
  134.  
  135. // Find window position
  136. windowBounds = Me.GetRect();
  137.  
  138. // Process clicks outside of window frame only
  139. if (X > (windowBounds.nX + NSTATUSICON_FRAMESIZE))
  140. {
  141. // Calc row and col of targeted icon
  142. targetRow = (Y - windowBounds.nY) / NSTATUSICON_SIZE;
  143. targetCol = (X - windowBounds.nX - NSTATUSICON_FRAMESIZE) / NSTATUSICON_SIZE;
  144.  
  145. // Store status info of targeted icon
  146. StatusIcon.GetItem(targetRow, targetCol, info);
  147.  
  148. // Store actual skill info and make sure it is exists
  149. if (GetSkillInfo(info.ClassID, info.Level, skillInfo))
  150. {
  151. // Request server to stop skill effect
  152. // Usage: _dispel:<int:skill_id>,<int:skill_level>
  153. // Example: _dispel:313,8
  154. RequestBypassToServer("UI__dispel:" $ string(skillInfo.SkillID) $ "," $ string(skillInfo.SkillLevel));
  155. }
  156. }
  157. }
  158.  
  159. //리스타트를 하면 올클리어
  160. function HandleRestart()
  161. {
  162. ClearAll();
  163. }
  164.  
  165. //죽었으면, Normal/Short를 클리어
  166. function HandleDie()
  167. {
  168. ClearStatus(false, false);
  169. ClearStatus(false, true);
  170. }
  171.  
  172. function HandleShowReplayQuitDialogBox()
  173. {
  174. Me.HideWindow();
  175. }
  176.  
  177. //강제로 UI가 보여질 때, 프레임이 보여지는 것을 막는다
  178. function OnShow()
  179. {
  180. local int RowCount;
  181. RowCount = StatusIcon.GetRowCount();
  182. if (RowCount<1)
  183. {
  184. Me.HideWindow();
  185. }
  186. }
  187.  
  188. //특정한 Status들을 초기화한다.
  189. function ClearStatus(bool bEtcItem, bool bShortItem)
  190. {
  191. local int i;
  192. local int j;
  193. local int RowCount;
  194. local int RowCountTmp;
  195. local int ColCount;
  196. local StatusIconInfo info;
  197.  
  198. //Normal아이템을 초기화하는 경우라면, Normal아이템의 현재행을 초기화한다.
  199. if (bEtcItem==false && bShortItem==false)
  200. {
  201. m_NormalStatusRow = -1;
  202. }
  203. //Etc아이템을 초기화하는 경우라면, Etc아이템의 현재행을 초기화한다.
  204. if (bEtcItem==true && bShortItem==false)
  205. {
  206. m_EtcStatusRow = -1;
  207. }
  208. //Short아이템을 초기화하는 경우라면, Short아이템의 현재행을 초기화한다.
  209. if (bEtcItem==false && bShortItem==true)
  210. {
  211. m_ShortStatusRow = -1;
  212. }
  213.  
  214. RowCount = StatusIcon.GetRowCount();
  215. for (i=0; i<RowCount; i++)
  216. {
  217. ColCount = StatusIcon.GetColCount(i);
  218. for (j=0; j<ColCount; j++)
  219. {
  220. StatusIcon.GetItem(i, j, info);
  221.  
  222. //제대로 아이템을 얻어왔다면
  223. if (info.ClassID>0)
  224. {
  225. if (info.bEtcItem==bEtcItem && info.bShortItem==bShortItem)
  226. {
  227. StatusIcon.DelItem(i, j);
  228. j--;
  229. ColCount--;
  230.  
  231. RowCountTmp = StatusIcon.GetRowCount();
  232. if (RowCountTmp != RowCount)
  233. {
  234. i--;
  235. RowCount--;
  236. }
  237. }
  238. }
  239. }
  240. }
  241. }
  242.  
  243. function ClearAll()
  244. {
  245. ClearStatus(false, false);
  246. ClearStatus(true, false);
  247. ClearStatus(false, true);
  248. }
  249.  
  250. //Normal Status 추가
  251. function HandleAddNormalStatus(string param)
  252. {
  253. local int i;
  254. local int Max;
  255. local int BuffCnt;
  256. local StatusIconInfo info;
  257.  
  258. //NormalStatus 초기화
  259. ClearStatus(false, false);
  260.  
  261. //info 초기화
  262. info.Size = 24;
  263. info.BackTex = "L2UI.EtcWndBack.AbnormalBack";
  264. info.bShow = true;
  265. info.bEtcItem = false;
  266. info.bShortItem = false;
  267.  
  268. BuffCnt = 0;
  269. ParseInt(param, "Max", Max);
  270. for (i=0; i<Max; i++)
  271. {
  272. ParseInt(param, "SkillID_" $ i, info.ClassID);
  273. ParseInt(param, "SkillLevel_" $ i, info.Level);
  274. ParseInt(param, "RemainTime_" $ i, info.RemainTime);
  275. ParseString(param, "Name_" $ i, info.Name);
  276. ParseString(param, "IconName_" $ i, info.IconName);
  277. ParseString(param, "Description_" $ i, info.Description);
  278.  
  279. if (info.ClassID>0)
  280. {
  281. //한줄에 NSTATUSICON_MAXCOL만큼 표시한다.
  282. if (BuffCnt%NSTATUSICON_MAXCOL == 0)
  283. {
  284. m_NormalStatusRow++;
  285. StatusIcon.InsertRow(m_NormalStatusRow);
  286. }
  287.  
  288. StatusIcon.AddCol(m_NormalStatusRow, info);
  289.  
  290. BuffCnt++;
  291. }
  292. }
  293.  
  294. //현재 Etc, Short아이템이 표시되고 있는 중이라면, 행이 증가/삭제 되었을 경우가 있기 때문에
  295. if (m_EtcStatusRow>-1)
  296. {
  297. m_EtcStatusRow = m_NormalStatusRow + 1;
  298. }
  299. if (m_ShortStatusRow>-1)
  300. {
  301. m_ShortStatusRow = m_NormalStatusRow + 1;
  302. }
  303.  
  304. UpdateWindowSize();
  305. }
  306.  
  307. //Etc Status 추가
  308. function HandleAddEtcStatus(string param)
  309. {
  310. local int i;
  311. local int Max;
  312. local int BuffCnt;
  313. local int CurRow;
  314. local bool bNewRow;
  315. local StatusIconInfo info;
  316.  
  317. //EtcStatus 초기화
  318. ClearStatus(true, false);
  319.  
  320. //info 초기화
  321. info.Size = 24;
  322. info.BackTex = "L2UI.EtcWndBack.AbnormalBack";
  323. info.bShow = true;
  324. info.bEtcItem = true;
  325. info.bShortItem = false;
  326.  
  327. //추가 시작점(Normal아이템 다음줄, Short아이템 다음 열에 추가한다)
  328. if (m_ShortStatusRow>-1)
  329. {
  330. bNewRow = false;
  331. CurRow = m_ShortStatusRow;
  332. }
  333. else
  334. {
  335. bNewRow = true;
  336. CurRow = m_NormalStatusRow;
  337. }
  338.  
  339. BuffCnt = 0;
  340. ParseInt(param, "Max", Max);
  341. for (i=0; i<Max; i++)
  342. {
  343. ParseInt(param, "SkillID_" $ i, info.ClassID);
  344. ParseInt(param, "SkillLevel_" $ i, info.Level);
  345. ParseInt(param, "RemainTime_" $ i, info.RemainTime);
  346. ParseString(param, "Name_" $ i, info.Name);
  347. ParseString(param, "IconName_" $ i, info.IconName);
  348. ParseString(param, "Description_" $ i, info.Description);
  349.  
  350. if (info.ClassID>0)
  351. {
  352. //Etc아이템은 최대 한 행에만 표시한다.(Short아이템 뒤에...)
  353. if (bNewRow)
  354. {
  355. bNewRow = !bNewRow;
  356. CurRow++;
  357. StatusIcon.InsertRow(CurRow);
  358. }
  359. StatusIcon.AddCol(CurRow, info);
  360.  
  361. m_EtcStatusRow = CurRow;
  362.  
  363. BuffCnt++;
  364. }
  365. }
  366.  
  367. UpdateWindowSize();
  368. }
  369.  
  370. //Short Status 추가
  371. function HandleAddShortStatus(string param)
  372. {
  373. local int i;
  374. local int Max;
  375. local int BuffCnt;
  376. local int CurRow;
  377. local int CurCol;
  378. local bool bNewRow;
  379. local StatusIconInfo info;
  380.  
  381. //ShortStatus 초기화
  382. ClearStatus(false, true);
  383.  
  384. //info 초기화
  385. info.Size = 24;
  386. info.BackTex = "L2UI.EtcWndBack.AbnormalBack";
  387. info.bShow = true;
  388. info.bEtcItem = false;
  389. info.bShortItem = true;
  390.  
  391. //추가 시작점(Normal아이템 다음줄, Etc아이템 전에 추가한다)
  392. CurCol = -1;
  393. if (m_EtcStatusRow>-1)
  394. {
  395. bNewRow = false;
  396. CurRow = m_EtcStatusRow;
  397. }
  398. else
  399. {
  400. bNewRow = true;
  401. CurRow = m_NormalStatusRow;
  402. }
  403.  
  404. BuffCnt = 0;
  405. ParseInt(param, "Max", Max);
  406. for (i=0; i<Max; i++)
  407. {
  408. ParseInt(param, "SkillID_" $ i, info.ClassID);
  409. ParseInt(param, "SkillLevel_" $ i, info.Level);
  410. ParseInt(param, "RemainTime_" $ i, info.RemainTime);
  411. ParseString(param, "Name_" $ i, info.Name);
  412. ParseString(param, "IconName_" $ i, info.IconName);
  413. ParseString(param, "Description_" $ i, info.Description);
  414.  
  415. if (info.ClassID>0)
  416. {
  417. //Short아이템은 최대 한 행에만 표시한다.(Etc아이템과 함께..)
  418. if (bNewRow)
  419. {
  420. bNewRow = !bNewRow;
  421. CurRow++;
  422. StatusIcon.InsertRow(CurRow);
  423. }
  424. CurCol++;
  425. StatusIcon.InsertCol(CurRow, CurCol, info);
  426.  
  427. m_ShortStatusRow = CurRow;
  428.  
  429. BuffCnt++;
  430. }
  431. }
  432.  
  433. UpdateWindowSize();
  434. }
  435.  
  436. //윈도우 사이즈 갱신
  437. function UpdateWindowSize()
  438. {
  439. local int RowCount;
  440. local Rect rectWnd;
  441.  
  442. RowCount = StatusIcon.GetRowCount();
  443. if (RowCount>0)
  444. {
  445. //현재 GameState가 아니면 윈도우를 보이지 않는다.
  446. if (m_bOnCurState)
  447. {
  448. Me.ShowWindow();
  449. }
  450. else
  451. {
  452. Me.HideWindow();
  453. }
  454.  
  455. //윈도우 사이즈 변경
  456. rectWnd = StatusIcon.GetRect();
  457. Me.SetWindowSize(rectWnd.nWidth + NSTATUSICON_FRAMESIZE, rectWnd.nHeight);
  458.  
  459. //세로 프레임 사이즈 변경
  460. Me.SetFrameSize(NSTATUSICON_FRAMESIZE, rectWnd.nHeight);
  461. }
  462. else
  463. {
  464. Me.HideWindow();
  465. }
  466. }
  467.  
  468. //언어 변경 처리
  469. function HandleLanguageChanged()
  470. {
  471. local int i;
  472. local int j;
  473. local int RowCount;
  474. local int ColCount;
  475. local StatusIconInfo info;
  476.  
  477. RowCount = StatusIcon.GetRowCount();
  478. for (i=0; i<RowCount; i++)
  479. {
  480. ColCount = StatusIcon.GetColCount(i);
  481. for (j=0; j<ColCount; j++)
  482. {
  483. StatusIcon.GetItem(i, j, info);
  484. if (info.ClassID>0)
  485. {
  486. info.Name = class'UIDATA_SKILL'.static.GetName( info.ClassID, info.Level );
  487. info.Description = class'UIDATA_SKILL'.static.GetDescription( info.ClassID, info.Level );
  488. StatusIcon.SetItem(i, j, info);
  489. }
  490. }
  491. }
  492. }
  493. defaultproperties
  494. {
  495. }
  496.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement