|
|
源文件中_Interface文件夹下WndField.cpp文件! d# P! g% H# U3 i+ Q) G
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; _" i3 ~' v/ T: v E4 U+ n
/ }: Y! b: V% @8 l, |4 cstruct sItem
. }: j) P& ^/ z{
: ]' r$ Q9 i! T( x A2 L9 r( mDWORD dwId; ]3 v! ~1 N/ V/ a+ F
DWORD dwKind2;
7 S% {$ u3 i, E" a% y7 I8 bDWORD dwItemId;+ C- }7 C) A" K6 G7 c
BYTE nIndex;
3 B+ Z+ D, ?. h# T2 L7 D5 C9 }: u! fsItem(){/ F/ ~( ?3 a# `) }
dwId = dwKind2 = dwItemId = nIndex = 0;3 d. n4 n) U/ H. S; f/ N
}$ H% z: F" t* b8 H1 F/ L% b; z: E
bool operator < (const sItem p2)
; @. o6 `, s7 f{
H- v6 D) q9 }7 { if (dwKind2 == p2.dwKind2)
1 |, f& J6 q6 B$ g- d* g4 F {
2 I' Y/ f5 R! I/ S5 k, o9 w return dwItemId < p2.dwItemId;
; i0 f$ s# d: O1 e9 [- t }else{$ Z1 M$ v. J! R' }( X
return dwKind2 < p2.dwKind2;
* q; ?1 M" t) N/ ^5 @/ Q; C9 y$ G }
6 C; G) ^& ~( q}
# P1 `- A4 v7 L};. n( \1 I) j4 i7 i, d) ]+ v
class CInventorySort
6 p% [/ V/ w/ f$ B" v" i{; U7 [; v9 m/ J9 [
public:
$ h) Q( @1 d( k6 y9 TCInventorySort()
, `7 a' t$ P) J{
8 f, y$ b' g3 z/ G m_dwPos = 0;: J; W* c7 X0 h! ]7 s% G# L* A w
}
$ l: N; q' A% ~" Y6 H1 n1 T4 S0 z- P~CInventorySort(){}
8 u2 I6 J8 t/ t, W$ cprivate:% |- K4 [0 K h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& b$ j3 v* l& j* L
DWORD m_dwPos;) n9 [% M) V3 b0 p; J
public:6 \$ M- {3 ^1 q6 x# c6 h5 H
void Add(BYTE nIndex)7 v) _$ W" B; e. B* S% w `' C& U
{1 \( J Y0 S7 f7 E7 o
if (m_dwPos >= MAX_INVENTORY)" H7 ?3 F _) I4 P/ g0 ]
{3 W v) k: ?; s1 |
return;' A5 J& O; w- A* C/ W( O
}
; c) ~) G7 q8 R) I3 e m_Item[m_dwPos].nIndex = nIndex;
0 h& I9 J8 I( c7 B- {; }. X m_Item[m_dwPos].dwId = m_dwPos;' r" V( P3 |3 T# {% ]* \9 O
m_dwPos++;
. f" p, F( C7 b8 v9 I}# H. A' A' r, f \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 g0 [# o# B- @5 x5 j. ^' C
{) R% P" \5 v2 C- W6 p: a
for (int i=0;i<MAX_INVENTORY;i++)
$ D' m$ o) C0 V* g {
6 N9 ]0 {" j6 S) [% x7 ?$ U4 O if (m_Item.dwId == dwId)
Y# O- g2 [ o$ K( c {
! n% ]" m& H* W& O7 X4 G; q* f return m_Item.nIndex;6 J: T J3 _6 B3 O6 ], T9 B# ^& q
}" W; Q; P6 A. R/ t& S5 B
}
- m; n* X$ T0 _* K& J return 255;4 u! T, ?" C- [: Q7 S/ ~
}
' H. R) v* R6 V% Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 P) G/ _+ Q$ @' d/ R5 ~$ a5 D
{0 Y4 u) v3 N% z) G1 T
BYTE nTmp = 0;
# U$ U6 P4 x/ c$ ~: s bool bDest = false,bSrc = false;3 U6 o3 t& l: F: g1 X6 {7 f7 R* Q
for (int i=0;i<MAX_INVENTORY;i++). h/ ]6 h0 o: Y% i' E7 Y: x
{# N$ D5 I' j) B: I, Z
if (dwSrcId == m_Item.dwId)
7 Y" z- i' h+ k4 E8 @1 z {
/ `1 a [$ z4 l9 g4 j //id相等 则 改变对应的dest和src
2 U; d6 g4 I- ?+ x# C0 w* P! ^ nTmp = m_Item.nIndex;
; W8 v( X% m4 J& u m_Item.nIndex = dest;
/ M! W% B3 j- S3 p7 ^# L }
) @) \2 J( T) y7 z }; o2 m( g. I5 a" `: q/ P
//临时数据保存完毕,交换开始
. s; o& ~' K+ i* ~$ e$ i# W( E for (int i=0;i<MAX_INVENTORY;i++); t' _ T3 t7 r6 ]/ Q2 _+ Z8 T) O
{' y. S% N2 `4 Z/ g5 ^
if (dest == m_Item.nIndex)
O, R+ x6 ?0 E3 n2 l+ R. i. a% f {
" A) F: ]9 P' C //id相等 则 改变对应的dest和src) S4 b! s7 Z+ ^6 _4 r
m_Item.nIndex = nTmp;
( |. X' v5 x# Y }
0 e6 i& P+ B' q- q$ u+ O0 b }* H" Q( @# F& C# i0 o
}
0 I8 L5 q+ F, W. T5 q/ y T' \- y2 ~};
2 D* b6 T* e7 {1 l4 I* H-------------------------------------------------------------------------
% d% @1 B }% s0 O3 G* Y; w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 K' r" f: ] C6 L% U8 F& j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);$ k6 t- P/ p! U8 X* n) J( a. w- E
紧靠其上添加:
) ~; G; V* E' a$ Oif( pWndBase == &m_wndMenu )
" ]- A/ _2 z7 _( ?& ^% s, y( f{
8 l1 ], C1 S2 P9 p% W7 @0 E! ^: R& } switch( nID )
S6 ]' Q$ p. C) N {5 V! J+ ^3 e) f5 ^
case 2:
8 f% N/ F* Q2 H m {9 R8 n4 m2 o! ~6 K& [% {% [$ @) z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
G j l9 O2 A; M0 U2 a- w& m0 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). y7 c5 V/ v( `. c, z' ~
{+ D9 k& ~/ c- G- l3 j
break;
. X" B8 E2 Q7 @5 m3 E* t9 j }
) t7 Q8 c' \% W- ?: q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" v# {/ ~7 G o/ f a w/ B
{3 F4 k# S3 ]8 t5 o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- l9 S$ n9 E3 W7 _5 O( `3 n
if( !pItemElem )) s. J/ P6 U6 z8 j+ G4 @; S- z) l
continue;4 U" q8 V* ~7 t4 T @0 `
if(pItemElem->GetExtra() > 0)
6 @/ a( n9 _7 ~ continue;7 W. A' e* H/ ~! ]' F7 h n; T
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 @: x+ L& ?+ Q# [2 @$ F9 J6 O0 C
continue;1 \7 P% M( P8 \
if( g_pPlayer->IsUsing( pItemElem ) )
8 A5 o/ c4 v7 L1 r0 g( n+ F7 k; n continue;
% I4 t! ?# w1 w if( pItemElem->IsUndestructable() == TRUE )
& F9 ^- r3 p* y' q1 Y {
! I2 Z8 M% m/ }, ^" j1 |2 i6 v" J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
2 b* }& g1 o; B+ C# r5 V( Z1 `6 B continue;
( R) y; B( C. G: T7 p. W! V( r }
( m1 l; ]2 m) Q$ E+ O) ~* N O; ~ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 H3 J, C2 M% m m' U. Z
}
2 z9 _) L: a) C$ a- ?& O- [ break;
/ b' W' `4 K4 G& c }
' s1 e: \0 M1 y! Z case 1:$ P' H' q* F8 Q
{
2 f/ P2 @. l, ~, U, _ //整理背包
$ c, F4 O7 k( t/ Y7 ~: P6 i9 t //////////////////////////////////////////////////////////////////////////# m. D8 @3 _6 R: P# K* l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 N+ R( A# ~' Z' l' \ //////////////////////////////////////////////////////////////////////////! | `0 `( W* u/ ?2 [& F% Q) U3 \
//////////////////////////////////////////////////////////////////////////8 G, f1 r* v% X9 r* b
CInventorySort* pInvSort = new CInventorySort;0 t: B5 O( a9 P5 t+ b
vector <sItem> vItem;
* J* g( ]$ V8 P) R1 e2 _ vItem.resize(MAX_INVENTORY);//初始化大小
9 R0 B, v: \# V //////////////////////////////////////////////////////////////////////////
, [# S) M6 o8 G' R6 C* n5 G //填充数据3 \+ _; g. \, K' t/ e
for (int i=0;i<MAX_INVENTORY;i++)
8 A4 \8 Y# X& k* o {7 s+ G# j# G" k) k+ g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 k5 l& @+ z) I: V: ]+ Q if (!pItemElem)
' H' ?5 ^" f3 @2 S& ^3 Z { @8 O# ^7 l$ o' W
vItem.dwKind2 = 0xffffffff;( B& ~7 h! `. O+ D% W- P3 e
vItem.dwItemId = 0xffffffff;$ v1 E8 K) A& x, f: S( t
vItem.nIndex = i;6 U7 T2 y1 }4 ?( _# M$ O/ |7 O
}else {
8 ]# q3 i# J- d ItemProp* pProp = pItemElem->GetProp();
% s- j3 h- m6 {: B% C: b% `; C6 h. w" q vItem.dwKind2 = pProp->dwItemKind2;& J" _# K' |' A( i4 i, O
vItem.dwItemId = pItemElem->m_dwItemId;! p3 h) D4 R. k5 b; z
vItem.nIndex = i;
- A2 G: n& _5 `; f$ C2 S! } }
3 y6 f7 h |' Q& n4 n0 } //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 T u* m' u" f! o8 \4 ?, q }/ [' Q! M7 n' r1 Y; ~ n& v
//////////////////////////////////////////////////////////////////////////
, `2 ^' `% F) A+ |9 \) G sort(vItem.begin(),vItem.end());//排序
) T+ h& L; f5 m. n //////////////////////////////////////////////////////////////////////////
6 p1 u+ n+ N; R //交换
0 [6 v" T5 z. `* {6 N for (size_t i=0;i<vItem.size();i++)/ h: c3 m( Z9 x2 A* K9 q" G, T
{
7 g4 N2 f9 ^3 z% X: o. ~ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ n' w) C. S" }, h5 x3 a pInvSort->Add(vItem.nIndex);4 l& Q' T* n1 I3 G) L6 e
}
- Z( x9 q: ?, ^* D8 d# c0 P' P BYTE nDestPos = 0;
h# i' ?5 ~ u1 P for (int i=0;i<MAX_INVENTORY;i++)
! ~ x( O0 |- X& N# o( f {5 ?' t& \* C+ x5 h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; ~# e( ~& _. D9 o5 j/ m7 y8 i
if (pItemElem)
3 V2 i; B6 m* v {$ G* f( p* W: ?3 s* j
if (IsUsingItem(pItemElem))) S$ o! W1 U& e
{
" y( o$ e$ D# A* L! \, a- j //这个位置无法放
; l( C0 Y( |: \- e$ ~5 u* E nDestPos++;( T" n9 }& Z4 F9 R& r
}) E* S1 P0 d8 C' \" Q6 m
}
( }$ H- j7 e% l7 y- `; n BYTE nSrc = pInvSort->GetItemSrc(i);% ` s7 a7 n: B+ [. I5 K1 ?# K% m
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ B0 }" |4 U$ i5 F4 i if (pItemElem)
2 b/ s% Q+ b# A {
+ G0 V6 X% {) F) E5 h$ E if (IsUsingItem(pItemElem)) t" A% \2 U6 m D0 }
{
2 P$ i# \2 W' C; o- Q% c& f //这个道具无法移动,跳过/ v2 s, E: k# h& n: I/ W
continue;
5 n6 A! |, e0 M" f! V# @8 j }& s1 c- [! e, H% Z1 V& o: _
}else{6 L& t$ M0 h' A4 N X
//空位置 不用动
& A6 F- Z* d+ d9 } continue;
8 o, L/ U# T+ X. K2 \$ [# K }, @0 U9 y x! V1 t, }! A
//////////////////////////////////////////////////////////////////////////
J2 d. n& K$ Q( K //开始移动4 ` O. w3 O2 B
if (nSrc == nDestPos)
1 B% n. C& k# ~/ b7 ~ {! ~% {7 Z) d7 @* m/ M. ~
//原地不动
( p- r1 {4 ~/ c3 o% ~ _3 W+ P nDestPos++;$ P4 ^ w! p: N
continue;
6 ? f: A9 Z4 K' \0 s i! _ }% X0 Z. L' A0 N
pInvSort->MoveItem(i,nDestPos);
! n9 v) g4 D+ C. u g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 R3 u! N6 H) ?: h/ ~
Sleep(5);9 E# y6 J5 { r- w1 K& b
//Error("移动 - %d->%d",nSrc,nDestPos);- R1 S( j4 w* w0 w
nDestPos++;
" V7 o0 ~, l0 a; Q% c9 _ }
1 T1 {/ Z* E, e C' Q //取第一个元素的信息) S$ v# y. L% w$ o! ^) m
/* M+ C8 v1 P" Q7 E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 p u: |: G4 {) _6 R& V3 K {" ]5 N D$ y% M& A7 w% |
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- O5 i9 ]5 K Z' P! E2 W H# h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: n9 i. `: E! b }
; t$ b o7 X3 F( Q7 i: L1 |- x8 p */% L3 B! J* v8 g- f9 B
//////////////////////////////////////////////////////////////////////////5 c1 }6 q9 r) ` E" q+ C
break;" Z3 ^+ z9 s- L, F
}
5 b5 B9 g$ ]* Y* i; a# ? }
, y# H C/ V) S7 I}
; r7 P! q0 s' x6 em_wndMenu.SetVisible(FALSE);
6 B' d6 S9 {$ b3 v; l+ U8 [; T( Z- u0 v% U
--------------------------------------------------------------------------------------------------------
3 N3 E; q/ A$ I, n* K3 k* ^搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): P: f# D8 {1 s) I! l7 v
{! I# q) i0 g. e
BaseMouseCursor();! ^; u/ ]7 G& f9 }
}) w7 Y$ Y' M! }% d
在其下添加:
( R' u9 w9 b& Y; ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)4 H8 y; ]) s$ M7 x; Y" r* D
{& d8 [- @* n4 K0 ^" H; s8 e
m_wndMenu.DeleteAllMenu();
# e( m" K# v: N0 d3 `0 Hm_wndMenu.CreateMenu(this); n& ^* J- O/ c2 w( U3 K" U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( O1 ^& W) T8 R, |7 ]# c! J; W& l+ C; k. z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# ]% G5 F9 e ^3 j! v! K. s$ f
{
7 W; W0 u) A# {9 n: H //P以上级别才可以删除所有道具
0 j H- E m' }, k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ R; v- e$ t9 f1 a: v% o
}9 h! c, T& S; c6 I# [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) B, @+ e$ t/ B# |
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
T. Y q4 t! ^4 em_wndMenu.SetFocus();: m) d. G- P4 f; x3 k
}
' K" ?4 ^! c0 g1 y( g- P# G------------------------------------------------------------------------------------------------------------5 B( r. I3 {. E
*************************
7 R" y" K* z O3 kWndField.h文件
- r" i4 ]+ I+ N/ e/ Z6 |*************************7 Z1 c( j3 }, w" e. Q- W
搜索:BOOL m_bReport;
7 _ K R# l7 }0 ^其后添加:
4 d' P1 e$ `6 B s3 HCWndMenu m_wndMenu;
2 i+ A0 u, j# V% |* S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);6 M/ l6 U) [4 a/ e" F
其后添加:
( E$ E' P" v0 O6 y2 k I' Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 o# R" S& M7 \, U
; D ?4 P, Y- ~/ m( C: N7 F% Y! c+ m. |1 s% W# a
|
|