|
|
源文件中_Interface文件夹下WndField.cpp文件! `/ [5 L- @4 @$ V" C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 k% H, J4 z# z
# t0 E& T: Z$ j2 D. l2 L; L8 zstruct sItem; p8 K( e) ]6 @$ {7 L
{/ Q5 X/ y0 `/ p- F) P
DWORD dwId;- x0 K3 H) S6 Y7 d7 ?3 B
DWORD dwKind2;
" x) h9 q6 ~; d0 C8 |2 JDWORD dwItemId;
. D' |9 F7 H; y4 b% w5 `# W2 Y# \BYTE nIndex;
$ X# `( x1 I! l2 f6 osItem(){+ ` ^1 i: R5 |. n* w6 D
dwId = dwKind2 = dwItemId = nIndex = 0;4 H/ M" T) V& e) s( D# A& M* m
}
: U, K9 g( X- Qbool operator < (const sItem p2)
# f& V: ^) M8 s: X$ s4 `9 R{3 e8 |& `4 k2 a) _7 z
if (dwKind2 == p2.dwKind2)+ x. d, j: i1 ~/ f+ W. C3 K
{# c/ W9 Q$ S- A k2 `7 v
return dwItemId < p2.dwItemId;4 w( E9 ^1 ~4 j' W- ^; i+ o$ S
}else{$ X: w3 V v. Z# ?+ t9 I l: O) r
return dwKind2 < p2.dwKind2;
- ?4 h9 l- H! T& p9 a+ W }
+ @: T( A, R( a}# B4 j7 s1 O% [, D4 ^7 }+ _
};
" i$ _$ E% b( s. J" }, @' Kclass CInventorySort! W& U" b0 }) F3 v% W0 k! Y
{
. v! Z& c8 q% d- qpublic:, P1 F3 g* |! l8 F0 e3 i
CInventorySort()1 R1 g/ [/ ]% Z3 @/ _
{0 j! e1 K8 Y4 c
m_dwPos = 0;' ?$ M" S- ]' L, R* [1 \. k5 U( b% c
}
) k) W$ p; F( Q- t0 h' K~CInventorySort(){}
* P5 Q4 B9 r8 j& \0 Y. Zprivate:
! N1 M3 k. w4 k. T% y" D& XsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 g3 z9 K! I S% H; K8 o5 R
DWORD m_dwPos;6 E8 U1 O1 |: \
public:
$ t5 @" _( p% ?4 Y6 Y. {void Add(BYTE nIndex)
1 H9 o9 S; E" |1 w{1 M- u( t) t2 P# Z
if (m_dwPos >= MAX_INVENTORY)
1 e, C6 J4 @% n/ a$ N, y" X! g6 F& ~$ D {- L3 U+ k h6 p9 m9 a+ }
return;) H# p# z+ i( W6 w
}9 Y1 e/ z7 i8 p
m_Item[m_dwPos].nIndex = nIndex;
4 v. M- y. C* k5 {: ^ m_Item[m_dwPos].dwId = m_dwPos;3 E$ w0 H0 P/ V# _
m_dwPos++;7 v5 h/ r5 n% J3 v- [2 ~% Q
}' \& u* ]0 `3 d
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( a9 n# }# J: `$ U3 G! M9 B{4 h7 B9 ^/ }. y; X2 k8 s: }6 b1 Z5 |9 D
for (int i=0;i<MAX_INVENTORY;i++)
" _; K! j h$ Y {; Y) \6 q+ C. f: F5 i
if (m_Item.dwId == dwId)
* ~: q1 `; K- x/ | {
: Z$ N7 T. B7 U% U return m_Item.nIndex;
# h- I6 B3 i+ S0 K* t+ ?# U" O2 O }7 \" D) K1 N6 e8 A' T
}/ \; F" D& N4 i: d- A* m' z' a% y' V4 c
return 255;
0 o& {4 c" Y/ b/ x' N6 G}
: ?8 K3 U, d, g& y B- qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 B" E4 Y7 W$ a
{
4 [. t1 ^7 F3 D7 l& D BYTE nTmp = 0;
0 P( y5 u {# j+ r0 E+ j0 {+ ` bool bDest = false,bSrc = false;9 |, w3 g' i: W
for (int i=0;i<MAX_INVENTORY;i++). T9 P/ y C4 y1 R* e; ]1 C" K/ x; k2 @
{
# K* n; ]7 h' s# w; h- J if (dwSrcId == m_Item.dwId)# T% C8 l7 Z. z
{4 `# m0 Q% C4 {1 R; g2 W4 M; H
//id相等 则 改变对应的dest和src6 C6 ~( X4 |; W+ N
nTmp = m_Item.nIndex;
$ E( k/ |7 X$ P4 K m_Item.nIndex = dest;
3 e5 K6 K" x& l3 Z% C }' K3 C. D5 Q; D; V. C
}
) D. G8 \6 t/ W! y' Q/ X6 P7 @+ i9 R //临时数据保存完毕,交换开始
4 C8 D+ U/ q+ k# N for (int i=0;i<MAX_INVENTORY;i++)! s9 W$ A5 s3 i, q! i9 f5 E
{0 r0 [. }" o, T% y) X( C" I" _
if (dest == m_Item.nIndex)
' x+ \9 } V; I9 l( G4 H6 Y {8 N" o* J, Y" b4 v1 w
//id相等 则 改变对应的dest和src1 F8 `, k2 c: w7 a
m_Item.nIndex = nTmp;
8 W: O4 J+ }8 Q }) Q6 `3 s/ [0 r3 m9 Y' D& E2 h
}; {& n' S4 A6 Y
}
4 y) F' z, f) N" Z" B j};0 m4 E* n* X# z1 y7 r( ^
-------------------------------------------------------------------------
1 z) l* P" T0 E. C依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! T9 I: E5 O# w$ `4 t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 t# G- F1 j/ i7 m y8 B/ B! ?( Z
紧靠其上添加:! a4 p" D1 F! ?3 M+ F
if( pWndBase == &m_wndMenu )
; t$ |9 }. n t7 a* L+ n{9 D8 X5 m: }: _* s8 n0 k4 c
switch( nID )
5 T9 D& c" [! g: ]- u4 P. f' X/ L, E: V {# ?0 [# T2 ^" Z% c: A- D# g
case 2:
# w9 E2 i; Y8 t' h7 e4 b$ W4 R {4 Y$ u4 b* t5 n. U
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% m4 e- J/ w5 B0 a3 C
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
c t0 p) \5 `; E" H, T, k, U {. a6 R. [( Q! G2 i9 s2 Y
break;
/ l4 k7 v( R+ L8 C( f }- W' f' c( u0 V0 l
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( Q' s% D" n6 M% j1 C* `7 Q) l {
6 i, x2 H. Z6 |4 F; Z5 Y( O# | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' J3 d# l+ s' h' K% Z
if( !pItemElem )0 g& |% G8 [. U* a+ O4 K# d5 N
continue;
7 I# g3 |# P4 U if(pItemElem->GetExtra() > 0)8 K: h: O L( P- O
continue;5 k9 e4 p2 I0 A
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 w! t' @" M# @1 p) Q1 H6 h/ C$ w* I' [ continue;
% Y* r) Y* O }1 ?9 @ if( g_pPlayer->IsUsing( pItemElem ) )
/ Z/ V! A, v* g% r) v8 N8 z$ }! t continue;8 n) E% D/ Y s, h0 I) W5 a1 N
if( pItemElem->IsUndestructable() == TRUE )+ C5 s1 k# x5 O' k5 l
{
7 I' @7 ^( }% n' L/ o) b C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: o# V3 `) z2 h/ L* B$ q. E% t continue;7 J1 x" V% b2 B
}6 R6 L& ^9 r9 ?& G p
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 k* f3 X& [1 g* B1 o }
" I2 \/ M6 ~9 Y3 [ break;& F, C6 ?& t4 ]" ~
}8 H/ d, C% b* m S( r7 V9 v* H
case 1:# {" K3 M% X( A9 X
{
+ O" N$ P1 ~" h6 N6 u //整理背包
_8 b& o5 W+ c //////////////////////////////////////////////////////////////////////////# B2 a- P$ C0 ]/ \% D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
J' l/ h Z" O# u! V/ p8 P //////////////////////////////////////////////////////////////////////////
% k5 |, r, }9 J* C- H% ^ //////////////////////////////////////////////////////////////////////////
) p7 a. }; L; P! ?7 V CInventorySort* pInvSort = new CInventorySort;3 G" R2 E8 Y) P5 d7 @5 k
vector <sItem> vItem;$ d6 J! q! U: G
vItem.resize(MAX_INVENTORY);//初始化大小- s' F" F2 f. P3 _1 [# B
//////////////////////////////////////////////////////////////////////////1 i- ~ m. r0 q' J$ ?% [% e
//填充数据9 p6 O3 s* T, V# |( x$ q @
for (int i=0;i<MAX_INVENTORY;i++) Q) p9 j" w; D5 u' O
{5 g0 q9 i. r) l0 {. l" G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: ]8 i1 X& o! a
if (!pItemElem) d. X" s2 s# m7 S0 B. D
{
/ z; a3 r: Z; f/ U$ \ vItem.dwKind2 = 0xffffffff;
) h( ]. P l: F$ Y; X vItem.dwItemId = 0xffffffff;9 }) A9 _# @: s, W8 d" g' p
vItem.nIndex = i;
( z- V+ `5 H! f, `! K4 R }else {; R K$ ]9 h3 U, d2 X6 X7 ^
ItemProp* pProp = pItemElem->GetProp();
" |% C4 T4 |6 G- s l4 R( N! B7 k vItem.dwKind2 = pProp->dwItemKind2;
/ T1 M9 L& ~) W$ b- t& e4 ^ W2 q vItem.dwItemId = pItemElem->m_dwItemId;% B1 Q% i6 Q2 T5 K2 J7 z
vItem.nIndex = i;7 [( Z0 P- U$ f. g2 M
}
6 V+ U2 z. D- z2 B, F! C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 Z1 T% d- X- y/ [ }
d# ]* k# A) T- \( k5 d //////////////////////////////////////////////////////////////////////////
\" g8 k1 f' M0 l x# q: K# a% A sort(vItem.begin(),vItem.end());//排序
\: u' \) w9 ` u //////////////////////////////////////////////////////////////////////////& K+ ^' T+ }2 z4 P( v1 K9 {
//交换
# g0 [- ^+ P0 a. M for (size_t i=0;i<vItem.size();i++) C( U" a! k' V- `
{
2 {( [/ d0 j1 D% z' _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 D, n/ I+ \/ ^$ e' M
pInvSort->Add(vItem.nIndex);0 U! p% s1 h; \* H5 x$ [
}
/ T" \# h' O7 X+ j/ `+ W BYTE nDestPos = 0;
E" ^& C: H' U0 G- v4 `1 ? for (int i=0;i<MAX_INVENTORY;i++)7 H7 a! h2 q! M5 z1 Z- T
{
2 j' u! ~8 T# B' R4 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 C) L# U1 {. q: Q" ^
if (pItemElem)% v: T1 l3 U" k& L2 _6 z9 V* F
{) h( M6 t0 b4 Q; ]4 s* R1 w. @
if (IsUsingItem(pItemElem))
; @" U4 z, h4 ^3 Q' ~% f {; W$ @& d' I, z8 T+ c
//这个位置无法放
+ I3 Y( ~& b: T$ |4 Q- u' I nDestPos++;/ b' w' M7 M/ k% V% P$ O( e$ E% f
}
+ F+ O7 h. b3 T! F% N# y }$ D6 J. m7 ?$ t: W3 q% o/ E/ }
BYTE nSrc = pInvSort->GetItemSrc(i);$ n5 {% D. y, p$ k
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: z! [* A0 S+ e* X0 o* {9 B1 Z: a
if (pItemElem)
5 n8 Z% C& K) N9 }: _* y {
u* _' m0 w# b" l; c8 o5 \+ ] if (IsUsingItem(pItemElem))+ Z9 Z8 ]+ T7 U* U3 k9 T
{3 X: J; ~# V9 T; q4 I1 v
//这个道具无法移动,跳过
# t8 p0 w- D- G continue;
$ E7 ^/ O" n" H }
5 m$ Y" ^# D0 n; Y% _( J& m& x }else{2 ~. [# e" Y& e6 n
//空位置 不用动
4 K8 N% F2 }0 T r* R U# g+ c% C continue;: s T4 f6 }5 y8 X* }8 Z
}
* x# s% y, F' C, U' I9 r) V //////////////////////////////////////////////////////////////////////////
+ Q: g- ^0 Z1 B7 a) A2 { //开始移动
: H, Q: q* R! E' ]7 c& A5 ] if (nSrc == nDestPos)
) _3 n- q" J/ s0 d# w9 z0 v {( ^+ b* H4 I" S# [; n7 t9 X
//原地不动6 u0 K# y$ k/ a! \: h! a
nDestPos++;6 L/ b6 t: \3 e
continue;
" j q. v Y# S4 m }/ b5 H" u0 U1 x
pInvSort->MoveItem(i,nDestPos);
0 n+ M7 s) H% `- [& l9 G9 J Z8 |& q g_DPlay.SendMoveItem(0,nSrc,nDestPos);& a: m" L ~4 P0 V
Sleep(5);
* N5 N) n, L0 s8 ` ]# @ //Error("移动 - %d->%d",nSrc,nDestPos); _, L& D3 ~0 J9 E% s+ D$ m! m
nDestPos++;
' }% D! v: D) r }
t2 e* K- K9 S" J* G //取第一个元素的信息" o5 `6 i( n/ p" I3 x
/*
; l6 ]6 R" i8 W7 l+ ` if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' y1 O* P8 a6 L7 z0 h
{( v: o; T5 T$ O+ W4 \. {
Error("Move - From:%d,To:%d",vItem[0].nIndex,x); s& d" q* t' X0 Q* U
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ \4 \/ K1 R( L9 ? T
}
( Z; v/ f; h- v */
' {* n9 T( ?1 _1 P. W //////////////////////////////////////////////////////////////////////////( Z6 E8 w5 r' g% z
break;
( \ [% |' U1 f% ^" o" N+ R }
: O) _* {, R, E. G* s0 B( L$ A }
# n5 F( j R5 K; y1 o1 L7 \: |0 R}) N# N# m' g1 E
m_wndMenu.SetVisible(FALSE);, E6 P& R0 c+ s6 Y" e
7 W$ W; M. f. q+ T) O, F
--------------------------------------------------------------------------------------------------------, @5 R- v% x/ p9 a: L) \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: G7 b) S$ O+ |) V2 V{; m7 S, r* c9 Q7 x8 K* ^: }
BaseMouseCursor();$ u$ K' }' C p+ P2 b2 J# a; Z
}
! ?0 P0 p5 C3 B; }在其下添加:
- j4 e4 N/ Z/ p7 {8 x8 }void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 M' v( I0 R( X! o& L3 a6 p, U; T, o
{- _% u& H4 f9 n. o) G+ t6 m4 D+ t, w
m_wndMenu.DeleteAllMenu();
! Z7 F9 U6 r' xm_wndMenu.CreateMenu(this);
; z7 N# B5 B- r' @. Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 o/ l: c* C& V
( W; O, T5 v* Z" g! g/ ]9 s d
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ c1 {) Y$ {$ c
{# e! w. X7 b; I/ T V
//P以上级别才可以删除所有道具
. ]! _' R$ k+ W N: K; n+ _9 ?# J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
* L! d0 R" |" k# @7 X}+ Z8 E- q5 @% ~$ @8 o( |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
" ]: o* B, Y1 @+ T* tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 Y+ e/ y. j: |2 d5 {$ a0 cm_wndMenu.SetFocus();; \. P' g2 K& ~+ ~ Z4 G
}
8 m1 b. c6 O1 W( x: O3 e- `------------------------------------------------------------------------------------------------------------
$ T4 d7 p% l ]( ?, S*************************- r h$ T) S5 Y, @
WndField.h文件- H3 I7 z4 B8 F7 A
*************************
1 |3 l" ^5 T7 u7 X K4 R. \搜索:BOOL m_bReport;
) F, r! U( I, |1 ~其后添加:
* C2 @% {% v) g, q7 rCWndMenu m_wndMenu;
Q! R) V$ Y4 c. ^8 B4 h搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ K1 G- l/ l$ n/ `8 [/ ]4 O
其后添加:" N8 b' p" Q9 B" o- j& `$ N. E
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 Q6 q/ S, h& \( H% {( L$ n* M( p+ D6 i! F& z9 _# s$ ^
# i. k* p5 S7 v! X. T6 q |
|