|
|
源文件中_Interface文件夹下WndField.cpp文件
) o) L+ y0 C6 L6 e% R$ U( S搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Q0 M. F' f* x3 i9 U( ^9 v: z
1 L9 m ^( K6 Q5 a/ X* s. c
struct sItem$ g$ P, r4 ]( W) v! n
{1 Q& f. U, `+ F* k( B; q7 |
DWORD dwId;. d* t6 v* g" ], T
DWORD dwKind2;- i, ~+ R2 X4 I' c1 z5 p" ~$ y7 W: D
DWORD dwItemId;: b1 q# U. Z" ?# Y0 V
BYTE nIndex;. A% Y& y% ?# C( y( I1 h+ C0 w
sItem(){
( F: {% J" W5 P dwId = dwKind2 = dwItemId = nIndex = 0;& o. g- E, u" f+ f- [3 @
}8 G* F/ L" b% \9 O
bool operator < (const sItem p2)( O/ o. z5 J6 |" U! @& y5 f
{$ ?1 g9 U* ?3 M0 I( v8 ?
if (dwKind2 == p2.dwKind2)
1 R4 s/ _! O6 t9 ^ {4 o/ O1 a6 `: i, t
return dwItemId < p2.dwItemId;
% ~% S y6 B% t8 T: a4 w9 @3 X }else{
+ c. ^8 D1 v5 V2 w) x return dwKind2 < p2.dwKind2;' t$ y0 E0 w+ C
}
t. \9 W: E! x# w( Z& ]}
! |* Y6 E0 ?9 b, v( v7 j4 Z. y6 V};
: f: S+ g y( q& E" B* e; vclass CInventorySort
8 L5 k2 m, S! X{
7 w; J' a7 f8 s/ g7 Y+ e% tpublic:9 T u K J/ n% R/ d0 X
CInventorySort()
. N4 m: V+ e, W9 c# q( M$ M{
" T l, Y; Q! x! ?, y m_dwPos = 0;
/ N: D: U% w) T h6 o* S) R}
% Y) Q: x, S+ w) }8 ^~CInventorySort(){}
+ Q# X, l9 [, }2 X' N a# jprivate:
9 L, o" Q& o0 O, GsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. r& m; U! ]8 |& \- CDWORD m_dwPos;
; O3 ~5 L8 | jpublic:! X3 B! G/ }, [4 z1 b
void Add(BYTE nIndex)
! S; ^2 n) ^- v O. s' v% ]{& D1 D4 w5 A: ^, F4 x
if (m_dwPos >= MAX_INVENTORY)6 }; m6 ]+ A/ h! a
{" ]5 m0 K) d! `# l N! K: Y3 Y/ j
return;! J4 S: g% ]8 q8 o [9 R/ N7 d
}
5 s- @# \8 e. a# x) {. `9 ?9 h3 \+ O m_Item[m_dwPos].nIndex = nIndex;
/ N; h5 V2 Y/ v0 j6 C: S# x3 P m_Item[m_dwPos].dwId = m_dwPos;
# I8 n0 X) R# @3 V( H# y1 l m_dwPos++;6 w9 i/ k/ w" b7 X5 u' ^
}
2 u# i# S) V3 D+ [5 h9 JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 v5 p( @( [* f& V3 `! t{4 g1 w4 I9 }9 d3 Y0 T1 x& N6 i
for (int i=0;i<MAX_INVENTORY;i++)
- r: s3 i8 T+ w {
5 p" l7 G" p, w/ D9 ~+ V6 \- P if (m_Item.dwId == dwId)
5 b2 P; P2 W1 E$ D. I; A {
+ H# D3 A8 u4 Y8 X. b7 U4 I return m_Item.nIndex;
8 q P7 ?+ `" |5 u }8 Z! C9 n, _4 O1 s( q6 ~- W/ b
}
' L% t* r8 z- r/ K) [ return 255;( m( y& T; ^+ V6 d V. ?/ X
}
- w" [$ [4 `. Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, k. W# }) N! y) Y
{# h2 I- v- z+ q3 i) i8 d/ w
BYTE nTmp = 0;
. E: z$ X' ~3 C$ ?2 R6 I bool bDest = false,bSrc = false;! I# ^3 `( D1 G' h
for (int i=0;i<MAX_INVENTORY;i++)
+ U5 p2 c7 ?+ ?! }: t* ^; | {/ s# n, n; z" v- u' P# L$ X6 k9 _
if (dwSrcId == m_Item.dwId)7 U7 Y5 N4 {9 ?5 h {. [
{8 B$ S8 |5 x# r m
//id相等 则 改变对应的dest和src. M" A& j" V4 O% c5 {+ y
nTmp = m_Item.nIndex;9 C( \9 g+ c7 X( D7 b
m_Item.nIndex = dest;
; r1 x1 O1 Q6 ~! S }
- Q4 S# y% E$ y* p: D8 D4 k' N }
4 A5 X$ ^. `# g) p' H# x //临时数据保存完毕,交换开始1 Z" U" U4 P# \, L _+ K/ ?
for (int i=0;i<MAX_INVENTORY;i++)7 O& w& c. d8 ~- O& r! z; J
{3 i" t2 R' r6 J4 y8 N, \% y- W! K$ D
if (dest == m_Item.nIndex)) A7 o% z# s/ x. c$ b1 O
{( m3 B1 O: @& @. q% L
//id相等 则 改变对应的dest和src
6 a Z% v3 E% _( M+ q# l m_Item.nIndex = nTmp;% ?; j, a/ H* ~6 y
}0 }' G: ]. l* d! o/ j
}
5 @4 w: h+ m" ]- e: q6 E# o1 N}
" f6 `: K( O/ |9 X% o};+ o$ g, F/ n/ G4 U
-------------------------------------------------------------------------
( \# Q$ T- b+ l0 v4 R2 a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 K# A" h' L6 Z0 @5 K
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% z* d9 u& P- w1 p1 r; a紧靠其上添加:
; N& A* Q" F6 u( P0 R) Hif( pWndBase == &m_wndMenu )2 B- g& b# i7 l/ i/ n [6 Z: V
{# `4 d6 {9 i' `
switch( nID ); k* F( o1 l- S
{
) e3 N- }8 S: j, T! M) j case 2:
% ~+ v& V6 f4 J8 g7 x; f; f' V l {
2 ]4 q7 o) W& b2 G0 y& n1 N7 M //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" ~" Q8 Z; o$ Y( M5 h6 m6 y) E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' L+ v3 f4 i9 J( Z2 M
{. g0 ? ?# U* S. S. x
break;
: t, E+ A1 r- p i" u0 O }! `6 a- X$ h# c8 f/ s( |' Y
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 E) E( @! A) w0 x8 d
{0 B5 M2 u4 [. z! g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ g: O/ C4 T: [: \, M7 f
if( !pItemElem )0 j ?4 A X$ g7 \! `! _7 W
continue;% t4 f1 R; z5 Q- u3 Q: }$ _$ a! l; f: U
if(pItemElem->GetExtra() > 0)
0 `6 W8 ~& q& @ continue;
3 }9 m4 c: ?/ j# X; s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ f' n7 D, T, a0 T W continue;
4 N( Q, Q E# I; j& D if( g_pPlayer->IsUsing( pItemElem ) ): b, S% A$ X0 J( C* o" t
continue;
6 K' O+ [0 Y6 H' F0 B if( pItemElem->IsUndestructable() == TRUE )
# X! p! y3 \3 A' z8 w f& G* _ {
4 Y9 Q' c# ~: B* ]8 T8 y: c g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. R4 c8 I! J# g- [) Y' m, X4 n/ A
continue;
/ I% U- V5 F/ Z$ @9 E5 p w$ f }* A/ H M s/ B8 r
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 J2 d" w _; }4 X( G* B" z }- t; f4 F f3 x. U" t4 N
break;
T" h' d2 ^! O% t }) |# R9 n d! x* Y" a
case 1:
O/ ^; P2 D- n! S+ m {5 z% n; Y' {% p8 v1 f4 ]' P
//整理背包
$ w0 m! i6 z2 J$ W/ Y //////////////////////////////////////////////////////////////////////////
' _4 A7 R: v. n3 C7 j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );0 T. r Q4 N9 Y' D9 n
//////////////////////////////////////////////////////////////////////////
: p3 N# T7 o4 W" u/ Y //////////////////////////////////////////////////////////////////////////4 X7 E. ]6 ~% G1 ^5 _: N
CInventorySort* pInvSort = new CInventorySort;. e0 y5 D) b3 m8 ?- t
vector <sItem> vItem;; B% {: `9 J" }* t7 g
vItem.resize(MAX_INVENTORY);//初始化大小
$ M' b; _. z" f) u9 N //////////////////////////////////////////////////////////////////////////8 C4 P9 E5 p- c4 z; q/ L
//填充数据
0 ~& S1 b6 H) B4 E& i3 a2 b for (int i=0;i<MAX_INVENTORY;i++)+ E9 L5 |4 U% b; K5 u
{4 f5 k5 Q* I6 q2 X; Y6 O% |
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 i/ Y! A0 k" E# d+ Q if (!pItemElem)
0 D3 C' @: p1 s2 Z {0 h. P4 o1 C, X1 v/ D$ Z5 U3 Q
vItem.dwKind2 = 0xffffffff;
! `$ I; h" T0 v vItem.dwItemId = 0xffffffff;
% E3 ~ p; `: `* M vItem.nIndex = i;8 k! f2 g* {9 g3 ^6 \3 ]- c" z9 T
}else {
% d/ g0 M& P+ f/ g. A7 a ItemProp* pProp = pItemElem->GetProp();$ j( g9 n* q+ G3 O/ t: U5 A- d$ b
vItem.dwKind2 = pProp->dwItemKind2;
1 B+ U8 Z8 W! z9 Q! {. i0 \% ?1 x" V vItem.dwItemId = pItemElem->m_dwItemId;- m1 H) p4 E+ v* C! i3 F8 g
vItem.nIndex = i;* `7 [ |* v( W, N0 z4 I2 z# K
}( n8 G1 g/ E! t+ [/ u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" s# \( J$ @: D! [ }) g7 p0 O. z @. i) ~
//////////////////////////////////////////////////////////////////////////7 |* B! g. ~% O8 W1 ^1 P8 r0 H2 e3 C
sort(vItem.begin(),vItem.end());//排序# X# c+ x5 _' z7 K: M* S1 e
//////////////////////////////////////////////////////////////////////////
) x- I; _7 c G. T5 c //交换* S3 f! S B8 s) v
for (size_t i=0;i<vItem.size();i++)# `' j M; V3 G' s; K2 `. c
{
8 P T( x" z4 `( E2 e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* t: L5 L9 g, x" b( A
pInvSort->Add(vItem.nIndex);
2 }1 K: q. }: A, P6 ~/ ~ }
5 o( z8 p1 U# L' m$ b BYTE nDestPos = 0;: w# u0 B2 H4 y2 g
for (int i=0;i<MAX_INVENTORY;i++)
3 _3 ^6 @ C n- y+ i: b! Q {
7 V/ Q0 K- ~9 ?7 V: H# X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 N+ C/ L" p7 \9 V8 N if (pItemElem)- f; s) r. ^2 D7 N; U
{
( }7 U3 G# b8 l, [6 q/ R" P if (IsUsingItem(pItemElem))' D+ l- d3 w) V( \
{
9 b2 y8 ~" y i //这个位置无法放
/ `$ H' I$ V/ l( E8 } nDestPos++;
- h; D( j; g# J* T1 l1 e" s) z; e }
: R, L% W' A( K }! \( b+ D, r: b- d
BYTE nSrc = pInvSort->GetItemSrc(i); x; r I" W5 O! [& G- z" I+ x1 Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: a8 ?- r! O8 s7 G- h
if (pItemElem)
5 Y" X% g! v3 C {* `( H+ p5 H4 h/ S
if (IsUsingItem(pItemElem))/ g4 @7 b s) R) |
{
: [( ~3 Z! h3 z9 n( w7 ]/ b' m //这个道具无法移动,跳过6 d6 X9 i/ {9 n9 a6 G, x5 L3 }: K
continue;: m1 s$ |% T; G$ Z
}
' z2 m+ D( _( F. Z5 r x }else{
2 o( @+ ]. d1 @7 O5 {1 w, ~: n //空位置 不用动& `( Q, H* r. N8 m" l
continue;
2 n. `' n% I, L3 m }7 Y$ {0 ^$ q, v# _: ?8 N. o/ `
//////////////////////////////////////////////////////////////////////////4 j1 b# p8 m- }, M" N& i! Z8 K
//开始移动" e: @. X) {& G0 c$ e! D s, o
if (nSrc == nDestPos)' B' s) y+ y& w! V. ~
{1 w+ T) M! I+ O$ B" j
//原地不动
3 p# h: @. ]9 a nDestPos++;% ]( `: Z. Q2 b* J2 L% z* S8 @
continue;2 B) \, b) F. g2 l1 }! K# L! c
}: j2 U# Y. V: y5 I' p' z2 C8 H& g6 l
pInvSort->MoveItem(i,nDestPos);2 |2 j: n5 U- ~8 k5 ^+ ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 I2 u3 Z. y) l8 O' c/ P. o
Sleep(5);
: m; k: X+ P% S1 r. q3 H7 X //Error("移动 - %d->%d",nSrc,nDestPos);6 T9 t5 L5 g2 R7 }3 }9 l! @
nDestPos++;
7 P: l8 m0 s1 O; k1 U1 N* |$ k9 Z% F }
5 }) A7 _& _+ h7 r( w1 s# T( D8 d //取第一个元素的信息) q1 C6 E$ ^3 Q; ^' F( ~; A; D: u' _7 J
/*6 H& ~0 ]8 k( ]2 N
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 x; M/ J3 e: H {
' O* P" k' s( k2 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; [2 X, i) y9 L( U' h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ w/ \ I$ d( H* h$ c' {2 F% M
}
2 y0 a2 D: c; u */
1 _6 Q: K* G3 M" | M8 R7 D6 f //////////////////////////////////////////////////////////////////////////' t4 F) F% s2 v. t
break;
9 N; O" ^1 V' O O6 P0 u w }& G! e; i% A& [' k
} ) s7 V+ o( e$ P( i! Y
}3 \6 m- Q, o; p/ n6 g
m_wndMenu.SetVisible(FALSE);. K# D" k9 C) Z) Q7 S1 K# N0 p5 g" t
. K4 O |; M S9 H
--------------------------------------------------------------------------------------------------------* J' ]3 o5 b7 O/ E# {
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). w4 B0 N" P2 ~/ o; Q
{1 v. V1 {* T% m; R$ `% F2 D+ Y
BaseMouseCursor();: a# Y+ n' T& q4 @1 u
}
3 p, a0 S" w7 o& Y# y; y( B" l; p+ l) q在其下添加:2 G& H g a% V( N; D ]
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 x2 I' ?6 K% Y7 T{
@3 P% G2 |, H1 V' qm_wndMenu.DeleteAllMenu();
7 x7 ^' w1 l4 o: D3 M3 F3 \3 fm_wndMenu.CreateMenu(this);- y/ G& I) y/ w& A' ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. n o( G# A/ z1 u. q8 @! {
0 M, o# \7 `0 W6 M3 a7 \if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) {/ p0 f8 c9 I) d1 q! i( T
{( k% m! ~5 x8 q2 S! k
//P以上级别才可以删除所有道具/ l: t+ r1 ^: `' R
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 M& I5 t. p7 Z' d5 I* j}
3 C7 J; y6 ~) }' O3 R8 Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 r9 m* d- R( P. c0 Q2 @
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) H5 [& k* e/ `8 C$ Z9 ]m_wndMenu.SetFocus();
" h2 r+ |7 [' B9 V. E8 m1 |}( d+ R' K& g8 R1 P3 u1 y* v, h
------------------------------------------------------------------------------------------------------------4 S9 {* A, }6 H6 m2 H
*************************1 S1 o5 s6 G+ S9 w' ]3 _1 L. `
WndField.h文件' C* o$ O5 B& `% v7 m4 m( c- ^
*************************
6 F, E* f3 u7 c9 ~( K搜索:BOOL m_bReport;
# B. Z8 M: i2 l其后添加:
' o X* \' T! ~& iCWndMenu m_wndMenu;6 n2 a9 G F' z7 ^& u& e, S4 G# t
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" ?: Q. V) i* J( E2 S
其后添加:
& r% m- ?4 u- Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 A7 S1 q- m: s, f& M9 T( _- H; _, [5 a. p' h1 e
$ F( o/ _: T9 {. Q( k$ X5 L# m& U |
|