|
|
源文件中_Interface文件夹下WndField.cpp文件6 H+ b% c6 U& B2 W5 g/ z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) s$ Q& ^: k2 c c- [
, B9 g* H1 V% I- ]: N) I% @* o9 vstruct sItem9 M! ]! T2 b2 B5 x% [- e
{1 K' O$ ~! d4 X5 c5 f( ~
DWORD dwId;- ~+ w" T" g/ C7 u- e
DWORD dwKind2;3 [) R( E( J3 C
DWORD dwItemId;" r# \/ v0 T. W6 {7 ]6 z! p
BYTE nIndex;: a4 q, }4 s* `7 h
sItem(){; P* J( I2 v9 m8 e' d
dwId = dwKind2 = dwItemId = nIndex = 0;
) V& N x# E5 K# b0 w- n& K} ?, ]. c; c7 \5 L# r7 [
bool operator < (const sItem p2)
- R& W1 t$ R& Y" D{
5 F! d" l0 s3 _1 _ if (dwKind2 == p2.dwKind2)
* \; q# H4 @' ?5 x) l+ N# v {
- w: ~* d: P8 L return dwItemId < p2.dwItemId;, v' c" o6 \8 a% u
}else{ I: h0 W1 R3 E
return dwKind2 < p2.dwKind2;
v% I. G+ H- } K }! V8 g* f0 u3 w7 W t$ t3 J
}+ ~; @1 r* C7 J/ U0 a
};
& z# }( t @. [) bclass CInventorySort7 P# c* }$ m- f- K; [: t
{
* x6 {9 P/ O8 x/ A0 a- i; g. D9 E" }public:- J1 y1 ^: }9 r: P3 b
CInventorySort()
: e" B5 `* x0 E& C* f# R{
5 I9 W$ [; @" m% W/ d0 i; O2 j/ d m_dwPos = 0;9 x) Z* P; ~; p: r
}
7 } e. q1 d# M9 N~CInventorySort(){}
/ u& Y; f. H3 V! u& Cprivate:
) k5 o& Y {2 c5 p6 P& SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 R8 ?7 B) o. e/ h5 D$ \: l. W0 z
DWORD m_dwPos;
4 t7 i0 x5 D& K7 o/ _) l8 wpublic:
: }+ U" u) {; o% w- P+ s0 jvoid Add(BYTE nIndex)
: [0 v! S# }6 u o7 Z# a4 L{( d; V# T# W2 D9 u; }
if (m_dwPos >= MAX_INVENTORY)
. [; p$ R6 p# ]5 B) j: ^/ A/ \ {0 |. H7 N% |- Z3 m( v1 h* j+ s
return;& A/ h7 F, Q( p( U6 D g
}
: A8 a" B2 ~) _! S6 Y; Y m_Item[m_dwPos].nIndex = nIndex;7 m6 P3 i: W& I) k, W; i
m_Item[m_dwPos].dwId = m_dwPos;5 N2 f9 u" Y* n% b: A4 N
m_dwPos++; o2 ?+ p1 I: U4 x8 V# a" W0 R. b& M
}
0 C5 a: Z1 L! k6 F; w" {1 LBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 Z4 \8 @7 B4 h- \3 b# v5 G
{
- b3 f) t9 M' Q g4 { for (int i=0;i<MAX_INVENTORY;i++)
% \2 D5 B+ Z! N4 h6 z {$ S! R$ r( S/ m+ P1 z; L& ?6 }
if (m_Item.dwId == dwId), e2 x+ X* S- N) {8 p# ]
{& g$ a6 o' i, I/ L- I
return m_Item.nIndex;6 m' Z! g5 \1 D( J* W4 b! p
}
2 E) S6 K( F# {4 _' L* O& j2 P }& R8 S7 ~; x" @/ t9 j
return 255;
6 y+ O$ R) b$ _0 [% n5 z}
; n# j! `9 \* H2 E5 a& t- P3 Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ h' Z3 _0 G& w- P8 _! U$ {/ N{- w0 |' Q$ H- y7 X) g
BYTE nTmp = 0;* k2 s+ J1 |/ Z1 n
bool bDest = false,bSrc = false;
* v& a5 e |! {6 t9 P for (int i=0;i<MAX_INVENTORY;i++)) V2 |: @) }9 H" [4 k0 N
{8 [ E. s8 E9 o1 S! I4 t `
if (dwSrcId == m_Item.dwId)
! p- w1 y* B( n' V' a- U {
3 U/ [0 g# p2 q1 n //id相等 则 改变对应的dest和src
d4 V( @& q0 g0 t6 j8 Z' j nTmp = m_Item.nIndex;
7 O3 P: ?9 b5 C/ d e m_Item.nIndex = dest;
$ l3 p1 w7 W- m7 B2 E4 Q }- r% H- u! e m, q6 X, ]" P( t
}# q1 {0 D. I( S; C u
//临时数据保存完毕,交换开始
7 J/ C. f8 z- k% n2 m7 {% C& Y for (int i=0;i<MAX_INVENTORY;i++)" b4 R: {2 |& o6 D
{ }9 O. Q1 F. _ O. U8 r
if (dest == m_Item.nIndex)
+ S& a) Y6 Z3 A+ N. W* ~0 v. o {2 K$ O4 S- q. H3 D' _! S
//id相等 则 改变对应的dest和src
3 ~ }, ? F- [5 j# J; ^8 X m_Item.nIndex = nTmp;
3 _( I" g. t# u: a o5 j }
" c& j& t& \- ~6 B! p. Q6 @ }
. A9 ?5 F3 I' ^ c1 t/ i}
/ B( w* G4 A' x* g};
9 P+ J& H1 T; E& E" O+ b: C-------------------------------------------------------------------------
5 O6 G+ Q# u- t/ v5 q5 _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- Z t1 k- Q E7 o: ?1 M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ Y- q0 V4 t1 h5 Q& u& e% S; P2 I
紧靠其上添加:
0 r" h& H% o% J. m1 |, Rif( pWndBase == &m_wndMenu )
9 [+ T/ s. |5 E{
( M( Q. m" y6 p8 j switch( nID )
' m) g( [7 o' B* j {
1 T: o" J7 n9 k# f case 2:- u+ W; \: U3 h- a4 y4 Y, y4 S( `' x
{$ I/ ]" E) g( a+ z3 v- W8 C: K
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ l1 o) ^8 Q9 b2 P5 r3 r1 g q" H6 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 H- R; {) E* Z! R2 j
{
' ^* t- m; t9 @9 B3 `; [. `2 x# p break;
) ~6 f1 Z4 e# Z3 Y) s/ q }
: @2 X, m; g: T+ O1 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 z) @7 `4 j0 }# t) q7 A4 w8 C0 H {# B6 Q( r' N$ C% d' m2 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. P( V' A% n. i
if( !pItemElem )( U; e" L4 S7 v$ ^8 s
continue;6 i5 w2 P* S0 S7 J1 v, `. |* |
if(pItemElem->GetExtra() > 0)
! c, K- B% {4 o6 e7 E7 L* z continue;
. f. w6 H1 a9 o4 c& w* V if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 K+ ]0 N0 r6 b v0 [9 d continue;
% K$ L _$ g1 ^0 j* b- Q7 j1 A if( g_pPlayer->IsUsing( pItemElem ) )
% ^1 Z3 U0 S: k! c! L6 s+ c' k continue;# C) }/ P& [( Q, X
if( pItemElem->IsUndestructable() == TRUE )
& g4 L4 K5 N; C. A' ^ {
# t5 {: t6 o2 i: z) a; t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 h# S8 _: @2 v$ ^& R. E
continue;& t4 }2 p- k: L4 g
}( h$ Y, E& v! D" ]) Q5 H# U6 V
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ c/ s' q$ [, [& X+ K5 U( b8 v
}
5 V* m8 p/ T3 G: t5 v5 x9 V. P break;) k/ K5 l" H! Q& v8 K2 p: B7 b
}- f+ d/ M; E: @0 P/ H! C
case 1:
! e$ H9 x7 s" V% | {2 Y) r( r5 J$ K$ V
//整理背包
/ {: y, Z/ k6 M7 y) l" ?, H7 \' Y //////////////////////////////////////////////////////////////////////////! J6 g. A: \# ?2 ^( v7 o
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! ^# m" K5 K. U* ^ //////////////////////////////////////////////////////////////////////////5 v0 T) {; J" V" h0 _" U
//////////////////////////////////////////////////////////////////////////
( R5 b1 `: }2 Z# Q CInventorySort* pInvSort = new CInventorySort;: w7 p4 I9 ^0 J% [ S
vector <sItem> vItem;
9 j5 e# y9 { a! A) Q, _2 ] vItem.resize(MAX_INVENTORY);//初始化大小
7 \( q+ F8 `7 M+ d //////////////////////////////////////////////////////////////////////////+ A4 C9 f' B( K( B: P5 K3 y8 U+ ~+ G& g
//填充数据
' N! S+ b: O' ~/ E X8 o. Z7 _ for (int i=0;i<MAX_INVENTORY;i++)
9 q p$ t9 ]. t' R {1 {2 u) X; `0 _* n% D5 Z/ y. a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ x! g5 n1 _5 w3 }6 `5 p. r
if (!pItemElem)" k/ m- R+ G5 U" x6 b
{
2 X5 z! {5 Q/ K) P# x vItem.dwKind2 = 0xffffffff;
2 A9 r, n: Z( m8 m vItem.dwItemId = 0xffffffff;
3 }. r1 P, d6 c& ~4 j2 F% p vItem.nIndex = i;
8 a d3 b/ D/ ^4 j9 M }else {3 ~, z% X" w9 v4 g% ?4 ^( L
ItemProp* pProp = pItemElem->GetProp();
6 t/ u* X! _1 K4 f5 ^$ H vItem.dwKind2 = pProp->dwItemKind2;# V! K C4 f4 M1 z* J+ M6 k
vItem.dwItemId = pItemElem->m_dwItemId;3 D4 P. E6 X1 C. R/ _+ y6 j$ V- {" C
vItem.nIndex = i;
: n2 B/ Q+ e7 J }8 |0 M3 X# w' \7 w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 j( r- C$ y7 a$ \2 Z3 ]
}
$ h8 f+ o* l) W5 ~7 g+ m1 t //////////////////////////////////////////////////////////////////////////
{- [* I, x1 R c5 S8 ?; j# L8 K sort(vItem.begin(),vItem.end());//排序
! n$ r2 u: t" M- { e! V$ |0 x: R; l //////////////////////////////////////////////////////////////////////////
8 a* O- S' O5 r, u& C ^; I$ C //交换
, z/ ]7 T+ M) f for (size_t i=0;i<vItem.size();i++): W% D r! ~# Q7 }
{
" E, u) K' N1 x+ R1 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& s0 N% u8 ~( U! Z
pInvSort->Add(vItem.nIndex);. _5 y, X; L- W. L
}
' _2 J9 m* H" l9 Z& m: H$ c# ` BYTE nDestPos = 0;
2 B$ V* A1 F) b for (int i=0;i<MAX_INVENTORY;i++)4 x1 U+ ~6 K7 W5 l9 Y$ R' p
{# e- q/ L' S; s! J; f, ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 s u% O. s: k7 r
if (pItemElem)
# s, H1 s1 u6 p/ U/ b {
' U# F8 V: @/ ]2 R+ M3 m7 {) ~ if (IsUsingItem(pItemElem))' `; c9 {# \" Z8 I0 D* m$ f, j
{, `3 N4 |" p) C6 i# l% p
//这个位置无法放
* e7 }; E1 V: o7 N" R2 ? nDestPos++;
. Y W. O1 j& R1 k: B. y6 } }' o$ a# n& E/ }0 W! Q
}2 i2 S2 |9 I; ]4 c& f
BYTE nSrc = pInvSort->GetItemSrc(i);& }8 d3 Y0 ^8 f9 r% m0 E2 y! k' b. S/ b
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);+ o9 R4 n. H9 j: e# e. K/ e3 n2 k. P
if (pItemElem)! b$ E& L, z$ `! a4 [: W
{
; d( z, Z! A* K! d if (IsUsingItem(pItemElem))
7 j' E0 E% ?- k- { {+ k P( I/ A ^
//这个道具无法移动,跳过
- K5 r p w# i, e0 J continue;
) \8 W, @5 s7 | }
2 a; i$ k. Q4 e4 \- K+ L }else{! m# P0 I$ f5 a, j% w7 x. [9 I
//空位置 不用动
2 M o- i5 n. d6 d/ x( n continue;! {: G, m8 n+ U! x, N
}
, {) m+ E& e6 V5 \ //////////////////////////////////////////////////////////////////////////
: a! H: \7 N# x //开始移动& F% [+ ?; Y5 a3 i! I
if (nSrc == nDestPos)
$ J/ e4 Y# w% X3 N9 k. T- U {
: i9 @* A" N! L( J" m% @ //原地不动4 ~$ }2 z5 F& o" g2 ~) P
nDestPos++;
: p; G9 |/ J) X, F5 z* Z+ ?- ] continue;
/ Y& i7 }% g, e: q- K2 @; ] }
" S1 j! u( K% S% k, o pInvSort->MoveItem(i,nDestPos);; n6 m* A' \0 V2 D9 |! _
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' h" {; z$ G3 [. p* Z1 b Sleep(5);- S# Y7 X! N0 q3 \. m
//Error("移动 - %d->%d",nSrc,nDestPos); ]3 _2 m2 \& _: f! `# O
nDestPos++;; C' e$ f9 v* L5 Z0 X7 v, L
}
0 d' ~; t& O; t) t# k& b0 q- ~) x //取第一个元素的信息
0 J: v* U: m) G( J; B: K /*
# I: D* R" F1 r: m: c- g if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). ]0 J0 n# i$ n5 F$ b
{" S' ?; A0 w( m7 H: X3 `% G( ?
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ L0 Q7 j3 q( h F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 ^ Z% @6 S9 O) ?" E: C
}
; z" F1 f' _- O, Y */
; X: d- x/ I! R2 E //////////////////////////////////////////////////////////////////////////
8 h8 G$ D. v- I+ \( S7 N break;
7 T+ c3 {" R/ s }
, M$ h5 ^) | R5 }& U, S } + ~! ^: X% ^2 ~3 _$ _2 h
}
, U1 S) D, I) ]* {/ \m_wndMenu.SetVisible(FALSE);
, y/ e0 a3 Z9 B( t7 W D/ _! f& [* I* T2 A8 m4 i
--------------------------------------------------------------------------------------------------------
; Z6 C& @2 Y- q7 z, k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" q4 ~( r: R# l4 V; Y, L2 V2 E
{# ^5 H6 \5 v5 u# y
BaseMouseCursor();
5 {+ `4 K5 y5 m3 v- I& v0 X}$ q1 |: l: S4 k4 w1 i0 Y8 e6 S. o" M
在其下添加:
( z5 x% }4 `* w7 T3 lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 t+ C$ J3 e! u1 r* u- T
{
6 f# n1 Z* q- V- m9 q- rm_wndMenu.DeleteAllMenu();
. e9 w* I5 t2 c* ?( G4 y4 k, Fm_wndMenu.CreateMenu(this);
* `: q; z; |+ W4 V5 J$ ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 b$ S9 i0 Z# j
- y( m* L9 ~( \
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 J2 [( Z- `6 U: Z- h2 K{' n& Y F2 L( F9 s) U* j0 d: u5 w
//P以上级别才可以删除所有道具
8 H: C2 V" A8 B+ Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) @5 R- H, o; m% ^9 B
}& e! J. {& `* C4 _6 p( \
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* }3 G, l: h1 U1 P% J, O& km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' m) B- N7 k8 L7 |( u3 T) G
m_wndMenu.SetFocus();0 X/ b7 J% t; ?8 D: E2 N' X
}7 l3 _4 ?1 V7 W5 X
------------------------------------------------------------------------------------------------------------
% k- B. z4 a N/ c: F*************************. s) ]9 x2 w: `
WndField.h文件
9 X( j* F* z% x' Z*************************
8 K8 j2 m" C- \$ A/ w- ^+ u+ v: d& F搜索:BOOL m_bReport;, }( q, t2 S3 h8 @
其后添加:/ _$ c% Z" M* F/ ^3 D- q9 M, }
CWndMenu m_wndMenu;, q& M0 J" v0 H: Z. `6 K [4 X8 v0 V0 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) z1 t- O/ g6 f4 |3 F其后添加:
( }4 R" ^$ j1 j! Q. F: f. `virtual void OnRButtonUp(UINT nFlags, CPoint point);
* S( ]' I( C6 p, p$ k( g9 Y3 H# W6 `0 [) j; X
/ t8 P" f& C9 |, Y3 T/ k
|
|