|
|
源文件中_Interface文件夹下WndField.cpp文件; W# H7 R4 e* r8 h7 a7 m a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 G6 ~ J$ A" a3 ?: J `+ J6 F# o" o* D$ V# c! S( |( ]
struct sItem
- ?# O! p0 C4 |6 F{
+ | C1 K5 r6 ADWORD dwId;
5 B: G" p( |; o: v3 i: m* pDWORD dwKind2;! C; ~ Y- y0 O9 R
DWORD dwItemId;7 n* B# o1 l U
BYTE nIndex;
# |& U' r; {& [0 KsItem(){2 h! o' t0 R8 o8 l- H! p2 J. ?
dwId = dwKind2 = dwItemId = nIndex = 0;' i# C5 Z1 @& h# s* t9 B
}
1 |* z8 g/ C7 u* Zbool operator < (const sItem p2)* Q% y* L, g, s5 w& Q
{+ G+ e q" Q( Q7 D; z) s
if (dwKind2 == p2.dwKind2). |+ P. }0 P; N1 x8 R# Y* |6 S7 }
{
8 z- j& D/ _ P' b. q# i return dwItemId < p2.dwItemId;' S: V/ r# a3 s `/ I
}else{0 R- s! i$ t q1 K0 x1 O5 p0 p
return dwKind2 < p2.dwKind2;' M- z. Z% U1 i* R* x" t
}
, L4 B* A; p+ a- P0 L8 ^}- f" d9 h) x. G
};
/ }' v. ?3 y9 X" g- G- }class CInventorySort5 v* @$ ^, {8 \2 m) ?. L
{7 V4 ]( k3 l; I, k' {/ l( X
public:) \# j, M3 [5 D o6 a9 [/ M7 C
CInventorySort()4 v: \1 w) ~, [1 S S
{
2 y$ |0 X/ |$ b! U m_dwPos = 0;
! F' d9 V' h/ h$ J1 }" F$ ]& i; @}7 B: {7 I! a- N0 U7 B
~CInventorySort(){}
* }) y/ f" ^+ h8 _' uprivate:' w& \0 Y5 ~: N d5 C% I, Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 |2 y9 U$ f4 \DWORD m_dwPos;; k5 o" C9 ]5 y" V5 j! k9 L. f7 E4 R
public:- z+ v) R5 j5 ^# x3 ]1 h- W8 @
void Add(BYTE nIndex) U$ u. Z: t4 T0 \
{+ v- d8 ]3 t# @3 D$ y
if (m_dwPos >= MAX_INVENTORY) @) y/ X- j- l+ b! p# a
{
$ }8 P4 J, O* W return;) Q+ d* y& c0 k! C" o5 w
} i. n/ U1 p7 w8 q M0 N
m_Item[m_dwPos].nIndex = nIndex;, h' b" d! N o/ J
m_Item[m_dwPos].dwId = m_dwPos;
2 J9 e, p% }9 E3 y% ] m_dwPos++;9 s& @9 Y% ?7 {( S7 H8 P0 X% N1 E
}
' J$ \& w/ V; ~" GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 E4 @. l# O9 p" l) D- H
{: g1 B5 r) Q! ?7 r, P8 l
for (int i=0;i<MAX_INVENTORY;i++) [8 N9 d8 Q' Q a3 |, G
{
% _2 u. B! r' \' Z2 Y if (m_Item.dwId == dwId)
8 S4 \- m# h5 }, [ {/ w" q* A7 {4 T0 d7 s, |
return m_Item.nIndex;
$ n0 P# z- Q5 G7 J' [1 {( t }
2 V1 E0 y% N% |4 i. h0 T4 M- D }
: l' n. d5 k% Z! \, o2 | return 255;7 C' m) P, K* ^1 v7 w/ z
}
; M- K& y, H, q* ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; f6 g3 v' G# W" h
{
/ F% e8 p e7 d BYTE nTmp = 0;
?$ |* d" }' ~2 H bool bDest = false,bSrc = false;
8 S9 Y1 r" ^( ~& u for (int i=0;i<MAX_INVENTORY;i++)" f$ b6 |/ `# x# \2 J& e1 e+ M
{& }) Q8 _6 J2 E5 o& t: f3 U. i
if (dwSrcId == m_Item.dwId)
6 M6 |5 b1 v/ \. `! | {. L' U8 i( d% n* }, o1 Y. _
//id相等 则 改变对应的dest和src r' H! C0 }6 ~# Z, e" m
nTmp = m_Item.nIndex;
3 \3 [! p c. E) p m_Item.nIndex = dest;
' `0 D" B$ k* e ] }5 K( p' _* u5 V& w2 r" Z: P% b
}
% x5 R9 a% o$ M7 ~+ Q //临时数据保存完毕,交换开始
2 f+ \: I) v. a9 P for (int i=0;i<MAX_INVENTORY;i++)8 ]. g: H6 F# N* [* ], u
{
9 ]! j2 X# X: ` if (dest == m_Item.nIndex)$ ~. T/ s& |9 U! ^7 p" z2 @( Z
{
9 ?- O% k( l. E, u //id相等 则 改变对应的dest和src: F1 K: o# {- Z C, q
m_Item.nIndex = nTmp;
6 U$ A5 _* c$ g ~2 }; u4 T }9 X. c0 N' z, l" h0 w) T
}4 X) ^' Y+ W. e" }
}( L4 z3 Z$ `0 P3 F
};6 K& U T, z* q/ E3 g# Q. C
-------------------------------------------------------------------------- t5 ^# B% T) G0 [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: O7 y8 { \2 O! Y: |0 m3 f, O; s- Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. s) }; w+ R; Y" m3 Z! P0 M* H# w. w紧靠其上添加:( O# f* R: o+ u' x
if( pWndBase == &m_wndMenu )7 W" }" @3 x; E; Y
{8 M" w+ Y% _* J9 E/ v& O+ F
switch( nID ) @6 a" k+ ^* z/ q/ C
{
% `5 A1 ]" k0 `6 P- x- p case 2:1 c2 ?7 W" D! T- e3 H
{6 F0 _4 M; B/ s6 F+ {4 n& T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' Y& U' j) O- h+ R+ Y1 n
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 ?% D D6 L8 B `& v! N5 F _( [$ D9 U {. b& A) a+ Q3 Q+ M
break;
- l5 ^4 P, `8 v# | }& q7 d/ Q5 Y3 J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, u( l& ]0 O, C4 S6 f3 H5 R- ^9 d {
* v) P+ d# m+ V+ I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& n% I+ Y1 I6 E# Y8 O
if( !pItemElem )
; M& _) }2 [+ H+ Y+ i continue;
$ k3 r0 E2 R& x4 ^+ i if(pItemElem->GetExtra() > 0)" j# m: \- K& P/ ~+ y5 G# e
continue;, B3 I. _6 G9 ]3 G# T3 U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 B4 l. `2 j: F% I9 w7 i% S2 d continue;5 c% P; A* O; J' q P3 T4 _. ^
if( g_pPlayer->IsUsing( pItemElem ) )) k# k. N0 u0 @& Y- v
continue;. U3 v% T7 o- Z8 m
if( pItemElem->IsUndestructable() == TRUE )
2 n; ^& v( b5 D! }5 @: f3 I9 b! j {
' e' i3 O$ ~- R9 p: L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! i5 [, o5 J$ Y2 } \* U- U- Y' J continue;, Z7 A/ W6 B$ R) ^! u
}
. R7 C$ i. P- l* d2 X3 j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: j& R. z0 ^/ [5 {' k
}8 }' ^5 y+ ^% {9 H/ v
break;
1 }3 x" e: U$ e/ u3 b }
* @1 O o& B& P% b+ q case 1:; s' x. v8 i+ V/ |( g* F) A4 `
{$ r2 j2 D1 D6 J/ S: B( v
//整理背包# ^7 ^/ f: \ S$ o: n9 T. D! Z
//////////////////////////////////////////////////////////////////////////) C2 ^5 @2 C9 D( Y
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 c. c& F( b: g //////////////////////////////////////////////////////////////////////////
" I# p w$ A5 i //////////////////////////////////////////////////////////////////////////
1 o+ W) J5 f3 f. z CInventorySort* pInvSort = new CInventorySort;& I$ C S3 b$ Y; r
vector <sItem> vItem;
9 T5 \( K7 p+ @" G( @ vItem.resize(MAX_INVENTORY);//初始化大小3 Z9 A" d7 X) e5 ]5 a( k A" } K
//////////////////////////////////////////////////////////////////////////
# |$ R/ N5 q* ] //填充数据; F1 Q7 m, H* e0 Z. q6 a3 M8 J
for (int i=0;i<MAX_INVENTORY;i++)
( Z2 J1 R# J/ e2 C0 R: W$ y6 b% P, C" o {0 K) y' e" X+ o4 C7 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" c$ N. t! ? W! l# x if (!pItemElem)8 T7 Y6 k$ m, k; o
{
( h" S, r0 e, P! p# C9 z0 I+ B' q, ]7 q vItem.dwKind2 = 0xffffffff;
( N: y5 J" }* g; f# U1 _ vItem.dwItemId = 0xffffffff;
3 X' |0 v4 l8 H5 F# \5 { q vItem.nIndex = i;1 m3 `; h# H: L* G- L$ |; P" R
}else {' X, e7 q& j1 s2 o4 L7 G
ItemProp* pProp = pItemElem->GetProp();8 D: l. O' O: w9 |3 ^9 |
vItem.dwKind2 = pProp->dwItemKind2;
$ g; ^+ i9 g& B& H: k vItem.dwItemId = pItemElem->m_dwItemId;) C$ ~! w' X3 E* G
vItem.nIndex = i;! V/ |4 |3 [2 |6 k
}9 ~% c: i ]% H/ L% b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); F# P1 w: A& y8 \/ ~, s1 F
}
6 J7 a% `0 u; c! J; W S1 j8 P //////////////////////////////////////////////////////////////////////////% f: r+ w8 R. V, M
sort(vItem.begin(),vItem.end());//排序1 `- A9 Q7 Y) }$ x p
//////////////////////////////////////////////////////////////////////////
3 N# H" p! j/ A //交换7 I; h+ C7 T$ Z! p
for (size_t i=0;i<vItem.size();i++)
1 _# @$ F& Z# b+ _: K9 g {: o% C( X0 [% k; i: O* S6 ?/ q
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' O/ O( }, U; B
pInvSort->Add(vItem.nIndex);
5 J3 w; {! ^2 Z6 s% D" _8 Q; ~ }1 }8 b9 C+ K7 e
BYTE nDestPos = 0;/ V% r5 P7 c( z' Y( O, R4 x* B
for (int i=0;i<MAX_INVENTORY;i++)
1 g8 l+ m" |! d* g e2 D. |( [+ N {8 P( Z, }0 s1 F! V; t8 {2 q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' T+ @* a: l2 T" e. l" y% D
if (pItemElem)
; E! N+ q# {: k! N9 _- c# H R1 o {( r( s# N, w1 p) V: c% [
if (IsUsingItem(pItemElem)) } J8 E) u; p% E
{
9 w. M O/ W! j; o //这个位置无法放
8 W4 k: N$ [* t& M7 b# u+ ~ nDestPos++;6 O# K/ [" P# A6 s) O
}0 [& X9 {( g( c5 V5 Q
}
8 Q3 |3 p6 ^* f0 @ BYTE nSrc = pInvSort->GetItemSrc(i);% E& L5 V- V" ?9 M/ O% Q, D
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 G* p" H1 C7 m0 D0 U1 C" W9 Q, d
if (pItemElem)* E/ Q+ I: e( I5 I6 C7 n1 Y
{
( A) ~& _# _5 R5 x/ R, a6 u! h if (IsUsingItem(pItemElem))
5 u: E+ x" V# Q) w& T9 J$ g6 G$ m {* ~8 p& I/ X0 ~' D# f
//这个道具无法移动,跳过+ c+ |$ V$ B# K1 [$ |+ T( S% t
continue;
5 G, Y! z8 S2 ?4 i& d }
9 d- q+ T9 r4 B$ I. \ }else{- e( Q) {4 g9 U- H/ n1 }/ P- u
//空位置 不用动
% G! i7 r: i, z2 `+ o* c& v" ~ continue;0 }0 b: k8 t' `" D2 J# g7 Y
}
+ [# b+ z4 P* e4 i //////////////////////////////////////////////////////////////////////////8 o6 ?! N% l; U- R4 h$ l! Q- N* |
//开始移动& G9 h/ |) @8 l# k6 s$ O
if (nSrc == nDestPos)
$ x& `) u1 o$ R) g4 Z/ O( e, [( Q {0 ]* @# _! |$ C+ `
//原地不动
: N1 \* A0 o0 v* Q O. L" a0 E nDestPos++;* A; J6 ^5 p/ t$ R# P) A6 |
continue;
; D3 o& [2 q4 V+ j6 }, B }4 s* ?2 v" |+ e& H! w- g
pInvSort->MoveItem(i,nDestPos);: d8 X* Z% d8 ~+ |. o4 G' @' q: T; b
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& }# h+ O8 ^! H, [ Sleep(5);
7 V; w! U8 ? S# D6 c+ C //Error("移动 - %d->%d",nSrc,nDestPos);
6 u$ A1 m4 }) h Z) q3 D( T- s. `9 M* u nDestPos++;: C9 H8 u1 J6 S& X, {5 D
}# }- G- X$ h- ^1 k4 J7 L7 F
//取第一个元素的信息" Q. i m* h& C# r* J. t& F& L
/*
0 R! G7 Q& _& r4 e" l* K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
o0 B$ q$ K8 i2 c+ M8 |. Q% O {
7 Y+ ]1 A% Z \ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 v2 N5 g+ ~ \8 |5 `2 z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, d& t0 Q8 K. ~) c* g
}
+ l3 G/ p$ }6 ~ */
9 T( X, P! d: X, ^ //////////////////////////////////////////////////////////////////////////
' a: p' Y# W% P break;
h/ a* L2 b) x8 q8 Y# \$ e }4 k/ ]( e5 f- ~ e+ I
}
7 [( u0 W: ?# r}
. i) R9 k; p6 ^7 {m_wndMenu.SetVisible(FALSE);8 d4 Y/ F$ j) h1 F
; ]# m- z" t1 y
--------------------------------------------------------------------------------------------------------
% H! |+ L& Q6 l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ M; b# r5 @8 Z3 N8 |( n3 L- c
{$ A; L* Z5 p- n1 \
BaseMouseCursor();. I: x" q3 U8 _3 S% p
}3 a, I# y8 B q: ^9 I" A+ R% O
在其下添加:
. c& ?" ^# S2 x* \7 v; m" Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
U# P& F; v4 q4 e( @2 I5 b- i1 j{$ F' J Y4 Z3 Q( E
m_wndMenu.DeleteAllMenu();( H; [7 W' O* Z% u
m_wndMenu.CreateMenu(this);( Q0 f9 p/ J) \. _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% G; y4 ?( k) u1 R5 n1 L2 ?0 J: O2 j& h, {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 G/ p* g1 {: e, G1 F h- l
{
2 d! k8 ]1 b D1 c) v //P以上级别才可以删除所有道具0 O9 K. U2 b: y6 X8 N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# T" u6 J$ x: E
}* `; a+ W# g) ~7 |/ I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ @+ B+ i* b) p/ S% w( A1 jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 f( Y$ U) z% b0 _ N
m_wndMenu.SetFocus();
/ l* i' x. B5 R) v9 f. t K}4 c, R# b! n' Z
------------------------------------------------------------------------------------------------------------8 H' I) \" ?# t6 ~5 Q( Z* K7 F
*************************
A, q+ s: k5 g" xWndField.h文件! g6 L% ]5 {3 B @( }
*************************/ a# {' U% Z! b. Y% y, L
搜索:BOOL m_bReport;
0 |! }, z1 h; s! w3 a其后添加:
4 d1 Z4 p& [9 u+ |3 n6 WCWndMenu m_wndMenu;
8 m4 L3 i( {1 W2 b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: {$ n4 b, Q5 @
其后添加:
) r( P5 V- h5 i& avirtual void OnRButtonUp(UINT nFlags, CPoint point);3 w) t! v" N- M. Q5 a+ V! a
, Y! Z9 L( i+ Y( L8 \
+ G) ^" C. v5 {. Y6 ^ k" B3 K2 t |
|