|
|
源文件中_Interface文件夹下WndField.cpp文件
7 P8 W& m5 I9 X& q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 A, [& c) ^( Q- v" T5 L2 r
6 a& W& A8 x; N) h4 Estruct sItem
1 ~1 t, {+ p R0 c. e% q{2 U5 `- [$ ~% W9 ^
DWORD dwId;
0 J. Y! i6 S7 PDWORD dwKind2;
' ^/ B# n9 Z5 o* I; s& kDWORD dwItemId;
. t ^: t4 ]* `2 z2 wBYTE nIndex;
; l7 \2 z! W' C! M! K" dsItem(){. A1 k& `$ y. ^0 C
dwId = dwKind2 = dwItemId = nIndex = 0;: o, M$ x6 O4 d, Q( H1 c9 [% f6 d
}7 P% h% g6 h- h9 o- I: k$ W
bool operator < (const sItem p2)
) M/ v5 B( i9 [$ b{; r* u& p5 p+ }% N6 ^3 D* a
if (dwKind2 == p2.dwKind2)
; f4 j( @+ g( q6 L {
$ R( Z% D4 C+ A6 w0 u return dwItemId < p2.dwItemId;
- G. r+ T" a( s" ^% U& V }else{3 c1 S( O$ |- T0 p
return dwKind2 < p2.dwKind2;# ^& y" n9 M2 X2 L
}* R7 [8 t9 n- v$ h+ T2 A
}
2 ?. ?- k7 h( G3 N$ k};. Y3 z' e) m, I7 ?! z( [$ _
class CInventorySort
2 s6 H( b& P, o- L- n8 m{2 A, W" I' D+ S0 x& E5 G5 N
public:
, R5 b% y m2 j+ O2 WCInventorySort()
' L! G! ?% k0 L7 J{
# Y+ J: M1 ~: |7 @( o% T m_dwPos = 0;
$ E& D# ~2 |4 R3 J6 l0 u}3 v4 h9 [1 g2 F* X' j% d
~CInventorySort(){}/ e) P5 O2 X3 l, ^
private:+ `/ r4 o3 U: n& P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ U6 U9 Q% C/ |. D7 `
DWORD m_dwPos;
2 J" Q. M: Z8 ]. Vpublic:
' N7 M- ^0 h& `void Add(BYTE nIndex)3 ~* A( r% _: Y9 ^0 \9 U, U
{+ x; @+ ~0 {3 u1 @
if (m_dwPos >= MAX_INVENTORY)& A" X; q. I5 `4 Z4 v
{* v) r% x+ _+ d
return;0 I7 u+ i: p: Z7 Y/ S
}
/ Q* K4 E; Y* A4 j6 j' x m_Item[m_dwPos].nIndex = nIndex;
8 q5 |4 J# C2 C$ {/ V" z3 L: F% ? m_Item[m_dwPos].dwId = m_dwPos;& S! _8 Y* I& n( B3 i3 h5 U
m_dwPos++;: l. p+ L2 D. ?% R. M! m b0 q
}8 l. k# k+ Q$ r l+ I/ X7 a
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
O2 h; i/ Q d0 A{! g2 S: y/ L9 y q/ L
for (int i=0;i<MAX_INVENTORY;i++)
6 j/ s& R# l* @1 W {
! c& }- H9 R# i5 d if (m_Item.dwId == dwId)
0 g- A/ ~! ]& \7 y1 o {6 ~ j. d8 A* e H; d
return m_Item.nIndex;
. x4 I0 B. ^, v [7 A. I2 G }/ n# B6 ?2 z4 Y( _4 b
}) ?# z* l8 G: Y4 D" m* Y8 B Z
return 255;
. m# C X4 ~0 S3 o}; |: Z$ y" v2 C% g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ h: T' `4 o4 o3 I4 ^- |( ]
{$ P$ S7 N5 T. H4 b7 M' ^8 y
BYTE nTmp = 0;. F( b$ j' y. d8 V$ I0 ]8 F0 c
bool bDest = false,bSrc = false;1 [2 J* A5 M$ O! F! h/ S
for (int i=0;i<MAX_INVENTORY;i++)9 S) O9 t* Y5 ?* O
{$ T. ?9 `, p- s Q+ B
if (dwSrcId == m_Item.dwId)
- b9 ~* l1 r( A6 i {& J% [1 K/ i' f* h( u; S7 Q0 h, M
//id相等 则 改变对应的dest和src! f6 O1 z( t* A/ {
nTmp = m_Item.nIndex;
" i2 Z4 z. k* ~% [8 W: d m_Item.nIndex = dest;
& @! b3 O2 f2 w( o }
* f* Q% Q& i5 A; }8 v8 k }* W6 k$ {; A$ T8 N8 O$ e
//临时数据保存完毕,交换开始: g- C: F4 t( z4 m: H1 I, g- W
for (int i=0;i<MAX_INVENTORY;i++)
H( i# P& K$ V& }: B$ I2 R {
! I0 t. v B7 S8 m9 c% \% x% G if (dest == m_Item.nIndex)7 P; X6 V. Y, L* L* q8 D* b
{# b( `; G* D: x' F/ k+ j
//id相等 则 改变对应的dest和src. P7 {! c" K( Y# O2 [7 t, j6 X
m_Item.nIndex = nTmp;! X1 z; q& z8 P3 a2 |5 e7 P% C
}: L& p" d' z6 ~) G+ k
}, n; C+ L' `0 t1 k( _0 G$ ?4 z
}6 y4 J3 W( ^$ i
};
+ u6 m( n# |6 ^" z% n, j! T* O& _' k1 y-------------------------------------------------------------------------, n: |: E t$ }, `8 G6 G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 ] q2 v. X- a9 E7 A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);7 M' L8 x1 X% h" i
紧靠其上添加:) J9 B9 Y) p, \. y1 c% s/ M
if( pWndBase == &m_wndMenu )% z$ J. A1 {0 P# ^. T
{' R. {" b' D% b' y( D
switch( nID )+ v" @1 m) K- d& P0 }
{! [* U9 N$ p* D1 E# a$ T) @
case 2:' \9 [( g# X: N C, t
{
: `* ~% \0 J, _# N5 p3 @0 l5 s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 X- Q4 A) _; ` l2 Y6 ~' k5 ]. l
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 }. c- e; A( R0 y
{
8 w) a2 O$ h+ ~2 Z break;
8 s$ ^6 R; b: W1 Z. q1 D! k! X# l }
% Q* {. K" v/ N4 b3 m% c for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; e3 }3 B" `1 X; |( d+ u- A {
9 W6 ]/ J! p1 Z0 e( r- c% H& V3 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 ^% ]+ y8 |% R/ w8 O2 B
if( !pItemElem )
' s4 Z6 S0 z7 E0 T# j9 z* M' d& G$ M continue;
5 \) T! j7 C& f if(pItemElem->GetExtra() > 0)' @( x% _4 l: s/ {
continue;
0 w; m2 b- V. Z# g- A if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : W# F, e0 z7 C8 ]8 b
continue;
" Q/ r5 W8 w1 d, v! x% |% B0 l if( g_pPlayer->IsUsing( pItemElem ) )/ X3 {9 e8 z- ?
continue;/ e3 w- ]/ ^4 j9 ~1 m' a
if( pItemElem->IsUndestructable() == TRUE )" ^7 d, p* J/ ^! {% k) Q R
{- C* ]+ G% O/ G; V. n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( w9 r. h" ] A
continue;
5 q: r M1 Z7 d0 A* ~: [ }
4 K3 a: z8 k) @( K6 J g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, K5 r0 W- r+ @/ `% c9 q+ D6 @' o
}* A- p0 U( d3 A: C+ e
break;
; l3 s, |5 a& X0 R- F' ` }" R d) C4 N- d& c
case 1:
# P. c$ Y9 S6 q' N( l {, N+ g) L# M+ B
//整理背包
) h! H. }' u7 r) `) _3 \! z9 v/ w2 i //////////////////////////////////////////////////////////////////////////! w# g. C; w& w( X& S- K1 d
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; h1 y- ]2 v9 H4 J9 T' {5 ]+ C
//////////////////////////////////////////////////////////////////////////
) J/ I/ [) N% g X //////////////////////////////////////////////////////////////////////////
7 T! n. w. m2 q$ b CInventorySort* pInvSort = new CInventorySort;
9 H" H. E2 q( v" Z m vector <sItem> vItem;' B1 H+ \: |1 T+ ?+ O0 w/ [
vItem.resize(MAX_INVENTORY);//初始化大小) I; _9 ?4 _0 k- D }
//////////////////////////////////////////////////////////////////////////# b# d& Z" Z) c+ c' L0 n% c
//填充数据5 W9 }- L. v; p5 V$ b5 B% q3 T
for (int i=0;i<MAX_INVENTORY;i++)( M) {! W, ~, h7 P: g; M+ z
{, V- _: ^# l+ [& u
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! j) o3 q7 K) @) ?; K& k. a
if (!pItemElem)( u* ^! f+ O; {5 H0 n
{6 r' i* R7 t0 c. ]+ J. J
vItem.dwKind2 = 0xffffffff;1 }9 g, R/ V9 n* z' n0 x2 p
vItem.dwItemId = 0xffffffff;$ X( d0 |. M$ ]$ @. n
vItem.nIndex = i;
2 u8 n ~& l7 ~+ c }else {/ P% v" A+ J! u& a! { r$ g
ItemProp* pProp = pItemElem->GetProp();2 C, ?+ R/ b/ i6 T
vItem.dwKind2 = pProp->dwItemKind2;
2 u0 [/ _" H& s% z1 s1 l3 l vItem.dwItemId = pItemElem->m_dwItemId;
7 ^ z! E+ v) h( p4 A0 f+ N vItem.nIndex = i;
! R& q" m* j' a& I2 O; X }
, B V' V1 o E! ^. R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% D. r5 K, z6 S* L# R
}
2 r6 g! L; r+ a$ b" c' U //////////////////////////////////////////////////////////////////////////
, N. Z" W6 O! k, K* S1 L$ Q6 d sort(vItem.begin(),vItem.end());//排序$ q% ?+ k2 s, ~% V" V5 c. d
//////////////////////////////////////////////////////////////////////////( g) L* D# w$ F7 c }
//交换
2 x$ ?5 ]7 |2 W s8 n' k$ `1 f for (size_t i=0;i<vItem.size();i++)
& Z3 ]) \5 G2 E, m6 c: V {
9 l( O: Y1 z& j //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, @) r' Q" A6 H! U7 b& v7 i pInvSort->Add(vItem.nIndex);& D! E/ L) t Q8 C% { l
}7 R" f; F/ ^! Q. b5 O
BYTE nDestPos = 0;
6 H: H) Y9 a V* g( F. b for (int i=0;i<MAX_INVENTORY;i++)0 e/ `2 O, Z2 l' k
{7 `9 U& B" n% X1 q9 ?2 S* M$ [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- y3 Q8 C+ q, k" |3 J2 Z if (pItemElem)& e6 K t. B0 c
{; s! a+ m' C. Y; }/ Q( Y+ O; E9 p
if (IsUsingItem(pItemElem))1 z" W8 J6 M- d& Q
{6 N# M9 H& ?" V6 |# W o. ^
//这个位置无法放0 W7 }4 I4 L# n; z: m
nDestPos++;
- u x! X) t1 K. x3 [, q }) d! c( S4 i: l$ p9 S* H6 O
}
0 J p' a! O. A' Z i BYTE nSrc = pInvSort->GetItemSrc(i);
7 h1 |2 j, f5 X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 f- r) X Z! C6 Q
if (pItemElem)
9 z/ H1 b7 u( v" @# a {6 z+ }% I2 ?5 m" G* W
if (IsUsingItem(pItemElem))$ ?6 b! _7 f$ i3 }9 e( H! _
{5 T3 }4 F( U1 N6 z# }8 V( v
//这个道具无法移动,跳过
$ j$ r- I) A& t2 N8 g continue;8 h5 u9 C& }) T5 y6 t0 A
}
8 l, d5 P8 ~' w* u* L7 d- K }else{
( q5 q o( t9 @- \; V3 e9 F7 f //空位置 不用动
- k& n: }9 \7 q, r- U6 K# M8 R% c continue;
, d: X) C$ B0 @, U2 Z- z# u% T9 G }4 l2 J/ ?7 O% \+ g; y6 `& ^+ L) n
//////////////////////////////////////////////////////////////////////////+ B* s* K5 u B$ I1 I
//开始移动5 S# Z6 B3 V* t. o
if (nSrc == nDestPos)
0 J% ?! }! J; k- U# e( v" F {
3 {7 z/ e% z* |8 W //原地不动
]4 V2 q: h# [. r5 ?+ E nDestPos++;
# T* }+ m/ o9 h6 m ] continue;+ c; X+ K X* h; b) @1 U( E9 @
}4 O% |6 T% o3 m1 {) R7 e' x
pInvSort->MoveItem(i,nDestPos);0 D$ W! Z+ e& u! W9 i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) t2 T% e& l7 H U' r- U Sleep(5);
. M% }1 j2 T! K# n" L3 Q //Error("移动 - %d->%d",nSrc,nDestPos);) b+ w; J; t( H1 O9 w
nDestPos++;
$ X C2 l2 F8 ]: N! W. D; A }+ E3 p0 f* z% O
//取第一个元素的信息
4 \% b1 Q; u" F4 N9 A /*
6 q4 @" N) ?5 Y. I4 h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 \& n* n% g/ A& y7 _6 m {* E4 a, J- v" k Q/ t! L/ y0 [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# L+ g2 N% ^7 ~ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 U! M. z! F* a" F& H. X/ \) V
}
* `9 A+ J6 ? Q */
, D7 G4 G* K! H5 { //////////////////////////////////////////////////////////////////////////
5 _ g3 ]/ S" q& H break;0 d. ~* j1 C/ U$ Z& T
}! O: O, s0 s1 W. x' M, {
} 1 t* Q& `, {" u# a5 Z
}
/ ]$ F. n1 Y# p( C1 h! Tm_wndMenu.SetVisible(FALSE);
, n! s. O! U7 ] |
1 z w( J3 a+ M8 G2 @0 S--------------------------------------------------------------------------------------------------------
' o/ t- S; m) U$ s% X" k( _0 I* Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) D9 l' j/ ~4 Q) u4 ^& F& q( i! Z
{& K( t, a: f8 C9 x/ O& q7 f# B
BaseMouseCursor();
& Q/ ]) d2 r* ^) z, ^}
- U5 r/ @! E, I/ a' O在其下添加:# A2 B" {$ U1 ^7 @2 j; r" Y) {# R8 L
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 g, K2 p; Z/ w2 n+ X3 ]
{
" S" R7 n& n( Q' o% im_wndMenu.DeleteAllMenu();, t7 i; m: o% V9 D$ k
m_wndMenu.CreateMenu(this);
5 _/ ~+ ]4 p, ?0 dm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 e9 k+ ~. w: j% c* F+ F( p" }% S8 i
, [1 v* j8 V) N& Q% v) d" w$ J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 b% x5 V9 ~' B7 ~9 z+ X
{
9 l* Y X) N7 u! A //P以上级别才可以删除所有道具, q4 z* l \" Y" l& z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 G k: I) A3 j) ]- l$ v}% S4 K- z( J, J8 E6 ?4 [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
6 k' L5 B, s4 m C- S1 s5 \; Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- P& {6 S' G4 G* S7 T+ G% Im_wndMenu.SetFocus();
# z4 J w7 v! t}5 m& o9 \1 T3 Y
------------------------------------------------------------------------------------------------------------
. n2 u0 M% c. L1 u: n1 R% o! y*************************+ R$ H$ C$ D* {( a8 F/ ?
WndField.h文件/ Y* C3 w9 k5 T! p
*************************
4 B5 O. m r+ v" O$ {4 G搜索:BOOL m_bReport;
3 {/ q6 J2 Z6 H. Q B& v! D其后添加:
% A3 E9 Q! I$ q! E/ W1 i& oCWndMenu m_wndMenu;# s5 \: h0 N; x* Q* O
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' k! _" E7 | p3 R1 V. k, b# n7 C2 B% ?
其后添加:' |+ D8 R/ \# F% d" L) ]% s% r
virtual void OnRButtonUp(UINT nFlags, CPoint point);% b' D P! r$ _. Z/ i% q ~; h7 @
+ M8 x, B9 N. J, e1 _" T: H( o' x
|
|