|
源文件中_Interface文件夹下WndField.cpp文件( Y' ?1 P5 L" p1 B, q0 g
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 r) y. a; P8 _% P, U I
/ `. r+ z+ @ z' }) ~$ Y9 Xstruct sItem
) ?7 h3 T* z& F, p9 ^. d{
5 J u( ~, _& Y3 p- [DWORD dwId;
1 V8 J, Q7 t# P h' a) c3 }DWORD dwKind2;" h8 x' e6 B' P$ l! G5 G
DWORD dwItemId;
) [2 H" K R! I( w3 `2 h3 iBYTE nIndex;( a8 \- f: N% w ~- R# y( N
sItem(){
0 w, d3 V9 B, d% G* b0 Z dwId = dwKind2 = dwItemId = nIndex = 0;. k. G6 D) {% A) ]9 [( C3 `
}
w/ g5 f! w8 @- N8 fbool operator < (const sItem p2)+ U0 d) `" n2 y+ p# h( U# o& L
{
; c8 r3 g4 t! z: @2 _8 U if (dwKind2 == p2.dwKind2)* s, g, @+ r1 P2 q; q; J
{: r: n/ N; p' p7 O9 P+ U4 ~8 r& l
return dwItemId < p2.dwItemId;
. i8 `- \: A4 w8 D0 ^6 T }else{7 m3 N( |* o9 n R. d( |
return dwKind2 < p2.dwKind2;1 |: D) @9 n" G
}! _1 i4 W! t/ h1 d8 u: H
}5 F4 ?- Z0 \) n, M( o& d
};
9 v' F6 b% d9 W, xclass CInventorySort
! k2 Y6 I }, o: o5 b8 H{
% J( L% {* o4 H3 C# {public:
8 `! B$ S* M' W; ^3 xCInventorySort()
- R* U7 B1 v. K- `( Z I v- Y{. v5 H. M/ U9 W9 g% m% m
m_dwPos = 0;
5 J3 b/ ? b2 _* C% ` p4 F}& `* b+ O$ a6 g& @8 F6 E
~CInventorySort(){}2 r7 w* r' l, W6 A9 p" z
private:; w" j [. {4 g" S) a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 v$ H% o+ x$ g& ~. m& h5 n- T3 ~DWORD m_dwPos;( t* L5 d$ r! f3 D" k, z+ L B2 h* M
public:
4 u( c9 F9 ~, Hvoid Add(BYTE nIndex)& e( [% n4 s* @/ S1 V& ?
{
! F) L$ Y2 f4 C$ S& g$ { if (m_dwPos >= MAX_INVENTORY)& Z t/ G8 O3 F+ o$ q
{
, ^( q7 x4 M0 u( m8 Z return;
: _$ X2 D. m! x" l- R( t3 o& E* b }
# U, H4 B' G& k% e m_Item[m_dwPos].nIndex = nIndex;/ j; P# H4 t' M) f. Y4 [* P
m_Item[m_dwPos].dwId = m_dwPos;
, Q- N3 ~) J# V$ ~; v/ h3 X, C m_dwPos++;
' K, K$ `9 T2 y; [1 a}
( I6 y$ H, a7 Q# ^6 ?9 q" k4 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 a) B1 y7 S7 }; x& _{5 u1 E/ {3 I0 R2 D3 I
for (int i=0;i<MAX_INVENTORY;i++)
) n2 R% [6 [% g6 m1 x# ~ {( h; ~3 E+ U! z* D. c
if (m_Item.dwId == dwId)
( P7 e3 Y1 e. x/ k {
3 ~1 G1 {! e$ P0 t' E1 R return m_Item.nIndex;
; S0 b) z1 R2 V& w( k8 \ } d% r2 |5 }. X; s& Z! [
}
( U) [5 b$ @$ o3 V! _ return 255;) O: |& a2 F% a& [2 \8 ~" u e
}
6 i3 V5 J/ l' t& [void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 ]5 I L% o' Q4 ~6 T{( W) t- N( p& a& w8 W) R3 f; O) s' k
BYTE nTmp = 0;
4 U7 M, A- y, Y5 Y. K" z9 m- ? bool bDest = false,bSrc = false;
+ o+ T( S& t. O2 ?2 @ for (int i=0;i<MAX_INVENTORY;i++)9 l$ w4 {3 |0 `2 F
{, N( ^" o/ t4 O/ x- b7 B' D
if (dwSrcId == m_Item.dwId)
3 M: f: q1 G, I- f, o+ W# q {' ?5 |- b* [" j/ S7 G- l$ h3 }
//id相等 则 改变对应的dest和src
6 |" q' K6 I) e/ K4 P nTmp = m_Item.nIndex;
' t' g! M. q; Q) a5 N m_Item.nIndex = dest;) B% Y7 ?3 z: N6 I
}4 |! j( m( s7 O/ Q% y
}/ |( `. {$ _6 I+ e# [
//临时数据保存完毕,交换开始
3 p% W% v; g+ F+ U% U8 z# ^6 t for (int i=0;i<MAX_INVENTORY;i++), t1 w6 o" |6 f& ^3 F
{; o( j+ \8 [& b5 i
if (dest == m_Item.nIndex)) ~, k5 ^! M' Z& O" A
{: k7 f& }+ N( ^- i4 t- O
//id相等 则 改变对应的dest和src
0 j7 A9 n! F8 d: P0 \- p m_Item.nIndex = nTmp;
& x% G* G6 T& i" R; n% x) I- L1 e# o }
# J$ l- \# m5 z) n# W w }+ K! D+ e, f5 v. [$ U: [5 N8 u$ H
}) @$ G" _ E8 ~' j: Q+ Z! H) @
};* i. F; n: g9 u& l7 R* u
-------------------------------------------------------------------------
: E" Q1 i- b' P/ Q( x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& m$ [2 Z/ s8 _1 q* q5 E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* C: D3 Y9 o( v+ w: g紧靠其上添加:
7 E& b( y$ u+ a6 x S4 ]if( pWndBase == &m_wndMenu )
- X7 Q! ^/ ~6 a6 _3 ~{1 L8 t9 {) S( p' a
switch( nID )$ R& i0 h7 C# T/ R) I
{# N5 ^, a6 T+ B' S7 ]. {
case 2:
0 ^2 U, |$ g" T$ M# T+ o {
1 p. S, h+ i* n! U. q4 j //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; @: o$ P# D f$ X8 j( m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ r1 s7 V' u/ B8 u9 ?6 m
{+ j9 |0 S+ d: `+ z6 z
break;
E8 u5 ?8 ~3 L }& X/ {5 N- @ U% D% G$ Q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 O M# i* F3 y+ C, }
{# Q$ {5 N* R% S4 {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) \9 ]: u I! e if( !pItemElem )0 D/ A' J4 \( `) b8 ]: u
continue;- J m9 Y/ o8 T' B6 K
if(pItemElem->GetExtra() > 0)
; O6 K q% H' v- b! V continue;1 _- J6 K! d7 S$ j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ F) n. Y S7 {; L
continue;
3 r' ~$ A* M, j* a9 ` if( g_pPlayer->IsUsing( pItemElem ) )' j/ ]- w$ p+ i% b- I" [; H
continue;, b/ {" k) R9 b
if( pItemElem->IsUndestructable() == TRUE )
( y% a; q {7 a4 d% M2 b. p {7 ?9 a& x' X% g# U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% o: K" v- z7 E* L( d continue;
F$ u2 X/ X, I! g! ^3 s% e }7 U; t5 o( m. |6 h+ Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 K+ b9 N+ Q7 k; n% L' r2 W7 B }
3 U6 V% F- F& S break;: x$ z# L: f8 _0 t5 o
}
& f" @/ G- p2 |6 i% a W1 G" | case 1:
2 e+ l: [1 e8 C. \. m1 J" m {
1 Y# ]/ @: b( }/ Z2 p, J //整理背包/ F, c; x5 ?; H- N2 J7 F1 \
//////////////////////////////////////////////////////////////////////////
- Y) U: |3 X& h, o0 f //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 z" X0 e2 q6 L# b- Q8 Q //////////////////////////////////////////////////////////////////////////4 A5 s+ f S. `
//////////////////////////////////////////////////////////////////////////
) G" T) E& F# D3 U: J8 L CInventorySort* pInvSort = new CInventorySort;
3 M4 I1 C- ~3 B Q vector <sItem> vItem;
8 G: v: B. h+ V5 ~* ~/ R vItem.resize(MAX_INVENTORY);//初始化大小3 a7 q! C4 V" P/ ~ Q
//////////////////////////////////////////////////////////////////////////
3 ^' c/ c. _/ G2 X2 {1 ?+ B" @3 | //填充数据0 A" I! d& \. O4 ^) j, H
for (int i=0;i<MAX_INVENTORY;i++)8 T% `5 J' r, {' p2 r" X; J0 k: \
{2 @* X H) ^6 j5 c3 K9 T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 E0 P3 P& N4 j6 x7 ] if (!pItemElem)" X" g! W N0 `, b( @1 N
{& @) w" q! I9 e; ]* Z$ c! ?
vItem.dwKind2 = 0xffffffff;
- \8 o6 |6 m; Y/ m vItem.dwItemId = 0xffffffff;" T- ?/ E- j+ Z* p
vItem.nIndex = i;
; i% U# A- o- v [: r8 J }else {: ]9 k3 A& y& q
ItemProp* pProp = pItemElem->GetProp();
: g% U% `5 x% }" `( E vItem.dwKind2 = pProp->dwItemKind2;
6 f$ J5 B- P# l$ j: v4 J" Z- W" H vItem.dwItemId = pItemElem->m_dwItemId;; F0 w4 M4 n4 H) B w
vItem.nIndex = i;7 L; O) o W, c. W) D0 c. d
}0 ? \* p$ K" }- b, \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 k. u( Y- N' k4 x6 A; ^# D
}9 W$ [! j/ l3 N0 M8 `! S% L
//////////////////////////////////////////////////////////////////////////1 Y/ A h0 [" n
sort(vItem.begin(),vItem.end());//排序
3 F* n' `% I, C. ?+ a //////////////////////////////////////////////////////////////////////////( a) d! j6 k! C& P5 ?/ X# _6 B1 l$ I
//交换
2 f* V4 ] S0 k* z& h ]0 V) M for (size_t i=0;i<vItem.size();i++)
[0 d: m; ] _7 Z5 A/ {9 Q {
1 ?1 M2 d# p8 j" a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) [ c; }3 A8 N- B4 E$ {
pInvSort->Add(vItem.nIndex);
; U& ?* S$ N% e }
5 @& x. Z: R2 x5 A BYTE nDestPos = 0;
+ Z9 d8 y/ R+ p& |; j$ \5 b for (int i=0;i<MAX_INVENTORY;i++)
- D; @& f# J a% N {
5 I$ i% O( z+ d& Z; X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 G5 i* o, E. i
if (pItemElem)' G( S/ H+ D5 ]
{
% s) _" P+ ~7 ?; \ if (IsUsingItem(pItemElem))$ z7 w5 ^5 m- y: g/ e7 z b- {
{
! B$ R. l, C. M, w2 O7 g2 \6 r- E //这个位置无法放
$ s9 n$ [2 q6 V$ B; t8 h+ ? nDestPos++;
- O/ A2 U' |; D4 v }( q7 \# c7 i5 x! \
}
; v# ^7 y$ I! b9 c+ n BYTE nSrc = pInvSort->GetItemSrc(i);, x1 L+ r/ U: T9 w4 C4 p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) y- i- S$ }8 W if (pItemElem)2 \* V2 o7 n, n0 K
{
9 Y& w. F/ Y* c, l5 r+ s% G# Z if (IsUsingItem(pItemElem))
. R1 N: {' n4 ~4 N+ U0 {- c {
5 H- j& J0 a: v T% E/ w //这个道具无法移动,跳过
( {( ~9 c5 C4 z8 d& Y0 r continue;
, ~* }# `1 a' j }# n3 D, F; a+ L" {* r/ I4 n+ s* _" ~
}else{
0 Y2 h; }; C+ d& C6 ?2 w7 S //空位置 不用动7 H0 _8 H' ?2 p) F% _& E$ i
continue;# c8 D9 O) F# F; @. p2 L( D7 t; v; G
} x9 f/ B1 U8 m: `# F' x
//////////////////////////////////////////////////////////////////////////
% R% b% Z7 u# j( W' k. g A //开始移动) R$ p a" B: T- x
if (nSrc == nDestPos)
3 F7 T5 m: y* Y; r. Z) k! B3 l( H& {. ~ {
4 d# |5 ]$ O' x8 A: T r1 |" A //原地不动; t+ f" `: d: Q) E/ o* i1 V+ U
nDestPos++;' Q/ m5 \% s5 T# w; z
continue;
( p& k% l; a* S9 T, \ }
8 T# g) \& I/ g/ c% d4 }" t' _: h pInvSort->MoveItem(i,nDestPos);( D. u* y1 |! l: h
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 g5 y# }0 Y9 @$ Q* k; H- L9 K Sleep(5);
* P6 F% n: h/ `9 m: p# u# h //Error("移动 - %d->%d",nSrc,nDestPos);
1 c2 A; [& F1 H$ z nDestPos++;
9 T) \& O, {1 f2 {" U5 @# m }7 m" Z. N; i& K; L( ^2 N
//取第一个元素的信息
6 ~; E4 D2 }( @* l7 p C /*- `& Y1 S i) N1 n( D' E: m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# f" R+ P9 O* \& h- a& y1 |
{
L, Q+ g, ?3 a t' u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( O2 V; A/ V8 P$ O. N g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 v+ @3 ?# z5 ~/ l( h& {( ~: x6 n$ e }
3 x- f& @. @9 X) d# e' y */
2 ? i8 E9 L0 X8 S9 Z% n' \" T% p+ ` //////////////////////////////////////////////////////////////////////////
& C b8 L+ h9 S, \, g break;1 w5 k. T3 W r6 M1 x9 Q1 c" a" S
}
6 R0 R! l3 U u( @7 s- | }
+ {# T8 A8 ]) j}
: f3 O' Y) c# O$ N+ T* u: Em_wndMenu.SetVisible(FALSE);
4 z+ y0 S( Y0 m& C% i. k+ x) V; _- _" p
--------------------------------------------------------------------------------------------------------7 ~0 N8 W" ] A; R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, S, @3 i0 a0 @# y9 T, i{; N* M' d, `$ v ?, ]+ V0 N3 r( B7 i8 m
BaseMouseCursor();
% h% S1 V0 u* _$ s}& C8 M8 P0 i3 i
在其下添加:
+ `: A7 ~! o1 {7 t% G8 Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); f7 i% z5 W4 Z( x* z' H
{& x, t4 W+ v+ Q
m_wndMenu.DeleteAllMenu();
/ J8 Z) C3 x) ^" [1 }/ M/ h6 P Qm_wndMenu.CreateMenu(this);
; O) A2 q5 k5 x) t. Pm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' q& F t$ r% q3 p! r1 f2 I( ^, E% M6 i" N1 [- Q
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); ~% n8 h; e$ t
{
0 ` s' m/ Y' l0 g/ i //P以上级别才可以删除所有道具
+ a( P: f o: C; F m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ u3 b+ a5 i8 o( Z" f}+ c, f3 _7 Z' Q' U0 N
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ h4 I* ?5 U) jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" h$ b3 a1 _, p+ }, g2 a' F* [1 ym_wndMenu.SetFocus();
+ _+ ^: q2 x. z}
i' H7 U9 {2 J3 X* A- r8 b4 {! x------------------------------------------------------------------------------------------------------------
3 K# z/ v( s. P9 u*************************
* o: A* ~" m, n2 s2 U* iWndField.h文件+ }+ x V) g) Y2 d
*************************
, u, x. f6 |3 W1 z( ?# z4 ^搜索:BOOL m_bReport;( b0 D" n& ^" t0 a7 \4 k
其后添加: ]9 A b" I I) C
CWndMenu m_wndMenu;
9 S4 P1 n6 x# v: n) J$ P) S0 v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ l# P* ]1 o0 G+ A9 Z4 ^; g其后添加:/ a9 H. |9 {2 m) b
virtual void OnRButtonUp(UINT nFlags, CPoint point);
, n' v' s) s ?6 c1 P7 V
+ N2 w& B- D8 R: J8 h; J3 ?. y7 U9 E9 n g9 ~8 K
|
|