|
|
源文件中_Interface文件夹下WndField.cpp文件 Y2 ?2 P1 b& L/ z$ P
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" o* J( k$ u# Q# V
, {" s! G, g$ X2 y. V
struct sItem# v1 V& J. T8 I
{6 I- u \8 c8 f: B7 ~% u
DWORD dwId;
8 q& T# }3 x% ]4 i9 ~DWORD dwKind2;! N4 R. B% d- ^( W2 [
DWORD dwItemId;3 r" h) F+ g4 U" ?2 t
BYTE nIndex;5 c J/ o/ ^3 p$ H0 H
sItem(){$ ?" x" b" z ]) l) [
dwId = dwKind2 = dwItemId = nIndex = 0;. ?9 M7 S+ l9 f. h
}
7 ~0 k/ g9 p* ~% E) K" m6 xbool operator < (const sItem p2)# b6 y2 i5 r+ s4 H. |
{
. b2 U# h/ _3 b( _; r" X& b if (dwKind2 == p2.dwKind2)" C# ]4 m1 S5 g, h; R0 Q+ r8 U
{
$ d7 x- g8 z' b$ S return dwItemId < p2.dwItemId;* c; \1 @: \* b- @5 H" t7 d6 Y+ X
}else{: Q& @/ q! v9 @( ^5 `: j! W
return dwKind2 < p2.dwKind2;* w$ H; c/ |0 ]! R
}4 ?( t3 Q2 A. q+ d7 r
}
2 v# ^( r3 S9 l% _7 u0 I) @) c2 r};
/ L5 Q8 ~/ a3 N6 jclass CInventorySort
# @6 [% B+ e* y V$ I{
7 A4 P' ?3 Q8 \: X. ^! Epublic:' F4 ]$ Q/ \0 y* p, B8 y4 y! a* p7 j/ P
CInventorySort()
2 C# g& n( W' v: T8 _{
. B& F) H, Z: g; C3 _2 O E, ~ m_dwPos = 0;! \$ w! R1 f& F& y
}
* B7 [) \5 ^. p! J. n7 B0 X* Z~CInventorySort(){}( T! M; U _( w! E: A* j; _9 `) |& f
private:
: i$ D+ u, o2 Q' o) o# QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 U0 e/ ^7 @5 a9 Z% T# b% U
DWORD m_dwPos;" S& K0 |, G7 K% I N g+ @! Z
public:
0 g9 U: U) u! A; o6 X$ avoid Add(BYTE nIndex)2 y: }5 A5 V2 x* j( q
{4 ^6 q3 z+ b7 j- \7 g0 D" @8 S! h! H
if (m_dwPos >= MAX_INVENTORY)
# }$ p, R2 k r2 S/ C" J# k {
4 t+ |: o0 {5 d# b, `' m% v return;
8 E# b! G P, C: V- n }. e* ]" B( j, a" v4 Z& A
m_Item[m_dwPos].nIndex = nIndex;
% _3 x8 b8 w- X) {4 o, Z; l m_Item[m_dwPos].dwId = m_dwPos;
( ~6 C/ E- [: V( o C# e m_dwPos++;
: f y+ I, v: R. N; }* @}! x% \, C. }0 e* h q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. }: H7 j# _7 m3 @1 u; m/ B8 q{
$ c; G( q M* r3 {7 W( @. C; P- h for (int i=0;i<MAX_INVENTORY;i++)
+ B B/ c. o0 x" M6 c- q: k {4 A9 \3 J+ h3 G. [$ c m
if (m_Item.dwId == dwId)" n8 k7 B* T5 d& c
{# m3 O7 L8 t2 \& O6 a2 f- y
return m_Item.nIndex;
x8 H9 t4 \* P* R c5 t& W9 O" r6 E }
9 S* Y3 Z5 T& [. _, N% ` }" J3 `3 @: y$ I% x: |" G
return 255;
: M/ @9 L6 a, | e}+ T- ~6 j. M; I! T! ?+ Z
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 w% }# N# s2 d7 N$ E4 [' f
{$ @) D6 R2 ?& o* K
BYTE nTmp = 0;1 Y7 ~$ g: j# U4 q: Z
bool bDest = false,bSrc = false;3 |# D- w9 w5 e9 @+ m1 I
for (int i=0;i<MAX_INVENTORY;i++)' i( e) _$ H7 e( B: X9 @9 m, e! E
{9 G7 t; t: Y5 Q) h( r
if (dwSrcId == m_Item.dwId)
8 Q: P3 S$ v: n/ Q9 Z7 x% z {, U7 n1 V7 z) R/ O; y, t- N/ B
//id相等 则 改变对应的dest和src2 C9 ]6 S# k7 Y0 ?4 J
nTmp = m_Item.nIndex;
% X3 C5 M7 K( f5 G( x' c1 A- k m_Item.nIndex = dest;: o a! [- {* }" H u. ?" l5 R
}. a" Q( T a* V, C
}0 o; z n7 _7 ?7 J# g
//临时数据保存完毕,交换开始, Y( t( A/ _: _. ~
for (int i=0;i<MAX_INVENTORY;i++)! e' r5 O/ r' w0 i6 B+ B
{! u- _$ {1 e F& k: T
if (dest == m_Item.nIndex). y0 ]* z4 }9 g
{
# [' U- j3 O5 [6 g //id相等 则 改变对应的dest和src0 A: l" S0 q/ \, m5 k$ ]4 ]
m_Item.nIndex = nTmp;" V4 B# ?7 U5 P/ S9 F: T
}0 K5 T+ T1 n' ~% F1 B6 t
}% A9 n/ ~- V; g
}
- e: o5 J1 _$ ]) O};! r( `0 {) H+ A2 m0 a R
-------------------------------------------------------------------------! \2 }3 B- f. R- w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 u; V; @* w8 r' z: u0 @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* \6 x% a4 y( J紧靠其上添加:
; P- `7 H8 c+ Y, b/ h' J2 qif( pWndBase == &m_wndMenu )
; I2 |2 e/ m7 H{9 `0 ~+ S+ ?) F& k
switch( nID )
( {0 R j n! t2 d% l, k {
: [' ~5 Q4 J9 @8 t# a case 2:
4 I3 J+ f. }; \$ H {
; L; _1 ?1 A _7 L" Y2 v! ] //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);6 G E( C% z% z+ J3 _6 |+ n- _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 \# `0 z* U& |9 Y2 u% n+ x% o { }# e6 A! R7 y1 H" X% u& \% v
break;* [, D, V) h8 l8 I: K3 g2 _( ]
}. ~$ A8 d5 g- A. q
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). X$ C* S- i) H/ U2 U& @& p
{
# k, A8 a7 ? h3 @9 b) ]% w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 G2 }) x9 T$ `, l! O% x
if( !pItemElem )
. g7 P8 ^4 B5 `. h7 _6 d0 k continue;
! B& x; X8 |1 a4 Y, `1 g, R' p if(pItemElem->GetExtra() > 0)
& i. {" T8 F2 q) s6 b" |2 u continue;/ G5 a3 T/ y" l! w" _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ) A" t( q$ @+ G5 ~: x Q) X8 ]
continue;6 m% H; V z2 a+ P. p" A
if( g_pPlayer->IsUsing( pItemElem ) )( m2 @4 H! d8 g
continue;
: Z2 a! k6 M0 i0 \$ l% d! k if( pItemElem->IsUndestructable() == TRUE )
) v8 q1 h8 F- X0 @% k: v; i {! i; ]8 n% U* E+ y. M3 x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! x9 p' ?5 `6 [2 u# V; v continue;4 E @7 d% n7 H, {9 G4 \" G1 A: M
}
; l/ q7 U8 |; B9 Q4 T9 n" W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 K3 S' r5 v" X }
2 S3 B3 m( }( H6 g5 W3 K& A break;, y0 _$ H; ]' v. N; ?. }. C! {- U
}3 v+ k1 b3 l w: D3 W$ K
case 1:
$ u9 Q9 }% v6 u6 @) c- ]# j* v {
- z5 D- Z1 I+ o' @, R( h! Q# T" ]4 m //整理背包
8 I/ n" W6 `$ h" ?; O //////////////////////////////////////////////////////////////////////////
6 j! z( ~1 q/ w, O5 U/ V6 d4 c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 l4 r/ k. ~( Y- k% n0 r //////////////////////////////////////////////////////////////////////////0 N$ \: L) G/ s& [+ K; \
//////////////////////////////////////////////////////////////////////////
" _6 E' K. K- F9 w2 L8 ? CInventorySort* pInvSort = new CInventorySort;: f4 O1 X6 f& J* u+ E2 X- J: g- l
vector <sItem> vItem;
, s7 y$ V4 c T' l) f! a( J/ C vItem.resize(MAX_INVENTORY);//初始化大小
1 c8 U) P. i9 Q3 V' _ //////////////////////////////////////////////////////////////////////////1 B; A. I1 `/ |; I: T
//填充数据- c' Z9 x% c- Y1 {+ T2 u
for (int i=0;i<MAX_INVENTORY;i++)
3 ?1 x' {# @. k2 y- {, ?# T {+ i4 v. ~1 d1 }) K1 R, O5 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 g) t; f( _* |+ c: i0 b if (!pItemElem)
; @8 X7 Y' `% f7 j" k3 X }1 q9 @ {: I# g. m" I6 t
vItem.dwKind2 = 0xffffffff;
5 d i6 g/ i- |2 e+ {8 M+ } vItem.dwItemId = 0xffffffff;
& p: P5 J9 N0 e5 K vItem.nIndex = i;
! b4 A2 u" `; b g7 T. n! ^" j }else {
% F4 i) {+ d# j3 M: k/ b ItemProp* pProp = pItemElem->GetProp();+ Z. I/ `; B% Z- z1 [
vItem.dwKind2 = pProp->dwItemKind2;. Q5 W W- p: e
vItem.dwItemId = pItemElem->m_dwItemId;
1 x# ^0 c# z; U6 W vItem.nIndex = i;/ C7 A" `1 \0 t* l
}
9 m: G/ M1 Y; ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# w- D# f; U. }9 t: L; ], l
}* L8 A! C2 C( @. E
//////////////////////////////////////////////////////////////////////////! W8 N, ^4 \, z0 l2 v$ F z
sort(vItem.begin(),vItem.end());//排序- A" d. S: [+ n( Z: X. G' A
//////////////////////////////////////////////////////////////////////////
, [* M2 Y* t' A //交换
+ h# \: d, }/ C2 A for (size_t i=0;i<vItem.size();i++)
; ^2 c/ D8 _" q$ E {! U& I* K* L6 c, E% C4 }& A: H
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" W) x! z' E, h2 N pInvSort->Add(vItem.nIndex);) P7 c7 s2 s7 z8 u- @2 C9 g
}
; R, z0 u( L: x BYTE nDestPos = 0;
) T, g- Z: g8 M' G0 j for (int i=0;i<MAX_INVENTORY;i++)
A' P- C6 [' U {
8 ~) k( y4 X# q! }- N$ g CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, y3 t$ p9 r! h' E if (pItemElem)4 A; w/ V: D; \+ ^. L3 c$ I
{8 ~$ c, M# X% D! D2 Z; r) I
if (IsUsingItem(pItemElem)); _) l/ n! W1 [5 n3 k
{
+ G* Q3 P% B I4 H( T //这个位置无法放; }0 I M0 W) M4 w+ o
nDestPos++;, `" u6 ?; W3 Q2 O! b6 `) ~
}
3 q! e, v0 h: a: I' [ }# I+ p2 s/ H I5 d+ u
BYTE nSrc = pInvSort->GetItemSrc(i);
& t/ u% J, P* I pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 z c1 N6 `, {1 D6 J2 D" K9 O
if (pItemElem)
) I) [1 e% F0 o: L! R7 J% g6 k {! q% B: d" H/ C5 H+ i
if (IsUsingItem(pItemElem))
# ?% c b4 j3 o3 }" L {4 u! f2 J5 V( q$ x/ g) W
//这个道具无法移动,跳过
* k' c) l& A8 i. Y$ k continue;: h1 w* V; S; ^; j- F
}
$ X7 M7 C* ?% b E/ I }else{
6 r5 M; v6 H* E. }9 @1 l //空位置 不用动
/ J8 {7 S, | Z! m9 Z% W continue;, i- z" j j" o9 o U @% Q
}
3 Q D4 ]( ?: ]4 z5 m //////////////////////////////////////////////////////////////////////////2 m) {+ I7 o) Z' t: @$ \# S
//开始移动6 R X5 ]* p/ W) h' Y
if (nSrc == nDestPos)
6 F, q6 q# T8 P5 ~9 f( P {
8 t6 P: O3 R) m4 _7 k //原地不动4 R# V e+ N+ E, ~; Z2 }- }0 |& _: ^
nDestPos++;- q. H. V( u2 X0 \5 S$ y
continue;
8 |$ ^' W; m! j } ~( B3 y. d- c+ Z) o, e( C
pInvSort->MoveItem(i,nDestPos);6 ?" X1 F! N8 \6 F0 z" a7 D, s/ O
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, x# ? D9 }+ E8 e% L7 j Sleep(5);% L3 P6 G7 U/ G
//Error("移动 - %d->%d",nSrc,nDestPos);! h0 `3 z( w9 A* J! x& J! s/ I
nDestPos++;
" x( L; D: ~/ @" f+ ~ }
6 Y' |$ x3 z% z+ |0 J! p; C# W //取第一个元素的信息
' \' B* ]1 e, N2 y0 G0 A /*$ N. u$ i) C+ K9 `; m
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% p! p ?5 Y8 E
{
. p$ X0 W6 M) r+ y Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% ]. T! X5 F" }! Z, ?9 P/ h g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( s8 o. k/ g! l5 w& x
}
+ ^, ]$ U. L; m9 y */% p5 k3 G) h& x) B4 R! a& s
//////////////////////////////////////////////////////////////////////////
7 s, P1 X# e' ?; N break;8 f# y0 T- J( R8 l$ E* o
}
3 ]9 e2 M& e# z }
' g7 w( j" E# P# T0 e# b}
1 ]" e( r. W _8 I1 Pm_wndMenu.SetVisible(FALSE);" Q2 y$ J- c5 V# _
- A l' R6 A7 F Z--------------------------------------------------------------------------------------------------------9 S. d" T( K5 K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 P* ?0 C& q' w! C% r s% Z{
9 F8 n! S/ M2 ~BaseMouseCursor();
1 y. f9 X: u4 w( e5 Y}
, G* ]: `1 q) I# Q5 t* ^% P6 t; `, w在其下添加:- \3 K8 s0 Y, g8 g
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
, [7 _" G$ G) h- o, P9 q{7 w) G' B+ k- {: e T
m_wndMenu.DeleteAllMenu();! g. x' W4 K$ b: e3 V# A
m_wndMenu.CreateMenu(this);
6 R- l) E0 H0 T$ z' p3 M# vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 l+ m# _% g2 v- v3 y! b; [; j
; |& b9 L, }/ U2 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' C' _1 F" C# C$ t, U- x; X/ p{
" E& L9 [/ U# u) p6 d% D7 P4 _ //P以上级别才可以删除所有道具
! r: i; m/ w' [4 ?; R3 C m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ J. l/ q4 I0 |* H; m* J
}& W+ w* |7 {6 A, |, D6 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 R* Y0 ~, U: bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 F1 J& c; W5 X( T
m_wndMenu.SetFocus();
9 b9 q2 l& H1 {' n* P}+ ]: Q3 | e) Y- D' Z
------------------------------------------------------------------------------------------------------------
1 g* w* }% Z% U8 I' c% J4 `' y*************************
" E; E [1 K: O/ w- ^WndField.h文件
C1 N: o8 w- p" P8 a d5 Z1 v1 g*************************
c* s$ ?. P0 h2 {# o搜索:BOOL m_bReport;
2 ]% p* [. U! z4 z" m3 \其后添加:1 w( R6 {0 D. p$ ^3 e
CWndMenu m_wndMenu;
r$ N& m9 q: F搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ K/ J1 r9 @, [+ t其后添加:* K/ T5 b( v; T
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 _2 y8 C! D2 {+ B5 C
! ^, ^7 r h" E0 H5 z9 i# a! u. {3 y H8 o3 J% g) ~
|
|