|
|
源文件中_Interface文件夹下WndField.cpp文件/ P- K8 e! N ~6 O/ t
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# R5 d& `$ T$ A$ M2 P
( @+ C- q" `6 N( W3 o( mstruct sItem0 D5 b, U% _' H; w
{
5 n% I6 r$ A2 w7 [/ u' sDWORD dwId;) _! Q' F9 n: n G; L: k: |
DWORD dwKind2;
. N- E! U- f& J3 ^) Z% [' T. PDWORD dwItemId;
i1 e$ W7 d; q3 P7 [" R8 t5 tBYTE nIndex;
! x$ n) w0 X: w& JsItem(){9 X3 m' v! q) r% E# R* b
dwId = dwKind2 = dwItemId = nIndex = 0;
8 v2 d7 w2 `/ k( T; Z( a) `8 |/ o}" k! W! X. G; o) @( c
bool operator < (const sItem p2)# {2 M& G+ l7 k0 W
{+ {5 ]3 [; V; N2 \( J; g7 L+ v
if (dwKind2 == p2.dwKind2)
$ ]# k5 e$ U! w$ U9 O {
, ?! @& G5 u1 k/ R return dwItemId < p2.dwItemId;4 M# l$ w, l: ~2 i& v. N. K" h
}else{, C5 _/ ^. p8 F4 _- f8 a, o
return dwKind2 < p2.dwKind2;6 }9 |$ n$ G2 _6 G" f4 e
}
( \2 J* V; S2 @5 p4 B _( D$ j}/ ?3 r* Z$ B9 [: b: U3 _
};2 ~4 F4 D* P1 m! D% l7 K
class CInventorySort
4 Y7 w& t- M) }( P' A- s$ B! E: h{
9 u* Q% w W3 e B6 ?1 n: upublic:) U$ m% e, F1 {; d
CInventorySort()
a5 ]+ X% w6 \% ]- h4 i{
9 N2 X, N- c$ ~9 N/ i! O9 C/ F2 _ m_dwPos = 0;
- Z/ y8 L. N7 I. X( h}
) i" |# Z0 |+ S! u/ C" p5 E. d~CInventorySort(){}
6 N) J/ m) m2 q5 X$ ]5 q9 yprivate:- J8 D8 b& j- F: x7 P, H
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. m5 g6 h5 g5 p* QDWORD m_dwPos;
1 B9 _4 ^' L0 i/ u+ u" l }/ cpublic:% }- y) X8 G5 f1 L: O- M
void Add(BYTE nIndex)
( q; O% b- Z" u1 z- b{
( Y& T; e, ?$ O$ X% k4 e if (m_dwPos >= MAX_INVENTORY)
. y/ W5 {- M# G2 x2 B {
3 m8 _9 b$ S8 g8 S& M! Y6 t8 D return;
9 c# G3 u7 k9 L4 B }( r5 d8 W% b% g7 Z: |0 ]
m_Item[m_dwPos].nIndex = nIndex;
# _! b/ x. r% b8 P/ l m_Item[m_dwPos].dwId = m_dwPos;
- m: d4 V1 n- n# I. L m_dwPos++;% q; N& ~$ t9 a2 U* T' u2 u
}" b8 R9 s) F5 v' V4 `
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 Q/ d/ r3 Q8 @7 p h! Y! d{
. e( i0 l2 K; n+ g( f for (int i=0;i<MAX_INVENTORY;i++)( F0 c7 Q# K/ A9 J' }7 h* ~9 a8 @
{
) _+ D+ @, V1 v9 Z+ } V& o% | if (m_Item.dwId == dwId)! W; w8 s, E4 X7 p$ m1 p p* Z$ j
{
3 s; K+ g3 J# o0 z return m_Item.nIndex;( V6 q2 E' h/ S0 c# u# k( J& T5 y& \
}
) J7 K% z! z. J0 M6 j9 k# U+ z }- k5 E/ ^) Y( C& A. h
return 255;3 ]" ^4 r t/ D/ e4 I' ?& f) m
}
! A3 n# m" U( dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 Z4 }& R( o! t$ V8 I{
* O* N {. C% [% `5 P5 [ BYTE nTmp = 0;2 {- [* l* |" e
bool bDest = false,bSrc = false;" M+ a4 w/ a) n# I2 P- z
for (int i=0;i<MAX_INVENTORY;i++)
4 H8 o( ^' C+ A S6 N6 p! A {
) b h6 h k2 ^ if (dwSrcId == m_Item.dwId)
+ R$ ~) N- V1 Y5 ]5 F {
* d$ n' v+ w' d3 X% v0 d+ H //id相等 则 改变对应的dest和src
9 `; D- N8 @2 e+ Z nTmp = m_Item.nIndex;
" [2 F6 O' L, S; O& l& j m_Item.nIndex = dest;- w8 |2 N6 Z6 ~, J/ w
}: t& |, a6 C/ I6 b1 x! s1 j/ h
}' |3 n; Q( p1 V
//临时数据保存完毕,交换开始+ l' M6 Y) a8 P
for (int i=0;i<MAX_INVENTORY;i++)0 E5 g4 i( x f' s4 I
{
0 X" W8 H8 g' O if (dest == m_Item.nIndex)
9 n# K8 J# A' {5 c5 @+ W; x! G {3 I3 O) o% K4 E
//id相等 则 改变对应的dest和src7 p, q9 ?% ^4 h8 n! ~1 P$ V
m_Item.nIndex = nTmp;
# Y1 A8 ]) r. H# d# ~ }
, H1 @5 U& I% p }4 j9 H5 y$ t! l- w
}6 T! E: W! y: Y7 z7 v' t
};3 Y e, ]! I% ^
-------------------------------------------------------------------------
( s8 T6 o$ n* u, E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 G" }+ `' b7 W4 T, f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 H9 n2 N3 x( x紧靠其上添加:, |1 c# \6 d1 D; [# L
if( pWndBase == &m_wndMenu )- u! N0 O, x) g
{, [' G- _2 S8 [, y
switch( nID )* b# K: _/ T6 I& q
{
/ R7 y- Y j! ]- F: _2 h case 2:$ m. ?4 L- f0 m5 _3 f
{5 H! z3 E4 j+ Y6 B+ E0 M
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, _% D2 l9 r+ A. }- [/ u. b) ~' l1 `$ W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ]/ L* p& T+ M% A2 f/ X9 U' ?3 Y
{- z2 I- ?- V. F2 u1 v0 F/ n! l$ c
break;: ?0 G1 |+ v8 X6 X. ~& e( L' u9 c
}6 U }* I# d& ~. S- ^9 ?
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ k. y' Z- ]7 F {% J4 w! s6 g; h4 q, y2 _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ ]) }* ^' Z: ^# C* K+ e
if( !pItemElem ): _9 b3 p d& o2 I0 h
continue;
" P3 F# W+ M A2 f if(pItemElem->GetExtra() > 0)
$ M! T% L" W6 Q; v) ~/ ^' e continue;
4 V* |) \+ b+ f! Z- I0 ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' w5 [ M# o' Q! x/ Q C continue;( o# W* y/ d% J1 Y
if( g_pPlayer->IsUsing( pItemElem ) ). |9 y& F" l3 T- s* [& f
continue;
0 w" S- z1 P0 Q1 N2 t if( pItemElem->IsUndestructable() == TRUE )
" j8 W3 Z- a* T; t% j9 @ {
) w* t# O, d* |8 }9 Q7 `8 Y7 K g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) t0 @5 |. l9 i [* m
continue;
: J$ e' l% c' Y) [ }
: c0 Z' ]. k4 o+ f f/ T3 A g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 [# x. y& J$ J6 [ }: ~! ?; |: Q! p; f7 }
break;
8 {+ v3 x A# q* W' [* D9 n# n/ b }
0 X: y( E" _( U- C$ u: L; I case 1:+ P/ v. ~ r1 d4 w. m8 R* H0 W% `2 q; P
{
" B" X& Z+ z' i$ a5 g9 V0 r //整理背包+ p) Y5 Y5 J0 I6 d! Y4 n
//////////////////////////////////////////////////////////////////////////' z* a' F- t$ F$ \1 P% ^
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 J6 e4 |7 u; c% G
//////////////////////////////////////////////////////////////////////////
8 @$ y* {. M9 Y; \+ L ////////////////////////////////////////////////////////////////////////// [ T; f5 r& R. l6 D; C) p
CInventorySort* pInvSort = new CInventorySort;4 \" {% T$ U5 C/ {( l
vector <sItem> vItem;
. C, D( n0 F- c: p# R vItem.resize(MAX_INVENTORY);//初始化大小% A7 g6 Z+ s/ z
//////////////////////////////////////////////////////////////////////////
$ Z F0 O- q7 g( z0 v9 s: a //填充数据
4 _( R' [! T- J+ |( V* N4 E for (int i=0;i<MAX_INVENTORY;i++)
8 l4 T: ?3 v" c* U; o( @1 ^ p {
! ]8 Y/ \% k6 ]) ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 P4 x& T5 [( _, Z0 |+ J# ? if (!pItemElem)
6 u( V+ n& t( e: b! a* z; h" f {( o2 B M& J6 y5 f
vItem.dwKind2 = 0xffffffff;" U' z/ q9 r) k: m ~6 S7 r
vItem.dwItemId = 0xffffffff;
& a: O9 U0 w; ]; a vItem.nIndex = i;$ _) b6 ? |9 G
}else {9 C* }9 @3 f+ y
ItemProp* pProp = pItemElem->GetProp();; }1 W# `" s" Y# c+ a9 B! X
vItem.dwKind2 = pProp->dwItemKind2;
$ T' i- M% i2 L ]" L `: \ vItem.dwItemId = pItemElem->m_dwItemId;
$ t- {2 H3 h4 s% S# i h y vItem.nIndex = i; C) d: {- b/ P5 L
}* j' Z9 _" ]) E) ^2 K/ o) x
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# @' X1 o4 Z/ l0 I
}2 L+ A7 k6 M; g9 Y% ~* s6 K
//////////////////////////////////////////////////////////////////////////
' J% i9 e7 }# s sort(vItem.begin(),vItem.end());//排序
) Z' ^+ x8 L2 C/ C* i- U0 h //////////////////////////////////////////////////////////////////////////9 `) N! E6 Y3 B( r) a( w L6 Y+ t
//交换# l5 q5 T( r8 F+ Z
for (size_t i=0;i<vItem.size();i++)$ @# E4 M5 {; o e" ^
{. R0 p+ ]8 L- j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 e# J+ u1 y% w" m' ]6 a' m
pInvSort->Add(vItem.nIndex);& s' m! a! K, C) z$ Y9 ~
}/ }6 p- r3 v1 z3 V
BYTE nDestPos = 0;. _; N) ~- o# A* d' W8 g3 X
for (int i=0;i<MAX_INVENTORY;i++): T m1 b: N j: D
{, b) ~' ^- E9 v4 R2 q E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& y( p( d8 L+ v2 n1 t- f
if (pItemElem)
0 L8 A% i7 Y% R$ S' ^! x( h {
1 H# W; Q" U0 P' A' R% S$ e if (IsUsingItem(pItemElem))$ Y. K1 u# p7 W" v, x' [, A# p# |
{
5 y( m) t6 A" C8 i: } //这个位置无法放
' h6 A8 E2 `; q/ k, m6 _( D nDestPos++;
5 r8 c2 {6 c& I& s4 v. } }
4 l1 o- p9 E2 C' C% A' v' B }1 D- V( _* h( v$ H3 D
BYTE nSrc = pInvSort->GetItemSrc(i);. X- U* p, c3 c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& @0 x( X+ H# V, U6 m. \ _: f/ v if (pItemElem)) ?1 W7 o$ G7 M
{( L+ n2 U! o+ ? Y& S4 r) B
if (IsUsingItem(pItemElem))2 x1 `- X$ }, f1 L2 Q/ E
{
/ b" _& `9 I" A$ B; J: j4 l* b/ s //这个道具无法移动,跳过
$ c g' [- v! E9 y& d continue;, T9 ^! q+ C4 ?( _7 ], V6 |( R
}, m: H: C! l; z/ S
}else{4 Q6 Y* Y7 d, R, D1 `+ [$ W
//空位置 不用动5 C+ @/ N- O0 y1 }$ r
continue;8 Q* H, |7 Y( i; ?
}1 p; X3 @) L7 ?! S5 W, D
//////////////////////////////////////////////////////////////////////////
8 O7 d' Y6 y0 ^8 z //开始移动
. s0 [! G# |; B, z9 E# m4 r if (nSrc == nDestPos)2 Q8 I9 ] h! J) ?( n
{4 @8 f m( n9 F7 S7 Y
//原地不动; A, s* @% f; V
nDestPos++;7 T9 g) \+ P G! F
continue;
0 |% g4 ?/ k+ i; s }
; q2 j6 r/ B$ V( t) m+ D( a2 B pInvSort->MoveItem(i,nDestPos);
) h# ^( z3 \' y+ u g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 r2 x- ~* @' }+ {0 w2 d Sleep(5);/ R/ u6 o2 I7 C, Y$ Q; b
//Error("移动 - %d->%d",nSrc,nDestPos);
6 T5 G0 ^2 {7 W+ x2 W& I" G1 o/ U nDestPos++;# r& o0 a5 _, J/ ]; z% B( A
}$ A& f# r! a* T
//取第一个元素的信息% _. R- M x8 W2 ]0 W1 Q/ T+ H
/*! T% F1 r7 o O8 k% z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* Q- S! f2 I' |" v {) L/ F. T4 @+ f' a" v& U
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 W0 a5 R! ]2 V/ C- z! k; w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
5 O. x4 M" Q- |& f+ ]! g* b7 \ }
1 o! F) Y, K7 F' y. I */ v: c: I% k) c J) g
//////////////////////////////////////////////////////////////////////////
- B* a* ~( D0 e0 o b1 D [- b: O break;
$ p/ ~& {0 L/ P2 m }
# Q- q2 m% {& s/ a- y# e }
. T8 U' V# a. {, W5 d}
x2 _' ?7 c3 T- s& a+ q" pm_wndMenu.SetVisible(FALSE);
% L+ \- \$ Q: o) V. f6 r. N
( \. \5 v3 F! l/ d" ?--------------------------------------------------------------------------------------------------------
: F) a7 R: D& l( V9 R# j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); D$ t6 J8 I' L
{
; d" l0 Q n: q! l* VBaseMouseCursor();6 U7 [! |4 x: N- n; g
}( p0 \- d& o( ?2 r# G
在其下添加:
4 ?: G4 I; n7 z% W) Z* X5 J+ ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
) ?% o( b4 d# s{' i8 `% C) o* {
m_wndMenu.DeleteAllMenu();
7 b0 y: f+ ]$ K& A" x5 P2 Xm_wndMenu.CreateMenu(this);. h1 c q' V1 c: _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 I: k4 i' k5 O; _- o5 B
3 l( S' ]7 G$ tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ O% J# i" o' y! u" c' |% o, ^
{& f( j) z9 {/ a! k. U/ s
//P以上级别才可以删除所有道具4 [" A# B9 _ G$ h2 w3 p+ H( `* B: ^/ N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; u6 a8 E# b! \* |7 a}' b! O3 Z& a" h0 j5 V% q/ y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 K( F z1 m+ D" z5 Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& J+ j1 F' |" a- o7 M; J( fm_wndMenu.SetFocus();- l: S9 g- @( A0 O3 t, ^4 w
}
4 V; d# R, a1 S# \* |2 Z------------------------------------------------------------------------------------------------------------
& A$ N9 v/ A: r0 H$ s. u( T& z*************************
/ v4 n0 y2 w! Z0 p2 t7 FWndField.h文件- C% s, E+ Y @' u5 P
*************************
/ a% Z& [- c$ p/ t5 i搜索:BOOL m_bReport;/ J- j2 O, f1 G# u4 Q4 [
其后添加:
. [9 p. J. p% g' v( nCWndMenu m_wndMenu; a5 d0 I& u8 K2 r; v' i, t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# `2 V' u: a+ P3 z9 s
其后添加:4 I3 q$ m( m4 P. U
virtual void OnRButtonUp(UINT nFlags, CPoint point);# Y8 z9 s( B, V3 H: ?( r% f) X
+ S: |5 J- j. x4 t7 H5 h3 E! R, C* N: U, ]2 t1 J
|
|