|
|
源文件中_Interface文件夹下WndField.cpp文件$ V# ]( G- v8 a v2 ] |) w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! U$ Q5 g% P1 X: J
3 \( ~3 u. A" s k2 {/ \
struct sItem
2 X# M$ h1 L9 f0 H{
6 r3 R' e. c% x; k. @DWORD dwId;
* B: M' T0 q) E/ _8 gDWORD dwKind2;
- I2 J" v8 N. |, m6 sDWORD dwItemId;+ V6 C( S5 B3 c- _; P$ k
BYTE nIndex;+ K: C+ l% Y$ F* H7 }8 m# T
sItem(){
# ?- m" h2 r4 J- ~ dwId = dwKind2 = dwItemId = nIndex = 0;: r9 n6 D3 D, \4 P1 s7 ^
}
4 b! s' p; m. A" F0 b qbool operator < (const sItem p2)
6 o1 {; S& s$ v{4 v; p; G$ Y) R
if (dwKind2 == p2.dwKind2)
1 n6 ^ s/ w- Y b {8 c7 r/ C8 g6 l. [* w4 g
return dwItemId < p2.dwItemId;: S* a" @: {" C% @
}else{; m# c: z4 P! x( N) v0 @
return dwKind2 < p2.dwKind2;
# U/ s0 @2 I: o% R6 H+ r8 p }, I* S. ?* ~/ ^
}
5 t' ]6 o/ W! H9 H6 [5 ]+ Y0 O* Y};/ |; P( \' V) j; \* N8 T* T# M$ P
class CInventorySort
: u0 x& |3 ^* P G: t& s{
; E$ \# @ g k9 u+ Bpublic:% d! U$ X5 r0 r+ b( H3 b+ ~8 v) U
CInventorySort()* e: \9 B6 Y: b% A) W) M; O1 X
{' a1 i+ c5 J4 w: a
m_dwPos = 0;# P: R% n, ~1 H# j i
}
q$ ^3 v9 Q o. H3 |~CInventorySort(){}- d# m3 w8 v# s a
private:
5 ]! J6 s, w6 K+ G5 G$ v1 L9 x' ^/ S/ ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
- r3 F( n8 T C9 eDWORD m_dwPos;
0 l- X$ m% {* M, ]) w0 jpublic:6 `4 f5 ?& r5 n# A+ y
void Add(BYTE nIndex)
! }- z d0 }- P5 ^( `6 |{
9 D, f" _7 s8 Z$ K if (m_dwPos >= MAX_INVENTORY)
) b7 v G, r* K {" |2 B* ?) H# [1 l9 S5 v
return;7 \2 [" H9 y; X% h& g+ q0 ~: d. j
}
! h7 S. `1 U7 M6 o- l6 d* L m_Item[m_dwPos].nIndex = nIndex;$ l" w' G( `* Q& U8 J% f. E
m_Item[m_dwPos].dwId = m_dwPos;/ m( S" S5 ^ K
m_dwPos++;
0 T1 i3 [8 Q, \% l8 D: ]}$ w- u# S \! g7 F" C2 |5 J; [
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 A7 M; B8 w8 ?, a% B: X
{, o9 w& N' g& J7 V7 H2 S0 i
for (int i=0;i<MAX_INVENTORY;i++)3 P* |1 j* e$ y; w
{
4 D6 s7 p% n! T2 n' Q$ R if (m_Item.dwId == dwId)
) }# U, O% ?" k; U$ ?" o {' x5 R S0 e9 y0 y, L l
return m_Item.nIndex;4 y/ ~. e- K' o; a0 _ r) M
}
& s Y# z5 T2 ~ }$ Q i9 ]* l: T
return 255;9 R6 r4 M+ z" N0 Y
}
: R' v' b8 ?+ C# V2 Yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 ~; @8 L% ?1 h5 a. ~! T0 Y{
R! C- n9 _3 \3 o# Q, K+ f& v BYTE nTmp = 0;7 l, c( _1 l+ K' J4 G: E
bool bDest = false,bSrc = false;
4 l+ J! r! W- u3 G2 @ for (int i=0;i<MAX_INVENTORY;i++)0 s$ ] D: v% B# J) p( @. C- P
{
2 i& ?0 g) j2 j# N: Y if (dwSrcId == m_Item.dwId)
% a6 l' ]% n; n# ?% q {# Y @- \/ F8 K
//id相等 则 改变对应的dest和src
! V8 P+ v, \4 j; ?+ m. c nTmp = m_Item.nIndex;) f. m' B4 s0 _
m_Item.nIndex = dest;8 G8 \7 A$ w* | `0 r
}" [; g3 {5 t: f; _/ W/ w' n6 i! [) l
}
: b/ }! ~7 J8 _! ]# w3 ^ //临时数据保存完毕,交换开始
5 a9 ?- |8 ]* \% j9 a+ s, m for (int i=0;i<MAX_INVENTORY;i++)
* P& F/ Y2 h$ Q8 Q+ ~ {+ y3 Z( x; F: H$ P9 O. R, _! m' S, m
if (dest == m_Item.nIndex)& O/ r: U- F9 L. V* l, p+ c* ~
{" B, m2 g% U/ g2 O0 j
//id相等 则 改变对应的dest和src
8 P' q0 ]7 ^- r& u1 ] m_Item.nIndex = nTmp;
! G! L8 M! s$ e4 I }+ V+ V# x* ^) [. m; ?& [" a; b3 D
}6 X4 n) S6 V& K$ o1 p1 j
}" n& L' A9 h6 s. _! V' E m6 Y( i
};
: _( e6 Z" m6 E4 X: F5 C-------------------------------------------------------------------------& o# O% l `: d# P% Q8 T' w( o t- o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ g/ {- ]. K y' x- }
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 h( m; e8 m* I n0 ]/ f3 o k _& P紧靠其上添加:8 y3 g) v% D" [/ s m) O4 t! k
if( pWndBase == &m_wndMenu )
; ^' }' L2 Q4 M8 H) Z9 X{" A* o" Z' X. `4 i2 [. k
switch( nID ) E; F9 x' w1 [* a
{
, b0 y2 o9 [/ i1 a0 l$ E case 2:4 t1 q9 I8 K0 B) P" q
{
5 w! p% z0 s" q" U p: H1 o- A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ Z' l3 z. j1 Q9 Y- C0 y: f5 j8 B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 r+ x p/ c* m; U: E {
" i, G" w6 G' c& e6 Y break;; B8 i( S$ ^+ R+ T& w, ?1 s
}( M6 }# S" W, b6 `; f: {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! n( c9 m( `! b7 v" x
{( _" c- K" \: R5 I! n
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) d* w* z' C, A4 V% {
if( !pItemElem )4 ^) T$ j, p1 ]
continue;
! Z4 K. }2 K: E) E o8 Y- P, [ if(pItemElem->GetExtra() > 0)' b9 J# ~& |* l) ? _
continue;
( I9 x$ _. Y/ V: m/ e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* M8 F% `: p+ `- t! h l continue;* T, X! P. E- m! s
if( g_pPlayer->IsUsing( pItemElem ) )0 S ]( i. d1 y/ A
continue;
. M! r: x8 b* g+ @. S2 ` if( pItemElem->IsUndestructable() == TRUE )
/ S/ ~* c3 d. _8 x; U C {
& e+ K% Z2 n$ f8 w) ?' { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: K( I- {1 ]5 t+ k( \& g2 Q" j continue;
/ ?9 n: F% h7 ?: F3 ~+ R, k }
. y8 Q4 ^ S& n9 p g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
/ f: p- u! u0 v+ b4 _& S }
+ [+ f- U8 q/ f& i8 _; r% r break;" \/ W4 W+ l k4 Q, a6 R
}
' M- c, F* ~* |$ e+ E5 q- }8 |* y case 1:9 a. r6 Y9 l* T+ C/ r7 F% m3 Y
{
! z1 h" R! {' }3 [: q; L/ S //整理背包
+ G+ F6 S( G% T //////////////////////////////////////////////////////////////////////////- E B# F( ~) r7 X8 M" N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( M c9 i+ d9 T( r
//////////////////////////////////////////////////////////////////////////1 W5 K6 L# j( W% _$ X
//////////////////////////////////////////////////////////////////////////0 S$ v; B! c- o! F0 Q, H: r6 `: Q( e0 v
CInventorySort* pInvSort = new CInventorySort;% q6 M) k' y8 z/ i) Q
vector <sItem> vItem;
" V$ `; W, D5 T4 o/ C. V! \ vItem.resize(MAX_INVENTORY);//初始化大小 ^3 U7 B& f& r$ C9 J6 D( M! A
//////////////////////////////////////////////////////////////////////////
$ U, V1 ?/ X; n" Z: e' ^ //填充数据
- O6 n! D# m$ z" h" o( a for (int i=0;i<MAX_INVENTORY;i++)- R" s# ]* s& t5 _
{
+ R% G& o6 P7 V Z; ^1 Y! Q5 \9 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% F; h- ^! d9 h" d6 p0 C* _* S, S4 G if (!pItemElem)
2 h2 ?8 p% M. K, q {
& \- S% ], N* c) Q1 N) t# \ vItem.dwKind2 = 0xffffffff;9 D9 p& `9 o) T" ]5 }3 W
vItem.dwItemId = 0xffffffff;( V4 N* g4 U) C' b
vItem.nIndex = i;9 s1 S- V4 K7 R+ p5 z4 s1 f! U- S( ^
}else {/ w! D$ j* R4 m0 ~/ @6 i
ItemProp* pProp = pItemElem->GetProp();* [; ]4 T/ M: Q* u9 T- M0 t2 m
vItem.dwKind2 = pProp->dwItemKind2;! d0 O. b: z4 O$ r" y
vItem.dwItemId = pItemElem->m_dwItemId;+ b. j# S8 |. l) k, m
vItem.nIndex = i;# \+ w0 ?' W$ [0 |- B3 @
}( C+ M, W) f6 |" q; S2 t& \
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. F: G/ m' X% K# {! X# h( P8 U }
% R ]% S- S6 `6 {0 P1 [ //////////////////////////////////////////////////////////////////////////: r* h' o% @- b3 s$ L: l5 [; v* g
sort(vItem.begin(),vItem.end());//排序
! C& P- f: A5 q! v //////////////////////////////////////////////////////////////////////////
+ b4 {( w& {" w //交换# ?5 r6 R J+ j& p: S( |
for (size_t i=0;i<vItem.size();i++)
; |4 k7 _% L) {9 k {
# |( V# @& o( a( Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, f. z |- ?/ R. ?* l* r pInvSort->Add(vItem.nIndex);
: {5 t+ n( [) ? }/ `% K) z! M9 q" R
BYTE nDestPos = 0;
: W4 H+ z: B4 d4 } for (int i=0;i<MAX_INVENTORY;i++)
# y- f4 j0 X5 X, S {
! H# p8 b K" H4 V# U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& v6 w6 ?- u4 i1 B* Y8 P if (pItemElem)
" J% e2 m$ g3 t0 H8 {7 j' C' N0 |2 i {
+ W+ U# Z- {+ U: I7 P' @& e; z if (IsUsingItem(pItemElem))
4 X* @% P" ~4 d! P$ k, Y {" x4 f2 F( g2 e" B/ O7 k) [4 Y6 [( W( V
//这个位置无法放
' A4 N5 q1 @3 k* S, N" d nDestPos++;
( z' n& c" _, R; a, {; l; N }
% r+ Q9 v5 E n z }
0 ]2 f( \" W: ^7 {2 ^( h BYTE nSrc = pInvSort->GetItemSrc(i);
9 X% X, n _; L. K! q! i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 R) A( @; B/ J' S
if (pItemElem)9 ~0 D% D( q/ k/ W( \$ l: V
{1 i- \; ]' ^) ?" W# b
if (IsUsingItem(pItemElem))" u2 [1 F8 A" V* [, O+ V; ?
{( F5 e' r5 t3 C% Y$ Q3 Q
//这个道具无法移动,跳过
$ w9 c1 r* j( P/ r continue; O. U! a% n1 Y9 R
}
8 l8 Y% m( S* Y6 d" } }else{4 B# ~6 E. P8 f- I: x, I
//空位置 不用动
9 r5 o7 ]( f& Z1 m continue;
8 I+ O# }8 m' C } r5 J8 Q! Z; `5 H7 O
//////////////////////////////////////////////////////////////////////////
" G% U& a# M) v. Z V* C4 b. q //开始移动
: }4 u u% @0 U7 h. ` if (nSrc == nDestPos)
% g5 U% x8 e: a {4 C6 U2 @, O0 m: y( w& P1 G
//原地不动
0 e3 e( v% @# \& B nDestPos++;4 @8 x }1 L& z
continue;8 ]: z+ i! c" t4 u4 u+ e! @: y
}
' U" `' Q; q* v) U/ I4 F! Y pInvSort->MoveItem(i,nDestPos);
; t0 d4 ?5 o, b& ?$ r g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 R2 v. R3 C' c0 q; _, e Sleep(5);0 c1 G- E* ^( L+ I
//Error("移动 - %d->%d",nSrc,nDestPos);
* D, W/ G3 Y2 F4 i* B8 g/ B* c6 y/ q nDestPos++;; D3 s# C! b. o" |9 a
}" O% X$ g! V1 n- X" n
//取第一个元素的信息
* W5 ~0 l9 o. q /*9 j0 I1 V) m+ D2 [6 ]( h
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% s* _) o% F# r$ h# D' j {1 Z+ D, p8 N. y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ w4 O0 v) @& Z g
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 p8 z- m4 o5 ?9 F+ f$ s% h
}9 e" b0 j9 q# B' o0 j
*/
: ~3 _0 w0 O1 c9 L# N //////////////////////////////////////////////////////////////////////////
n1 a% z$ |" t: V8 {7 U+ R3 s break;" X8 h6 {# x: m- O) p/ {
}
. u/ v: ]# Y/ s6 u4 X& _ }
! L1 Y4 i$ {" C W8 k& t}/ M! I5 o$ G* U& |2 |
m_wndMenu.SetVisible(FALSE);3 Q+ i% t2 g1 `% U$ h
5 ^4 G+ @/ s/ M5 `0 F
--------------------------------------------------------------------------------------------------------
# E! O o* d2 K! E0 U2 C# X V x搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% s) g5 |/ p7 [1 s: G- A{
6 T j+ s/ Z6 j tBaseMouseCursor();8 i: j( f- N2 r+ Z% k9 g1 c/ s4 F
}0 j$ @+ u( H G2 C
在其下添加:- b0 ]3 T) l7 p, J1 d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. c3 Q4 ] U# }' A" Y! t6 w{+ V+ w+ Q" j" s+ r
m_wndMenu.DeleteAllMenu();
; g7 E% A9 z: d; d! P6 n7 H9 pm_wndMenu.CreateMenu(this);
, E* g4 }1 }$ l$ |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 P: V4 t) H1 H ^
/ I' q% N, I1 F
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 W4 M4 d! q5 @6 w0 \{5 d; s2 a7 x- v; M; O
//P以上级别才可以删除所有道具
1 a! J1 x* A: N3 Q: ] m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ o/ b3 v1 m8 z}5 @. |' \4 K' h
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 }) [/ E V' d) `2 r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* g! z' h7 ^2 G- ^. a; p. p4 tm_wndMenu.SetFocus();0 Z# }+ d! r" W
}
, \5 w& y% l6 L------------------------------------------------------------------------------------------------------------
1 u( f+ Y- o. u6 P) `*************************
5 y- A9 w; l% x) w- R7 ^, BWndField.h文件. }, H6 S+ [' q0 N1 A" [' D# a
*************************; R( h9 Q; _; N, @3 G
搜索:BOOL m_bReport;
$ G. W3 E9 [0 J o2 D, q9 `其后添加:
1 q9 F+ `1 f2 z4 oCWndMenu m_wndMenu;
1 Q9 C1 G! P4 ]- a/ q; x7 \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; q4 \9 x% ]/ n& Z* T! [; @其后添加:
1 ~, T' d( U/ t1 avirtual void OnRButtonUp(UINT nFlags, CPoint point);: k" e* V8 x; @1 Y- D& D7 i8 k) @
( z3 f. L, \2 ], Q+ ^3 W* ]
2 S4 q* F( u o' r |
|