|
|
源文件中_Interface文件夹下WndField.cpp文件
7 j2 w U! u" d4 _( N5 ` k+ p0 o搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 ] w1 k8 B+ z
/ D, W; i M5 l8 y9 W2 ]4 J
struct sItem
6 j! g% B5 C+ Q. e* Y( ?: y! W! m{- r7 D2 d" C% t; A% e% F# |6 P
DWORD dwId;# G+ _, V; o9 l( u+ k, h
DWORD dwKind2;1 x9 Y6 r5 S2 h8 m* s& f
DWORD dwItemId;
- w$ [2 F" R7 k, \0 E" ]2 ^BYTE nIndex;- T5 U: c% k8 R1 U8 P+ b) A
sItem(){
5 ~( h" T8 S0 V [: b' m1 L8 e' o dwId = dwKind2 = dwItemId = nIndex = 0;: B5 ^5 @# s1 n$ @
} _2 U3 [. D( j) H
bool operator < (const sItem p2) u/ d& _) \1 F7 X: i0 D
{- t' n* |. n' k8 c+ t$ F& N
if (dwKind2 == p2.dwKind2)
# {! C& R" w: Z9 h" o$ r {
" h, E+ @# s+ e return dwItemId < p2.dwItemId;
1 q; S! J c3 J7 y }else{1 A4 F3 l2 @( w7 D+ W% `* a
return dwKind2 < p2.dwKind2;
0 }1 B! y$ y2 g1 i0 j$ { }( ]3 d9 J. O5 {5 K3 L" P7 g
}: i/ k2 x5 j% ]4 o9 K6 ^; Q; @2 ?( V
};0 O v& {2 y: u% \- b- G
class CInventorySort
0 o4 {( O) k7 U& Y* I# K) D/ S{
6 F; U9 m% r0 u) ?, u) Xpublic:- u/ M1 B8 f+ `9 V, q. o; l( D
CInventorySort()
) d& n9 t" V' F' Y- H. h{0 q+ m7 r/ y9 A# a* Z$ Q
m_dwPos = 0;
$ v/ e9 S! ]0 r! k: {6 ^; v}
( |9 ] a" m( j4 d/ w+ b; o; B6 J~CInventorySort(){}
# [8 p5 x9 S* l# r' Tprivate:+ J4 }$ T4 l+ y6 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 G/ K( P$ G8 V9 t! c; {DWORD m_dwPos;
% i. X$ m5 y7 e* u0 r9 fpublic:% x/ d d4 L. r K
void Add(BYTE nIndex)' n) t: G8 j/ U4 k1 [8 m
{
6 y9 x/ A) p! U# m) \7 {$ H if (m_dwPos >= MAX_INVENTORY)
! {* B8 A9 C/ l$ r# w {
& e) C8 `4 i$ \/ h8 {# p return;
) s; X$ [+ x9 D$ A L6 } }
2 R: Y0 C7 ?# @9 W. B8 d9 q% Z m_Item[m_dwPos].nIndex = nIndex;
& D( q8 u& ^( ?3 j" b2 x m_Item[m_dwPos].dwId = m_dwPos;
5 P0 I4 G T( B. ]# O m_dwPos++;
3 H% @ {$ |5 a. H- ?}- Z! B ?" h( B. K* P
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 J$ s1 V0 E' x
{
! W0 y% g7 A$ ^3 I( S6 T for (int i=0;i<MAX_INVENTORY;i++)
/ y) ]$ ^3 s% Q, e {
$ s& g/ S" r" [4 x7 X if (m_Item.dwId == dwId)& V0 ~& a: m7 N, J; V
{
$ K. t: u" Y2 ~# g/ p return m_Item.nIndex;
, {7 N n# _2 G2 T }
9 G8 E* J/ I, G* k }
. [# {/ y0 Q& b- F' p return 255;4 z1 z s: G, ?& q+ l/ T; w
}: }0 @9 C+ v* g" u! R' P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ }2 S+ A. K$ j. }/ C7 S" k: K{
) [+ F% T- [ g5 p3 k! h) y BYTE nTmp = 0;0 e) m! J6 l) L% y
bool bDest = false,bSrc = false;
- |8 [! u- z n4 T for (int i=0;i<MAX_INVENTORY;i++)
* C9 T0 b$ t+ J {3 M' e S) d( p/ x* p: [; F
if (dwSrcId == m_Item.dwId)
# W& \7 x) r# {" ^% q {
7 |( E6 Y- n: M' Q- | //id相等 则 改变对应的dest和src9 U4 K) C# S7 p$ [- }6 S0 A
nTmp = m_Item.nIndex;. c8 w9 o& Y- D/ I
m_Item.nIndex = dest;6 K& u4 p) n# f1 l& s, ]
}4 M$ f* D% q: ?( R' n. a" F3 s& m
}5 p1 Y- v/ b* Z2 ^7 }
//临时数据保存完毕,交换开始/ ?+ C1 u9 ^# t, c! p7 t
for (int i=0;i<MAX_INVENTORY;i++) r6 L- H8 L# N7 A
{
1 U, ^, d H) ?/ T if (dest == m_Item.nIndex)+ L6 P9 X; l2 R+ b
{
i' @5 G8 {" n3 H //id相等 则 改变对应的dest和src
- M# j/ Z+ [0 [5 P: D m_Item.nIndex = nTmp;
f( R$ Z/ `2 ~2 z }
5 y& e) l( h& S/ m } {9 |3 Z7 S+ B6 Z' x. c! \
}% I( t2 T( l" v( t
};( Y) g( ~# H" M1 E! d0 N8 w
-------------------------------------------------------------------------3 L/ K2 @6 L% m4 S
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* w$ p5 I& {2 R( ]* U
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( k* W( l' F( E& b0 V: T' l紧靠其上添加:
: U/ Q( y+ O9 ] `8 X, y% ^if( pWndBase == &m_wndMenu )
0 A- t h# g& X6 C' I( ~! w{
% L3 E1 L! N% v$ H switch( nID )" @# M* l, t1 x
{. O7 h2 M4 s2 y- g
case 2:
8 o* V$ m& ^3 Z4 c% l; E5 _ {
6 U+ {2 ^. @, a& i: y8 Q1 @. l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 t2 c3 u0 ^: r0 I1 A5 w ?
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& c; l8 p3 T% o; R, L {
. Q+ K6 V& u* W3 t4 ^3 A break;2 _0 y: \. u( A [/ t6 i$ ^/ E
}
A( h8 y3 q% Q1 n: d for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
4 D! C& w! N- |8 N6 [3 V {
8 q$ Z6 e2 c: I' B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% y3 ]1 W8 x8 C# p# h; D7 k4 k9 F- }
if( !pItemElem )- g$ W" b2 e4 U* x
continue;- Q$ _5 V: y0 a% _6 I! k" V7 |3 B
if(pItemElem->GetExtra() > 0)
, ?8 K e* T8 s f continue;
) ^6 w0 d1 Y1 w if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 p' l& ~( Z/ O. _0 v continue;1 [) T9 `$ T3 H, Q. F( y
if( g_pPlayer->IsUsing( pItemElem ) )
) h( E6 d) o# Z continue;
) z- M2 c% r2 L8 ~: `# O if( pItemElem->IsUndestructable() == TRUE )
+ @" Y1 r' j1 j7 t/ S {
# c0 F+ x8 d& M, ] g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 c( u6 X3 z: A4 z continue;
' h$ m0 I4 b8 A4 F$ d; v }
* |* q8 z6 s7 W* [ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
C) A/ Y4 S. N' j( B9 D }& j" M9 }: H$ l/ R4 B
break;
: Q& V. I) K p3 h9 v4 P# N2 `! T }
3 ~; Y" z2 K& j6 f case 1:6 |4 P" U. W4 g, i% M0 t
{1 V0 W# E, e. u
//整理背包
2 ?- M* r/ |2 ~, X. g6 R6 L0 Z+ R" m //////////////////////////////////////////////////////////////////////////
9 N3 L) c) k/ K7 R: H, _& z2 Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 j+ \9 ]* o5 H) J, P$ z //////////////////////////////////////////////////////////////////////////) s& ]) q( u& J2 }* Q
//////////////////////////////////////////////////////////////////////////
1 y( b1 J* V( ^) J2 h8 b" @! E CInventorySort* pInvSort = new CInventorySort;
. f& ]9 Y# D2 f$ a$ h' M vector <sItem> vItem;1 |" _4 k% G+ {# M4 _6 [
vItem.resize(MAX_INVENTORY);//初始化大小
+ W7 S3 i D) c/ g* ]: O //////////////////////////////////////////////////////////////////////////9 E- X% m: ?( }# w: a* I( U! Q5 D
//填充数据$ |1 D1 k5 z3 K$ V* s1 @
for (int i=0;i<MAX_INVENTORY;i++)
. t" b# v+ T% }* R" r- x {
; Q5 ~0 w, R; G* y" E, P! g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! c% E% {0 u- J
if (!pItemElem)6 @/ S# B( L/ F, U3 t- R
{
3 Z# O7 X8 b# c, I5 t/ p vItem.dwKind2 = 0xffffffff;
) q& V# m, f! I; q vItem.dwItemId = 0xffffffff;7 k0 G) o, O' h8 W+ Q& l. A0 f( g
vItem.nIndex = i;: K: |8 R& t! S b2 q2 c0 ?6 \& v
}else {
. E: \* C* U6 j8 z4 T, K! }7 c ItemProp* pProp = pItemElem->GetProp(); z7 p G+ B0 [/ E5 M6 z+ }, u
vItem.dwKind2 = pProp->dwItemKind2;
8 ~( c9 q9 I+ `5 s+ q5 ? vItem.dwItemId = pItemElem->m_dwItemId;# ?9 D W5 ?1 \2 k3 q
vItem.nIndex = i; Q# v& Z! I( r9 D% i
}2 [: }) }/ G; r' j2 S, J6 b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 l! T. D" u" ~. {) O- V3 v# B }
9 Q2 O1 U a0 n( b //////////////////////////////////////////////////////////////////////////
- N" B) B1 _+ s c sort(vItem.begin(),vItem.end());//排序' b. ^3 S7 O' M3 e" @5 S
//////////////////////////////////////////////////////////////////////////
* M9 ?! A# t1 k% [$ s //交换7 H$ u7 `, v( V4 b" [
for (size_t i=0;i<vItem.size();i++)
% Q* K) _' ?: R* [. t1 `$ {1 u/ i& m {. N+ z9 P( Y, j# v+ \2 h
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 y- s) I4 T! O" _
pInvSort->Add(vItem.nIndex);7 a: D. x: Q0 m- D7 S8 K
}- c4 e+ \9 A" R1 L/ P2 @6 R
BYTE nDestPos = 0;
8 h1 u Y. V: [# T7 ] for (int i=0;i<MAX_INVENTORY;i++)
2 h' x6 P' H& C3 r( F1 J {2 x. e% @* C) A$ A+ H- [- J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; P5 z# R. T' c: Y- o. z
if (pItemElem)
! X: z3 o. {/ U, D$ I0 @: T {- T; x$ v$ R+ m# ?
if (IsUsingItem(pItemElem))
. M; c) X8 u$ W( L8 F8 @" M+ W! T6 F {
! F/ d! V3 D" i* P C //这个位置无法放
9 p2 {7 I+ T( N L7 r: I nDestPos++;4 k$ M6 h/ G+ {$ R5 \9 F) w
}1 G& @* b+ ]1 K& T6 f
}
- s- M7 x8 ^/ E* o# S BYTE nSrc = pInvSort->GetItemSrc(i);
# r. B' I" q* u- X( g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 F0 X4 o- q6 F) p; |( `+ h if (pItemElem)) s/ N4 c7 D; N
{
. c# d# A' A2 Q1 c2 `) o, `8 b if (IsUsingItem(pItemElem))* r2 k3 z* s' U- {" a Z$ L3 j
{
4 N# z- u# t* e1 T //这个道具无法移动,跳过5 u( D2 v; G: y8 _3 B
continue;
9 @/ e, ^/ ] Y2 @ }
* {8 _. Y! Y; s& h. S }else{
/ v' F' @+ u W //空位置 不用动; D. [# B6 p% z/ N1 K+ u; _. y
continue;9 z0 k- y2 u3 J4 `8 B- u( Y
}/ d+ n4 w( i; C0 M6 V; K3 t
//////////////////////////////////////////////////////////////////////////3 j2 g5 q2 y* g
//开始移动$ }4 j$ V+ o X& d* F4 C
if (nSrc == nDestPos)
" R9 T* ?8 z. J) n7 e3 G {
' n3 u% ~) J7 S4 k //原地不动9 H; a' f( m* B1 ?' n+ `, a
nDestPos++;
4 T [1 u6 j& {9 j4 m continue;
% @9 y. p: f; P$ i) x: d! X }/ C# n6 q) v' v; b6 x4 u; w* n3 x
pInvSort->MoveItem(i,nDestPos);
' p" ?+ ]6 F' Q8 l( o* C5 l) Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( Z/ }7 P5 Y) T! _: e Sleep(5);2 X7 M$ v3 O! R e4 L
//Error("移动 - %d->%d",nSrc,nDestPos);0 z U7 f# u, U5 V( f% `- T
nDestPos++;
5 Y, d- w) s4 e- S+ U3 v K }5 Y) c! P& z# E6 K8 b1 r+ [
//取第一个元素的信息! _' Y- l3 P# N: w- W% K
/*& a% { R( w( H5 o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; N) b! m0 a# D+ {6 l1 K ~ {; d# Y' W& g+ k8 v/ U% w4 ~
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* |5 y/ V/ h, j" e+ l9 V
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! I- J- |& ~ X4 t }
# e3 D- D+ B E& |2 { */- a. U d& u$ w& [8 j" g
//////////////////////////////////////////////////////////////////////////
, @0 H3 l- ]& U; H0 f* |( i break;
% f: _3 ^9 A$ g$ q j }
/ l0 i* L1 V1 {0 ?+ B8 h- f" H! y } , K1 p& [5 \3 v! b" q
}0 A; d5 [& W9 ^ O l
m_wndMenu.SetVisible(FALSE);
& y# U$ E; O/ L1 o1 w5 r) ^ d! @
5 g1 L3 }$ E0 t7 f* Z4 p; R--------------------------------------------------------------------------------------------------------! R$ v# ?* O" M5 a& S/ U2 v5 T7 ^
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 |0 W, b L; P2 C. f; n6 `$ R{
D; q* F$ N" a( nBaseMouseCursor();
4 j2 f$ {& k; w/ C, N8 a5 n; f! _} P( E! y! O$ F8 R- B6 Z/ I
在其下添加:
+ f- r/ _/ I$ ?7 n h9 x' I5 Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) U1 T7 I S! {7 b+ k& F
{
: T* f2 f. N$ @! K) im_wndMenu.DeleteAllMenu();, @6 J. U7 G4 }) ?: \9 j' D
m_wndMenu.CreateMenu(this);0 l3 L3 A1 q% T5 p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! Q5 }: S; c' w
1 |" `; u# _; r) X% zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). V- z" b3 Q# {9 x
{
& |! }$ `( ]9 b* j6 C' ?6 q- b- k //P以上级别才可以删除所有道具
6 f5 `0 }0 i+ ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); j" k/ r/ f; X5 w
}
. e7 j0 v% {) l, V, Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; L! E- b0 ]5 q3 V0 }, Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& O4 _. _: f' B2 B. k [
m_wndMenu.SetFocus();+ _/ `7 w6 x+ x9 ]
}
4 J7 Z. q. _& P# [/ z: I6 N. Q6 |------------------------------------------------------------------------------------------------------------
* u. n; r7 r+ O) q*************************( C' j+ R0 z) @6 e: G
WndField.h文件
1 E3 Q3 U# t$ K. G8 k0 u*************************
, V# F# v4 d7 S! j: T1 s搜索:BOOL m_bReport;! f% q3 @) z( V- i" s
其后添加:
; X. P9 w, F( Z q( M; `4 D, M9 I4 yCWndMenu m_wndMenu;1 J4 ^" a/ j- q$ m
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 g; D9 |' r) d! [' d# g. @其后添加:1 C4 ^- l# e7 A/ {. H
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 P+ r) k* ?+ j! T/ o9 w
+ d4 F. g1 M1 @/ c' R
; o9 I1 L8 R# a |
|