|
|
源文件中_Interface文件夹下WndField.cpp文件6 q0 H( [& H1 O" B7 K9 v1 S! ^
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ]& _! l8 }9 R0 B. s3 t- O
* O' `+ e# S" e" D$ G- Zstruct sItem
* |5 G- Y& M. Q+ s- j$ ]{# `8 V7 G4 }1 F
DWORD dwId;
0 c% v. {* e8 L, QDWORD dwKind2;. U+ c5 n' p4 _7 w6 G
DWORD dwItemId;
4 [/ x0 _3 g, r z. u! I2 v1 lBYTE nIndex;9 b1 t: n* f, ?
sItem(){
% [! [0 n' {1 D" e* \8 R dwId = dwKind2 = dwItemId = nIndex = 0;* r. B5 s% O, t7 _. T2 B/ C: `
}
- x, J0 v2 Z. ebool operator < (const sItem p2); i6 U! {& k. g/ C0 V3 {& }$ V
{5 {0 m" ~! m- m; q
if (dwKind2 == p2.dwKind2)- B! P; R+ J# B3 d" ^
{
: n- i. D! z; D2 \( _5 U2 k" s' G! t return dwItemId < p2.dwItemId;
7 H3 S, L+ T1 u }else{
6 Q q9 z% T. a return dwKind2 < p2.dwKind2;5 m! t# D" j/ O/ r
}/ r9 ~! n+ d/ O# z0 X7 h( Z
}* j2 F3 ^) F# @! T V9 }5 ?! H
};' T" E2 n8 a: g) e1 n
class CInventorySort4 h( u: o+ Y' W. s5 E4 ?
{
% M0 S+ Q- i( F* T K: Zpublic:
7 e( ^: _1 X. K+ Y3 D# ?1 i& C+ GCInventorySort(). }/ @. c' Y) b7 r V
{
' z1 a+ k2 y9 g' R: ^ m_dwPos = 0;
$ n* }# U% M" b% L3 c4 u2 Y}* y% J8 |3 l+ U, v( V2 }+ v5 X
~CInventorySort(){}
/ a5 s1 M( [+ c5 ^& ?" B) aprivate:
. @/ }$ Y3 L5 d0 x0 U" nsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, I0 H1 Y y# ]9 d# z7 JDWORD m_dwPos;$ y5 ] [" [$ W. n1 \6 w2 Q* a5 r+ C
public:. c: F' R7 H3 }+ Q$ j
void Add(BYTE nIndex)
! r5 N) y% y1 i% Z! K: B{
5 [: b) O( L' z: P if (m_dwPos >= MAX_INVENTORY)8 N) |( d# t. |) M9 r, u4 f
{
* b7 I% U2 H& c$ q return;
$ C* F6 g. I/ P' X( T }
% u; ~: q0 H* G# W% A m_Item[m_dwPos].nIndex = nIndex;, _' u- k/ q* a s/ q0 \. D/ X6 I
m_Item[m_dwPos].dwId = m_dwPos;+ K$ Y7 N; f: b: o9 g+ w2 C4 n
m_dwPos++;8 P2 ]9 G" C' w$ |; h
}
$ B4 m3 {& _$ b6 B, i/ L1 R# G* R4 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' w, H2 D9 G* e S) N{
+ X+ W* o) s5 e for (int i=0;i<MAX_INVENTORY;i++)
; t4 B+ ?/ z0 O! A {
# Q* W7 N6 U8 q$ V$ |3 U if (m_Item.dwId == dwId)
3 p; J5 W" ~, K/ n2 m& J5 G- { {) |3 |* |# O4 {# G' Y9 d/ K5 J
return m_Item.nIndex;& p0 H/ D! r* P$ R+ n4 Y; l, g
}0 c& S0 W7 Z# q N, `9 v
}/ i( w8 ~% Z; X
return 255;* s4 N9 T2 K5 P
}
" s# X+ d! P6 ~6 gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
d/ B6 H, p Y+ w{% K* J( D% B5 H, G( f
BYTE nTmp = 0;
2 b: H$ [9 Y* z- K5 |( H8 f bool bDest = false,bSrc = false;
: M: O# A" ~' Q$ o, w, W for (int i=0;i<MAX_INVENTORY;i++)
& }: O4 ?9 S8 @ {" G8 K; t" K! s7 O: h' Q! | z
if (dwSrcId == m_Item.dwId)
7 b1 l! } P6 R- f \ {* u+ w/ c5 ]3 Y: p
//id相等 则 改变对应的dest和src
; {0 Z* }. V" W- Z nTmp = m_Item.nIndex;
1 ~2 g. t3 V& d' B y m_Item.nIndex = dest;' P5 n8 ^( K, v* p7 B
}
2 \& J9 m1 Z* R8 T T5 A }
9 ]6 K) \9 |: q& w/ M* i. j //临时数据保存完毕,交换开始
; j: {+ {% K8 e: c b7 A for (int i=0;i<MAX_INVENTORY;i++)
]1 G2 V* O; m; B {9 \: p1 I& k9 a8 k1 I0 f u
if (dest == m_Item.nIndex)0 l; \; H# E( u( ]) g
{
+ b5 g+ O4 A g: Q+ n- D& e //id相等 则 改变对应的dest和src
% G) ~( O: C/ t m_Item.nIndex = nTmp;
: n. i. D: L( ~ ] }
! G2 N. L) {' ~ }8 q0 s7 O. L) k3 G+ u5 `$ f) I
}& F( J/ O; h& U1 o1 u4 M
};
}3 \4 m4 C' _-------------------------------------------------------------------------) j M7 W' C* D) A: @9 G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) w; l |+ h' a# S# t) p, F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 D e0 [; p2 m" }9 g* Z* s
紧靠其上添加:
, o, q6 Q6 G9 Zif( pWndBase == &m_wndMenu )
( l4 A% X* n+ ^- j# Z P{. k1 J1 I* O' e; v
switch( nID )
# S8 d( c. Z; E* z+ d {
/ n* {& S: o/ {2 w& I1 ? case 2:
8 F: f7 j' E8 N, g: c* a6 [/ C {+ j/ |; \; F9 N* x& @5 n
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% m( H; m+ L1 y, R9 v; ]% V) J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): A- P2 p( q5 N
{
1 M/ D2 k7 @: z6 \ break;
# Y4 S' K) O- V: d }
7 \( ? Z6 D! |1 G# J; L for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) h4 K8 L" V( @: X; r( J
{
4 F8 R, t% O8 \6 _; [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( U: f% P5 t, j( y2 e if( !pItemElem )
; {2 N2 n- R U$ |+ i! p/ O continue;
+ f- x& B. s, P if(pItemElem->GetExtra() > 0)6 ^0 F' r- T% M; D% \
continue;
% n7 I7 l. d& D2 \3 s! z2 s7 q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 e& N8 p- G' W, h continue;
1 J! j4 q; k! o& M9 S if( g_pPlayer->IsUsing( pItemElem ) ). P1 f6 G& U4 U/ |( [+ D5 q
continue;
H" H1 h. S6 k0 y1 n4 F5 \ if( pItemElem->IsUndestructable() == TRUE )9 c( [6 p& o9 A
{
3 y! Q! R4 S+ n' ^ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" k1 O) ]/ l' S1 e continue;/ ?# K7 b) f: { d4 `3 K# o1 j
}( F5 T& {+ |4 Z% v) x4 f; J, ?
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# N6 V3 J5 u- f9 n& q9 e2 r k
}7 e- Q/ E2 G- r; @0 |: v: l
break;
$ T I% \2 X- u2 O {5 d R }
* Y( p! t) F; O/ i8 |" [ case 1:/ O0 i$ z) I" W; q s. Q1 x! G' v9 N
{0 w5 R: t0 O' W' r
//整理背包
# u r0 f0 ^# b/ y7 U //////////////////////////////////////////////////////////////////////////
$ E6 n8 s9 b( U( J, s n/ k2 v/ V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 F. ^5 Y, c/ ^7 }
//////////////////////////////////////////////////////////////////////////
/ t" Z% i) x: a4 d& V. k$ y3 G //////////////////////////////////////////////////////////////////////////
7 r. Y0 Q- A; n CInventorySort* pInvSort = new CInventorySort;
2 g4 d1 r5 m ?/ U7 U$ }" e; D5 J U vector <sItem> vItem;
7 e# ]" j9 L3 j3 o( f# v vItem.resize(MAX_INVENTORY);//初始化大小: L( x0 C v1 v7 [5 x
//////////////////////////////////////////////////////////////////////////
' q% e {2 y" T! J5 V; G //填充数据
* k& j1 B$ J- ?4 x& q3 z, B* J7 y for (int i=0;i<MAX_INVENTORY;i++)
. u+ g3 l0 m9 Y' {$ m2 _ {
, T# b1 K0 r: P. O7 I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 M4 k! J+ H2 z/ b: ?( R0 }
if (!pItemElem)
1 U( Y6 k( u6 X {
6 W( e8 W# B7 v- W: x1 B8 Y vItem.dwKind2 = 0xffffffff;
% R1 s. U$ L/ d# o% W5 { vItem.dwItemId = 0xffffffff;
. U' `$ l+ _" g9 w8 q) N1 g vItem.nIndex = i;2 i* B$ ?# {9 m* C
}else {( m# Q, _: G. |& N6 K
ItemProp* pProp = pItemElem->GetProp();& B/ o; q: B- @6 N
vItem.dwKind2 = pProp->dwItemKind2;
0 [, z+ o! ]( U$ _. L vItem.dwItemId = pItemElem->m_dwItemId;3 G- t1 f/ Y0 d$ z
vItem.nIndex = i;$ @2 J1 d' p$ Y, ]4 a8 f p4 v; _
}
/ ~, s8 W: H* u/ ` //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( I7 N( r1 o) ?0 r8 v" Y* O
}6 K' d! |* J3 A# v
//////////////////////////////////////////////////////////////////////////
! Y' L" j' [% n! Z sort(vItem.begin(),vItem.end());//排序
$ U+ N1 ~9 X! C3 {% g; y- V3 o //////////////////////////////////////////////////////////////////////////
+ ]# f. U2 u. \* ~8 w# `' B //交换2 {% S+ ?: \- l. U# q( |+ |
for (size_t i=0;i<vItem.size();i++)
- r% T8 L: u" R" }/ r$ t n {
; i8 R/ b [* j, C4 j/ K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) W8 z B$ v. K- c4 U
pInvSort->Add(vItem.nIndex);; \) L) J+ v( O' ~, O" `
}- T5 \! L. n" N2 \( U, d# n4 X
BYTE nDestPos = 0;
# t- w" Y, G+ w6 U B- ~% ?5 f2 \ for (int i=0;i<MAX_INVENTORY;i++)
; a0 Z: y+ s' h( y# b8 _4 ?* A) Y {. W4 W$ A7 i: g) ?: e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' I# U9 X7 S/ n- S9 S% D3 I if (pItemElem)0 P0 J+ J) | X0 A+ v2 \
{& o& ~/ r& S; R
if (IsUsingItem(pItemElem))3 r' R% c( D, U3 y8 w
{1 G) l3 F) `6 V* L
//这个位置无法放
8 h: ?9 \0 f9 a+ d9 r) X nDestPos++;# {6 x% m J) c+ ~- S3 `
}
. T$ |5 A1 E7 d4 V: w }
# [& e0 `3 [" S BYTE nSrc = pInvSort->GetItemSrc(i);, a# X8 `0 o8 g& l
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 s+ F- G9 M' g5 x, i* w if (pItemElem)$ c& X! R- D# N+ W
{& \* L) ^! G" [: D/ Z& d
if (IsUsingItem(pItemElem))
0 `4 O& C) J/ E0 s {, L& [( ~ A1 }: t5 \1 R
//这个道具无法移动,跳过
) `; f& V& K* a+ z continue;
1 r8 c2 ^- n: k* |5 g6 O }
2 t4 g4 w) J* Q* t1 D4 e: ~+ K2 ^ }else{% Y `2 F: N; Q
//空位置 不用动
# h" l' c2 _) h continue;+ C' V# q, n; m0 z/ f5 Z' R
}7 `% C! I* X6 g/ I
//////////////////////////////////////////////////////////////////////////
f, W0 p1 l4 p) r- _ //开始移动
9 ~; _0 [9 ~$ }1 r1 F1 Z if (nSrc == nDestPos)' k/ ?) R/ \* ~2 s( ~# p
{
; r/ G' q) v+ K //原地不动
3 }: i- ~. j& d- O# y# D nDestPos++;
, o5 P7 o- l3 U3 A+ F. u3 u continue;
: T6 X7 T/ L) v8 g3 K }" M3 Y& c, p; I& E! ]4 n, q; W2 u) Y3 i
pInvSort->MoveItem(i,nDestPos);
+ {$ {3 Z; u+ {& }* S% Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);7 J: ~) Q% ], w, e$ r9 f+ @- \
Sleep(5);5 Y& J+ y: r/ @1 Z2 G
//Error("移动 - %d->%d",nSrc,nDestPos);
3 C p& l1 Q. {: F+ n nDestPos++;
. o& ~' B7 ?7 S }+ U9 `$ \3 G y, c4 |9 V% ` X/ N; z
//取第一个元素的信息
j& }- C- w2 G& n; c1 S /*% i/ x" J! k+ e; o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
5 r$ [: o3 G5 a# G+ W6 ]; F {; r. `4 J8 w) k9 E8 f, t1 \
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ J# V3 @5 r: d& L% @& n9 \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ q1 [4 m2 o$ {& D |9 y
}
% x# {, V; y) g0 N- c, G' Z. w */9 E" O0 n* M" x$ L* U1 E
//////////////////////////////////////////////////////////////////////////) M [9 h4 g* \' m% s; R( Y
break;. d( |3 I3 ^ P: ]! O6 t& [) A
}' s+ [: M- ]5 ?# h( f) W; I
} ! ]$ B; W- g# s! X4 J( l' s( k) u
}/ Z, r; q! C' x2 Z1 e6 u
m_wndMenu.SetVisible(FALSE);
) ?9 V- y; \- h; ` b) Y( m6 E# W1 Q2 S! m# f
--------------------------------------------------------------------------------------------------------) p7 \) M5 ` u; W$ D$ B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) D% U7 f+ |8 q: i/ S
{- @ X3 F0 }# C3 w+ |1 P
BaseMouseCursor(); f" R$ X, z) ^# C
}# H' d8 w. H4 K$ T/ Q! a
在其下添加:% J- l7 Z& \8 E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 j9 i% w0 @% k
{# Z% ?2 U2 V3 F9 R5 A" O# v: i
m_wndMenu.DeleteAllMenu();
3 _6 P6 |- k2 @2 `% f. E. {m_wndMenu.CreateMenu(this);2 q5 P* `$ R2 w8 M5 k0 s6 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 F& }7 y# J: h$ `
4 ~; ?7 V' ?4 C. X, H1 h* Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 n/ ], R6 |. i9 u( s{
# I/ y$ u8 |1 _, r! I6 R+ b //P以上级别才可以删除所有道具+ r: u ^! H# |2 c" ~& c; b( a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 e0 O' ?1 S+ D) x1 N
}
& l9 I! U1 X# l Vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, m& S, p/ N( g& |, ?9 lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 u9 s9 ~: r; ~9 ?0 xm_wndMenu.SetFocus();
' f" O. s. B5 J8 X}6 I- |+ d9 S% l- F0 P s( P
------------------------------------------------------------------------------------------------------------1 y7 l" Y' U. J1 w, Q# L
*************************9 X) ^6 N" G4 N: V6 R9 O
WndField.h文件 i& G- R( {2 r# t9 }( e
*************************2 G9 V, Q* S* Y& |4 u' y/ h
搜索:BOOL m_bReport;
; m! W2 W4 w' i其后添加:" r4 k% x; s" |$ h
CWndMenu m_wndMenu; F& b8 o$ G5 f% G8 f$ r7 u
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 ]5 z: _$ C8 O* h1 n$ _
其后添加:
' f" l- {9 f/ A* ]- e, i/ P, wvirtual void OnRButtonUp(UINT nFlags, CPoint point);, |# A4 c7 H, |* y( O5 r
/ q; M9 ^$ [4 T+ L3 @0 z, M& q- k% r4 p) h
|
|