|
|
源文件中_Interface文件夹下WndField.cpp文件; `- h" {' [5 b1 i$ t9 g9 e
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) B g, i8 K, S' `; ]
2 P( O1 H9 n: ^' D) v, Mstruct sItem
/ d" h" Y! W. p$ A! q' L @8 M5 B R{! Q/ L3 G' S$ L9 `5 M
DWORD dwId;" N+ B! d. `# [: |) M
DWORD dwKind2;4 F: M3 T+ R) ^* y
DWORD dwItemId;4 J& H8 j% Z# x
BYTE nIndex;- R5 p$ z8 u9 i7 F# G4 t
sItem(){
. ^; `. `1 |% R dwId = dwKind2 = dwItemId = nIndex = 0;* Q! ~2 T0 f4 o' i6 e+ \
}
8 L/ j9 q& f$ l: A% y: Abool operator < (const sItem p2)5 J1 U6 t. _/ @4 D
{
, X" Y2 m, T) a, v, c6 B if (dwKind2 == p2.dwKind2)
6 c, ]9 c- C! Z3 N" w {+ y }, K8 s8 M! r
return dwItemId < p2.dwItemId;
2 [) r; |' z- m, E( F |' Z: _, o }else{+ i* o' {! ^. b8 m2 W% _
return dwKind2 < p2.dwKind2;
- D- I* k$ q& J9 h r }
& x0 z; ~9 L' v2 s, d" v}, ]7 ]- b' C# i n2 ^( _
};
$ }5 M j+ }9 T v4 m# |class CInventorySort6 W1 t4 y1 q/ y; D2 w1 s
{
" K, w) m ^# B* t6 spublic:( D0 l G5 d& b3 A
CInventorySort()
! m% i# ?. B- p! T; B6 w{
' L5 O/ ^8 ~1 [: |: ? g h m_dwPos = 0;
' c# b9 T0 U# A8 \/ {}
" x4 ?$ m3 |" ~* |~CInventorySort(){}
% v# t6 d) T$ rprivate:/ [# q+ o5 n+ B1 Q. Q a _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 ^2 d' E9 e7 P d3 u% }6 fDWORD m_dwPos;- D2 h# \/ R3 j+ h, _
public:3 w2 H5 i8 F$ C3 E
void Add(BYTE nIndex)' g4 f( u- M. s# M8 e8 k
{
5 _. G9 Q6 c9 s! t if (m_dwPos >= MAX_INVENTORY)
9 r* _2 {+ O$ m/ ]+ R' M4 ] {
) f7 W- ?1 X1 p$ v. b# K return;
. t& g2 _ L+ ^. k0 } }/ e9 d" L. Q# A" i, i( ]
m_Item[m_dwPos].nIndex = nIndex;
* O9 k! t8 E5 m; Z: A m_Item[m_dwPos].dwId = m_dwPos;
8 s" G& b& Y0 S m_dwPos++;( d8 L. W/ B/ p0 E2 |
}
; I) v G/ ?" A* M* kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( M0 l( n/ E5 t6 J6 G/ W& H
{3 ^% m( u* @ ` Z1 x9 I
for (int i=0;i<MAX_INVENTORY;i++)
' T9 H8 p* q! D$ Y7 e {0 k1 T8 l) v, X1 C
if (m_Item.dwId == dwId)
3 M8 X7 y* o2 j* p6 n/ o: \! P; L8 g {4 b9 k/ ?) R! m: O5 B
return m_Item.nIndex;
1 P; w5 t! L: D- q* D' |0 x }% J/ C# e: {! N
}% d% m) g- p; H2 }
return 255;
4 e, `: Q$ |8 o9 M- C2 @}' f6 B, j' p9 ]% H& ^3 e
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 R' y9 N. n& p3 a4 r9 q
{
, P9 k. z4 D, s, S5 n BYTE nTmp = 0;
" w% E7 i6 r2 l m' | bool bDest = false,bSrc = false;! ^9 P) ?3 q% x1 C- _- S
for (int i=0;i<MAX_INVENTORY;i++)
, ~2 m$ a# W% c {
. A4 r# \$ P, n0 u8 W' ^& G if (dwSrcId == m_Item.dwId)
8 D% }5 _9 c6 V {# t x$ \( ^; i: S- B0 s z4 x5 g6 U
//id相等 则 改变对应的dest和src
; \, D* `) B% r6 M; g nTmp = m_Item.nIndex;
. l% x% I* F0 v, {6 p8 b m* u% K m_Item.nIndex = dest;
; V9 |/ J) W; F* R }
+ {+ f) D6 c! X }& Y& r8 @& @) A. ~$ c
//临时数据保存完毕,交换开始
1 ~4 L" {$ P( `5 n- [& o for (int i=0;i<MAX_INVENTORY;i++)
8 |0 T& t1 w3 n H {
$ `) x e% }# h6 g+ e if (dest == m_Item.nIndex)
, F1 @ V/ |0 _# a" d- @ {
J; \) {8 a9 _$ ~ //id相等 则 改变对应的dest和src
! b: T8 l% f; O m_Item.nIndex = nTmp;7 F- A5 K1 a5 w( F @& l/ _9 l4 g
}
+ P# M& q1 A) f+ a% W1 z' ]( z' p }
+ i4 G* U2 x! U+ q}
& o: o2 O7 _) x/ I) X};
5 G: H0 ?2 q. \-------------------------------------------------------------------------. N8 v1 y9 Q2 ~1 } i3 Y( E3 ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& @) }& E! h) j. y, g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, a1 g! A+ M$ |' d紧靠其上添加:7 B4 }5 q) d- D: f
if( pWndBase == &m_wndMenu ); P( r- L* R& ?1 |3 H6 [+ x8 X5 {# q, C
{1 v' k( l) B7 c# u+ o
switch( nID )! \" L+ ~) U7 m! w& L8 Z f8 ?
{
, j" q' a% T% L/ U; W0 Y case 2:; y4 l) F& L/ J' v, S
{
; j# j, ~" I$ n0 O4 o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 m3 A; J7 Q$ [, K6 k$ M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. Q( i8 D/ p# ?+ O7 X {. L/ N, x X' ~2 K# n" [
break;
8 c$ J, { c0 U2 w" C }
* k, C: P6 ?$ g5 R3 N3 d7 \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* W2 P+ _: a* `; }2 b' P {
& e5 p- c8 N; }" W( t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( j! m L3 ?* e
if( !pItemElem )4 n3 \/ R+ {6 U2 H7 N
continue;
( Z- ^: j9 O* Z D3 V0 T5 M if(pItemElem->GetExtra() > 0)1 x: g% ^. U& c* E
continue;
8 n: o# O* t) l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - b% i. g0 k. T }+ S& I
continue;
1 S, t+ I* _5 w7 i) q6 ] if( g_pPlayer->IsUsing( pItemElem ) )
' p6 v9 o0 T# a# ?) \ continue;
; F# U1 w# E2 ^& V- J if( pItemElem->IsUndestructable() == TRUE )* K5 H/ S. _# A! g
{
, L8 M: z3 v* z: \ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );' |0 j3 Z& F/ |/ O5 J- N
continue;4 \/ C* A. @: V- o7 n
}
5 |5 B ?0 @' }9 D9 C* K' ] g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 F' e/ v" Z! G
}4 E4 |' o+ j1 \, [7 m" w
break;
# T. `1 I' Y' |6 H# n! ^% E }, t' J4 m' o+ c8 L1 d" ]
case 1:- c( S j$ |( k* g0 e! s4 Y3 _
{
* S: D4 A9 K% C& d/ p //整理背包3 ^" y1 W2 T+ b) T; a
//////////////////////////////////////////////////////////////////////////9 \: ?1 W5 j8 k5 c2 A0 [7 t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 w; m8 U) J3 e) c4 ?, t- u( [4 a //////////////////////////////////////////////////////////////////////////6 o' ~9 ^9 `. R) B9 U0 g
//////////////////////////////////////////////////////////////////////////4 h' W4 J' L+ Y, X5 ~7 n
CInventorySort* pInvSort = new CInventorySort;
, z3 k# P2 a+ @7 x, \5 H vector <sItem> vItem;8 b: }1 j6 l: ^% s* ?2 e
vItem.resize(MAX_INVENTORY);//初始化大小
% s4 q" \4 y, ~- a8 c1 e //////////////////////////////////////////////////////////////////////////
9 M" ]7 a6 {4 u& e, W6 R //填充数据
' C$ v; P( R2 Y) Z$ C* @" h for (int i=0;i<MAX_INVENTORY;i++)" c+ \3 Q, Y- o" v
{1 Q( s0 a+ k* U) b+ R& S8 V
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 F/ H5 n$ i& l3 K) {3 G if (!pItemElem)2 J, d/ C+ }6 N' r& k) E9 H
{# z2 M$ S2 H; T2 z" ]8 \
vItem.dwKind2 = 0xffffffff;
4 d: N2 g% M! ~+ k vItem.dwItemId = 0xffffffff;( j6 e. Y H* O+ n i$ U
vItem.nIndex = i;
: r: ] q8 P: u" _ }else {1 o8 x0 l1 S& B$ O X3 C
ItemProp* pProp = pItemElem->GetProp();& f$ S0 |1 Y6 |: _2 W% v1 B* u
vItem.dwKind2 = pProp->dwItemKind2;
1 X9 E! {/ X. ?) ~+ _; } vItem.dwItemId = pItemElem->m_dwItemId;2 I4 q' g* X9 T6 ~6 g& Y
vItem.nIndex = i; z# P( W) ?# f9 u
}, u6 O# e( |. S. r% d
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' n! G" V/ _% F, S7 Y* v
}
" f; t; X- [; G l ////////////////////////////////////////////////////////////////////////// q5 F8 h' ]/ r& G
sort(vItem.begin(),vItem.end());//排序
& U& f3 }3 a- I. _. ~1 } //////////////////////////////////////////////////////////////////////////
6 _' f/ `# V# A: ~; e1 Z' T //交换& z. V; L, }7 g3 D
for (size_t i=0;i<vItem.size();i++)
8 F G2 S% _4 N3 [' N# y {
3 J1 q) T6 F/ Z! v //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
( r! C; o( m O3 N! C, b: N* B- f pInvSort->Add(vItem.nIndex);
9 O( ^( S5 P* C7 w6 T }: x, f8 ?. ~' b }0 h j4 X* I% L. K
BYTE nDestPos = 0;4 G7 ^& O* L. y+ c! f! J m3 }
for (int i=0;i<MAX_INVENTORY;i++)9 E6 S \+ t7 k8 m# e5 R3 [0 ~
{
0 n. j/ K i( f1 [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- l+ o" S8 b4 N7 n
if (pItemElem)
+ }0 T' h8 r2 s: n- r9 f* B {
+ k9 `; @9 u) Q if (IsUsingItem(pItemElem))
- r# K. U; P: P( M$ h% j* y {9 S& U2 O% \! }; L. E$ n. Z
//这个位置无法放$ Y: Y* _/ n; e) }5 u/ Y1 E7 D
nDestPos++;6 F1 S1 `2 `) A0 H `
}
1 Q/ a: T& j" ~! _ }5 q8 @9 N& a6 U# f. x7 Q" G/ o
BYTE nSrc = pInvSort->GetItemSrc(i);
! S) L! [4 ^; x" n6 m& z2 o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ E/ j+ ~, v' ?3 k# @4 g
if (pItemElem)
- p+ {! Y6 W7 ^, r {- \6 N" [7 A/ e8 P6 ?
if (IsUsingItem(pItemElem))/ n* O4 a% @; O* Q7 d
{
, S L8 F3 b; I //这个道具无法移动,跳过" f, K* u8 j, x7 _
continue;/ |. l$ M( ]5 y! u! D
}# k7 K' N& {# e+ V& a1 e
}else{/ F- Y" p5 q# m+ p, r
//空位置 不用动' M0 I) {" T! t, @: ?& U& U3 r
continue;9 g5 s, f% M( I, Q9 H7 f2 t( }
}, W" r4 O9 x: J3 h& r
//////////////////////////////////////////////////////////////////////////5 }% V" U; k/ p) w& H: t
//开始移动
6 {: @( r6 _7 F! L% i' ^ if (nSrc == nDestPos)
. n3 d/ N- @1 j8 n( ^0 B {# R+ d: r# g& }* v! g P
//原地不动 s* q9 N" u/ ]
nDestPos++;; l1 H; {9 F! j$ k: J& y3 Y! D
continue;
4 V$ r- j/ y/ b8 U }
. O. N2 v* F2 a( ~2 G pInvSort->MoveItem(i,nDestPos);, h& W7 u" o5 w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 p1 e! ?+ \$ [4 d6 p; j1 b) D Sleep(5);
, P' I; L. e! A3 Q* b //Error("移动 - %d->%d",nSrc,nDestPos);
/ Q/ P* b. ]( y$ L; Z3 J nDestPos++;
6 t* m+ T0 d9 f% B }
8 x, w. `& A$ W1 M //取第一个元素的信息/ P" u( G2 R4 d) a
/*
7 Q9 l, X) e7 E9 {, U5 j if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# l' y0 C+ H, u' E% L& s3 [
{
8 X/ ] ^+ i; O i) w% \% r7 H Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; C3 D! J) n' \: H9 U# t1 M1 c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);" C% E* F! ~" h; Q
}+ a- Q {9 C# {8 _6 x. r
*/5 l% A8 r9 h4 ^8 j) ?
//////////////////////////////////////////////////////////////////////////* I& B6 z3 p" H% E3 c! W( }1 v
break;& V- r5 g' b2 J
}
+ q0 t. H+ i: v0 J& v } _) Y+ V3 [% |$ J8 F
}
4 ~8 F4 D( Y9 G/ X. ~7 [m_wndMenu.SetVisible(FALSE);
% m2 z7 R8 c* c: K7 ]! c$ u7 S; j3 O4 }1 ^6 C
--------------------------------------------------------------------------------------------------------
/ r1 ^% X4 d+ e1 h$ U' W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; r8 y( O: H7 d9 S- X- @{: L; L! p# j! [% {, K3 ~
BaseMouseCursor();
( @( Y6 M7 ? t m3 i0 L: b}& i* C" H6 N, r d
在其下添加:
/ P& o* Z+ K6 x6 P pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, l0 t* O% k" v; D6 f{0 Y+ r, U3 O3 d, `# T4 ?; X( [4 V
m_wndMenu.DeleteAllMenu();4 m9 b7 n% t) B* X' u* v/ R$ N
m_wndMenu.CreateMenu(this);
}' v2 R/ o6 um_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( q P' {3 u5 c) w: l
5 ~" y8 g% C) `9 _0 jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( W8 O8 u* B. v% E$ ]% T
{- [2 x; c* f* c/ T' X& m: R
//P以上级别才可以删除所有道具/ G" X# \* u1 x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ ]- _% M" k* m+ s- w- U
}
/ y1 ]0 w. M3 m m" i0 Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ d0 ^8 j+ O+ S; Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 F( V8 }8 u% ~9 w- c- mm_wndMenu.SetFocus();
! C4 X; O3 D5 Y: T! t}
4 ^8 L7 B0 q! D: c; e" a------------------------------------------------------------------------------------------------------------3 W- J8 R4 f: ` S6 S
*************************
1 k2 q1 |; N+ I3 D: E5 ~3 c7 ]WndField.h文件
6 f+ P& C* A' r% f- X% _/ p*************************
& l! |* M3 Q; G. v搜索:BOOL m_bReport;6 V0 v$ v2 E+ m8 \9 _
其后添加:
B" p1 D- z% FCWndMenu m_wndMenu;
8 B. t/ B+ x) ? g t$ e8 a. J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 Z+ g" r- Z) E. P% l6 a$ v
其后添加:
" Y0 z$ A' M, u8 h7 Y2 [& avirtual void OnRButtonUp(UINT nFlags, CPoint point);
; ?: `# p" ~& A' |) d. D0 X. _, e, V$ Q: ?( [9 r
$ y% L6 O& `. ]/ f* ^) Q
|
|