|
|
源文件中_Interface文件夹下WndField.cpp文件4 c0 F5 L2 D0 p1 @7 e) Q- h1 z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* B5 q" p5 ^- F9 O9 j
1 V" L. v: I7 o1 N
struct sItem7 } [4 k/ G- k
{% O+ T2 j; E2 `4 _( \4 I, Y
DWORD dwId;
; `% U0 [& f. S0 n) l" RDWORD dwKind2;
2 `) m% T; G7 e3 FDWORD dwItemId;
# Z3 e- W( |4 M) hBYTE nIndex;
: r5 q+ ^+ H6 }! v) h% f% zsItem(){- l5 H: k* x4 K/ B* {! ^
dwId = dwKind2 = dwItemId = nIndex = 0;
' G0 K/ J9 w7 j' ~ Q}* ^2 Y S9 Z3 b) ]9 ~: F) E, b
bool operator < (const sItem p2)' R% d" t* z; A$ @# ^
{
1 Z$ C T; M* o0 O if (dwKind2 == p2.dwKind2) j9 O! K( X! o m, H$ }$ N; R
{" f, U. r7 p- `
return dwItemId < p2.dwItemId;
' H# i4 Z" X! J* ]( U+ _, Z* A }else{
3 o3 v3 Z: M: n v/ A% y/ P4 y7 h9 o; n return dwKind2 < p2.dwKind2;& t3 @1 P9 M/ o7 v+ }
}
% K# W% e) o" r1 u/ y% F}
3 h+ {2 S* ~+ Y; q};# Q j3 t; w: A; h: v
class CInventorySort1 [/ s) K+ K7 ^# s$ y( P+ ]
{
) k9 |9 P5 ~% A- _8 u. |8 Dpublic:
1 a$ M8 f r7 M$ }CInventorySort()9 b" T0 B4 M: M/ T. J, @2 E7 Z. I
{1 R; u9 n! E# Y: w
m_dwPos = 0;0 @$ Y8 t {# e1 Z9 f
}3 ?9 w! c( ]$ u% _- V) C
~CInventorySort(){}
' X% `8 \, u# N1 yprivate:
% E4 B$ R: W$ M/ k) i, j% P$ A7 ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, q& t2 G4 Y1 U4 d* q
DWORD m_dwPos;- r$ |4 G, w* Y- X1 c4 S+ H! [
public:
8 r& G- C/ \5 Q! _/ K" v& u7 bvoid Add(BYTE nIndex)# | Q5 R" j3 |+ Q o( P' B$ B
{% w8 E/ O* U/ l+ }' C+ Q
if (m_dwPos >= MAX_INVENTORY)* E( J" d; y# g2 L/ u& ~0 p
{
8 S! ~% w0 f6 @* G3 c( r% m return;
5 ?) s- y0 W; i7 A, c }; V! O; v$ r6 P- R& z3 ?( I
m_Item[m_dwPos].nIndex = nIndex;
1 q/ Y, O# |9 o8 X8 u m_Item[m_dwPos].dwId = m_dwPos;: ?+ ?0 x( M8 ^" p) U
m_dwPos++;) ^" v* E6 q* t9 v1 E9 E4 _) q9 u
}
# I" J! y) s# V) w K* sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: ]# p, y) v6 D" |& }
{
7 r, Y) Z r' H7 @ for (int i=0;i<MAX_INVENTORY;i++)
1 w' m2 X4 _: _7 d0 v {( j* _; r5 X2 y' Y0 _, T% R
if (m_Item.dwId == dwId)
+ ?& @- ^. u: d5 r6 y& I {; l% r# R2 o/ w% L
return m_Item.nIndex;* C3 w& z. V# v" W5 x7 v
}
* X5 ]$ f8 ]! g* L, ]9 I& i }
- T# h* x- S2 L! h% U5 k+ ]/ w: ^+ u return 255;
1 V7 ~ x* E6 ~: G}
- J: ^ h8 e% E o3 uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ _1 h, C& L. E0 E' d$ H" z{2 Z/ X9 K: ?& s0 K( I
BYTE nTmp = 0;4 d5 k' Q# ]8 b% s: R A
bool bDest = false,bSrc = false;, k. f9 z* o! _5 x% u( d
for (int i=0;i<MAX_INVENTORY;i++)8 p) U! h* ~3 I& J) G$ I) O
{: A' _5 A# U; \% c! c7 B( R- b( U) ^( i
if (dwSrcId == m_Item.dwId)
, F. X1 X, `7 ]0 w, D, D& m {
, S5 X. R7 j6 N3 B4 |) X //id相等 则 改变对应的dest和src5 p5 e# p Y- q& v5 N2 P# X
nTmp = m_Item.nIndex;
6 e7 Z! U9 ~) L( v6 B& ^ m_Item.nIndex = dest;
( j# W: [3 Q' O4 L/ c! ]& J {1 x5 x1 ^ }3 t' \. E/ e" T6 T; l+ _% Q$ Z
}/ i+ `3 X6 B1 y l
//临时数据保存完毕,交换开始, T% \! S6 [ W; _
for (int i=0;i<MAX_INVENTORY;i++); f% |7 h! p" T
{
* x7 h# _4 v+ P! e- K7 a if (dest == m_Item.nIndex)/ c, Y2 F. Y) s
{
2 I2 H8 c# {! N \$ O/ d: z1 Z //id相等 则 改变对应的dest和src
0 o# x) ] y) e9 ?) t& K! ^ m_Item.nIndex = nTmp;/ E* [8 \; ]" X: X) J' r
}
8 U" ~" A) t3 a! B }6 L+ q, U$ Y, C- u6 z7 @
}) r+ ~4 N2 z' \3 {3 N
};
; |, M( d. g5 u1 b6 H- c-------------------------------------------------------------------------) e+ b4 p; }+ Z
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 R8 w2 |5 r+ @5 ^% K& _$ a9 f$ k b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 C5 Z4 U* O( q c T5 N
紧靠其上添加:; g/ B" [2 J# O! J! w
if( pWndBase == &m_wndMenu )) l) G( u' i2 j. Y& N) q/ [
{
4 e! k, V! n- m; [4 J. x switch( nID )/ n4 d/ M% z& ]& E
{
+ i& q" d3 x5 p, r# ] case 2:: ]8 S9 M1 F) i+ S, @) s/ i1 ]
{
6 w0 t* {) @: G //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 t$ l$ h# `1 l1 T. ]2 X; ?4 O
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Z" z5 v' N* e. n% N) O
{/ f( e4 [" @4 U! f
break;
7 R0 S" L. A# x& S6 P& \! } }
9 l8 d. t* D% ^& L7 L4 o for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" L7 n! S4 c2 i# Q {" Q; @) U: C" f9 P/ l+ C, R8 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, R5 i4 H4 C0 |( _
if( !pItemElem )
/ G/ ]) W! q1 Z( _ continue;
y0 p5 P3 ~( v! k1 R* B% Q7 j' S- Z if(pItemElem->GetExtra() > 0)
7 t" l/ f' x# M) ] continue;- }! o1 D; {8 a# T8 R- `2 k7 C: A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* `" o c4 j# T8 m+ T: p& l+ W continue;
. _+ M2 ~1 w" D3 r2 q if( g_pPlayer->IsUsing( pItemElem ) )
* [- V" s% y& E continue;
; J; E; Y" u$ o( T: _8 [5 P if( pItemElem->IsUndestructable() == TRUE )7 T0 b2 T6 n6 N4 R9 L- f
{) q$ I5 b3 n8 J' g5 a. D* r) A/ `5 _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 x! I7 S2 ~4 x! \( D( o
continue;/ Q( x0 p" J+ ]# c+ j
}, K; R% f* R! [- ^: P
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 G2 v2 N# x0 R8 _
}% Z% ]" t4 e6 G8 ^
break;
2 R; M/ E, }0 s/ {) X }) S6 C# i( @" {( H7 l
case 1:
/ c5 G: ? d- G7 j: d { M4 r2 F- O. z* `, Q( Z
//整理背包( `2 G" ^9 l9 V; @; ~6 R
//////////////////////////////////////////////////////////////////////////. x0 K2 ^" J4 ?8 n# C+ h( T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' O; P, F+ R5 Z ////////////////////////////////////////////////////////////////////////// L- S8 z9 ~$ b1 z$ E) D0 m
//////////////////////////////////////////////////////////////////////////$ n: t0 G7 |( ^, F
CInventorySort* pInvSort = new CInventorySort;% A# k/ |. b0 Z4 b! d
vector <sItem> vItem;( m2 r, L9 R* s* a$ F: S
vItem.resize(MAX_INVENTORY);//初始化大小
5 Q$ e, x9 y3 ~ //////////////////////////////////////////////////////////////////////////1 C* C' l7 m) {" ^9 ^5 q9 K$ H
//填充数据
) ~9 W1 q) n6 u8 p, E( X2 h for (int i=0;i<MAX_INVENTORY;i++)
0 m( i; x' @, p {5 K$ h$ P9 G# X% Y" g: i* A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- u8 k3 }7 L, }2 M& ~
if (!pItemElem)
+ Y2 `/ y* r' U8 A9 E' h {
3 F% A0 @$ X: \8 Y% `0 L' K vItem.dwKind2 = 0xffffffff;
' q8 M5 P7 I9 b# D; f8 e" f- q vItem.dwItemId = 0xffffffff;
. R( H2 T( h6 t5 e* ^+ |( V vItem.nIndex = i;
+ f2 G( ~+ Y5 |- A8 V' ] }else {
+ |0 T) k. k0 M) t ItemProp* pProp = pItemElem->GetProp();1 T m; L/ J! \1 l, `) o( ?
vItem.dwKind2 = pProp->dwItemKind2;
$ W' s/ e) K" |: C vItem.dwItemId = pItemElem->m_dwItemId;. y; J0 W) i \ ^4 }, u
vItem.nIndex = i;. \2 j+ H* c/ x/ |0 r7 a: y
}
/ ^7 H- ?2 n5 E! V3 G& Y7 a //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, w9 \# d \' H/ `' l) F
}
) `2 z! C1 o- s, V# \ //////////////////////////////////////////////////////////////////////////
. a/ [0 y5 M1 k/ v/ V' { sort(vItem.begin(),vItem.end());//排序
7 I t5 y/ A# u0 y( a( [; F //////////////////////////////////////////////////////////////////////////
& j- e1 l2 [7 ~ x2 j6 l //交换+ a2 I+ q4 P- w: X
for (size_t i=0;i<vItem.size();i++)
; Y) @! p+ v A9 J+ O2 Z( U {
. |1 j( u5 T3 F { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: I% Z+ k3 f6 @8 A4 b
pInvSort->Add(vItem.nIndex);
0 q3 K7 h% S) G* v3 }: v2 {) P }
: R: l$ N) u: B/ u! t' r) u BYTE nDestPos = 0;
- ]% |; v5 A# N8 z- q0 U: y for (int i=0;i<MAX_INVENTORY;i++)
8 k$ \0 C* J8 c; X9 j# W {0 j' i# n. G G1 b3 ]8 S/ r" I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& {" B: D& z) M) f5 d+ ]+ h if (pItemElem)
( @) Y0 l7 g5 v7 `- \/ n {
: r6 J e6 } k7 k6 w" N if (IsUsingItem(pItemElem)): U0 v3 ?& j+ s& H
{
# a9 G) D! e5 A //这个位置无法放
$ V. g8 s; q P7 r9 C: _+ ^ nDestPos++;
q7 w" x9 y2 R. Q }) l3 l# g% Q+ @6 p% T; M
}
( p4 j' n& ?4 }9 @5 L/ ~ BYTE nSrc = pInvSort->GetItemSrc(i);
: v" m& q) h9 W6 b+ l/ Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# ^1 U4 n7 L4 j0 P" f if (pItemElem)
+ p8 b7 i% V! p: ?* x: U {
4 V' w# h! }5 _3 Z if (IsUsingItem(pItemElem))+ `9 f; S$ N! v
{
) D: W. {% [, J+ d: X //这个道具无法移动,跳过5 Z5 C; N8 H. C0 A4 v6 {( f
continue;
$ i3 E+ L8 s- l% H% J }# B3 q# q5 ~7 d. l, ^ R6 o
}else{' p, Z. @5 J7 F' K* x3 r
//空位置 不用动
$ j9 p0 W, Y# q% [/ o5 d) }, P7 p: U continue;1 W; c( s1 k9 C( E1 p9 m+ t# m
}1 H* K" H7 B+ w' Y1 \7 {$ I
//////////////////////////////////////////////////////////////////////////
3 U8 ~8 d( I+ | Q9 Q( K //开始移动
. f# E+ a, R: D8 c @1 ^* V5 r; Z if (nSrc == nDestPos)6 Y+ ~* O. [- T9 \
{9 @$ e3 m$ a' A8 ?$ w
//原地不动
& G6 ~+ Z" r6 c nDestPos++;
% X- Z Y5 c0 ~- {* c& I% U/ I continue;4 [, {' W2 I; D# i
}3 W' {& o* o* t! h9 O
pInvSort->MoveItem(i,nDestPos);% {5 U5 t N% y) |: i
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 U8 G6 C6 r4 W) B4 ?* } Sleep(5);
0 s. M2 T2 P( G( j //Error("移动 - %d->%d",nSrc,nDestPos);) Z N8 i. \* y# n! {1 D- y6 a
nDestPos++;, ~* V' R! f/ U: \7 l+ k
}
7 y% m/ r: J$ [4 B) x3 a //取第一个元素的信息
8 L8 F9 C, [ H# [ /*- V, ^; b& S. Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- F! a3 l* x5 w1 w+ e- x# y. b {
$ m' K0 q* f/ Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ o/ A, F1 g: B1 Q
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: t( P; [$ c5 h. y/ m1 S: J9 v
}
: q! a2 ]* {9 x */! O% j2 ^* m0 Y' e9 Z
//////////////////////////////////////////////////////////////////////////0 R1 U1 M" T6 n! \
break;
+ J/ Z- v7 A7 }2 ^+ d* ^8 L/ P }' N# b6 v% R( D1 i f
} 2 e$ W" V7 m/ h6 s$ C$ m }5 M
}/ ] ]/ V4 u/ L5 q
m_wndMenu.SetVisible(FALSE);
% ?! `5 ]+ _6 o/ ^* b5 y3 I3 U2 V! d m8 Q* B& T/ V
--------------------------------------------------------------------------------------------------------& d" P9 O4 {" u: _1 X
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), c5 R6 _. ^0 Y& _% D- N
{3 S) ]# b. S* h1 q0 P1 J* F& `
BaseMouseCursor();8 x$ X9 E5 G% {& ?9 ]& A9 O7 E- d/ A
}
4 m4 P* i, s8 g0 Q6 l) E在其下添加:9 s1 }- | b: w+ T
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 n" h- n* \+ J! @' ~/ Y W0 I2 `
{. X2 D. G9 e0 N7 G
m_wndMenu.DeleteAllMenu();
4 j' e. C3 S1 |$ j. p- j4 }! gm_wndMenu.CreateMenu(this);9 l* |; r6 Z# k1 w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 `+ m7 b1 ~- X8 m) K+ s
# K4 _4 S+ A! Z- X: z3 Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ _7 _0 d; T% J& {
{ p+ C* c; e! P" T! _; m
//P以上级别才可以删除所有道具
6 o4 v( ^: L4 y' d m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ O* c9 @3 u$ A& X: }& G1 Q}# u- r, Z- F& M J( J; g, S4 j% _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );4 {+ Q' }4 h( O. u' q* n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* ~: ^" c) N# A, S
m_wndMenu.SetFocus();4 W9 ^8 l. c$ d. Z- g# }7 |8 T
}, y# B' S* R. \/ D5 h2 ]
------------------------------------------------------------------------------------------------------------# U- u2 S+ O4 K$ o5 C* n/ V. D& _
*************************
3 q, u$ m8 N5 xWndField.h文件! i! ]- k' O8 w: t" J$ U r
*************************
! K. Y: o3 h! P搜索:BOOL m_bReport;
* \+ C- ]! |* }* _4 h6 v! [其后添加:4 B9 }$ U4 ^% H8 Z! R
CWndMenu m_wndMenu;& O* r: W. i$ I: b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
, C% n# x1 b4 p/ n其后添加:
( e4 G8 ?& s/ t% f' s" X6 ]virtual void OnRButtonUp(UINT nFlags, CPoint point);! E. R# i8 {: z7 o" Q1 \. H% G
0 m* H, j- v: ~& c* R+ j+ p& w2 i9 O* c* h! R' K6 C
|
|