|
|
源文件中_Interface文件夹下WndField.cpp文件1 B& E, e% @1 a% f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, E1 S9 f. p9 U) M9 R' Y9 |
; F) w, A3 b5 m V9 Jstruct sItem
7 C0 A" z. O9 m" f l+ Z8 l{$ F& a# {1 O9 ?5 \- o' C
DWORD dwId;9 _1 ]% I4 E' @5 p5 Y
DWORD dwKind2;* @+ @* o& c- H6 B: ^- C
DWORD dwItemId;
9 }# W7 Z: [) H; [8 \BYTE nIndex;2 ~$ o$ V% Q+ @$ l4 v- Y( w# ]
sItem(){
# b5 B4 d1 y' O6 t1 ^% q% M: M dwId = dwKind2 = dwItemId = nIndex = 0;
5 t. v- a1 n _7 A7 b% O0 x}3 d' w$ w' ~- K
bool operator < (const sItem p2)
( L: O: |! ?( c- a% I{
) d" v, a, c" Q6 ]: R* j; [ if (dwKind2 == p2.dwKind2)
1 k. U4 b- K q1 Y {; M! g5 R1 z7 Q" b' s$ H T
return dwItemId < p2.dwItemId;- g& f9 R% [$ m9 V* k. y* G# [
}else{
/ j$ t$ I# n- c0 e return dwKind2 < p2.dwKind2;
/ _( S7 k/ z, o* e! w( ^( u }
, l _5 \8 W: a+ p# C}" d) ?& K) z$ a s/ i3 D, i2 T0 X
};7 n e( r3 ]8 _: m; i8 v) `
class CInventorySort
# o, g) m+ u6 _{
" M* |# D4 j! ypublic:
- _/ C1 O: {) k2 F, PCInventorySort()% k; A/ J1 p+ y; @; a$ f
{
4 W' W1 ?: U% d# n+ A3 `0 r m_dwPos = 0;
. N+ C. D& l; I8 M}
" q" S2 C( ~6 n5 s* v0 L6 q~CInventorySort(){}
/ j, e K8 ?8 `; l4 J7 @- X- y Dprivate:6 ?* G: g/ u6 t' x2 `
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 F+ ~% N4 {, `% e" aDWORD m_dwPos;
3 Y2 \, v8 U0 F! S5 e% h7 N' apublic:- a/ X/ Y, Z8 y
void Add(BYTE nIndex)
" r. y a: f' D# w* J Q# ]{
# J( ~& N' k# o9 e' J/ B! k2 p% H if (m_dwPos >= MAX_INVENTORY)
. y) ~' b) g7 o+ U1 T' w0 a {7 _4 P4 J( X7 q$ Y& ?
return;' \! P5 v' I* ]; I3 f3 q2 {
}6 k" I. v9 j3 V% G
m_Item[m_dwPos].nIndex = nIndex;
% H& Y# X! |. k g m_Item[m_dwPos].dwId = m_dwPos;
! M0 X! t; A f5 L m_dwPos++;' p1 q( \1 ~' Z
}/ e4 [2 k, Y6 f
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; x* M, F; ]: A7 \7 a: u' p
{
m0 v4 k- ~/ G+ a9 J for (int i=0;i<MAX_INVENTORY;i++)3 z0 ~" x( [* b( [/ N5 H
{
i% | ~# E2 z# h if (m_Item.dwId == dwId)
; P$ V6 X* ^0 L0 G1 x1 q {2 U1 t2 u! {/ p2 T
return m_Item.nIndex;8 Y/ ^; t( s7 @& f1 c
}! J+ ?/ |+ @9 n& B
}7 u/ C& s" ]+ r5 {) N
return 255;; U4 r' E, ~8 O" l V
}5 h- l+ ^! \$ `
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置: o' u% e; @; O' h
{4 o/ f, b& |5 O' u
BYTE nTmp = 0;
$ v2 b' s- ~6 O8 Y2 _ bool bDest = false,bSrc = false;
' E% S9 @1 P; B) f; U for (int i=0;i<MAX_INVENTORY;i++)
. e% h: B4 [* H8 G {
& L( S. U; z7 ]! i if (dwSrcId == m_Item.dwId)
9 m& [4 _$ T3 J {. t; R- B% e/ y) P
//id相等 则 改变对应的dest和src
* ~$ h& `) W" c nTmp = m_Item.nIndex;8 |9 i) _: Y, Q/ U6 d4 o
m_Item.nIndex = dest;
# O9 \% n. R9 [% u0 D }
4 N- d8 L; I0 |7 F+ D }+ a2 |. ]( v X) k7 D6 ^( E/ A
//临时数据保存完毕,交换开始
- E6 N5 {9 ]' N+ k- o for (int i=0;i<MAX_INVENTORY;i++)
( F2 x. J0 f* d. j {
5 B9 ~4 P1 W% `6 `8 p( Y if (dest == m_Item.nIndex)
: `' ^6 G5 f. A# v6 R0 s) s {
4 i6 L& Y. z; D4 V8 o& X" C //id相等 则 改变对应的dest和src
. T% ~* Y9 \; F, l$ o m_Item.nIndex = nTmp;
6 b5 x: R7 Q3 J3 |: c/ y$ l3 e7 A% u }$ Q8 _7 V9 [( [2 o
}
6 c; K0 c% w7 v0 J }. Y}
+ a8 V- q) z6 t ?% h Q! {: a5 C};
- D+ M/ h* a/ a9 t" `3 Y" T' t-------------------------------------------------------------------------
% W$ S7 [9 i, n2 \3 x. r" l" d' _依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) E `+ F: m; m, C" h x2 {搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 A5 b: V" t2 _6 l9 d紧靠其上添加:
2 F$ p; Y, N2 u2 `& kif( pWndBase == &m_wndMenu )0 o$ w* v" \7 }
{
$ Z! B! K, n4 K switch( nID )
, E2 f, W; E8 | {3 f% B$ G1 }, o
case 2:( {* m3 Q9 z: D9 u; k, y
{$ D: `" {: b) ]4 }2 C3 G3 |* _
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* y) h3 \ n# q ] if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% ~: h2 B8 _" O9 C7 _) S {+ b: ]# N& j* C& ?1 x5 |
break;
0 Z5 a% H; m" {6 f0 f! Y }
0 T3 I6 L7 }9 v9 ^8 @% }9 m* k7 { for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" T) f" l7 _+ ~% A8 B, p0 l8 G3 e
{
/ R1 |2 B# B- q2 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 A6 @: I Z* e# A/ ?* `8 _2 _: s
if( !pItemElem )( d' O' C. Q5 G2 X5 E
continue;; f7 l& G# W, E) ^
if(pItemElem->GetExtra() > 0)9 w- c6 v9 ~! X4 A V3 E
continue;* M" r/ c1 T$ e9 b, p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , d' S5 K& |; |4 ~) [' ?/ I0 {
continue;" C# y1 I: n4 _; F# W- z+ Z, ~7 x
if( g_pPlayer->IsUsing( pItemElem ) )) s, G( Q- @( m/ O& ~
continue;
3 g& _" @& h8 o: `& i7 N if( pItemElem->IsUndestructable() == TRUE )2 u# t, T6 f: u1 M! ~) s
{1 ~7 s L0 e: U O! a& P7 L- V
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
# o4 T$ g( r* ?5 B) y7 O continue;7 ?$ R. w" T% e0 ]8 |" j0 j( e
}9 t6 P1 r, [. g1 V& i Z) A5 n
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( E. Z! ~# }! T# i }/ k- r5 f4 \6 A, E# ~& i g
break;2 O: Y8 E" z: `& f4 v
}/ l* g( \( d" q! j. q w
case 1:) o. X9 G; e7 g: Q7 }& U
{4 v2 W9 M0 a( U3 B3 B( {- b" l
//整理背包
0 n, U2 _, Q/ t# b* Z: Z' X9 ] //////////////////////////////////////////////////////////////////////////
8 O# v; @- f6 j. e' z" I) M* o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 ~" ^& Q6 n! K1 V! c
//////////////////////////////////////////////////////////////////////////
' [/ X2 _; L6 V0 x7 h //////////////////////////////////////////////////////////////////////////4 m* }! Z9 `% V& E. Q
CInventorySort* pInvSort = new CInventorySort;; ` i9 a+ O" m: d
vector <sItem> vItem;
; r+ e# P+ y. y! ] vItem.resize(MAX_INVENTORY);//初始化大小/ X! s% o: n. T( V0 r
//////////////////////////////////////////////////////////////////////////
3 K( ^( c. I. Y- b6 } //填充数据
+ F$ [! K# X1 U6 G' C for (int i=0;i<MAX_INVENTORY;i++)7 \* |- U8 u9 d9 l5 P- L6 X4 G5 I) G
{
' l$ T0 p" u; U! A, I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ @+ K% _+ j2 k9 q8 } if (!pItemElem)& y7 O. J9 _+ Y% q( l5 F! D
{# Y, t+ I" s7 B$ m3 ^; ]& D
vItem.dwKind2 = 0xffffffff;1 C g$ y3 m6 V, G, O
vItem.dwItemId = 0xffffffff;0 H6 w( y( I% v* B3 |1 C8 I) v
vItem.nIndex = i;
6 A4 Z9 U: s4 Z6 @$ [ }else {* Q+ F' y5 v7 T9 K
ItemProp* pProp = pItemElem->GetProp();
8 B, U' v$ |9 M vItem.dwKind2 = pProp->dwItemKind2;! M, e) ]$ L0 T8 |! L F. ?
vItem.dwItemId = pItemElem->m_dwItemId;
0 R: [2 X' w% r, u4 W% f1 k) N" {( ~$ E vItem.nIndex = i;- O0 q7 U% ?$ L
}
' C: Y8 w4 ?$ n# w( k- B8 i //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) e4 |, K- I8 v9 [9 |4 g# _6 e
}2 o! X- ?( l- l' R$ z$ `$ {
//////////////////////////////////////////////////////////////////////////4 z* n8 Q+ z4 j- U
sort(vItem.begin(),vItem.end());//排序
- z* ~' |1 z* C! g, ?0 ~* L4 d //////////////////////////////////////////////////////////////////////////+ G2 L- s$ E% O; w6 Q8 O
//交换( U8 t0 d( `5 G* x% w1 e0 ?' A
for (size_t i=0;i<vItem.size();i++)9 J7 q7 p0 E* r6 [1 r: \
{0 j7 d& s$ B; e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ ]$ `0 n9 b) a pInvSort->Add(vItem.nIndex);$ ?4 Z4 V) e0 |# D( o/ J! u, d1 p
}; G( Q j$ b2 e- g
BYTE nDestPos = 0;! f, u$ N/ b$ @2 O9 k8 D& R" C
for (int i=0;i<MAX_INVENTORY;i++)* y* M7 v9 i. o6 @5 g
{4 f$ y4 ^4 g0 \8 I) T' @+ E7 q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% Z7 m; A M @2 A* f6 w% X if (pItemElem)
& _' z: A' i j; K {- ^' m; Q- a& _
if (IsUsingItem(pItemElem))
: d! t- z6 S5 Z* S {
. m' b% F" Q7 g: g" m y //这个位置无法放# y; X' T* Z% {0 j
nDestPos++;+ b( N' z! T' W& T8 A; E
}! ]! G' w3 t& r' R0 k
}# t: d" {* \* v% C4 [3 K( Y
BYTE nSrc = pInvSort->GetItemSrc(i);- B; x: m" L; [" _) s
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 O8 A0 |7 z$ F) }: H if (pItemElem)/ j. m. N1 K5 t* Q) @, i( b. D
{4 X' ]& h) q) ] t9 p
if (IsUsingItem(pItemElem))
+ `! I5 |+ K2 E& B% M3 {+ R {" ~ j% ^* \- l" d% E7 ?
//这个道具无法移动,跳过
0 N9 P" @# l7 e! m/ [8 i+ D8 \+ R/ L2 ? continue;
9 @! v5 }& C" T+ P2 o9 m }& Z. x! R4 M) K; z+ G
}else{
5 i# w& ~) @! [ //空位置 不用动
& l* x* A/ p, X, @. p continue;
6 _1 ?* ?0 o8 r+ o/ p% s6 A }
' x8 ?: v6 @* v3 i9 e //////////////////////////////////////////////////////////////////////////: o8 U! f7 h; N5 s* V
//开始移动
) X; W5 a! T) w if (nSrc == nDestPos)
9 Q) r8 a/ T t% X u } {
" V; }# g9 Z* Y //原地不动
' F) _* M- J/ n' x3 I nDestPos++;4 w+ s! @0 _2 q/ U+ e
continue;
! r" m) {7 D* ^. j1 C. x }" ^- T) N8 j5 M, V/ V
pInvSort->MoveItem(i,nDestPos);4 q+ ^! w J2 @( A: b' v( O8 t
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( C) ?# j3 o6 u& ^ Sleep(5);
) r q( T8 N, K5 |4 g //Error("移动 - %d->%d",nSrc,nDestPos);9 t) x. M: s) z1 v e$ B
nDestPos++;
c: G. n8 l5 m }* W- a9 ?( { i. m# V: d9 A
//取第一个元素的信息$ `) ]) ^$ [, D) Z
/*. ?2 }2 ^5 b: Y) E
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# j6 V* `: D7 L' o
{' M; z$ k+ d" J# i( z7 l
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ v" }: u4 ~) b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 d r7 m' g u9 P
}6 S/ C& m- n1 C0 c* H$ S0 V* {* Y
*/
+ ^# q3 |! c; m1 q9 I //////////////////////////////////////////////////////////////////////////
# Q$ A0 f7 o. P break;% ?$ [7 K v0 ?: O% J% a
}
O, q+ d7 h/ y5 V) `& a0 X. s } - D O* g4 P7 K1 ~& z
}' o1 o7 V5 f& Z/ _8 ]( p* B
m_wndMenu.SetVisible(FALSE);+ K' S/ J* R& }: o" m
' y. c. Y5 B g2 X* D' G
--------------------------------------------------------------------------------------------------------
- Z* c+ v: y8 {; b" F搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 o- u7 @1 h1 u) P2 c& |
{$ ~9 ^" L7 }/ k. ?, R: U* t
BaseMouseCursor();) w/ @4 Q: U$ K, G+ U$ x0 w
}
* r1 o& v& }: _4 a在其下添加:
( X; z `! B4 P* R; `void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 x6 D. F% Y# i) V7 W# v{- \! d! x8 ?6 L: l' u/ R
m_wndMenu.DeleteAllMenu();$ p9 M1 x: d1 A( M7 h" H2 T
m_wndMenu.CreateMenu(this);3 G5 d6 r# V! ?
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& T& G8 _1 ?) U3 ~0 s
# I% S1 v9 a1 }- ^& }
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( B9 c0 q- {# v5 G. d8 n{
- |' q% Y: S& [: a //P以上级别才可以删除所有道具
* m& u0 p9 t' @. b9 h m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");, c- x: X! O9 r' P
}7 u2 y; f; L% Z5 ?& B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 l' j6 V4 \3 q. Jm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 D) f# j) z: h% @& p- e" f" p
m_wndMenu.SetFocus();0 W! H- c. w7 n3 p4 Y/ `
}
! o& n) E# B1 l* ^/ D------------------------------------------------------------------------------------------------------------
% n7 ~1 H: n2 @5 [5 b4 O4 f*************************
$ d4 M2 M$ F+ s: x1 i7 E, \9 yWndField.h文件
4 }6 ], `2 _# A*************************
+ F O; C, U; c7 C% ?; r3 r5 _搜索:BOOL m_bReport;, |% a: |, J. M, g
其后添加:
7 a) }8 f* r2 n8 j1 uCWndMenu m_wndMenu;
9 A. X8 K+ |- S+ L$ }) e4 L! d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" u* Y% }. i" t
其后添加:; m! q- f) l) y
virtual void OnRButtonUp(UINT nFlags, CPoint point);" a0 C+ n# R! i6 v
! b& I) h7 ?' W% r
8 J+ V5 {- Z4 G# f( y% c$ W. E
|
|