|
|
源文件中_Interface文件夹下WndField.cpp文件
$ R# q; \, e0 W6 b5 Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ^8 Q6 }* M: H9 i( C7 ]6 H3 c9 k
0 \2 n: G0 `: ~. L& r) h5 M
struct sItem0 j, u% M, b. s, p3 G. O
{
' i8 s, x( C6 j, D, k4 xDWORD dwId;4 U4 _* ?# f3 h! X/ |1 u
DWORD dwKind2;* d7 h y0 v' V# f
DWORD dwItemId;9 O6 l% t2 d5 r
BYTE nIndex;8 i3 m6 {( Z7 v
sItem(){
/ `- D' P* S1 d2 a, [# r dwId = dwKind2 = dwItemId = nIndex = 0;/ u/ ^# t7 ~' d
}
" \4 W" C: f4 m s7 Z% sbool operator < (const sItem p2)- R/ J3 o; J/ Q, y. y
{) r! e8 p* y9 X. W" k( T
if (dwKind2 == p2.dwKind2)
! ]' @: T- \' F/ `0 C; _. W0 { {5 v; D* g2 I( N0 K
return dwItemId < p2.dwItemId;0 I5 b% W9 D! w; I' F& ^
}else{* U- G4 e- k& v
return dwKind2 < p2.dwKind2;
. ]8 V; f2 L! H/ ^ }. F1 Q6 H( B3 @
}0 _ j5 y4 Z, q) O* x
};
/ j7 X ~: x; x/ Y( E @2 Cclass CInventorySort' m! k* I, j! b
{
( Q+ m v M4 }' M8 r6 Kpublic:$ v* U+ Z J2 T) D
CInventorySort()& X1 m5 N. ?; ^. R( b: J; D3 Y
{+ ?! @. a l! ]" Z* Q% \/ t
m_dwPos = 0;
' H0 Q2 y- f5 W) Q# c6 m}
; ?* J3 T3 Q- G+ }~CInventorySort(){}
9 L ?9 }8 e% G Pprivate:6 T" {' `7 G7 V- @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- K9 W" ]; t: p4 r) [, p7 e; w
DWORD m_dwPos;
2 k- o! b% L2 \" S- jpublic:/ r9 ?; n1 \8 }+ w- Z5 N$ R9 R
void Add(BYTE nIndex)
7 U2 c. {3 |4 P2 R{
# Q5 J8 X* M7 k if (m_dwPos >= MAX_INVENTORY)
! q& `0 _9 w3 J8 N1 `' M {
" Z# k4 e3 w7 ]9 [; `( d return;* U; P s; \8 y6 Y
}# \& m, Z- y; Q6 Y; ?, y
m_Item[m_dwPos].nIndex = nIndex;
. F* _2 e$ D0 Y: h m_Item[m_dwPos].dwId = m_dwPos;
2 ^* U- t) ?: V9 f$ }" I( h m_dwPos++;+ m; g# Q o: A u# ^; c p
}! c" E- j7 k8 e0 ?1 [) A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' r: J( V% B+ ?) K
{( r+ c5 ^8 `) h* C, P( s
for (int i=0;i<MAX_INVENTORY;i++)
3 t4 G( U0 ~& Q2 ]6 v {
' F) r: |! ] H( m; o% j if (m_Item.dwId == dwId)
0 b& P3 j* C. Z9 t* [ {
3 Z% v$ n" j) S s' |6 \ return m_Item.nIndex;; `2 r2 ^. G- x8 {, g
}1 P1 H: c) N2 M$ w1 U
}
; u4 N9 l8 m6 V return 255;3 t5 O1 W( S b
}; {+ q# b" O# t) P/ V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 G6 Y# `6 U! S# q4 D/ d
{
) F9 Z" D. D1 h. T k BYTE nTmp = 0;* {$ ^$ ^# ]$ {& }* p/ \% f
bool bDest = false,bSrc = false;3 |2 Q$ V9 w2 y* Z7 s: m
for (int i=0;i<MAX_INVENTORY;i++)
4 R8 z5 k" s% H3 ]$ ]: o+ c* Y {- D. d/ H, K. X& ]; [
if (dwSrcId == m_Item.dwId)
) B$ ~5 v0 L) G; x1 F. E {* q4 a# X% d ?$ U( D) f# e
//id相等 则 改变对应的dest和src7 ?8 j7 H |' ?
nTmp = m_Item.nIndex;
1 o5 ]( u3 V' N; h, i m_Item.nIndex = dest;
% u4 G ?( k8 v8 n }
: }, a6 q" R& C! o( d4 [4 C1 e }2 Y7 Z0 O- N/ z+ {7 C' c0 p
//临时数据保存完毕,交换开始" T _2 r, T- d/ k
for (int i=0;i<MAX_INVENTORY;i++)
: B& T2 ~+ g y {
/ ]( l3 t8 }' l6 z9 q if (dest == m_Item.nIndex)
$ r* t$ x1 y$ B) R5 |! B0 L" t$ y {: U+ Y# E) f7 C4 `
//id相等 则 改变对应的dest和src
/ R* q% t3 U3 t% U3 c m_Item.nIndex = nTmp;: U1 u2 y" u4 y ] K4 k
}
5 i& T6 e, }7 N: l/ m, F }
1 ^) M( R4 H: o% V3 X8 Y}
. l: O9 H8 K1 L9 A5 q+ ?* Q};
3 V% u, y# ]! A1 r) u4 o-------------------------------------------------------------------------
: X' B& j6 h6 G5 c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& Z* t6 P' ^! g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 m6 M( j J# R紧靠其上添加:
& |- t: F/ ~9 V' m: [" b! Sif( pWndBase == &m_wndMenu )
$ F. _: h" o0 _8 ^0 L' Q{2 }6 j8 G2 f4 I/ C9 n" T+ u/ j; Y
switch( nID )
) N2 ], o: I) b. V# J" s- Q {
1 `8 P1 ^7 `- K, n case 2:
4 p, I( |1 ^' c# Q, M, b+ g {
' ~% W9 D! ]. o0 v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 M2 G6 ]: z% Q9 d& |% j- w4 v
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); _+ }9 E8 w* J6 |) ^' A$ ?
{
( K( {7 [5 {; E: b$ C break;
) h/ D! H) N, a5 O2 w! F$ y }
4 I8 _* Y6 n2 Y4 M j! p. p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& v% z2 _: e7 X B% |
{
9 l4 U+ ^9 a( g3 ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 J) J( @4 U! @% o7 M F if( !pItemElem ): P( ?* G) r) R3 i/ r( `2 F
continue;3 C' o' O6 _0 A7 E1 w3 o
if(pItemElem->GetExtra() > 0): w' H$ E8 f% t3 z6 I9 [) T: H/ }
continue;9 I1 g$ ?, Y8 l) @
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" K( ^" E3 T( x7 X% B& s3 |; ?* w continue;7 M- P+ x& J' h- w
if( g_pPlayer->IsUsing( pItemElem ) )
/ C- \+ z+ }7 e* W/ p: _ continue;
; |: X# J) b4 e& D) V! j$ V if( pItemElem->IsUndestructable() == TRUE )
3 ]5 k" K. @5 R& e |, w {
( h& ^8 I* K- n7 |, } g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! q4 w9 i# W$ Z% w0 Z continue;
/ n4 S. @( d: S7 y5 V: Z) e }: n. ~# T# V8 k3 J+ O" B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; w( \ L; }- W# p }9 q* L. v: Q; ?
break;2 `! D$ R0 K# Z- {/ d1 G2 S, k
}" k5 L* h7 _& O% R! L9 {8 ^+ v# k
case 1:* Y* Y- v0 A) o% i8 L
{% s0 Y' M2 F2 D$ ]7 \, c6 I. ^
//整理背包6 ^# w. e; l2 J: p7 R+ t) R6 {( A
//////////////////////////////////////////////////////////////////////////
1 N$ V" i9 V g' [ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" m2 E0 x1 t* q
//////////////////////////////////////////////////////////////////////////- E |% m# K- d. u, A& j# ?9 g9 A
/////////////////////////////////////////////////////////////////////////// `6 ^% @$ {: M6 E: B
CInventorySort* pInvSort = new CInventorySort;7 A3 p% O7 ?, B
vector <sItem> vItem;" ^ G8 E- T( W( d. W
vItem.resize(MAX_INVENTORY);//初始化大小
$ Q2 p* r! O$ J. t6 |) [ //////////////////////////////////////////////////////////////////////////& x8 a9 y: x* n
//填充数据5 M$ g5 D" Z. a4 X
for (int i=0;i<MAX_INVENTORY;i++)
( p: E- L: t) i3 P# O {6 n5 Q) e; W2 X+ D! K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* Q8 W9 e: k3 U) x. u
if (!pItemElem)4 f' ~4 k* m' f2 p8 y5 ]" m
{
; g+ m! N- y& z/ \; k6 ^" r vItem.dwKind2 = 0xffffffff;
/ q, {* V+ N1 h vItem.dwItemId = 0xffffffff;
+ Z8 r0 R* Z: o7 h, S* D vItem.nIndex = i;
: U2 D; v4 T6 O7 h& N. z' M: P }else {
& p5 h0 g# q2 ^* }2 P ItemProp* pProp = pItemElem->GetProp();
6 F4 ] F/ J4 K- t% g" s vItem.dwKind2 = pProp->dwItemKind2;
9 A6 s* q% t& B5 i0 ]) N+ q( \ E vItem.dwItemId = pItemElem->m_dwItemId;+ e5 L, p3 y* c! X! S( T
vItem.nIndex = i;
6 ?, E4 _9 l" S G) h! X }" R) W, h }# `4 [" {; t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" r% ^) ]( Z# u' J% j }1 P4 Z9 v) ?. e
//////////////////////////////////////////////////////////////////////////2 ^: k) e+ g; j$ n" W" N- A/ X' r
sort(vItem.begin(),vItem.end());//排序
+ p! f" K& g9 h# D1 H6 c8 v //////////////////////////////////////////////////////////////////////////; o( v. v& S5 Y8 V2 O
//交换. e0 x' D! [" X, m* j+ n/ f$ ~
for (size_t i=0;i<vItem.size();i++)# U# Z* x+ ]6 Q8 i# X" i
{
* j; x. M% y+ j, \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, \* O# q% F# W% C& |9 D: ~ pInvSort->Add(vItem.nIndex);
7 l/ r7 ]7 E' G6 F1 d* a }
. M$ v9 c+ Z: H# ` BYTE nDestPos = 0;
3 ?* [: O) n7 U0 ~5 O# Z for (int i=0;i<MAX_INVENTORY;i++)2 h; l! z, Z$ N Z( o
{6 O, t5 [) G; T& ]9 x+ R! c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 O: D( M: f# Y$ q" h
if (pItemElem)
% H6 `" }, n$ a) ]+ m/ M+ o" p {: @% m' v: v z; j! e; M4 D+ [- M
if (IsUsingItem(pItemElem))
3 D6 `- R2 A- e+ b: K0 ]3 W { @1 {" k( U) s) _
//这个位置无法放7 B) k" I4 V5 I4 V& `
nDestPos++;
' \ u9 X- _. `7 F6 B }
+ S' ^# E+ l$ u0 A1 `$ o }1 a. {( o, L% Y
BYTE nSrc = pInvSort->GetItemSrc(i);
) P% F: `" Q1 k9 @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. J% ~5 m- P7 E$ L9 m x- t if (pItemElem)1 Y F/ I5 K5 `: M4 j
{/ K& y) d) @0 `- C
if (IsUsingItem(pItemElem))
. s3 A) P3 T% V+ ?2 [! t% S {
3 H6 }' u4 ~4 u* `; I! t. L //这个道具无法移动,跳过# G- z) r8 M I+ ]
continue;
1 F* [% x5 d9 h' [ }
! e2 W' X6 {2 c: G* A }else{
* k8 W L6 Z# `$ H) c" G3 B; ]6 S //空位置 不用动3 i1 C; K' f" w9 ?: z$ X
continue;" i4 ^) B& y' ~1 r3 G& M
}. |+ J& _- @5 E
////////////////////////////////////////////////////////////////////////// U8 o2 a3 [) Z; _ n
//开始移动
3 }( S% h! V' r* G if (nSrc == nDestPos)
. ~9 W9 J( J! e1 O( q {
* D5 g4 b* K0 \# r4 }3 u //原地不动
7 R+ N* t5 X) V4 U+ |6 @ nDestPos++;
1 C$ j" h) b# \1 F' u. O continue;+ ]" c* A# L1 i6 ?
}
; E# } F- r( i# D8 v pInvSort->MoveItem(i,nDestPos);$ j, O/ T, ^$ J! t2 C l# X5 i* H
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( c2 f D `5 {2 C& `* }$ G4 X Sleep(5); a" H9 p7 f4 g) T/ F+ t
//Error("移动 - %d->%d",nSrc,nDestPos);
p8 Y4 S/ Z3 ]* r2 @2 w nDestPos++;7 H+ N1 _4 ~8 @+ C% p! S
}# j) ~$ T, R# E( J C1 n. V
//取第一个元素的信息9 G' L+ e' J2 I" o% w+ A
/*
8 \6 U4 P# \+ k! X7 v if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! Z- l8 A0 N# p/ L* P: T/ s
{9 y( S& a* M, ]* u
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 K# u1 I( J M+ S+ S9 h" K b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% u) h5 ^/ S) _, H; s' L
}
& O$ X: Z) Y8 Z0 I" h6 { */
+ J8 f4 y- e: n5 O# U8 i //////////////////////////////////////////////////////////////////////////$ @: J; K1 o2 F+ Q
break;% v6 b# S' n0 ^( X2 N* ]
}
- P! j: c, R# L" m* d* G ]( v } , Q! b" ?- @( |, V) C: H5 Z
}0 i7 s! z# Y: V0 ] f- |( ~
m_wndMenu.SetVisible(FALSE);
- k. t/ P9 r6 i6 @, `$ Y, K" F+ A; ]. B, ?7 u
--------------------------------------------------------------------------------------------------------. R$ U" Q8 d( v! U* Z2 j$ H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 b, `& Z, {1 R+ T& {* T{
. F; j% O: y$ tBaseMouseCursor();) N! |' y: F# V" r; O8 \5 x/ m' d
}
1 y/ _& t/ Q8 U1 }9 X- J在其下添加:4 w6 u9 F2 D5 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 R$ {5 _$ _; `+ g7 n+ ]: ^
{
# t, E; o: s6 Y$ N/ W I" d8 Rm_wndMenu.DeleteAllMenu();6 @+ A/ v1 M/ N- x6 L& c5 H' Z
m_wndMenu.CreateMenu(this);! |, \7 N3 }9 e8 H* }# B4 Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 U" @& J) I* f6 ?/ G/ F
1 U; M3 w; l9 }: W( D
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* R$ V# U9 ?# i) z7 |3 A
{9 \, E+ e8 e+ ]8 @8 W- U+ U
//P以上级别才可以删除所有道具0 N G. ]3 }- _; C- ? ?6 x
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( s+ `9 r# ~3 _" q}
+ {/ u3 t. H3 G1 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); s$ ~! R( X4 d3 s0 |9 ?+ n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) ^2 I+ `" l) R" q
m_wndMenu.SetFocus();" e E2 }! o' R9 W
}! M& ^/ j- |" J3 A1 \
------------------------------------------------------------------------------------------------------------
8 y' O% R4 K3 o5 H; R*************************
7 J5 w# t# Z( F7 v; I) Z6 mWndField.h文件
; c1 Y: K* @' Z- w) [*************************
# e! C w) Y6 B搜索:BOOL m_bReport;& K# ?) v+ f. k& `
其后添加:# g! S' {' z* ?& L) F
CWndMenu m_wndMenu;
F4 i. |$ O g7 d, P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! Z% q& K% e2 [' o" P4 o* V( u
其后添加:
6 A2 k& ?; K$ v) O) b/ O( o$ Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 k% Q7 Q% w6 ~; @
% \8 K+ R9 v9 a0 |9 n* \. O6 ?8 L. J% u
|
|