|
|
源文件中_Interface文件夹下WndField.cpp文件- S0 `4 r1 u# s$ T
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" {/ G B. F9 }$ m. X6 ^
v" Z4 O% X, V ], c% l: F) N+ Z
struct sItem
7 Z' ~' r: T) ?7 o) Y, F$ M' W1 S5 Y{& J# O' h$ B; g5 @, H% g3 j
DWORD dwId;
1 Q: K8 f4 q7 S4 \' e5 }DWORD dwKind2;
( x9 z8 _7 g( k% ]- |DWORD dwItemId;
, D: ] Z3 \# w* X* z( l$ CBYTE nIndex;
' W, E" I3 f4 [* V4 X8 hsItem(){
6 W5 N, @) g6 P2 G0 U' B% g; h: p dwId = dwKind2 = dwItemId = nIndex = 0;$ i7 j' U7 N7 R- f6 Y% \
}
4 u1 x6 W+ @& {0 Y' l7 ebool operator < (const sItem p2)6 ]6 P; Q) a3 N1 g' O6 @" U+ E1 ~
{8 l7 b+ d1 M4 | x
if (dwKind2 == p2.dwKind2)
. e* s! b) T5 n7 G# I( @ {8 a5 d7 z$ G/ b* i
return dwItemId < p2.dwItemId;2 L$ e/ Q0 R! e
}else{
8 ~: D i9 j3 D. ] y( R) F$ E return dwKind2 < p2.dwKind2; a6 P6 v) R0 j; z$ F
}
4 Q0 f# C O4 z; ]3 A2 T4 y5 W}. F/ v- r: F5 ?. O d9 c- _
};
, P' _9 N) a' [( Zclass CInventorySort
9 f1 i$ G' e2 h: _* A{
O+ q& [ y& N: U- Ppublic:
! X: f8 Z! s# t1 c' ZCInventorySort(), s- V# u: X0 V' I$ B+ |
{
4 Y Q- s) y+ S7 u' L& _- Q m_dwPos = 0;
% H- C: z1 ~" d( S}0 f3 E5 D' A5 P4 x' |
~CInventorySort(){}
' x3 ] h! \; f& c I. Wprivate:$ \1 V! W4 K: @8 W
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 B1 O8 l, ?' d7 O5 S- f# l( [
DWORD m_dwPos;
4 N |+ Y; S' R# ~0 I( zpublic:3 I$ g6 o9 _3 R% G
void Add(BYTE nIndex)( w0 l9 J3 C; e/ ]- U. l( m- R
{
( f, Q) u0 ^$ v. e if (m_dwPos >= MAX_INVENTORY)) P7 [2 _. G( d7 S
{" z8 s) L$ a; k5 T) t3 [ Q8 f
return;0 X/ a: x4 F" R% x; Z! O
}5 L% A; F* G8 Z8 N7 p6 j* T
m_Item[m_dwPos].nIndex = nIndex;
* A3 e. T7 n* A% C. Z, B+ f m_Item[m_dwPos].dwId = m_dwPos;
0 ?, }$ B/ o5 A3 f3 y- { m_dwPos++;5 z0 s& y1 t3 |7 L4 j3 n0 Q
}
$ W* Q3 c8 M7 W$ b/ L* fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 \9 C7 _3 x/ G b j1 Z{- X/ U Q9 `- C, ~5 M- u* X: w. S
for (int i=0;i<MAX_INVENTORY;i++)
) t# A% H) _& R: i) I: _, @) l {
8 G* ]+ Y5 o# L& h1 M* X+ d% m0 p if (m_Item.dwId == dwId); K6 U0 J3 P+ x. B# u5 v/ f: F
{
) g6 X5 A. O( }: b1 f( \ return m_Item.nIndex;
; C p$ Y k$ n0 T6 Y }
0 R' c# f" S" O, g5 z9 ? }! ^* ]! w" q8 G9 ^
return 255;) ]) x% o7 r: P" f+ y: Z
}
- g1 l! U& h) q/ ^1 c4 E' Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- Z5 f" g! u: K3 t
{
# @" i/ y5 V3 o; I BYTE nTmp = 0;7 X2 ?" }" [: v4 q$ S. c# M
bool bDest = false,bSrc = false;
. \/ J) `: Q- i3 O for (int i=0;i<MAX_INVENTORY;i++)* X2 F& |3 {6 E) u/ M9 H- M. }
{
/ V5 \/ v, N/ N r% N- u% B6 S if (dwSrcId == m_Item.dwId)+ H, P. X h2 A) f6 o) C
{, `, o5 L _; v8 G: v, ^
//id相等 则 改变对应的dest和src
& P+ o p v3 N; X" Y nTmp = m_Item.nIndex;" z# f. x) I' {" g) \
m_Item.nIndex = dest;
8 P/ t# m% h' v0 ^ {! ]- S }3 Q+ z* n% ^1 y8 G
}
1 M6 V m. c# y% L* e9 H' i //临时数据保存完毕,交换开始; F* n" l8 Q4 r v4 q
for (int i=0;i<MAX_INVENTORY;i++)+ _% i3 l3 P# d
{
2 C/ Q2 l! ~4 U; c6 b, H) b7 R+ z if (dest == m_Item.nIndex): \6 N0 m& y; Z- N4 d( u+ V0 q
{
6 x, C6 }* J1 I1 C5 X //id相等 则 改变对应的dest和src! D3 R; d- F ~3 ?
m_Item.nIndex = nTmp;
3 W$ m" L5 T7 c0 R9 R+ _ }! P; S" ~9 ]8 _2 M
}
/ r: B0 ~( @1 t2 \2 F3 E}
" s, I5 M8 e, s) n. ?1 ~};
" r* k' v: E# `7 U7 o-------------------------------------------------------------------------
/ v1 e4 n* ?, j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) H0 `2 E. E8 W1 k i$ J) E
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 L" i3 R/ ?5 y. u0 t$ d( U
紧靠其上添加:
6 Z, A! |9 v# i \& l: Eif( pWndBase == &m_wndMenu )
4 b! D- f/ x. Q7 Y. v0 T- E- y6 V{
4 s: t' c( n, s: i2 U# V switch( nID )- f2 |& h, ~7 c
{
2 E( L: t7 Z2 G0 F) O case 2:
4 O/ }% p5 Q+ g% g( |1 w* C {2 W$ ?0 m! d# d
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
) w1 U2 G4 Q J, m3 `8 T5 H if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), u" J' S* F- \3 Z i
{* e" t; @: Y# s" v9 t
break;* K* t# M7 F) g
}
6 l& L" H `! a1 m' o2 h7 ? for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# [ b5 L9 \% F3 b5 i9 v
{
6 D0 y& ^- Y$ \ J2 D5 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 |4 t B. {- R) N! H if( !pItemElem )
+ ]$ P* K: v/ |" p l% n; u continue;2 v+ V/ g E1 a
if(pItemElem->GetExtra() > 0)
) p9 Q7 P0 A8 _3 N continue;+ J4 D# {1 D) |# k8 B, W! j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ ~* g$ |$ [$ d! F. Y5 Y
continue;. v2 a7 T! z# r _; a0 f
if( g_pPlayer->IsUsing( pItemElem ) )+ n* D* Y/ \1 w8 W
continue;0 K; U( }% N Q0 A6 f9 \
if( pItemElem->IsUndestructable() == TRUE )
$ H+ g! v4 r: W% @. B {7 b. k! ?, G! f+ e, Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 K, M0 J0 l! |! o
continue;
5 B( I) h7 v& B$ B! H) l2 q }
8 E/ i1 X$ D* k7 j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; D9 ?: ]* y& _ }- W. U) c. e# d7 {- v r7 E
break;
+ Y& u# `2 \1 @' q }, ^6 W1 L z4 t. t0 ~& c7 c
case 1:9 R- ^& n4 T" A1 \* u- `- A3 c
{
9 N, a1 b% P# z //整理背包
6 N8 K1 o) T* i7 _8 P //////////////////////////////////////////////////////////////////////////. s; y! ~7 _2 [' i& y/ d1 Z
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) W( o% d4 A1 \1 b$ r //////////////////////////////////////////////////////////////////////////# b- H( U0 N' ]/ [) k# i
//////////////////////////////////////////////////////////////////////////1 m, e4 S) c }/ S% G
CInventorySort* pInvSort = new CInventorySort;
6 J, E/ F, W2 K0 d5 d# u$ \% G vector <sItem> vItem;5 T5 k m/ D3 h, l1 [. M
vItem.resize(MAX_INVENTORY);//初始化大小
9 j9 @8 ]: v v; G9 N //////////////////////////////////////////////////////////////////////////
) _" z% K& h1 l, {$ k5 k //填充数据9 O6 a f+ Y5 {+ w' @$ y
for (int i=0;i<MAX_INVENTORY;i++) a6 s7 X) e# t, B
{8 I$ p2 O$ R Y! l" C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( a" i0 _2 Q! @( z! F6 k1 F if (!pItemElem); ~* d3 `1 x; }: r2 I, a5 }
{9 ~' g3 L. j8 b6 F1 Y1 [
vItem.dwKind2 = 0xffffffff;
3 t( `% K1 P6 q |" M vItem.dwItemId = 0xffffffff;
# \' g, Z- a: x" i5 [ vItem.nIndex = i;" T/ W( }: ]6 P+ S8 E$ h% i
}else {
; Y# `/ G8 K1 p0 l9 R6 T# z; c9 T ItemProp* pProp = pItemElem->GetProp();* |! k0 a* c( I
vItem.dwKind2 = pProp->dwItemKind2;
8 v5 q/ e! f& n7 E7 w6 K vItem.dwItemId = pItemElem->m_dwItemId;
* h, g9 M9 [8 Z" o. l6 K6 E vItem.nIndex = i;
4 l+ o2 G3 G1 \1 m4 i3 I1 s }2 G r4 X% B8 Q' n: ?5 K) B
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% N& h9 x0 I$ c2 X }
" g, e1 O- w/ s5 b //////////////////////////////////////////////////////////////////////////
- T- ~3 L7 b6 p, ] \% ]& l sort(vItem.begin(),vItem.end());//排序8 M0 ?! d" o& ^
//////////////////////////////////////////////////////////////////////////% P8 n' v, o" b2 ^' O
//交换, ] K! t( q( v8 x- R
for (size_t i=0;i<vItem.size();i++)
; c0 Z8 t* l& E {
1 M% w* H& R4 J8 g8 T //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' j8 n! [7 M- D8 t pInvSort->Add(vItem.nIndex);
" ?% d5 c7 E( T# T9 y2 @0 I! o }$ o* B8 t2 g, A
BYTE nDestPos = 0;
& h, A. Z4 N9 l) M: ` for (int i=0;i<MAX_INVENTORY;i++)
$ R6 z& j8 q% U+ P8 n {
- ^5 Z; l4 h- `* N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 D& h% X3 F! ]
if (pItemElem)
& L" d* J0 h% y# C. q7 Z+ w) B2 s0 f {
0 A) F) P7 B, t2 s" C if (IsUsingItem(pItemElem))0 D$ d) y2 o+ q, T" I r
{8 b R& C) k; q( z% w4 V
//这个位置无法放
" o5 j! K/ u+ B4 ?3 N: g0 Z nDestPos++;
# @4 L! P/ p6 p }
; b5 P8 Y8 C% }1 X }0 T( w5 `; j) [) |5 I
BYTE nSrc = pInvSort->GetItemSrc(i);& Z: g# B9 U/ M4 j: p' A# G
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! q, P, `2 b5 N6 ]2 |! b I if (pItemElem)8 v4 g3 S, I3 Q# N: @/ g
{+ g; a" n% O' q8 _ P/ n
if (IsUsingItem(pItemElem)); l; {4 X& S6 |
{
3 X X; |% s% y+ O# @& y! i+ X# [ //这个道具无法移动,跳过
, H% K. B: j3 y3 f- [+ ?5 @* s" m: w% S$ q continue;0 b- q0 k" A% q0 d+ A* t
}% I& @* X* F0 s" @7 x; w
}else{
! {9 f+ e) n; o/ D3 R( ^, E) f: n //空位置 不用动
% W) X# x3 h% e2 }# k. a1 ~ continue;/ K( f9 t/ {1 C
}. _: C6 Y. O- Q! r* i- @; U
//////////////////////////////////////////////////////////////////////////
" K* r5 ?; p1 w" [' x5 `8 m# T3 @ //开始移动
" O0 a( z* {& W+ `3 t7 m: i if (nSrc == nDestPos)
& A) g1 b/ W) a- M+ P {
5 p- \* I8 F. }* |* O //原地不动
2 b5 `9 Z: \* Z% S3 r8 F) _8 p* P0 L1 E nDestPos++;
( C. p3 N" ?8 {" T5 \' x7 S continue;2 \. S# ^3 x) E- Y; u" p( L
}3 u# ?, f& k/ p) J' w. R) t
pInvSort->MoveItem(i,nDestPos);( Y$ B, ^4 Y1 o" l# r4 s
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. q. u1 s$ g0 J Sleep(5);1 g) T W3 C# v0 y5 K- D5 i
//Error("移动 - %d->%d",nSrc,nDestPos);. \. F4 B- k) ?( c) ^+ e6 M% i6 n
nDestPos++;( ]+ Z/ X& R0 Z; g) I6 t' B
}& M5 ?8 t* ?/ \
//取第一个元素的信息4 Y! l& b3 Y, E- U! `
/*
/ s$ b$ Y5 g x3 a! k @ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. U0 ~2 R. B' b) X {
/ K, X/ R! O$ v) C E Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* E: X; i3 Q5 N4 j6 K+ P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 c, y2 s9 @7 a: l- _" D }0 C0 |& s8 \9 Q5 K8 l0 z# e
*/% a( X- [: I) {0 D8 q3 O
//////////////////////////////////////////////////////////////////////////0 t6 K6 D9 w/ v* z" d
break;; @% n( k4 W! A5 C' c; p
}* J7 V# G7 T0 P5 @3 S$ b
}
! _5 i$ J# |; M. z: t# L}
- B, K9 P1 Z* k9 q. H( om_wndMenu.SetVisible(FALSE);
( J6 I3 g: c- T# ^* O1 I
6 w5 j# ^, H3 a. k0 h6 f# @/ `-------------------------------------------------------------------------------------------------------- y+ O: x9 [0 n8 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& R; {1 N4 _ C- `7 d/ P% ^$ r{! O6 }4 E8 p8 ?; l. z' k
BaseMouseCursor();4 ?0 m/ g, T |& ~4 S. j
}. b% c l" i" j5 Q# ?* |
在其下添加:
( O# H5 h' }- x0 K% q) p- n4 e+ Uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; q! u* n; J5 ~. g' c{
! q# I, C. J2 w- J4 d- qm_wndMenu.DeleteAllMenu();& I& z& Y2 S3 U0 Y8 H# w
m_wndMenu.CreateMenu(this);
$ Q* i: ?9 }7 u" Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 J1 x S. I4 w
* {/ J: N1 S1 G( Pif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ r7 g# c* f6 D: {0 D
{0 i8 j" `% s) t
//P以上级别才可以删除所有道具8 x; \( m) y( Y; U$ A; d X
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 r/ m, ^+ l/ }- h. o: t9 i$ i S}( ?% z6 U& B8 G! ~5 l! v/ a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* S$ {3 I/ J' R% l( `/ U5 B) X) E5 f! dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# ?' {! R3 S8 a0 H3 a% a6 ]m_wndMenu.SetFocus();
6 y( f) _& F/ O0 S}
" D5 ?4 D% y( ^------------------------------------------------------------------------------------------------------------
) s; v. h: O2 a& n- J$ E*************************! H4 k+ {" e9 b+ c, D0 Q6 D
WndField.h文件
3 p# f2 u/ p3 c# y6 T*************************
7 Q+ O) [+ ^# h( c. h9 n3 Y搜索:BOOL m_bReport;
/ I5 I. w$ |1 T: f# |其后添加:; r+ `6 z, m3 t
CWndMenu m_wndMenu;& m: S6 ?* U% S) g' c- |. s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; T! J$ C, n X6 F3 b+ j9 u
其后添加:
' S7 v) s! N# o7 Yvirtual void OnRButtonUp(UINT nFlags, CPoint point);
. G/ g3 Z" d; f
5 b2 P# o$ A2 t/ G# \1 H5 q Y' Y
* K( x8 O% }! G0 P& H+ K. j9 |3 x |
|