|
|
源文件中_Interface文件夹下WndField.cpp文件
" q6 Y$ ^9 b$ Z$ i c& l/ G/ Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 P8 G7 |: ]3 E) g8 i1 n
i8 H' O; q$ V3 @% Z0 c# b0 Estruct sItem2 {" b3 C' ?( i4 i/ @6 |
{
& _8 \8 g& t" cDWORD dwId;% k0 k9 d- T& x# s9 t% _- a) G
DWORD dwKind2;, \8 ^& B3 p, d2 W# a/ D5 N
DWORD dwItemId;
4 ^5 @ b/ G& ?+ yBYTE nIndex; |% S0 w, h3 d" U
sItem(){
9 ]" X7 n2 B5 F; g7 x; S9 G0 f D dwId = dwKind2 = dwItemId = nIndex = 0;
# i2 i0 J1 o/ h# {% J1 f- K}- V, [* U3 P/ M; e, g' p
bool operator < (const sItem p2)9 p3 Z. P0 z/ G' m( Q4 n0 k' _) P
{: r) C6 o& w7 ]! H: p8 `5 _
if (dwKind2 == p2.dwKind2)
$ _' B3 s }2 k, T C' t" x& ^ {
5 q" l0 ?' h8 `% @0 o w( W7 [! ^ return dwItemId < p2.dwItemId;
# _) X0 \! l2 O" O7 l4 s+ x }else{6 Q( Y! n0 ~3 p" Z$ t
return dwKind2 < p2.dwKind2;
+ F. {# e0 U5 d }
' N& u$ D! y1 N/ D( |' a}
6 {2 W" Z" K% W$ T7 r* E};6 s; ?( K" i0 q, a, ~4 A8 q
class CInventorySort
" [- t" o" _ k! \{! U6 I! H. L( S9 H4 F" ^
public:
* _' C; r% U2 wCInventorySort()
8 w4 g; h& N$ | q; F{
t) b& a6 y" G6 ~5 z m_dwPos = 0;, h+ |6 g! e" k
}
8 v+ D) e' [ u4 X/ v0 s- ~~CInventorySort(){}' S/ b! D9 b O5 H# ?4 V
private:5 A; k5 J) t# S" S# i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. U' Y' o6 ^9 P/ P; D; dDWORD m_dwPos;
" O `6 H+ J+ q4 `public:( l" q% Q/ p/ d, e% Z, P# p
void Add(BYTE nIndex)
], c1 s1 Q: ?' r N' ^3 A{4 M( t5 e. {/ v2 L! w# c( d
if (m_dwPos >= MAX_INVENTORY)
4 v9 A$ s1 T) G4 ^2 K' c* r) x* @. p# p/ r {4 c4 _( H0 @2 Y2 M/ p; f, R
return;
% K$ e2 W9 F! v& c: S8 Q: Z& W7 _ }
2 P' ~+ _" n( q( z5 t m_Item[m_dwPos].nIndex = nIndex;
4 v8 t2 p' J+ Z- M9 ] m_Item[m_dwPos].dwId = m_dwPos;% a# ^4 S& d3 j' y3 k
m_dwPos++;
( z2 W4 b4 ~; w: Y1 M3 K5 _# i}, @' q; C$ g7 {( Q1 t5 c! J5 s# R5 k" {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. y$ Y$ T1 L8 y) V; u, h
{3 C/ _: L) }$ F5 y% H8 O" p
for (int i=0;i<MAX_INVENTORY;i++)8 A5 b) P) }" S* c+ p) e/ W) z6 ?4 w
{
5 c% z; l; q, v6 c9 o A K+ a2 y if (m_Item.dwId == dwId)/ \3 H3 e; o7 U' f: `
{
4 N+ q) _& P4 ?( h7 N/ F return m_Item.nIndex;5 f* v( N. d+ u! J6 e; m* |
}
; u) L7 ?$ b/ N; b0 a, z" @ }$ X6 x% ^/ Z8 p5 g/ I/ e# H% y( j
return 255;
8 P4 Y0 ?3 e7 t5 l}3 z1 N# a6 y o& h, g; V; K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 o6 p) o- s; m: M& `" U{& B# y9 ~) \8 L" x4 }+ A8 ?
BYTE nTmp = 0;
( U& s/ L @9 i- C0 ` bool bDest = false,bSrc = false;
I. ?- v% N. \! J# t for (int i=0;i<MAX_INVENTORY;i++)
8 h$ ~- o. j. j( L3 j {
' R9 c$ R* l' h if (dwSrcId == m_Item.dwId)
+ G h: d- m6 P$ d {. V+ [+ e% P& }6 C8 }1 _
//id相等 则 改变对应的dest和src6 L8 h. M, \8 `' O; z
nTmp = m_Item.nIndex;( {' ]# v; m p# h% ?. |- k8 M# g1 v
m_Item.nIndex = dest;7 c- w) P6 T3 P) {! o$ S' N* d
}
9 R' @1 P( ]. m& z0 K: z }
- A7 I$ Z# S b7 W+ Y //临时数据保存完毕,交换开始
4 h5 d5 {6 ]6 k7 F) v; ]2 C for (int i=0;i<MAX_INVENTORY;i++)( v, A4 J9 ~ ?( A
{9 @, H; O& i0 {( y3 z( p8 h
if (dest == m_Item.nIndex)
3 R& ^- w& M" r5 _ {+ |7 i3 j' k$ \ l
//id相等 则 改变对应的dest和src
/ a3 F8 w# ^! i, Z: t7 J4 m, t m_Item.nIndex = nTmp;
! m; ]0 T7 ~; E# z' ?# n; v }! u9 F4 z8 b/ s& t
}% @* w; `! i3 M* k
}
8 |8 _# o5 T8 k ~# F( K};3 g) l h5 n8 a! {/ t4 Y3 z5 O
-------------------------------------------------------------------------/ N8 N; p/ x: x( T% S- t1 H5 R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 r' O6 K1 u. W2 u# e' X d. H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% q; I2 E: l8 S1 b# I3 N+ m/ G! ?5 C ~紧靠其上添加:9 B+ L! x' v, P- y4 X
if( pWndBase == &m_wndMenu )
! S( O- J; }8 ]& I5 z7 a; M9 a! w0 h{
3 A! x4 i( s- E) p7 k switch( nID )
1 j/ X7 t0 g8 Z @9 Y {
5 W7 G! ~5 q( n0 a. D1 \+ p4 X' `# w+ y case 2:/ } d: L. B, @' W
{
) ]% Z$ J! |- } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( k% d+ S5 l/ \+ {& o( ]3 L
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 R( W+ a, f! g: Q1 o {1 b! H0 } C; R5 B2 E6 L$ ~
break;
" C4 H+ \! }: K7 w% }% s& ?- q, V C8 Z }
; i# w" e# J+ X3 a) j" n for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)/ |/ G: `/ z6 x7 i, L# C
{& v. w) u/ k3 H4 |' l3 ~" D" r2 \4 K% Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' X3 Z6 Z/ |1 x
if( !pItemElem )
$ \: @' W4 P; |+ R2 U" }5 x continue;
$ [- u: y: x! F% ~' [ if(pItemElem->GetExtra() > 0), w/ |. |* D* O ?
continue;( [- n; a: b( Y0 K7 l7 w9 E _
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ! y( e$ V* L: ? t; Z* g
continue;
4 v, Y" `5 D! ^3 S7 s if( g_pPlayer->IsUsing( pItemElem ) )
/ o& {9 N( P9 _ continue;9 i5 P8 b. `: p1 H; d, n
if( pItemElem->IsUndestructable() == TRUE )
I9 D/ S* a4 W% r" i. w3 | {
2 Z+ o/ g* E' Q3 F( I! ]2 x g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& Q u( ?) u# d
continue;' o6 w" g2 y8 x- m7 o3 q2 t
}3 q* T* @5 ^0 m: W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 {1 g9 e7 g! M# C4 X6 v }' C x7 C) A5 n& F. w0 w9 W
break;" S' M# z( {3 Q+ N. \
}8 }1 Y! P/ F( n, t! e! N# V% l6 I/ j
case 1:5 ?, H' F n9 m8 A& n `3 A% x
{6 L/ S) B* x+ N( t# L- Y
//整理背包5 v; U8 w0 p) p8 a- c, V8 e2 ]
//////////////////////////////////////////////////////////////////////////$ W5 l& ^5 k% Y8 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 R5 y# C3 ~4 \: U- w2 L+ Z //////////////////////////////////////////////////////////////////////////& N' n7 X# J- Z
//////////////////////////////////////////////////////////////////////////1 ^; |1 F, C7 Z% k. J' {
CInventorySort* pInvSort = new CInventorySort;
( e7 i4 u( Z# t7 T/ i vector <sItem> vItem;
) h$ f" d0 n* m vItem.resize(MAX_INVENTORY);//初始化大小
; J3 j* ^" b: k7 m/ O4 \ //////////////////////////////////////////////////////////////////////////% L) {4 \% B5 s" ^" A
//填充数据8 n) ~0 [, G+ r [- J/ y t7 [
for (int i=0;i<MAX_INVENTORY;i++)
. F& L% M% y# I9 T$ p( w2 A {, D ]" u: P" t3 s, {
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( I( N& k3 i0 y0 \+ ?4 e' [- J9 _$ s
if (!pItemElem)/ d4 ?5 k9 r O9 Z2 h
{
4 d9 M5 j( U7 o! A: T, p vItem.dwKind2 = 0xffffffff;+ c3 o# B6 u! |6 x, T# C
vItem.dwItemId = 0xffffffff;+ `1 N+ h1 h6 {& K
vItem.nIndex = i;) {" F% y5 a- q/ e
}else {
* a3 x; B3 z% C: {# X ItemProp* pProp = pItemElem->GetProp();
3 i. g2 t* I6 F) x vItem.dwKind2 = pProp->dwItemKind2;
4 a( X+ l$ R( G vItem.dwItemId = pItemElem->m_dwItemId;
7 B$ n4 G3 } x6 F- r vItem.nIndex = i;
$ Y6 B4 q+ |8 e+ g& R }" \* [# Y( s: M. ]; E, c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 c% `; i1 l i( {6 w$ X+ q
}
( O4 K3 z6 `; J5 u [7 R //////////////////////////////////////////////////////////////////////////* y7 F6 d" c) r5 W# T8 _+ ~7 [' d
sort(vItem.begin(),vItem.end());//排序/ }; U" t1 F6 |; E/ Z+ v
//////////////////////////////////////////////////////////////////////////$ q0 ^& U- e6 Q! O# F
//交换2 D* S: M( A9 E6 g
for (size_t i=0;i<vItem.size();i++) D+ D9 w+ U @! R! p
{
# x! w( t% v5 x( Q //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# d& z$ K) y0 _1 E9 h9 t8 c: k
pInvSort->Add(vItem.nIndex);& L/ K* M% u& P) K8 [
}* @( I7 s- @+ P$ Z( l
BYTE nDestPos = 0;/ z$ o0 m( O2 I& C, h$ j
for (int i=0;i<MAX_INVENTORY;i++)
" d( G: Y5 f) U) P9 p2 V {( O6 ~, Z# e: D- J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- A8 C2 Z. J) h. g if (pItemElem)
5 c$ n$ p( W, p$ l {
5 l8 {4 ~/ ?, {0 U' d if (IsUsingItem(pItemElem))
^2 O& W' H9 Z {
$ k- j4 i: e2 `/ _ //这个位置无法放' [( N( z) D) J! Q
nDestPos++;
; S, T4 m* ~4 \ }
- v3 V2 F( _4 f7 h" l6 G0 [# m }
9 O% C/ ?! @, g1 {" |+ \# j BYTE nSrc = pInvSort->GetItemSrc(i);, A: A( @9 B! \2 U4 }
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
M! |0 Y1 Q7 n4 w- b& [$ N1 S if (pItemElem)* r- ]* v% r/ J% o" S; t
{
' p9 o+ t$ r& r7 q if (IsUsingItem(pItemElem))
: B. c% P) y/ H A2 R& A- r {" _& I8 }7 Q' A
//这个道具无法移动,跳过0 {: S5 Q. {! X! ~5 T) e$ S
continue;
5 y2 ^4 Q8 X3 h" k( i5 k }
9 N6 d( {6 n1 U. e( N }else{
' n8 j1 U+ V; Z //空位置 不用动3 _+ X4 } ~: L2 T
continue;
0 v6 k) {/ j9 j. C }* ^1 k/ c; i1 e, q6 _% H ?+ f
//////////////////////////////////////////////////////////////////////////$ j6 V. _4 k9 d6 w
//开始移动/ H1 l/ N5 \$ g5 E1 \1 h% {0 I
if (nSrc == nDestPos); T7 C0 x0 d6 B6 g. j- | \9 Y) P b
{
m+ F3 J/ V* P' u7 n //原地不动. z& K& n6 I) i- l# V. n7 g
nDestPos++;
' p/ Q5 `' j% M9 @ continue;
( m' K# C$ @" t/ w+ d0 h( j% K }
4 N; f; K( K& K, I- a pInvSort->MoveItem(i,nDestPos);
. T1 v/ E0 s' x. N! t% q9 v g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ L) V! T- S- C$ L, L Sleep(5);
+ o* p/ g& e. n //Error("移动 - %d->%d",nSrc,nDestPos);
; A F& d( x. ? nDestPos++;
; w6 v7 q2 x) G8 C( v }
; |; J- v u8 c8 C- n //取第一个元素的信息
5 t2 d i& [# `9 T4 v( T: T1 U /*1 H2 T {/ g J, o& _5 h2 Y7 r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 Q+ e: A' e, r- }9 u7 G
{ w+ x L* \3 D& }+ W% k
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; n: c5 R" S0 y" V$ S$ I
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 O: K) k; x# E; L8 v }8 u9 Z, ^! }; @! l
*/
8 v+ ~7 Q s6 N //////////////////////////////////////////////////////////////////////////4 b S# Y" J7 E5 t8 S0 I8 I
break;9 c# H9 a. v v
}0 z; W4 }& E; z. p3 s. ]
}
$ N7 f) Y4 D3 L# e+ Q}4 R% J' t& Y5 A5 w2 C
m_wndMenu.SetVisible(FALSE);
/ V2 |1 H& [0 ~- K3 I( Z) ^. S- X' @5 O# [
--------------------------------------------------------------------------------------------------------
% m$ h, Y, E/ N7 L* l# t1 N3 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point), R" b- H3 b$ g" r
{
( ^' n& R1 T9 Q0 J* O1 r6 D! yBaseMouseCursor();
" C* q$ H: c$ }( w* i) K2 [}
' C$ s# J2 L* i- Y在其下添加:
r, c d t" ~. U, }% \& Zvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 ~4 G0 s9 Z/ k6 x9 Z
{$ s+ o5 P2 I1 |0 p
m_wndMenu.DeleteAllMenu();
$ J% {0 t' W+ o5 f% Y$ ym_wndMenu.CreateMenu(this);* C6 z. f, h* F( c! |, U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 L( K3 ?* P# I6 C4 F
* B+ h6 K$ M- \, A1 F0 ?if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
t" @ j# T: e; G6 ^{2 t( C4 N& m' |' ~+ i; i
//P以上级别才可以删除所有道具3 X. {& c4 V0 O7 {$ k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; s1 \' k- S; w}$ N: z1 ~ }7 G! N. N. D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); c6 f" R7 x) F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! U$ W3 u5 q* l2 |4 W$ d
m_wndMenu.SetFocus();
/ \* I2 A. B8 G2 C. s2 J* N4 W' l}& s4 D7 T, x2 w0 l) l8 V3 c
------------------------------------------------------------------------------------------------------------6 y; }- _* w0 n' Z) z. a% j9 K" Q3 A
*************************
+ w" w2 c5 ~2 }' ^4 a' b+ T) vWndField.h文件' u. v- u$ x& U- ^9 ?
*************************
& _8 x. e2 x' W0 Z0 I0 W搜索:BOOL m_bReport;" B% k5 F2 E$ q/ j N- l+ n# X
其后添加:
1 p) F/ I- ^* c" E6 `0 jCWndMenu m_wndMenu;" [& M) z5 M& J W- ~
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
z( A0 [' e2 c9 Z$ y其后添加:! p6 v1 T; o6 X! Y) p: e! i
virtual void OnRButtonUp(UINT nFlags, CPoint point);) U9 O l* ?6 u1 e0 @- ]6 g
+ W1 L# z# ]. z" i! d: m4 k
! f" v6 o* {6 R3 v1 P
|
|