|
源文件中_Interface文件夹下WndField.cpp文件
9 G, l, u6 A! _9 G/ L; {% U: \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
( n, W: a' T% R. c
S# g4 L. X+ b2 Qstruct sItem" ^+ A8 z9 \$ K5 S* |
{" s( C4 x3 ?' x) o# v5 n
DWORD dwId;5 B, P2 s6 ~0 z
DWORD dwKind2;
; e& d' G; E! g8 l. b' I3 h$ |" hDWORD dwItemId;
* m# B$ W& P7 x% WBYTE nIndex;# R& j9 P8 J6 X' \" }7 R m: q
sItem(){1 r% b _/ D! L. @; c: J
dwId = dwKind2 = dwItemId = nIndex = 0;* V: B/ E, I9 l9 n
}) D! P4 \5 o' V4 g5 q! `7 i
bool operator < (const sItem p2)
% m0 u# `& N5 D- a$ `{
+ }3 b& o5 o0 y8 S V) T if (dwKind2 == p2.dwKind2); [5 J& k6 J% M6 [0 {
{' F0 ^+ b: s+ J& K8 G) f% V
return dwItemId < p2.dwItemId;( u; _- ^8 u6 z% q6 b4 C$ {
}else{9 u" _* k: j, w
return dwKind2 < p2.dwKind2;" n) y4 B# h9 k9 ~/ ^& V5 X; r+ ^
}
2 I l% {1 C4 }8 M X; n$ G}
; }' E( A# P; E) L$ l2 C+ E};6 J) q& R8 l) F2 z. q3 \3 m
class CInventorySort! d9 ]- J; [- {3 I
{
% G& h/ s: ~& E; e) ~public:0 d% z' V- p+ Q
CInventorySort()* g U/ x5 p( F. _6 b9 `" ~. c
{
' T6 D/ B3 { d" e m_dwPos = 0;; o6 M" e" |( \$ }7 P/ @
}' o) j/ w9 Y$ V" L# T
~CInventorySort(){}
& J4 j; z0 m0 [. ~, |private:; \$ F! a9 C+ P' q* F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ N# Z6 p8 \7 Y0 q. M( b7 dDWORD m_dwPos;3 i! v) p& \5 m8 T
public:& s. c4 `( C: o- e1 |5 S' c
void Add(BYTE nIndex): F1 f' d( n! u" x/ p* M: U- r- C
{3 I$ S4 q7 ?4 @# F4 H( Q3 ]- _
if (m_dwPos >= MAX_INVENTORY): C$ j, ]( q, Z8 S' Y( B
{
+ i" r# P8 X0 N9 K return;8 Q$ P3 A0 J3 s1 P, \$ x1 D
}
* V, l, I3 I2 S m_Item[m_dwPos].nIndex = nIndex;9 V+ @( J& k n4 n2 T* C
m_Item[m_dwPos].dwId = m_dwPos;
) x/ Z- \0 A( ^/ y m_dwPos++;- c: F' a/ I3 ~; S8 X
}1 {. J% H( E. g, _+ J. M% x0 L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 y, a. v, o5 ^5 Z
{ J: ^' }* ?. K+ i8 Q( ]+ c- q. v
for (int i=0;i<MAX_INVENTORY;i++)
( }/ m3 V, I% s. p {" a1 m9 y" V7 v Z' H# j+ ~
if (m_Item.dwId == dwId)) @# T1 U' q" K% `4 l
{
% d8 R ~( A" V return m_Item.nIndex;9 v' U1 p% Y) l* u3 E- L
}
: f! @9 K9 o1 H/ f* z2 ~, E( i2 P }5 t, n3 s( W! c' C
return 255;
( B R# A- p+ i5 W}
3 U P6 \1 Z$ D' M# Z* H q' l6 Evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 {2 h3 L; Q8 |3 u1 x$ Q% @
{1 A, v$ d$ M! j7 i' x. s0 N7 z
BYTE nTmp = 0;
& p; ]7 W! b' n& _$ T% @; G bool bDest = false,bSrc = false;/ l8 f1 u3 v3 [
for (int i=0;i<MAX_INVENTORY;i++)
: K1 G" Y& V; ^0 `" u4 r {2 s, r! ~( a3 B/ s, d, N
if (dwSrcId == m_Item.dwId)
5 I* d9 F# A! O5 r. { {. F U) c# c g* p. I
//id相等 则 改变对应的dest和src+ F) @7 G6 X: w* ^* O
nTmp = m_Item.nIndex;: _- z6 F; W0 Z' H8 x7 n3 v {
m_Item.nIndex = dest;# p/ F+ ~( {+ ^$ N2 Q
}- P5 R. Q/ b) d
}+ o2 W9 b8 w) U7 f5 b3 Z
//临时数据保存完毕,交换开始) w" E @$ b+ }- z! W4 R3 e3 l
for (int i=0;i<MAX_INVENTORY;i++)% Q4 M1 m0 z& L6 q$ V3 @& d7 p
{/ @0 d- Z$ J6 i! E
if (dest == m_Item.nIndex); B6 F! }5 W d- [; x. k
{) L3 M% G! ]# f h; ]
//id相等 则 改变对应的dest和src
* ?! J8 P% ^. E5 s* t9 G m_Item.nIndex = nTmp;
* ~8 m% P9 [9 ` }6 z8 U0 V4 J0 x5 T3 I3 g
}
9 V/ z( w7 o! J- s/ t8 T& D. S- T}
0 q! a7 C# P5 r$ s- i};0 o# A, z- R0 G! F& r6 D0 v& Q& m
-------------------------------------------------------------------------
/ Q) L3 N# M$ Q! X, [. e' a8 d依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. E) w( q3 n, T1 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; Z+ f4 l q5 E! v' a
紧靠其上添加:
2 V' Y1 Z' c, z' K3 A7 gif( pWndBase == &m_wndMenu )4 ]" j6 J3 U4 ~, n( U. u. ~. p
{
& o! a8 B" ^0 W% I" P switch( nID )$ |# `) j1 E8 W/ O
{
7 k9 j+ E6 K& F$ P6 }* v case 2:# G) w; x' c3 n
{
% v: y. _/ l& f( H! \1 ~: K- ?) W7 W$ H0 ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 M8 T4 D! K4 S& B7 o
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ F, z* X4 E! h. U2 x' {. g) v {4 z. R; T2 U6 s5 n& U
break;, ~8 X: ] c+ {5 f: H2 c" V
}' v1 ^0 p6 N/ [! E* {0 b0 A' s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 p3 r& s H" T% s: ?0 s {
( v5 p. Z- i, M: Y" A6 C B! D( f' P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) K" P" v% b4 T) d& Q/ }# } if( !pItemElem )) M' [. B/ U' ]7 Z
continue;
+ C! R' e9 {5 }! J( @% s2 Z if(pItemElem->GetExtra() > 0)
1 J' p7 J9 I; D' D X- c. |6 f3 @ continue; B( s' }$ ^* p/ }4 v+ v# q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) P) j/ M! U0 i
continue;* P' \. j8 [; m% q+ c2 w
if( g_pPlayer->IsUsing( pItemElem ) )
3 J4 u- Q% G3 h( | continue;
6 S& W; E: {7 P- f6 B& r8 G4 Q8 ? if( pItemElem->IsUndestructable() == TRUE )& G3 T: ~6 H# [ K
{
( z6 `9 {6 `+ x/ A9 d g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 A* f( @) [' p continue;
! X" e H4 P* i% N }. I! d2 @( }$ Y. A2 g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 {" i) S* J5 R$ _
}( ~% G! m! n+ p/ j) ?# K: d$ T
break;# W& \7 l# Z9 j% b1 V
}& I& v6 y9 {: u" k' Z7 |4 `
case 1:
6 |# M# G j. `4 u4 n* e$ k {
8 T$ a" ^; \2 a2 L3 `, S //整理背包$ q3 k! k: S4 c4 k) O0 p+ T
//////////////////////////////////////////////////////////////////////////8 U: I! x+ s% L2 l$ t% N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! F k, b& B& ?" o1 K C //////////////////////////////////////////////////////////////////////////
& N5 J) q8 f$ k$ y' d //////////////////////////////////////////////////////////////////////////3 j+ e' x( h3 Q. u$ n
CInventorySort* pInvSort = new CInventorySort;
7 E8 X9 H; u( {3 v) p/ I6 g vector <sItem> vItem;! O9 U8 z' V# v+ s$ W& D6 G
vItem.resize(MAX_INVENTORY);//初始化大小
$ \5 ~8 Q% ^$ {# ?' T, c% I) b //////////////////////////////////////////////////////////////////////////
/ A& L8 p0 a, \9 ] //填充数据
3 E4 Z G, o$ M& F6 C for (int i=0;i<MAX_INVENTORY;i++), T, M) B- T4 G* H# V" Q
{
" ?7 q: |! ~2 Z' x/ O* i- V) Y$ i+ z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 T+ a- ]& S- `* u9 W% q7 T if (!pItemElem)
+ z, K7 ^; H; X+ q0 T {
% t. R9 g3 m. h- N3 w, ]3 M vItem.dwKind2 = 0xffffffff;
2 ~2 X% i2 H [' i vItem.dwItemId = 0xffffffff;
; I$ J- T/ ?- E/ w; n7 u5 a vItem.nIndex = i;* @& d' J+ l6 I; c2 V2 ^6 C
}else {
4 d1 B6 S: _; r# U$ {# R ItemProp* pProp = pItemElem->GetProp();
9 V' e; ?3 r( L/ P vItem.dwKind2 = pProp->dwItemKind2;* M# l1 m6 Z; h, y' p
vItem.dwItemId = pItemElem->m_dwItemId;
( y+ j5 p' g! w: T1 x! H7 E vItem.nIndex = i;& c7 Q( z. z. b% X: R/ W
}
/ f. o# E+ G0 t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ?- e0 X1 ~1 W4 } }8 d; r! ]2 f4 q
//////////////////////////////////////////////////////////////////////////3 g/ P% O1 }) s( p/ a4 X
sort(vItem.begin(),vItem.end());//排序, `1 t! R b2 n7 b$ I, m/ n; h0 f
//////////////////////////////////////////////////////////////////////////
b9 W; W2 i) R5 T+ W //交换( m) j- d4 q/ b$ U( {: `
for (size_t i=0;i<vItem.size();i++)- p0 b4 L' C# C' i5 n- U r
{+ B' n ~6 y3 l+ p! r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. d) U+ Z' B1 O) r) q pInvSort->Add(vItem.nIndex);! A$ E) [# q, @& w6 g0 }
}
+ u0 k% ]# X) d- A7 u' X4 P. V' _ BYTE nDestPos = 0;
- d( h* h. b* e% Y$ E, f for (int i=0;i<MAX_INVENTORY;i++)9 S: h2 m/ g! D. a( C
{, Z+ m, f9 e& v3 U Q& C. @% B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' u, R0 K6 l' F! ]; A1 f; g if (pItemElem)
. t% W# h$ G5 ^. I" ~ {
: ]9 O0 k+ S0 z) Q% W' E if (IsUsingItem(pItemElem))
8 X1 I' _5 q; O) \ {
! n# u8 P! v. C8 v* H, o' E2 a( `- R/ s //这个位置无法放
2 T' ~1 \$ \, W" G* P nDestPos++;
, g. b3 [6 A, w! m ` }* \4 Q* {8 u% O, ^
}
" z0 @! ^9 s% o BYTE nSrc = pInvSort->GetItemSrc(i);/ u6 G+ y8 k0 q! I A6 M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* c9 C4 |$ y. `4 |% z) P
if (pItemElem)
* E5 F, A! U) E3 u# `+ k) m {& l. t6 o! a* E" @* f
if (IsUsingItem(pItemElem))
/ G: |- h9 g. R1 [ {
3 l o+ _" T1 c+ R* i" I //这个道具无法移动,跳过9 V# H d, `! k. ]1 Z- S2 S
continue; r8 \! u- _. q/ Y2 Q
}
6 P* {$ M) E! x1 P/ d1 _4 u' Z) S }else{
- z2 E4 d* r( a //空位置 不用动* C! J7 a& v$ v6 z; Y. _8 U/ `
continue;" @' b" Q* u7 c! [! w" F; g: [0 o
}
$ o0 k/ Y9 c- a5 ^$ d5 D //////////////////////////////////////////////////////////////////////////
- i" M# p9 Y% ~ //开始移动7 S* ~1 c B: t
if (nSrc == nDestPos)# ?/ Y, M$ Z) S2 w/ X4 Z
{
; h2 x: N) p! W! ]' j7 [ //原地不动
w- V5 _- J. S' k3 S nDestPos++;$ G( P+ Z c1 K- |' K% j5 w/ N
continue;
4 k2 F: t5 C$ R* i }
+ c' u) b E K2 U( `$ S/ Y( m1 y pInvSort->MoveItem(i,nDestPos);
' x- X2 \: a" O1 u g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ?5 v& G* F6 S" T
Sleep(5);3 ^4 q. J3 B- }9 |
//Error("移动 - %d->%d",nSrc,nDestPos);
/ Z `0 w# A# Q" `- }6 ^# P+ U, O9 ~ nDestPos++;) n8 H6 T, d% o: w( b
}
" d% P* J+ T/ h0 r //取第一个元素的信息' H: G, J0 F6 v
/*. c9 ?% t1 s3 x2 s
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 _; ~5 n) }8 M# Q {$ C% j, Y% R: S$ Y: j5 T6 C
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 Y; y- u. j+ M$ Q! }8 ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 |1 @* f& P4 G; k" k- h }
+ \9 N( F6 ]) ]$ j/ K */
. \+ p! T U. Q. l2 e5 C$ t% \+ W. _ /////////////////////////////////////////////////////////////////////////// M$ [ w; f" q* G" ^7 p* v2 \
break;
@8 }% \% f8 T- a1 n% S }
* |- U- R8 E4 L4 h" e- w3 \ }
! q/ I& R( b! a% J}
5 [+ X' l& q! ]" ^m_wndMenu.SetVisible(FALSE);
4 h" Y/ r" T" H, q, B0 D6 o/ [' t G+ m" Q5 R2 V$ S( J H8 l+ F- a
--------------------------------------------------------------------------------------------------------
3 C& E7 B* R3 `! `* ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! k! o1 X) C g! J{
. x/ k9 J& u+ }' d' LBaseMouseCursor();
& u) K2 X/ T0 S; A4 I% p}5 c7 Q2 A" n8 h. \; c' h0 f7 S
在其下添加:3 i) F8 B$ _2 j6 b9 }. f7 A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 A! y: Q4 T: z3 {& m
{5 ~5 i& G; F. }" V
m_wndMenu.DeleteAllMenu();% V' Y1 c! Y# r- W5 Z/ ]
m_wndMenu.CreateMenu(this);
8 W6 }0 Q6 w) q0 ]' z6 {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* g9 \4 v5 n/ a0 g, ^5 a8 S# m) f, Y' K+ ]% R1 z, N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% x4 z3 _* C# h6 _
{
6 D* n. z: |" I, H# z# h' y //P以上级别才可以删除所有道具
2 r" s4 f" O: S3 n5 u8 |3 y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" ?% R2 H0 r0 W/ ?5 e}) t/ `# W5 k; D) c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 g' j9 p3 @' F6 G; S! M/ P6 B
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& |0 V, H& q, R" w8 z. p# \( am_wndMenu.SetFocus();7 r! v" }2 r, m' ?
}; w9 v, ~; \4 _& O) ?/ J: {/ F
------------------------------------------------------------------------------------------------------------- p5 J, z1 W9 q2 A
*************************
/ j, L+ A& D- S/ T& p* n" MWndField.h文件
( W& U% q8 c% z c* m*************************! C. P2 g2 y" q3 V& r! H2 B4 }( ~/ f4 S
搜索:BOOL m_bReport;
, w' m& M u1 j% s7 {* C# `其后添加:
' R/ F" D+ e! Y5 qCWndMenu m_wndMenu;; z1 y0 g" C/ U% s* `! b$ S
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) j% F3 t" w+ T2 N- ~$ k$ e, J$ L7 [- x其后添加:2 d* m4 [' O- s- j5 m! T K! }- G
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# s# f9 p) V' r7 y" n. B! M& B" ]/ s4 n) ?
/ E6 L; t) f7 Y# B |
|