|
|
源文件中_Interface文件夹下WndField.cpp文件
$ a A5 R2 C( a- W% t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: ]% L. }6 h5 R% z" W, A1 J; `0 l2 S$ F K
struct sItem
' A* @, \* w) [! X4 o{
+ S5 S6 ?" s2 \8 i- l; E3 _DWORD dwId;" H9 N: z+ D! l/ Y
DWORD dwKind2;% t' d% X! A) J k
DWORD dwItemId;6 [! s% x* V# A* O6 L
BYTE nIndex;/ G+ A2 B- i( U1 p; x! t8 i
sItem(){ \) k1 T* ~% \/ I
dwId = dwKind2 = dwItemId = nIndex = 0;
* |" y) k# t0 X- y}! w3 W) U7 K* t3 S2 ~' `
bool operator < (const sItem p2)% Q1 l2 j; H2 E5 R6 ^0 l, ?* r
{
2 o+ ^$ w# W+ V6 \ if (dwKind2 == p2.dwKind2)# O( n5 v# \1 R* \9 U4 {9 C
{
W) D2 R8 [! _% x T: Z return dwItemId < p2.dwItemId;) C, c& c6 {: g& D
}else{/ [5 y4 @( s2 m! S
return dwKind2 < p2.dwKind2;
6 J: V& D( K9 J3 | o7 t+ H }
. L" N- k9 g+ [, K5 a} I) U! A! ?7 f& n/ Y+ A
};
8 x# e: ]/ P# \) _class CInventorySort6 D- z8 y* D9 n: ~6 Y
{
, q! A0 I4 L, C/ J4 @; \public: m1 [. k {; h" F( i/ D1 }9 r3 R
CInventorySort()9 U3 H) J7 R2 k* d4 j; A9 o
{
- r2 `$ O i( l- c3 I; q4 C m_dwPos = 0;+ R) O# l4 c1 J
}
) W9 F( e) x! U: _~CInventorySort(){}. _: Z7 w2 ]. Q" K# O, Y
private: k+ u' g& T" s) d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( g7 J$ v" x1 g3 }: p# x5 J& O8 V
DWORD m_dwPos;- M8 W: x/ _- t0 k4 O% T: k
public:: ~- b$ d1 g+ d8 r) @8 F0 R b
void Add(BYTE nIndex)
8 a5 p6 T, S1 Y8 ?2 n4 S{! }! i3 g; j8 P5 l6 C5 I
if (m_dwPos >= MAX_INVENTORY)1 Q/ b) j- Y9 b. Z c
{
4 `6 t, A. s" W$ G5 d; ~, `( l2 q$ E return;% p" X. A6 e' i- Y- z- ^. k* Z
}
" v& h; N0 v0 D4 |" K m_Item[m_dwPos].nIndex = nIndex;7 Y8 v( K& `$ [/ C& B
m_Item[m_dwPos].dwId = m_dwPos;
4 ^0 I0 C1 Z5 o5 B8 ] m_dwPos++;
, [1 ?1 n2 N1 i% ]1 B `9 P5 R4 H1 G}4 q5 U$ P5 T7 @1 F/ x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( C, x5 E3 J+ s: U# \ {7 ?+ s{
) A2 R9 t8 a4 s% o' P; T* J4 q$ ] for (int i=0;i<MAX_INVENTORY;i++)( J& [% `7 l1 o
{
! Z6 \/ c0 g5 p( c4 L: q% f if (m_Item.dwId == dwId)$ K5 Y2 b$ p8 p
{
1 r7 z3 }4 O3 B; b return m_Item.nIndex; G2 V/ V+ R; p5 B: h% C0 G
}: y0 M8 q* d6 f3 B @1 D2 o+ V
}, f9 ]# t& Z3 x# a3 e7 v
return 255;$ \8 w% M- R) O: W
}
0 ~5 f. v3 h I9 [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& d/ r( x0 t1 w+ N" m{
6 L$ L: l' I \ R- ]2 I) L BYTE nTmp = 0;
2 X0 x0 w8 L$ h) I2 L" } bool bDest = false,bSrc = false;
( f7 B- \; d o5 Z2 z for (int i=0;i<MAX_INVENTORY;i++); g5 c) @) T ^! w6 G- u5 u4 f) X: a5 Q& _
{+ P! d l- r" a; \& L
if (dwSrcId == m_Item.dwId)
& v5 A0 p) I$ F: m8 M {+ [' D; P/ ~- W$ R/ C
//id相等 则 改变对应的dest和src
8 V2 @4 F, \9 u0 q4 I" e nTmp = m_Item.nIndex;
+ a( f4 i* P" i+ B+ U m_Item.nIndex = dest;
' [; ^+ W$ P r5 x }
- l4 V6 _: P; n& L }! d# m0 f. {' n8 p- j
//临时数据保存完毕,交换开始- ?; q$ i h5 r* _. T
for (int i=0;i<MAX_INVENTORY;i++)
4 v a0 J; _1 ? {7 \' z* M0 F/ c6 I
if (dest == m_Item.nIndex)
, r+ p- ]- l3 j. }% h5 a8 j7 i { y: L9 Y9 q/ b: |
//id相等 则 改变对应的dest和src
) _9 r3 s1 K( k1 [' [ m_Item.nIndex = nTmp;
( H" \- ]: P7 f4 Q; y0 Z) h }
8 G" {+ l! \& s! s( ?5 g8 ~2 q }4 A" s' w E; a- D' \
}' _7 t, ~ ^8 D2 ?
};
9 \: N( s0 x8 e6 ^" _: F3 h7 v9 A3 X-------------------------------------------------------------------------
6 U8 |# w5 G2 p) W# S& z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" @2 v, j8 [* x5 k" v1 M; W
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
# _3 i. K7 N0 \# A! w9 z, q紧靠其上添加:
3 r, p, s1 Y# J2 c5 c, qif( pWndBase == &m_wndMenu )
, R$ `; m# Z, a% t0 t% S: x{
# N9 y( ~, Q. {/ ~( G switch( nID )
4 Q6 P( V. }, r- x5 P& @ {( y7 R) P0 E- j, B! y
case 2:4 p! h% Z% p' w- J' q
{
( K! _, k: V; H. p! [% ?! i; `0 u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 N( n* m0 [) g5 Q' G7 Z' y& O5 s if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ `) Q! W7 i" V' Q" P H$ ^+ O
{
j' H* j6 L5 D0 p% ~0 { break;" _* E0 ]: @! _3 b4 k9 E F
}( i c- U8 s4 h/ @4 b; c( t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ M. v) d+ Y1 P: B* Y9 V& u8 Y
{
8 g4 x! v) u/ }6 R5 }) V" Y4 h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% H2 b' j! V6 w- ~+ Q+ K
if( !pItemElem )
3 F2 |! l' J' R1 x+ Q& P$ T% e continue;( k1 f$ g! e8 G
if(pItemElem->GetExtra() > 0)
3 |, y' x! Z3 [- z5 l2 v7 T& ~- a continue;
; Z3 d+ a B& m/ x7 H if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 B* _$ @; Z S" k8 n' Q4 W$ `
continue;
% I7 E4 w \" I/ r( J" N# q" `# F if( g_pPlayer->IsUsing( pItemElem ) )! E, h$ w+ \& s: i: {' u$ n
continue;
7 e( D! W6 v; r6 | if( pItemElem->IsUndestructable() == TRUE ), M, g" n4 Y1 I' D
{
0 l' P) j6 m9 } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 o. Q* ^( V6 p& K: z continue;
' S4 O D/ |) Q) Z# E: J8 @" i: a! F }
+ ]7 m1 _7 I3 i8 a- f0 N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* S* r8 y7 f% R* ]
}
# ^7 g8 q( P4 q7 V$ o break;& {2 {, a8 j5 F7 X8 |
}" x; f/ o2 [! ]6 W5 l
case 1:
1 g7 |' a; Z: n( n' f3 I' c {
6 k$ Y* E- H5 S% N //整理背包+ ^9 n0 z4 M: O$ Y# h) P2 t) f. D
//////////////////////////////////////////////////////////////////////////$ U. S. h- S4 y% p4 p( U' W3 U
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- n9 Q; w/ F- R& k% h! v$ u
//////////////////////////////////////////////////////////////////////////
: j; J' w1 p8 C2 a //////////////////////////////////////////////////////////////////////////
7 e( Q: g2 ]6 n a/ J" H CInventorySort* pInvSort = new CInventorySort;
/ k" W% @. C% F vector <sItem> vItem;
2 u: ~( K" A2 f6 T vItem.resize(MAX_INVENTORY);//初始化大小
I S2 `9 t4 \! F; z5 D% D //////////////////////////////////////////////////////////////////////////' A& V9 @3 K; z/ K' a
//填充数据, R4 `. `; q3 b s" F
for (int i=0;i<MAX_INVENTORY;i++)
t& `/ B- r8 X9 P3 Z {; _9 I% O4 _4 t# |9 o+ {# V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 Q& l+ e( f5 W. q/ a
if (!pItemElem)% |. s, s$ D, N( o4 {4 O
{
, k ?' W# F# @: v5 \7 x4 z vItem.dwKind2 = 0xffffffff;4 F, W6 Z" P0 D3 X6 E0 \2 u7 M: y
vItem.dwItemId = 0xffffffff;
V* U; `# j! [, Z" Z/ S3 _/ A N vItem.nIndex = i;3 e6 l$ N2 R4 }7 U
}else {: } J& a i3 j, y/ d- {
ItemProp* pProp = pItemElem->GetProp();
' y6 K: q* m) z7 H vItem.dwKind2 = pProp->dwItemKind2;9 P1 C) p5 Z& E4 o2 i
vItem.dwItemId = pItemElem->m_dwItemId;$ f( D, B0 p( U+ {
vItem.nIndex = i;
& x5 {, u) Y" l }: x/ p0 r5 t) l% j5 b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( \# Y. E$ ]+ i& P& Z
}
7 n: }7 D; F" Z /////////////////////////////////////////////////////////////////////////// B' o2 W' T- d/ w
sort(vItem.begin(),vItem.end());//排序
0 @* h3 z+ {, @ //////////////////////////////////////////////////////////////////////////
! M3 u2 Y3 g q //交换
( F6 g' _% U9 W! x for (size_t i=0;i<vItem.size();i++). h: s( k! Q- h1 q' p/ n/ C% e. L
{
* R* d7 N% J9 S* H: P- Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& ^5 g! g; }4 k
pInvSort->Add(vItem.nIndex);
# W8 L) u4 j3 O' l* X) q }
% o. ~( @! i# Y) Y( [( X BYTE nDestPos = 0;
# [8 K. F6 I7 `, m for (int i=0;i<MAX_INVENTORY;i++)+ M# Q5 G/ j: |8 y t( a: b
{) L; Z6 n$ F. a8 w K6 O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 I+ z$ f0 J& N/ _ if (pItemElem)# `( f, ^8 h- H
{4 R; K! M4 X9 O0 a. l
if (IsUsingItem(pItemElem))- B2 I+ a& Y9 e# s. x7 D: q, d
{ C% ^( A0 d! ?1 G( Q' N
//这个位置无法放" a2 [) N- k& e; I, d6 q
nDestPos++;' E/ V" r4 S" t$ M& M) `
}
0 a0 \! C, s6 j0 m$ ? }6 J/ q' k. S8 ~0 \1 U
BYTE nSrc = pInvSort->GetItemSrc(i);, _$ G D3 S# x+ t" m$ X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 I9 p2 c- X1 l4 Z9 v7 N6 ~. r$ r if (pItemElem)
: w( r" a9 S1 v* b) p0 I2 D9 | {
' U; m: {/ I9 ]* }8 h- K0 U if (IsUsingItem(pItemElem))1 z( q& W( Q! f" o! e- Z
{2 E0 D" T2 F* u9 S$ b
//这个道具无法移动,跳过
; X3 Q8 l5 w3 r' D( W3 { continue;
6 y- b& M% X; l% \0 [0 L }' Z( o) ~8 k. [5 M6 _
}else{
+ `- N6 u/ j: K* r //空位置 不用动
9 Q/ V) t. S( {( K! T continue;7 l5 N/ L m2 b7 x8 ?2 v
}9 D! d& L0 ]+ ?, T j' E& U
//////////////////////////////////////////////////////////////////////////& D7 F/ q* [7 T/ B
//开始移动+ \: B, \# e/ ^) S2 ~7 i
if (nSrc == nDestPos)% e4 I/ r( s0 X
{
# ~3 m, y9 S9 ~* [6 G. O( T //原地不动6 @5 u# N9 j' ^) R, C; l
nDestPos++;
5 O m" I/ T, f+ i& z continue;1 n9 U, N& g% T: a
}$ `/ x& @. @% m
pInvSort->MoveItem(i,nDestPos);
- c4 {9 { D D6 A4 R- W# a& R g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' W* ^5 L- ]3 c3 ^1 _0 {+ D Sleep(5);+ [3 F3 K7 e8 R. U+ |
//Error("移动 - %d->%d",nSrc,nDestPos);( X) s4 \+ e- ?% L
nDestPos++;
2 D7 p7 b; a/ E% | }
% _# R- j- a8 c; @- | //取第一个元素的信息
& a6 ]) U: m! z6 s9 M* u /*
7 h4 v8 H0 s; F2 w, Q. \* k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; A9 u. W/ c/ O$ A; l5 q9 X4 e: a* E. P {
. s8 Y9 j' y0 n( M( m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. [0 `+ w- q% ^, t, Z2 O/ m g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 h0 m* e8 G, P
}
) C8 l+ a1 D+ s9 M7 S3 \: P/ Z& x */
5 k+ h4 W" e8 I" F //////////////////////////////////////////////////////////////////////////
6 {0 J8 Y8 o* A+ g" E1 m break;
% d R4 c9 C, G# n( D }+ b- L9 S- q+ j4 w1 e# S
} # N4 k# \/ S' n3 @2 @( H9 B
}0 G: q& T5 R: B' G: X- |
m_wndMenu.SetVisible(FALSE);
1 H9 H2 L7 L. n$ Y% C
3 Y9 p0 |0 l2 b! o E% \* o2 u3 g--------------------------------------------------------------------------------------------------------7 v/ Y5 |) T, k/ r8 s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 O% i# n* \" W
{# L' c, j6 v1 q# T5 P9 v8 i
BaseMouseCursor();
( k* y, N9 \- y0 _}
! Z/ c5 p4 d1 }' H6 ^/ T# z% E在其下添加:- Y7 ]) I+ P0 K9 |' O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)( ^9 x. n+ P6 G- e6 a* t
{
4 R$ P' ^8 d: D9 k% X* Nm_wndMenu.DeleteAllMenu();
# d7 [3 T. y) s! Um_wndMenu.CreateMenu(this);% J U2 Z0 Q5 k& V
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" ^- ^% }! P% F) z
' C0 u5 |/ m' kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& `1 D0 X' H1 i& K3 F! K3 h
{; H4 }- G! i5 V' d0 |: i' e$ x+ [
//P以上级别才可以删除所有道具$ X' F6 I" t& n0 m% c* `1 \0 R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" V* r) w9 a$ F3 I) i+ G3 v) z
}: ? A t3 ^: ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: `' ]) W: o& p& ^9 Fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 `( z/ @! @5 x
m_wndMenu.SetFocus();# X7 j6 E3 |) V) ?5 K* C" C
}5 x- \8 r8 u5 P
------------------------------------------------------------------------------------------------------------
# e# O3 c7 ~3 K8 l- M# }- B*************************
! F2 ^; z0 t9 n% ^0 z' s- EWndField.h文件
: o P9 }3 ^7 D" d*************************5 V7 Y/ c. \% ~# E; F
搜索:BOOL m_bReport;
$ M# p2 \# s$ e其后添加:$ g3 R2 n. A( _! ?. \- d
CWndMenu m_wndMenu;# Y/ m! |6 I. I" \
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 R9 y. k% _8 O. e. a1 f ~0 x' O其后添加:
, D) p. B) }& `: K2 mvirtual void OnRButtonUp(UINT nFlags, CPoint point);, P4 ^ b$ d6 d* |, @
8 _" `) i$ J" ^0 w5 J
8 U0 R0 ^& t5 {; n2 s1 D' ] |
|