|
|
源文件中_Interface文件夹下WndField.cpp文件! }/ T. B, o/ X$ M# X' ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ^" j3 R! `/ g: J: _
: g9 I: C- c9 ystruct sItem
$ k9 x- L) j+ F0 W5 U{% v- R) f& R* {% l" Q+ |/ c
DWORD dwId;
. Z' Z' M! s% ~. |! }" p. }DWORD dwKind2;1 B/ a% V- ]$ E+ ~
DWORD dwItemId;
6 K0 [' X7 U8 j5 ~* t9 {& rBYTE nIndex;- Z- Q. E! M1 r/ A2 r; A
sItem(){+ r$ \- }* F1 _7 F, D
dwId = dwKind2 = dwItemId = nIndex = 0;
0 l* s' G; Z. p7 T4 b}9 h0 M* S/ n+ C
bool operator < (const sItem p2)
/ \8 i% m5 f. t3 U{
/ k" V$ h* F) f) f h5 o if (dwKind2 == p2.dwKind2)
: H" J" R& z4 E; c- ]. Z {
/ P8 @" K9 b# D1 O& c, U3 y" K return dwItemId < p2.dwItemId;
9 x6 y; u9 w" n. ~, n5 O5 o }else{* Z" m- K4 J( I. {: j
return dwKind2 < p2.dwKind2;
; N7 s" ?3 F9 {: J. @9 { }
9 b* n8 W% n; ^, b* c" P}3 W% G- h) G+ t8 e; n
};
7 y1 w2 r1 Z+ B, c! v- mclass CInventorySort) q2 V, b4 V' p5 |& o0 D; J
{" A7 R6 I R' _0 I, Q: h
public:# L) B+ W5 \5 Z
CInventorySort()1 v( N0 X- S2 z" Z
{
% n9 I* U; n5 T- P% f0 L4 B. @ m_dwPos = 0;9 p5 a5 [- D7 Q* {$ d9 A e% U0 y
}
$ b3 a- f! c- O) t* }~CInventorySort(){}
' x+ M* o$ T3 N6 I$ y, c# L% ?private:
4 J( j+ o) l3 X. isItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 S0 D7 @3 |6 ?9 J1 E; D: I$ ]
DWORD m_dwPos;
, K, P: Z$ }3 L. K& Ypublic:& k# z- @- o- \ _9 ?: d4 |- q* Q
void Add(BYTE nIndex)
1 z4 Q8 E% o4 A9 {{
/ U/ u5 m% t/ B: l if (m_dwPos >= MAX_INVENTORY)
; S* w/ V/ v1 ]& Q2 @: u3 W, w {
: @! n5 h/ @7 G& A4 h return;
& v: F2 B3 m6 B6 i2 Z) j }6 {% [8 z( i0 j9 ?7 C% z6 N, O
m_Item[m_dwPos].nIndex = nIndex;9 P' u% g, [3 e- v! A D8 O
m_Item[m_dwPos].dwId = m_dwPos;$ s3 ]" ~$ Q) E5 _- a, |- y* u2 I/ O
m_dwPos++;
# @8 z4 a5 g* ?; ~; {- p}
8 h, Z. c5 C8 p8 HBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ x2 g/ r- P0 q, m, g
{3 H2 r3 j. g* w% `7 V# H: e
for (int i=0;i<MAX_INVENTORY;i++)
8 p- n, r; I. T0 Y6 ^ {
+ z: z- k N! C; N2 F1 [0 [' ?5 d if (m_Item.dwId == dwId)
4 l6 K9 l: M. V* W2 }' a$ V* ?7 k" h$ d {
+ H. b1 L4 [: _/ X# T( O. K } return m_Item.nIndex;) J5 K$ B( L1 @! _; E% t8 c* W: H. t
}
+ O# F* v- I/ ?- t( M }) }+ @' {" ~! b
return 255;& B! H- |4 p. Y1 c( K: W& F
}
* D, b% t6 V D( @0 M$ ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置* ^! C5 t2 F/ `; @9 o8 A$ Q' G
{
4 }; Q7 V0 h$ x3 V1 R( s BYTE nTmp = 0;
4 p/ L4 T% g0 z, `; q- a/ \6 _" d9 U I bool bDest = false,bSrc = false;
8 L2 g, N( n- d( I for (int i=0;i<MAX_INVENTORY;i++)( q$ Y' Q: X. f' ?6 a
{
0 g/ N( t- o# D2 n3 I6 G/ Q4 p) A if (dwSrcId == m_Item.dwId)5 V* k' r$ O- D! v) x" e" I
{# S' @9 ]9 @, F: x
//id相等 则 改变对应的dest和src
9 n! r. E" s; o+ e- L+ y nTmp = m_Item.nIndex;' n) a1 ^: i$ ^" z1 p
m_Item.nIndex = dest;
+ g- w/ a! y) c. X$ s }
5 i6 X* |4 B# f8 S: t0 p- F, k! L }
6 A2 K) r8 a5 N; R1 g! D/ u1 C6 L! V //临时数据保存完毕,交换开始& S6 {: [3 n1 D( D6 D
for (int i=0;i<MAX_INVENTORY;i++); m. P. l/ l+ w' l% A3 j
{9 s/ P- e4 G2 s! ]1 _# Q! s
if (dest == m_Item.nIndex)
: _9 T9 t, g3 y! h# ^( l {' _: I" H1 b, S% W* r. @2 Y; r
//id相等 则 改变对应的dest和src' Z7 i' d- W6 \9 U
m_Item.nIndex = nTmp;
, C# Q" S7 V# Q" G }) a, u+ y: i( Q9 X
}
6 P! u! F% x+ j [$ W3 Z. T}8 |; Q) o9 c2 @/ R; y: j% H
};
8 p7 z/ c$ V( N. R5 H: _) o-------------------------------------------------------------------------
" O& X# I+ N3 f$ E% h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); f8 e: s( a% E6 H/ ?# @ c5 E2 n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); D. C! c9 u- @
紧靠其上添加:4 z. ]) @8 ^% B" E/ @/ n4 p
if( pWndBase == &m_wndMenu )
; G! c! K; ^7 ]# W3 m) s! Q{
9 D; M6 ~# ]4 v$ {* A5 F switch( nID )' b% ~# ^: A( h* [7 m
{* n8 J. ^( B2 d/ c
case 2:3 V! e* `& y7 N) J+ u0 ?3 w) M
{
6 b& N" T) W' q0 Z% O- w //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, _; ~: v1 K9 e" u3 O* s- U% P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 ? R7 f" ^$ e, C$ h- |$ c {* E" n# i+ o: [4 v, x- c! ~
break;
/ L8 B4 t2 n) h }
/ [% S7 j; M, f/ v: K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); x1 W( Y9 M0 M- ^
{# R# E* r; }( Y2 W' b* i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- O+ U4 `- }1 V if( !pItemElem )
5 N, {7 u7 \; P' e9 s1 b2 o+ E continue;
3 ]/ b5 L _5 d* K/ A, B; Q if(pItemElem->GetExtra() > 0)
: \; r, N! Z: |$ A( ] continue;
/ w( n" P8 d1 @: s& W3 ~ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 o4 a5 ]( ~* h, D
continue;
( q4 }$ p. b5 r/ q1 ^# t8 ~# x! W/ b% N if( g_pPlayer->IsUsing( pItemElem ) )
4 O: ]% K m" R9 s: i continue;
$ U- S& s! E& Y if( pItemElem->IsUndestructable() == TRUE ). @3 J3 w' t' H8 u
{# r" Q5 L* w1 z) X, |6 Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 L* J! X/ s: a7 F8 {& N% B
continue;3 f E% }4 f' h4 t: \( Y+ R
}
8 R/ c1 n- ?& K' q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
\* P: u: V1 R& P }- B: J$ r k+ F/ j4 f x% ]
break;5 r+ N9 G& C& u; C" T- w+ u$ `% _- w
}
- L) K, x5 a& V case 1:
5 u4 U/ F! x) @. o/ ~ {8 b% V0 b% r7 t4 R
//整理背包
2 G( A4 S& h6 B! y& f! V //////////////////////////////////////////////////////////////////////////
. w% Q: T# F* g8 l- O/ r5 `! e# r //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 q! k6 w' W7 g1 D1 d6 V/ L1 j //////////////////////////////////////////////////////////////////////////
5 d3 [3 k. G j2 F% t7 B //////////////////////////////////////////////////////////////////////////
3 c$ d! \" ]* @: @: s# I0 V CInventorySort* pInvSort = new CInventorySort;+ ?) w' q4 Z. Z1 J
vector <sItem> vItem;0 }$ x: {# z0 v0 b L: ^
vItem.resize(MAX_INVENTORY);//初始化大小- b: I! S, y) _7 U+ R6 d- s& {
//////////////////////////////////////////////////////////////////////////
& S6 g7 a# l) m/ y9 G //填充数据' v4 D' Z' O# X* A* q' J
for (int i=0;i<MAX_INVENTORY;i++)! W( m) P! u! c! h8 S
{: ` m9 N) H$ F- v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* y3 g* O% [, F& G2 f
if (!pItemElem)2 Q6 T. B8 {6 g) V2 ?3 J3 [7 `, U3 ]/ a
{
( u6 N1 k8 u4 d+ d vItem.dwKind2 = 0xffffffff;9 Z' E: Z% w7 t. h/ u, M
vItem.dwItemId = 0xffffffff;2 U/ k- X' g8 ~0 F9 J7 k2 I
vItem.nIndex = i;4 l$ `. x: V1 C; l9 o" B
}else {6 g1 m6 [% r' i8 g
ItemProp* pProp = pItemElem->GetProp();
) Z" F1 p. y8 x9 r# G& O( @ vItem.dwKind2 = pProp->dwItemKind2;
% P3 C0 B" b3 e: N( R x- H vItem.dwItemId = pItemElem->m_dwItemId;9 Q Q: i3 H+ [( E
vItem.nIndex = i;! p. [% ^" ^) X/ w& c
}! O/ @2 g( E% k Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
u7 ?& z' O; ]! ]& ?. D u) U }
0 D1 c' \- q7 X- z5 b; s! I5 Q) w //////////////////////////////////////////////////////////////////////////
# ?0 B. b% `9 n% d2 i3 a/ H$ Y f sort(vItem.begin(),vItem.end());//排序
+ ]5 I6 q* ? L6 z; h //////////////////////////////////////////////////////////////////////////
) [4 a/ R4 K% X7 R6 W //交换3 p& F; L2 l. n* \, K, v6 ?
for (size_t i=0;i<vItem.size();i++)% X* g% e6 O8 z' L! b' z }( a
{' |5 H, a% G& x1 Q$ ?) Q* g7 ]
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 O+ i2 y2 I$ e. L, I
pInvSort->Add(vItem.nIndex);- C" `2 Z6 e% v; t: A" B* s
}9 H/ u+ W9 m! h+ p' t7 p
BYTE nDestPos = 0;4 v; P! T; D4 C' d: M J
for (int i=0;i<MAX_INVENTORY;i++). p. F: c9 k7 G+ s6 R
{
! L( }9 |) ~2 F$ o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 I# u; u; [, f3 ?' R if (pItemElem)+ \# Z$ G5 C& }: f9 I) J, Y
{
! o& U8 Q6 W5 K% K if (IsUsingItem(pItemElem))
3 h' n! l1 X' e& `5 m4 w2 O( @* B' e0 | {
' S7 z) a8 x3 C. W //这个位置无法放# h, h& Q9 J; M
nDestPos++;
- _7 Q: F# }" i8 s( m" f* D }% W' A* _4 ?6 c! A9 j
}
k& J" f* q9 N$ l. n! K$ c BYTE nSrc = pInvSort->GetItemSrc(i);9 ?. L% N# u" u0 O
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: e: w4 ^" x6 x r# p; S if (pItemElem) e8 i( M! V R1 ^$ q7 Z# Q2 B
{
- @# x7 e, G, e' [ if (IsUsingItem(pItemElem))
& R3 e6 U: H, t! V! X6 Z/ `( ?& g {
( I/ P) \+ m# B; } //这个道具无法移动,跳过
/ V4 A7 U$ t2 R2 y continue;, G& o( U( A- w4 K/ a0 i/ e' w
}3 J7 M0 {/ o* Z7 q& h# r
}else{" [# P: U7 o/ w4 l1 b
//空位置 不用动
2 T& `" ^( D$ V4 w' }" H continue;$ L% V' M3 N% n p1 N X
}8 w! R. }3 w: r
//////////////////////////////////////////////////////////////////////////# c* V0 r- G+ q( t9 S
//开始移动# ^1 p* {& J$ I
if (nSrc == nDestPos)! L {9 S6 _, w
{
# ^* W8 L# E% S P1 w //原地不动
6 O2 B( [* M; @( ~* y5 H nDestPos++;
* P# _8 w5 \( L5 u h continue;5 m3 [4 Y4 d$ m9 T2 y4 h
}
' Q+ E) \. O/ w# r' F" `. M6 u% { pInvSort->MoveItem(i,nDestPos);
0 Q' Y) h3 u. f6 r g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ m9 L& R* I9 g* j$ b2 K
Sleep(5);, m: h1 o; {0 n4 D8 t. ~4 L
//Error("移动 - %d->%d",nSrc,nDestPos);, w2 B' k) a7 c
nDestPos++;
% Z3 {# C; H/ |& p7 t, Y6 ? }
; k5 ?* u* N: a2 Q# Z/ c s //取第一个元素的信息7 N X% E$ E' u' d8 X \( f
/*! ^) V, ^/ D1 y0 @
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# D1 |2 o }/ u) C {6 c- M% g/ @, Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% G# _' z' B. A0 J6 ^( T
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& H0 r9 Z, ?7 h# y1 b
}
! e5 Z2 E$ E8 _& m P */8 Q! B, h- k: d7 g7 `. [
//////////////////////////////////////////////////////////////////////////& J" l6 b7 S0 x# v( x
break;
+ x- b+ d4 d: I" j8 T3 M! @, x* h }% C3 H. E6 s2 f8 l7 `
}
4 G" c" Z! E: y}0 F7 P4 M- N5 B" I" n
m_wndMenu.SetVisible(FALSE);
4 E+ R8 N% J2 H/ n/ r" J! Q
0 t! K f7 K1 ]& ?, }2 X6 q--------------------------------------------------------------------------------------------------------$ C: {& L5 Y# r0 ]6 ?7 {# r
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 J# y7 j0 U$ G+ ~! }
{/ C I u8 a( }- r
BaseMouseCursor();7 _' y" L. p% u
}7 D+ i$ w: U6 D5 I
在其下添加:. F, q3 x4 y/ P' u4 H. o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& S+ R( \' F! ]* R9 |
{
# T" l/ ?( E, l& \m_wndMenu.DeleteAllMenu();
" D# M5 `" x! f: Z) O; Wm_wndMenu.CreateMenu(this);
! }" t3 \( n3 T; vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: d3 J8 F; k- W3 Q! R$ o1 [9 s+ E
) q. _8 n; L: {: zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& g: ?) g6 k) E" U7 {' _9 I
{
& d+ w% t4 g6 Q& \4 l //P以上级别才可以删除所有道具
" y C, N2 @' F) l8 }5 Y1 c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 B1 o" o, x' W- H}
7 {( @+ @( S* O8 Im_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 h3 ?, D: q: Sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; {; ]9 _: _2 v; U
m_wndMenu.SetFocus();% D* c' V3 ?& _6 k! z
}
6 U- t9 T% i- z, ^( v( d$ Q+ q------------------------------------------------------------------------------------------------------------: \6 R3 w% s2 d1 m: @2 N
*************************
0 a& d- `0 X4 A( X i! ]: ?WndField.h文件
! Q* }/ o9 C2 M9 u- n*************************0 ?# n9 U0 q! k& y
搜索:BOOL m_bReport;
9 }/ e9 @3 c* Q其后添加:9 d! v3 E d H! `' q( t
CWndMenu m_wndMenu;
& n! ^4 f1 n5 P& l7 t# b搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; c& Q) L1 {# ^4 o% N) h; Q
其后添加:
) `' t9 o# J g& n3 U/ A' b. w+ x; ?virtual void OnRButtonUp(UINT nFlags, CPoint point);: W2 B9 O/ D! s0 v# e
3 S: T3 W8 _* g
& q/ T0 K$ {7 g. o5 ]
|
|