|
|
源文件中_Interface文件夹下WndField.cpp文件* l1 A4 d' j% d
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); Z* }' D( c9 W; n+ d- o, e
8 A; ?: f; o- L9 N. zstruct sItem- ?/ X1 Z* h7 B3 D$ c8 h2 Q
{
- l9 B/ T; a# hDWORD dwId;
1 h+ l8 p, N, x' e) L" }! eDWORD dwKind2;
) q9 m R8 B) H+ BDWORD dwItemId;
7 Q: Z8 F) X% gBYTE nIndex;
( {; N2 s9 d% Z! C$ GsItem(){
8 [ R& n: J$ v# ] dwId = dwKind2 = dwItemId = nIndex = 0;
4 Z& j" L7 ~) T( i2 N% D1 F}. M- q' T( m! S7 Q# I2 i! { D
bool operator < (const sItem p2)! x6 B+ X9 N- w
{
- e4 w; I) T% Z; I if (dwKind2 == p2.dwKind2)
7 g0 p+ P' E. ~( m+ h) Q [9 k) t0 G {( `0 `$ o; e8 W ^, N
return dwItemId < p2.dwItemId; d6 }/ ~7 n% A/ l% W
}else{2 Q9 Q8 I5 Y; H i0 z6 G
return dwKind2 < p2.dwKind2;
/ u7 y) R. b5 U+ @ y/ w: A }
9 d; M6 U1 v. O3 S g, C}
0 v( Y6 C8 J( G, q2 d: i};' C. P. y9 q7 O: O6 D K( D
class CInventorySort' C; o* W2 a8 E S8 \0 t
{
, W1 G: b/ U T% s8 P, Gpublic:
0 w- `. X8 i+ o( J( j) Q/ z1 `CInventorySort()
9 C8 ]9 m* y8 f0 i( [% I: g* w{
& E u$ k2 @4 ~ m_dwPos = 0;
! {9 H( {3 ], M+ ~) ^; B}
- h$ g- }# D4 g! H# H* n~CInventorySort(){}
( a: {- E$ U* v5 Jprivate:! T" |2 X, q+ S& a8 }2 G; w M6 }
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, F4 D( p7 u$ U* \1 m1 m9 hDWORD m_dwPos;
/ g/ O, @5 {" X6 ^! Opublic:
E M! d" t4 d4 H( ~void Add(BYTE nIndex)
8 P/ ~4 N" V- H4 w( N- N# W8 f{
8 V+ U `' X4 p } if (m_dwPos >= MAX_INVENTORY)- t) _7 q9 Q, v+ n* N6 j/ Q
{
$ o8 z& l: M" C% X" f$ ` return;0 j ` ~4 H" F& l0 X0 f
}5 U1 O: v; I7 D$ j
m_Item[m_dwPos].nIndex = nIndex;: v9 b5 W1 U, T2 w' |0 }
m_Item[m_dwPos].dwId = m_dwPos;
3 q8 K- P5 q( m* J6 P2 u m_dwPos++;1 W4 c) U6 r6 J; M1 C
}
$ Z5 u* ?# ^. Q# IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 Z# g$ Y z; t# B$ p G6 d{
3 e9 e+ M2 F. T for (int i=0;i<MAX_INVENTORY;i++)
! f5 |' e0 s, @& i+ |/ J' s {; Z: W: p3 g. V" Q& R+ ^. }$ d
if (m_Item.dwId == dwId)+ i' g' L; j) [
{1 T6 i/ C* y) G4 k" D- S2 k1 R9 e
return m_Item.nIndex;
. T& n$ p6 m* C- X4 U }
8 x: F: R- N( F' u }
5 q* x1 M. W9 c* u return 255;
- Z6 m5 _5 y4 [3 o0 l}
6 ]: ~, C$ g4 X# b, Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) O* f! j5 R9 G& x! `6 d
{) a. ^2 [% k0 S9 w E
BYTE nTmp = 0;
- A7 S) }* ?* w3 L& A4 G% F$ ~8 X bool bDest = false,bSrc = false;9 T1 S- t4 I' O& Z- C% r
for (int i=0;i<MAX_INVENTORY;i++)
; f8 s+ V0 N. R, I6 U {+ O9 I1 P0 }$ t1 w- X X
if (dwSrcId == m_Item.dwId)
& x5 J# ~: H d- t1 Y" k6 K {
$ A: O" X. F# l //id相等 则 改变对应的dest和src4 }5 [+ i' z6 g1 p, P- P
nTmp = m_Item.nIndex;0 i" Q5 {$ W, y7 m
m_Item.nIndex = dest;
1 m" M* r& e$ T4 s3 ^3 T( s6 I" Q; ] }
% T/ U5 W3 Y( \& q }
' H) {/ T O% H) W) A //临时数据保存完毕,交换开始- C3 ~5 k& l) ^: f
for (int i=0;i<MAX_INVENTORY;i++)4 F! s$ t4 i g. k8 w$ e
{8 F! B% |* g. X8 ]
if (dest == m_Item.nIndex)
+ ?9 a0 C" h) \ x {: Y U0 V2 m: o: T
//id相等 则 改变对应的dest和src2 J, F+ c* T, q0 q8 M0 x
m_Item.nIndex = nTmp;
8 `) J/ z8 \ K* Y) G }& Y# `' ]0 i: w( M6 S+ y
}
$ ?! Y) @; |" J$ a( h}+ v9 ]: d- Z0 t$ H+ N
};7 C% k0 f1 I9 ]/ S
-------------------------------------------------------------------------
0 C9 [& \, u& d! K" P依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). [5 y. z' x) w$ T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, [! V7 S z' ? U" \' v* T( |3 q8 N9 \
紧靠其上添加:
7 E' C) o" y/ P7 |$ M A2 Fif( pWndBase == &m_wndMenu )4 q: h: E! e* Y' c |
{) _( v# w& o* P2 W0 m, d7 z i. E
switch( nID )
# b( a* E% b1 f# L {' c E2 y+ W% V" b( h/ Q Y7 j+ ^
case 2:
; u0 ~* g/ `" l {
' m* l' P L. {% @+ ] k4 n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! D9 r# k3 S/ i. i/ ~' S0 H4 E% u if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' c) g" ~! k# b3 a$ J% E' ?
{. {2 L) G# y% }+ D6 D0 T5 c" Y
break;: t% q5 `" ~. h2 o* e, f6 J
}
. r6 I& f6 {+ v. M, V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 _( {9 w9 R# Q9 u1 w0 p; V2 O
{9 ]6 s" y8 v- i4 m. ^' V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 k S7 \' g" Q1 C if( !pItemElem ): T6 E3 ^7 F+ @' u+ S( Y& m
continue;
6 ]1 h3 ]- T) W if(pItemElem->GetExtra() > 0)
+ o+ {5 g9 [) E continue;+ M" X2 y9 N. g! C$ ^# x$ _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) o6 }! T9 b5 d7 \% P& r+ I5 v
continue;3 `, o7 L7 D7 C" N) E G. J
if( g_pPlayer->IsUsing( pItemElem ) )
- |) m! n. S3 G continue;: e/ X3 U# {- z4 \* S6 I3 C+ R; M
if( pItemElem->IsUndestructable() == TRUE ); f$ m! L' `+ z+ V9 _" l# P
{' H+ ?$ \9 C0 K; A& W
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* n& w& _- z5 l1 K2 a- C% B/ D9 T
continue;& B {) a' `+ x6 u4 o G) ?2 H
}
) _' U( @6 q. d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! Z+ ]7 M F* ^6 m }/ t8 `$ s& r+ h2 A: J) [
break;
1 v$ c& P: ~. l+ s }
' b3 V8 B1 e+ L" U7 n5 B& W case 1:& b) K8 M) j- c" y/ m3 ?1 F* B
{
" s/ D% p4 ], X! i1 C5 m7 A& F5 h //整理背包* L. J5 a y2 g& o( m' }
//////////////////////////////////////////////////////////////////////////
T3 r( |- @$ V: m% i6 C7 A- H //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. q: K) }4 a* A# ?' L, E& s
//////////////////////////////////////////////////////////////////////////; M( j, }" d: {6 @: h
//////////////////////////////////////////////////////////////////////////
1 Y/ e) p9 R3 R& A- N CInventorySort* pInvSort = new CInventorySort;: X; e( x0 v: o1 g' p: s1 B4 S
vector <sItem> vItem;
" R1 `3 L) K% y V2 q vItem.resize(MAX_INVENTORY);//初始化大小: r8 }2 j& _6 s# H2 K
//////////////////////////////////////////////////////////////////////////8 ^& N. B# z+ o1 w- B4 \
//填充数据: Q* `. v5 i& O X( x* a/ ?. R
for (int i=0;i<MAX_INVENTORY;i++)
% t7 M( A. [) t& _$ J {
! k7 y; N: L& K2 p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ G9 L5 D. }: [" t; x; z; F
if (!pItemElem)" [9 ^5 Y% k2 D9 O+ C
{7 H* \0 ?! R" t/ @" N t% C& h& n6 o
vItem.dwKind2 = 0xffffffff;
" l* h6 T* z" a vItem.dwItemId = 0xffffffff;
- k% t4 \9 {5 B/ E vItem.nIndex = i;% _4 E( Q m' e6 } {+ K( }/ e
}else {
& a6 s* z: R) S" C) c9 T7 `! X ItemProp* pProp = pItemElem->GetProp();
% O8 ~ Y& Y4 F vItem.dwKind2 = pProp->dwItemKind2;( g/ Z# j, q" [
vItem.dwItemId = pItemElem->m_dwItemId;+ w1 M d/ m. `6 e/ N' F l2 b
vItem.nIndex = i;2 Y& L5 I4 C. L/ q' s- ?
}1 C" i5 k/ s( H: y4 d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' z# D- \1 P2 t# B0 q+ `
}7 k, ]% V/ }# g- m: J* B7 I
//////////////////////////////////////////////////////////////////////////2 r: n! Y% S3 d4 o3 U |* \
sort(vItem.begin(),vItem.end());//排序
2 `1 W; C) o$ V' o //////////////////////////////////////////////////////////////////////////
4 n9 p* ?. ^" I) T( o7 z7 Z& C //交换
' k* N, @6 q* q9 [9 k+ K1 O for (size_t i=0;i<vItem.size();i++)( f q' U7 w7 q6 b) v
{) @8 ~3 X2 R6 q$ X ^/ d
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! Z9 }5 @3 q9 k6 d- y5 t: z6 `! a pInvSort->Add(vItem.nIndex);% V K9 B5 ]4 S' ~7 C5 x- H
}0 F9 g( i: ]9 b) T8 z
BYTE nDestPos = 0;1 O" W1 n2 c% H3 p7 C" S [
for (int i=0;i<MAX_INVENTORY;i++)6 x( [8 z: t$ n% X
{/ u9 C1 {( N: j7 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);+ R$ e7 X/ {7 }8 Y
if (pItemElem)% W6 ]4 m" `; V* q7 b
{
3 f: G, E% y) h0 `. } if (IsUsingItem(pItemElem))9 U7 N" u' c; U) O; s3 ]. T% _
{1 N$ H* R$ d. \2 b/ h: M, C% S
//这个位置无法放
. b* h! \9 w- Q; k( }7 i- ~/ c- H' O nDestPos++;
- {- b4 D) G6 \2 P9 c9 z }
% X& B- l: w6 |) m6 E; |% [ }
2 O. p* R' S5 p/ U4 K% \3 M BYTE nSrc = pInvSort->GetItemSrc(i);$ R) q( |9 h1 M# N, l3 h
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ z8 Y- ]8 @1 y" p0 h if (pItemElem)
7 w# Y& [( o& k9 S {
! h: F" g+ U) ~2 U if (IsUsingItem(pItemElem))
* m$ m$ Z7 L. t' {) {6 a/ l {
7 Z" j3 \3 P$ ]& G% o1 S //这个道具无法移动,跳过
( X; q5 \# B6 X5 X7 B2 Q. N+ ^! T continue;
3 c+ n8 G3 I ?$ r' w$ x4 ^( ` }
& d. D8 {1 J6 |" G6 h }else{
3 j/ _. Q+ G* G5 O7 h. _ //空位置 不用动$ k, s! p# x: c* o% T" }6 z
continue;
+ l3 x) B* K2 r. b1 Z8 \% R }$ \3 v0 r. H0 H7 N" [$ v% o) A9 R
////////////////////////////////////////////////////////////////////////// [' @9 C+ |! Z5 v, m) D9 h
//开始移动
! X' O& V4 }( B7 I } if (nSrc == nDestPos)2 k; X+ X, g& D! S" B
{
, |- ^! j) k9 X* V: Q% I //原地不动5 R- a$ N) r; V8 E) Y6 H
nDestPos++;9 m4 _5 I# U+ J# Y8 r
continue;
& ?! y- ^$ S- _ }! D/ e0 y6 a j+ N( t7 W. n
pInvSort->MoveItem(i,nDestPos);
3 R" J1 y) v4 n4 a& ?! A; { g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! F3 f% n- b+ b Sleep(5);: A- q1 ]$ n3 a1 V
//Error("移动 - %d->%d",nSrc,nDestPos);
: i/ b) {. Z/ R i5 t5 |# p nDestPos++;+ o$ z7 B; @. K# g6 I2 [1 O( }
}( E; k b& `( X7 ^/ M
//取第一个元素的信息* \9 p, T) w1 u/ ~
/*
. g) X3 w, w* ~/ ]7 Y# v if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ B# o7 A. l! ~$ E {
8 O% E b0 N# E* N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. v1 q2 @: I# r, L- c5 b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 u6 |* R$ i1 H* D$ [% ? }
" o1 Q3 N! v7 y */0 c$ _9 y5 Y+ a3 ]0 R
//////////////////////////////////////////////////////////////////////////) `5 {1 V, K# e3 k8 [
break;
( o7 h; _4 K. u' t% n }
" K1 U5 t& Y0 c, D2 @ } . `* s4 U" Q! k
}
( P% I9 x/ n* `- P7 |" Mm_wndMenu.SetVisible(FALSE);
& w9 |1 X( g" K( }& r/ w& L$ D" K5 Q) Y+ U0 j# E4 V
--------------------------------------------------------------------------------------------------------& a7 c0 K0 Y6 D1 l0 r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- I. D! Y9 {! _: t) P
{0 b6 u5 i: Y" D1 `$ Z
BaseMouseCursor();
+ T" L0 ~$ ^2 m7 f; d! |5 r}# V# E% y: X: ?# W
在其下添加:
2 T3 C5 p8 O% ^( x# P- gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 U* t9 W; Y) o A0 e1 l
{
4 g5 \5 y! [/ K8 _m_wndMenu.DeleteAllMenu();
" A3 y/ `$ t$ X g4 s6 {% ?* em_wndMenu.CreateMenu(this);, A* g! S8 V( k3 R1 O+ A
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* o/ k M2 @6 ^8 ~1 U6 g! j: x+ O4 f% E) e7 Y1 M5 R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. p4 C/ ~+ O8 {2 ~4 X3 I{
# a9 ]1 t9 v5 k) F2 D //P以上级别才可以删除所有道具; J1 b& n n# p3 i3 H
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 ~6 p, {- _( @ n+ I Q+ [}
% H( _' \. s- a# d. ~: [6 Z& Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, L+ P* i) ?9 \0 d1 r! }# D, K0 Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
. e- c* N- g+ [, Pm_wndMenu.SetFocus();9 y4 ^8 h6 S2 B* h7 |0 t7 C
}) T) j& W+ j* @( n z
------------------------------------------------------------------------------------------------------------
7 T: B; V3 p6 {*************************& V5 n4 T8 i- l* w
WndField.h文件
. X- p: b$ ~9 O& O2 V( h*************************; E A4 V, a+ W4 s9 w# J2 Y
搜索:BOOL m_bReport;" J A3 E# r) J5 o- q6 W8 n
其后添加:
3 u% N V& ]4 D% f' j+ a$ ~CWndMenu m_wndMenu;
+ C8 Z8 T( C, p' x. \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point); g, d @) y4 |, D% `3 Q1 X& Z. T, L
其后添加:4 e/ {: a/ _% ^& _' K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
) F: u m5 ?$ r, o! T( r/ w8 J* M: _% ^: G, O9 L
/ s2 X. R5 j* V7 p7 I7 b
|
|