|
|
源文件中_Interface文件夹下WndField.cpp文件1 A) u4 A9 z+ X' E2 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ _7 D$ |# F" q
2 N4 ~% I2 S4 C" b: w# dstruct sItem
% r7 u s& Q$ B. H, O{
0 W# S( R' D. b# X* I5 K$ D& V) {DWORD dwId;, ~ a6 e+ j; S, @: e" e0 i
DWORD dwKind2;' {0 J9 t( s- E; W7 q* S) W
DWORD dwItemId;) `. R9 e4 q; a& e# |
BYTE nIndex;) d$ [, ?' J r5 F
sItem(){7 k- p# D9 b1 K h: |
dwId = dwKind2 = dwItemId = nIndex = 0;
! D4 B7 p/ y9 o8 [1 v}
. A9 h4 [- j3 r0 d% m* gbool operator < (const sItem p2); }( S" T6 N8 U" E
{( e: X; ]" _1 R
if (dwKind2 == p2.dwKind2)# }# H, c: p% c
{
: ]' {. }. N# Y' M w return dwItemId < p2.dwItemId;
# L0 K; E- K/ v5 l& s' ? }else{7 q1 x& ]# {- E# L" H# J3 u
return dwKind2 < p2.dwKind2;% a: a2 C' [, |' w/ C
}/ u0 {/ {: z- U6 }( e
}; z9 h: W8 K" g v# w; U
};
1 [+ Z) L8 W! s& E0 @" vclass CInventorySort: n+ L7 o1 }+ S. ? ?+ z/ Y
{ v1 X* H5 K3 Z% d- ?; P! `4 t
public:
. V+ T3 _9 Z3 X% oCInventorySort()
* ^9 Y( r' G8 \, J{# M8 I: Z# e& h- ~' y$ M: `
m_dwPos = 0;3 g- r: Y* T) z* Z
}
5 M1 `/ {3 U% ^0 c4 _~CInventorySort(){}
1 E( M+ V- ^+ w# Kprivate:$ Q: F; ~7 @, i, u6 j8 k7 `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 m4 _/ @. d( K
DWORD m_dwPos;! F) q1 F3 {& U' }' x8 F' L
public:
8 X& } q, }) Lvoid Add(BYTE nIndex)
1 A% r7 ?% F2 N; K{
/ Q0 P* z" X2 @5 h3 y4 g" K if (m_dwPos >= MAX_INVENTORY)
_; D) _% n7 W8 H J {
" w$ l+ ]* q7 v& a8 N! E' b return;: O6 ~, W- J- r+ e
}3 V* ~# l5 l0 \) q
m_Item[m_dwPos].nIndex = nIndex;4 |' |0 C* X2 B! ^3 a7 i) P
m_Item[m_dwPos].dwId = m_dwPos;
; L v5 w& ^9 i: y+ V- e m_dwPos++;
0 b! `( I0 M* }3 v3 g0 c. F" x}
7 a0 O: k9 L; i2 XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 ?' S, o' h0 r' B, o% E{* r7 Z. v+ C9 \1 z+ E. n
for (int i=0;i<MAX_INVENTORY;i++)4 z3 C/ X5 k* n- I$ G
{' M7 E& M. E6 `
if (m_Item.dwId == dwId) i/ t: x k1 f7 ]
{8 J4 `9 n9 Q( r }( e; y4 `3 ~
return m_Item.nIndex;
) h) M5 j e. \! `& J2 t! ? } Z" u0 A" Z. h
}4 |3 Q0 |! g; q. G
return 255;* K0 ]; ~8 F$ j
}
0 x( j1 p5 g0 w8 Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 G' C& l$ V8 u+ b* Y0 s$ O3 {{0 P9 }& b+ o! Z% \0 h" a
BYTE nTmp = 0;
( x3 ~3 ]4 i( i" z1 c; g bool bDest = false,bSrc = false;3 q' l6 A( l5 T4 `. B
for (int i=0;i<MAX_INVENTORY;i++)% V5 ]0 R+ g+ x4 J2 c
{
3 w% k: [8 i) C8 ~% c. r if (dwSrcId == m_Item.dwId)' `1 _8 O! h+ q+ F
{& Z K; n: D- r9 N) {" [3 N9 M
//id相等 则 改变对应的dest和src
- q) N' A; ~9 @$ X; o nTmp = m_Item.nIndex;" U. T6 L9 [5 K N4 V/ N
m_Item.nIndex = dest;
6 k9 R/ F/ U5 Y# p4 R }2 Z( i& `3 ^; I' _0 K
}
6 s- ]2 l; e$ p# p, c' b9 @" Q //临时数据保存完毕,交换开始
* G. S. r4 N! S/ }0 N! @ for (int i=0;i<MAX_INVENTORY;i++)
% [- N, ^1 U4 d D8 v8 Q- ?$ g3 a {
* K% K: F4 H: r W* i& |+ n if (dest == m_Item.nIndex)
0 n! g5 H0 s# x2 b1 s {
2 }+ R/ ` W6 Q; [% ^+ A //id相等 则 改变对应的dest和src# R4 T( T U3 L1 W: |
m_Item.nIndex = nTmp;
0 j6 e4 h/ d% f& c: W* V }, V! c4 D1 X) e4 s
}
5 A) B% w7 o' j7 v+ w( p}& \& ?5 Z" C+ R( Q6 l" c! O
};: |' M9 }2 E4 j( w+ U) P, ~
-------------------------------------------------------------------------6 q/ r1 `4 s5 b$ k% Q1 \' F( m4 k2 Z/ o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 f' k! G4 m* Z3 {5 [! v: o
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);' @8 u3 z) I1 t/ v# h& a, Z; k: P
紧靠其上添加:
* f3 S$ ~- o: F) |& F( {9 F$ g) Dif( pWndBase == &m_wndMenu )5 ^/ _3 R c/ d$ f+ Y
{
. [) v% W3 S" Z4 E* W, d switch( nID )5 g7 N; i7 n6 e+ z: I: I
{
( w+ ]' |& ]0 ?5 e& M! D& N; O case 2:" G' o3 [; X/ `( c
{# {; y0 j1 X: D+ u- m
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 s9 G+ }0 [" [/ p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, F! v7 a1 Q8 b' G& J( z {" B5 o1 H' w) ]% m: b6 k' n% O
break;
6 b. H4 O( B' j3 A0 B& u5 B }
1 _) @' \% d( v! }# _) _ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: A7 d- y6 v4 S5 K. V {* F. |5 C6 u) B7 C% ?0 D- L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, C: y) X! B4 A6 \' { if( !pItemElem )
4 x: x8 d1 Y- l V continue;
4 V8 @6 y5 O/ X( U& \2 z/ M Y if(pItemElem->GetExtra() > 0)
. v4 H& o. I9 q) ^5 U continue;- I3 @1 o/ W1 J, C# Y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - Q9 Q0 f3 h* E$ r
continue;" ]) N! q2 Z4 f" g( w
if( g_pPlayer->IsUsing( pItemElem ) )
, N0 V) S* I8 @* \ continue;2 b2 U# Z5 D* ?- V* m
if( pItemElem->IsUndestructable() == TRUE )0 j+ q) t* m* a$ k2 I# z+ H
{, m% F1 y3 D7 ` h
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) A+ n8 V9 c# {) i9 h" t continue;
% d' _' G' ~9 @3 p& v$ B+ d }
6 d# ~* P1 W9 N2 F+ J% O% ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% y; t/ L, K% R" K8 F# U# R }
% Z* T, n1 s3 h break;
% M* F; _% |( u$ i) [4 p- H+ p }
: ]& p5 V: T- T5 `; ^- @, E case 1:9 w0 V7 ]* S# {6 N+ a( k! z6 L
{+ l4 X2 j5 q8 T2 g. V
//整理背包0 O% [% l( l. O. D4 r& p L) g
//////////////////////////////////////////////////////////////////////////
- H8 v' l' p3 M" |: K# w# E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );# P$ ]5 o- }- ]; X$ t' g" i/ y4 J
//////////////////////////////////////////////////////////////////////////
+ f, Q# }- b) x& ~) @" D4 N: Y0 \$ W ////////////////////////////////////////////////////////////////////////// l' L8 g; X! |. ~& E7 T
CInventorySort* pInvSort = new CInventorySort;
( Q- Y1 O T+ _" v vector <sItem> vItem;
- e) E# J% G! y$ h$ k0 } vItem.resize(MAX_INVENTORY);//初始化大小
, `2 ]/ |3 q" C& ], a/ h# J+ h //////////////////////////////////////////////////////////////////////////5 O+ l' [2 C3 u% i' B: _5 L s
//填充数据$ n7 w; t, e# n
for (int i=0;i<MAX_INVENTORY;i++): M8 J5 H& S+ F% H
{& \3 z6 b; P- Q* U8 V- L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. X) p; o$ o. `8 @8 ~ if (!pItemElem)
' a0 A0 X/ B6 N/ l* y2 g {
; Y j9 S$ X4 j2 v- X vItem.dwKind2 = 0xffffffff;, u7 \) c: x! h
vItem.dwItemId = 0xffffffff;
& @/ d! H( w2 t! `5 T2 X( v vItem.nIndex = i;
?8 |! d( _( g5 T% s& @- X }else {
& a: G" y6 T% t8 [4 M! A; O' q9 l ItemProp* pProp = pItemElem->GetProp();5 f4 x" g, u( L1 u% m
vItem.dwKind2 = pProp->dwItemKind2;
7 |" S, B* _9 x6 Y vItem.dwItemId = pItemElem->m_dwItemId;2 ~' d/ s4 i/ z% S7 \3 s/ z
vItem.nIndex = i;
" z8 S5 o) q/ y0 q$ P }; K$ k: e0 [) E5 |* H8 c- T) Z% E
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 O4 \3 `6 K& Z! ^0 K$ H }
* c3 s7 R' |, D! Z" T //////////////////////////////////////////////////////////////////////////; {9 O" ?& C! m" m) g- E- H% M
sort(vItem.begin(),vItem.end());//排序9 D& V1 V$ J& C) ]+ h5 b w }
//////////////////////////////////////////////////////////////////////////
, {: K# v9 v5 q. c, {. f/ @1 Z: f //交换
5 a$ `8 A% d- m8 j/ j x# |! s for (size_t i=0;i<vItem.size();i++)
0 Y3 f- z- Z1 i7 G# {" S- Z s/ C {+ ?: ]$ b9 C7 @% _" x4 P7 @2 {) L
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 r8 g/ u2 G7 f/ n; A0 n pInvSort->Add(vItem.nIndex); t; b; f; Y+ q3 l3 C* K1 f4 z
}
" S1 C8 b9 l% i; G0 M+ Y BYTE nDestPos = 0;3 a) q' M' E. V2 x( n
for (int i=0;i<MAX_INVENTORY;i++)
' s6 r- O% v. Q) U {5 W. v# u2 Z, ?$ W* |0 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 H+ g( t2 w! D; d- Q+ \) D if (pItemElem)8 R2 J! v+ p0 l ?& F
{
9 U+ y: q4 Q7 ] @9 g3 x if (IsUsingItem(pItemElem)): I$ w* z* I0 ?1 c- v* v
{3 t5 A. D1 S9 u
//这个位置无法放
. A5 |; X. y2 H nDestPos++;/ W3 g9 ~9 [& u
}3 v2 X3 d, M3 r) M: Q; ^& l1 S
}: I" ~5 a* m& q* Z; s% d6 x
BYTE nSrc = pInvSort->GetItemSrc(i); X3 W- H% k/ n2 d' }$ ^
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 x; T6 H( |% p: c4 X8 U
if (pItemElem)
9 ^* x; ?0 L" t3 t {
0 g, R- O0 q. x: J D5 n5 ^ if (IsUsingItem(pItemElem))
/ h7 C7 F3 C( q4 y {
# [- h9 M# a* i. ^% x //这个道具无法移动,跳过
# W4 K- i0 B3 c1 G, r continue;9 ] j# Z4 ^9 s
}' E$ c$ p( M% m" T, c* o
}else{+ C) `6 n0 }! V
//空位置 不用动% L2 b1 g; y6 w, S* l7 e
continue;, x& n: N$ N" O$ U* [7 g$ T
}0 j" J7 I z4 v- q5 I
//////////////////////////////////////////////////////////////////////////8 V1 i9 l' ?+ @; |: X! }
//开始移动
3 y( j1 Q0 R; U: T if (nSrc == nDestPos)& m* \# t& h, _2 N7 v; s( n
{6 h8 t2 L" e1 V
//原地不动
) ~: p+ ?$ m. @6 d* K* \0 q nDestPos++;5 P% ]0 ~% M" b
continue;4 S4 J' t/ N. Y0 r* N
}) S( T/ D9 E" s( M/ ]. g
pInvSort->MoveItem(i,nDestPos);0 T% Z+ c! N# y, @8 ~6 v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ c3 K# v( _7 W& ]" D
Sleep(5);( o# K4 \( @' ^$ O
//Error("移动 - %d->%d",nSrc,nDestPos);
~9 l2 [6 R3 ^ Y nDestPos++;' Q9 ]4 U5 ^% C. \ s3 t
}/ [$ B2 g }; H5 w
//取第一个元素的信息8 X# m; ?4 _" R, r. K' w
/*
! w9 p8 O0 t4 k) J# K' V if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)3 W6 R- _9 N B* K7 N1 M
{
$ C' O% D: c% m& Y1 W) z5 I Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
# z, x" x! o+ p) [4 s+ u0 M5 E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- c& ~1 U1 r4 g3 |1 X9 Z }
% @; [5 ]. w" _) J+ L# ~6 { */, h( Q; {& Y0 Z" l
//////////////////////////////////////////////////////////////////////////0 L- E9 z$ l* F/ Y# ?
break;
4 c' ]/ M+ t7 f4 w4 E( y9 a }
1 @; B: L" {7 E* l& P1 [1 X } * g9 @1 s, W2 V+ d) V; c. @
}
% z. L3 l$ d# w2 I' [) \m_wndMenu.SetVisible(FALSE);
/ g" I- f& X" N3 M' S( H
6 K" a6 {0 p/ ~; ?5 `--------------------------------------------------------------------------------------------------------! p2 q$ R7 x3 N& K7 n, s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( U2 a, L7 Z: E( R
{
3 S% H% Y4 i( s6 Q6 Q" BBaseMouseCursor();
% Y1 P2 s9 X" ]. T' o; F2 A9 N}
. Z) X, Q7 u. ^. x( M8 p在其下添加:
- W: o& L7 o' g' X' r" o$ |, U7 nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), O3 m1 v+ T$ }4 H$ q0 C
{
, h) @; ?' B' V% zm_wndMenu.DeleteAllMenu();
) r! R/ h7 V: }9 w* @/ M! |" km_wndMenu.CreateMenu(this);
* {& x6 x3 a8 W) }3 E: c5 mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 ^) C" l# O- o. v7 K& a9 @ L8 [% @0 R8 k; D* {: X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- F' `# j8 ^% f$ h* B
{
/ X0 I$ R8 K- n% n4 X/ r( [ p //P以上级别才可以删除所有道具( z5 J' H& d3 C4 c1 s
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ C) K/ i' R" ]3 ]$ A
}
7 ?! D6 T$ Y) t/ `, tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ V: }; J1 }2 J, C+ B3 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: ?/ T( R% L$ C% ~( qm_wndMenu.SetFocus();
% G, w1 s9 P. \8 |+ r}
, G3 l/ ]8 S d& V( J. h4 _------------------------------------------------------------------------------------------------------------
7 ~' t& o7 ]6 J" }7 G*************************
( v( o0 \* D; ^% l7 VWndField.h文件2 Q0 n4 P" D. r5 F" b( p5 d2 d! T
*************************# M$ I* t, S( I0 A' K8 B
搜索:BOOL m_bReport;
2 ^* s: e% v6 H. b其后添加:+ p6 z+ J5 C: J! U" `- M5 e9 z& M: P
CWndMenu m_wndMenu;$ P9 H/ m3 f+ Y& }0 C v& A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 a# C; Y! j7 _! ^, m7 |" ~其后添加:
1 f; L; L' X' e' a) h1 }virtual void OnRButtonUp(UINT nFlags, CPoint point);
* Y% Y: e" l& |7 d' w, h- j5 l7 ~" Y# D: m2 `
2 B! Y' U6 @3 Z+ ~0 B2 M% s |
|