|
|
源文件中_Interface文件夹下WndField.cpp文件. i7 K! s' Y& W
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- A! ~9 }. s/ t: P
9 U$ o4 o0 F) M1 Z* n X& @struct sItem' k) ^6 Q$ l+ ?* a6 x5 ?4 V
{7 Q! I9 V# m) y1 O7 m
DWORD dwId;
6 W y3 p5 G' k& A8 Y- H" I. IDWORD dwKind2;# H9 A/ \2 }( i5 ^' }1 S
DWORD dwItemId;: W) o1 K/ L) @
BYTE nIndex;
! r6 F1 B7 a5 m: _5 i- {/ tsItem(){$ h7 o; H& C1 n1 G+ c
dwId = dwKind2 = dwItemId = nIndex = 0;
& I7 v+ N- L9 w5 `, d+ A0 a1 v0 ]/ \}' \& g4 U2 l5 Q, j, n
bool operator < (const sItem p2)* y. a' w) ^" y
{
8 d2 d/ ?; @& W) O- [) G if (dwKind2 == p2.dwKind2)
. O1 P; d+ u# K* X6 s3 E0 S {
* A' `5 J% M: c2 N0 K5 Q1 j return dwItemId < p2.dwItemId;! L1 ~1 M! e/ b' c. y* C
}else{
1 U% I( W* l$ f7 | return dwKind2 < p2.dwKind2;* u# g" s3 f0 l/ S, _ z0 S
}
; h7 z; K4 s, N# H$ u}7 p" h) w4 n9 J2 U+ {; z
};
6 ~$ O6 V& p% m, O( Xclass CInventorySort/ `' B2 r5 m' j j8 }, C
{
: q2 q) Y. @; e2 D% k1 e% mpublic:! c7 ^* g) A$ }" R
CInventorySort()
( Z# U9 H# |0 [{
( n* v- A5 l$ F- `) Q9 G0 k( V m_dwPos = 0;
, T+ j. t4 N4 D: I5 e6 w}
5 ^, v8 z' l- r7 m~CInventorySort(){}
+ C& \6 i' l+ }$ g8 G4 F+ Z `private:* R* Y0 v' u7 e5 ?6 c# V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- u8 ^, v' ]: x: M. `8 a
DWORD m_dwPos;4 E2 h8 j! z7 S( X$ }6 C3 `' l: x
public:
! k3 r, b% E' b) `5 Xvoid Add(BYTE nIndex)
% B( j0 E& a; G( }0 E: N6 V9 T{
; y7 i( L+ K9 D) P& R if (m_dwPos >= MAX_INVENTORY)
! _4 F. V- i, B# w+ @ {
" F) G, V; d9 A8 G! i$ ~ return;( N- |# \, ^; r. @* V: q0 M* t
}
& ]" k/ L* y/ n6 b+ L+ D m_Item[m_dwPos].nIndex = nIndex;- h8 z% z" d( f
m_Item[m_dwPos].dwId = m_dwPos;
: b( ~' g: o" H. }$ R m_dwPos++;
( @* _7 w% q0 ?$ Y$ w4 T+ m}
+ X/ K; j7 E7 ]. RBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. D; n8 G8 W9 H. v9 g{* T6 r) Z* _% v: h
for (int i=0;i<MAX_INVENTORY;i++)
/ i) M; l) j7 w0 }; S& B {" x; J/ ~& p+ N/ c
if (m_Item.dwId == dwId)
+ s7 X4 B7 g6 r/ [ {
; w6 b8 S+ r* n8 a1 U$ b return m_Item.nIndex;
. M# c, u) o' p6 U9 }/ V }8 B- d) \6 H4 I! w2 { b% I
}
. n. A8 A4 h$ q) t& {; V1 \# v1 {+ |6 @ return 255;9 D3 p/ A$ M+ h, v3 ^' R
}4 Q) g, K+ n/ t& ~+ c+ {, g. R: A
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( `( [: Q$ k, [9 d& o/ I
{) F6 [8 C6 E" X3 T$ Q# R
BYTE nTmp = 0;/ D; M; R7 i% `
bool bDest = false,bSrc = false;
. D& C8 x9 s R# k7 p9 L for (int i=0;i<MAX_INVENTORY;i++)4 y# e2 E2 k0 O2 j' e) v h/ d
{( E: B o5 G$ g. n
if (dwSrcId == m_Item.dwId)
! x9 q( K6 |2 E: k {
2 }' p. K# i4 Y1 h4 E" w2 o, U //id相等 则 改变对应的dest和src$ X& y1 I6 [0 V: p7 E1 P; ?
nTmp = m_Item.nIndex;
2 @; J: ]/ A7 X4 @2 i m_Item.nIndex = dest;7 @7 h9 b6 G0 M& r* p7 i( T# l, P
}9 ^, y Y' o2 _& G4 c( w' H+ o4 `, V
}
) f$ Q" p/ s4 i- x' F //临时数据保存完毕,交换开始
5 ?: D& i& l) A. c, o7 {- \2 B for (int i=0;i<MAX_INVENTORY;i++) T9 G2 o2 S8 W& k/ U- d
{* O; q- Y0 }. w; x! {: p+ i# S, X& A3 v
if (dest == m_Item.nIndex), q }$ [# Z6 o [7 u7 w
{
/ u! e* i' C( ?. L/ r6 W5 R' J7 _) w //id相等 则 改变对应的dest和src7 w b$ Q7 d, y! w
m_Item.nIndex = nTmp;
& `+ [' J( m8 A }
2 B4 V, q/ a# o4 S( [2 o9 o* o }
2 ]( ]$ ~+ @6 R}
0 G; T: F6 f5 n; a, |5 I. K};* D8 g. a6 w* N3 S2 ]
-------------------------------------------------------------------------
7 _6 E% e) p5 y8 n' K5 P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! h# f* Q, x3 ?' L4 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& \& d( x8 ]' p" u) G& R紧靠其上添加:- o8 h% m3 j$ W1 l: w6 G, F- P( C
if( pWndBase == &m_wndMenu )
7 m' W& c( P. R$ f0 L1 U{
& V& p! |4 o6 k1 m switch( nID )
?, f6 X4 E# h, C {9 ]0 v# P. n) Y1 U {$ V j" }
case 2:
- e/ G9 ]9 [. u+ n, R( r* D {+ h% }, ^) R$ w' p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 r! [; ^) @1 M) V' A
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ b. z& l. s; l6 E" m {: t' G5 y+ U% p8 m
break;
/ i. e& l6 T5 Q5 y: h( `; l }
& {# o% d( f! E- f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ n8 e; ^4 d6 e! M- n {
* c" c% h' q% p6 n( u/ K# [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, g6 _$ c% j$ T# i8 v
if( !pItemElem )
4 A/ X( }1 T1 i. i1 w0 L- c continue;0 L+ o# W* x& h, m4 t3 ]$ q9 X) F
if(pItemElem->GetExtra() > 0)" J J, Z/ J. [' E; b
continue;
$ {- n3 H0 P" f3 u7 m if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , `8 H# @1 k2 C
continue;
* \7 X Z# K8 b, `) ~# ]6 I; m if( g_pPlayer->IsUsing( pItemElem ) )
/ J, ^4 j; L/ B9 {9 N continue;. \( S- |" k" p V
if( pItemElem->IsUndestructable() == TRUE )0 ^! [7 P& S! z6 _0 d4 _' m/ @
{
: a1 c% O( K+ ]6 t) b! L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ z- z% K3 v# m* ~1 z0 l
continue;! y( e/ j g' l- \9 ^
}
: v9 D9 [9 k/ P/ `# m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 R( z. I& V2 F8 i8 W4 d# W }0 R+ D, X! Q0 V% f- _; S
break;
/ T& }" c9 I9 D7 [) g- U2 d a }0 x5 K) ~1 h& K- L1 V
case 1:
9 D. I, L; @6 @6 R) x$ |& j {
' B4 ` y7 I! i9 B //整理背包6 P5 _; J! U! t9 ^; l& h+ i! R
//////////////////////////////////////////////////////////////////////////2 w! Y1 p/ N b, S# m' ~
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ V! E: p4 q$ R( w8 E% P% _
//////////////////////////////////////////////////////////////////////////
3 `* g9 _* g8 o2 ^' ^ //////////////////////////////////////////////////////////////////////////
" |( D4 k, \" t8 P& r0 ?9 S0 \% | CInventorySort* pInvSort = new CInventorySort;
* h0 I1 M$ E# S vector <sItem> vItem;
" t3 a8 k' P8 n0 i3 t* L7 D% n4 d vItem.resize(MAX_INVENTORY);//初始化大小- x* t$ F- d0 P
//////////////////////////////////////////////////////////////////////////
/ d% \ C2 |: \8 _ //填充数据
8 Q% ]! p! N0 y- }7 p0 q- F8 { for (int i=0;i<MAX_INVENTORY;i++)/ s8 ^$ U, f7 A. s" w
{
! E% p; z4 V& P. V4 G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- q' O+ [. i" z7 p: P* I if (!pItemElem)
5 W! z1 c$ r# E5 m9 e {0 M0 b' r& W Q5 H) M d
vItem.dwKind2 = 0xffffffff;
: I1 t: L5 l* w0 O1 U vItem.dwItemId = 0xffffffff;. N' R' j0 F4 {/ h; I0 Y/ A. W0 E# \
vItem.nIndex = i;
9 ? s, Z1 K2 R, e6 w4 \( X }else {
8 R- a3 E9 A1 Z- E m; f ItemProp* pProp = pItemElem->GetProp();
3 ~# g, i0 W8 R( D# [ vItem.dwKind2 = pProp->dwItemKind2;
9 g7 x, \: a2 K* A/ L" Z+ S4 i M7 V vItem.dwItemId = pItemElem->m_dwItemId;
% i' x/ ?' e& c vItem.nIndex = i;/ w2 {! l; B$ A% M
}
9 g) w' W; Z5 |4 ]1 V. y0 x //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 r" v6 B9 p! c, Z" p/ P }
, ~* }" e! I, B, ^# s //////////////////////////////////////////////////////////////////////////, b D( y% L) \" I: L# ?3 G' V9 v
sort(vItem.begin(),vItem.end());//排序
' \& ~1 t8 P* z, B1 d9 A //////////////////////////////////////////////////////////////////////////
7 r$ ` N: q" { //交换( H4 B' t) K l& l5 H/ X
for (size_t i=0;i<vItem.size();i++), ^$ [0 Z7 [: B. s/ o. W$ A- e0 ^
{- |& e+ D, g [9 i
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);: G8 J o+ K) ^' z7 H4 M" Q
pInvSort->Add(vItem.nIndex);" T$ K! ^8 U9 S4 ^7 s+ s
}
( o8 _# ?4 E0 s9 B7 e3 c* c. n2 m BYTE nDestPos = 0;, e, b2 V+ e: H0 V$ e& _' Q: a
for (int i=0;i<MAX_INVENTORY;i++)
! o8 w" @9 p; Z0 s' m- T {$ f* U, e" E& P3 S$ q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% W3 `, m* W) s, n& j9 }
if (pItemElem): g: h# p# d g& U5 l9 {
{" u2 L( g1 Q( P, B% _7 Q
if (IsUsingItem(pItemElem))
) v( @0 I2 @/ I8 t {
& h! q3 G5 ?5 F3 f: N //这个位置无法放- `! m0 h2 h" i: Y2 O
nDestPos++;0 x; {+ o% u' o8 A* z2 Y
}$ j$ E% O7 L7 i2 ~, s& Z/ L) h
}) Z% W. ^) \4 ^* x5 R- K! N
BYTE nSrc = pInvSort->GetItemSrc(i);
$ e6 ]4 r2 D1 y, q6 e; L pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' M+ Y( {: k1 y7 c if (pItemElem)% I# W/ Z# `) x* `( c( [
{
$ l' P/ f, V2 g# T8 l if (IsUsingItem(pItemElem))( I% }1 E! |' \( [
{
& B$ w' |' K7 u' I7 n5 \; o //这个道具无法移动,跳过5 E4 [1 h' H9 E9 O4 a7 N
continue;/ w: |5 f4 R5 n4 E5 k! b0 u1 C: l
}* {9 F3 u/ l/ P' Y4 a
}else{8 w2 U8 u: I' z* Y2 p& m- r9 B
//空位置 不用动- _3 c0 v0 K# b/ ?, u; x
continue;0 ?1 J7 S: E0 r$ `- F6 q
}
& K# v8 I8 X7 c/ \1 q! X //////////////////////////////////////////////////////////////////////////' C% z1 H8 ]8 k* E5 n
//开始移动+ w2 O* L% T- O% m8 z( \2 C3 t6 k. ^
if (nSrc == nDestPos)
/ b7 Y9 H3 x0 ^) C2 g( B {
& x+ l. a$ F; f2 d //原地不动+ C& o8 r/ T& ]5 |+ b# l# T( Z- l
nDestPos++;/ i) N/ p0 v9 j( v) R d
continue;7 x( W1 f1 v. M6 [% V" j
}
X' y- R$ N6 ^+ j- N pInvSort->MoveItem(i,nDestPos);
$ ^' D9 L' d! V g_DPlay.SendMoveItem(0,nSrc,nDestPos);( ]% j+ I: A! R# B
Sleep(5);
6 H! G; O; F8 ^0 ~. T# ] //Error("移动 - %d->%d",nSrc,nDestPos);1 L: m: m/ t; O
nDestPos++;5 Z9 s: ?: f3 t2 Z
}
( {* V; I5 ^6 g. E //取第一个元素的信息% ^; K* N6 ^+ g* u
/*
. m4 F e0 B$ Z# Y/ S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- ~/ P9 O/ A+ d% J, U! A {
$ B E8 v$ `* @! {- R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, y* A' S L: Y2 a; O! i g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" s0 e0 a& |2 \) d }8 C% U4 `0 L8 j+ f9 C( Y' _
*/
; R. Z% Y# h# l7 b+ Y6 |1 d3 l0 o _ //////////////////////////////////////////////////////////////////////////
5 T- s1 s. w5 q5 Z% a. _% n8 X break;
4 z3 h% t! \8 C* j/ Z }, D9 w3 f' t( d" F r7 j3 _
} , N2 G8 e! V @) l
}! \5 R c* w; h/ f. Z' d0 v6 e: F
m_wndMenu.SetVisible(FALSE);3 y+ N% U( L7 r" N* u
0 W+ n, A) q( _+ ^; [
--------------------------------------------------------------------------------------------------------) G- `5 B8 \% |9 n% f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, K" l7 H, J4 u. A0 W# x{+ B$ e9 G2 G' `) V# B& A
BaseMouseCursor();, x4 S. E- f, u
}
2 ?. B) K/ ^9 G- K% Y9 p在其下添加:
+ @$ I3 I9 r# d; k4 r$ _) P$ Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 ?+ r" D4 L- D6 M9 J{
3 }. |# ~4 s9 S) {) Ym_wndMenu.DeleteAllMenu();) H1 O+ l& i! k: Q3 {
m_wndMenu.CreateMenu(this);
: d( e6 }3 [# j; @6 }m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ M( X7 ~2 J1 O4 h1 n
5 M+ R1 G* {, N+ l/ O! xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 i0 ~7 ^( t6 v2 _2 N* n
{+ X' ]2 `: \+ h# ^# X, I7 h, G- k& V
//P以上级别才可以删除所有道具& ?5 M6 H$ H! Z4 }2 j
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 ?3 k9 o5 @2 ~$ f9 k+ q4 M}
+ D% x4 l) l. }5 O& g# C5 S' Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 l, H8 P5 @. D, b+ m2 fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) d8 `+ a5 j1 | ], l
m_wndMenu.SetFocus();. c* u! p. K4 _) V u' w) w
} D9 L% {( X+ a' e8 q* B7 h" X
------------------------------------------------------------------------------------------------------------
: k+ l4 P4 \$ z4 J$ t& ~4 F* s2 `6 ~*************************
, P* P5 H) O4 B; j( BWndField.h文件" n% _- ~- ~; E7 Y6 B
*************************; h8 n! W3 W5 @+ c) i) T
搜索:BOOL m_bReport;9 V# g7 S# u3 |8 b
其后添加:- C* A- r% h5 ?0 A" j
CWndMenu m_wndMenu;) p3 @) j3 r& E; t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 {* d6 K/ K# A7 Y3 q* H& p其后添加:( e, C: l$ G, U5 c
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 E0 u" x. ^1 k: }1 r/ u* |
/ N! ]9 G/ C# x6 E
; `) y+ s# @/ o! n+ t* Q, Q |
|