|
|
源文件中_Interface文件夹下WndField.cpp文件
" S |9 l% V6 K5 m H# W1 i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" d. Y, ]% W3 t9 M% S$ {2 j
0 t/ W( `- F" O3 E' rstruct sItem: Q% J7 n2 Y# V6 i0 m& `
{
8 R( N8 n1 f+ X7 u& S4 gDWORD dwId;. |/ k$ g( C5 y# h/ n! m& ~' Z) F# ]) [3 o
DWORD dwKind2;; }/ o) @! Z) y6 K9 }; z4 ]6 n. j2 o
DWORD dwItemId;
2 K# N" r7 u8 G' }4 V1 K5 t' `6 [BYTE nIndex;3 `! {5 t* u7 k1 a
sItem(){. C" _ J4 Q9 e6 Y
dwId = dwKind2 = dwItemId = nIndex = 0;
+ P/ X- @' Z% S5 m) o" L4 E- N- a}
$ p5 E4 I' r( Z3 Dbool operator < (const sItem p2); C. N3 W3 o/ ]# \$ S3 S: H! A; W) g
{4 l6 b* S6 S0 N3 x" S: ?
if (dwKind2 == p2.dwKind2)" k1 M+ C" M/ w* u# R" q
{) s& z! h8 z7 \
return dwItemId < p2.dwItemId;
; h/ E1 q" M! w4 f* r2 [5 ` }else{
2 e+ `7 Y8 n% ^2 r, y2 m. b, O0 w return dwKind2 < p2.dwKind2;" X* g4 A/ \1 Y% h4 Q% L
}
6 F! V; u! N1 m& p0 M}1 j/ V, A k' }7 o( q
};
( |- ?' d* |, q& |# ~2 G, U7 o/ Vclass CInventorySort+ Q2 A ]) _( Q. g8 D" [' S
{6 z& [! O5 v& O. M x
public:
) Q! l0 ^" Z$ L/ ?CInventorySort()
3 A8 c b( r4 a. H# q7 Q5 h l1 f{
0 X, G" c9 w/ v" P) @+ g* L& w# I m_dwPos = 0;
& i4 Y# ~/ k3 ]. i' L$ x& P}
* {" l0 L$ Q" N~CInventorySort(){}4 P+ u: C% C# x4 }! E ?3 S
private:
* a- A$ w! N2 Y2 d- asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. _) y5 |- O+ Y& K7 G4 x
DWORD m_dwPos;
, C( Z3 M( B4 g: Hpublic:0 F0 P& V! B3 n$ u4 B9 B+ f6 I
void Add(BYTE nIndex)
. L4 a$ T5 x* r{, i, u3 Z3 z# C; F
if (m_dwPos >= MAX_INVENTORY)
5 g0 M5 J: s. @# u d" A& s% ]* { {; }* k: N p9 a9 ?
return;1 M& R( e" h* W7 S% c4 t% C- P
}, ~# g$ `0 o! Q
m_Item[m_dwPos].nIndex = nIndex;' |9 T* B# i' v9 z
m_Item[m_dwPos].dwId = m_dwPos;, T+ T0 }$ W' }; {& z4 L4 G7 p
m_dwPos++;
! v7 G' e& t: y2 D+ V}) Z5 c# b/ j- N8 y! {3 G
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列2 h2 y$ Z2 X* {' H6 K
{
: R9 d+ n3 R' h- t# t for (int i=0;i<MAX_INVENTORY;i++)" X% D) `; V* U& ^0 r
{: `7 R$ d" c) q& @) Z
if (m_Item.dwId == dwId)
* X" L) s. j- v+ X {
: R" Z7 O* ^* F% i- P, H return m_Item.nIndex;
, d8 W) J. Y: s S }6 z d5 A4 O; x0 f
}
& k# y) M& x2 Z) P return 255;% z( B: i* D i' b
}! |, U: n, O( f2 k8 Z b" Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' O* @. Y/ T9 v- D, W0 _
{
0 ~ [& S0 p4 O' v% R/ d" n BYTE nTmp = 0;) ?/ o7 b2 p7 I& }" s5 b4 \' `; \; D
bool bDest = false,bSrc = false;
. l; s) w* P: N for (int i=0;i<MAX_INVENTORY;i++)* R9 G9 d: j8 G* q& i3 n; q
{5 P& |* j- [# p/ {
if (dwSrcId == m_Item.dwId)
' E. Q4 l; \8 N5 }2 e {
! u! _; M! }' p: R3 V0 s //id相等 则 改变对应的dest和src/ a9 y! p# G8 n: g- K
nTmp = m_Item.nIndex;5 L+ }$ k# N+ s6 T
m_Item.nIndex = dest;* [# y+ Y6 O9 h7 J
}( D5 Z' j+ h+ L. i$ L+ }
}
6 w5 `* F! l$ Z/ L //临时数据保存完毕,交换开始: E6 y/ Z/ K0 K& Y( T
for (int i=0;i<MAX_INVENTORY;i++)
8 v" k9 L$ u2 P) A( C7 E {+ ?3 n* k& x- L B
if (dest == m_Item.nIndex)
2 e# n" {* p; W% D {/ H; n" O% t$ c9 Q- ?
//id相等 则 改变对应的dest和src
) u, Q. Q, t1 T: v( v m_Item.nIndex = nTmp;
# d0 V' } G: ? }( `9 K4 B& W! S# S. |: t) z
}
" b7 P J+ f9 N& Y}
9 G5 R5 C f4 X) U};
1 \2 t5 F4 C& l% v& Z$ `5 m/ C ~-------------------------------------------------------------------------
, p9 f6 c2 Z5 ]& E. i依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 ^; k+ V/ z, _! U) c( S搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; m4 v5 Y z( P8 S4 ~+ _- u9 [8 u3 ]+ A
紧靠其上添加: U6 t2 p2 H" ]) [3 P
if( pWndBase == &m_wndMenu )
. x. [9 F# X. O1 B2 O( l! N{
/ l1 |) |5 E7 B+ q, j switch( nID )- k+ R' ?$ i" _8 n/ O, y, b- }
{7 L% R$ L0 p2 z
case 2:
4 A) S* l. o5 E6 M7 S$ T {9 W6 _; Z3 M" @7 ]; b, {8 {
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 P! t1 Q% [& }" \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) F# o5 \% v) T' ~
{
1 u0 N8 W+ u4 N+ n break;
& b# H2 Y% v# t* d }
$ N+ a& W5 F3 s$ n8 i6 J for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" N g) n: e `3 M r, N3 {
{7 M' M+ v% |. y) |& r/ X6 ~
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( E& z$ p* e( h* n2 p
if( !pItemElem )+ u& ?2 ]9 Y& q$ D# w$ {6 e1 _
continue;' ?1 @6 Y5 Y. y' @
if(pItemElem->GetExtra() > 0)& @: o7 ^9 i& V# Q9 }8 M; x; h
continue;
9 m: V# l% y6 c8 V1 K- e4 X1 h4 E2 o if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / f+ Z7 m+ F# u7 _5 M0 I2 I+ e
continue;: l1 I- k+ M$ Y: H
if( g_pPlayer->IsUsing( pItemElem ) )
4 U* t, G l* D' b7 I& c+ F continue;
, O0 }" v, v) m8 _' [/ P7 w+ o if( pItemElem->IsUndestructable() == TRUE )
; |9 e M0 K7 q1 y: E; `& O4 G {
/ A- `7 [+ t2 e# J S* T5 G# z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: ?% [) X) ~0 }: L) d0 ^$ w, z
continue;
! K! F7 W6 k4 S }
- ]! l% H! p d, q' T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- V; u2 E' Y; g! s. K/ V
}' u! `$ u* M" L& I! j
break;/ v, u! |# `! L6 Y1 p2 y
}
6 t; O! F* t" O; i case 1:
0 o) ], ]/ l4 o {
; o5 ?& C- m. X, I. C3 j //整理背包( ^' d3 w6 N& M( R$ }6 `9 a
//////////////////////////////////////////////////////////////////////////
4 S5 \; V- v; y# w2 y: L$ b# T5 v! b //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% l1 J8 m) S% H+ d7 C1 u# h //////////////////////////////////////////////////////////////////////////% x2 V) n Q/ u: V# r% C
//////////////////////////////////////////////////////////////////////////; c, ]! T, a$ ]" y1 W+ ~
CInventorySort* pInvSort = new CInventorySort; R, q1 ~5 c4 l `2 P. Y6 t# n
vector <sItem> vItem;
/ ]- c' m* n7 J( K' H7 p vItem.resize(MAX_INVENTORY);//初始化大小
# Q9 {( T* Y$ @8 f' J2 k5 O //////////////////////////////////////////////////////////////////////////$ x! T1 x0 d9 o9 Z
//填充数据
, H* p# x: j3 G for (int i=0;i<MAX_INVENTORY;i++)
n' Y' ^1 Z1 T- D G {- L' Y- v1 [' ?2 j3 b( w6 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) [1 M5 E) i o6 p$ v: q, z
if (!pItemElem)( g, v' ?) A4 g" C$ {+ v
{9 k) R: @1 q( E2 h
vItem.dwKind2 = 0xffffffff;$ R6 Y5 U5 m' R; L
vItem.dwItemId = 0xffffffff;7 g7 j5 Y4 L# Y7 {* \9 g
vItem.nIndex = i;4 \4 `. g( l! A$ R) u. S
}else {
5 Z" X; f/ @4 S* w/ C" `+ l$ |3 N0 R ItemProp* pProp = pItemElem->GetProp();
1 P# h4 l# A5 s; I; M vItem.dwKind2 = pProp->dwItemKind2;
3 ]7 u7 \+ u, O# I. U) r vItem.dwItemId = pItemElem->m_dwItemId;
# j+ O0 o b& n/ S! l" L4 ^, s vItem.nIndex = i;
! c+ o2 l/ _: |- B7 L* x( k }5 {. z& N# d* K& x8 x
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% w3 |4 D: a8 K0 R }
7 Y, H- V1 J* m# W5 x5 i& J //////////////////////////////////////////////////////////////////////////8 o6 ~. K7 B9 e, r# S% `* K/ ~
sort(vItem.begin(),vItem.end());//排序) ~$ x) u9 u% t+ f1 f& n8 U
//////////////////////////////////////////////////////////////////////////7 b, K+ h% V. R
//交换
F( _9 s3 z4 F9 A. j) e& v1 [ for (size_t i=0;i<vItem.size();i++)
/ O$ N. D5 O. O {
5 a6 G, K7 w( ]$ b7 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 F2 o7 [% }( s; o6 i
pInvSort->Add(vItem.nIndex);
) D( \4 e- `. h9 h \( x R }! V2 c: G! m' p0 e6 b( |
BYTE nDestPos = 0;6 O8 ?9 I# r- c: U7 h, r
for (int i=0;i<MAX_INVENTORY;i++)5 k* _ M3 A5 X" Y8 P
{ t2 O% V( k" x a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 B6 E. W) @$ Q) M9 t4 p% p7 `! x if (pItemElem), l0 \) `2 F D y0 u* X6 @: d
{6 q0 B$ P0 m/ m! O8 J
if (IsUsingItem(pItemElem))
" u2 r. `+ b* u7 @5 k {7 G5 ]; U3 X [7 ]" N" ~& v- Z, B
//这个位置无法放# g7 w0 s0 G8 M" ^+ C% K0 f
nDestPos++;8 }+ u% T# F- A1 s6 B V) C* f& X
}
. @& C1 s# k. }( p' ?" ~& M$ o( |5 [3 V }' W- Z+ _$ O7 M
BYTE nSrc = pInvSort->GetItemSrc(i);: H4 o1 K. o& f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ K3 d1 ?1 Y9 ~: @ if (pItemElem)
, s1 n7 \/ h$ H( x {
8 a) d, X4 B! X if (IsUsingItem(pItemElem))& P; I9 y4 A0 a, ?& K3 i/ q
{; {! @' Z( U" N! J
//这个道具无法移动,跳过, @8 U) g4 }) A/ k2 E
continue;
, r ^: W- B4 R }4 d! W1 d( Z$ B- C
}else{
; t) ~+ j1 L2 l6 i0 U% R# K8 h$ {0 V //空位置 不用动
& j- R; U, K2 K! q) I0 g continue;3 G5 e( b/ j/ C8 w9 O) `# b
}
9 b8 k8 O( k4 \ q$ L3 T, w+ s //////////////////////////////////////////////////////////////////////////% l' E; m' V8 V
//开始移动
) h+ _ q: K5 f9 _4 d# Z( q if (nSrc == nDestPos)
7 ^( ]. M% l- g! ~* b: H+ U {
# D8 g5 n# ^% Q0 \ //原地不动# o/ w8 f( a. ?# p% o2 l+ x
nDestPos++;
* ?' A( N' p6 }) c continue;
; O1 I5 J; D0 Q' I6 a }
3 \/ }" x# P2 t' ~, o" N pInvSort->MoveItem(i,nDestPos);. ^% I9 ~! Q4 I& V3 K/ ^- |
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& X; l! u4 O4 i% p: S7 y: V4 Z3 n$ c Sleep(5);
, W! y/ u- f( t8 D! ~: B //Error("移动 - %d->%d",nSrc,nDestPos);
2 v8 o# F: U \ nDestPos++;0 _: l& ]6 E3 f: K1 Y
}
& g4 i7 ~9 Z) Z+ [ //取第一个元素的信息; ^' N; I6 {/ j3 {$ E+ u5 u
/*
5 B5 r& p, G( z/ _! Z2 ^; M7 k9 m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 y/ A/ n" q8 A5 h- u( i! t {
" L \$ N! y4 {/ r7 m0 V Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 J9 V/ L# \1 U& v( j' d4 Z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 i8 C) G3 `6 d2 [; Z h
}
7 h+ j, D$ B* f- [, C+ }; B8 a) M */* d0 c3 `9 Z7 r# _
//////////////////////////////////////////////////////////////////////////0 L. S* o4 Y! ?
break;
( X: a3 ~ U* w) h& E }& a4 B2 Q+ Z5 u( ^4 e
} ) G' A" G+ e* _
}
' U! |- F3 z( Y$ j8 b! B1 ?- \m_wndMenu.SetVisible(FALSE);
# G$ l. ~ Q0 L9 W4 `( T
- V( \4 I8 B; X3 ^* m) \; V( ~/ A--------------------------------------------------------------------------------------------------------0 ]% D+ Y) e8 N$ i3 _" n4 x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) f- y5 f, h# n
{
) d! ]6 h; _) Q- ABaseMouseCursor();
: D( Q ]; @) v2 Z# u0 h}
) K# n& Q9 H- d' i在其下添加:
7 z" u$ l( G6 y+ O' z$ M% i: d' Kvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' Y4 C e0 h! {0 C% ^& ^
{. a' i% g- r/ \, { C) a7 `3 [
m_wndMenu.DeleteAllMenu();: I" f$ u; F2 d" p( a
m_wndMenu.CreateMenu(this);- B) t# I3 }4 k% j! H8 G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, T. W" H+ g1 ^) b* F
0 `# M) ?- y5 q( W. @3 N8 X3 f# Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 F$ `" V8 e, d/ |: I{4 v. H: C0 z9 a; `$ T( u3 Z
//P以上级别才可以删除所有道具
1 t4 c" T; Y9 |# a( ^ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% A4 L2 @% A+ h6 ?- E \( b& x
}! E" l( r- Z3 d1 r3 t% T. i2 Q a2 h0 u
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 K1 {; Z6 @0 N8 I% r; w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. r! l3 I! e; y+ j6 U
m_wndMenu.SetFocus();
5 v' |" C/ b; E/ k}
4 Q3 Y, d( j; Z- P------------------------------------------------------------------------------------------------------------' B4 P) C1 @) F! y! G1 a
*************************
8 J6 s: w& {" U8 O6 vWndField.h文件! E- n( e0 E. e5 J: |, n
*************************
) X! {2 K6 f# E' N: a搜索:BOOL m_bReport;
9 W; f" i' q$ U0 k L其后添加:
# ~- B2 p& J: |0 _8 l1 M4 GCWndMenu m_wndMenu;
+ k( V) h8 b. I7 i/ v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);3 r6 A6 [# w' }6 Y; y7 I
其后添加:; h: q# @' k! c; |+ z7 a: |
virtual void OnRButtonUp(UINT nFlags, CPoint point);+ Z) O, Z8 p# S5 D1 y; }
$ @7 V% `9 r! B, ^1 S2 ^- k
' H& i, u) K, i v8 k2 j) N |
|