|
|
源文件中_Interface文件夹下WndField.cpp文件: T2 B0 b7 {9 b* o
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& T% }& e9 x: o( H& J
* T# h% Q ^- d* q# f
struct sItem5 E9 `/ @' t' N1 a7 ^
{5 b( O. m% n! N) l5 J
DWORD dwId;
1 F" N, e2 _ ?) LDWORD dwKind2;
. a' _/ M& w( x1 {* b) gDWORD dwItemId;
5 @, H' B8 d0 ?, ]! V$ K1 aBYTE nIndex;& p; U0 o$ Z9 F- c6 ~& f& E
sItem(){
- t3 N# z3 Q l5 c0 I1 Q( j dwId = dwKind2 = dwItemId = nIndex = 0;# [/ K# h( t \, `% s
}
% w8 t/ M5 K+ S$ d, h$ |' Lbool operator < (const sItem p2)
9 K0 s" m, Y& X$ X, R! J{
6 \* a7 d9 r2 D1 d9 Z5 q! A3 k if (dwKind2 == p2.dwKind2)' o' L W4 r4 K* V2 }3 p
{
* M* O' s* Y7 |) |: t2 q! `( @ return dwItemId < p2.dwItemId;
. |6 n/ j @( R& w& @% x. Q }else{
: {. w5 ]+ m8 H8 F( D6 ], t return dwKind2 < p2.dwKind2;% B: l* Y- Y' ]% `$ {$ {
}6 Y9 b! m1 W$ Z+ v3 e4 [% H D' e
}8 M# i4 {' F" u8 J' h
};, M( W5 }+ j9 J) ?
class CInventorySort
7 u0 ~$ @5 \& w5 b{3 b& }1 `8 u" m7 t( O' Y& ]
public:
" U& ?/ i- b7 _; P, w" y* q. RCInventorySort()/ [6 @) `5 G. a0 B( j
{
- Y* H9 I- W6 z. }* }8 H' B m_dwPos = 0;
4 C' _5 I, Q. S5 g% Z} f5 Y4 _' N# V0 L
~CInventorySort(){}
6 n$ b$ w8 C: b6 r% y$ O: kprivate:/ `8 o. E. i7 L: q( t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 y; b6 P4 Y' e. KDWORD m_dwPos;
' M& A# ~ j1 E% z: F) d2 xpublic:3 {1 a( D' f0 W
void Add(BYTE nIndex)
7 f$ }: u$ Q X! W# A6 u# F/ h{3 d/ H6 s5 U! G: y: ]! ^! M6 F
if (m_dwPos >= MAX_INVENTORY), h6 R. E* z5 S& _) ?7 ~6 K/ ~' h
{
2 D. [' [. ~" g% j return;
) J; S- W0 j0 M" X) P }" _0 w9 G ^3 }) w1 |8 z& M1 s
m_Item[m_dwPos].nIndex = nIndex;
' y0 H/ Q( O, C j3 ~' F m_Item[m_dwPos].dwId = m_dwPos;7 m! j- ?6 }' M
m_dwPos++;
/ l7 x5 U/ u1 H) \, R( O}) S' c3 j5 x4 J- l, i6 R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 d! q( w- {; a0 N+ @, v
{' R$ Y A) N8 z3 k% s+ l4 [
for (int i=0;i<MAX_INVENTORY;i++) I! Z. w" [- P% \
{
7 l: A- b& E' a% y if (m_Item.dwId == dwId)
& z! n' P+ C! i {9 i% E* s; I& K3 ?
return m_Item.nIndex;! O' ^! U9 b2 z+ W7 j) O7 L
}
0 ?0 s- F' O- E, t }
- m" o" ]9 f' E" B0 a return 255;, h x* g3 C. @% w. g
}
: O* N) B" o# V kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 h9 T- g0 F* M$ F" n s& X) a* f. Q{
3 P2 B8 T: b* R) R, D& D9 N BYTE nTmp = 0;) I, |7 S7 l4 p1 L
bool bDest = false,bSrc = false;- }- s$ h6 n. V8 Q0 @' y' a, n
for (int i=0;i<MAX_INVENTORY;i++)
2 `" k) i# x6 ^ {
4 B1 x6 K+ B S1 P/ h% T4 g if (dwSrcId == m_Item.dwId)
: H9 E4 b' Q. t; H {$ w6 A: f& o K" {2 l& D3 H+ j
//id相等 则 改变对应的dest和src! m& M& t# p" F2 T8 j# W! C
nTmp = m_Item.nIndex;8 N# d. c% K' T6 m* ]5 P* P( j' F
m_Item.nIndex = dest;
/ k! ]5 [5 i* e- x L9 y }
4 p! i" Y4 ~3 n% q; k9 O x' y( Y }2 o/ \4 L/ Y/ q
//临时数据保存完毕,交换开始
1 F9 V7 j' A/ a. `+ l" y L for (int i=0;i<MAX_INVENTORY;i++)# v+ d* w7 R1 V! r6 y
{# ^; _7 z/ v% n1 v5 C7 ]3 n; O
if (dest == m_Item.nIndex)" h" w0 `+ |& u( G3 z/ T9 b
{/ t& v# n& M6 ^( n5 B+ E! ]3 T2 \ l
//id相等 则 改变对应的dest和src" m; X; ?" @8 r5 _$ Z
m_Item.nIndex = nTmp;
) O) n' h; b t [ @ }% n; e* c) B& E y! e( o: C
}
( d6 U% T3 d, ]: X" ^/ @% S1 h6 w}% ~# i2 i+ {) |# F' Y3 `+ C
};
\ W l; f$ d1 t-------------------------------------------------------------------------
) Q) ?2 e: r4 |+ F6 }. {' e* k8 ^依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! z$ s- t" V; b. @* o- d2 F# K搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# Q/ m1 L3 ^' D* I: m9 l; X3 K+ |% }& ^
紧靠其上添加:
: A3 P' w7 \: ]) Hif( pWndBase == &m_wndMenu )
# _; H' U7 F- a4 e1 b$ m$ X( C3 N{
& O) D9 a2 `3 M7 p, R0 i& P8 E switch( nID )
. f* x0 n' Y: L/ T" v {! L3 `2 D1 y0 \7 s' y' I3 Z
case 2:0 H8 T3 t8 b+ n
{1 z4 X0 _. l" y2 r6 B
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ V9 o8 T) [8 z- N$ L" X: s
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- Z {7 J. N7 O0 f% P1 ^7 H
{
2 ^# G/ _( x8 L. b+ f' I7 j) A break;0 k( V% U' X0 U' x3 @, n/ B
}
! }! n9 N, g. ?4 u& j1 a( ` for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! N4 G( t% a6 J# O, u {, M4 J/ c' F( M1 O1 k" {7 P8 p
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* u# ?6 e6 S1 L# b) s1 m: i
if( !pItemElem )' e5 Z8 ^& O) ]$ w0 ^8 D
continue;% T" J9 E7 ^; C; l* p
if(pItemElem->GetExtra() > 0)
" i; M1 V* }# M continue;
, C* V$ B3 s9 V( E& M9 O( B3 c1 @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 w: j( M! D# R4 }$ d$ P continue;
4 k6 h) Y6 @ Q if( g_pPlayer->IsUsing( pItemElem ) )
9 M5 ?0 b( O f! {0 v continue;6 ?. t d/ x8 l2 Z
if( pItemElem->IsUndestructable() == TRUE )
3 e2 O6 u) F* i* @- m5 v; d) l {7 p2 H2 j2 v/ U! |/ D: I
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. N1 b6 r- c# j6 d4 Y: Y continue;; T2 w5 d$ O1 F) {. {1 x
}2 ?/ b& @8 t0 X8 A- Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 p# |& | u& B$ z: k
}- [! x8 V3 E3 Y/ F9 O6 K3 b: K
break;; H: e0 x( _% \& D% Z
}3 x" n$ q2 |7 `& L8 {6 h
case 1:
4 s$ Z" m% B- L7 Q2 m/ a5 e {
4 L' j3 t/ j2 e0 H5 }$ \+ q! V //整理背包. {) ?2 K0 V+ d2 }
//////////////////////////////////////////////////////////////////////////
% a" Q: \! [. x$ Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 F) M2 d8 K3 F7 B4 m1 g0 h) \ //////////////////////////////////////////////////////////////////////////1 E0 V! K! w2 w4 e( w
//////////////////////////////////////////////////////////////////////////' m) H) n5 o7 E! i( N' `
CInventorySort* pInvSort = new CInventorySort;& Y, k& a$ K8 G& a6 [
vector <sItem> vItem;
Q0 w( t8 H0 q9 a3 r% c( l7 q vItem.resize(MAX_INVENTORY);//初始化大小
+ `/ K7 e U; j! ~6 ` //////////////////////////////////////////////////////////////////////////
! ~5 p' Y, L" c( f //填充数据
& m8 _7 l, L2 Q$ I; `5 {- e) F for (int i=0;i<MAX_INVENTORY;i++)
& |4 } B/ r7 y; O( m {
+ [3 d M, \( m+ O H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; m8 c- U5 d# F J ^ if (!pItemElem)
& o* E# L5 ^* ^: ]0 b b {6 S6 C9 M; T& D4 g% i$ r2 c
vItem.dwKind2 = 0xffffffff;
* L3 z$ k u$ s& v+ P# D; A1 _ d | vItem.dwItemId = 0xffffffff; F% \7 i! _' f; U* f/ f2 M" Q
vItem.nIndex = i;5 y2 n! `' N( A& j& s
}else {, `; Y) U0 [0 w( P3 a( Y
ItemProp* pProp = pItemElem->GetProp();
) a. e9 j: G- a b1 L( ^, L3 _ vItem.dwKind2 = pProp->dwItemKind2;4 e5 Q$ T, N1 o0 o8 [! E$ A; }9 P
vItem.dwItemId = pItemElem->m_dwItemId; ?) m/ n7 H0 o$ ]6 Y( {
vItem.nIndex = i;
: L# ]. h' T# e- G$ {$ ?, W }# U' _7 R: ]3 V4 i$ b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! M- B. E/ R1 f }
) U; q2 h8 H! m6 K* C //////////////////////////////////////////////////////////////////////////2 e/ _; |/ L, W6 ~
sort(vItem.begin(),vItem.end());//排序) |% S1 [& M) |, ?
//////////////////////////////////////////////////////////////////////////1 G3 c0 p- G6 R
//交换* s) Q4 B# q# r$ O1 W4 v* z
for (size_t i=0;i<vItem.size();i++)
2 _7 U! B N# x {
) `0 x* O# l0 @" s! X+ r( U //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- Y9 z" L! Z5 E; R. ?2 J pInvSort->Add(vItem.nIndex);5 x: ~' Z" X) }, q* h9 g* ^
}( ?; g2 F2 a8 c g
BYTE nDestPos = 0;0 w2 N. i7 h7 N* F* _4 P; n
for (int i=0;i<MAX_INVENTORY;i++)
0 ^- X* O, k* _. _ {
0 i4 h" B5 G$ i2 v7 o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, C( q7 p+ ?5 B, x$ z2 [1 i1 r" I
if (pItemElem)" K- E |. ?% V! M# F. r
{
0 t6 y) B- \; s, g/ p% O, Z if (IsUsingItem(pItemElem)), e8 u U1 h/ r* e. U. {; O# \
{ I2 | E9 e% F8 q9 |; u
//这个位置无法放
# j+ M. @% C0 X- G, h0 [ nDestPos++;; X. ~, V6 R% y0 R3 ?: V
}
* C5 Q# a* b. b }+ y/ ]( z' K$ M& j. s7 w/ m8 T
BYTE nSrc = pInvSort->GetItemSrc(i);1 {: D5 d7 ]8 k z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 k& v4 y _0 i- U3 h' j6 X
if (pItemElem)
5 k- I, s# z. O+ |" B {$ [: u! d) s, L9 }! H
if (IsUsingItem(pItemElem))
: n1 I( ?0 E% \1 T' s% g {
" [* U& `- ]0 |2 a% Z& [- S //这个道具无法移动,跳过! B. _+ q2 M v" P' a2 Z
continue;
. w. K" M, N" O" o1 M, H3 @) o/ j }
$ T/ |7 h) ~$ x2 _! |, \ }else{
/ u2 P& Q9 ]# H- q //空位置 不用动
1 Z/ L8 o G. M continue;: y3 {: x8 ~% @0 E0 g/ ]! ]
}3 G8 m) m) n* N6 k7 V& a
//////////////////////////////////////////////////////////////////////////5 m1 |1 j7 m7 r2 P" _' y6 V
//开始移动
: q# V' W7 P/ \( ^+ P- G/ |3 l2 H if (nSrc == nDestPos)' c+ I% z$ u3 w% o2 j/ s
{$ \. C* w' R, b, `4 F. x
//原地不动
7 U0 e5 f2 c7 H" `8 J nDestPos++;0 q# n( r( d8 Q+ D: ?2 D: T* b
continue;5 w% R1 i- W3 v. q1 H
}: @6 L/ Z8 H7 q C0 M
pInvSort->MoveItem(i,nDestPos);1 u0 p' {7 [4 d+ D' l1 h5 E- D. Y
g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 p' B7 u+ F) Q( ~- J [
Sleep(5);
# e z. \7 S+ I //Error("移动 - %d->%d",nSrc,nDestPos);" | F8 p0 T$ [% F4 J
nDestPos++;( a& H# ^$ z% R( x8 F
}6 J# j& z) \) R) o0 z( c1 k+ p
//取第一个元素的信息
: y/ j" a# O- D /*: s3 z$ m: i/ y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ W y8 l4 M! p" T) r% x6 M+ i
{
7 e, x7 I" [! E1 |9 G5 r/ S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
/ B3 H# R. h' S g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" n" b6 \/ T) q" {# m. V
}
/ Z/ E* K# w; Q) F: Y */
8 z( O9 C# Y+ _& S { h' K //////////////////////////////////////////////////////////////////////////
9 o/ `, G* X7 v- }# G5 Y; l3 T break;
6 y. P( S/ ~4 M# G8 j' L8 @ }! D4 W& Z. j) s
}
6 {8 a' M! I$ g: M4 d* v2 @" u}( E, ^- V* l* }; a4 X8 S
m_wndMenu.SetVisible(FALSE);; Y4 |0 T4 d* ]1 x* K ^
* @7 ]2 ~8 ]( R2 M
--------------------------------------------------------------------------------------------------------! H" [( j5 \' ?# L" s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 U2 n% u" p2 e( u
{7 U. E- ]* v7 o
BaseMouseCursor();
( @% l1 g- `0 l}
" P' y9 R: @. K在其下添加: N; n- ^4 [: i# x
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 O$ m# e% B8 V- V3 c4 u
{ H& W k. V' a; e4 t
m_wndMenu.DeleteAllMenu();
h, e$ a% _5 N/ r' \m_wndMenu.CreateMenu(this);) Q7 C( h9 z; I: y4 X, U/ A# x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ `9 S" D+ N1 H; c; C
. s# w6 l6 ^/ Q ~# n
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 J) D) D. f) _- z) i{5 w1 @- d; L* l. _! e7 f
//P以上级别才可以删除所有道具
4 s/ Y- ?. ^6 `- z1 Z& v8 S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; P. A. _; c" `4 J2 {! X" o/ @
}
! r5 k/ X5 u- ^ Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ V3 Q) k6 y3 ? B3 K; r2 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" ]3 B! K9 h1 }" km_wndMenu.SetFocus();# G3 b+ \6 n z
}" E U! {0 [6 {: |9 Y9 `; v& o2 ^
------------------------------------------------------------------------------------------------------------
& P+ [9 B8 g3 l. J9 _ r*************************! _; R* V5 |/ f
WndField.h文件! z2 K: p# ]3 a$ K) q
*************************
8 |7 c5 Q" e6 y6 b搜索:BOOL m_bReport;
" E8 l! x" \) `# Q4 y. i! S其后添加:
. @9 M. L! ?/ Q- e& @0 {CWndMenu m_wndMenu;
9 p/ o4 H; E5 m6 H; S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* [4 p% i; G1 K6 \其后添加:$ l2 B4 `$ M4 W- k" p4 Y& m
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 i7 n, Y1 o8 P
9 X H: p) y# O& y
- L0 B( w1 u/ d |
|