|
|
源文件中_Interface文件夹下WndField.cpp文件
7 y! k2 S6 H4 F- b, R1 p搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 C( t- O4 m/ T; N* |
) q, h5 N" M* [, ]struct sItem
7 Y% d S& O6 }7 c3 |2 d, V{( p6 ]7 {8 k: F$ A/ u
DWORD dwId;
, S, |; `) E: u0 J4 M& s* g- uDWORD dwKind2;
7 |8 W7 [+ f3 ~' c& B7 M# w) M4 H, qDWORD dwItemId;0 E* p, s* R+ H: [4 m
BYTE nIndex;
5 j$ K1 O# W6 b8 ~5 nsItem(){
8 w& w. x5 W. j/ ?0 d4 Q1 y dwId = dwKind2 = dwItemId = nIndex = 0;( \5 R2 J* c9 L6 ~ y
}2 S6 E; P% D7 a8 o2 h
bool operator < (const sItem p2)) T m: W5 r' k$ D& i* R' t
{$ X3 l' ]% m' E1 f# M+ L3 j
if (dwKind2 == p2.dwKind2)2 {) z* H5 A7 p Y; G/ F
{7 [1 m8 L# t5 z& }5 b
return dwItemId < p2.dwItemId;+ Z- c' G$ r6 m. c; `# `
}else{9 J- {% j; L& }+ p3 f$ Y3 ^
return dwKind2 < p2.dwKind2;+ l0 Q# d3 y( k$ x, F! a
}
" S. R" O$ o* B9 L}
! B9 M8 p9 S7 x% m3 U* R( X};- E4 a- M/ @# r7 Z: H2 z
class CInventorySort% N/ [+ Q; [6 v
{4 j, e0 `6 L' E) b0 Y% q
public:6 Q# A8 I/ z8 X8 P
CInventorySort(): {% x( O8 u* E3 \) w6 t+ Z/ {& v. w
{, T' i9 z& s0 G" {! e' {. K
m_dwPos = 0;
% d1 f/ Z2 x- T5 T/ T$ e}
7 |" B7 U a( T) A3 i~CInventorySort(){}
6 h7 B9 [# \& X n. k4 H4 g8 L; vprivate:
8 T. t9 b; V" p2 b1 FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 j$ @5 }' p; J
DWORD m_dwPos;
4 ]1 e m- F7 {" ]/ H) F1 bpublic:1 S/ R) `; a! h3 z& U5 U5 I" a
void Add(BYTE nIndex)
5 g: i- D* F! W# H& ^+ e{0 ?2 d! A, J& j/ y
if (m_dwPos >= MAX_INVENTORY); ^9 U) G+ ?! A
{
( X3 y* c# c3 f4 [% t0 ` return;
7 Z+ Y1 {2 I3 x0 ?4 O& i3 e }7 E$ }- u3 T2 ^5 i. P# E
m_Item[m_dwPos].nIndex = nIndex;" [& Y4 s0 z1 z: z2 m5 I! {
m_Item[m_dwPos].dwId = m_dwPos;$ d; V h! h9 P! Z
m_dwPos++;2 l; Y& }7 x; I% C4 Y
}2 y2 ]) Y' S) J5 N% f# e0 P$ j8 H
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" g; C- Z. ]+ ~6 S* m{
' _! ?1 M5 A/ q; g" B for (int i=0;i<MAX_INVENTORY;i++)
% _5 g& f" H5 i$ v {5 M4 S; B* l# k- b
if (m_Item.dwId == dwId)
& ~8 R4 f: `: ^6 v( A {
" N/ F0 m& @4 s, y! t% ?5 @. S/ M return m_Item.nIndex;
( B& }% t g, L, ]1 r/ ^6 { }8 _# H# U8 l6 L" \' Y( W3 {! r
}3 D @+ u' P( F- Y5 b
return 255;
9 O5 G2 E3 @- j/ c7 U! ~. [, i}
8 D4 z4 y, e- r' ?8 ?void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) w4 o1 k% p$ y" }+ o3 y V/ t
{. @! D( H; P+ w9 X! \" A
BYTE nTmp = 0;5 k# K. z$ N4 `
bool bDest = false,bSrc = false;
! ?; k A4 G/ O: v for (int i=0;i<MAX_INVENTORY;i++)
6 Z6 S9 e6 I. G x7 E; s9 V& X: [ {
$ B |. U- F+ f: h K if (dwSrcId == m_Item.dwId)# j7 v5 ^+ V% h0 c( C
{
. U+ A* U* L- {! d3 u //id相等 则 改变对应的dest和src
+ p! X8 _2 Q4 B7 _3 ~ nTmp = m_Item.nIndex;
% X) `2 @4 Y4 W; d# E m_Item.nIndex = dest; S" p! A( z4 L/ S) i( w
}
+ h2 O$ W" a2 m# F4 P }5 L4 Q, G( U5 V" Q9 k! g) P/ }
//临时数据保存完毕,交换开始
. q& N: A$ O' a- J9 _0 C1 M/ R5 ~ for (int i=0;i<MAX_INVENTORY;i++), v7 M; _' y6 h! I, T& l
{
# B1 w' b/ _2 @ if (dest == m_Item.nIndex)! }& q) r$ D8 H# {* a# x
{. E- M7 O- Q7 b
//id相等 则 改变对应的dest和src3 d8 R( j* e& `2 c5 I6 Z* B
m_Item.nIndex = nTmp;
e$ A r% x2 a/ g, `7 Y; e' P }' K8 ^* U. E5 t" F L
}
9 A+ k3 c. i; ~- |$ ]}- H# S0 r5 z; ^
};5 I+ A; J% j! k! e9 i/ K
-------------------------------------------------------------------------
( d* x8 b4 n4 v9 g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ [8 D" T$ V+ g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; W5 G2 }) q& N7 ]$ ^紧靠其上添加:
4 _ q* f4 b, U7 Lif( pWndBase == &m_wndMenu )
& d& D/ ~ k( a. y0 s& R% B( U{* Z, S, z6 F8 s
switch( nID )
3 @* j/ |- w( g {5 M# K8 h1 C0 D2 p+ W- N/ z
case 2:2 b. L* v# T. F B p
{
6 x/ C% N' N" J( x //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( S7 c/ C, A# J" v2 b$ `3 z) O' y
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. Z; j5 q- \0 y! T {
! g5 ~ K5 H$ G! `5 t break; q5 K6 Q' n: m+ Y
}
* a) y2 E; K& z/ I: Y3 l& G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 E3 j( N. L. E( ]) l {
# X; J6 k. m ~6 S: t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, D l; s2 v) |7 l1 } if( !pItemElem )' t/ |$ h) m# x4 a+ I% A! o
continue;0 l/ c! U' C0 F& p# f7 n# J
if(pItemElem->GetExtra() > 0): \+ u; A, `" u# z, ~
continue;/ K0 @% p6 h# T+ Z/ q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 ` [( e. f: \5 c
continue; S% J& [. V. y: v4 Y
if( g_pPlayer->IsUsing( pItemElem ) ). M! b: n7 o& I A7 g% W" k
continue;9 B M# X/ m/ y" g1 J i" I* Q2 P
if( pItemElem->IsUndestructable() == TRUE )$ a7 s/ d. n# M$ Z& I, K
{
) ^ K) K6 Z1 V g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 w0 Q3 J+ x( d) m! ]% x9 u# W' S continue;& X( F7 b9 G& l4 \: U$ [
} [! j$ C! h: V/ w6 \- A
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);' T$ y% Y! m3 `7 V5 u
}
7 z7 V6 ]* R5 ~! G( t3 h break;( ~1 G. P% `5 I; n. A9 U4 B
}
9 G' y1 K% V# k! h& @& t case 1:
4 J- ?: B9 k m6 b4 H7 J+ L6 u. j {
' p& g: p5 W6 f) ~3 Q4 i8 [0 J //整理背包+ \. k' I1 j0 q* G
//////////////////////////////////////////////////////////////////////////+ i" i0 `7 U9 s7 ~6 m! S
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, h2 Q$ O( T3 ?6 k4 k- x
//////////////////////////////////////////////////////////////////////////! u+ F1 a3 t/ u/ \* Z
//////////////////////////////////////////////////////////////////////////
' M/ M/ n. X; E CInventorySort* pInvSort = new CInventorySort;# P! G8 s- w1 k; |8 b
vector <sItem> vItem;
/ A6 I5 a) P; P9 j' q vItem.resize(MAX_INVENTORY);//初始化大小0 ?/ K6 o! k6 k; L" }" Q
//////////////////////////////////////////////////////////////////////////$ H: L' M( E) q/ A
//填充数据
5 g, F" b; D: b6 \6 n3 Z for (int i=0;i<MAX_INVENTORY;i++)9 K0 V5 m) _6 t+ {6 y
{& V6 s- s7 \5 {5 F& g9 I/ t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
x( U/ O4 f' p* _ if (!pItemElem)/ J0 W# u* y6 W- L/ l: [8 d
{' I# d" N' Y+ x0 x
vItem.dwKind2 = 0xffffffff;( c* ]3 K1 W3 S, Y, O5 l, q3 S1 A. ]
vItem.dwItemId = 0xffffffff;8 M6 r9 {. N) `! V; s
vItem.nIndex = i;
4 D0 J5 F, ~) N. ~5 G: O }else {
5 F, x. P, ~ u6 Q& M9 q. ] ItemProp* pProp = pItemElem->GetProp();. V3 H, r/ K5 Q$ p
vItem.dwKind2 = pProp->dwItemKind2;3 O& G- e- r/ \5 l& x5 r
vItem.dwItemId = pItemElem->m_dwItemId;! m# _$ J8 o- F( ?# G) G; o4 O" M
vItem.nIndex = i;, T7 H+ @7 F/ o* z
}
' r9 L2 w3 A2 K& M! ]/ x2 B' N8 A //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" w2 H2 o+ d! F' {2 r }1 c. v4 N4 Z4 n8 G, B. `3 y3 Y
//////////////////////////////////////////////////////////////////////////
# d6 c; _- t4 R! D, G! E sort(vItem.begin(),vItem.end());//排序. u! m9 e( P4 D0 S8 B' p8 h
//////////////////////////////////////////////////////////////////////////
! J7 q8 g, d& l //交换
$ H, F" W; k [! }8 n7 `5 i3 n( } for (size_t i=0;i<vItem.size();i++)
) ^4 R3 Y& z0 F {7 x" A1 m" Q: ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 }! v1 V. W; ]8 G, {, H
pInvSort->Add(vItem.nIndex);+ h: O6 {' m! V S
}
( p2 x- x7 f: H% q" D BYTE nDestPos = 0;/ j1 U" T# v- I5 ^5 L* } W) E
for (int i=0;i<MAX_INVENTORY;i++)
% T& n0 A; t C3 `9 } {
6 k# ^3 q5 A8 ~, J4 w; b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# z R; [$ F3 c6 W+ N' x, |$ N
if (pItemElem)
, d9 m+ _, ^& B {4 B5 H/ a* h& I6 s
if (IsUsingItem(pItemElem))
- w/ d3 Q& X& U3 G/ x4 N- x% Y8 n {1 K& j, R' h* K6 q( f$ }. S
//这个位置无法放! t4 w# f: V* Y; v; O3 X
nDestPos++;
! c& T! o" M: S! E. E( p2 D4 V; m }
. P$ m7 I- e7 h3 _+ f5 { }: c) I% b+ j- r1 [# K
BYTE nSrc = pInvSort->GetItemSrc(i);. y- u h: e0 t; n4 H# W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);& t4 j4 K4 r4 q: ^, v$ _, [& V4 ~! l
if (pItemElem)
$ f- Q: Z; q. h$ z' v {
- F$ f, w7 l. ^5 K% v% I8 a if (IsUsingItem(pItemElem))
3 O8 ~1 m$ e |- n- v {
; J; o Y7 |% f- e //这个道具无法移动,跳过, z2 J; u Q0 p0 G
continue;2 f8 a7 |& ?. G% _
}% T# I. O9 K8 p
}else{
4 u/ r, l/ H( U* R6 E J //空位置 不用动
4 N" K% k2 P* B. N6 R! D( b! w continue;
! ~" y* u* V: \3 k( w; ] }
: a9 L1 q2 G7 O: C5 ~; U //////////////////////////////////////////////////////////////////////////
' L* m, A9 d! U5 i. A: D* p //开始移动
% H0 O6 ^% h5 f; U" T) T$ J+ K6 T if (nSrc == nDestPos)
0 H! r. P6 g% ?& H {0 v. q5 ?% V) T9 c
//原地不动 O3 U# q2 _( r4 t8 h
nDestPos++;
( X2 |5 A9 F' i4 e9 S5 u6 t9 U% y continue;
/ y" n2 }' {* L5 ]2 H; n }
$ p- }* t: x0 u% R" ^/ k pInvSort->MoveItem(i,nDestPos);/ ^3 D, w6 g# w! b3 H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 @4 y9 S% D; r' p Sleep(5);
/ s/ c$ T/ S4 V7 H9 u4 b //Error("移动 - %d->%d",nSrc,nDestPos);
$ `% ~ x/ D0 d& b: h! z. ` nDestPos++;
4 }1 s/ C* B8 q3 L) U& p+ B }4 D& ^: \1 k+ k0 p# V) d# V1 C
//取第一个元素的信息
Y+ e/ ?8 B& k /*
! c# M% _2 u! i, Q' l1 _+ V3 \ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff): b) q( A$ F; x2 p& N5 z) ?
{
' V2 `9 x$ W, B4 I7 V- |( x7 [) p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" y0 h. N' t% T! g+ W) B" ^2 J
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 M1 a. l$ x3 x5 r }# X0 N) X& a* x! U2 q) f$ T9 T
*/
6 I7 Z; O( T; n6 E( A //////////////////////////////////////////////////////////////////////////
( N0 c9 n- W. G' }0 T break;
2 q. N+ J7 I8 x; K: H) |4 R7 _ }, Y% [/ V0 ^1 H# a4 d
} : e6 Q% @/ S# M9 d; ]1 r
}/ T' T3 U+ h4 t
m_wndMenu.SetVisible(FALSE);; E3 f& y; l* |
1 p8 c* m4 Q2 m& y& ~' _
--------------------------------------------------------------------------------------------------------& E0 V3 W/ z. ^* |- Q
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 ^" i/ |4 _- M5 w{- T4 ~% B' X7 k6 v% c `
BaseMouseCursor();* @0 p# Q8 S0 M4 j( {9 V
}
/ K# Q1 D k4 Z! B) f* H在其下添加:4 l% J \6 s/ q" A
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& V7 K: d# n8 W0 w% W) D{
, R2 D: [" V" G, Rm_wndMenu.DeleteAllMenu();
2 n4 J2 z. m# i6 ^( o7 A1 p% ym_wndMenu.CreateMenu(this);: v& i/ \" B1 n. O& Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ O: j3 v3 C& d' j8 C
' l# J- q: @8 Z" Xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' x4 ?* Y8 O. D$ z U8 p
{7 }6 a U6 Q# w/ Z o2 I
//P以上级别才可以删除所有道具: `' F% P' u8 K
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 F) w$ w8 k; b4 i: J0 f0 [8 i5 C; t}
0 O5 ^% |" M" ^& I. V$ Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 a- W% i& N/ c+ C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
$ q# \7 F0 ~- S3 S' Rm_wndMenu.SetFocus();
/ k( G! q, L: I% @% l}
' o$ ?. w2 U* Z1 ]' R------------------------------------------------------------------------------------------------------------
U* b( `# L3 I- K/ C% E+ H*************************, u# c, J" C q9 q% c+ T' }
WndField.h文件1 E" H) \8 {4 s$ b5 h+ z
*************************
1 Y) W( m7 w' x搜索:BOOL m_bReport;7 L3 s: E+ r$ T. f
其后添加:4 d3 U" q% A" e* I
CWndMenu m_wndMenu;# o' E7 @' f, a J j! |# |) D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( `/ E- { s: h其后添加:& _" p& G8 @6 u F/ Q
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 j2 T. R( {, c$ h1 B% B* p( |1 ?' e3 M
5 i1 Q1 r! N* Y, c# L |
|