|
源文件中_Interface文件夹下WndField.cpp文件; L1 M2 g/ {& L( `, R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 u. O/ }# M4 z9 X( P3 X2 t, x# P2 S, X0 N9 G& d! a A7 }9 g; ?' N
struct sItem
- [' {0 ]4 [4 Z" ^; f, J" [{2 c5 E i$ @6 d& {6 }: m6 t% H5 K
DWORD dwId;! {9 f! X2 r% ]. |6 k5 N
DWORD dwKind2;( S8 Z& Q% e* j x1 ]" _7 v
DWORD dwItemId;; N% m! ?9 ~ j! ?" h0 m7 M
BYTE nIndex;4 }. Z: p! [5 }, {0 E2 E( i; F* _
sItem(){
! _0 c, ^. [0 W& o% t, w% C dwId = dwKind2 = dwItemId = nIndex = 0;
# I2 k2 s& q; [}
' k; t7 b4 Y! Ybool operator < (const sItem p2)
* M9 A0 O+ A& X! a{
) T4 W) h# v$ T7 r1 ^6 [! J8 @% M if (dwKind2 == p2.dwKind2)0 ]4 c' a! C9 T
{9 h1 `- z6 `4 J" d, e
return dwItemId < p2.dwItemId;5 \$ g* W! g8 i" O& A
}else{ {7 x9 ]* J6 E
return dwKind2 < p2.dwKind2;7 y. U! v" ]) M. s# t u- L
}" Q8 k2 I, g9 T- r2 ?/ o
}
, G! q1 w8 R2 \: W};
1 E2 Z$ x5 }! _+ G% y! D* @class CInventorySort1 _8 Y$ n g8 N. u' y! t
{
5 j) |* C& A5 g3 O, J7 k" e, Rpublic:
$ g: G# U2 f9 B2 U. vCInventorySort()9 m% k( a( e2 k" N4 r; [. q
{
9 C" `5 P! A4 f0 S+ J* z m_dwPos = 0;& W) v7 M3 h/ D' X" g9 g: |- Y
}
' j! X0 W. A) D, a~CInventorySort(){}3 k* Y4 D$ L H1 M ]2 }4 p: E8 {
private:( W8 J" u$ P1 {/ l0 W3 n, r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, f( E: e. e8 sDWORD m_dwPos;) \. j+ d9 \/ ?* k/ M
public:
0 d, t3 ^" C; o/ v9 ^void Add(BYTE nIndex)# e/ G4 @: Z4 O. F/ q
{
4 _2 D, g9 h& {' d9 b1 F1 a if (m_dwPos >= MAX_INVENTORY)
1 N: I" v: n* Z { }* G+ j, @, k8 D; v
return;
3 q D1 m$ \1 s6 ^$ K$ I }
+ P0 G! a9 U& {5 |- _. w m_Item[m_dwPos].nIndex = nIndex;
5 G2 _7 L9 X3 |$ o: m7 m m_Item[m_dwPos].dwId = m_dwPos;6 h9 x) |. Y1 k2 `. E! T1 D
m_dwPos++;; c2 Q2 _; C( Q& H8 w- K
}& e( B3 Z/ z- C. [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 ~/ v( P- I1 }4 Y$ J) A7 ~{" N' N$ N) D: T% p$ D1 O
for (int i=0;i<MAX_INVENTORY;i++)
- I; Q& P* D- X ^. m& u7 W' u: E {
) q- n0 ?% e' C. S if (m_Item.dwId == dwId)6 y' i" |: c% L8 }
{
; n. Q1 K0 i4 S5 F- ] return m_Item.nIndex;( y. B1 ]' w' E, |6 ~$ y
}
2 s! E( _% {9 j" o2 ~, g }
( z( n: a9 n6 e return 255;8 \* U3 b8 P; L3 o0 ~ _% Y
}
) k) l" t. A" G" G8 Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 \4 `7 a4 u" U: @) z{- G' z: J) J9 e1 z) R
BYTE nTmp = 0;7 z; V2 Z- v6 ~8 z: `5 K9 h
bool bDest = false,bSrc = false;5 a+ V, A' s4 F4 Q+ V
for (int i=0;i<MAX_INVENTORY;i++); Q; a q+ p I) H
{/ u& V3 O- R/ d1 [+ \
if (dwSrcId == m_Item.dwId)/ n4 i) [. I, K* h0 U+ d8 O
{8 }2 q! p! O% L) x! x+ y
//id相等 则 改变对应的dest和src, E' r+ _1 b1 b) k( n2 X/ f4 V! F
nTmp = m_Item.nIndex;/ _; @. [) @# K' | V
m_Item.nIndex = dest;
/ P" _$ K# N0 M9 `& U }4 R3 k$ r: d8 O4 ~+ w
}" r9 j1 V. j3 ^6 w# E/ l2 [' y
//临时数据保存完毕,交换开始
- l8 I6 s* f& `1 Q% j+ v: J for (int i=0;i<MAX_INVENTORY;i++)" b1 ^& D8 l$ I# s- c8 s
{
+ g% h6 O- R9 b+ p7 l if (dest == m_Item.nIndex)
; F6 J2 ]# b% n {* Z! D: u* W+ I! P0 c6 B
//id相等 则 改变对应的dest和src g+ |* i/ O3 |4 C. X
m_Item.nIndex = nTmp;& y- K2 [4 G; t% W
}( g8 |( z. D! _. E9 n0 b: H
}' ]$ R5 x2 c" P+ k% c
}
+ [; }& |) P1 A0 _/ G$ E9 T};! t D! \2 V: y# I* A. H% ?" m$ O
-------------------------------------------------------------------------& t# O( f- _: u% E1 T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, j' \0 Y* P/ z L1 W- b, K1 L搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
3 O5 L# o9 S8 G/ I: p紧靠其上添加:
3 {" ^2 {. v* X3 ^if( pWndBase == &m_wndMenu )
0 t2 }2 N. O1 r) J* i1 n{. C; V; s, |: ^0 E( ?0 R- w |
switch( nID )
9 e8 \; e! d& T4 p5 N4 t" B {
% m7 v0 j% A. j8 ?. Y case 2:9 B6 e+ l( U+ U# b; K+ a
{! i$ i+ u) x' v7 X7 T2 y* P' w- f/ a
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- r5 E8 j; \1 p0 A if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 a2 c G" P) J, I, U' m
{
/ {: v8 s- A9 B$ o, Y1 _. { break;/ f* x/ j: s/ V; f& J+ R' \$ T1 S
}1 A) P2 g: S3 o6 w& I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 i# [7 t* O: d* z5 z( } {
$ Z$ p0 P# a+ Y' A/ K% \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. ~; @" _( `& Z! [) a+ |
if( !pItemElem ); \: Y% R7 F4 E' T6 m D9 V
continue;* N1 h: p6 ^5 o
if(pItemElem->GetExtra() > 0)
9 a: p N S, O5 K/ |4 f/ ?* J t continue;
: G/ J) n- ~% _$ v+ ]) v if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. ?7 j8 A- I, t' n; I( z2 \ continue;) e1 v( n% D- c S' P; S
if( g_pPlayer->IsUsing( pItemElem ) )0 }# Z E0 l& H' K" A6 M
continue;
+ z. ^: H5 Y; O6 J$ m. X: K if( pItemElem->IsUndestructable() == TRUE )
6 y1 l9 l ^# P% S/ Y {
% Z3 G* R7 G1 O v2 _ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: ?! \/ N& L( p% ^) M* _- b continue;
# S9 t7 z" s7 F* F }+ |( R5 w6 Q% A! M2 i- C% G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 l+ z( B# q* q! [: y0 W
}
7 g2 w+ j5 O9 `2 U: X break;8 K/ ~0 N, G: i' ]! V( v0 G* t5 m
}' ?- f* x/ p+ I D/ J1 J
case 1:
0 r5 t+ B. Q$ Y9 q' S$ s {- Q9 E# b* X$ L* M
//整理背包
- I% t7 P7 T" ~& H' `. m8 w. t8 W //////////////////////////////////////////////////////////////////////////' I. w {. {5 j7 @; t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% L. L/ u; v9 k7 s
//////////////////////////////////////////////////////////////////////////
9 O6 ]* l1 Q m' j2 k //////////////////////////////////////////////////////////////////////////
( I; A6 X5 a6 X! D: P3 K CInventorySort* pInvSort = new CInventorySort;2 g4 T; m% h( H9 ?& [& K9 Y
vector <sItem> vItem;
) c- G& @9 u4 j6 x vItem.resize(MAX_INVENTORY);//初始化大小8 {8 A3 c* ~1 A5 [& `3 \& W: }3 E9 V
//////////////////////////////////////////////////////////////////////////: X; y8 p1 O' U5 g: Z5 G9 B0 Z
//填充数据- ]$ V# O, t3 {, c' `
for (int i=0;i<MAX_INVENTORY;i++)3 Y8 a% q+ i: I7 q( _4 L
{/ d: s, w1 [# o1 L8 U: L6 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ }; p: L! n9 v" M, T5 Z3 P2 I if (!pItemElem)- x- M3 V0 s- V9 j1 F9 f
{
: d: g- R. U! X/ N0 m- } vItem.dwKind2 = 0xffffffff;
7 F8 A j# `4 B3 ~* J3 O- O vItem.dwItemId = 0xffffffff;
5 m+ e3 M+ W: H: o; ~8 D vItem.nIndex = i;6 _0 T% ]4 A2 X0 e* t/ h6 p
}else {8 D# ?% q/ t1 ~6 L3 E
ItemProp* pProp = pItemElem->GetProp();
8 P7 ?- q5 Q! \ vItem.dwKind2 = pProp->dwItemKind2;/ b7 t6 w' G; Q: ^; A" v
vItem.dwItemId = pItemElem->m_dwItemId;2 _* `' M1 D5 y4 d& e
vItem.nIndex = i;5 v4 F# k, U! @7 [
}
: V- V* M# n# V3 Y8 `/ @3 e. I( C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 j& ~6 ?) J+ X! t4 Z }1 ]7 f* |! j! i7 A
//////////////////////////////////////////////////////////////////////////
. A, L& o* U0 P7 }9 s+ Y sort(vItem.begin(),vItem.end());//排序6 V4 Z: c! L b. E. H: e9 A3 P* _) S
//////////////////////////////////////////////////////////////////////////
$ @7 z5 C0 x, P' z //交换
) |- v7 c% {+ {- z7 ` for (size_t i=0;i<vItem.size();i++)
0 q2 X9 Q2 G8 Z& O5 v5 ?, A7 ?4 A {
* k2 N! J; M2 j! M //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 p& O+ m+ `5 P8 x pInvSort->Add(vItem.nIndex);
' J# L, [0 ^4 L' o* M) r }1 U# N/ S$ F8 ?; Y2 z7 O
BYTE nDestPos = 0;. G( ~ ^4 b) P* n3 ^- f h
for (int i=0;i<MAX_INVENTORY;i++)1 b; N! t- j( m T9 m
{9 J; p5 J2 P5 E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% H ~& [( }! B- D& H- W if (pItemElem)& D. m4 f h; M. E3 @; E
{
& G6 m* ~9 c. ^& W/ f if (IsUsingItem(pItemElem))
" n ]) l1 v5 a { v& d, [6 K* v
//这个位置无法放
R9 q4 e8 F; O1 F, \ nDestPos++;0 W% e: a+ p0 k3 _- U
}3 S/ z/ b6 g) H' l
}; ~( t1 ]% h) ]! w7 P6 ]- X4 i
BYTE nSrc = pInvSort->GetItemSrc(i);
7 h$ P& H+ f1 c pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* ~ ~. F! U' c' A3 Y# B9 u
if (pItemElem)
5 O$ v5 n: b% W7 Q1 S {
3 M9 d" |! t5 E, {0 r8 |/ ] if (IsUsingItem(pItemElem))
7 ^4 F0 `* H7 \8 K0 A- W p z( n {
, P- w0 l7 U9 y, S' j# H# G6 q //这个道具无法移动,跳过
, I0 B$ s0 x, x& F5 P( ~ continue;
/ \' I& T$ c( d% V& w& S/ E }3 r. b1 v5 U L3 z8 i5 a
}else{! S/ \( W# b. P
//空位置 不用动
" H. I$ V. L A: [ continue;9 ?4 [- f: ?- {
}
: f4 [& H9 O- V6 ~' q4 l$ N$ P y ////////////////////////////////////////////////////////////////////////// z& q' o# }4 X
//开始移动
' r" r' }: G0 l3 J if (nSrc == nDestPos)+ [" K. _. f( q8 }* @
{
# S2 Z4 ~5 w: q+ f% _ D2 s //原地不动) l- O' ^& X. k2 `) s) g
nDestPos++;
" M6 }: M" v7 q& V2 X, M0 R: Y/ e6 p0 c continue;
7 s6 J; `, O1 O# d+ x" V }2 b$ m8 u3 G4 o8 g0 |
pInvSort->MoveItem(i,nDestPos);% c" k- d# O! V& u, A7 i/ n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);- `0 c- M& z, h: e+ A5 o* i
Sleep(5);+ X$ l) r2 o% r7 v1 j" L
//Error("移动 - %d->%d",nSrc,nDestPos);. W7 ]& @1 l% c7 f+ \2 i1 |
nDestPos++;3 G6 T- {! q5 V" R8 K( s7 J, Z9 V3 w
}
" |" V, B$ k* }" S/ l //取第一个元素的信息
& _5 s! \6 p) M% T9 d; c% p$ T" Z /*
& ]+ U+ }5 J! y: z1 t if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
" Y( x8 ^9 L) L3 H8 x5 a+ G7 h {7 |. O- ^/ C7 L+ E: o# _# U
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 p o+ a' K8 l- d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 U5 _; }$ z+ J' H. L p5 r0 ~% q
}
6 @8 \0 w# `& u4 i */
$ Y4 Y/ n. f1 Z Q //////////////////////////////////////////////////////////////////////////
7 G7 L- O) B7 g. S break;+ [7 d' B0 {1 Q8 Z+ C e# x* S
}4 M$ x" f2 d" E
} ' y- |" i( `; b2 c9 O+ W
}; ~6 w2 r6 E1 [0 c; e
m_wndMenu.SetVisible(FALSE);
0 V/ H" q* O; a& `6 U! f8 K* U/ [# m! m5 l1 ~$ V
--------------------------------------------------------------------------------------------------------8 p9 c4 P2 R5 u$ J( ]5 \0 ~+ [. X* D
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 a( F% G5 H1 U+ r1 R
{
. q+ ]; K. w! C+ `6 \5 Y' LBaseMouseCursor();
& d: n! Y- m/ T; H. ~}& }( j" |6 T( `, s! F1 }
在其下添加: |. g/ }) ] m* K
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ M9 v# U" L2 ~- y9 u1 J
{
) i8 N! i5 z3 r! i# J- k8 N/ V. lm_wndMenu.DeleteAllMenu();; V' y. y' F% B( [! @% ^6 u5 f) O8 R
m_wndMenu.CreateMenu(this);# T; Z. F: n0 _) H6 P3 S$ S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" G+ u+ `3 _5 j. f
; k9 i4 {2 ^" p& ^8 xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# n3 J" ^& B; z k, s{- F3 O0 f" e- E
//P以上级别才可以删除所有道具
" F W+ d1 a, v2 t# D! a m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- k1 F3 h' j5 {" T) t# C) u/ @}7 g# O% [7 e5 k( S1 l* B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 Y% p# E: i+ E+ _- z6 Z: q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. ~7 Z7 o! \* Tm_wndMenu.SetFocus();% W H& {2 L# r
}5 ]: g% y- I% f7 ?* K- Q
------------------------------------------------------------------------------------------------------------$ V) _2 W" ~" l' t
*************************+ S9 w$ k: }# O$ o, q1 b
WndField.h文件
5 s0 I6 }3 e& {5 ]0 a*************************
3 @) k8 e" T& N4 y( E& E; ~# O3 X$ K搜索:BOOL m_bReport;
W) h( Y/ g+ X其后添加:
% K( f, D% P+ L% w' Z: p) f8 |5 T$ \CWndMenu m_wndMenu;; C4 y8 ]$ N5 V2 z0 y. r
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 t7 V' I. i9 ^( o
其后添加:$ {0 K" p, H4 i( p
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) b: G0 x& k i2 h9 E7 m2 e( s5 v ?: o3 J: O7 [; ?9 G6 g- O
! v; z* G: G, M" u |
|