|
|
源文件中_Interface文件夹下WndField.cpp文件
! r. Z) q9 {) D9 l) o9 G# J Y4 f搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( s& X* ^' N3 u3 J
/ l, J9 b' U, H1 d/ j: [* h' I0 o
struct sItem
: \5 _ k$ G1 j8 R+ p{
) m. Z# a q' u: n3 h, LDWORD dwId;
% Q H. T8 v/ A( i SDWORD dwKind2;/ e# C' a- a2 m: F* g. M2 G
DWORD dwItemId;
3 b* K1 l( ]7 w% ~2 V* cBYTE nIndex;
2 r) C" p, j! n& hsItem(){
# Q) ]1 e& F3 p dwId = dwKind2 = dwItemId = nIndex = 0;
9 s/ Q, v" `0 h: l' R}
! e) Z+ Q$ u$ \3 A) S$ Y: m% Dbool operator < (const sItem p2)/ ^4 C, t) n$ a1 C$ y) J M
{/ e0 |/ l& ]) z; [5 e
if (dwKind2 == p2.dwKind2)' z+ d( Q* f% a' e1 H" c
{ ^* l# y, p8 Z
return dwItemId < p2.dwItemId;( N2 F8 Z' [) l, l6 u4 Y/ {
}else{
) Z$ M5 z7 |" Q; k5 i9 A4 `# _ return dwKind2 < p2.dwKind2;% i1 N0 n, d6 U4 W
}0 A7 X8 ]& T9 ?9 ^% q$ Y
}
+ H3 i/ I) Z- A0 ?};
( N3 N9 f4 F, hclass CInventorySort$ u! V' a/ Y# }# K9 n. Y0 t
{9 u X0 _0 T( Z j6 c0 B
public:) C4 i& h6 {6 v
CInventorySort()
3 g D9 S; |2 x{
, N9 i( u Y$ g8 J2 Q9 s0 ? m_dwPos = 0;! a8 y6 J0 Q8 Y9 j6 u. I, O
}
% t) \9 H* A& s~CInventorySort(){}
5 V9 _! p1 I: F$ kprivate:
/ G% u3 A6 X, q' q* y5 QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) W- o2 X1 V: h9 a2 f
DWORD m_dwPos;
3 |; U( j2 B0 i% W ppublic:' L3 m/ J& R7 X
void Add(BYTE nIndex)
# F& [: A% G1 [% C{
9 d1 }& u7 Z) ^% x, ^1 e if (m_dwPos >= MAX_INVENTORY)
0 I ~& Z& G* r c) I% a {( i. g7 J. r+ E9 `# \+ E
return;
! B0 e% U5 n" X7 A+ {1 V# S/ A* S S }
0 D" B! u7 m; e, Z f m_Item[m_dwPos].nIndex = nIndex;$ j* V" f' _! K7 }& k
m_Item[m_dwPos].dwId = m_dwPos;
+ t2 h: ?% O! E- S- ?0 d m_dwPos++;: _! W! T1 W( p2 r0 ], \
}
# D% b2 O! ]0 W% f3 g$ MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
3 n$ d& W) u7 m- n& h{1 }$ m0 b0 t) {3 T$ O8 O
for (int i=0;i<MAX_INVENTORY;i++)3 Z1 s7 x O! g( a' W; P% k5 _9 s
{; X0 T# s: i Y! c
if (m_Item.dwId == dwId)
' Q' ?! C0 x b: G2 z* o. x% J {3 n# R7 v4 `! g$ v& o. [4 o
return m_Item.nIndex;0 a+ [* P. R r2 y1 @
}/ x8 V+ r& T) i3 T$ F( k8 ?: C6 b
}. E; [7 t4 ~3 _0 s: E9 h
return 255;
8 f3 c: B$ | h3 J% _}1 V6 t+ e+ L: c0 ]" t+ n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 {, F0 Z% h5 X8 x/ J! N7 i: D- @{8 D+ n0 b+ L# J9 u, m; H
BYTE nTmp = 0;6 c7 W# ] i9 h4 D
bool bDest = false,bSrc = false;
9 ]" M. }4 D' S, q0 v% D for (int i=0;i<MAX_INVENTORY;i++)+ V* g* i% D, m1 Z; ?
{
* Q* g' v! u% y0 \1 g) h4 @- `8 Q! I/ a if (dwSrcId == m_Item.dwId)! L. P6 C" Z2 q$ w
{. l& W* O3 e" E6 c) H
//id相等 则 改变对应的dest和src
8 H3 N4 K- B# N: j% O" a# A7 z8 s nTmp = m_Item.nIndex;( }9 m! L1 z1 n: M* Y
m_Item.nIndex = dest;
; Z8 T2 \( m% M3 Q1 L2 {# H7 Q }4 r- d5 S5 p' s# Y3 G
}# N! M& N8 x% A( ?- I3 G
//临时数据保存完毕,交换开始, S x8 @7 L4 }: C/ O& b
for (int i=0;i<MAX_INVENTORY;i++)
( |+ j" { i; E) r/ A- B' E6 t8 z2 @ {
) t1 V4 e3 r4 \$ W3 \- _( X$ @' [% M if (dest == m_Item.nIndex)
5 Q3 W4 x7 m- _# J8 O, Q {. e) g: t- F4 I$ j! ?/ X2 u2 W
//id相等 则 改变对应的dest和src+ I# ^( l6 D5 o" t2 I4 z
m_Item.nIndex = nTmp;
; Y6 Q9 R8 _% J; J/ Y( N3 o1 ? }
& r/ N0 R* a( A( D, F1 z }
1 f: A' L I7 T9 @+ M}% y6 m( f0 Z! ` z
};
1 ~- c/ M, s4 T-------------------------------------------------------------------------. m6 e" f) x" B0 P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 T% f/ b9 ]" a* g- M8 J搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
8 `% B; Q; h$ ?" O x0 F紧靠其上添加:3 Z/ w0 [: J+ S
if( pWndBase == &m_wndMenu )% Z: x3 N6 t2 g- y
{
( e! p) G R0 ]6 M$ M( n6 I switch( nID )
) q( o6 G' v/ M% V; y {! ~4 U1 ?6 E2 y, e4 K% w
case 2:
5 y E4 ?2 F6 g" S5 w {
0 G, c6 X. [% {2 M) z# } //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. R- z/ S' K# V2 c8 b0 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 W7 Q* R) b9 A" H
{
7 ], q3 n& G5 ^1 ?5 x- H break;+ k; w( }6 j! A
}
2 X. [# m) C$ ]$ J& z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
; V" Z) A% \3 F- k) u9 `" L { P/ P9 z2 C* I' _; w$ H: o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 u7 ]+ v& s$ x if( !pItemElem ). k5 h- R# O7 W8 d+ G9 j- O1 i! r
continue;
9 v8 n; @$ l) ]+ b& m' j# Y* t7 B if(pItemElem->GetExtra() > 0)
$ n5 b/ \( E1 n( @: u+ A) c( k: H0 G continue;6 G2 z3 [! H& v8 f4 v
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * O& _! G+ s3 g* _
continue;
) f4 N* R6 |/ b! C9 v" Z if( g_pPlayer->IsUsing( pItemElem ) )
- k0 G+ P5 j$ n9 T; D, K% H continue;0 p, R; N9 f+ k* [
if( pItemElem->IsUndestructable() == TRUE )
1 \, V' z& H) B8 o0 [2 ~, j1 ]$ F { Z' Y0 w( \7 u; U
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) {3 N; D) D6 t
continue;8 M. Z+ O# a8 x
}
& J& X L" {+ T8 ~. _7 | g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 F) Y& ]; w* P( d, i
}: @3 I! O( a5 I& H8 u0 y
break;
' i( D' i$ l! f3 h2 I) { }0 a/ Q9 A3 p* e- _4 }( x
case 1:
- U+ o7 F; s7 y- E# e m {* g, k4 z3 i0 b* s% ?( n. M
//整理背包. k8 s4 o, X( ?: g. D. ~* d
//////////////////////////////////////////////////////////////////////////
" [5 `! p8 u( W ?$ u3 P6 `$ N+ c //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );% F; L* ^: x. l
//////////////////////////////////////////////////////////////////////////
" r& w n* Z& J; | //////////////////////////////////////////////////////////////////////////
! v; T/ R) U3 W/ F* y. M! W CInventorySort* pInvSort = new CInventorySort;+ ~$ e! b3 \ e5 l! M- r' T
vector <sItem> vItem;
1 ?" n) D# s! ~8 s vItem.resize(MAX_INVENTORY);//初始化大小
$ H; P7 u' l1 F5 \- W //////////////////////////////////////////////////////////////////////////6 \, A3 |% B; g
//填充数据! q4 `2 D( A; H& j
for (int i=0;i<MAX_INVENTORY;i++)* q, k( j; Z3 m
{
( A9 d% H$ w! k+ g# N8 Z' h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 F+ s* q* y, |" { F
if (!pItemElem)! p* Y: X3 I; @ s8 J% ]+ `
{ d" A/ ~+ n* n
vItem.dwKind2 = 0xffffffff;5 e" q; Q6 r" y% L
vItem.dwItemId = 0xffffffff;1 m0 w7 ~- Q- M+ o- P
vItem.nIndex = i;
, c' p/ L H7 }, V' S }else {: H( h! ]! r" x0 n4 m
ItemProp* pProp = pItemElem->GetProp();
4 |6 A# r% _& i vItem.dwKind2 = pProp->dwItemKind2;
! r4 i- a: C5 h' q0 P/ x vItem.dwItemId = pItemElem->m_dwItemId;+ z! H. X }5 J
vItem.nIndex = i;
' { j" `9 t/ e, {9 y }0 o" f/ _6 Y7 U& p& s
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 ~. J6 g7 T9 f1 ^# D& m9 Y @
}( g, v; Z5 L7 u% g) I* i N+ A$ Z: a
//////////////////////////////////////////////////////////////////////////! T! a: N, h- m* [; R, T
sort(vItem.begin(),vItem.end());//排序
0 ~2 g) S$ z) q! a4 s2 n5 M) M //////////////////////////////////////////////////////////////////////////* z! t% i% E& u7 t) J; g# h# E
//交换# m& M ~1 q/ ]5 Z" H
for (size_t i=0;i<vItem.size();i++)
% @/ n* a' ^9 M {
* s/ C$ U; X. x. L% c$ s5 I //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 j# h1 p# c& C pInvSort->Add(vItem.nIndex);' \' l# Y) V* `
}6 q6 N/ e" G9 g3 V: I! F6 F! l
BYTE nDestPos = 0;
, x4 `) i p5 N for (int i=0;i<MAX_INVENTORY;i++), f" g. a2 f/ \- {( q0 g8 a' J8 y
{# o+ K* l+ V# J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 V# p/ D/ C5 ^ if (pItemElem)
; _- V" O8 C o4 ? {# W* w, ?& q2 @- U: d
if (IsUsingItem(pItemElem))
: e2 g7 _1 `! `. K: n {
; _! D; v1 ]2 D: ? I9 R$ t //这个位置无法放
% f/ s t3 W7 F) v( e nDestPos++;
1 O) k4 S1 \2 ?9 ? }& y4 W% o# ~7 m0 U8 V" R4 B
}, ^+ P9 @4 ?) E9 V% a, |
BYTE nSrc = pInvSort->GetItemSrc(i); \. O; Y- x* |% y6 `7 ~9 I
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 l' |+ x6 L/ w) t# T4 Y if (pItemElem)
$ k Z; w V# G9 f$ k2 j {
4 }6 H7 v0 A, ~* x3 S5 g# w if (IsUsingItem(pItemElem))- f6 ]' e" }. n1 k- i4 J' i
{/ |8 A6 Q5 r$ S
//这个道具无法移动,跳过
. N; b* Y' U* g1 L/ y; Y7 m9 |; ^- o continue;; T8 ~8 u. x8 F
}: n& m2 b+ A& `! J, R( K7 P
}else{
8 K3 }4 k& g6 W9 U$ r5 Y //空位置 不用动
* v; }0 b) I' E' l/ e3 X: d- k$ H continue;; ~/ A) d3 j$ ~! w# B1 Z
}
# Z! s7 P2 Y, o. Q2 A h //////////////////////////////////////////////////////////////////////////
( X- T e" b- h+ g //开始移动! T$ Q) [/ c- j; H2 n
if (nSrc == nDestPos)
# X* q' D5 a. U$ T3 T8 f {
% ~- F0 s+ q8 b, e4 N8 p! ` //原地不动6 O8 M6 @* ?( \9 ]+ A9 `
nDestPos++;
) i9 t% S: `* k) L( ?0 h continue;
3 `0 Q# r. v0 v2 g, e/ G }
# x3 K% B& `( M9 t/ f) }6 b1 g4 W pInvSort->MoveItem(i,nDestPos);
4 z. C# h6 |# T2 L4 E' j" W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 V- M9 ?) i* G% M/ J2 [- q' s Sleep(5);' \1 D% _: J1 V8 w
//Error("移动 - %d->%d",nSrc,nDestPos);3 ?. q$ j2 ?1 Q
nDestPos++;
" u, j7 S/ C k }
' t; _' x( W5 ]% t! {3 c1 @( e //取第一个元素的信息 G: t& ~: q& Q3 G) J9 {
/** i2 g2 t j$ f' x, a
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. L$ k( A: N6 s( [: O# x7 }* d {
) B& |8 o" _( ^) b3 T! @+ q7 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
6 }9 g# o3 F/ X g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! b& @3 P! s5 F3 ? }
" z' Q$ F8 }. w+ b" b- S8 Q& | */* O$ J+ z- N: j- Y! P
//////////////////////////////////////////////////////////////////////////; ^& m% m! [: m6 o6 S' ^: O* e
break;+ l+ e: {8 u% Z! Q
}
4 J9 r; g5 f0 E) P; a, s, b } 5 i+ Y5 x1 [! {/ Z8 M8 h
}8 L: O$ s1 b7 L4 Z( t
m_wndMenu.SetVisible(FALSE);
) Y+ E4 }) A: f& H+ t% P2 @9 X) K5 j& A
--------------------------------------------------------------------------------------------------------0 F# W, [7 j; |9 W1 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 y! M: j- n) |6 ^$ s" i{
: p% b# b& ~+ ^4 F0 b9 C/ JBaseMouseCursor();
3 f' ]. e8 D5 E L6 G* ~9 z}6 o- X' o8 Y9 J9 c( w. }3 s/ Q
在其下添加:
\1 ]+ s1 d+ M! hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 B( ^0 ^4 }% \) U{
$ q5 P9 f7 v! X/ o3 t- h1 |* E0 Wm_wndMenu.DeleteAllMenu();2 X6 O( Z! i- [
m_wndMenu.CreateMenu(this);5 z9 {9 G5 y( N5 I4 u! Y7 _: q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) Z& ?1 s0 q+ e* [+ c% o+ A
6 b' i+ u6 @7 U' F4 U, Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 q, f/ b* J' @) C" l{
; [( \3 h9 k, a, _5 @4 x //P以上级别才可以删除所有道具9 ]- i+ u8 k5 W, f1 y$ [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");% Z4 W1 B5 t# m; Q+ v
}( D# u8 H3 y/ z3 }) q$ ^/ z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 I+ ~- M% \2 C% H X2 z( gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 d0 \3 I% Z3 N$ D) Rm_wndMenu.SetFocus();
. Z3 c3 [6 Z, N/ P/ a, A: L}" L. p# @6 ?+ ^0 ~' [4 W
------------------------------------------------------------------------------------------------------------
1 _, ^% I" b/ C! W) `2 Z% Q" f, G*************************7 h; e' Y" p7 X# [
WndField.h文件
& G" v+ b8 ~9 b6 s8 ?6 F*************************
4 T |4 B8 c1 k& Z7 t. P6 T. X搜索:BOOL m_bReport;" g+ I2 r: G& F& }* v3 S; |
其后添加:/ _0 G! r1 H! L" u$ E% i+ l" E% g
CWndMenu m_wndMenu;
/ a: d% P& \7 Q7 ?* R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& E) V0 m! e" l" p/ M8 F H/ Q+ l" v其后添加:( N" D- w$ y- c$ e D. `4 ^
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 t- _2 E. O- A# c! N- {" t
4 d8 u E1 ^' o3 f9 t1 x. O; v
, b* {7 q M9 U# F" l* P |
|