|
|
源文件中_Interface文件夹下WndField.cpp文件
! |, ^# E$ H s搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ K" T( _: Q0 h4 v: z
1 O& r- q$ `- t1 vstruct sItem/ M8 R' e! c4 K, _" x7 B. J
{) y" C) ?/ F: r
DWORD dwId;
! j2 i! E5 Z) p* S1 l% m: U- j* B. iDWORD dwKind2;% o/ q) n/ y( g& j9 t
DWORD dwItemId;3 d0 q. ?+ H% p( Z
BYTE nIndex;
4 u& @. T I6 _. I5 ?1 esItem(){+ E% G% ~: [; j+ `( j
dwId = dwKind2 = dwItemId = nIndex = 0;% K" ~" j; O7 W* Q
}/ s7 T# @5 ]. Z( u) G
bool operator < (const sItem p2)/ a7 a; ~: r' `1 p( k! c
{
+ Z# G9 |; p) E0 }( c# A+ y0 N if (dwKind2 == p2.dwKind2)
( l5 _; b' ]) V+ W8 K {1 |, ^! s6 s; h, ?
return dwItemId < p2.dwItemId;! l) ` I. f3 u" d
}else{
* Q- s( V! f- E return dwKind2 < p2.dwKind2;
( ?- Y5 i- ?$ X- P }
" s: h. r$ b) M) } [: y}) @. C8 h" c4 | F, b" w
};; b; z- q+ j& c8 u1 F' U( w
class CInventorySort
+ \; R+ j' e) g{ A! w( t9 K' V
public:
- a' C' ^! Q$ B$ E7 r: ]) XCInventorySort()
& z# X6 ?/ } I{
" L: p* n2 p$ e: v( m- @9 V* X: [3 ^& } m_dwPos = 0;
1 Y4 C. S. ^ C0 [' q9 m5 j4 F1 r}0 [& [& @) \! |/ R
~CInventorySort(){}
: {, a S( u) t9 b& N. bprivate:
2 ^; ~% x& }1 E/ Q2 z OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* k2 e9 u, Y e. U8 n) A
DWORD m_dwPos;
' X/ K9 q Y6 b9 `public:+ v: ]+ |4 Z% U9 `
void Add(BYTE nIndex), s4 P6 Q/ J5 t" C
{3 r& O; n8 f& o1 s. S2 T
if (m_dwPos >= MAX_INVENTORY)
; [2 r5 [ ]0 V* [ {
- W# [7 F3 }7 ?3 f8 V4 P1 n7 Y return;# f' W; o. i8 J H% ^) n, s
}& K7 h( ]5 n A8 X' O
m_Item[m_dwPos].nIndex = nIndex;
6 z4 A* M! q6 S$ c, v m_Item[m_dwPos].dwId = m_dwPos;
. t8 g" |: p+ Q9 v7 E1 ~ m_dwPos++;6 n( q/ R% `* q+ Z$ u F
}$ i4 v: d. v& M' G1 x& w* H* f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ w7 d( N( Z: D) e
{- t$ ^! z- V$ F/ @( j
for (int i=0;i<MAX_INVENTORY;i++)8 \7 h; j5 f3 {6 R. D
{3 y4 K7 k- q% B5 e8 z) q
if (m_Item.dwId == dwId)6 C: n, A2 f$ b+ k/ B" M2 ]
{
0 d1 A6 s( `% O- c! {/ c# I return m_Item.nIndex;# C. D; L* x" A$ W9 g1 z' h
}. V/ p7 U( u- Z7 O; B
}! Q; _$ t9 S0 M: j6 I9 i5 j
return 255;! v" m: C! z6 z
}' a2 Z2 _$ P/ u/ r) N5 W
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置+ k. @* _, ]$ ^6 H
{
) f' Y" m- i: f BYTE nTmp = 0;
$ ~5 H( E3 f' `, Z' ] W bool bDest = false,bSrc = false;, U1 ?! l [; l/ p
for (int i=0;i<MAX_INVENTORY;i++)
f0 Q6 M$ p/ \& _- b' Z3 J/ T0 L& E {$ R# { t+ K, B7 s) O
if (dwSrcId == m_Item.dwId)
$ J: `4 j1 |. r1 r" a! l6 W {
: ~7 }" Q5 Z R ]/ ~ //id相等 则 改变对应的dest和src% b Z7 |$ G, o3 C- V/ |
nTmp = m_Item.nIndex;
$ o) z* o& h; p {) @0 S m_Item.nIndex = dest;3 \/ n. ~( y# n& f- R. M: _
}& H/ p9 W* n3 T3 M' o
}
9 q/ r2 M: I' H) o9 ?; U0 N3 u //临时数据保存完毕,交换开始/ L8 ^# {" h/ l d: N& @7 ^
for (int i=0;i<MAX_INVENTORY;i++)
7 v- Z' J/ e* h! p0 L+ D/ G {/ g s2 Z5 @, F; b& V T
if (dest == m_Item.nIndex)
% O) k; c- q6 X$ v; I' G {2 o9 p# u2 @4 g# x& u4 I
//id相等 则 改变对应的dest和src
+ y# P f% _5 {& I6 s7 A. I5 e( N m_Item.nIndex = nTmp;
; u9 S# R& r/ H+ A }5 B! \2 N* ~# k2 ^+ Z) z) ]& ^" J
}
- O& ^" x# x7 {% z* w}
1 o: h" X3 V2 v7 V};0 S+ |' I+ T- e4 Q6 \' g
-------------------------------------------------------------------------
! w5 S% e0 y8 |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). }! P" I/ T8 q# i, O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ H* t' O: B# F9 G5 @
紧靠其上添加:
3 F9 r. C! a+ {* Zif( pWndBase == &m_wndMenu )
( w2 l( m. r; t0 W/ z{, s1 b) ~/ A% z; \
switch( nID )
6 G( d& ]6 P1 G& h/ V4 H0 `. i {
2 h) k. t7 J, \1 K3 n# a0 D case 2:) w5 x! D$ n# V! \2 r1 s& w
{
' M2 s+ w' N. i2 Q6 e( }) x3 Y //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! }6 f' k( D' {3 F/ J! ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 D9 v6 C* w" C- _% G8 R9 C
{
* ]. v* D- m( \ break;, q8 E- F4 }$ B' M% s$ L0 W( v
}: L. ~' d# B: {% u+ N& h t
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ v* l3 X2 } [) n" V6 ~. b {- \2 L5 ~$ w& B! R5 l$ m! g1 G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, v' e: [/ c) P0 U! r if( !pItemElem )
! q5 n/ N$ f& F$ q0 @ continue;* L! c) a9 c( o! @/ E
if(pItemElem->GetExtra() > 0)
$ w& O. J: O& v/ u' C9 W, w continue;
9 l' x% Y' B; ~- g; w- t5 F* G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . {, N% }( S7 T8 K0 y
continue;
+ I. u- K# ^4 w3 H* ?' N if( g_pPlayer->IsUsing( pItemElem ) )1 @. L2 @- r U/ S+ r9 M F: q
continue;
0 \( L6 M% E/ ]4 P) `. Y if( pItemElem->IsUndestructable() == TRUE )3 N8 x( k' s* O! M7 \ ?
{
5 @9 W* W2 Q9 m: T8 K& v! ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ _, F& x+ J2 v0 ]- {( D% v
continue;+ e" @( f1 ]0 {
}9 j' j4 d# d- o" a( t' d" u6 c
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# v9 H+ E6 P; Y- q" c! r9 V7 ^" l
}
+ j, {% S9 o: G9 E- j( N, @ break;& [5 k8 |9 T/ a* n& T
}
: D4 s9 ?3 \* [# _* y0 K case 1:6 v- @9 c5 c0 w; t# [6 }0 N4 |5 x
{* P, N, H$ E4 P
//整理背包
B, Q% e* F4 K //////////////////////////////////////////////////////////////////////////1 P$ }. P; _# P$ I- r" w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
2 c* L( x( g# f* v- Q/ C7 ^ //////////////////////////////////////////////////////////////////////////; B7 U+ K. w: Z0 ~. \( E
//////////////////////////////////////////////////////////////////////////( l2 ^( o1 ? Y
CInventorySort* pInvSort = new CInventorySort;
, y8 p/ h) J. s9 I. o vector <sItem> vItem;1 P8 P( B6 x* r# X' C6 w
vItem.resize(MAX_INVENTORY);//初始化大小0 n+ }" X# b2 O+ I: b Q
//////////////////////////////////////////////////////////////////////////6 w" }: O# H: x0 c5 v
//填充数据" I y7 _ \! x0 K) g' z
for (int i=0;i<MAX_INVENTORY;i++)
6 o; e) o+ S4 l1 Q4 N1 n* h) O* B {' u( X: f( O2 D0 P% n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% ~' p% [; G/ N7 F" z
if (!pItemElem)- Z1 i4 ^: k% H6 V
{
: x( Y8 t! u5 f/ F3 U vItem.dwKind2 = 0xffffffff;" H- @. L" n8 g* Z- a: c
vItem.dwItemId = 0xffffffff;
5 T9 @0 S. J1 ~ vItem.nIndex = i;
& g- g7 X2 i5 r5 L% I6 ^ }else {" m# J# L9 D% k8 d4 k4 x
ItemProp* pProp = pItemElem->GetProp();
. [3 [" `* x3 @; [ vItem.dwKind2 = pProp->dwItemKind2;
$ c1 G; i4 a* I vItem.dwItemId = pItemElem->m_dwItemId;
: W, U: V6 x3 j5 {/ s- e6 G vItem.nIndex = i;
: H- O9 v4 b4 t2 O. R% q, V }% r3 S+ b' ~- J! t% `( `
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- u" `2 V( I) X5 w
}
" p& G( H; r# E //////////////////////////////////////////////////////////////////////////- n/ P" r, K$ B
sort(vItem.begin(),vItem.end());//排序4 i% z. f7 c0 D% K7 k3 u
//////////////////////////////////////////////////////////////////////////
3 p! a. ]+ A4 K; }: K+ Z2 s //交换. d6 f. Q2 c8 H R, r/ j
for (size_t i=0;i<vItem.size();i++)
4 p1 t0 y/ l6 R+ a% c7 d {
5 }+ E7 h1 K8 U- r) m: f; h //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! c9 k3 d! R# X" |# v pInvSort->Add(vItem.nIndex);
% ~# x+ O9 C- ~9 i; T4 r& \ }
3 ]8 o' s; Y# G. h& ]9 W BYTE nDestPos = 0;
4 [* @5 ^$ c& b# o3 {7 U+ U7 I; ?7 j7 E for (int i=0;i<MAX_INVENTORY;i++)
. S, W) Z: M! T9 g {
, I# ^9 U/ N: Q7 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 m+ m# \2 y5 |5 I/ e( y if (pItemElem)1 i6 _( A1 s+ [/ P5 D
{
8 u& R9 z) {" j if (IsUsingItem(pItemElem))
; d) [! y5 i/ s4 j6 R5 O" k g& W {& g! _. a, ~0 s6 N5 I% O! D
//这个位置无法放
% `* Q& y3 T7 A: h( [ nDestPos++;
, x% i/ o$ V. f9 b- q$ n }
3 |/ U0 u* J9 M) e }4 h6 Q6 ~/ b7 Y" I5 K0 n
BYTE nSrc = pInvSort->GetItemSrc(i);
$ t; u. Y* U3 K5 ^ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& A9 N$ n+ H( u0 j if (pItemElem)
4 n. f* c! Q f3 \: x, T2 w+ l6 ] {
! X3 {- {" ~! y! _6 ]- R if (IsUsingItem(pItemElem))2 {; k6 ~7 ]9 k) ]6 H6 l1 @3 ~
{% y8 j/ f, ^5 |4 Y, {5 J' W5 U
//这个道具无法移动,跳过9 y; v8 z- B1 c' G7 B+ v" E( ]
continue;
8 q# F! j4 J% K C }) Q, j6 _# k4 l" g1 D: |
}else{
, R3 j' [( U( r8 n //空位置 不用动
4 [$ d; D( C2 y& k" F! a continue;$ a! Q0 i7 [# o8 o4 F0 g1 w6 O% A
}' C" N4 ~" W6 w0 m/ s
//////////////////////////////////////////////////////////////////////////' h- r- S* j* A, j' z! N; B
//开始移动
. V3 y; n; }4 d$ D if (nSrc == nDestPos)8 }: [3 P+ R' [+ I
{
1 }4 D! A2 [" ^. Q, ^; G //原地不动% t3 a, u* ~2 \7 i
nDestPos++;. q& |; z; ^- m
continue;
# ` i0 T k3 K# Y }
! b0 B3 h' t8 v. i9 w pInvSort->MoveItem(i,nDestPos);
$ R. ~" i% m& L! i g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 j! E' i+ o& @ Sleep(5);4 ~$ ]; g( u9 E2 l6 E- w( N) W
//Error("移动 - %d->%d",nSrc,nDestPos);
) ` v! U4 w9 e& b0 @" m nDestPos++;0 V8 E! U1 n/ {+ m0 [& c( x. n7 d
}0 J+ I: J( s/ P! x
//取第一个元素的信息* }3 M+ \* m5 ^; P* l" z
/*
! l! m, h0 {8 j8 t6 W j4 V' h$ B if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& I9 |" a, ?6 F/ L {
. D, k5 N8 K+ p0 x& b' \" p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! Z7 Z5 T% A& r- D. l0 p4 K: \
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 ?5 {3 o6 F( I8 f }; z& U6 a( s: t" u7 u- v
*/- L& j: q; z. l2 ?+ e: g) r# f* e
//////////////////////////////////////////////////////////////////////////* B; L, k! f, j3 h
break;
& s5 a$ t% T; Z+ E1 S }
' p( ], l# C/ ?/ Q( I3 |( j. i: u }
2 N. V9 K- t! y8 x5 E& Y1 g}
8 R& O" _1 M J! G) p) w/ y( Um_wndMenu.SetVisible(FALSE);8 n$ X1 r% t& \* `! y% T- E8 ^7 M
7 R1 a9 I4 E: M9 J' F0 j% p
--------------------------------------------------------------------------------------------------------
; {2 x! }' ~( r* F4 k) k" A. l0 K l搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: C4 O- b9 v1 }. G& f& Q1 G9 x4 C: ?{( Z, R4 i1 ?& b9 G( @9 C
BaseMouseCursor();
1 z. J% H2 B1 x: f+ D' M) }}
9 h/ g3 T2 m# F3 l g; |在其下添加:
5 ?! W' _2 r0 X9 ^3 j. wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 f+ j4 C2 w& J{. ^5 \" ?" h4 ?$ w
m_wndMenu.DeleteAllMenu();3 b0 h) O, T. C7 z3 X
m_wndMenu.CreateMenu(this);. }: E% t0 Q& I. M: R2 M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
I1 W0 h1 k7 H; s" \! c4 I$ u/ g) A- k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 y# N+ ^3 S& @; {
{
/ E7 z, @2 F& A8 z0 ^3 M( [5 n9 K- k //P以上级别才可以删除所有道具
! |, o( Y% W2 x4 y9 k T m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 b( N$ z" ]$ U0 H5 h
}( J9 g; q& O6 D4 w# P. ~3 [1 J
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, n: |0 Q, p, {; }1 a
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# f$ u* C! h) J; `! v* X
m_wndMenu.SetFocus();
% R$ x7 r6 _; _) }# k" b, u' w}+ P& g/ l) C8 S4 o
------------------------------------------------------------------------------------------------------------4 h4 D; w" d6 G0 m4 X9 N
*************************
7 L/ c0 @" ?2 ]/ n( yWndField.h文件
4 @7 s4 N! v" q/ M% e" i*************************
$ S/ n. e' m/ o( v0 B搜索:BOOL m_bReport;+ F+ D& h9 z' n7 g2 _6 P6 n& ^8 R
其后添加:# j% I+ x) z* s) e' Y, W7 M# k
CWndMenu m_wndMenu;( R3 ]7 u x7 R9 R/ Y0 M
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. {: w. t/ I2 [$ ?, u其后添加:
) S" m( C& V* f: vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 G" X6 M2 V; l1 `; }* K, a2 D, T. \ `! U* u+ ?# V; r
/ y! ^- Z6 P1 d, F, f' \3 @" L |
|