|
|
源文件中_Interface文件夹下WndField.cpp文件8 C/ H' t4 T$ G5 o7 i
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! J7 Z0 \ @" `1 {1 j' p; j7 M
- ~9 D4 e$ K* J5 |* G6 L) Y# xstruct sItem
' d1 ~4 y+ j0 c{5 Q( F3 \2 Y" _: j: P
DWORD dwId;
# v. j) b3 c. p; e6 G3 kDWORD dwKind2;3 R! s; u* l# i7 D
DWORD dwItemId;
9 X5 g6 ?- B" Z0 w$ f$ W4 PBYTE nIndex;" y+ k) L& ?4 U0 \
sItem(){
1 Z$ a* @ v- k4 V: h dwId = dwKind2 = dwItemId = nIndex = 0;9 S: e0 j% M) F; M0 o* Z
}' A, T' ?. ^# f/ D! A$ u
bool operator < (const sItem p2)$ e& P+ k$ R6 u& ~ v" c. o
{5 e! c8 z8 e9 ^$ F7 `% u
if (dwKind2 == p2.dwKind2), K: e- s' M) ?; q' }
{
8 H( D z7 v ~& A return dwItemId < p2.dwItemId;
4 V8 d, S4 U: G1 Q* e) @ }else{
3 e3 a1 d- n m# v7 f return dwKind2 < p2.dwKind2;
3 G5 u7 [; \( k$ u2 d3 ?/ r8 V }3 r" x+ h% P: s8 O$ c& ~3 I9 L
}3 L9 l3 l: g- n
};
# @7 o6 l8 G7 Q5 g3 l4 Cclass CInventorySort9 n; b( m9 j% Y1 O
{9 z+ j6 {2 N1 L0 o1 O9 O- {) p# N; f
public:
. P) A/ Q& D* m0 wCInventorySort()
" U5 {; q3 M+ s7 z1 B{" P0 s- R& D1 i. d6 T
m_dwPos = 0;
; d% w! d# @* f* T* ^$ o}6 j: _. t* p4 u% I
~CInventorySort(){}
/ n; d+ Y* _8 O6 `4 g. `/ G9 Jprivate:
) i1 c+ ?+ T& XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 `. O+ _' n; j: ]( x3 d7 O6 I$ wDWORD m_dwPos;
5 z4 R) _! {" _0 ?; ~- x% R* kpublic:) Q3 a7 X. n1 E6 @( ]5 l8 I
void Add(BYTE nIndex)
* P6 V1 Q6 W% [* y( I, }# |7 T{! E" _; f& u, K- _) {$ b8 L; P
if (m_dwPos >= MAX_INVENTORY)3 g' m# E" o: q2 ~7 h8 E4 `7 f) g
{
5 N6 @" s% |8 j6 T/ f+ C: F return;# N [" M& Y, v" }; N
}, q& ?, y0 E7 Q& ~" r# L
m_Item[m_dwPos].nIndex = nIndex;/ e, h" o7 u2 Q; ?5 F/ @' \
m_Item[m_dwPos].dwId = m_dwPos;
6 G* y" v: M9 X' o m_dwPos++;
7 [) i( Q% O5 o" J/ O7 v}
5 [2 Q! Y$ G# TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 v2 g& t! v9 ?: ?& ?/ `8 B: @{
7 i- R, K; {4 J0 w# j for (int i=0;i<MAX_INVENTORY;i++)
# U! Z0 X# E1 z) r6 ? {
b0 C& o- i6 H9 R; e) k if (m_Item.dwId == dwId)
/ h) ~0 Y# P; b5 M9 j2 Z$ s {
- ?% R& S+ N3 h o4 K return m_Item.nIndex;
; I8 H$ n; l6 g3 j, c }
7 g: M4 j! b7 E8 h. n$ |: S1 T }1 {. O, L% Q7 O7 P
return 255;3 {0 \) E- X! \4 x
}
) k7 w2 [6 w% b% |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, s6 L/ M0 o, [+ w2 \{' ~1 X6 y! Z& Y! k! C; X
BYTE nTmp = 0;* U x. a* k' x! |* i
bool bDest = false,bSrc = false;+ ^2 K# u: N6 q, u# a6 D/ \- I
for (int i=0;i<MAX_INVENTORY;i++)
( w+ X3 p4 a9 X+ R! h" M1 v, Q {
' Y- C j/ N, e: i1 H8 J5 r if (dwSrcId == m_Item.dwId)6 ^) V: @4 m1 h7 ^
{/ D" O/ C9 f" |% V; Z/ }: ~
//id相等 则 改变对应的dest和src: a6 O0 ~" L9 j: k0 z; s Y
nTmp = m_Item.nIndex;
" w0 C( e, ]' R m_Item.nIndex = dest;
' W2 E2 V$ o+ w4 m. g, U }
2 F* ]. Z( H$ f }
0 i! D# l: d, u# f //临时数据保存完毕,交换开始( ?8 k. Y6 g+ x' p% Y' A
for (int i=0;i<MAX_INVENTORY;i++)+ a* o4 t R+ G5 |8 y+ W
{
& N, {! I1 w, K- D if (dest == m_Item.nIndex)
2 B8 K% m# a- g& F) u* } {+ @3 T, V* Z- H" ~4 M
//id相等 则 改变对应的dest和src
/ p* i" `2 E: E0 I* `7 |3 ? m_Item.nIndex = nTmp;
4 m7 ~1 \- v1 w5 c% s. o% J) K }# u# E% ]7 [/ {* L* `
}2 {( e/ i2 ~/ w7 d o, I
}9 o+ C. v" ?, j( i) a
};0 `! a9 W, j9 t( ?) R
-------------------------------------------------------------------------
: j0 ]; x9 f+ K2 ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ [1 ]- `4 B! V, y/ ^
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 Z) M2 [) }$ F* Q0 f$ r' _
紧靠其上添加:
. k6 K2 \8 k8 m( g: H5 iif( pWndBase == &m_wndMenu )
3 ]' ?/ @1 E6 g' u( R{
5 u" V. `$ ^$ |. E6 {1 c- a3 I% ^ switch( nID ); X: P8 b. y5 b# t
{
. [9 `! R0 m) i+ d# E4 }9 a9 d case 2:
; \" C8 ?$ b7 F! m {' t: M7 ?' u+ o2 M% q
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 L2 p) R/ x7 ]5 [" q6 c if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 V. R( M- r+ e- ~" h
{3 S$ X; {; n" `) h* B2 E" d
break;) A! }' b: [ B" J- p
}
8 h% T: [+ I% P4 j5 F; K4 {8 I# D for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
+ \* ^# W9 x8 ?+ @ {0 F3 k- i9 P1 D5 d& {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- [ P' O! p8 Z8 u& c) p' M
if( !pItemElem )
+ B3 R6 A5 H- s# l1 j continue;
% ]& v0 ^# l: d+ `6 X" v if(pItemElem->GetExtra() > 0)
0 ~# V5 ^# q: C* ]/ |. Z continue;* q# F0 Q- B6 _, n
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . y. ]# F* |( ^
continue;- Z5 Y8 L. c7 ^* ?2 t& v- s
if( g_pPlayer->IsUsing( pItemElem ) )
+ I. l6 i8 }; L3 e7 ^# K; W9 V; Y continue;
( o3 V. K5 L( ` if( pItemElem->IsUndestructable() == TRUE ). S9 n' V( u) `! ]$ [
{$ M9 g# `$ B& b
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" r$ v' m) ~$ s: t+ B
continue;) C& ?+ A4 P5 n8 \
}3 \& [5 _: }+ ^- a
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, t2 O( ^7 y8 h/ K: G }8 X8 F- J3 w8 K+ E; F4 [0 T; R
break;
: [$ P% `# s* Y- x }+ U& ~8 e4 G& ~! F( M9 b
case 1:
2 y! I- @- e' A! j) y* [6 _7 } {
' G* T( g/ G* w6 T. D/ w //整理背包( [+ N( n6 ^% J; E
//////////////////////////////////////////////////////////////////////////
" L! z) _. h5 Y( u9 ~4 f5 O6 Y //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );4 G" L6 l! N& i5 j0 i( p
//////////////////////////////////////////////////////////////////////////
2 ^; d" g7 x& r& Q' o. b! Z5 F/ p //////////////////////////////////////////////////////////////////////////5 C& t4 ~2 e, y0 Y L1 w
CInventorySort* pInvSort = new CInventorySort;
# ?9 u8 O3 o% {% B vector <sItem> vItem;
7 W) D) {+ \) Z `7 f! z vItem.resize(MAX_INVENTORY);//初始化大小
, b1 }9 k2 S0 z) a& c ////////////////////////////////////////////////////////////////////////// Y6 Q4 C' g; y! U8 m% Z4 S
//填充数据
' h, v0 n6 G/ {. I+ L. |" \ for (int i=0;i<MAX_INVENTORY;i++)
: u$ b; ]1 D+ F* m4 `9 V; [ {
; u2 b; Z, R: S5 W7 l3 I. c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ \8 e0 D0 l: c
if (!pItemElem)
7 L' _8 t& S6 F4 s& K5 D9 | {
- o& `& n8 o9 S+ k7 ]) y vItem.dwKind2 = 0xffffffff;. d4 i8 x' a0 G6 M5 k
vItem.dwItemId = 0xffffffff;9 c% N9 E' U2 q: K2 Z( |$ c+ U
vItem.nIndex = i;' u: [$ B' v5 } f* ]; Q
}else {0 Z3 C3 g+ p4 ]% E7 T6 c
ItemProp* pProp = pItemElem->GetProp();& y4 F$ p2 N% R& E3 f: x
vItem.dwKind2 = pProp->dwItemKind2;2 A* w' }' `+ b9 \( w% E! u5 ], Z
vItem.dwItemId = pItemElem->m_dwItemId;
' e2 M _- }. o- W vItem.nIndex = i;
+ u$ N( c4 \/ `/ E! b/ F* A0 B; r8 u4 ^ }5 S6 ]: W! M+ a. D% T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. r o! W6 C; ]4 x- N$ N! X3 ` }+ g- {2 d$ ?8 m! `, [, Q% p
//////////////////////////////////////////////////////////////////////////5 I' ^2 K; j [/ Z8 v" e3 t
sort(vItem.begin(),vItem.end());//排序$ v/ i7 y8 h. d- _& c" A( Y
//////////////////////////////////////////////////////////////////////////
7 X* w z+ m+ `& V5 L/ i9 P7 r //交换& G* f4 @$ f' D, O. Y% M
for (size_t i=0;i<vItem.size();i++)% K3 _3 l3 r0 x! g
{( j( S& A& e& Q7 v ~- p7 Y V
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; w1 Q+ ~# ~. m( ?; r1 K6 e/ h- e5 R$ e) E
pInvSort->Add(vItem.nIndex);
- z, e6 S( T; o) {" `# _ }6 r$ P& A; u+ x3 j$ j: m
BYTE nDestPos = 0;8 y1 r! {8 m! y+ q4 i7 b
for (int i=0;i<MAX_INVENTORY;i++)
& I8 ?( Q- x d0 n {' }0 n' f3 Q Y! W9 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 M, Q. ]; U/ |0 ~0 P
if (pItemElem)6 n* A. P$ u9 c% ?/ [
{; N* q. l" E0 [7 s7 C5 q$ X/ B
if (IsUsingItem(pItemElem))! p/ B3 ]: b: ^' T/ f6 u
{ P% x* |1 Z b" p0 `+ L9 J4 E
//这个位置无法放. a* X4 h. j7 r; N
nDestPos++;1 O( D4 x# ~ G/ l, k* R2 n- r: Y
}
7 D5 ?" s% G* R w, F7 ^ }9 J9 C) ~0 U% t
BYTE nSrc = pInvSort->GetItemSrc(i);
' ^$ t2 W- o/ J4 m pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' T- m! Y2 x. P; f
if (pItemElem)
9 Z5 M+ M7 X) u% e, I4 l {$ n: w3 o, \. d5 c# \
if (IsUsingItem(pItemElem))
8 \6 u3 u- F1 @ {0 n0 j& I$ T6 g2 H
//这个道具无法移动,跳过. `' j4 D! J1 s4 Q1 _/ l6 Z0 f
continue;
9 L7 `, @7 @5 Q% J }" q( _4 a& F' @# {& C1 A
}else{
" B- ^; @: I7 g" H! U //空位置 不用动
! M5 ?/ d7 N2 u continue;- Y6 P" t3 d: r+ E/ l
}# r8 C' l$ c' f$ e5 U- S' A
//////////////////////////////////////////////////////////////////////////
0 J/ \; P* G% H( Z //开始移动9 q: ]0 ? I! K* x# B& q- ?
if (nSrc == nDestPos)" P; n& o0 d0 H3 Y" L
{# b$ i Z2 m$ }# _+ B) d+ V
//原地不动
( E' f& K4 ^& U2 ~7 N7 O nDestPos++;
4 ? g, ] s4 ], o% N7 T5 l continue;
7 A8 V( C: q& t+ j }
. o. P6 B) b: s4 a pInvSort->MoveItem(i,nDestPos);
! {, ~) S& X1 C# j( X) n! c g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 s' x; M d) K% T Sleep(5);( U6 s- k8 o W
//Error("移动 - %d->%d",nSrc,nDestPos);) y" }0 r2 w( Z7 L. {
nDestPos++;
" g4 a9 ^ l" b, k: M3 A }
; w9 y1 H( d7 K+ }; @ //取第一个元素的信息
2 f/ A* a, f$ {7 _5 ~# ^* N /*$ I v! s+ A( @7 S6 S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! z& s! g+ W W& j
{
- z0 I p: U) `3 U) c7 n4 X Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 D5 n, y: u7 _ B& A& O& H g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 h7 M! ]& o# q5 o
}& M/ Y4 Y% a, M# T2 k3 C
*/
) D' W3 y9 [0 k2 q( J5 a9 C //////////////////////////////////////////////////////////////////////////1 }; R# U2 e+ [
break;8 [+ y, w, H( _' X' R
}$ i+ v) Z6 z! m9 `1 C# `/ `
}
, h4 V4 p8 u/ F# ~& _; \, ^7 z}
+ s: a0 P7 W7 W, i3 }0 |% H D9 lm_wndMenu.SetVisible(FALSE);$ x0 N* n+ d( R6 r3 I; n% F
* ]2 J8 l* N" H* \3 C
--------------------------------------------------------------------------------------------------------
! }) |+ v# ?9 C* n" o8 J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# w5 s0 P) s6 `9 I$ {{
2 h; Z, k. O3 A5 Y( G+ E% v4 I& @3 eBaseMouseCursor();
: {+ v. u p- d/ } K}3 |9 p, J4 K% f D
在其下添加:
: M1 B1 y- W$ kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 B1 v* o8 g* c6 \ U9 p
{
4 Q+ X1 o/ W( _0 ]1 y5 Pm_wndMenu.DeleteAllMenu();
/ @' R2 {: o, D+ g' c+ b! \m_wndMenu.CreateMenu(this);
( a; `: b+ s5 E, R; Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ I; ?' f! n$ g9 o& U0 C, j0 F
. c- w5 g. I% Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): z# e; e/ g. j0 G& R3 Y
{
$ O- ?% z2 l0 n* t //P以上级别才可以删除所有道具3 e( U v; H. S9 S, t2 |$ d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( y) ~2 B7 z ^& a7 \5 m) ]
}" W+ `! T6 j' P+ r/ \% D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ t8 i+ ?) p8 ]" K; ^, H3 ?
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );9 ?5 ^8 U. {$ y% N, o$ O% L
m_wndMenu.SetFocus();
3 x2 ~3 o ] v" e}
! x- |( w/ N# l6 g------------------------------------------------------------------------------------------------------------! ]- G' w6 W( r% t% E. ^
*************************
0 p+ E/ Q m) S6 g0 V! I4 L7 h- jWndField.h文件
- J$ o t0 M* v6 |8 Z/ o************************* H ^# K9 x2 b6 l. z0 E% `0 n" S$ a
搜索:BOOL m_bReport;/ q3 b& m. N& l" F# @6 |, v
其后添加:
) z+ C) E- B# J5 Y& E7 X5 \6 WCWndMenu m_wndMenu;- M q3 w$ \2 g% E- v' U
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 z3 n6 y' l* K
其后添加:7 _9 ?5 q2 O* {' v7 o
virtual void OnRButtonUp(UINT nFlags, CPoint point);' v) m! A) G" F" w
# f. @$ z6 H! d; S, T* v- o( N& b9 O5 g- N( ]
|
|