|
|
源文件中_Interface文件夹下WndField.cpp文件; F( Z0 Z6 V$ t! ^7 f0 t" |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! ]6 F/ l7 o* ~5 ]' ?* ?# ^) v7 A" w5 t! E* C9 C( E1 x
struct sItem) W7 F* ^# X# z9 x( u( z* Q7 H
{6 V1 Q. C" `+ e3 P# S, i5 A
DWORD dwId;2 C* v9 k' o1 C0 [7 m
DWORD dwKind2;
7 W# U2 r% V' s: L8 [DWORD dwItemId;0 N5 m' H T9 ]8 ]: X. J( J
BYTE nIndex;
B0 h% }9 B# T7 t3 H. g- usItem(){
4 R1 J8 j+ j6 n) `; Z6 `! Q dwId = dwKind2 = dwItemId = nIndex = 0;* x0 r) t% @9 ?6 G1 y0 [/ K
}3 d G1 z W6 h% _( i. P
bool operator < (const sItem p2) v4 A, K. y4 v/ O: Q. w
{
/ w; t; ^* @1 U/ I if (dwKind2 == p2.dwKind2)! i! w+ t, M( H' ?) w6 U; R
{
6 r3 m: a+ s# T1 D& n return dwItemId < p2.dwItemId;
* @- k) T1 q# z3 a }else{& P, |. [# d t
return dwKind2 < p2.dwKind2;4 Z, P- k9 W& B1 m O6 i2 s
}
$ o5 u) U( C* i}& h2 C+ U2 ]2 ] j
};
`& R+ r2 @$ Gclass CInventorySort2 K7 o3 D9 e" d% J0 y4 P4 R
{/ L0 j/ a6 k* W+ @% m A: } N
public:
4 T) G" D* u' o) ^) |CInventorySort()
$ n, i. e3 z( b3 F{
4 G6 V& H$ i# |2 z8 t# P' y1 K m_dwPos = 0;
8 g1 R3 X0 {: f% n6 H}- r! {+ q* y, K( ? O
~CInventorySort(){}
+ d5 [ b4 y, |6 Lprivate:6 S" l q" H- I0 e# H! |* N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 h% v$ p: o; S% \ s0 B2 t# m
DWORD m_dwPos;
# e, K% q8 D/ ?; u2 Apublic:4 U {% |4 M0 u P0 ]3 ?0 v4 Z
void Add(BYTE nIndex)8 z3 @) l$ w+ K0 u' z& F, P7 @3 W
{
9 h+ g! N9 j, `" j( n if (m_dwPos >= MAX_INVENTORY)
" q0 _8 W( [1 `' M {6 D5 B, t6 E* X6 P
return;" j, E7 {7 ?7 h3 c
}, x" m0 a# y. O$ m# m) u% {5 _' j
m_Item[m_dwPos].nIndex = nIndex;
+ v$ D: w* p+ v m_Item[m_dwPos].dwId = m_dwPos;! u. ]: |: {1 R/ A( T
m_dwPos++;
% x! I& J' l$ l* [- T( T: j0 h6 B1 A}
- i% U {% i1 w5 {% x8 p, G, {4 QBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. ]4 V+ I6 [7 f7 G9 c* |! a6 m{
2 b4 _# K3 M8 y" f3 @8 ~$ S for (int i=0;i<MAX_INVENTORY;i++)
' {+ j, H& l% e {/ i, T/ U& w# F* ]
if (m_Item.dwId == dwId)
, b! j) ]2 B3 o$ ^2 R- y {( _7 Z# I& M7 [( e* P& s/ P
return m_Item.nIndex;
2 ]- d" ?0 e6 ~ }* C3 l3 ^% H/ R- |
}
1 Z4 H0 \0 `) b# x0 O5 e* H, X return 255;5 N% \1 P1 F: s, D; o4 @# P! M' z
}8 E# X( i% S8 j6 T% A. a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
& F, a5 a6 W- L0 B3 V3 U# e }/ k; b{
) Y: T4 Z& h$ k BYTE nTmp = 0;4 ~/ ]5 o* `/ y ~2 _; \/ k
bool bDest = false,bSrc = false;/ _5 ?+ K% |. q$ j
for (int i=0;i<MAX_INVENTORY;i++)3 [0 ^" Z6 z3 s8 ]7 n
{% o% Q. J6 i3 r
if (dwSrcId == m_Item.dwId)
0 Y/ `6 F. l' @. B- O1 V0 t( e* m {# l1 j6 I$ {% b5 |# l# [& L
//id相等 则 改变对应的dest和src
2 Z5 {; w. W3 n6 ?' e+ n nTmp = m_Item.nIndex;
: u* j. v U* ]1 N5 ?0 r2 t. }9 ~ m_Item.nIndex = dest;4 F6 Y; j; [% f5 o4 s# M/ N
}
- Y: \8 p! ]3 b9 W+ a1 `7 N }
$ C( ?* z4 Q+ ~/ w' h //临时数据保存完毕,交换开始
5 x& F6 s: ]/ q for (int i=0;i<MAX_INVENTORY;i++)) n; C) a6 }' j% h4 \* m, V8 h
{
3 F/ |5 ^5 |: U if (dest == m_Item.nIndex)
7 w0 |6 o$ ^, b4 L {
+ U5 C3 M, b/ z: Z% u7 V3 {) E //id相等 则 改变对应的dest和src
* W1 w- x: D! ^, E$ m( n0 a m_Item.nIndex = nTmp;
8 [! k1 s! ]. X: \! `3 x9 K$ z }
5 N' E& v l# h2 A' N }, k5 k8 q5 z# Q; V4 t# K) s8 t( |
}
8 g# c0 o3 i) E1 n5 f) m};
& O, k5 }% _$ e-------------------------------------------------------------------------9 t j& i3 H# q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 P- p4 i+ E f4 m# o
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); |. g `1 j/ ]* A) f4 G
紧靠其上添加:
" ~' s$ w7 C/ r9 P7 K1 wif( pWndBase == &m_wndMenu )
6 C8 s% w( r8 O4 c% U0 a: z{2 ~9 M; \; E' i" g$ @
switch( nID )
. ~& J% f# E9 p# Q- G {
2 w* Y6 e, u9 K0 V case 2:4 w- {, W" K$ p; a9 H9 y$ _
{9 H, ~" y) h* B7 `* y- F$ s9 i4 y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 b% v& ?) E5 O& |' D3 v6 }& u# v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# R: q7 h! [; i4 O/ E {+ K+ }: H. k: x
break;, Y2 \( {" F; l( X
}( L) z; v- P8 m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; l% ~$ N4 G0 q! s# b {
) A' T9 @9 |6 j0 @! b$ i/ J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 A9 P; I, n L
if( !pItemElem )& @2 C! J9 c/ z1 p
continue;! M( X$ U' G2 i1 _0 K/ F' p; \
if(pItemElem->GetExtra() > 0)
. p8 j- G; B2 _# @% i continue;
, B" U& `+ E7 S& U$ [ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
F% k e( p b+ U& c: B continue;
# S+ Y) c) z" T) R if( g_pPlayer->IsUsing( pItemElem ) )
1 ~- U0 l1 G9 a, d, [ continue;8 Z; l3 w, Y! F; J% M
if( pItemElem->IsUndestructable() == TRUE )% _0 y& j, M2 A
{2 z6 y( L! a9 A }5 t
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' |/ n7 h$ l, x, T1 S1 `# W6 o; T continue;
6 `1 s9 `& ?8 y) f0 y }$ P7 S/ W& P$ J3 j$ @: j
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# Q3 g4 {% W c
}
& c: y6 G5 |8 A3 Q S break;
) A0 y0 h- q3 H2 O+ b8 \* k }
/ H% `7 h6 Q2 l' \ case 1:; \( L% _2 G! _9 `8 M- B. F9 q
{% y7 f' L4 X( L2 e: Z, [* ]! P7 e
//整理背包
* j; c! d6 N" A- B* k/ x/ U' s2 m6 `5 V //////////////////////////////////////////////////////////////////////////. q( `/ j. b% K
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. I; n& {2 m6 z1 F9 Q //////////////////////////////////////////////////////////////////////////, @. d$ L6 x1 I" d0 i
//////////////////////////////////////////////////////////////////////////
- U9 u$ z: F8 M# ?$ P CInventorySort* pInvSort = new CInventorySort;
+ ]# v! M7 d/ q( z6 } vector <sItem> vItem;4 t( p8 V$ W: i
vItem.resize(MAX_INVENTORY);//初始化大小
4 C" s/ t3 f9 b. |# g/ Z( }: L //////////////////////////////////////////////////////////////////////////' p4 h$ D/ z7 u& j5 `* ]7 |+ M
//填充数据" e( \* R0 J/ L* L: L
for (int i=0;i<MAX_INVENTORY;i++); }- S; V4 x1 u- @
{
+ d7 _3 R, I, } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 G6 {* `4 X: M" W* n
if (!pItemElem)
5 ]) b# S. h+ n0 H o' C( k {
5 D! t3 V- S% D+ J+ u4 E$ G vItem.dwKind2 = 0xffffffff;
5 v% L5 }7 M( f vItem.dwItemId = 0xffffffff;4 M! C8 W3 I* b
vItem.nIndex = i;
% X9 k4 g- D4 k' A W3 a' Q }else {% X0 \% P$ W4 ^/ W/ `2 U: W+ U
ItemProp* pProp = pItemElem->GetProp();
; @5 \+ I+ L" c vItem.dwKind2 = pProp->dwItemKind2;/ m& Q9 g. w7 q& v
vItem.dwItemId = pItemElem->m_dwItemId;% l" i8 P- k8 e) Q9 e% ^: b9 d- l
vItem.nIndex = i;* ]! B7 f5 ^' p" e
}
7 ^5 x" x, @ j+ z0 t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 O# m! w; a- _& O
}& @ g5 ~0 I* x4 p
//////////////////////////////////////////////////////////////////////////: G7 ]+ P; ?" G* w: c( P
sort(vItem.begin(),vItem.end());//排序4 Y/ f4 V2 z# @, O
//////////////////////////////////////////////////////////////////////////
+ _, B" P: J; ]) {1 ?- n' A v9 v //交换( ?/ L6 v1 Q0 D. V8 j m
for (size_t i=0;i<vItem.size();i++)
2 O( [5 z3 J. V8 j- I {+ |$ ^7 o" d; a, D$ @) L+ f$ M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId); S$ I$ @( u/ G F, b' @+ U
pInvSort->Add(vItem.nIndex);
6 x4 h7 o3 ?3 d0 P7 V' J }
( C9 O2 J+ i% o: h BYTE nDestPos = 0;. \* `7 r/ I; Y* K* @% [
for (int i=0;i<MAX_INVENTORY;i++): Q- T) O; C: n3 c
{' y7 x+ |8 e: B6 k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( N8 B6 \5 a: h; e8 f
if (pItemElem)- h+ |8 [( }5 G: ^/ |/ P% p% O
{
" K J! C& |' E6 d; V" a if (IsUsingItem(pItemElem))3 d/ K9 M- N3 c7 u
{
, u/ R- Y: E9 n1 `2 H0 W2 a //这个位置无法放9 `$ Z5 F$ S/ D! V% y7 |$ V
nDestPos++;0 ]/ {3 v5 b w# U: l9 w
}
$ v% K9 Z/ d& t5 I9 K }
! x: R% B8 |8 c0 K' A g ~. E. x% m BYTE nSrc = pInvSort->GetItemSrc(i);
_/ {/ ?' J7 r W pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
$ r. r! @0 }4 E k if (pItemElem)% h& `1 i+ l0 T$ p2 U0 b
{
1 W9 a" a* _" T) p; _- o$ ^' \% Z if (IsUsingItem(pItemElem))1 G3 s+ V4 H7 j X( m
{& ~. h- ?4 E& E, u
//这个道具无法移动,跳过
3 g" V; F% w( x, Q continue;
) J& Y( i2 \( g { S; t } \& z6 |5 B C0 A& e
}else{8 f v% w8 a" J5 g# J9 x$ R
//空位置 不用动
* D4 B! p7 Z# Q continue;/ N3 k+ y) B$ D5 w) s7 ~* o
}
9 t w6 h! r% C2 l% J( V //////////////////////////////////////////////////////////////////////////
+ q1 v9 X# X4 E4 ] //开始移动& C( g3 c' H/ Z7 S; G
if (nSrc == nDestPos)
- h5 v# C( g& o' z1 K, `/ y) f3 R* Y {
# j/ \9 ~8 s0 _3 z3 k3 s //原地不动( Q, D+ M' q$ z* m& \) a
nDestPos++;
) k, K" \7 E1 o( w$ [& v continue;, @6 Q1 Q" m0 T
}
. p1 s- R! {" r, a/ G+ W2 ` pInvSort->MoveItem(i,nDestPos);
1 g8 s" `/ ~: n7 D/ J g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 j& | c3 S$ J8 t& g2 |, X Sleep(5);. i: `: j% F4 [" b
//Error("移动 - %d->%d",nSrc,nDestPos);, f3 u1 B; {# H+ Y& d
nDestPos++;
! `$ k& i/ g# O, `: C! K }( U* T+ H' a8 G% W/ |! B
//取第一个元素的信息
0 `& ~0 z/ o! ? /*9 ]- }- h0 N2 M0 V# v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 d$ F! a' S: d- z6 n
{
+ f7 m/ @% H2 ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, i9 D' J% B0 l4 Y* w9 O/ [ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ e- f$ N# Y/ b0 r
}8 S2 w3 y4 O& w) |: x$ t8 B- ?
*/( R: F/ \; e' ]. P' i, Q4 @
//////////////////////////////////////////////////////////////////////////
, Z# D+ S5 p/ @3 x break;5 N. I# \9 e/ d9 [1 ]% ~& O: u
}: g; m4 j& I# P( _( i( {
}
0 I# i/ s+ ]4 O3 P* {4 i+ e$ M$ Z}
q3 h! c# t6 x) Q; [8 _m_wndMenu.SetVisible(FALSE);! W8 G* Z$ V9 O7 S( Q% Y6 g
9 z ^, p- e3 D
--------------------------------------------------------------------------------------------------------
2 T! W' R2 P+ d: F+ I/ W- ~搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 U8 h+ G2 R W) e
{
y4 ^2 R" _" zBaseMouseCursor();
9 O/ \. l) D5 T% @9 R}
1 x# P0 _" H! Y; J7 w在其下添加:4 y) Q8 T9 p' ~4 H: d* T; I
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- G5 I7 Z! w. P/ F8 g- E2 f
{; a2 b) e& l0 H4 v$ v" r1 P) d. E; t* I
m_wndMenu.DeleteAllMenu();7 c* t( L1 E. R& n/ H- ?
m_wndMenu.CreateMenu(this);
+ j2 u! `& E: V& W2 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 R6 `5 C: X' Z. c2 }4 `* n0 N! o) e9 ?! f$ y) h: l5 Q' P
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 Q0 S/ u# e) I/ p$ v0 A3 K6 {$ E{" K8 p2 z/ T3 m
//P以上级别才可以删除所有道具1 }3 ^3 Z. s( i) q" a, p
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* {; s+ f5 |7 ?( R
}
- s' E3 r& G, Z$ a; P7 |+ `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: O! T. j1 U7 j1 f1 z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* n9 b1 _' p' m# V$ wm_wndMenu.SetFocus();) m( C2 X; @3 Z
}
3 v$ ^8 i6 R6 X------------------------------------------------------------------------------------------------------------
+ I1 P1 N/ b' X9 D9 U+ X*************************' G3 z4 |% k2 |' P1 C
WndField.h文件 ^2 q2 Z" N5 |. o' a7 U& X
*************************
1 E9 }# D# z# W( r: u搜索:BOOL m_bReport;2 s' e3 B) F. P! n+ D
其后添加:. E, S6 ^) l7 D7 V$ D+ r6 v; x
CWndMenu m_wndMenu;
9 m b2 s& N' H7 B# p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ b' G4 Z6 Z3 w3 s5 D8 p3 l其后添加:+ n) D0 _0 d/ ^) ~
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- k. S' G. P7 n# j* d8 ~, f& f
( r( U8 g! K9 q! B
+ h+ _1 d; j7 y% K" t' L |
|