|
|
源文件中_Interface文件夹下WndField.cpp文件; `' V0 o* B, }& k/ b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 f% x0 ~. a: B6 x% e1 i/ q. C. f- b5 u0 A# K
struct sItem
% \8 l( |; s4 t) t" a# B* ^- e5 M{
! z6 I0 t" |- O4 WDWORD dwId;& W6 [" i# s/ O+ \9 t) T) G
DWORD dwKind2;3 _$ H& m9 p) n, O0 x) [" U+ l
DWORD dwItemId;: W) m& _% Y7 b% @# U
BYTE nIndex;, @: L5 G# N+ C e) \
sItem(){' f5 z; O6 G5 p# _0 E
dwId = dwKind2 = dwItemId = nIndex = 0;, u$ @, }. m$ t: L' ]# T' ?* M
}
. c, S1 R0 e0 u& R) i6 W! _: p/ Zbool operator < (const sItem p2)
' P1 A% u, }1 w5 h0 q: [{
/ j/ U" B/ Q+ f) N if (dwKind2 == p2.dwKind2)
/ E, \! Z' P; i- U- r {
& g: m/ z- |. W: k return dwItemId < p2.dwItemId;
' ^7 D' S! L2 f3 n }else{
! _7 K, \5 S2 ^, @ return dwKind2 < p2.dwKind2;% l8 l& @+ q" m: p3 |/ ?# ?5 u
}2 H. n9 i! i1 J, e: y* h- `
}
6 x- f5 Y: |8 S0 b" f, l};
* }& _7 c" P. c1 @; h$ W/ t0 eclass CInventorySort6 B! Z. \3 L" s' S" u% V
{5 r5 x8 z: u9 c6 n5 m1 A; W5 y
public:- \/ y' ?' m' n( N* I
CInventorySort(), P3 y! D, \7 Q/ k
{0 N) C; R' E! R
m_dwPos = 0;; w4 Y [& j$ \, m% s5 h3 D- }
}
g. h6 Y V) q9 O5 @* ^2 [~CInventorySort(){}
& {: Y# C2 a8 C8 B' I- [private:' r5 e/ ~, Q O3 o) ~
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 m& d+ E: f6 b* S0 [
DWORD m_dwPos;6 l$ r d* n0 Z; y' D
public:
' ~1 M- V! }6 ~void Add(BYTE nIndex)
0 i G% b* ?/ l7 V! d8 ]- {* ~{
& n& Y' J' w' x; I' n' h" h5 r+ d' F if (m_dwPos >= MAX_INVENTORY)
; D5 [: ]% v) [ {% E4 r p3 v5 x+ s2 A& i
return;
7 a3 L4 ^4 j; f# y% h }
$ V. D _/ m/ C# |9 J7 [ m_Item[m_dwPos].nIndex = nIndex;
$ e5 a5 w( @2 A% `' k" X1 k( V r m_Item[m_dwPos].dwId = m_dwPos;) a/ ~, ~$ `6 I# z6 v
m_dwPos++;
) o2 I, v7 n1 ?, s7 l}
$ |; L7 t% t% U: ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
Y" _, j* Q ~5 e Z. e{
) V! @& `8 z) T h/ A8 z for (int i=0;i<MAX_INVENTORY;i++)
1 \" I. C8 L0 a, ]- }5 }& s: {9 h {
: x& |. L5 v% G. o4 G if (m_Item.dwId == dwId)/ N4 {7 a9 _2 t9 G$ S, E
{
( \; Q/ F, f/ \) s return m_Item.nIndex;
* U3 b5 n# P% I; \5 V }) |7 S4 Y6 S' H$ G; g
}
1 c3 M& g0 {) j' ]) F0 J+ ` return 255;# F b9 b+ b1 O% I
}& p& b$ Y. r9 ^ H$ ?
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 {7 Y* [' o1 J7 Z4 @4 r! O- x
{
6 m0 {4 L; H" E! F) W BYTE nTmp = 0;* n( R2 m1 H1 e4 i, X
bool bDest = false,bSrc = false;
' F9 i- k2 `7 Z( l& k4 K+ d* T for (int i=0;i<MAX_INVENTORY;i++)& _, f. Q ? h' R, s) S( D
{
$ L! h, q, s0 |3 ~ if (dwSrcId == m_Item.dwId)! e& J4 U- {) d) d
{
' f) [( E9 A6 |% z //id相等 则 改变对应的dest和src+ |, X( S5 u$ T1 y6 l* Z! ~) @
nTmp = m_Item.nIndex;
9 k: k2 H6 U" i- {, L' ] m_Item.nIndex = dest;2 { Z- x" |5 U4 W( _& Q
}7 g; G' M+ P# m+ t8 E) ^
}
. d J5 H) {$ b5 k& @6 Z //临时数据保存完毕,交换开始
( u& C t& \( B& k for (int i=0;i<MAX_INVENTORY;i++)+ _& ~" c/ Q1 L7 l3 |; |
{
: J" E6 D3 H8 w7 G$ Z( l, W4 i if (dest == m_Item.nIndex)
1 r3 s7 t- c7 P+ x7 C( z {
C1 P" ]# v' s K //id相等 则 改变对应的dest和src6 J! N1 R Q( J! R- q% y
m_Item.nIndex = nTmp;( x3 z5 Y( C; o0 _* T% q
}
1 Y2 F0 D, [- W0 ?8 m- n: \0 Q' K }
$ ^ B: b9 _5 U& ~( [}
5 P7 {" l7 g+ t4 p& T};( O+ E0 ] D: l0 x: Q& ? ]1 ^( `
-------------------------------------------------------------------------
9 F4 n( V9 f4 K: y: r/ d1 y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' @9 x" V8 i4 E; t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 q9 p9 D% J) `* ]( }# E紧靠其上添加:
# @: o G9 Z- L k9 U8 }, _ tif( pWndBase == &m_wndMenu )
6 J* H# a% a3 W% g( q& d' x{! j+ [+ n; d6 h6 |# u; g! R( C
switch( nID )( G- Z% z5 Y. v u- y/ h
{9 h; j/ e$ Z9 X+ S- } k
case 2:
, b+ h( O5 C4 |; q, L2 L V {
1 ?3 X/ }: A3 \6 R4 F5 |, S$ W //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 E# }- P" l! L( Z4 c H( z& p* | if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' L. m5 @1 z7 m* `- x0 @
{. A2 x7 J8 u+ r5 {4 {
break;4 {. f/ j" i$ u5 \! U
}
, O: E* ?& r* Y: K. I" U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( M) \. m4 h7 L {9 _6 ~* v) w+ ]& x. e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 M( [+ x, y* I0 g6 O if( !pItemElem )
3 _4 {3 t# v( O+ Q V continue;8 t: u. g% w, H# C- S5 j
if(pItemElem->GetExtra() > 0)
! }( \/ f/ y5 O' G7 f% j continue;
, v- f$ F1 X9 z4 `- B* m, o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: A' B- B- R) E \# Y, o; J; P! H continue;3 m. X# D6 C# g' ]6 k
if( g_pPlayer->IsUsing( pItemElem ) )0 j5 [: ?' j! n0 r0 [' n. \
continue;. v) K' r. G* Y& G+ p1 d
if( pItemElem->IsUndestructable() == TRUE )4 V' }) n+ }1 b5 s: A
{" y; K# i" A1 [+ C! O
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: n$ g* e% U3 \
continue;! {7 }! a+ T# ]( s- A/ b
} }! a( Q" Y8 O# O$ g6 R7 Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 C! I/ q" {: r* }# [1 I }
! u" p4 c( W. h. ^; G break;
% d2 t* C f( V; H- p# A }$ o/ W# |3 X6 o9 N. Q; \+ r
case 1:& l, r( U7 z1 M$ ~+ P
{4 w. B. Z# u9 V7 d% K/ \* s
//整理背包
& k- W/ p* I( f6 y) G //////////////////////////////////////////////////////////////////////////
3 d i$ O6 E/ N/ m1 W! Y" r* v/ V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( J) O" ?- ~# p: I //////////////////////////////////////////////////////////////////////////. Z' ~8 a3 N# T' y$ M
//////////////////////////////////////////////////////////////////////////$ K% P* n, f5 L8 B
CInventorySort* pInvSort = new CInventorySort;
+ \4 |% e I8 n( k0 [. L8 _ vector <sItem> vItem;
2 e- K* T/ Q: c; X9 ~" I vItem.resize(MAX_INVENTORY);//初始化大小
, u0 p2 H& H J/ x$ H //////////////////////////////////////////////////////////////////////////7 M; O7 l3 n1 z1 I) g
//填充数据
1 j1 R) H: m- R2 E! W/ Q* G for (int i=0;i<MAX_INVENTORY;i++): ?1 `3 L6 U% v! p& W8 s3 g2 ^" k' P- G
{$ P; O" u7 S( v
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 T, `$ b- O% X if (!pItemElem)
, y9 b1 J0 R6 W; O: b1 V {1 C j5 o5 ~# ~! b, u& _
vItem.dwKind2 = 0xffffffff;7 F1 \2 h+ _: N9 f& m
vItem.dwItemId = 0xffffffff;& y0 T: a- x0 }/ H p
vItem.nIndex = i;6 e( @. l( s' A2 F& z8 F! D" C
}else {
# Z8 ^1 A: `, w( c5 k c* k ItemProp* pProp = pItemElem->GetProp();5 m5 m$ c# m; Z3 b
vItem.dwKind2 = pProp->dwItemKind2; I5 P9 H9 [3 c! l0 C
vItem.dwItemId = pItemElem->m_dwItemId;- N2 P4 ?' O- w7 D/ u% d0 X$ w; J7 ^
vItem.nIndex = i;
& Z) [4 f4 L1 ` }( X4 Q4 R# {0 \5 b: ?1 b1 _# ~$ K5 T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' \, \) ?2 G. W; x1 j }
% _9 c" b2 S0 c, q( k- d! j //////////////////////////////////////////////////////////////////////////
/ \; R- Y% k+ ?! K sort(vItem.begin(),vItem.end());//排序1 c7 e5 g& l( I, K4 G, R
//////////////////////////////////////////////////////////////////////////
- w# f! k0 {* _, T3 b! t //交换
, q9 A4 A; R) D* U2 o for (size_t i=0;i<vItem.size();i++)
3 ^$ m; k7 C: ~; Y5 U" A {
! v2 w# @- t# K //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 ~" J9 O# f6 j5 j# P* F6 P' g pInvSort->Add(vItem.nIndex);# o( ^( b% f1 `$ [! G( G1 H6 _3 D
}
2 B* A* C* n# h; Z4 o. E BYTE nDestPos = 0;
* H2 a: R2 E. S! F d for (int i=0;i<MAX_INVENTORY;i++)
8 L& V8 U* r3 {: o {7 }& M3 `- i, u3 U G3 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( T1 p: h2 c: d) C$ @2 {% g+ S
if (pItemElem)" O1 U' @! B8 Z2 F
{
# Z! `7 l! k0 F0 l if (IsUsingItem(pItemElem))
* S; H! }. J } {
6 i2 U9 L$ J0 R( _ //这个位置无法放
+ {) E1 M( x0 B8 ^* B nDestPos++;: O. O7 | l+ x
}: j4 d* Q H/ ^: Z9 g7 N% X5 f( `% w
}* m& I8 [3 W+ Y' H
BYTE nSrc = pInvSort->GetItemSrc(i);
' u; c+ t, u6 W3 u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( d) x; O3 Z9 \! f) |3 i' ` if (pItemElem)% Y! l3 d' O7 [7 ]$ H& X
{0 ?" }' k" M% N1 y% J- u
if (IsUsingItem(pItemElem))$ ?( n8 Y( r1 ~/ H2 P" h
{: i1 F# l% w% X/ a
//这个道具无法移动,跳过
" n7 B5 Q; ], \% J continue;' A& P0 ]+ l1 ` r" W6 m5 O
}
2 R# a+ A) c3 w }else{) ]. n5 m @6 Y1 }
//空位置 不用动: U' z9 U+ y, O3 D6 c+ [
continue;5 z' D7 E& Q# B1 `- T( W3 e2 Q" _
}
" T" h, ]/ H. w+ Z //////////////////////////////////////////////////////////////////////////" j% @( a9 F J3 I* Y
//开始移动
6 p! v4 t, D" X1 d; C, c- Q9 m if (nSrc == nDestPos)/ q, f) C' i; y
{
8 b S6 _' a) ~ @! c) N //原地不动
! f1 S; K$ G* T) E) r: X& { nDestPos++;
# C$ C) J5 F. v; i. }* l7 b o h continue;
" ~: g) d) r7 R6 I% `, ` }
5 y6 q% C( c" Z M( n4 a8 j* X pInvSort->MoveItem(i,nDestPos);
/ Y" K; _, A1 l9 }* f9 n g_DPlay.SendMoveItem(0,nSrc,nDestPos);; J: @ P' G. a
Sleep(5);
% W! f; u! e: M9 X //Error("移动 - %d->%d",nSrc,nDestPos);( D4 [% U% v! a/ B' N4 U
nDestPos++;
U Z; ]7 i1 T# J }
7 l3 |4 S9 R6 T( r; m% s //取第一个元素的信息
) h' q7 h6 \6 j/ L( E+ E# T /*! I6 y- H/ d+ \" t4 @+ ~+ o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( J2 |7 F5 e5 \* Y8 ? {* }( d$ O! E+ L3 y& R% o# @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
3 }/ z& J; q+ j( K& f6 D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. _4 g3 q3 Q1 s9 e
}; l4 T3 v! O0 c) F- P' }7 Z3 K0 `! z; J
*/
+ |2 v7 {5 h9 f2 o5 e //////////////////////////////////////////////////////////////////////////5 n8 k+ e9 L( F1 w0 p
break;
. x z6 F) ?6 |# O, I }( B6 K5 j: ?+ R0 p, t! e7 w6 H) i( P
}
$ Q+ `6 T9 j- Y; H! v}1 A! ~. X8 H! w* M* f5 V
m_wndMenu.SetVisible(FALSE);
6 I- R9 a! E4 S1 x, M5 Q7 q! n( J. e1 K
--------------------------------------------------------------------------------------------------------
! I: Q e) d' f; M" a, y# }搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 E2 l' b) u0 s
{
, R5 F* H( G+ R( ?/ v+ kBaseMouseCursor();" C. f2 ~7 l: k1 J+ }
}$ P+ T K4 i& ^: N& ~3 d
在其下添加:
5 r$ d) _: D! c! a8 Z% qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 q- d' z" J: S! [# Z1 n# B& h, `{
* `. W; Z3 Z zm_wndMenu.DeleteAllMenu();, q" u1 Y) j, f+ f/ h4 g& D! @5 u) d
m_wndMenu.CreateMenu(this);8 r% m& j4 |- l' n0 R7 o. S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- ~6 X* u3 x; Y' a. @1 d* q; w9 z9 `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* n: X' ]0 e; C2 s1 q( Q& ]# i{
: u w- k* y7 b# t //P以上级别才可以删除所有道具
" F( v7 t" V& ^4 m4 v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 u, G: ?0 n7 r4 O' _' `
}
# T. M8 x- d' Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: k D4 y. p7 ]6 e% P9 O; Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );3 s0 G8 }' z! X' v* d, M
m_wndMenu.SetFocus();3 ^& J7 ?/ |* c2 _' j% ?
}* D/ H# M3 u- `8 L Y9 e
------------------------------------------------------------------------------------------------------------$ e. ~+ t% c( s8 n- |/ G
*************************
+ e7 v9 ^% f/ E, dWndField.h文件3 n, S. ^' x; k v7 F
*************************
( F( w2 {, r; A' h' R搜索:BOOL m_bReport;" s0 F3 m* o* F5 {9 @
其后添加:
) }# T1 ?: [& I' O2 eCWndMenu m_wndMenu;1 k* [2 n, H+ d/ W" a' Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 R" w' b2 L7 \3 u; p# `
其后添加:
* Z# h6 T" V4 wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
- e" S9 a* P L- S
. I9 O' B! r _$ S- d- W. H3 d0 Z/ t* U1 c3 o; @' t4 q
|
|