|
|
源文件中_Interface文件夹下WndField.cpp文件
+ U! ]9 ]% c$ o# J7 y/ T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ T, }4 d2 L3 k. v
/ s$ X( g; ^. q# istruct sItem
i6 t& F; u$ w8 ^4 D. v9 j{
4 }7 b9 t# e4 r1 Y u# l0 KDWORD dwId;
& ~% P( ~& F# R5 l* t& M3 N! L- QDWORD dwKind2;
( R: D1 v8 U3 y1 U$ rDWORD dwItemId;6 I1 U) D0 w3 w& W: ?# D
BYTE nIndex;* W- t/ p# V; K0 Q$ t
sItem(){2 n& O; g9 N1 c2 m; [' y- l
dwId = dwKind2 = dwItemId = nIndex = 0;6 H6 h/ p+ |5 U+ l2 s
}5 h! ~' q1 F r* ^8 {
bool operator < (const sItem p2)& F# s: P9 I7 M: {( ^5 k6 o% L
{
) w8 E$ w. o6 J$ N9 x+ F+ t if (dwKind2 == p2.dwKind2)
/ z) D" ~4 ~4 |; v; a2 D7 q& T6 h {
! |0 |0 b j$ Y4 {2 T* d! \3 Y return dwItemId < p2.dwItemId;' _0 V4 a9 s# j; V$ p: b
}else{2 g& `0 _$ [' K
return dwKind2 < p2.dwKind2;
' q9 M- _0 U; ]- x- e+ S( a+ y) I7 e# M; r }$ G" {0 i7 w, O* R4 w2 a
}
* B' f0 M* B, r& r};7 T S; J" ^, u! L
class CInventorySort
, A# Q) P# N7 V6 L{4 x6 p8 b. m8 l: m D
public:' ]8 C2 n) t9 s- @5 y+ Z$ X
CInventorySort()/ F9 D# U' k9 Y
{1 V: M# R3 |7 @" e G
m_dwPos = 0;
$ T* o$ v8 p) ]7 M}! R# V! L8 S g/ w7 A% E
~CInventorySort(){}
2 h& U4 G9 L4 f4 Dprivate:, i3 B5 g3 |4 R& p8 p1 R Z6 T7 G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 e; m" M% E! c! f: C0 x yDWORD m_dwPos;* s$ Q2 v) h5 u8 U& B8 O
public:2 j8 k8 J" |; V; n
void Add(BYTE nIndex)
0 }+ v: ~8 t2 q/ @{
, q, y) |2 J, H7 Q if (m_dwPos >= MAX_INVENTORY)+ s5 U2 b; w: f
{
7 p; g2 E2 _" ^) e4 m7 d return;+ f6 e/ h6 w4 t, I/ @4 {0 k
}" L) e. v/ N7 c( i
m_Item[m_dwPos].nIndex = nIndex;
- d3 ?0 ?2 _0 h6 v9 H4 r y m_Item[m_dwPos].dwId = m_dwPos;4 S1 I7 D9 C* X0 h1 a, i
m_dwPos++;8 ~( C6 D; ^2 K# n4 B
} z2 s. l }$ _7 p5 u# F3 I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 E) ]0 s. A) N) i' w{
4 w; n! e2 g c' y$ B& C for (int i=0;i<MAX_INVENTORY;i++)
. ]& }" ?5 v. [: ^6 q {) T' ?7 y1 w4 o; D* G! ?
if (m_Item.dwId == dwId)
) |' o/ p ?' g; `, q {% D# @( L- `2 f- z- O4 H
return m_Item.nIndex;
: g0 c. o5 D( Z" [+ X ^6 k }/ y8 V3 [6 X# n1 ]+ A3 p
}
: m# q! p( q# `2 g9 a return 255;3 x, e: ]( L5 l( t2 |/ l Z' R
}
* e3 h) v8 n% M r" vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ E) y+ t4 a, k: q4 G2 f{
7 t$ [1 e$ R# M BYTE nTmp = 0;0 }& G/ w- x# ~ S4 d
bool bDest = false,bSrc = false;$ [! ]3 p# F6 a- G" j- ^; `( \) h/ t1 [; m
for (int i=0;i<MAX_INVENTORY;i++)9 T) N( H; H1 O( J2 H
{
# O9 G. t) T- \: \ if (dwSrcId == m_Item.dwId)
: ?% i" w3 A; H {, w+ D/ i7 V# D9 ?* q3 G
//id相等 则 改变对应的dest和src
# L `3 d8 t8 i7 x" a9 y nTmp = m_Item.nIndex;
5 g6 c- Z* O- }- V" m m_Item.nIndex = dest;9 @6 { @, m6 O/ }4 N+ y0 d7 h
}
4 R) a- q9 b: U2 T% n6 q }2 I: O" L& F2 e* `: p4 E2 X0 j
//临时数据保存完毕,交换开始* o: c5 P( a3 j- } [2 }4 e* B
for (int i=0;i<MAX_INVENTORY;i++)9 r! d7 @6 f: u& }# e; r4 U4 v
{
) l( a6 G1 [. `8 F if (dest == m_Item.nIndex)$ }+ l; Z* k1 @6 T
{5 Z, E9 v( ?; E# C; h
//id相等 则 改变对应的dest和src
, s) o! C4 K5 O2 _* ^ m_Item.nIndex = nTmp;
% r; j7 X7 Z7 H" M }1 K8 T4 B% { h! m" V2 j
}$ D- `3 C+ G. A( w% h
} Y' }& v# O6 I& f* c5 c
};
# d! [$ y* {, q) P-------------------------------------------------------------------------
9 h* e6 Y( ~5 x依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): w. h: N4 k1 [" `1 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 E4 Z0 H$ Q# l8 N- ]5 q, \紧靠其上添加:
; v1 D& m& @+ A$ v1 r) O7 fif( pWndBase == &m_wndMenu )+ P* O2 P: N1 p+ o' @5 O& k; \
{
7 F$ T0 _" x5 i0 `7 _7 N switch( nID ); |" K1 Q! T8 O) a
{3 c5 T9 M) O1 n; y' }
case 2:& p& f3 @9 o, a
{
* {0 S! t0 @, `/ X2 i //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 G) R0 g7 q9 i" ]/ l0 W if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 }3 }; w7 w; n( G {
8 F- ]& i# r5 N R& X* ^. R) E5 U+ [ break;. t- q2 [- H& w
}
; U0 L( D3 u5 H1 e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ J$ w# p/ E5 E9 Y
{
( s F3 z% y9 u/ L& D" @6 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' j& ?* N4 A7 ?9 Z8 w0 w8 U0 J if( !pItemElem )
( X. S" h$ U( f/ u; B continue;2 T8 z, M9 M9 w0 D
if(pItemElem->GetExtra() > 0)
* a* D+ f: {9 ?1 Y$ y$ t continue;* y( d4 m9 U7 S0 d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 s& B/ i$ ^7 F a# M6 L: r
continue;/ ]5 Z" s9 o7 g8 k% U" i
if( g_pPlayer->IsUsing( pItemElem ) )/ o) F7 E+ }# u9 \
continue;
. W( S* x) B) C- R if( pItemElem->IsUndestructable() == TRUE )* F! i6 I* @2 M0 c
{
2 P4 r c7 {0 Y. C/ {7 i" N( ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 o' K& f: O0 i" T
continue;
) a4 m2 V3 J q3 t- D5 {) S4 S }
! }6 J2 j* o: O g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 F9 O" W ~2 V
}1 H! w" z6 i4 F9 u
break;
. A+ z9 e3 N1 X, h }
% R6 e9 h A) A! g case 1:
6 y& u5 ]$ A& n: g" s- A {
, \* _; f# k( E* @1 x; _ //整理背包
: W9 R+ z+ L% o) a* x6 n //////////////////////////////////////////////////////////////////////////
0 f1 H: D8 t- Y2 L U# F5 n //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% A4 i* e* F. c0 i //////////////////////////////////////////////////////////////////////////! O, z7 u+ B- S& U/ [2 `2 F- ]
//////////////////////////////////////////////////////////////////////////( p( ^+ C9 z) P! ]
CInventorySort* pInvSort = new CInventorySort;% B/ Y' @6 _8 E
vector <sItem> vItem;; A, l* t7 p# i% H @8 d
vItem.resize(MAX_INVENTORY);//初始化大小, j) h6 {- B7 U% W! T4 c: t
//////////////////////////////////////////////////////////////////////////% F+ |( q( L% Z* \ Q
//填充数据' s1 Z8 l. B0 @+ L
for (int i=0;i<MAX_INVENTORY;i++)
6 u L& M% s$ [# V) b {
/ ~+ O; m _* Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& P) {0 k3 n8 [% p# {' |5 r if (!pItemElem)) L2 E1 Q% Y% {4 t4 n; `5 X
{
9 @; ^/ Y( l9 t vItem.dwKind2 = 0xffffffff;
$ y* S) g9 X' Z# e% r4 v, @ vItem.dwItemId = 0xffffffff; T: a! y0 B7 _: Z" d" n$ `
vItem.nIndex = i;
# j+ t- C) P) R. ~; A }else {
# Y" v9 ^ h! ] ItemProp* pProp = pItemElem->GetProp(); k1 [. Y7 s0 O; R
vItem.dwKind2 = pProp->dwItemKind2;& d4 j# T' b0 J7 h
vItem.dwItemId = pItemElem->m_dwItemId;
% U! i# [1 s& F/ t vItem.nIndex = i;4 a2 ~5 o+ Q3 E! {# b7 c: m
}
" D4 [0 c6 W" F/ w$ y //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) h/ P3 O8 @+ ]! w5 q3 n" u+ I- u }
; s9 b8 n$ o; T //////////////////////////////////////////////////////////////////////////6 I( H# O7 z$ `/ U; P
sort(vItem.begin(),vItem.end());//排序; C) L/ z! n' a5 D. f% f; X
//////////////////////////////////////////////////////////////////////////
+ P* r' t4 U3 o+ U. w$ K( m //交换
8 ?" _: n0 o4 \* z# s, ] for (size_t i=0;i<vItem.size();i++)1 T4 a- c5 G$ G
{
, K V- r3 G0 ^9 ?# {$ } //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* F5 ~; ~, D- u pInvSort->Add(vItem.nIndex);* C: N: y5 V- l H0 d
}( E& X8 |- V5 {- B2 J
BYTE nDestPos = 0;
& i4 {9 {2 X: I for (int i=0;i<MAX_INVENTORY;i++)
# Q" @6 f- n2 J1 M {# c( D& N6 P- c2 W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ f* v8 a8 g0 J( [ if (pItemElem)& j( g" V1 s' x2 W1 }( v
{8 e- W; m, F+ G) F
if (IsUsingItem(pItemElem))9 \2 I$ q- O' u
{/ s* }' t# ~' C
//这个位置无法放1 M' Z9 ?& h( Z( |6 b/ W; ~, R
nDestPos++;3 ~7 B3 z7 k( u1 R& `
}9 ?. H8 d9 z9 _
}' U$ o! ^# G) V `
BYTE nSrc = pInvSort->GetItemSrc(i);5 \# a% ]9 T* z, i* V0 s0 z
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 t! F4 G1 G/ t; B( v if (pItemElem)
" V# e! W0 r, [* f* U# @ {# s( q3 Y @% B% A9 O G/ ] _- w
if (IsUsingItem(pItemElem))
8 A& y* H/ k4 [* k/ E {7 k, o6 T2 m$ j W* D
//这个道具无法移动,跳过
; c) i0 ~4 A4 o$ [$ \: Y; }# L continue;: T+ D+ N6 G4 ~, g d
}
1 D! n/ i ^, k: U* [& D }else{
X! p1 {* `6 [7 S6 ^' D //空位置 不用动
' k3 s. W. D% B3 \; P& J continue;1 E. e' l5 |3 Y3 u) c, ^
}5 B+ N+ b# X7 j. w7 u
//////////////////////////////////////////////////////////////////////////
# [% @, K3 }( @9 k# z //开始移动# ]; R0 x$ q% d9 j# z* l( ^
if (nSrc == nDestPos)$ {2 p+ U" d% s2 b; \, a% I& _
{
. w& {4 j) H$ Y* E6 p: H //原地不动
# n. d- \3 u. A; {' D) r$ s8 ` nDestPos++;
- r$ D" z: v |1 g. b continue;/ B- f9 @# y' h0 B0 q9 K
}
1 A4 y* s. W5 }, \/ X' C% x# i pInvSort->MoveItem(i,nDestPos);
; h6 C+ S; Z6 W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; v) w% r; F" H Sleep(5);
7 |( E/ j, f. d1 ~: s! S) V3 i //Error("移动 - %d->%d",nSrc,nDestPos);
0 K" c9 R1 s7 Z1 o0 c* {: q nDestPos++;3 d1 K y/ C: J9 x. I: U9 m- O
}
5 G$ I/ i2 ~6 [ //取第一个元素的信息
( }+ m: A B6 b, Z. m /*
1 H! E' T" c( ~$ w# R9 }4 l3 e2 [0 R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' r. I5 i" }5 O6 ?3 x {4 j! }, H; @: w1 H
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);" ^6 f( i. h% K! W v3 G, l7 s
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 y- b, V& k& D4 V+ h
}
8 y$ b8 i' Z8 y: G1 L7 ` */+ b% e( _9 R- l5 }+ L% N9 p
//////////////////////////////////////////////////////////////////////////
$ w+ f, I9 p3 n break;
# n( I: G8 S9 z$ d. G. E; T# `! N }. M* `# v, u0 Q% K E
} 8 [& W3 T5 T+ S
}
4 T! N, O- Z* R# P5 W. I' Gm_wndMenu.SetVisible(FALSE);+ Z( {1 P1 L, W: O6 q5 K: j
5 }' z* o$ d) {9 R) j" e
--------------------------------------------------------------------------------------------------------9 a4 \ L, Y, x: Y! f$ G& @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ p- o f3 s9 G9 |9 [{$ r3 Z( v) G/ C' X y
BaseMouseCursor();, ~8 \1 o$ u, c3 p$ a3 T
}
# g% `/ p5 q3 X! _; R+ n* C' n" N5 Y! E在其下添加:
( m8 t$ i9 s$ b! t% a" Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 w" s, |7 i, D: y$ w{
+ q6 Q/ j0 j& r1 U* xm_wndMenu.DeleteAllMenu();* Z6 M e, ~/ p+ m P9 z
m_wndMenu.CreateMenu(this);4 t/ _" c; }0 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 M& p$ r' X5 M: G1 m! g
2 f8 I A- e# Dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) A2 h9 w1 b2 q" z# O
{
9 O9 v! B- y0 F$ T //P以上级别才可以删除所有道具
5 T' D2 k) h& H1 X ^# Q4 { m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- p- q! O9 _# q, c) i2 U, z}* k: F1 ]% c' S! @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, D$ G3 W8 s- D. {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
9 T* S9 [ ^$ Q- k5 Qm_wndMenu.SetFocus();7 Q5 ~" k( M1 R; G7 b; m9 {+ l$ s
}
: V: \, j0 e; W------------------------------------------------------------------------------------------------------------5 z+ ^2 X7 s* D" z1 l- d- m) K
*************************
1 k+ @: u2 j' ?6 LWndField.h文件6 h& g+ G3 v0 ~' T) H
*************************
7 B# H+ a5 U1 m4 v% R搜索:BOOL m_bReport;
2 K1 ]# |1 k" f: @9 V0 S+ |( ^% \, _1 x其后添加:
" O8 X0 I8 {; ~; P0 R( |" _CWndMenu m_wndMenu;
7 X g# l$ _3 e搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& J! m f$ u) Y* T其后添加:6 o9 E# v5 [8 \. v) k
virtual void OnRButtonUp(UINT nFlags, CPoint point);$ q5 @' G H) \" V6 j; O. z1 G* ^
+ ~/ V3 K2 U+ J; \/ N
0 Y9 {4 f# q+ a0 q |
|