|
|
源文件中_Interface文件夹下WndField.cpp文件) L/ `0 b! F7 a4 t- w2 _4 _8 P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 m2 U: N8 z/ s; A
% p. M# L( Y6 s. `- L# `6 | E* rstruct sItem; J# \% F s3 S4 C
{
2 I# a9 i) x; y4 \0 G7 a; UDWORD dwId;
, L9 K2 T' j: c9 _4 M) M" tDWORD dwKind2;
7 a4 M* d" h2 k. u2 nDWORD dwItemId;
* E5 ?9 V/ _7 b& kBYTE nIndex;6 r2 r3 v* V6 |2 a( N
sItem(){
) ?0 g* M. b8 J+ L2 X- M dwId = dwKind2 = dwItemId = nIndex = 0;
, k8 n, Z9 o' i, w" ~/ d}( ^5 W( Y4 Z& ~# I) u
bool operator < (const sItem p2)
% D# I. C$ V7 E' a1 h" e& m{
; a' F; \2 V& Q! b% E) ]) M if (dwKind2 == p2.dwKind2)
- b* n% U" O O9 V& | {
. K1 m, u' f' k( ` return dwItemId < p2.dwItemId;
3 s" o% ^, \& u) S8 @* j: B$ f }else{, ~/ L/ B. ]; b1 A; K- @
return dwKind2 < p2.dwKind2;3 D/ w# p0 X3 [: S
}5 u- X& {6 d8 s, D: t) j: e
}
2 w% g) F. `6 R3 M6 f};
+ L, x8 j F. Nclass CInventorySort: v0 B4 z$ q) L; m! H3 h6 {4 y
{/ E, ?2 o% T3 G
public:( t( `' ?* [, M; }( u: y. t, p
CInventorySort()
! v, }! f" \7 `. I/ x1 }{
" z/ K) x* V* Y5 v6 Z m_dwPos = 0;
/ p7 g/ Z' R& d3 \" v# V% }8 G}3 R# H) g3 f C4 W( h
~CInventorySort(){}
3 V2 J; E* t+ ~3 U, o: s2 z* n! Eprivate:
3 A C5 u R y% K8 YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& l) R2 e/ U3 ]
DWORD m_dwPos;
, O( w* o, \: Y# z* \- p, o/ ]) spublic:7 I4 i. r7 P9 k( |; J i+ `- p( M
void Add(BYTE nIndex)+ J# y- S2 Q2 Q4 A$ r* f
{. q/ w4 }+ O3 w5 I p
if (m_dwPos >= MAX_INVENTORY)/ i5 W& c6 v& z3 i0 h' c2 }( r a
{
- p( E+ _" \/ o' r9 d9 E6 n9 X* a return;, \6 \( x2 _5 U2 I% H# ]
}$ b; C$ G. }5 w+ u0 a; f& h
m_Item[m_dwPos].nIndex = nIndex;1 A1 f2 g1 h4 L* g: o
m_Item[m_dwPos].dwId = m_dwPos;! Y3 z5 D' s; [4 |+ p$ \4 k
m_dwPos++;/ E& W4 e0 x7 ^* v6 E$ e
}9 }. S( [5 j; k, z3 M Z% ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 b0 G4 s) h4 ~
{
2 G. \4 y1 P; A8 C1 t: ~: T# Q for (int i=0;i<MAX_INVENTORY;i++)& ~6 I6 A: O/ G: c5 \
{# q- k" x6 Q" U: \( H1 B" I' o% B) Q
if (m_Item.dwId == dwId)
0 p+ ~7 f2 [7 e: n# w/ C) Y {1 Q1 w$ T) | x7 P$ ?1 S
return m_Item.nIndex;
, q! t( K) Q8 T2 \# D1 n: h9 ~ }$ B$ ^' @2 q4 A5 [' N$ l
}
8 X/ G' T4 e5 N) U# N( o return 255;
! v& n3 V/ j8 `2 w8 |}
# M+ p( ^& }0 j) f( K D5 ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% ]/ V( k' [! o
{
* ?& t3 a5 q! l BYTE nTmp = 0;2 X& v+ G, N- i$ X: ^# h
bool bDest = false,bSrc = false;
1 e: |. x' I% C3 ]2 P+ x for (int i=0;i<MAX_INVENTORY;i++)
* H$ t# B' @ l4 ]$ ? {1 T/ c+ x& E9 E u+ l6 ~
if (dwSrcId == m_Item.dwId)1 r1 o$ s/ c2 N! v- |0 l
{! w3 [: N3 j8 i$ f" E* Z
//id相等 则 改变对应的dest和src9 J$ P/ p, N, p& M; G
nTmp = m_Item.nIndex;
/ h) I2 I5 i. t' y1 \ m_Item.nIndex = dest;
E% |+ f4 [& q }
2 u( w' n9 W9 m2 s( |. U }
) g5 x! o4 R% t' F7 l //临时数据保存完毕,交换开始" |3 t- U6 { l. W
for (int i=0;i<MAX_INVENTORY;i++)
' N# a5 y: V0 W# o {
2 l. S) y5 P+ w& ]. ?9 q. D$ I if (dest == m_Item.nIndex): H) N' n! ?9 n! `2 m& m( d. _
{( z7 U, `4 _1 M, N2 D# e
//id相等 则 改变对应的dest和src
* g1 Q" n: p% I! _# i- ] m_Item.nIndex = nTmp;
4 a6 l3 M) Y$ ` }! E9 M2 j. B6 k( A1 L4 }, O4 A
}( M7 s6 H$ ?; R( m9 t+ c& E
}
/ W+ ^: o2 V8 G: f7 G};3 U- [) X- K0 g! Q; s, O; E# z
-------------------------------------------------------------------------6 U. Z: z: `+ N
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), H, D( z# `0 ]: U3 v. z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);% A: Q8 V% t7 w
紧靠其上添加:
g. d/ H& z) wif( pWndBase == &m_wndMenu )0 n/ F7 C& Y* M' f( `3 a% {
{( W' B6 ?+ q1 ]8 G' G) j. t$ b7 l! x
switch( nID )0 M4 j2 P( c0 U% m
{+ h3 N: \$ W, Q2 x( t
case 2:
' c% d8 c% D: [+ ^- q {
j+ a7 M' ]* m# Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) f+ y* u8 ]2 T; t; J+ j if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, n- K; A& N6 E5 V9 C& g {
% [% d" y) V$ n+ Z; L5 X. s break;
4 j4 ^+ h+ G- k, M0 [3 q9 t! O }, `" U9 C4 D" {. R- C
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
N& o- m2 O. T$ y+ s {
) N% p) ?1 U! N1 z; } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 r8 ~2 c, W6 a, H5 V' S0 v
if( !pItemElem )! ?% l: o% E5 B+ k8 h
continue;
3 q6 t+ c' G# T* J: W if(pItemElem->GetExtra() > 0)+ j# n+ j: m6 R+ l; c7 C7 g% v
continue;
. U5 H- d) ~7 V1 X if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 T- ?; ?8 t7 D. m: U
continue;
8 a4 ?5 i5 H1 l+ B4 A if( g_pPlayer->IsUsing( pItemElem ) )0 Y/ c% i/ P. Z( s( w
continue;9 t! p# N$ P: `7 c4 X5 q2 ?
if( pItemElem->IsUndestructable() == TRUE )
0 j y% X* x& C7 {6 Q" v {* M( h" @# c9 R& r. _, K5 m$ E$ _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# d- d" u' n% [' [" V continue;% N3 X3 V! m* l0 [$ B
}
% E$ S, J ~: w. V! w- f/ \ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 A K, [+ G- o$ ~" _ }
0 b; {. Y2 [5 s- } i+ M break;
$ T0 I5 p$ P3 t1 d/ M, K }
# Q* U" Q2 K, l. p case 1:, d9 f; }4 U2 @7 g8 ^
{& i0 B1 H( h* e1 F2 ^
//整理背包7 y3 @# b& e2 p% L, R9 m$ C
//////////////////////////////////////////////////////////////////////////5 j$ I% |% p; L9 P, l) I4 K% `' {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
& @! v: _, f, p' p; k //////////////////////////////////////////////////////////////////////////- f/ Y( e& P: d- a1 g
//////////////////////////////////////////////////////////////////////////( N) A) r0 c* E; P2 ?
CInventorySort* pInvSort = new CInventorySort;
1 O& f8 C& E" b! I& O% c7 P. p vector <sItem> vItem;
) Y- L! f" x) M# v1 g vItem.resize(MAX_INVENTORY);//初始化大小
& C# X/ T/ _, x* P) }0 O# f //////////////////////////////////////////////////////////////////////////5 U6 x5 A/ W' H% u' _) ]
//填充数据# s! y" ]8 g* {/ l" Z* x
for (int i=0;i<MAX_INVENTORY;i++)6 p+ J, K! s$ X" v, R) b
{
2 l/ C- A" X- D& k# I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 }* m' K! f& s1 A if (!pItemElem)7 C) x) N, J" g) b+ [1 p
{7 l1 i* Y6 j5 i. o% l+ n
vItem.dwKind2 = 0xffffffff;
# z3 @! R( M8 D9 v8 Z* I% u vItem.dwItemId = 0xffffffff;
4 I% g! P. Q5 U7 u0 U, A9 M vItem.nIndex = i;
- ]+ X- N- [& |: _7 t3 A }else {
) R; I+ x# U- h! E% ~; I8 I% v ItemProp* pProp = pItemElem->GetProp();
( g7 Z9 e) \) Y, c# Z vItem.dwKind2 = pProp->dwItemKind2;
$ H) Z" Z! o( t" b" k1 i' D; z vItem.dwItemId = pItemElem->m_dwItemId;; i- @8 u3 x; r7 v+ y
vItem.nIndex = i;: {+ n! Z2 a B2 Y# n
}2 p# l) @* k2 G, F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 K4 ] A! [3 H* O
}
% Z6 Z% s+ o5 T; ]5 d- P$ ~3 l6 a$ o //////////////////////////////////////////////////////////////////////////
/ g/ z) ?' |0 h5 X. Z7 N sort(vItem.begin(),vItem.end());//排序
+ E: k# T+ f a //////////////////////////////////////////////////////////////////////////3 N$ s% j- q' s, i6 ~/ `& y- q& q# |
//交换0 G+ d' Z* s0 ?5 G. J1 h
for (size_t i=0;i<vItem.size();i++)
9 W2 x/ Y. Q r/ o3 _3 s {
* e/ V j# E2 D9 j; e6 d //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 \ j: w& S* p% Z& S% R B4 F
pInvSort->Add(vItem.nIndex);
8 c. {! p1 I$ R }6 h& ?5 f9 g |
BYTE nDestPos = 0;# m! x) |4 R/ R% O- {+ }* E9 W7 C4 D# H
for (int i=0;i<MAX_INVENTORY;i++)1 D+ L" d4 `5 ?8 _5 z
{
! X+ A) R) f. X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 h& O A; r# P* K ^+ U if (pItemElem)5 Z5 o" ^2 f5 a0 u' `
{9 U3 [ }( H- D
if (IsUsingItem(pItemElem))8 Q6 ]6 p, C+ e( Z5 v, b* t6 H
{
3 v4 [* B9 X3 D$ f, T' u) ^5 O //这个位置无法放
3 b* y6 Q A6 R/ W nDestPos++;
9 i' H: c0 m7 y% R. q, J9 s; m }2 L3 p/ s% f% { P. ?: C- H
}. T7 V4 b* |6 p
BYTE nSrc = pInvSort->GetItemSrc(i);0 ]7 q. `* h9 l6 a: \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* r6 F3 Z5 }1 Z8 y3 e% p
if (pItemElem)5 }7 f7 I: ]$ E
{% I( W1 ]; ^% p; R& }! i
if (IsUsingItem(pItemElem))9 f$ w) o$ P# I% q7 ^8 K
{
$ ^& Q+ W/ U F' s# ?# `. { //这个道具无法移动,跳过
& f+ O) y) e3 O0 o% s! Q, T continue;
6 x' ^3 s+ U' ]/ O5 m }
7 A- e6 m/ t4 j) }( |7 j }else{2 S% o$ H& L6 K
//空位置 不用动
8 s2 R( Z6 J' F; y continue;
, B* i: `: G6 S( T% Z" r3 F6 Y }
7 |$ _8 C) }3 e) G. G5 a! R. H1 Z //////////////////////////////////////////////////////////////////////////
6 o' k+ x- G$ c6 z! t7 \! O! x //开始移动5 f x6 U% E8 [& E% W) ]0 |
if (nSrc == nDestPos)
3 {9 x0 n2 i9 Y; N {4 z5 l' i: B+ r6 b9 ?# P
//原地不动
! w" w, @7 t. c, }6 N1 {; I nDestPos++;+ f5 P; H6 X& M* x
continue;( [/ v6 Q; m. r6 z, E, l/ i& r
}
$ U. S' j* Y7 a* Q7 a1 C3 P pInvSort->MoveItem(i,nDestPos);
( I2 X- R- M5 X7 S- Q2 q g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- `9 V) B2 d. t; d Sleep(5);7 @" s9 N/ ]5 b: }5 H
//Error("移动 - %d->%d",nSrc,nDestPos);9 f9 z& Y; E. i2 u: J! ?; _( x
nDestPos++;
% y1 g3 [" d2 z% e% D2 i6 x }
- I+ q% U. d+ p5 Z; d: W+ E //取第一个元素的信息
4 w3 j* A+ {6 y# \) H2 u* ] /*
; W. n% N7 y& I% Q if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). x d6 r6 e- r" ^0 N' K
{2 {8 S( Q+ ]' J+ }- Y. O+ b* q+ F
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' O* M! J+ `' H3 F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ R7 S3 x C- N8 k }9 v M8 U8 m8 I2 ?* ^
*/5 [! J2 M% J M. Q
//////////////////////////////////////////////////////////////////////////2 v I1 |; z; r' W+ Z \! o
break;
7 l/ P% [" h4 W. R7 T; ~ }% i6 B% _$ b1 i$ @9 B; O! ^6 b F/ b: T
} 2 \$ K; ]% d, I: h: H( M& u
}
R3 K! o" h* G5 s; Am_wndMenu.SetVisible(FALSE); @0 P# c( z9 p& W
- X+ \6 L" c1 x
--------------------------------------------------------------------------------------------------------
c1 r8 ?* y* \2 B& F' t搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; @+ }- \( W+ w2 [: w2 J6 z7 z{2 \& X5 B# ~+ Q, j
BaseMouseCursor();
' f( J& |0 k; T- O8 R% G x}5 |# |* W( m+ Y6 U w" x ^
在其下添加:0 q+ f) I, V, j/ s: q7 D( Q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 S0 x! l4 Z; W" M& N5 U3 |{3 X" I+ F1 S- A7 a, C% R9 R: _
m_wndMenu.DeleteAllMenu();$ e, T- P) X, U; X
m_wndMenu.CreateMenu(this);& f2 U/ u1 k5 N3 P! L6 `9 l R5 h3 P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 b9 Y8 g/ Y7 R3 Y* b% Y9 a
9 N2 U$ c/ g/ o- g! v3 qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) ?" z5 ]; Q, x
{
) S6 F3 v1 Q$ ~& n3 U' w //P以上级别才可以删除所有道具0 O7 p2 P- J) L1 d" j* ~5 |# |
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' A0 c2 J! C# M* f, t% z' D- `}: U' C# W6 R) e" j0 I" w
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 {1 L% |8 p/ }
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 G' X( v+ P$ q2 O: Wm_wndMenu.SetFocus();6 e" N8 O' M, a3 @: s# @
}* _ O0 `( i- {" ]" d# E# T
------------------------------------------------------------------------------------------------------------8 S- X L2 F+ Z$ |# l" W
*************************6 K. T) B" u" j' t5 k
WndField.h文件) L3 \) I8 q. J' o
*************************0 D: C+ h% h( X# `4 J
搜索:BOOL m_bReport;% L) |) g: |8 n/ y2 }
其后添加:( W: Z7 [% P# t9 W' w
CWndMenu m_wndMenu;* {$ L* z8 G+ C1 r4 I. \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 e2 \3 o- k; f( a! r, g
其后添加:
# V8 d' N& [' \; Q, ~3 W7 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! U# Y; f! s: h1 f
# m& Z* ~& H# W8 w+ V/ d0 ~
" l! J8 Z1 u2 G' S1 P" J |
|