|
|
源文件中_Interface文件夹下WndField.cpp文件3 Z' T8 q& Z' R/ V/ P7 g4 A" s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 G1 }" V, y- H, w7 @
; L. J5 z+ p2 F9 H9 `' n6 bstruct sItem2 X, O `5 O' l5 G0 \8 Q I
{4 H4 g' L9 B* b$ f9 i" h; y" |
DWORD dwId;
8 z% \5 e0 N3 o; o1 e7 n6 S3 i+ V6 fDWORD dwKind2;
6 m) f4 B1 c5 ?( Q3 gDWORD dwItemId;, c& Y, x- l( {7 D/ a" Z
BYTE nIndex;
( [# n* ]5 z) u1 d$ m! l8 ]( GsItem(){
* W+ R( O5 R8 e0 n dwId = dwKind2 = dwItemId = nIndex = 0;% `2 `% ?; w1 U, K8 L
}
, q1 t( M4 X5 ]- @# K8 Q' I% f- ebool operator < (const sItem p2)8 s! o3 _ F s
{
3 a+ U2 g( B, K! { if (dwKind2 == p2.dwKind2)* E$ g2 E/ ^8 Z( i' B
{
$ E0 t8 n! G! O0 F return dwItemId < p2.dwItemId;
6 N! C/ F6 ~9 C, L# ? }else{: ~1 H4 h0 J6 G* k" x
return dwKind2 < p2.dwKind2;
- F) k. M" \+ x/ q }
! b) {* O7 S! M" T+ E}
- a# r0 T3 N0 M};) ^! q' v# ~* ~& m N, H
class CInventorySort* [' a' x% p, l7 X9 E% P8 C
{
3 W+ H3 L6 w2 t8 r. U) y q# S5 H, \% kpublic:4 a- A1 k$ A9 q9 U
CInventorySort()$ U- Q/ U% f F, y4 }
{- L F! ]% e0 M) o, m6 B% V/ X- p, e
m_dwPos = 0;, _8 m2 `+ J4 g
}/ S( I% c6 C% W/ b! q
~CInventorySort(){}- q3 U$ s- r3 G6 F& Z+ {
private:
+ p7 M; N" |6 l( ~( j7 ?sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 S9 Z% Q {( d
DWORD m_dwPos;
/ i' T; C1 g6 p8 ~9 i( upublic:2 k* o8 P/ x' U4 y; S9 ]: y
void Add(BYTE nIndex)
; L" N! d3 v6 ]{
. ?5 S; n8 p- O: i7 r if (m_dwPos >= MAX_INVENTORY)
0 l" v* q8 t7 s( r# N5 p G {6 ^/ i( t6 E7 k* X
return;1 i3 Z: h$ b% {. K1 m6 n1 f
}8 m$ m9 ]' `# s. k2 p$ D" P
m_Item[m_dwPos].nIndex = nIndex;$ v$ |8 a4 r5 v3 G; o3 R! E5 L
m_Item[m_dwPos].dwId = m_dwPos;
$ Z# k: e# p) {& A8 V& a m_dwPos++;
, ~& Q" I% w6 r$ { O}' j( u6 a) V( B
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 Z1 |- p' J0 q( K7 j( p6 s{
% {& N8 X0 W' O9 t( K! p for (int i=0;i<MAX_INVENTORY;i++)
( g9 I5 q- `3 j& S {( r J) I) r7 @9 e2 I* q8 k9 p! ~
if (m_Item.dwId == dwId); \$ L+ s E5 n; b: l
{
, {" t: m8 a7 B& E- @ return m_Item.nIndex;1 W0 v* e! M2 A( L" C. [$ ?
}6 g& w* V9 G: D$ \
}! v T* V6 C0 `& a s
return 255;
+ O" \) z: E _& r( ?2 h. H- U}
& k% Z" @0 T9 a4 @void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- X* H! h3 y$ l) H# s V5 E4 @
{
. A6 ~* ~' I3 U# v W3 C! c BYTE nTmp = 0;0 f. q- f2 u) U8 ]* f
bool bDest = false,bSrc = false;
1 K% t# I5 h/ q# F K# f9 ? for (int i=0;i<MAX_INVENTORY;i++)
7 H& ~5 Z4 c3 ?" N: B2 w0 a" ~ {5 s3 h$ l4 r; V- M( x1 }0 Y* m
if (dwSrcId == m_Item.dwId)
. G: U( c2 o$ Z+ x- v6 } {
2 s2 r& V) c6 [4 Q //id相等 则 改变对应的dest和src
4 H! o3 @6 F( i8 N g& _2 E nTmp = m_Item.nIndex;5 a! F: j1 j- K& c/ |, O6 y
m_Item.nIndex = dest;7 l! u4 p- P- r; ]7 P3 |2 ~+ r
}
/ d) b. @' c0 ^% |8 N/ l }
Z( N& U0 p& _6 z7 t; `% C y //临时数据保存完毕,交换开始
* n" n$ N" p. j$ ~ for (int i=0;i<MAX_INVENTORY;i++)
0 z) E- W& O/ f: M5 U {
* d+ Q, i# {) X3 q: l7 @8 Y" n& } if (dest == m_Item.nIndex) ?& P) n3 G, T
{5 Y Z0 p& U, ~0 Q5 b
//id相等 则 改变对应的dest和src
4 _" P+ d9 T: Q8 \ m_Item.nIndex = nTmp; C3 ?$ k5 h% h5 t; E! H
}
H# [% T7 w& O }
- }- c/ p. w3 ~}' [% W8 s* e T$ k
};
! k( y* ]# b# V* P, t-------------------------------------------------------------------------5 d O8 d8 H: c- }# X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! d8 \# b6 F6 e: ~+ _: v3 Y/ |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);6 O" J$ p8 [. z3 F- n$ E# ?
紧靠其上添加:
~# p1 z" g* Q7 o6 Vif( pWndBase == &m_wndMenu )
& H1 e5 p2 u, i' P{
+ t. L% O% [; D5 f0 g/ q, ^5 h switch( nID )4 N/ V1 J3 B1 z7 T: \& M8 V
{$ A' u, }* |+ [
case 2:8 |% M" j& C0 w
{+ A( L! g* b I- K3 ^! t# y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 m5 ]2 B2 A0 H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& \: e! j' r6 U2 h4 f {
8 Z4 U# p! H/ J0 L9 l& ~4 [2 u break;
t f0 P: u. |( l% W6 p; n3 o }
# }% x. O) h8 o& Z/ X for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ j. R+ N/ X: q
{
# `# y1 K: \+ R* ^" B( F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% s- w/ i/ [6 }/ x' A, e
if( !pItemElem )- `( {8 G5 b+ Q) m
continue;* S0 N! _+ Q2 ~7 \- e# d
if(pItemElem->GetExtra() > 0)7 \! [9 y: I4 r/ t" u& U
continue;$ `' g& c1 h. _8 F
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 I8 T* n7 V$ o
continue;
6 M1 K5 z6 z. Q/ E if( g_pPlayer->IsUsing( pItemElem ) )2 ]* Z. o/ ]. _5 `' q
continue;; z0 _, l0 F1 v# N5 [1 e
if( pItemElem->IsUndestructable() == TRUE )
' R( F3 X; Z! n& w$ [7 h# }- |- o {2 e+ K5 S8 F/ F4 Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
r/ ^9 ?, p7 U- Z" P continue;, A4 N+ Y X, w
}
6 N, v; P9 b. U( p$ k& l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% T& i2 v6 X/ J( H0 |% b }
7 [5 a" Z' \6 F break;
2 D' S: w) N% d) V. b4 Y Q }! F, n: P* ?! v1 F! a
case 1:
% i8 d, v* E' ?4 o. H {% `: s) E+ ^' [4 O9 U9 P% G0 f
//整理背包2 y* y) J# {3 T3 E4 o7 }2 @$ h( u: A/ T
/////////////////////////////////////////////////////////////////////////// \, a; c7 {3 J6 \
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% v% t+ F6 a; i2 ^ //////////////////////////////////////////////////////////////////////////1 S" [. W0 }6 q$ {- k6 E+ ]9 m
//////////////////////////////////////////////////////////////////////////
j2 Z! q7 W* b. ^! q0 [, N2 Q. \( y CInventorySort* pInvSort = new CInventorySort;. P; W1 Y5 T; s# m/ G
vector <sItem> vItem;) z) j, l3 b% I; k( U
vItem.resize(MAX_INVENTORY);//初始化大小/ @. X* r% F8 c- y, p
//////////////////////////////////////////////////////////////////////////
( B( {6 x9 c* N0 c //填充数据/ Q* k& ]! _$ F
for (int i=0;i<MAX_INVENTORY;i++)
2 @9 C! D; e) B; p4 S' ?. d& Y {! y+ q4 R8 Z$ a# s2 U
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; h9 ]. R! w# R L+ L. H ] if (!pItemElem)
) u+ X ~7 d1 H' r9 ` {1 Q! s2 N9 ]0 t2 _0 d5 x
vItem.dwKind2 = 0xffffffff;% w; j# G7 T6 K. r" B) @# d
vItem.dwItemId = 0xffffffff;
& |1 J1 c/ F0 \8 Z% o, j) Q vItem.nIndex = i;
- h5 K9 h- e5 a' O }else {
* J" \! S6 t* s8 `: y: n$ a ItemProp* pProp = pItemElem->GetProp();
' y3 y* z9 s7 e vItem.dwKind2 = pProp->dwItemKind2;
, o) |+ \9 k9 y, b7 D vItem.dwItemId = pItemElem->m_dwItemId;
5 A, _( ~8 W/ G% c& B' X& { vItem.nIndex = i;4 k o% F8 ~7 x* o1 F- }; k `
}
6 ]0 s2 ?3 R) y* G% e/ b7 f% Q //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) _6 J! B! ?5 s' p }2 {& a/ N' U7 \
//////////////////////////////////////////////////////////////////////////
( \" K9 M" M- P* Q" u, t6 ^ sort(vItem.begin(),vItem.end());//排序& j4 o6 p' v" b* O
//////////////////////////////////////////////////////////////////////////
2 P" W7 H& a6 K2 S" d+ | //交换
' D: N$ j9 i' W for (size_t i=0;i<vItem.size();i++)
8 ], r- J1 g9 t$ n {6 B! L8 N( x {
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ }1 n( f$ Z( s% M% Y pInvSort->Add(vItem.nIndex);; R: P4 u' N5 k1 X( _$ J
}9 q2 O- @' Y7 }$ v/ Y* P
BYTE nDestPos = 0;
. J. j: K, @, X% u+ w for (int i=0;i<MAX_INVENTORY;i++)5 I7 I; N& \7 U5 z; N$ W# e Q
{. f* R4 F0 i: v- S& I# d6 X' f9 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);5 J1 d) s# m' ^$ ^5 p2 s
if (pItemElem)/ i( l) T) T+ B9 z/ t
{
) L+ C$ \7 f0 H0 n) u: P if (IsUsingItem(pItemElem))( b- f3 ^5 K, e$ n7 k
{, N+ H1 V# K) Y
//这个位置无法放
0 A* T- O6 _& Y# d5 X nDestPos++;+ L3 X8 m. {3 j7 t: C
}
$ o) ^- `7 `* f8 H: C }1 Q9 k; K8 Z) x" h: h
BYTE nSrc = pInvSort->GetItemSrc(i);
/ i s9 B: L" {2 M3 ? pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* t! i, H; F) X- }" Q
if (pItemElem)
9 B) l j, I4 ^0 U: F4 T {9 T2 i) G/ T( J3 ]4 H$ N* D
if (IsUsingItem(pItemElem))' k: {( Z1 f' H% H, v( Z2 q& V
{
9 }+ s3 ]) R8 h2 o1 u //这个道具无法移动,跳过
: u3 R+ Y: G! P S continue;" x2 n$ D ]: l+ k
}
1 w g2 n9 N9 m* i }else{3 z+ x$ K; v; R( k! N9 `/ O9 }
//空位置 不用动
: }( m- `% \. a) L$ [5 e/ z continue;' X6 G5 G& T8 T" r/ l8 C' ?/ t' R0 @( e
}
$ V& A; U+ O; P //////////////////////////////////////////////////////////////////////////
& ?5 P4 o4 p3 u7 d' S1 }+ h //开始移动
" L! h+ W1 U/ k0 D7 m; g if (nSrc == nDestPos). N5 K" E' A7 l, f; x. v( U
{
$ B. r" T+ R+ L+ c2 U# C0 m //原地不动 h, }) ^* m2 s1 Y7 Z
nDestPos++;) `7 a( j# [2 h8 ]. |
continue;2 X. z* u/ f' |
}
m# E! O, }& J* \% x" K+ i pInvSort->MoveItem(i,nDestPos);6 P. b2 r2 _/ R( Q
g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ Y: M6 e: e/ i! ?" t! L
Sleep(5);% D( i! s$ H. v) _- }+ ?
//Error("移动 - %d->%d",nSrc,nDestPos);) G* _* I5 }4 n- i0 F
nDestPos++;
* V) L+ O$ S, `2 @6 {8 ] }
4 G, M' H5 B; l& _' `: Z" q //取第一个元素的信息
L* [( ~$ e" g$ e) j /*
! w: T" x1 I7 s' v- M6 }) x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 {4 ?! g/ M: {. \9 U/ j9 l {. ]: U' H9 K8 N& T" K! B9 g2 l& j
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 R, k* a$ E5 d) i) Q* l9 y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
# X0 ]; B/ A6 }* o( N/ C }
' J# t! w( }' d( s* u: N; A( f */
2 W' L& [, i3 x R //////////////////////////////////////////////////////////////////////////
+ _( }9 Z5 y6 q+ i/ Q) i break;
! O/ n1 N2 o a" ?7 \ }
$ [& b5 ~8 R( Q0 [! q. { }
8 v4 o: v5 q$ ?}
o" M7 c! B+ g' h) }+ L( v0 g7 Tm_wndMenu.SetVisible(FALSE);
( J: G- q1 Y# T Y; i5 e1 A( t: }; {, c
--------------------------------------------------------------------------------------------------------7 h) ] d& M+ n7 U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% Y/ v. _9 {: {3 L; Y{, g" G# s' K& w( l( ?+ P: w
BaseMouseCursor();/ l! n0 @: f" K5 b1 j: ]
}1 V5 o) e9 ^1 a D& d
在其下添加:
# x" ~8 ?2 l! }1 p) f, k: X) [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! \7 V7 Y8 I2 K! z' h5 z
{9 D" d2 }7 |7 n7 s5 z6 R
m_wndMenu.DeleteAllMenu();
0 ?: h5 B3 S! f- p6 Dm_wndMenu.CreateMenu(this);
9 N6 W* L! K$ q4 T Z( {, ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 `) T0 u/ c$ V$ \5 c; R
- F. Y/ w6 @3 B- ]. W. x; cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 I/ g6 H; D8 V7 [8 U2 n- r{
$ w2 W; O4 Y/ h' c. y0 X //P以上级别才可以删除所有道具' H- B4 R8 ^( W' ]& x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( r7 B9 q* j; x1 y4 _7 J
}
+ q3 ~7 s+ F9 r/ F5 Km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 M7 S' R* ^5 w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, p# p: Q4 y9 `9 x8 \m_wndMenu.SetFocus();$ Z3 p4 t2 A- @1 T- }5 v' L
}2 S f8 k& _+ D4 G- l' z1 J
------------------------------------------------------------------------------------------------------------6 t! ^9 ^0 l# {; X0 T
*************************% Q& T. d0 _$ p9 U
WndField.h文件
# G" x5 _/ z' @# w4 M+ S*************************" Z: w5 f) A/ a: L" e+ b
搜索:BOOL m_bReport;8 q6 g& w* l! i& q
其后添加:& T- o; C9 @3 l% ~1 a" r7 `- a/ L: W$ @
CWndMenu m_wndMenu;$ F0 T( i! b3 |; A- i q
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
A, C" r' j8 } P: o. x( F/ p- a其后添加:
8 V, P6 l; a0 B+ {- ~+ k' _+ qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
" j( y9 N6 D$ M' ^; i- D2 B' q2 `! [6 A% z' y# Y. R
" I/ M( O# ~ G# k
|
|