|
|
源文件中_Interface文件夹下WndField.cpp文件5 Y: i$ }2 ?- i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): W# H4 c" \0 \$ r
' c& Y* K/ A7 d$ b+ m: rstruct sItem
0 F5 O/ }6 v; L0 \{
/ B# i0 V- \ z4 ^" \" r7 s& ?6 uDWORD dwId;
5 E* \1 H. l- a' `8 m0 c% ~DWORD dwKind2;
f! i6 C- O9 a. h1 p$ B6 ?DWORD dwItemId;* W; C+ [) u* E* d7 J
BYTE nIndex;
% t; A# i+ Y" q" `sItem(){ X/ B3 x' D! n, c* v
dwId = dwKind2 = dwItemId = nIndex = 0;: A: f: `/ e+ Y3 h* r( `
}5 p% c$ _1 x: g. q' _
bool operator < (const sItem p2)
. |1 n7 ~" O& _: ^, _. v# N{3 c2 D! V" F/ P% |, R) f; T
if (dwKind2 == p2.dwKind2) @ E# F+ c; b- W7 z4 x
{
: `+ @0 Z5 i+ [ return dwItemId < p2.dwItemId;
7 Z7 S5 L! S: Q1 N! R }else{
3 o# @- o8 n2 O; E" `9 N/ L return dwKind2 < p2.dwKind2;
5 G$ J+ X; z0 ` }! N) Q1 E* x# A$ z
}
3 H, D4 T2 @7 |7 y; ]};
. \% v' v* O) V( ^7 ^class CInventorySort1 m6 H& p' l& Z( ~) k& I
{, B% G8 k( m( a# H6 \2 r
public:( C/ |0 ^* @# e: [- E! `0 z
CInventorySort()* X+ k* A: I3 H0 ~+ {$ m9 M
{
9 j5 z d7 T9 \( h1 e7 A* L+ K m_dwPos = 0;
; M' u6 c& C6 Y" \- b+ S}( u3 K2 K, q, q4 r/ |- u
~CInventorySort(){}
2 s0 h- n( q) l( q# G# o; [private:
3 D+ P' k: i4 JsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
9 r G, m- h. A" mDWORD m_dwPos; T0 O7 ]( I" Y8 C2 Y
public:
& W& Y2 p/ J$ ]; P% Dvoid Add(BYTE nIndex)
; b; P# _4 V0 I; p& L; C5 R5 T% g/ v{
* V; G0 n5 Y/ U, r if (m_dwPos >= MAX_INVENTORY) t. D8 M6 j6 V$ M& W+ [
{6 w* Q$ c, l3 W
return;
& e$ Z2 w5 w ]/ X8 m- E }' X; V0 M) r# m4 l" |8 n8 A" h
m_Item[m_dwPos].nIndex = nIndex;
# j: J. |, j v& ^$ ~3 ?* l m_Item[m_dwPos].dwId = m_dwPos;
$ f3 C. u; t8 ~0 x x m_dwPos++;
+ A6 W6 `! w3 h) d}6 [7 Z) N# \; J; |" i$ f! E) i
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
}* H7 C5 j. v4 }{
/ M: N& ~8 R: x1 B7 K for (int i=0;i<MAX_INVENTORY;i++): A* Z8 V# t- l$ |. _8 e Y8 M
{5 A2 N4 }6 J" _; l3 F7 U
if (m_Item.dwId == dwId)$ K" Q2 T, @! `. U
{1 T9 G$ r. F6 ?: W9 Y0 t
return m_Item.nIndex;
+ j( _1 x* B l' p' ^8 ^ }
, Y& {$ o3 h* n1 N' Y2 r }
- d6 M, C! _1 V4 \ return 255;! t. h0 l: V6 W! e
}
7 U2 ^# S% T9 J; d& z- p9 V6 g! \- Nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, W- X' L( V2 q" G. j) J{7 Y8 Z F* L7 O, y q( }5 E: i# N
BYTE nTmp = 0;
2 k/ y8 v& E7 @* b: a m4 h; N bool bDest = false,bSrc = false;+ }7 @ ~6 H8 j' D) Q# T0 d+ A. T
for (int i=0;i<MAX_INVENTORY;i++)
% @$ T: ^/ r& J- y& B" \ {8 \ g3 z9 |! |2 c) N. ?
if (dwSrcId == m_Item.dwId)
& {8 H. s: Y4 ^ {7 p) u, S _: `2 E8 u% }* Y
//id相等 则 改变对应的dest和src' n; [% Q- b5 L" k- ? p# m
nTmp = m_Item.nIndex;6 j2 g1 t9 j3 z, B1 h$ j
m_Item.nIndex = dest;
$ M) B ?6 M' G1 F }+ \& g( d4 j, ?; }5 n$ {3 Q1 O
}
" e+ P. q! i+ [) Z //临时数据保存完毕,交换开始' N1 a0 r/ |& T8 N" ?
for (int i=0;i<MAX_INVENTORY;i++)
( o4 M" r: _5 d* [ {) D1 R3 E& F4 @9 V& \! M% f
if (dest == m_Item.nIndex)
- W% A, ?( n- m/ a- _ {! `" \ i4 N& w' P
//id相等 则 改变对应的dest和src
& A5 @" b8 E7 c6 Z p* ]) ^( N- | m_Item.nIndex = nTmp;- R, u; v2 @* K3 B u" c# ]* C
} k& R( W" J( T
}; g; k( L3 ]) p5 O7 d# p) V
}
9 r# E. ~1 Q, D6 R7 z: j' d};
4 V+ ^7 O9 V2 R2 F( @, }- m0 E-------------------------------------------------------------------------1 W9 k' G: l0 }: O) V1 p2 ^5 D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# g- I% u$ Q3 p( Q
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 H3 `& Y+ z' d% \! D" d# M n
紧靠其上添加:: E' W8 M( t- \9 W5 ~5 F1 n2 `; b
if( pWndBase == &m_wndMenu )$ b/ z; e7 i: k
{
2 S/ X- m3 g1 N- ]" j switch( nID )- B5 R: g- ^3 S" n
{
6 \# V" r" k+ j& a y. m case 2:( Z) }# c4 j. N! {% c7 m2 X
{$ f! j, z: N- J# t" @2 T
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) C6 ] a$ N/ F% n& o if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) @, E% Z4 d8 {% _$ P) t4 A9 x* i- G
{8 v, N. P) X' J5 I( {7 b
break;
( m/ A: P; m- v, b2 \( h/ g. M }* F8 |6 @' G: J. T! p! l8 W9 f y$ P
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 \( y" \) J( u! [+ E
{
8 M. f- ?( b6 e CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; _! {3 Y# Z# ]4 |& `6 s if( !pItemElem )8 L) M! n, K t. f8 A {/ k
continue;& B& j: L: t8 B" d/ B: {
if(pItemElem->GetExtra() > 0)3 x, ?: z5 C6 s, n
continue;
5 }* k; N, y" n/ B; F# p- @' i1 P$ z if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) q& ]% ] u" P+ n continue;
& G' D+ g0 @! C0 P' j: V: k3 @ if( g_pPlayer->IsUsing( pItemElem ) )4 b; U) A S7 J& [
continue;2 @. G n0 b# V& N) k% Z h
if( pItemElem->IsUndestructable() == TRUE )" Z, E$ L6 y5 [. ^, {. }! J3 z
{
- W! \' Q ^2 u0 l" z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; v# x0 S! H# [1 X. r continue;$ C" P6 S) G' q0 G4 O
}- l2 G3 z% n+ G. F* l+ C
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, S) X7 b ^# n# p! j7 f }* X2 |# W8 `- b: }2 l% S
break;! v7 @7 V, m4 E' |8 J0 d
}
4 o( ^. J7 K, u! h; q case 1:
. k3 e& A! O5 L) v5 r% R2 [ {
9 s, p& f: |7 Z: j //整理背包
, G4 c7 k; b. K+ c, W0 f& C; e //////////////////////////////////////////////////////////////////////////
, s) t* `+ x+ ^- _) L //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# Q3 H; c$ {( m3 t //////////////////////////////////////////////////////////////////////////* I8 N& X$ a5 Y( K
//////////////////////////////////////////////////////////////////////////
5 P9 E5 k' S- N CInventorySort* pInvSort = new CInventorySort;
$ n8 t' k( {; F vector <sItem> vItem;. K9 y3 ^1 w! n# Y% o! W% }6 X
vItem.resize(MAX_INVENTORY);//初始化大小
$ y4 Y8 ^" J0 ~! g: ] //////////////////////////////////////////////////////////////////////////
# ^6 D/ f& k8 a1 W //填充数据; H/ W7 l( q5 L( ~9 ]. E
for (int i=0;i<MAX_INVENTORY;i++)( S- Y4 e) u! O3 C% ~, t
{
6 J, i u+ N2 P" ?; C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- J0 G/ I" l G
if (!pItemElem)
6 d& Z5 I( M* E T* \ {
, G+ u; O5 v- g9 `( P6 K; y vItem.dwKind2 = 0xffffffff;0 z3 z: n, N6 o: W( f
vItem.dwItemId = 0xffffffff;
! Y) ?8 M4 A' @5 W9 Y: W; l: ?+ f vItem.nIndex = i;3 U3 f4 V; J! `: g+ E+ L
}else {% O7 p9 L+ q/ x1 _6 I
ItemProp* pProp = pItemElem->GetProp();
$ R% ?, U/ z! c% L vItem.dwKind2 = pProp->dwItemKind2;# u: z/ l, M0 S# j
vItem.dwItemId = pItemElem->m_dwItemId;, B8 i, @3 F& A! t4 |' p6 ?
vItem.nIndex = i;
; s C5 U1 ?) z" D }
% G6 h" S2 _5 J" t$ z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ d) G) R6 E& ~. f5 r$ ~, T8 M
}
5 E- K3 }) ^7 F4 ~% q //////////////////////////////////////////////////////////////////////////
* ]4 I- Y, s T& `* A7 }" D sort(vItem.begin(),vItem.end());//排序: Y9 R- r& z. V, S) P/ V0 {
/////////////////////////////////////////////////////////////////////////// s2 Q$ q y0 I* H
//交换
# l" o7 s j3 S) Y" y for (size_t i=0;i<vItem.size();i++)8 q- E7 l1 Z9 o, T9 ]; D
{
0 Q: ?: _3 W' X' y+ Z' p. t //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* U* w' e/ U( e, C% E, @6 K pInvSort->Add(vItem.nIndex);2 q( L( v; ~& V8 f
}! D# S J8 K9 {* b0 W% E* J% t
BYTE nDestPos = 0;
) n! v2 f$ |1 d" I; n: S for (int i=0;i<MAX_INVENTORY;i++)' L) S% b- p5 X1 [: v
{# k2 u9 R' K8 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
5 {5 d; H9 I w3 }" V2 s( T if (pItemElem)
! L; s: Q2 w* z: k% Z {
@+ [/ G+ W) k: R( @& q if (IsUsingItem(pItemElem))8 Y/ f4 `" M% g% x$ m+ `. I; {0 L2 t
{
5 r3 _7 `. m5 d0 F) G- { //这个位置无法放 ]8 R. H2 i' n" o- G% g
nDestPos++;0 u& T `, V3 w
}2 G, o. X0 j* M4 W( E" r) o7 \3 ?
}" G8 T- w8 M* y, l, S. ^) h
BYTE nSrc = pInvSort->GetItemSrc(i);
; h4 J+ o( s5 j pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 b) ^5 i1 I8 C& y0 Y
if (pItemElem)
0 ?/ o, H! f: v0 W0 V' P4 ~2 a0 L- I {
6 I4 w7 r: Q7 v0 A if (IsUsingItem(pItemElem)); u2 E% K' X* G8 q2 T; ^
{
8 G D1 A: B( p( ^, b/ ~ //这个道具无法移动,跳过% v3 p5 z' t+ N: N1 G* ^
continue;
, T1 z+ B5 t Q) S$ E* t }6 N5 {2 W$ t5 x2 |# I+ m
}else{; n, Q3 _- ]# Q( G& N
//空位置 不用动: j+ W1 w' S' S- m" ?4 n+ d9 G
continue;
" |/ E* U* Z9 {: h }
+ `( I ~ z8 p- @% v: o //////////////////////////////////////////////////////////////////////////6 Z x9 U8 b& k9 ~5 ~7 t; M
//开始移动* a6 I2 R- X& x: J/ q
if (nSrc == nDestPos)% i. _2 ^# G/ z
{; f$ o7 }7 d7 x
//原地不动7 I1 b/ Z7 X: S( U
nDestPos++;0 f) D S8 d4 p% I4 r
continue;
5 d9 A' c" Q8 W; O- N' u }
! ~2 z) [) K6 @) h* | pInvSort->MoveItem(i,nDestPos);
8 p' o& M/ c3 j9 D g_DPlay.SendMoveItem(0,nSrc,nDestPos);
i& W4 O3 K2 H$ B6 {, R6 P/ F Sleep(5);; o6 }3 u1 o! @" K
//Error("移动 - %d->%d",nSrc,nDestPos);% r0 w- b3 ?: R& J a3 C! W
nDestPos++;6 Y/ @: a: t/ o! o$ k. p8 C
}
8 \* g; U5 q9 s- F5 \7 k4 ` //取第一个元素的信息
) ]2 F5 c5 Z3 u5 v& z( e /*- x2 i: K/ ?( i& {( [2 ^( I& A) A
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ P4 i5 r/ b5 C$ n% Q1 R {0 T; p) e, P8 ~2 w) C5 f/ N
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( G+ G$ J" w6 A* k5 j) P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: ?% L N/ H% f8 n- c6 c
}
7 W7 J9 p. y7 `, \; L/ Q */$ ]; v, @9 C3 J C0 a' L" Y* V/ k
//////////////////////////////////////////////////////////////////////////$ S* [7 s6 q3 a3 V% W
break;
* }; ~0 q' U; r: o6 X) ? }
- i; N6 {* o: g p6 q }
0 M% \& g& E) \+ D; h}
7 ]7 f( R/ B; A4 `# y, Mm_wndMenu.SetVisible(FALSE);; N% O# f3 g" P, G ~
2 N( T+ f* v# Q1 T/ y7 P, ~
-------------------------------------------------------------------------------------------------------- v9 V8 X% i( \8 p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( j2 T- O8 _7 @. A" R. b
{
. O( ]; c1 V$ ?3 U/ n% Y5 L. LBaseMouseCursor();5 _5 l. T s: F( a
}
; ~; G' \8 n6 P0 r- \ y" E在其下添加:
- s9 K& N% c3 \! N1 j6 F: C0 Q( O; yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 V& R7 y& K3 M) ~{
( t3 L" g/ m; G- y' e' y* O, hm_wndMenu.DeleteAllMenu();
) V9 q" V+ ?8 L; t% C4 m) C8 lm_wndMenu.CreateMenu(this);4 ?% W e! \$ I0 R, Y3 }! S- V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) T1 k9 h3 ]! l) f
# a! W2 a. H" D M& Y% t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): G7 M& w# e7 ~: S! G. N
{' Z& f, ?' E' J8 B# q, ?. l% {( b
//P以上级别才可以删除所有道具
6 T! z ?- e' C4 Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* J O5 T! }" z5 j5 f0 z( \* C7 C
}$ N- W/ e( V& z- }$ M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 f* j X+ O' o! d
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& ?6 ]' c! n6 K9 H9 V1 d
m_wndMenu.SetFocus();
$ b% |+ q1 V4 F- T7 H- P}5 Q$ z2 K; F$ t4 f1 d
------------------------------------------------------------------------------------------------------------
: v b1 v- V' ?: u$ G+ h*************************6 I1 k2 d5 ]% _7 h
WndField.h文件
# n" m! L2 \) V' I8 d) p' x*************************
3 w' N* |/ @% u# v2 M2 g. ^搜索:BOOL m_bReport;
) f7 Z' G5 g6 r其后添加:
7 S( Y: J- [7 M; KCWndMenu m_wndMenu;
3 i* E0 u, Y6 P& t$ z9 B" ] n( E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* E: }$ `2 M6 t
其后添加:
: i6 C4 r5 ?4 j% I/ f, Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);
& f$ V! c4 `: v8 W. X7 I0 t. K5 k9 f4 h+ X0 U
0 f0 f7 Z; W1 p |
|