|
|
源文件中_Interface文件夹下WndField.cpp文件
( ~' O! }; z5 a& u1 P, d' W2 v$ i搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 ?; q' R" L2 c0 F
0 A, r# e- i9 q' u7 i; rstruct sItem9 [8 }" ]1 J/ X4 k: y
{
7 D. Q' ^+ I( F- U7 i( DDWORD dwId;
$ K3 y# u1 C. x: C' KDWORD dwKind2;
9 E( }: P2 I: D# j1 v0 C/ wDWORD dwItemId;
% s- X% W' L3 G5 V# t4 C, U" r, @- ~BYTE nIndex;
3 L% `0 K8 `3 LsItem(){
, G* P. V( A) ~8 O3 O dwId = dwKind2 = dwItemId = nIndex = 0;" H5 ^; L8 H8 w4 I, K
}+ a1 p$ I' c+ ]5 I
bool operator < (const sItem p2)4 e& f- r9 X& B3 t
{
) q" V/ }: t! b, \6 x+ c if (dwKind2 == p2.dwKind2)
/ _" z4 j& U: R {$ [) q( D% h R
return dwItemId < p2.dwItemId;
# V( ~$ p" K" m/ q }else{9 Q; U/ P$ e7 c
return dwKind2 < p2.dwKind2;; c! h Q% w! q3 C1 Z! _8 \
}% E0 C- ~8 l+ g V! a' I: h
}
9 f$ S7 f3 d3 }% p8 P};3 y) i3 C( A! V# P% V' `
class CInventorySort, _7 a6 }0 Y2 n
{
2 X, W" j) t9 j& cpublic:% ?9 T" C3 S* z
CInventorySort(): ]* A3 V1 {) {2 f# Q a+ y
{# t5 \/ F; R9 n4 k* X+ u' p& M9 g
m_dwPos = 0;
3 R! P6 x: \0 Y+ u7 p}
8 r% m# r' }0 b2 [; f9 r~CInventorySort(){}1 ~2 V( k( O. W9 ^
private:" M$ O. D. }6 |! ?2 M' l: C
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 e! H4 q: m" g
DWORD m_dwPos;2 B- Y1 O$ A/ Z6 x: ~$ G8 c' a. y5 m
public:
5 z; |3 @3 ~' m/ Rvoid Add(BYTE nIndex)
# T; y$ a: w- I7 M5 g7 [' n{) M- O( L. q1 f1 r0 o2 A+ U
if (m_dwPos >= MAX_INVENTORY)* r6 @ U1 B/ J" K- z, w" a5 V
{/ O) d* ^1 u( a' S! g
return;- w. K5 b3 T( b
}7 o, L0 h8 o7 a0 m+ f3 f0 G
m_Item[m_dwPos].nIndex = nIndex;
# u4 W# O8 O: y0 a5 I m_Item[m_dwPos].dwId = m_dwPos;
" b$ v. ~0 X1 k m_dwPos++;+ j P) ^* ^2 N
}
0 t7 ]1 g1 H5 C# p* sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列+ Z7 |" _9 v& ?: l5 H
{
8 `1 g- u0 O0 \9 r$ J for (int i=0;i<MAX_INVENTORY;i++)
( P3 @# w5 G' y& f% k9 ?5 F {
/ n3 m3 m- C( ?8 G! s$ \ if (m_Item.dwId == dwId)
. Z0 \" S/ Z- H {
$ `: r0 C- X+ Z% Z0 O, c) ?6 D# D return m_Item.nIndex;
: ?2 |, d. ?) {/ q# M" c* d }( p6 y3 S( }, L0 e3 z
}% O* P% Y/ m1 r
return 255;
0 z, Q D {: P# V}
, Q. w4 O( c3 i% H4 t0 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! q0 f0 K. A& U0 B4 [- \( a2 Y
{
6 j o4 \0 T9 w) z2 {5 ?6 o BYTE nTmp = 0;9 E( a' b j3 |6 p! N* \/ b2 R* p: B
bool bDest = false,bSrc = false;4 U9 T( l$ `# ]; i0 C: L
for (int i=0;i<MAX_INVENTORY;i++)5 x/ Z2 e+ }9 @4 D: ]' G/ {
{: Q4 s5 [; t+ m' j X6 n
if (dwSrcId == m_Item.dwId)$ R5 f- m$ c3 B4 }( |7 g! |
{
7 ^7 M% Q% y, c0 J //id相等 则 改变对应的dest和src
: D+ u- i! J8 m, J( {* Y) R nTmp = m_Item.nIndex;
& B' c, I" k( N0 e! }# y* k5 |* o m_Item.nIndex = dest;% ]# _* Z0 }/ m1 z
}" y$ j# w) U6 V. K
}+ V* S H# U+ _1 {( V8 h- y
//临时数据保存完毕,交换开始
; B7 p5 d4 Q+ x& Y9 f7 M for (int i=0;i<MAX_INVENTORY;i++)
/ q1 {" Z' H; M4 Q, F {- N* G9 J( A; \* Q* e1 Z' j6 x
if (dest == m_Item.nIndex)
& W+ d0 j: t$ \/ s {1 P; z2 k+ @" ~& C
//id相等 则 改变对应的dest和src
" h/ }9 {2 ?! m0 t m_Item.nIndex = nTmp;1 X6 U% _9 Y0 \4 l9 a
}3 \$ K; B& A) R
}
0 n& R8 w4 Y2 J}
2 k; H! X, T( x( s9 v8 q# v( s};* A% w0 t7 o, p" K# r
-------------------------------------------------------------------------
; J: _0 f0 ^3 [) A. y6 y& a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), R3 {+ m& q: y
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: Y2 c. k# V' _
紧靠其上添加:
" ]9 Y5 s# T4 g3 tif( pWndBase == &m_wndMenu )' B d, ~% J( b9 k& n9 L; S! D
{5 E' L% ?# Q2 o( V3 X0 q% M
switch( nID )7 d4 ]1 n$ X/ U5 `, @
{" N; G+ O5 U0 R$ Q
case 2:
. Y: p" Z4 u) D7 d6 j {
) V3 {; U( M* H- j) S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% t+ f6 z' r; k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; }, E* `$ x% t4 J {9 t2 Y% ?3 P3 ?! f
break;
& X, y T |, i4 L: i }
8 Z# U4 w% }; j8 Y1 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! O0 a+ U7 m6 W6 V
{7 y4 y0 Y0 W, u7 Z+ i% g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ ^* }5 u( r) J6 @& r, Z if( !pItemElem )( f& l% j8 E+ }& u# j: j
continue;# P8 R2 l( h! E/ r8 T+ @) {0 S" W
if(pItemElem->GetExtra() > 0)7 }" O, t) D4 Q8 H, Y8 X* l
continue;, Q; s, I5 R- t8 k+ S2 ?1 ^! w* ?4 U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) # f% f& p' Z, C4 i
continue;" ^3 P) c$ c2 A2 k1 \
if( g_pPlayer->IsUsing( pItemElem ) )6 C- t+ k$ b7 N* G# h3 A
continue;
) h. K% A" [- m! A if( pItemElem->IsUndestructable() == TRUE )
1 I! u; W o: C7 e5 j$ s1 H; D {
7 o$ p! X9 }3 r: }% j$ S+ e3 Q g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; D/ `* E) v! q+ W% D+ X$ v
continue;
# ]; T% Y0 ?5 v# ^! \ @ }
, d1 n- d& e+ j# a" ~; O& g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( z: t% {3 Y3 b0 N# H
}: b* P0 O' U- z: |5 D0 o) N; p
break;; w7 c. C9 v/ _1 Y" L! D0 f
}( G/ _+ X* `' j$ u
case 1:
$ W" M( d& w' N8 w4 d& q3 l {, `# c l8 u' }) D* l) Z
//整理背包% u4 g2 @* k# q( x$ j& i9 q
//////////////////////////////////////////////////////////////////////////$ I: E$ O0 X' a& F7 m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 s2 R' a% G h- w! G+ J# }' d //////////////////////////////////////////////////////////////////////////9 ]2 g, L7 Q: f. I5 {" Z" b3 c
//////////////////////////////////////////////////////////////////////////
/ H6 Y" i2 G1 F# `% M5 ^: M8 k CInventorySort* pInvSort = new CInventorySort;
' `9 ]6 D/ e: K7 @. K, h; g9 W! S4 M vector <sItem> vItem;# }, c& o% Q# D, w& O# n9 u W
vItem.resize(MAX_INVENTORY);//初始化大小! p4 f# q1 ?# _- n) z$ A
//////////////////////////////////////////////////////////////////////////
: a6 g3 k( p2 y" R* @ a, L3 P) Z //填充数据) `" T% e8 Z7 r) n+ y2 S8 b
for (int i=0;i<MAX_INVENTORY;i++)! ~9 V# h9 \3 Q5 ~, I
{
2 r" s, }6 g) S8 W# j* z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 J" t" M' F5 G. |( K. m4 a
if (!pItemElem)
* d# r- H* B) ^! {( G8 {7 Z {
0 k) J: G h2 z/ k; l. Q3 y vItem.dwKind2 = 0xffffffff;
) _9 ~- r& Z( E! h2 v vItem.dwItemId = 0xffffffff;. z% {- b- E9 I/ @# `5 s2 U
vItem.nIndex = i;
/ ~, \; t! D$ y8 e/ d }else {
% z/ d$ ^3 w/ |" `# U: \ ItemProp* pProp = pItemElem->GetProp();
. H6 r9 o5 n; k. o( ? vItem.dwKind2 = pProp->dwItemKind2;8 L( s; K& z& m% C( e5 q6 }8 n
vItem.dwItemId = pItemElem->m_dwItemId;$ e6 c! f6 S: |5 X" p, r8 v, h
vItem.nIndex = i;
o. E4 m, Y, K5 _' s1 A9 T }
+ ~5 `7 U* {/ ^! i1 x) J" y8 N% ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* G, [6 |, I( E0 i0 i' H }
6 T& Z- K+ _- l //////////////////////////////////////////////////////////////////////////% n9 A G/ ?5 h# a. L( E
sort(vItem.begin(),vItem.end());//排序
$ q: R# P% S4 a t+ E8 ? //////////////////////////////////////////////////////////////////////////
" I' k9 Y: v) I3 |' I //交换' K* |% v5 F3 n/ a' I0 V
for (size_t i=0;i<vItem.size();i++)
# ], l% y: x/ O/ @& F' \7 L. Q7 B {
6 J* q% ]5 S: Z) }# }5 T5 I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& E5 o! m8 r0 N0 O, I8 j pInvSort->Add(vItem.nIndex);! @0 G: X# M+ \# l, _
}. j0 M0 {# {& c8 n' A
BYTE nDestPos = 0;7 M( e1 E' ^3 @7 p/ V: R
for (int i=0;i<MAX_INVENTORY;i++)/ F3 v. V+ D9 }9 {* v2 J6 k- O
{
( I7 |- |! L8 A+ Q: I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- v( \3 P, D6 v' l/ F i if (pItemElem)
8 M0 L% s5 j6 L: p M {! F+ x9 j, |# {! g- T P# i; H0 U# K: N
if (IsUsingItem(pItemElem))
) H- E" T! m7 j( d2 r {. R c. l& }/ @
//这个位置无法放
$ b) z% O# C; a0 @. I3 i/ g2 E nDestPos++;
6 v6 S, u' }& G8 j- f4 u }
: u0 _+ s/ ~/ b9 }& k. o }4 L9 Y: c4 _; s
BYTE nSrc = pInvSort->GetItemSrc(i);
4 z' H8 }3 q4 e- L9 z9 o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( ?: L2 U* {8 T" K* j if (pItemElem); R( T" {$ ~, M9 I$ X
{
6 C. P' | n, m( }* e& _7 ? if (IsUsingItem(pItemElem))
; q/ s+ ^8 G4 B( }9 s% o5 Q+ f {
3 e9 \. A2 W2 }% ~. U //这个道具无法移动,跳过
+ X8 p5 w. q. A* y6 T3 [ continue;) d- Y/ ^+ j( i7 d2 L6 o5 @7 g1 a/ U
} f* o/ v3 `% N6 W
}else{
( ]7 ~, u) }# ?6 k5 |, A- P- G2 Y6 D //空位置 不用动
; `0 o) v; |, @; g m' V continue;
! O- v0 O: \1 R5 `: e }: g. Q0 E9 K% O2 m, M: h) R
//////////////////////////////////////////////////////////////////////////
9 P b' R* a; I& W4 L //开始移动
; ]8 z$ x9 ?0 p# k$ W" C1 [4 x) z _* g if (nSrc == nDestPos)
5 _: j2 Y2 X# Y/ l' Y% D* [5 w {
& i! \4 h; F F4 B //原地不动1 E- n& d/ D* i; \3 u
nDestPos++;$ {, B& p' V% _+ B
continue;
5 p' w: t8 E5 } }+ S. C. N1 ?8 j0 B" ~4 B
pInvSort->MoveItem(i,nDestPos);
$ a6 l$ l0 r' P7 I3 \1 ~( p. {! B9 c g_DPlay.SendMoveItem(0,nSrc,nDestPos);- m; G# a7 J0 d, \) s- Z
Sleep(5);7 o5 `( D6 D; ]: e. I6 Q8 Y
//Error("移动 - %d->%d",nSrc,nDestPos);
: j/ N: s1 d, r. k8 d nDestPos++;3 ?' i+ j- q- r/ c8 L( u
}
& v& T9 [8 [3 K: j) s$ X ?7 [/ \ //取第一个元素的信息" U/ _. @# n [' _' `; y
/*2 }7 K2 P+ g! T/ ` {$ f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 M2 s7 m: M3 q3 G {0 j" \4 _! v5 N3 u) i' ^
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. r( j `$ Y) T d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 H, r( L* E% w }
8 X7 x" C, p$ k */9 n6 n; i" F1 G) c$ ^% {/ _4 r$ ]
//////////////////////////////////////////////////////////////////////////
. [4 M. g/ { v) }4 t0 l; W break;! L5 O( b9 ^$ c! t# p, ^
}. i" O* R1 o: U
} % s ]9 K0 V5 H4 j: H' E
}0 S; i5 q% N* I# [( W1 G4 i
m_wndMenu.SetVisible(FALSE);, [# b; ? q6 F- ]" Q
: ]2 X/ z7 a, w" @; W7 V
--------------------------------------------------------------------------------------------------------. b# l( q# b. H5 w+ d
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 O$ \* t/ S. k3 Z1 O{3 m( o: M p" n- h" d/ n
BaseMouseCursor();( l0 M0 n2 K! y; `
}+ G1 L: F/ Y7 E4 o2 n& \* L
在其下添加:
! b! h' u. Z+ a0 y2 V' I8 ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 u/ n" n) n: n1 ~$ l0 T7 I% X{+ c% J) n5 E Q0 s' P$ a5 g! f9 C4 e# B3 H
m_wndMenu.DeleteAllMenu();, C. g8 y& x8 d
m_wndMenu.CreateMenu(this);6 ]; E, t8 Z2 z+ S: S/ P
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 N2 I/ f/ J: Q. f; A1 g
A9 h b% d- T( e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 D0 L {1 R' w: A
{
6 T+ | S& k) T' e4 @ //P以上级别才可以删除所有道具
5 `% ?% `# I5 D ~5 X m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 z; F0 n+ r5 w}* F5 S$ \' f6 A' U4 k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 z' [8 ?" M* P* `) N
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& V! Z% ^" r9 ~+ h0 F* m5 ]m_wndMenu.SetFocus();
" T4 ~: p& k1 b- A}
* ^* o6 h0 c# B7 J9 w$ i& d- R------------------------------------------------------------------------------------------------------------$ t; _3 i# a# d. K0 n, D, v4 v% o
*************************8 | O& S& l- p: B
WndField.h文件( O8 Z0 D- j2 d5 o) H0 F, K
*************************# `' p+ s9 ^9 G# C, B- x3 E) F
搜索:BOOL m_bReport;
1 g7 ^/ @# M% R3 E4 n- Q其后添加:
! Z) i* P! c$ P! W6 l5 h% iCWndMenu m_wndMenu;- W% U9 B7 u( ~- i% I9 V$ o
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, U0 K4 q6 d3 ~. ^/ P$ f8 B
其后添加:+ z; }2 a, G9 c! g5 v5 ~* _
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 ?, L7 d; k k2 P9 S
( A4 `' ?& {9 w! h9 F1 u
2 ~$ F8 M8 i# h3 y |
|