|
|
源文件中_Interface文件夹下WndField.cpp文件3 h. F) f }! X2 J# c2 f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 ]9 B* O: p% x. Q7 a
5 A, q# l6 j' S" {) Cstruct sItem3 ?! I: f* {7 p: b3 o
{( p6 ]' H$ t, ^. n) K* L; Q
DWORD dwId;; K- l' X+ K- Y3 x3 z
DWORD dwKind2;
& w( A; v( \/ _" j. M- a% p4 W* fDWORD dwItemId;# n& c: l1 t5 u! j
BYTE nIndex;
- O6 S7 | Y' WsItem(){
. }2 G( i1 c0 I6 s8 Q: l dwId = dwKind2 = dwItemId = nIndex = 0;
. ]2 x3 q( U6 v}# G. y z7 ~6 q$ c4 {: D
bool operator < (const sItem p2); M4 b3 \- L3 B9 G% P1 o+ @: d7 ~
{
. Y+ O, z: Q" _7 y- B7 l3 Z: | if (dwKind2 == p2.dwKind2)
9 s( v4 G" B, H, w! @ {
7 x3 m3 V. _ E2 `5 e; _2 G+ J+ ? return dwItemId < p2.dwItemId;1 x3 z- h, _- S; x6 d+ m
}else{
+ C7 b4 a6 ^9 e& ?: S# R; J return dwKind2 < p2.dwKind2;' {1 V. O5 }' S1 Q, n
}
6 t- I1 H6 A. S3 {}* n, Y W C; B
};
0 H# T; x0 M0 P! p$ Gclass CInventorySort
1 v# N$ v3 a8 H{( U7 U) p7 T# ^9 j
public:
- e( l5 s. H6 GCInventorySort()
" X4 }$ ], [% M- H+ v9 b( m1 I{4 N" |# l3 s6 R
m_dwPos = 0;
' Y1 L: P9 V- ]3 v& z1 X0 [}
, [5 L- G% _9 Q+ D~CInventorySort(){}
+ \. r. c1 K! B0 v- j5 p, yprivate:
; N6 d5 p" ^0 r0 d! s# VsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ M, z" R$ j( s- i6 G Z
DWORD m_dwPos;+ m+ a1 J2 g( V5 M; P t% g
public:
" y8 o. a$ P9 Q, b# ~! cvoid Add(BYTE nIndex)
( U/ y/ G7 v$ q7 V8 R; q8 C{5 y4 s- W7 h' _' J, L% g
if (m_dwPos >= MAX_INVENTORY)
9 f; `# ^& l: l* d2 {2 g& i x {
; G. \$ g8 \+ s return;
2 l5 }9 T2 c. j6 x7 j& J }
5 S# N: f, U: f& L8 u; Y u% q" [ m_Item[m_dwPos].nIndex = nIndex;
7 v$ V! c5 a+ u L m_Item[m_dwPos].dwId = m_dwPos;4 U+ V% h9 ~' _$ T
m_dwPos++;6 b- m0 G+ j& U6 j) k# L
}
- E: ]1 Z- {1 i0 ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 H4 {5 A- W2 }- f0 `/ K `{4 `; b: D6 d; F
for (int i=0;i<MAX_INVENTORY;i++)
1 j5 ~4 _1 i9 U" Q {
, k l* q, K+ _! l( ]7 Z/ x/ { if (m_Item.dwId == dwId)
8 G. ^+ \: X$ c2 Y5 z; l {6 {# e$ l/ H/ J) H2 }
return m_Item.nIndex;( a( S; D4 O# W: J
}* f" N0 @/ u R7 T. L, I
} @# C# J# V# V
return 255;
4 p# ], p9 k3 D0 q* \0 Z/ |7 k}% W) b* ~! d0 w7 w
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置7 g9 U* g1 H/ G' P5 J
{1 Y1 C5 O; j& g! D1 x9 o
BYTE nTmp = 0;+ b$ K+ Z+ F0 H7 O
bool bDest = false,bSrc = false;7 p7 C5 ]- x4 x' F
for (int i=0;i<MAX_INVENTORY;i++)- h, o2 D) _3 g- n# Q6 u7 u
{5 c* t: t: w) b/ m1 B F
if (dwSrcId == m_Item.dwId) _: N+ J/ ?3 ^ O0 Q
{
# Q# k! G) t0 R& J$ T. t2 p //id相等 则 改变对应的dest和src6 h# p1 D ^9 M& c( d
nTmp = m_Item.nIndex;
2 @' L- X$ U" `1 ]9 D/ n3 E m_Item.nIndex = dest; q4 N& ^* c7 M+ y* I3 I
}
( R6 F6 S- w' ~- u0 | }
( o; z2 F. n- E/ ? //临时数据保存完毕,交换开始) G9 D9 r$ E. Y4 l
for (int i=0;i<MAX_INVENTORY;i++)3 y8 W& b' F/ K
{
( Z+ K' ?7 W- o, i5 @7 C* Q, W if (dest == m_Item.nIndex)" i$ z4 f( Q! m' j
{
2 t( d" E/ P+ f& `3 ]. w5 e //id相等 则 改变对应的dest和src
9 }% U; ~& x, N* X m_Item.nIndex = nTmp;
/ k+ |, E, v; s% D }6 f) ?! y2 L0 q4 S q/ p# w
}2 t0 ^& _- O0 _; y+ D
}; ^' f% n2 ^7 c! r/ z) H/ ]0 P2 [
};0 V4 X1 n" S6 b" X
-------------------------------------------------------------------------0 ] e0 O; Z2 C! ] H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. o% ~4 V' E' Z |4 g" G, w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: n. D, _4 Z' @" P
紧靠其上添加:2 c. B: o9 T3 ?- E2 s
if( pWndBase == &m_wndMenu )5 @# L6 r h( C u5 F) X3 K$ S: j
{
! F' l0 \, Y8 d- Q& n9 p switch( nID )' X) @5 @! Q1 \* w$ \- p1 `2 x
{
5 N3 `- t! k3 B; E, r. s case 2:$ z6 r; e8 L/ y. B
{
& ]) ~! z$ A5 \8 S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 d% }* q. f; q) ~* n if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! P- F, _2 R$ ?1 n+ s0 F' Z
{
1 B7 G$ y5 u3 ~/ o1 I break;
' q) B2 n7 l5 } }
/ J- g+ n9 `6 Q+ i9 v% t& d: v8 j& S for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)' D9 d) X1 X. L8 b1 Z
{
8 h1 |: |$ s/ w1 n, p2 `4 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 }# O5 |" E+ f, `- C$ R5 `4 E if( !pItemElem ) U2 U4 k3 ]3 H' g: K
continue;% u9 R9 [9 ^5 [! a5 o8 O- E5 {, ^( O8 `: @
if(pItemElem->GetExtra() > 0)
/ r6 U4 ^+ r; P- a5 V continue;+ |! a/ K6 e9 P( t( a) m9 A+ X. l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 5 V" M- n' L$ j S4 d$ ^; J8 S
continue;, V I5 U( ]6 r+ w% C
if( g_pPlayer->IsUsing( pItemElem ) )
' n0 P& w7 V3 v- N) f5 |0 F3 D continue;
8 v! Q$ j I; E# z& X if( pItemElem->IsUndestructable() == TRUE )9 n- S# V! }, ~8 ?$ L8 Q
{# k4 Y+ ~( ~9 t4 h0 Z
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ s; n4 e% X8 B5 h$ Z6 ?/ o B continue;
; p8 |6 C4 d8 e6 ^% l5 W7 j' a& R0 p }* @: [) D. ]7 v a' w- c7 q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) C' g( D- b; }: x) n5 q& b
}% Q! r+ h7 p: j+ U
break;8 Z. y2 a+ M7 p8 h: h
}
2 p3 ], G) O# B- k) G: x; W7 ^ M case 1:
) k! s2 Z' d% \7 @3 t/ ]) | {( P: x3 C$ W% F! J
//整理背包: C$ f: Z }: n# B2 o4 [4 Q, d7 k
//////////////////////////////////////////////////////////////////////////1 P) u+ G* d3 `7 g) X' N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ R' S( f, N8 P$ F# x/ K7 K1 Y //////////////////////////////////////////////////////////////////////////
. j" v6 s" q* |! t% N4 W //////////////////////////////////////////////////////////////////////////% S3 Z. W% c& L! \, ]# M; O% }
CInventorySort* pInvSort = new CInventorySort;: b5 b* N0 M4 ~7 ^. W
vector <sItem> vItem;
0 ]2 y6 r; _( l/ W! N3 O0 R' e vItem.resize(MAX_INVENTORY);//初始化大小+ D: O. u) P$ l$ p1 w" _( r2 n
//////////////////////////////////////////////////////////////////////////% V$ `; \0 Z X H( I, y
//填充数据
" s& z( I2 o7 l+ w, ]" f) ^( O for (int i=0;i<MAX_INVENTORY;i++)
7 \4 i0 V9 Y* ~ {4 ?# ^+ U( a2 x) V: K% P! g3 }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. C" N$ i x7 k3 M+ A5 Y5 ]
if (!pItemElem)
1 @& l0 j- x! T$ ] {6 j1 d0 T- j* j$ Y- ^* p8 m
vItem.dwKind2 = 0xffffffff;
8 ?# S) b6 k4 N2 U' _ vItem.dwItemId = 0xffffffff;/ @. ?% V- b) t H, \1 ?
vItem.nIndex = i;
6 w& y7 t- k/ U w$ H* \% K }else {% X8 Y* V D# U/ w3 A
ItemProp* pProp = pItemElem->GetProp();9 e2 [! w% I* H$ b. Q/ R, |
vItem.dwKind2 = pProp->dwItemKind2;
- _$ J. O0 {' U vItem.dwItemId = pItemElem->m_dwItemId;
! l4 x3 {. F R5 E: F vItem.nIndex = i;
% h7 G' f: A# C2 y* w4 Q) n- ~ }
3 p0 i9 |; q" }1 e' ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 V- W, f' F" n- x% U% j5 G }& f+ O, n1 {/ f: b+ ?1 H/ G
//////////////////////////////////////////////////////////////////////////, s& W+ t1 Q- [. Z7 r# A, H
sort(vItem.begin(),vItem.end());//排序
! d- B. w# \% H b+ [4 W //////////////////////////////////////////////////////////////////////////
' ^* A% _/ I. I/ [% v9 E //交换
6 F( v1 N- @! U i' r( T# k for (size_t i=0;i<vItem.size();i++)
* O5 L& j3 V7 e3 f4 M. Q( j {
* t6 \+ f# x: K% H7 y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! U/ L- |4 b7 }: E. _ pInvSort->Add(vItem.nIndex);
8 p( A0 d, y3 p" J }- `1 Q, O: c: l( j# {; P
BYTE nDestPos = 0;
. H) f" t0 I% e2 F$ R3 L for (int i=0;i<MAX_INVENTORY;i++)
1 y, Q+ j7 h& A, u, d {
' \4 J9 k F4 ?. B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% X3 P( s2 V/ A0 ^ if (pItemElem)
: }/ K" Y" |& S% z, [9 s7 f { Y; v0 a; m ?6 K- n# A
if (IsUsingItem(pItemElem))
9 Z8 g+ ]+ ]. U4 J+ q5 R {
1 z; N" M+ F- n& y/ G1 m4 z //这个位置无法放! ?7 } |1 F z% P6 ~% Q
nDestPos++;6 F9 v% z: H0 q. ?# s
}
, |5 A, w7 X1 q. K1 j! } }
9 J1 R$ x6 n# O2 i2 o BYTE nSrc = pInvSort->GetItemSrc(i);
L% j( C2 D: |. A# t" R pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 @5 U8 P! \+ x* o' Y* D if (pItemElem)& \1 v+ ?; e" U( s. W$ K! @. b4 Y7 n
{
7 O' ^% f- R: \! F if (IsUsingItem(pItemElem))8 ]! [4 w4 o: W; l
{
, o" _$ v- @. c% H //这个道具无法移动,跳过
. f. e& g7 x! ] m' D4 I4 y' K continue;
% _3 v6 h/ H1 G$ m }3 W0 I6 } x% [6 n7 Y
}else{) Z/ a2 m5 A0 r: g3 O9 o
//空位置 不用动 l ?$ q9 i& y5 G4 q' f
continue;
) J4 z" `7 E2 m9 D" ]: a0 u* ]) w: U3 P }7 ?; H0 N4 Y% v6 W
//////////////////////////////////////////////////////////////////////////. r- v4 I8 ], V! t% ^& o1 ^
//开始移动
+ f) k$ A* {. e if (nSrc == nDestPos)
3 ^: S/ b; \6 j( y {
; @0 R! ?2 H/ C' v! l //原地不动
/ ]* V# O$ V9 m/ q$ W8 v: Z nDestPos++;& ^6 j% _: y0 P# g5 \2 R" G( \8 U
continue;: C* y# x( W) W$ k: {$ d" I. w! l4 v
}
; m: W* x! f* a! z4 A+ a( J pInvSort->MoveItem(i,nDestPos);
* V7 S3 E5 R/ g5 j9 A1 l g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. Q" g) [- @9 X, I" a Sleep(5);0 g4 U0 I8 o2 ~: ]/ U
//Error("移动 - %d->%d",nSrc,nDestPos);
& N3 |/ @$ h- L$ a5 j nDestPos++;
7 {. j4 r0 A% w( r8 l }
k& B3 o- Q7 @% z+ l* V$ E //取第一个元素的信息
" I E! |9 Q, d! T. i s /*1 I. p9 G& M& l0 Q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 \) e7 X% G2 W% q! _7 C {0 m% `2 K! v4 P" K
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ Q0 L, x. B: D: v8 f. N) w
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 A% s/ q4 ?1 ]' i! l3 V }) {) f& P @7 e9 j: N1 A k6 j
*/6 D" V' Z5 r" A) x
//////////////////////////////////////////////////////////////////////////0 C2 G& U: t7 \
break;8 I$ j1 f: L' B5 I" c4 n) a) T
}
: G" T. o5 P( x6 r3 `) N1 ~ } 1 b6 v/ J) D4 b% f$ c9 T' W5 {% _
}
1 [$ c" j6 Y6 E2 C3 ?5 ~0 P, Tm_wndMenu.SetVisible(FALSE);
$ j" l* h6 p( D/ w8 ?3 U
! l5 V( y# _; _8 q6 h* O--------------------------------------------------------------------------------------------------------
; W9 k3 U) @8 E7 X$ L' h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& \8 i% D: m+ Q5 Y/ n
{# B1 q T r" Y: n+ S+ i# h! o
BaseMouseCursor();! \3 i2 [2 R( ?; k4 g
}) c+ [9 U% y# F# ~3 `% i
在其下添加:$ A! M7 Q; G1 d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! @1 w, i4 r, D9 a
{$ J( _6 k; |4 I2 B6 r! C4 w
m_wndMenu.DeleteAllMenu();$ x$ M* O4 ]6 d& [$ q; |
m_wndMenu.CreateMenu(this);
+ J5 {+ i, Y( j+ @) em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 Q ?2 F, v/ m/ S9 L
- W$ W1 w- s& m- [1 J, [$ _9 U
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). b. S. o8 U n6 v
{8 T% S9 }6 k1 D, i9 ]8 K. B4 _
//P以上级别才可以删除所有道具
( a& p' N6 D" @ r' _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 b- I7 A! x% h) A. d4 w+ I
}5 _ L/ y: r7 i/ I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );- o* G- s5 t8 t% i4 W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* i* {/ G* z, am_wndMenu.SetFocus();
4 ]) V& e" q. m3 I; l0 e}
0 x. N: ]4 N8 w' ?2 q6 F------------------------------------------------------------------------------------------------------------
7 [+ q5 ~/ G7 x6 j; q*************************. b. s; _1 z# O/ v8 S
WndField.h文件) ^. u* }& R j# @: `
*************************' ^6 o- G' ?* ^6 p/ u
搜索:BOOL m_bReport;& P7 M7 Z5 ~0 Q4 ]: t) }0 `/ W
其后添加:
, M7 M+ |, A6 I* Z: FCWndMenu m_wndMenu;" p+ r! F( {+ h) [* T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ l x& X+ m2 |1 K) l/ t其后添加:
5 s- E& x: A2 lvirtual void OnRButtonUp(UINT nFlags, CPoint point);( h) _! o A: {/ Y" j
! C' K9 U( v. d3 i# [
& T! T) }- ~" Z2 {
|
|