|
|
源文件中_Interface文件夹下WndField.cpp文件+ L6 e3 ^$ ~$ \; o S' n
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 T% k8 T: u7 C& h
T' f; b; G7 J$ j d1 O
struct sItem
$ u/ t5 ?, H& Z, @{
6 K4 y9 q. b0 N7 J7 z( l0 o+ IDWORD dwId;" X. C- `' ]9 O- n6 e/ _; H9 ~1 I0 i
DWORD dwKind2;
: V; {1 C& ?# \2 Q8 v; [DWORD dwItemId;
, Z* u ^6 O+ \* G6 _' [$ yBYTE nIndex;
1 d0 d1 R k9 wsItem(){ Z3 t/ V$ n5 U2 `7 h3 T
dwId = dwKind2 = dwItemId = nIndex = 0;
4 t; Q0 B s5 ]- B}8 @: {7 i2 ~( X% t! }- T0 b3 a
bool operator < (const sItem p2)
! d& f& G8 ?) G( i{- ~# \, F% I! \! L; O: j* A9 n* _
if (dwKind2 == p2.dwKind2)- \1 E$ p( N! g" j( L
{" Z4 I& z; X e1 _
return dwItemId < p2.dwItemId;' C# F6 C: s- d4 j: j: _) i; @
}else{9 L3 U( P0 ]) k
return dwKind2 < p2.dwKind2;
2 [* t7 H3 ^/ ]: l7 i# @! s }4 b6 R' A1 E, `6 q7 E9 l
}
) L- m4 N7 Z4 J( D2 r};
7 g H; s8 A: V" Lclass CInventorySort
" i, }, \5 j( W{6 Q$ \4 J& r8 W2 j8 W
public:" T7 H1 [4 g% a! A9 P! {/ x: ~5 P, I
CInventorySort()
' o' h; W: Y; T9 W4 J* h{
; A3 h) n; c0 q# b- a0 q+ U0 K& K% h m_dwPos = 0;
! i0 V+ F8 a! `0 p0 ]9 u}
4 u2 V& G4 i, r- [' [, o. ]) I2 X4 m~CInventorySort(){}. i: r) M- _$ B/ z a, ^5 B6 S3 |& P
private:# t% K( v5 }2 W9 d8 W( v* P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息3 O, l, S- \/ M+ Y% ~! v
DWORD m_dwPos;
' |7 K* b! T& P7 xpublic: }, x0 @" t4 E
void Add(BYTE nIndex)' i3 w& N: ~: a L# `4 k# p3 p
{7 I1 u1 H4 O, u1 l2 P5 m
if (m_dwPos >= MAX_INVENTORY)2 }' n2 R" k- \) x1 Y1 E4 ?% x
{
3 _$ K/ R" P# H# Z7 s( r8 C return;& E/ T! t) n+ k) M& e! f2 x
}7 s! w; s3 U! T- J! H
m_Item[m_dwPos].nIndex = nIndex;
" H$ X7 q5 O: `, y4 a0 P m_Item[m_dwPos].dwId = m_dwPos;
9 E. |7 h6 E) @" E; z9 c7 }3 a m_dwPos++;
# u+ ?9 Q* b) E- M( E- C8 b}5 E" S8 W1 w9 I: t
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 i0 Y2 ?3 M8 f1 U
{3 M( q, z. g. ~: d5 V z
for (int i=0;i<MAX_INVENTORY;i++)2 l) s4 j. L; M. ^3 z
{
+ z, t- n" s0 |6 L if (m_Item.dwId == dwId)# u2 P- g9 l3 K# J6 b$ ]
{
0 J" O9 O6 ?6 U! }# N7 r: Y return m_Item.nIndex;
3 v- s8 e/ D4 } I; L4 E' q }" ~6 t' ^0 h" ?) D0 m }% D
}
) [$ k8 M9 `# F: w- m c p return 255;; k7 w. C W: L# @- W' p
}
0 ~9 W7 }# w+ W$ H1 Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ N& C, b; Q8 e3 ?6 P{
! _) R3 |+ s( J; H0 Y4 y3 i2 Q BYTE nTmp = 0;# j. v/ e; J- e% c- I: P n1 A, ^" M
bool bDest = false,bSrc = false;7 z, C3 j h$ K
for (int i=0;i<MAX_INVENTORY;i++)5 S0 v+ B) e8 m# ?; k
{
r# W" r3 [: K! P if (dwSrcId == m_Item.dwId)1 i6 H" ]* y" ^ \
{% J0 L1 w& o& Y h) o
//id相等 则 改变对应的dest和src( E% L5 v& j3 e, b' Z
nTmp = m_Item.nIndex;
" j* S* I; S. ~- w* b) g7 Q m_Item.nIndex = dest;
+ Z' w6 t3 U6 m) e3 a: W }
+ v! e" w# n! T E0 @9 y& K3 q }
3 a) c- V! }% z+ O8 E //临时数据保存完毕,交换开始
3 D4 H) p! _, g, H1 `$ x for (int i=0;i<MAX_INVENTORY;i++)
5 a! P2 e1 z( M$ v1 W* h {
7 p: m9 c% z6 ~1 { if (dest == m_Item.nIndex)
% d, v) W: Y% q {
7 j9 A) c9 K8 _4 M! S1 ~) e% l //id相等 则 改变对应的dest和src- Z, W& \) G8 ]/ e6 M: a& I
m_Item.nIndex = nTmp;9 g3 Y1 D1 e+ }$ o5 f
}0 Z9 \# L9 k% V" e
}
. E, q4 W! o! s}
3 }2 ?! i# }" _; y# h' I5 _};( D2 D) ^/ h! e+ R' q
-------------------------------------------------------------------------
: W/ O1 @+ l! w; }# O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 [! ]1 E# b0 q0 Y/ c& g1 V
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- s7 u9 n* `' b* b+ S; ?( `! Z8 a
紧靠其上添加:
) ?5 a9 A( o6 ]8 c3 hif( pWndBase == &m_wndMenu )1 a1 F3 v$ Y# m: M
{
. f8 c/ |, l. Q1 j: j5 w* d switch( nID )5 [& `* f0 B7 W U4 Q
{
& c' \; Z$ x" i case 2:9 y0 s% v& N$ Q1 I( G% q4 _& U
{
* G9 L8 o. k- m; ]. D1 v //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 ] H9 O4 g3 { if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 c9 T8 B6 U* ^* o/ k; @3 p0 d Z {8 t2 O" E) ^2 Z# ?, X( m2 E
break;4 ]4 N- T; @) j' { T7 }6 u5 N8 [4 l$ _
}
5 \" b! x6 v) P# r% w9 Y1 u: m' Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)$ \5 M$ `5 q$ k. c; r, y' z
{% o6 N! g8 \4 Z% K- v! }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 P, ]0 ~; W6 F. e# a if( !pItemElem )- s" X. q% t5 P$ i- B6 c+ f; k' b
continue;5 W1 R; y u$ F! H/ E6 Q8 e3 U
if(pItemElem->GetExtra() > 0): G5 j1 G7 s" I+ _4 W2 b& @8 J
continue;
1 d$ E- }$ {- u4 Q if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , G! F+ X. `( L x. ? S4 F
continue;( ~/ @# ]1 Q9 v! i
if( g_pPlayer->IsUsing( pItemElem ) )2 C7 A: K2 r. x5 T2 U. [2 c
continue;
7 v, I0 N3 o$ p' H! w- ? if( pItemElem->IsUndestructable() == TRUE )/ z9 A; x8 I* S; U: ~0 J
{
; ^3 ^( D/ n7 j+ J4 l- ?. y( F g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 k8 Q) e, z( G4 J! S continue;
! G3 a0 ~$ t' v. C B# \ }
5 }5 A8 d# _- |6 M7 T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* {& s0 X! {/ M% k }& \; _ d8 y. q8 p7 W- @5 J
break;
2 C1 a4 V. k, R }
9 ~# Z' E: `) G' b% G6 B case 1:( n* a! t9 T. j: V% H
{8 d' Y0 f% `3 i4 q# B
//整理背包8 L# x( o% S; t: h& ~! i
//////////////////////////////////////////////////////////////////////////
& [0 u' |2 B4 A: B' ] //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );3 K/ r* I, a% e: E
//////////////////////////////////////////////////////////////////////////* P. l9 N; H3 q4 _7 ~
//////////////////////////////////////////////////////////////////////////
$ U* s" e- {4 `" j) F CInventorySort* pInvSort = new CInventorySort;
: N) e4 M' S3 c- q- C0 }: a/ J vector <sItem> vItem;
# Y: O J, K& x1 V1 `" j9 [4 }+ @ vItem.resize(MAX_INVENTORY);//初始化大小
1 R$ E: @ G; v //////////////////////////////////////////////////////////////////////////
4 V F, ?$ A4 Q; j* r //填充数据, w# x3 R4 i% b8 j" E& m& A# u
for (int i=0;i<MAX_INVENTORY;i++)" R/ S7 b2 c! D. t& f, w
{: ?( n5 w4 [7 W0 Q3 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 |7 ~. m, R9 o/ k( n M* N2 A* A if (!pItemElem)1 y9 L2 k9 k+ R! U
{
1 x, P9 Q. j: `' X vItem.dwKind2 = 0xffffffff;
$ a' ]( ^- D# C5 N! Q3 x vItem.dwItemId = 0xffffffff;9 ]8 h' Z' V+ l" |% R
vItem.nIndex = i;5 V2 q; o) @1 W
}else {
8 T- a# p* j: ] y3 D) G ItemProp* pProp = pItemElem->GetProp();
1 D- t: X4 p, p vItem.dwKind2 = pProp->dwItemKind2;
% \$ I. z( Y5 t9 I vItem.dwItemId = pItemElem->m_dwItemId;% | S Z9 x# Q# V5 ^
vItem.nIndex = i;
) U; t# x) I: l, X% c; f! ~ }% |0 Q0 z8 C, R# G
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);1 c& w8 _7 X! K) U! N5 h/ D# {) g
}
/ X1 {7 Y+ l0 g- V3 Z' g) T- F //////////////////////////////////////////////////////////////////////////+ r) T t3 P2 g h2 T
sort(vItem.begin(),vItem.end());//排序 C2 E. {# |! N0 }6 p
//////////////////////////////////////////////////////////////////////////
" o- Y4 D2 G+ I8 G; y! S //交换
0 p+ Y8 s) F- g* P. l) E for (size_t i=0;i<vItem.size();i++)
. k4 v& A I2 v" j {( C2 h# K) q7 W+ G7 _
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 A: |, n) a. x
pInvSort->Add(vItem.nIndex);5 U2 K) I: m0 h3 o
}& \ q1 W9 D+ i% |- d3 S
BYTE nDestPos = 0;) f+ ~7 V% e! N0 T6 o5 I
for (int i=0;i<MAX_INVENTORY;i++)
$ e; m% @) [( P5 N/ a7 O: ` {5 n3 W/ A2 l" L& t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, u9 Q# z9 r( Z* Q1 H) \
if (pItemElem)* M3 N* p H& |( `( D
{9 z$ v4 B3 b1 u. Y2 f
if (IsUsingItem(pItemElem))" i. S9 ~8 c$ g X v" k' G
{; q n0 G2 }5 I" y' U, i- G
//这个位置无法放0 Y* i; |4 v$ `, `( k# a
nDestPos++;2 M+ m/ K% M ?& w& p: @( B
}9 l) k, i" M, Z1 W
}
- _2 \( ~' ^4 l, @6 y8 y BYTE nSrc = pInvSort->GetItemSrc(i);* f* p$ e/ v- Z$ M
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);; J* s$ A7 A6 p6 B6 t e1 U4 o
if (pItemElem)
" {1 H# M. G( S- z* }+ n {
/ U7 N! i4 L6 M4 x if (IsUsingItem(pItemElem))
' @( a2 D+ q1 i7 x. [4 Q {
+ ~4 L0 H1 K% W7 M1 S //这个道具无法移动,跳过 n0 i$ c7 F: X0 U" D
continue;
% G) j; t" U9 a. g: r& m/ f }
$ x% A, {9 {6 V) C0 t }else{
9 d) t8 g- B2 n/ Q8 p& l //空位置 不用动
; R( B( K9 N" A6 x9 S# Q8 b continue;
5 Y/ N2 C6 F; [ _9 T; D; q }
: D3 a7 z' b7 D0 F# |1 N2 f# ] //////////////////////////////////////////////////////////////////////////
7 F! w) [4 G% q$ g& N- f2 h- E //开始移动
; Z, N' ?7 `! ?* r if (nSrc == nDestPos)
7 J @$ R k+ N9 w {9 T1 [( O* x3 ?' w0 ?
//原地不动) ?% b4 _8 q- j' m6 v8 A; L# }
nDestPos++;4 t ]! n6 D( t; |# r1 ^
continue;9 d, ]& ` ~8 W0 I& [
}6 y, R5 p* j% {! B; h; T
pInvSort->MoveItem(i,nDestPos);8 w- V# L5 g, C
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; t2 Q2 u6 M; `3 S Sleep(5);
9 b+ ~1 m S' m; s+ M. s //Error("移动 - %d->%d",nSrc,nDestPos);) a; C3 A2 \9 ^# M9 ~# H9 Z
nDestPos++;5 z& Y8 E r3 Z9 F* J/ h( t
}9 P( I' f# G5 j; W$ M
//取第一个元素的信息
. |, k' y: F# g /*
% ]8 B/ S9 g$ {0 X/ K% G) u if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' B+ K. P* u! o; J$ H/ h {
8 \, Q: ?' C1 y- W7 n) r5 f Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 j) Y, f; a* w/ F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
& F6 a* @ f. X# T/ [+ v7 | }
# m. M: O- l! j8 g) o$ G */
! b- o* ^3 B$ y" F8 Z* F //////////////////////////////////////////////////////////////////////////
. m+ p: Z1 `: h, N. C1 p break;
% J$ T3 g; R* ]' L }
3 V, u0 M/ T, D( A0 C0 _ } ' T" t7 _ f0 [- Z- X; R
}4 J7 R- l, g$ y7 ]5 T' e
m_wndMenu.SetVisible(FALSE);+ A$ r7 I m# f
0 c( \+ y1 _" T4 N s
--------------------------------------------------------------------------------------------------------
4 P; ~0 V( Z: m* j0 S- A8 n. X搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 \% Z) `; w( f5 X, Z3 \6 |1 ^
{9 S {7 V6 p, u% V6 {
BaseMouseCursor();
. p4 J! \% c4 B2 u; ^# j, i) @) e: v8 l}" `) y4 ?! ^% {$ @4 }% l
在其下添加:
- |% m- i6 k7 Y+ t( Q- t# J+ |void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& }9 ?! R) ]- S2 c5 b{
! n. p" }# a6 D/ i+ D+ z$ ~m_wndMenu.DeleteAllMenu();7 q0 C. \. G; e
m_wndMenu.CreateMenu(this);
# M1 j7 G( _% ~. f5 x6 J- O0 em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ L. k6 Y) w' q+ q& C+ X+ M% Z% y1 ~3 @! Q' _3 P0 a8 t4 T5 b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
$ u. D+ P" u$ E* Z{6 j0 s* v7 e9 d
//P以上级别才可以删除所有道具
% ~* x N% h' L m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; g; M& l S7 x$ Q}$ L/ M* ~. s: Y; P6 j, U9 v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ `- e4 p3 F* U$ }' Q& Km_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() ); T' ]" f" r* {# p+ h# |- Z
m_wndMenu.SetFocus();
, c$ k# w# ?! R( Y}" F h, y9 i' r# @
------------------------------------------------------------------------------------------------------------
' [" H& b' `4 U4 b }*************************
4 ]0 N0 _ G( T- e7 C( F ]/ GWndField.h文件
+ E9 _9 F9 O$ ?5 H% j*************************' L) s" u8 Q) {# B. g
搜索:BOOL m_bReport;* _7 K6 A" J8 v- w+ y
其后添加:
! S7 w v: K) b& V# ^ t9 NCWndMenu m_wndMenu;
6 F8 U/ `: L. D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: R, b& F. _- {. H3 _9 P
其后添加:2 @' n3 Z8 w& C( k
virtual void OnRButtonUp(UINT nFlags, CPoint point);6 N8 M% j/ N+ o! i! m
2 n. g* S) W+ r' T$ t6 G
- c0 d8 [7 e* `1 ?) F
|
|