|
|
源文件中_Interface文件夹下WndField.cpp文件* s/ X% D8 E4 o. r' i( {3 |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). w; N7 B* s3 f4 F. _2 e
: p& }! `' O4 @7 r3 M9 d% w; @& _& kstruct sItem
7 ~% H: R7 d" T) l' u, l{% N1 `/ E- z- o( [
DWORD dwId;
R7 k: l/ [) E3 |4 \- u1 A8 |DWORD dwKind2;/ Y; x( M; Q- [0 V; k
DWORD dwItemId;
7 Q( d3 M1 Y* F- C- J) ABYTE nIndex;
- ^: h6 P4 @: |3 M( O, `sItem(){
& n" N9 @& n6 _, d2 i* z; X dwId = dwKind2 = dwItemId = nIndex = 0;
7 d9 q6 v) l6 j* w6 f- S}
; N7 J$ ~0 O) w5 } v/ {bool operator < (const sItem p2)
6 {: ~4 u2 a4 T/ U v1 k$ e( y, f{
' T5 f Y! W$ A6 ~) y# t if (dwKind2 == p2.dwKind2)2 k7 X; y1 g' k# T& ~/ Y' K4 V$ l- k( M
{6 o- ?& `8 e% V" L w
return dwItemId < p2.dwItemId;
( d1 X! n1 ~; M4 F }else{
& @& V3 E1 D& y) G1 N9 g% b/ L return dwKind2 < p2.dwKind2;
' r, G! y$ h7 s- f }
7 P# q) ~2 [4 `! e4 t& T' [$ }}' _- k. K; i0 }% f6 n; f0 F
};# \$ f2 O8 Y8 Y4 r, ?
class CInventorySort
9 p. n, M& K5 D+ Q: e, X' |{
$ w' R( x/ S6 g& ipublic:
7 Z$ j! |) i6 DCInventorySort(), V; Y. E) L+ M1 K# g( Z
{9 o, N% ]+ R+ t6 E4 _; g, f
m_dwPos = 0;
+ v2 E1 D8 y7 r- h}$ ~9 r- Z: Q w5 h m$ b
~CInventorySort(){}
; Q4 q2 O2 }5 r$ M& V) M3 Lprivate:
' b. r1 e" z, z. UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
7 w' \" n, R' }$ A' S6 _DWORD m_dwPos;
3 Q# R8 o8 z( j6 s* t7 t7 o( Dpublic:
" K. X# |* d: \2 }+ W% R& c7 Nvoid Add(BYTE nIndex)
6 J$ d+ N( w9 ]) n" X X{
1 {. P3 y9 D7 L if (m_dwPos >= MAX_INVENTORY)
( j4 \7 t" o4 J {
% y3 r0 z/ d, y, S6 c6 ~3 C return;
7 w s1 M4 X1 w( y5 K" e( O9 x }! X7 e( P7 e y/ ~ Y- H
m_Item[m_dwPos].nIndex = nIndex;& Q! f' H" X- O( y; O: ?4 ~. R$ Y
m_Item[m_dwPos].dwId = m_dwPos;; N8 Z3 w. W" q$ h5 [$ s p
m_dwPos++;8 p# s5 E* `. E v; H+ h
}
$ L! L) P( r5 CBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* I6 \. d; g; ^& [6 v8 p{
& n! }1 s; f# [9 k- f9 i for (int i=0;i<MAX_INVENTORY;i++)* }( {. D$ A. T, [, z' z2 c# p
{4 ]! x" y8 \& y; {. y8 B
if (m_Item.dwId == dwId)
5 ~( I6 n$ T8 @3 f {+ G4 ^6 }( v7 @3 L# @' k8 M
return m_Item.nIndex;
! n8 S9 w2 V0 D( b }2 g! G6 ], Q! T c
}
2 W" G* O/ t8 d+ M4 G. r/ M- S return 255;( o0 R8 E3 ~: ]5 K$ V
}( R5 ]/ z* ]" ^. o! j
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 G1 g& j9 C" @1 N0 U{
5 g" r/ F* }5 E4 H2 d* V4 o BYTE nTmp = 0;" m2 k2 K7 ^5 B7 A5 {: E
bool bDest = false,bSrc = false;
( C& X5 j, d2 k% {/ P for (int i=0;i<MAX_INVENTORY;i++)
: I6 i9 S# g, B& e: Y6 a, ` {
) D& i: o) O) q( z if (dwSrcId == m_Item.dwId)8 L) D6 ~; o" ?: y$ w
{2 A" o9 y% Q7 d, V
//id相等 则 改变对应的dest和src
) ~+ |! n+ D5 o* a8 E nTmp = m_Item.nIndex;
6 R. |3 |3 z6 K, l9 ^0 {3 f# f9 U m_Item.nIndex = dest;
0 ^* d* f. H! Y [ }
' S4 X$ P: u0 |/ e: z }
; b- j9 {( Z% u2 s1 ~$ x3 { //临时数据保存完毕,交换开始! O% Y; a7 x8 ^) I& z
for (int i=0;i<MAX_INVENTORY;i++)
: m/ z- B8 y9 _; N4 m$ i9 a* e {
: Y$ B2 d7 m/ D1 j' e) I if (dest == m_Item.nIndex)# j1 J9 B; m: {+ c2 t4 W$ C0 K
{1 }. a7 N5 W4 h$ `" P0 a3 m
//id相等 则 改变对应的dest和src
* r1 l- E, @. P m_Item.nIndex = nTmp;
; e) ^0 u1 L& e" @) j }
4 M( ^" U) M7 @0 b- w7 Q# F) h1 G }% B. F! t. d; l
}
$ M7 n9 R& e" U- _# Y6 `};' m8 [+ |+ x% T0 {" p
-------------------------------------------------------------------------2 F2 |% T" T% u2 d- b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* \7 s- K ~# Q( T
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) k1 @( V& q& b. l+ D: I紧靠其上添加:
; x% V$ j6 ^% P& k% a: T9 n* m& Zif( pWndBase == &m_wndMenu )
' m" t+ E5 B8 _' J1 ^{5 U$ S8 n$ w# R, [ k+ K
switch( nID )
/ _; B) z4 E4 C- y- ^; b {7 R+ T. P" i" X# R7 U/ p$ E m
case 2:3 C% q7 z& ], w) z, q* ]' N$ l
{
4 w" l4 Y ]' ^& @$ T u //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 A; N7 X- ~: N/ U if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) A6 J6 [5 P7 R
{
# V- I: Z5 p" A& H9 [3 W& P break;
, Q( S, b, g1 o% s$ Y4 W% x% ? }
+ W$ M% s# e2 P0 P* o+ y- R9 q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 z4 `. m' A) U$ P" w
{0 }9 h+ h1 k+ [: H
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 Y2 G4 A' p* l c
if( !pItemElem )4 x" J' K8 B$ n2 s( h. u
continue;8 x+ @/ P* y/ X3 f, j9 X
if(pItemElem->GetExtra() > 0)! W. d6 J# V# n+ V, Q- D
continue;3 N4 W* i# C# N& b* Y7 H: M; q
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 j7 _9 W, S3 ^- u+ U continue;5 S8 ~6 S% W5 B7 c: u. n/ `: }% s
if( g_pPlayer->IsUsing( pItemElem ) )
* R/ U6 B( b9 h9 v* w p continue;! D* A# |/ G% x+ L3 t
if( pItemElem->IsUndestructable() == TRUE )
/ \- S' t2 j; a {
* K9 f T9 @6 v( B g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( h" R* s; Y! P# U& \' \. l# d
continue;4 B$ @( o9 E. z8 j# ^3 `3 @9 d
}
# O2 \; x( W6 k* Y' a g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
+ M& F" F# v2 k2 R: a8 M+ \ }
1 r7 O$ y% C) K& X7 Z break;
8 [: s2 E# Z+ O$ m, z8 z }
; R" g( o7 k, b6 }& B, b case 1:6 Z( ]1 v8 j3 _( L3 q9 B' I
{
, p) T6 B" v4 h9 ^* w. W- r //整理背包
0 A+ M5 \$ P' L+ B: U, h //////////////////////////////////////////////////////////////////////////7 _% {% n! X4 f& H
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 N" T7 o1 ?, j- P //////////////////////////////////////////////////////////////////////////
9 a- Y! b% o w+ O7 N2 u1 Y //////////////////////////////////////////////////////////////////////////
$ l- s$ v! U( N CInventorySort* pInvSort = new CInventorySort;, g* |! F2 {* }- w
vector <sItem> vItem;3 ]6 L7 A$ j2 ?8 D: l8 q
vItem.resize(MAX_INVENTORY);//初始化大小7 A/ ]0 p. u ~2 M; A# v- }. D
//////////////////////////////////////////////////////////////////////////
8 {& X# h1 b$ Q c9 u' D5 ~2 |" F //填充数据
1 w/ X# x1 C ?- m* e for (int i=0;i<MAX_INVENTORY;i++)
4 j7 O9 F* Z( q, t+ o% Z" x- v {
! a- z! r( ^9 c: D; V. c2 w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 W) I( E) R; H5 J+ X4 { if (!pItemElem)
6 d; M; s" w8 p {
% B/ w2 f- J5 O vItem.dwKind2 = 0xffffffff;
% M& i; _3 r8 ^, [2 w2 [$ f vItem.dwItemId = 0xffffffff;+ r* ?! S* ~( v* A) `) u0 a; S( F$ `
vItem.nIndex = i;
; G, i$ b! U1 k |& T4 Y }else {
$ E9 p+ ~* h0 L) ]8 u ItemProp* pProp = pItemElem->GetProp();! m$ f; D) x: h
vItem.dwKind2 = pProp->dwItemKind2;
# X5 W4 j0 x( Q+ M vItem.dwItemId = pItemElem->m_dwItemId;4 E0 i m; ~' ~" C6 c& q7 O
vItem.nIndex = i; @# L9 E# \2 K1 {, G( `
}
B6 W' k9 o" J& c //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- ~- Y0 K! B4 |! r8 T/ P, w; X
}8 J# l4 B6 S2 j. V$ u2 A
//////////////////////////////////////////////////////////////////////////
& h8 t5 j0 G' X! A. o4 E sort(vItem.begin(),vItem.end());//排序
) i% ], g2 {! n# }8 J9 W //////////////////////////////////////////////////////////////////////////8 l) `: r% x/ \( Y6 K
//交换 o! I% Y* `5 \ @
for (size_t i=0;i<vItem.size();i++)( B2 a1 p; E$ ]
{- [/ {+ L: { o( L5 S8 ^
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 B% C _3 E5 d5 c) D7 {6 B ]/ L
pInvSort->Add(vItem.nIndex);# f0 c" {, S% Z" P3 k7 ~
}) {4 H6 u+ d+ N8 g
BYTE nDestPos = 0;
; ~$ b, I$ M1 k for (int i=0;i<MAX_INVENTORY;i++)" u9 s6 S* H, }! q7 x' h3 C5 c
{6 Z* R f! ~0 Y/ n* Q* o8 ` L0 w: Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 Z8 O p' ~* k5 o
if (pItemElem)
' ^0 B/ q6 l! E/ R; k6 u {9 E8 b' W3 r& s# k
if (IsUsingItem(pItemElem))* q" E9 h. T0 N: f; _4 p+ }, a
{( J1 Y& F$ \' j8 x! p( B+ j/ ?8 P
//这个位置无法放
, H* [8 Y" c% s nDestPos++;
$ D1 G$ Q- ?" Y }0 D4 n5 t# b' z* w
}
# y9 P: g$ |! _! y8 ^ ` BYTE nSrc = pInvSort->GetItemSrc(i);7 a0 ?3 {) r5 N5 F* D& f: d" r' Y/ G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! g6 W# j2 \. h2 R4 a if (pItemElem)
0 l9 C2 l e3 l2 q1 G {
/ {7 C" R% r8 i& z: h- O2 ? if (IsUsingItem(pItemElem))
( B, g+ N0 P& k3 I {9 R% m: H: F4 U
//这个道具无法移动,跳过
' B; R0 E* ?# z! z! J. K6 f' J% B continue;, x" {; H/ w$ |! C
}
) f0 l9 O% m" [1 {' e }else{
! c6 N: s$ m7 j, Y/ Y/ \) G' o //空位置 不用动
" [$ o/ J6 S4 U8 h5 p( Y7 A continue;9 Q b- P, o" V# M, H, O2 M$ w7 D
}
1 u! e, Z4 k' K //////////////////////////////////////////////////////////////////////////( }. Z8 k1 Z" D& [ s/ l
//开始移动, m$ X! g% E+ p. D$ e5 u, @: J c% T
if (nSrc == nDestPos)
3 R: C1 R6 f; s( [+ `0 N* {( q! F {
+ ~3 g# [" I. ~* v/ X8 N9 ?" u //原地不动
, u' u: z" _- I8 [2 X nDestPos++;
4 \8 J# z0 z. k6 w continue;3 s+ T+ z+ J& o8 D; G1 z. v7 K7 \
}
% q# L5 Y& e* h" ]4 z pInvSort->MoveItem(i,nDestPos);
5 S( g3 K L$ `. [ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
+ H& W% [3 M* E7 c8 C# [ Sleep(5);
& u+ o) m6 P; x8 r6 a, G //Error("移动 - %d->%d",nSrc,nDestPos);
9 t" }& e* a+ p nDestPos++;+ ^4 V3 Z. X j- i1 `0 H' C
}5 g: e& w3 w/ G
//取第一个元素的信息
+ M* _7 K7 W: K0 j /*
" C% p% [- w1 q3 F% `$ z. J; y if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' M6 }& U( B- @( H5 W" o1 |7 K
{1 J/ j5 B5 J1 h
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ I" b3 C9 V" q: J* F) C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 V% W1 R9 d4 v1 ] }
4 f7 n5 C, d8 [* q" H0 }& f */2 r* i: m% W0 r0 _6 w
//////////////////////////////////////////////////////////////////////////
/ [, X2 B( `4 p6 v f* Y- ^! } break;
; p; o* [$ y9 r- U }' l# I. e# C8 W2 G& d
} / P0 E& q. J/ o
}$ a# y& R$ I6 T5 ]
m_wndMenu.SetVisible(FALSE);6 B! Y+ D3 k) d( n' E1 O, H5 T, O7 V
/ V2 g- [- y3 L6 v6 x; X7 e
--------------------------------------------------------------------------------------------------------8 `( \; G% s3 y! ?0 s/ n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 `0 @9 a- K- |0 K1 q
{
0 E1 v" _; ]' g- `2 aBaseMouseCursor();, k; n! q$ c* u, D- l7 _6 O
}
3 }+ I, T7 O0 K+ b: { N2 {7 s在其下添加:
2 r% Z' o% B( m3 g2 l& T; f+ x! j1 hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 ^: b+ x- C# F# F& H4 ]; G{ ~9 S! X$ n/ t+ [% x0 b
m_wndMenu.DeleteAllMenu();
9 _1 s8 @6 v: F: D! P6 @2 jm_wndMenu.CreateMenu(this);- r/ S# L. s8 f) S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包"); J) Q Q' Z7 M. _- ?1 W
; @" h. {. \1 B& kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, r4 \: V# O% M: h, M9 F{! B: n; A# ~4 l4 Y& M9 ]/ G
//P以上级别才可以删除所有道具
7 E# l" o5 `5 J m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 F) `6 l( s) C' i/ J. `* l: I
}$ f0 }- i1 {, A
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ y6 b! n( A# L" rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 L- i4 C a4 b- r1 em_wndMenu.SetFocus();
) @/ j. M S+ a0 j2 b' Y8 n# X! s, H}/ }( p3 ?+ d* i5 s. g
------------------------------------------------------------------------------------------------------------
) L' E+ N3 @1 A5 j0 z* ]*************************
. o& A2 S+ j5 h+ K% Q8 d8 B) PWndField.h文件
# Q2 L O# H) g4 B/ s! ~2 P8 |1 i0 _*************************
. _& {/ i4 @) V5 `$ R& V' \搜索:BOOL m_bReport;4 r6 x: t- e3 J H1 ]
其后添加:
- V, a5 O4 g8 ~CWndMenu m_wndMenu;1 _! O) W5 ?* ^- \+ ]" Y% b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* l# [; j/ U. w
其后添加:2 S# a2 A! D+ Q3 m K+ ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);; t3 r# G) P9 v0 Z2 V" V
+ s% c7 B# h+ A m2 S
6 R) h1 u+ E9 s e$ W1 G6 t! P |
|