|
|
源文件中_Interface文件夹下WndField.cpp文件/ Z& N9 N; u, T5 Q* x
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% G: H4 i: G; l- m
+ C- F+ Y" F1 Q& e# J4 Ostruct sItem9 I. b2 i- ~, X8 _
{
) o$ T& s4 c( T% N# b9 W$ \0 u! \DWORD dwId;5 E) w k. ]( P2 F F; P% N
DWORD dwKind2;
! E. Y- ]9 y% S# wDWORD dwItemId;
9 I1 |+ ^4 l/ i8 b7 Z4 T0 lBYTE nIndex;
3 U) \$ ~- H" M: S8 _1 S9 k' DsItem(){5 ?: l9 K. B9 ]' |! L0 ?5 u
dwId = dwKind2 = dwItemId = nIndex = 0;
: c8 t0 F& i% {0 \) E}
* |+ N3 e* z# D" B1 V1 bbool operator < (const sItem p2)
. F: `! I6 a. z p! |{
$ X0 P7 c& \. U }+ b# A if (dwKind2 == p2.dwKind2)
: S& i+ M3 R8 F+ e+ q {
. p# O! S" J( Q* o9 F) s return dwItemId < p2.dwItemId;
( Q! M- b6 F) A- w( T }else{6 }, ^$ r7 e0 l) L
return dwKind2 < p2.dwKind2;- I0 Q, s! c' d% `. @/ Q9 W
}
; U, `6 Q$ w% k6 M3 D: Y1 L}
1 t5 e' z! [8 m, ?};
# k1 B) w l; @; x4 H# X; `class CInventorySort$ Q3 J {4 I1 V
{
- i# B+ ], g2 R5 B( G$ t; Hpublic:0 {2 H" p: v7 ~6 d4 R
CInventorySort()1 G. D% ~& }! k3 v. v. B
{
) a: w2 [: d; f' R m_dwPos = 0;- h7 t% {6 h4 I& L1 m# F
}3 q" ?' n" `; h) c6 Y
~CInventorySort(){}6 A2 |6 R$ _0 C6 J' J
private:2 i+ `# s" O) h) F) \: o7 i: {+ l
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息+ U/ t6 L' K, u* H$ S( Y4 o U
DWORD m_dwPos;
4 Y; X5 R3 F: l/ c$ f' D3 X( Fpublic:
8 E" B5 z1 |# E0 S" Yvoid Add(BYTE nIndex)
* E& u+ P: _: y4 S* r8 b4 [{
6 ?- J% w7 U& v/ r0 P7 J# V if (m_dwPos >= MAX_INVENTORY)% Z# E P# s* y9 W
{; \6 N# c, Q9 e( w
return;, t ^: O4 x2 l) H" j
}
& S4 S+ o6 C! O" N6 g( A m_Item[m_dwPos].nIndex = nIndex;, [! E/ ^* A; @
m_Item[m_dwPos].dwId = m_dwPos;
) j- [: e2 A. w3 p" K: J+ ~ m_dwPos++;
, B: z6 s9 _4 {3 q Y}
" B, [3 V7 w$ X) t1 OBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 a0 ?+ l' c, b% _1 I# y! U% L0 A; m7 a/ j
{2 Q) }9 j( j$ v G
for (int i=0;i<MAX_INVENTORY;i++)
8 M9 b+ H4 f( d6 p7 M {
+ k, N: C4 F4 c9 y if (m_Item.dwId == dwId)
1 E0 e9 d' z% ? ]7 {3 g {
3 i; `) C& g4 S. I% R( j8 I return m_Item.nIndex;
0 ~; ]" b" ?' Y' M, { }
f: }6 n3 p/ V* a! {, G& _/ Z9 N }' X% w' o2 L% Y9 p" U. |
return 255;+ h; @7 i+ A/ B: w6 z
}5 u5 h! E9 @# @+ U; ~
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 ]3 q$ h3 R8 d{
2 F. K7 z3 c2 v BYTE nTmp = 0;) }/ J* Y$ `, ?( Z8 P
bool bDest = false,bSrc = false;
5 v' T0 X9 Q" G% E for (int i=0;i<MAX_INVENTORY;i++)
, N+ q# w* O! j6 ] {
6 E% a; a0 z: Q if (dwSrcId == m_Item.dwId)
% j# o" e9 d3 }! r+ k- d {
- E# R* I1 E) [, P- | //id相等 则 改变对应的dest和src
( A% x; Y9 }& C nTmp = m_Item.nIndex;
- v% V$ q& T" l+ I3 l# e/ N m_Item.nIndex = dest;
3 c6 i/ g' b; Y! z2 w }
$ j+ Y% e: l( e }
9 i5 c; R5 U1 |; H! a //临时数据保存完毕,交换开始
: ]( v0 e1 c% x! F m for (int i=0;i<MAX_INVENTORY;i++)
8 ]$ D1 }( a1 R9 Z1 t" G/ {; H { x3 q$ m1 [1 Q0 O2 \
if (dest == m_Item.nIndex)! ^: n( k8 t4 s$ x0 F' i
{
) t2 p4 G* @% d- T/ l //id相等 则 改变对应的dest和src( ~8 k$ H" O9 h- W+ j
m_Item.nIndex = nTmp;7 \' R6 L! s! m C
}( n; E2 \; N" t2 |* b
}( ?" G- f$ k0 r
}5 q: r- a9 `3 Q) j8 }
};9 F- |; b* D% I/ {% [. }
-------------------------------------------------------------------------
4 r+ K7 U) l3 n/ y8 _" C; L依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; A: s; ?" w" R0 m( a ]1 {7 }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. l' |- l d4 K- L+ a& B2 O紧靠其上添加:
) t3 d# l5 K9 v$ \3 G3 G5 aif( pWndBase == &m_wndMenu )# D2 z1 a/ V8 P P4 p- M
{3 I' L x4 C- X
switch( nID )
* _7 h# {) N+ z" }3 x# Z, [ {
& R* t5 m1 i1 \4 C case 2:0 h' k( e0 p& g3 v: P/ K- }
{
b4 Y+ Z" O# l9 h( v0 F //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
' l7 `' ^+ q, O3 y' Z) ^7 {. i( J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 j9 q6 t# Q1 {7 ~1 x$ R# o9 ~ {
& A% j1 f. d* {9 o2 M+ s' ] break;; D. O6 a6 B E6 x
}* [. X' Z1 e( N( P2 {/ Q6 I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 q# S6 x+ G! C: w# |- g; Q7 f
{# d3 R6 }! E( o6 E& o+ Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) w9 F t/ l& ~& y ?; X
if( !pItemElem )
! s3 U2 t+ [# a% h1 t continue;6 J3 u C# `( e: F
if(pItemElem->GetExtra() > 0), v$ A7 E6 z* a k4 {; u
continue;
0 T, P Y% `" {" R4 L7 j& C if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 u, J6 ?1 h' h, y" J8 f. U continue;
0 t) ]7 N" O j- b0 m0 A if( g_pPlayer->IsUsing( pItemElem ) )6 X, f6 K3 \! b
continue;
: I5 u& @8 f2 u0 Z0 Z# `8 D; T; S if( pItemElem->IsUndestructable() == TRUE )
9 |# P8 s& }( p {
; p$ V! d! S ^3 f4 E g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) [0 @' c+ D+ U8 ~( X1 ^& @
continue;
! U& x, H7 K1 G: P$ ^3 X }
" n8 A! s8 D4 u$ Q$ j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); c' K5 g' J( [& R
}- n1 ^; F8 ]4 z9 n% A* I% T
break;
$ b7 q" W4 @! M1 i+ r }& X3 K* M. `6 e: u3 R# C* V
case 1:
2 g { s2 {8 o- w1 u {
' o; P2 v) \$ x //整理背包: C2 h! u, I: P! @ S
//////////////////////////////////////////////////////////////////////////" e# F; D. t# R4 L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ j+ }5 }- \7 q5 H8 ^" ~$ \" `
//////////////////////////////////////////////////////////////////////////
/ j& P# W c' { //////////////////////////////////////////////////////////////////////////
$ e- |( b% R$ j# C: q$ ?2 Y! v+ A CInventorySort* pInvSort = new CInventorySort;
3 G- [; \' J* ]. ]9 l vector <sItem> vItem;
$ ]3 e0 n' U8 a6 _$ b- s, c vItem.resize(MAX_INVENTORY);//初始化大小2 h7 e( ?, I4 I2 @, d8 ~: k
//////////////////////////////////////////////////////////////////////////. ]4 k* x: w% g+ r! t* k
//填充数据& f/ W) v* j$ j7 W, v) p! T% `
for (int i=0;i<MAX_INVENTORY;i++)
& n) l: s) A* ]% b4 m8 K {
- F. W; F( o( C* x. l/ I- z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" ]9 E# Z% a% Z2 C0 } if (!pItemElem)
8 }/ l" p3 i+ i- T! c9 V {
( x4 |2 n1 y7 n7 @ vItem.dwKind2 = 0xffffffff;2 M* {$ _" X& I' o
vItem.dwItemId = 0xffffffff;' W7 w1 I$ a+ x
vItem.nIndex = i;
, V3 ~/ O0 k3 g6 r }else {+ ~* g. p' v6 U8 a
ItemProp* pProp = pItemElem->GetProp();
$ r h8 W6 O0 u" P. w9 Z0 ~ vItem.dwKind2 = pProp->dwItemKind2;6 Z9 E# h( C% r) H5 M" B' n
vItem.dwItemId = pItemElem->m_dwItemId;* D8 H* L2 k( g% L j. C+ S
vItem.nIndex = i;# ]1 z7 C" G/ N& U: B
}
# ~" B: i& f) u3 c& w" n) [9 H, n! Y* I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; T) A4 V. f# r9 Y }
6 F; z V, A1 f0 r8 n R //////////////////////////////////////////////////////////////////////////) X' \+ F+ D' `4 \ |4 R& E$ t: p
sort(vItem.begin(),vItem.end());//排序
# T8 E; Y3 o4 E) v //////////////////////////////////////////////////////////////////////////; d0 s! w$ O0 p6 g
//交换
4 Q" g. I# Q2 k5 C2 d for (size_t i=0;i<vItem.size();i++). e+ D3 p' t# Q
{' a, }5 @$ `, U4 _1 N/ K# a) I( J5 Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* T0 V1 o4 ^4 J i( `' d0 f% A
pInvSort->Add(vItem.nIndex);/ c2 T; i9 x5 k. y
}
1 ]; D) ?2 J' [" J# d$ f1 \. l BYTE nDestPos = 0;
0 s' _4 W; g2 u! S1 t* s for (int i=0;i<MAX_INVENTORY;i++)! t! T& p& p* X/ m2 W
{
9 P3 J" M& E: X! W& F- C- C5 { CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' _ R/ o+ j+ a: O2 X( W if (pItemElem)0 j, v# M% E* N; N! Z
{0 s3 t. L. e/ h. ^. \
if (IsUsingItem(pItemElem))2 |' {" d& F( W2 N, o3 [* @! c( ^
{
; a' I* U- c4 j& s! G9 C* |8 ] //这个位置无法放" c& t0 k3 h3 d8 k7 o
nDestPos++;
8 B$ A/ Y" m0 Q, ]* o }
2 W9 A' s2 q. b9 r+ J }
; ?8 d7 j/ H( B3 l BYTE nSrc = pInvSort->GetItemSrc(i);
' T+ X: {. ~$ Q4 q( X- _, Y. `9 i4 r pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, x6 ?1 I5 R+ R$ e; P9 h n
if (pItemElem)
& A9 L. r, v1 ^ {
0 b6 t! F/ A. ~ l8 U! F if (IsUsingItem(pItemElem))
+ g2 c6 Z0 a I3 t3 q {
/ E" f0 X5 }. q9 W6 p //这个道具无法移动,跳过& |- Q, X3 I2 d% q7 T8 ]! T
continue;% A/ ^+ b* p4 a& S9 h, ]6 ]9 E6 n
}
' I& t! G' N9 D7 o) E0 o# k }else{
6 d' @/ s( `! n6 J$ c: Q //空位置 不用动2 }2 I5 X% h0 U1 s5 ~6 ^4 k2 A ]
continue;2 t& J, J) j! s. w9 M+ x' Y
}
8 O- k0 W2 b3 t& n6 M //////////////////////////////////////////////////////////////////////////, m& q% N; z! X' D' z6 g' H
//开始移动
9 o1 ?' l6 k. [* T6 u- V if (nSrc == nDestPos)- A4 [+ q' Y& C
{8 b( F* g; U' K2 b2 q
//原地不动
( {! C( K( u: q: S+ B' W. g nDestPos++;5 L) a; K" f0 `1 N" z
continue;
' ~/ P/ M5 M6 f! j) S }1 g; X: l, Z, \8 Y/ a1 z8 V6 n% q4 ?
pInvSort->MoveItem(i,nDestPos);. e% ]' @9 q/ O) |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: M' X3 E2 x7 G8 J4 Z Sleep(5);) G; k7 m5 K0 a6 ~; p% C" {
//Error("移动 - %d->%d",nSrc,nDestPos);
: K9 D) G4 V5 T3 t) Q N nDestPos++;
1 d3 i$ v- V6 r5 d- ~2 m0 d }
1 V4 J+ u' [3 p //取第一个元素的信息3 F* p( Z/ E0 r! D
/*( W. q7 n: b3 _6 P% Y+ Z
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" ^# J5 D% L' t, r
{
9 {& d+ E0 l0 K% B4 C P" q8 d4 B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% M& f+ [; y$ T- m$ t+ f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. l! @$ A$ w, g1 I5 v7 m
}
/ { p5 _( ]' F) A2 L% q+ n$ r8 x */+ D4 V5 ~( g0 F# s2 Q( G% w
//////////////////////////////////////////////////////////////////////////" n% M" }) V4 [2 Y: K
break;- F% D( R7 C$ V$ J$ L
}8 f0 o) L5 |, S, U5 L0 k* k
}
7 P- ?* _% K- e& S# S2 F! C}( b9 @8 a9 J* I3 r$ L9 b1 J$ P7 N6 e; O
m_wndMenu.SetVisible(FALSE);4 c7 {( i% r# K" p7 `3 R
' M, ~$ i H: m0 n3 H: |; p--------------------------------------------------------------------------------------------------------$ O5 r7 C- U. `/ Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
s: A1 [' q" n6 g* E9 d{
- n j6 Q6 i; R0 o7 z* ]1 E3 a( \BaseMouseCursor();: ^6 ~ y: \1 I
}" J2 c+ |4 S1 I2 f i+ E
在其下添加:
! q2 }% @$ ~. b1 t; o% k5 ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: U' m9 h& E4 p{
3 A! w! m* u. ^$ km_wndMenu.DeleteAllMenu();0 Q) C9 J0 l- a' f
m_wndMenu.CreateMenu(this);; D* l9 k- q( z. Q- t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
( Z8 Q# Y- a3 ]( _+ o7 d
$ W8 h5 D" y, x* o" `: k1 m. |+ s! nif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- @" q# K+ I9 y: l# F# C9 G& k( h4 m
{
@3 ^. g5 ]& w7 H! x //P以上级别才可以删除所有道具9 R! G6 m6 L/ t" I
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 E" ~$ m1 u I% X o( X
}
! ? q& ]- v' I$ [ gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 H& K M/ y I! Wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& i+ X4 S7 z" k, V- S$ L5 e) `( J# lm_wndMenu.SetFocus();
/ v2 P7 ]9 u' o8 p* A/ B}# G$ [9 Y3 F _& M. O9 ~
------------------------------------------------------------------------------------------------------------( S" @; J) x$ z' c( ]* V4 o. P* e
*************************$ `* i2 F* k3 o
WndField.h文件
X- ~/ B" m0 {& n( q( r*************************
! ^: h9 L; i6 S* @, A搜索:BOOL m_bReport;
* K& {9 U+ A" T1 M) N& f% b6 t6 i其后添加:8 }8 ?9 V4 v) {0 _5 W5 V" E. _
CWndMenu m_wndMenu;" y. b6 c" q( Z1 r V9 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# p. s" ~2 N! b0 n8 ^* @其后添加:
4 x7 d" p+ T9 C9 {# l; tvirtual void OnRButtonUp(UINT nFlags, CPoint point);
8 H* @% g/ A7 n6 a- G
( d) m: L4 r1 e$ H( V- Z4 f/ Q
# W5 \- x* r! y1 E, s1 \$ W |
|