|
|
源文件中_Interface文件夹下WndField.cpp文件
( l, O! m f0 `2 g/ P6 K5 n搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 [: P) ^% Y* I
; J- Z" e3 `/ |5 ?% [! Pstruct sItem* t8 V" U6 H7 W" b1 F0 h) W
{
# P- u3 l' C, i6 ]DWORD dwId;
+ y( `+ A1 J7 d' hDWORD dwKind2;5 S. H! b- }, Y5 P2 L
DWORD dwItemId;
/ M# g; D7 y- D; _3 [+ v& }BYTE nIndex;% _" k. P8 D* }- L$ n% ^7 e& L2 S
sItem(){
( L. ]. ?+ c2 x% Q# } dwId = dwKind2 = dwItemId = nIndex = 0;
4 M- l% J i6 G6 p- }- X}+ i3 ?2 r) Q/ ^6 h0 n
bool operator < (const sItem p2)
# x& q8 B9 r, N2 F* q' a{$ `4 Q+ m% Q2 [ \9 L" W) s
if (dwKind2 == p2.dwKind2)/ f) v) x+ `4 C( ~( w- W* D. X, b
{: G% L/ X! E% d9 R
return dwItemId < p2.dwItemId;& k; c0 v) t: a, Y5 \
}else{1 v( E- O- D% w! g4 }
return dwKind2 < p2.dwKind2; M& \/ n- W+ l
}7 U- g( m) ]: f: `& ?
}
4 B1 v1 @" g$ ~6 _2 `};
$ X8 J9 @) o& B& l* _class CInventorySort
0 w8 ~% Q- U, @! d) z+ E' [{" N: C' ^; D; r: {5 e6 O" \6 {
public:
' n- O2 o* g# y' v; Q6 d- ECInventorySort()9 v% Z4 W& b* M3 _- e/ J. q5 Q6 B
{
- w0 f5 b7 ]. R m_dwPos = 0;
+ P9 m5 z2 s& m9 }: F}- [1 h7 ^' A" N- e
~CInventorySort(){}' H& Y" J8 P: @3 |2 `& y5 \$ R
private:4 W+ ?+ e. c8 B) Y7 S! u8 q/ M7 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 V$ s$ c9 {$ C8 iDWORD m_dwPos;
g0 F3 b9 P$ F& spublic:, j# V5 F0 ~# I. u! |, Z' v
void Add(BYTE nIndex)
m: |1 ?# p7 s1 @7 e{
6 D! Y7 w1 q/ B if (m_dwPos >= MAX_INVENTORY)
/ V# S* L/ t$ z$ D {4 o( e* i+ U# s- H( Z
return;
( I3 m7 P; L2 v: g3 [' f }
% b% P9 s# W7 T m_Item[m_dwPos].nIndex = nIndex;+ e9 d3 }) a6 u t5 E1 n' r
m_Item[m_dwPos].dwId = m_dwPos;
: z* d3 k( p: g m_dwPos++;
: C, o& {& z9 X) w" D' j}
0 F+ U& {& p9 H/ }4 W c; _BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' x3 G4 Z: M" P1 O t/ N
{3 `% H$ S! L1 O1 z
for (int i=0;i<MAX_INVENTORY;i++)# u# D) t* K. |) q
{. Y4 j/ v1 q& {$ n$ q; D. M7 c; e
if (m_Item.dwId == dwId)5 }" m1 L$ _& w9 a
{" ~: ^! ~: \- n; h, `3 \
return m_Item.nIndex;3 r' n( ~6 m w5 e; d1 A$ }5 l
}
1 ]/ [5 o' p9 n* W; r4 p/ t$ X }
: V# u7 N% K/ ]9 n" ]$ F; V return 255;
2 K. J: f5 E/ ?}
3 ]; M6 P+ n/ Z" Z' N0 I: Xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 Y* i) i$ _0 x, U: K8 U" w, s$ e1 p$ P
{- c {! E5 i3 J
BYTE nTmp = 0;
7 j9 L, @! @9 ] bool bDest = false,bSrc = false;6 f3 W7 y# V( H' w+ K
for (int i=0;i<MAX_INVENTORY;i++)
) p0 k) | G- X, `, ~; Y {
2 }6 i0 x# X* K6 d5 z0 N if (dwSrcId == m_Item.dwId)
/ e* F5 O. ~. D! | {. W7 ^3 ]- K& ^/ k
//id相等 则 改变对应的dest和src
; q: V$ E, r; w2 K& a- e nTmp = m_Item.nIndex;
5 P- j9 l7 j1 `8 P7 r4 s1 K( R1 m, _: v m_Item.nIndex = dest;6 y/ [: L: J$ t% S: `
}
; e* h: `( n: A/ P1 j% u( p4 D }
% w, ?# x! L; g! {7 J //临时数据保存完毕,交换开始9 E& N5 n) w9 T% H
for (int i=0;i<MAX_INVENTORY;i++)
7 l" [4 Z9 q# F0 s7 Q9 g D1 p( q {" F# r5 a! B) }/ @4 \% ]
if (dest == m_Item.nIndex)
0 P9 `# r( J- t# X0 I u, S4 Z6 ?) v( _ {
: \9 t, }& I/ |! }0 V0 i& {/ S //id相等 则 改变对应的dest和src$ i+ n4 }7 v1 o% F% W e3 Z& K
m_Item.nIndex = nTmp; O% O) Z( V' D+ x# @
}
( P! f. F) c; u8 B2 o" n" u8 h7 X }) x5 Q0 [% H% w7 r3 ]* n) j1 T2 n
}% |0 Y! M( L# ?$ Z! I" H# V! g
};/ A% H! g. V# P; y; G1 ^
-------------------------------------------------------------------------
8 t. O8 T1 i- B. |2 y q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). x3 P1 v. \# \8 C( K3 @4 w1 M) V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); \' b6 B* [4 j3 g' P+ L
紧靠其上添加:( \* W" L7 @& ]0 q, ?& c
if( pWndBase == &m_wndMenu )
, F4 c+ j1 ~ j# v& e{8 ?: X7 q) ~! ]' _7 d$ ~
switch( nID ): {. x1 i; G" c: a$ A! ^+ H
{
( t# B0 W( y5 K+ h3 P- P1 t5 A case 2:
; i* k8 r" {$ i) _+ K/ @. _% K; X {
& [" S+ A# N) t: T, o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 i9 q* p( H5 N: u& ]; t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). o9 ^0 P, h8 i, q, h" _
{
' g4 |3 X8 d4 R. | break;
0 q W/ W8 v0 k& | }5 x6 B0 T9 w$ X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ {! T( [2 q4 E. o% |$ Z
{" P$ y2 ~* T6 s. }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) T. R5 k2 w' m3 U0 g9 l0 [
if( !pItemElem )! B& B9 A Z% e7 Y, H0 k% L5 J/ A
continue; V( b i: Q4 p I. f# {+ ^# {8 z5 Q
if(pItemElem->GetExtra() > 0). H& K1 }1 g! d" u. ]% t- ~
continue;
; C& S( E1 d1 k) w3 c$ v6 ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 l5 ^/ s. I" z1 a, j, i2 J* n- ?
continue;
, |1 O: a* D8 k if( g_pPlayer->IsUsing( pItemElem ) )
" M( I i: t7 ]0 @+ b3 [& Q; p4 m continue;
3 j$ i' p8 K* g! ?# h: Y$ c if( pItemElem->IsUndestructable() == TRUE )& E' d: L# ~/ V* V/ r
{
% f: U* s/ z1 n. ]- z7 o g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) c$ w6 {5 c2 n, Z# ^- m3 V
continue;% o b' B9 d7 {) W* H$ G: O' ~
}! }. L5 t3 Z5 Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% s- d9 N5 @" u6 Q) t6 T+ v' N
}
$ g) m' U* ~/ ]; O0 m1 ]% u break;
/ u( u+ G6 r" J: F% B H0 \ }
3 n4 V/ n: o j4 |% O) \+ O6 [! y case 1:; V ~' [8 f- o( i; @
{- v* s( n& K" M5 X
//整理背包
" N# I: Q3 l5 i% H7 R$ M //////////////////////////////////////////////////////////////////////////
3 V- P1 M/ z+ a! c6 V2 @' `% P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% `5 T; m* |. |* Q: |
//////////////////////////////////////////////////////////////////////////0 N. @/ o/ W0 U# `/ W
//////////////////////////////////////////////////////////////////////////
: M+ O% X# K* Q5 O CInventorySort* pInvSort = new CInventorySort;+ U3 Y4 ]! d" z( d2 Q) `
vector <sItem> vItem;
# Y8 E+ }2 u& E: O vItem.resize(MAX_INVENTORY);//初始化大小/ M% {$ y% v) c
//////////////////////////////////////////////////////////////////////////
8 j, X, s/ Y5 j, k) ]4 l: i //填充数据# |1 d0 j# {) R! n# h5 j0 C
for (int i=0;i<MAX_INVENTORY;i++)& A/ g- e* Q9 h* E6 Y w
{
* C5 p3 S/ _. w. a. I# h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! n$ j" a' P7 k1 N4 }- J
if (!pItemElem)
f/ l* j+ O" ?. Q$ l {7 t% @; X/ s' j+ m
vItem.dwKind2 = 0xffffffff;$ s) P" w4 t% m; X
vItem.dwItemId = 0xffffffff;
; k" A9 Q$ S7 ~2 f& n& |1 \ vItem.nIndex = i;
% o8 Y0 ~1 }) r. l8 j2 J }else {
9 j$ H {( Q- D ItemProp* pProp = pItemElem->GetProp();, p) r3 q4 Q' C2 r6 F- |
vItem.dwKind2 = pProp->dwItemKind2;3 g4 M1 B, s& n8 A: r' |4 H
vItem.dwItemId = pItemElem->m_dwItemId;
4 C% Y) v5 H) _ vItem.nIndex = i;
5 z4 e+ z* _! E/ D6 |! b }
( ~ W3 W# m" c% T" U7 e8 c! p$ f9 Z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 O r5 c/ H r8 t+ {7 m2 H* e4 ~
}
u0 c4 t, e, z/ `0 s, z /////////////////////////////////////////////////////////////////////////// }! Y7 V% z3 B
sort(vItem.begin(),vItem.end());//排序
" Q8 n P s7 D# I: g u/ L# ] //////////////////////////////////////////////////////////////////////////) I- X2 K3 x& Y
//交换9 R- b5 d0 g1 W4 J3 D# G
for (size_t i=0;i<vItem.size();i++)0 B5 w! S b- O' g/ Z" U1 j- V
{
- d3 b/ X/ T& _; |- u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# y3 M+ s) r, b3 K+ ~ pInvSort->Add(vItem.nIndex);
) D X( r+ x2 D: Y* [8 R" O) c }# _2 @+ q* W, w3 }3 e, h; F3 q- Y% k
BYTE nDestPos = 0;) u, Q' |' g/ b, q
for (int i=0;i<MAX_INVENTORY;i++)% x3 h7 ^$ h. ]! S% H
{
" ?* [+ S# c- B2 M8 b9 {' V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 f J- ^8 e( p& z$ W
if (pItemElem)
) e4 f+ G9 Y! O+ k" ~! h {- x& h$ G/ W5 n8 ^
if (IsUsingItem(pItemElem))
5 s& j" ]% m& I! K! F0 e {
- v6 J$ ]1 P: a3 J7 K; ~! J1 S0 w //这个位置无法放
8 m6 ~. q7 }4 M1 d1 ~. h9 x5 t# Y! Z8 N nDestPos++;
7 V' T# ]# @& x" z$ U. }: I }3 y! G2 ^" B9 d; c8 ]0 C8 {' r
}
7 a: ^0 i# I5 Z9 z+ p3 v0 w BYTE nSrc = pInvSort->GetItemSrc(i);
" I- v8 R( k/ A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 h5 g: l. }$ l+ a8 Z. S) S- g! ~
if (pItemElem)8 q7 f" k3 X/ y; Q
{
0 t! g' M5 O! t if (IsUsingItem(pItemElem))
. x: O+ |8 V4 W! z1 M4 H. _ {$ n+ _; S; _$ L& V0 k) s8 L; W$ U
//这个道具无法移动,跳过
/ p4 n: j2 {3 ?# I! h6 ` continue;
# h, x3 D- ^, o, j4 T# t# { }
! M& ~: x1 M& y- u3 H! F }else{
3 v* W( H [0 z, u! ]: d! b //空位置 不用动
* {8 f* x6 z9 s g' k continue;* ]* ], w T/ M3 J4 j2 }. b
}
$ @: [! z7 s) M; B; d( ~ //////////////////////////////////////////////////////////////////////////8 z" B- T6 F/ O& h
//开始移动+ o* E0 @. x- h5 ?! c! G
if (nSrc == nDestPos)
3 o0 E: Z1 N$ b1 R; n+ W {
7 H7 r: f/ N6 e# V8 I //原地不动/ z- V& S6 O7 b4 X+ f, g# p
nDestPos++;
" m# _' p, F" Q! \/ Q continue;
# W9 Z# y. E- |/ V7 D5 r }
; a t2 U9 l& E5 v6 G7 r pInvSort->MoveItem(i,nDestPos);3 r$ s1 Y; z$ }) N t4 I, F
g_DPlay.SendMoveItem(0,nSrc,nDestPos);% o- U: `# |. l; N, H" r
Sleep(5);
5 `- Q: v3 p9 h8 W6 B- s //Error("移动 - %d->%d",nSrc,nDestPos);% B6 {$ f0 x/ ^3 p0 d
nDestPos++;+ D0 l* w+ u7 N' `% }/ U9 P
}& K; F: b+ G. L! ?% @" D
//取第一个元素的信息; ], o! i4 ~: X6 E3 P$ F$ f, x
/*
2 J h- K k* ]- H4 b! T if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 a/ R& }+ g" k6 }8 i0 b& u
{
4 g3 ~4 S( H2 R: A. Z/ E: W+ I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& r- G+ s% a0 G6 C0 }
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 D) f2 I5 W3 x! r( k' E# x
}% x, H6 A5 i/ V
*/! j: M; |# Q2 Q7 t& M! l
//////////////////////////////////////////////////////////////////////////
: y" r/ M% u1 A) ?5 ^1 t/ S* ] break;8 ]- r0 `% U+ a
}
: v3 L' v$ Q0 F' Q5 |- Q' N# O } $ S! f. Y, s+ U1 F" F. w
}, h) L Z% t: t. j- g! o* I! d
m_wndMenu.SetVisible(FALSE);& m8 ]! r1 I! p2 N( B5 `
1 ^9 A: [- F/ _! o/ g--------------------------------------------------------------------------------------------------------9 B& l( Q2 ?! A! j. a8 H$ O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
) F3 A5 a5 N/ |+ q$ B{
2 h$ b B! O3 R7 r* v+ d n; B4 S: UBaseMouseCursor();! z) y( ]1 i5 n$ z% H
}7 ]* A0 w9 Y, N- ] g0 c
在其下添加:6 ?/ ]0 k# s& H2 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ Q" L2 a6 _* s, O
{
- p* H4 D& R$ r+ o+ h |m_wndMenu.DeleteAllMenu();
% E! v1 E" c. ^4 E; qm_wndMenu.CreateMenu(this);
6 F# D# d* x1 o+ D4 Om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. Y5 G! L3 R/ R3 ?1 z9 d
: L4 c2 }: t* m( N- vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* g5 U/ E, G0 _+ s' t{
( r0 P3 I* E0 Z7 C2 v5 H' t //P以上级别才可以删除所有道具7 X/ b# Y$ S; S8 C- Y) A2 d& T) U. Y6 @
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); I6 W7 N& j' v9 F Z* c
}! M' p1 u" j5 S4 t3 ]- g
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ b. Z0 M, i3 V) Q4 ~m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );1 y n$ N$ z* b! K5 N. }8 X, T% W; C
m_wndMenu.SetFocus();
* y. o6 ]/ l' m" ]$ s D1 u}
9 ~8 `& q ?/ x$ i% N' A" S! n------------------------------------------------------------------------------------------------------------
# u. C J% Z/ y*************************
P6 ?3 S$ u/ X0 {WndField.h文件* Z6 Z3 ?. H$ p, M
*************************
?4 D# I$ P; B: |6 ]% k7 y! V搜索:BOOL m_bReport;/ v' l" X" C1 @ [ I+ f4 \1 z- M
其后添加:
4 x9 o" e+ l9 e ]2 U2 ^: p$ \3 i3 iCWndMenu m_wndMenu;
/ w& V# }4 y/ v3 P7 Y& o* N+ L7 y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 _: r. K0 L' H: p$ p0 ^ M其后添加:7 V2 D' i: r$ t! }
virtual void OnRButtonUp(UINT nFlags, CPoint point);
^! |3 R$ k! r) Q$ B/ ^; C3 L
0 C. Z2 ]+ _: |- x# p3 k" }5 ]0 F: G' y0 k6 ]* J
|
|