|
|
源文件中_Interface文件夹下WndField.cpp文件0 T* _( ?" n, A* Q* u- a R3 T H
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ): z, r3 k8 G3 U+ D) u# i
1 R" [! P \" L1 d: L& L
struct sItem$ L8 p) U% R. |, Q1 n
{
; T" J# }: l8 H6 Y' Y5 a, e- J( sDWORD dwId;# n& t/ ^6 [+ ?* E% I+ b# }
DWORD dwKind2;
* L9 I/ r3 K1 _( |DWORD dwItemId;
" Y% o& N+ F* \% p+ D( SBYTE nIndex;& C3 E- u2 K& u' k* o9 x
sItem(){
- U' o4 F2 x( i3 ^: f* z! k dwId = dwKind2 = dwItemId = nIndex = 0;
8 |4 l( D6 _0 ^ L6 s+ `% u, s, p}
3 ^# J5 N* T$ ybool operator < (const sItem p2)! W0 @1 q3 z$ O/ i
{
' H2 t# B! M5 T. \ if (dwKind2 == p2.dwKind2)
! x" O9 g4 \' `6 X2 t* r r {
2 k+ O& B2 c: I return dwItemId < p2.dwItemId;
' g9 a" M0 Z5 _ }else{
. i# Y3 e" Z2 H* j6 b* [3 H return dwKind2 < p2.dwKind2;. C K9 W) s, |: L4 a2 c5 T
}
1 U& [( j0 d, ?, c}1 ?6 R* j+ h: v$ T l/ a
};4 u) x, ]7 m( A% H7 R( ~
class CInventorySort
2 _% o' L& t, x4 O! q{# {) |7 Y( ?8 x3 U; J# b: Z4 T
public:0 y8 C1 `. y. `- r# z+ ~, p
CInventorySort()8 V2 t1 o7 D" {' l/ q
{
& Z6 ^) c1 S6 f4 Q m_dwPos = 0;
p d7 e% z k7 K/ n9 n}
. j$ t- J; B/ F# d~CInventorySort(){}3 \' K+ i( ~, h
private:# m' H) Y2 Z; x2 z: d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' e* G. `. D0 `) p, }
DWORD m_dwPos;5 K) C2 C- R0 {$ F3 r
public:
, T4 g, J2 S6 a4 }; i8 k( o2 }void Add(BYTE nIndex)
+ B% e. H# E4 A" a9 A( Q{$ Z% J% [7 N( y9 M1 b
if (m_dwPos >= MAX_INVENTORY)! a# u( p4 l m* g) t" I0 [0 S
{
& z, o" _! h; I% ?4 h: y return;
- `* k1 r/ |- w1 f9 d' O }
$ e+ e$ J; G& K$ z m_Item[m_dwPos].nIndex = nIndex;8 w n5 G, N% e( y) N- U
m_Item[m_dwPos].dwId = m_dwPos;! s$ i# l5 x5 n7 P/ _5 K
m_dwPos++;% M0 N8 S2 n8 M2 Y) R
}/ ?0 B8 L7 b9 B; O4 h1 ]& g
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( }9 }7 o6 z$ I4 e4 {: D" t{
5 x: h. m7 O+ k$ C6 p for (int i=0;i<MAX_INVENTORY;i++)# L" n# J0 A# m
{
; b" H6 l. X* r% U2 Q, s& {0 k2 s if (m_Item.dwId == dwId)
# w- |0 h+ x% U/ P; g6 I. p {: _" ?8 f* w" Y9 _" p
return m_Item.nIndex;+ J% i5 q$ b. f# f
}* T8 A5 I% R$ ]' g0 N9 t* R- e
}& t0 c0 p- J& A
return 255;1 d" W! b3 h3 ?2 f# N3 f4 d# d
}
2 h- K# b; W) jvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) ]6 K2 |' t/ h" s& D& i" @( w{) `3 W% N9 u5 {! b! H4 T
BYTE nTmp = 0;5 _+ g8 E0 I. L8 f p5 R5 v
bool bDest = false,bSrc = false;
; P7 ~) V" B2 v: a G) [ for (int i=0;i<MAX_INVENTORY;i++)
8 n. j& z* `* R- f; W {% ^+ d. d/ q1 L$ H
if (dwSrcId == m_Item.dwId)& f1 d" m. j( F
{
1 e5 g' Y7 v; @4 `4 C) @ //id相等 则 改变对应的dest和src3 A! R" n5 W' A/ d: ^1 G, o# D
nTmp = m_Item.nIndex;
& y1 J; c( c3 G6 V/ E* n/ B, b! [ m_Item.nIndex = dest;8 j$ @7 \. }# {8 ~9 Y
}, A. z4 x/ U; ?% f, b
}
+ F- L! A. i" L+ t/ Q //临时数据保存完毕,交换开始9 X( i& S9 z: h+ y- m8 G8 ?; D
for (int i=0;i<MAX_INVENTORY;i++)7 D/ k9 {" w2 c4 A# X% A- W9 u
{8 _, G6 s! H2 A' X
if (dest == m_Item.nIndex)
+ w% Q. i% R' G- U0 k* A {& M; B$ y/ `% F& b$ k7 ?
//id相等 则 改变对应的dest和src j3 F1 w1 D/ K- {/ C
m_Item.nIndex = nTmp; J6 B. t! Z, h( X
}
7 q) v8 Z& w+ P" c* O) f }/ m/ b+ T) ?# N, m! o: L8 [
}2 s2 h; |' p" T) a
};
\, f$ X9 @" z: A+ l% w* J-------------------------------------------------------------------------3 T! I' ~* C2 X0 y( H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )5 x8 U0 }: C$ Z% {# Q* V' O. J
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ K9 n2 S# Y9 q; m; q8 N0 J
紧靠其上添加:9 o0 z5 N7 S4 `( l0 a
if( pWndBase == &m_wndMenu )
/ B6 | r$ {& A3 R' {$ T0 X/ f% n{
' Q/ l2 u" U) U7 e9 @5 E4 A7 @7 \ switch( nID ): ^/ P! H% G" t( s" r
{) {/ p! g$ Z8 D! M1 }1 P" G' ^
case 2:
& t, }5 J: A; e3 N) J7 ] {
; r: E6 l0 M0 |- W9 Q' R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' `$ C h) h' h) e/ c7 X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ `' l3 @/ X. J* z* v- k) i$ L" S
{7 r' E7 G% Q g! W. F1 ?7 M( [# r
break;9 B m5 J" b' ?7 ~
}
8 w1 f, ?+ `2 G) A for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). K9 T) @2 O( X9 T7 a( k
{( m6 ]& t/ O5 B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* C: k4 ^# _$ U* F4 y4 A if( !pItemElem )
0 R, L+ H( O- h+ h. i+ j; D continue;# \# l# F" U7 Q6 a9 [ y/ b
if(pItemElem->GetExtra() > 0)
1 }& q5 f5 X' `& A0 @8 [7 z continue;
2 a9 L* N7 Q h% ?/ D8 _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ [) V- E5 i3 i* D
continue;
5 b6 p& a) w5 R6 C3 \: V. L if( g_pPlayer->IsUsing( pItemElem ) )
- x' X/ y0 K6 [9 z% n" N: }7 j continue;
1 I: D2 `: O' g+ g) W+ z$ Q if( pItemElem->IsUndestructable() == TRUE )
# l8 E" `( N5 J9 K) B/ b- I B {5 E: {9 a' R/ d) O- Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ d7 A: N! k- P. [2 f0 A& {
continue;1 j9 ^" O# k) j( Q
}
* m. T6 r. ^# M) b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
3 i% F$ q+ o( C: x. k$ G- j: K) o }5 p# E z D8 G" j" i; E
break;
% m1 G: N+ l( j+ V2 y8 U3 z }
8 D0 ~/ S) n, O+ F$ { case 1:* {4 I& }+ I1 e# z& D; C" b7 q
{% z; H; o; X+ e& t7 m" q( \' x
//整理背包
! r& f7 j7 e, m+ \+ W3 X: W //////////////////////////////////////////////////////////////////////////! m# G) j2 ^& g/ u9 v9 c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' T" g i. O7 ^$ X" f& m- S
//////////////////////////////////////////////////////////////////////////% Y: J- f7 C4 `5 _' }
//////////////////////////////////////////////////////////////////////////; C3 P1 I6 r) m- j
CInventorySort* pInvSort = new CInventorySort;
0 j+ l/ Q4 G; T. ^, }, \- ~) C& ` vector <sItem> vItem;
6 d& R0 n+ t& Z vItem.resize(MAX_INVENTORY);//初始化大小* @3 L( g4 T8 h4 ^( e! [* Q8 G
//////////////////////////////////////////////////////////////////////////, ?$ l- Q( C0 X* w2 D1 @
//填充数据* O X4 t8 _( l9 V, i P
for (int i=0;i<MAX_INVENTORY;i++)
# K2 M T) y7 e% g5 R {3 `# l. ]$ C+ C5 K, F' Y! m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 f+ c; B& J8 Q' }0 G' ^& u
if (!pItemElem)0 V7 \1 D3 Z9 U8 N1 \
{+ D5 b$ n) J" W' |
vItem.dwKind2 = 0xffffffff;' o* n8 Y0 U( N4 S1 Y& z3 e6 b
vItem.dwItemId = 0xffffffff;! L* Q" b$ M4 y3 e+ u: g- | }7 E
vItem.nIndex = i;
) s$ I1 |" S! D% S$ x }else {/ E$ X, Z. l% v6 |% y
ItemProp* pProp = pItemElem->GetProp();% s# ^3 E. R7 h
vItem.dwKind2 = pProp->dwItemKind2;
% Z3 I# } y+ ~4 W$ }$ l vItem.dwItemId = pItemElem->m_dwItemId;2 K% [) j4 ?: g) M) B% j
vItem.nIndex = i;( R) ]4 {# R0 L0 f2 U
}
' G7 O* \. h' _, }* w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. f A! J7 f/ C @
}) Z2 I- n+ V" j- z+ d9 R
////////////////////////////////////////////////////////////////////////// [4 q4 R2 D. p
sort(vItem.begin(),vItem.end());//排序3 D1 M2 W$ G, ?% }8 ~' \/ o7 B
//////////////////////////////////////////////////////////////////////////
6 M: m" j- r1 H, u7 Y! |# t //交换2 R8 Q$ ?% R* @1 G' V2 s3 Y0 \
for (size_t i=0;i<vItem.size();i++)
/ O* o! [1 P6 L+ d& Q. ?" | {
# L2 ]7 F. B; g6 B7 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 [0 t, C& R/ F pInvSort->Add(vItem.nIndex);( L- s$ h X2 e7 Z; w
}/ K) n9 s' p8 v, }' ?! U5 O" |0 l) ?: V4 Z
BYTE nDestPos = 0;/ o$ m& C2 R/ w+ [
for (int i=0;i<MAX_INVENTORY;i++)
" l' d9 P$ w1 p% T/ F2 a! t {
5 y, g$ N5 l5 K* ~: Z- I' e* Y$ P8 c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% t( ?' Q! M& V1 v" z
if (pItemElem)/ J* x4 S: U$ j! b& V! |# f, T! a
{
! _4 [, `, r8 A3 l" f if (IsUsingItem(pItemElem))
* ^+ M% Z3 T/ e5 p$ U {
/ N) v5 |% t% b$ `" J" g //这个位置无法放
0 Q7 e r0 N1 z, y/ J/ U+ q nDestPos++;9 x, D2 s8 F J& F& g$ A3 I
}# I0 R9 h% q- }$ D# F& K: J# z2 U
}$ y: `+ O8 s8 Y& |1 m. {$ m1 r. y
BYTE nSrc = pInvSort->GetItemSrc(i);
' {' m2 J6 Y$ O* Z1 j( I& _" O pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# ]. o' M+ E \ if (pItemElem)
1 d: [, {1 g& |$ P% d {
0 \8 h; y# ?. L& Y4 D8 t" ]: u/ p if (IsUsingItem(pItemElem))5 `8 z# d. h! ?4 Y; ?
{
+ W2 C8 o; G( H) Y7 R8 z" [! ^ //这个道具无法移动,跳过; e( K7 [. @" C# K( ]. B# s
continue;' r; m% z' Q& z" V5 z5 e3 g3 q
}
2 v0 G( U. C+ J7 U5 v9 w }else{2 a, s& k# U3 t4 Y; A4 y
//空位置 不用动
5 ^6 f0 ?$ Y5 ~8 A* B/ N continue;/ w! b( {; g2 I# E8 s0 x1 t
}
+ f w* H E8 g: u //////////////////////////////////////////////////////////////////////////
/ }- w( x; d2 G: X //开始移动
2 i2 L. }9 \- k: F if (nSrc == nDestPos)- M7 Z, O# z, m. j! J
{+ i' R1 @/ _% Z" o6 E
//原地不动
, m$ O& c& O8 a1 d2 j0 Y* } nDestPos++;6 G6 U7 z: v) H1 J7 F$ P
continue;6 u5 X' n2 A4 N# N$ |
}
' R7 }- N& U# i- n; s2 u4 ^/ g pInvSort->MoveItem(i,nDestPos);+ w) L( E: x, v- p
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. M% f ^1 q$ |8 c2 v5 K# ?) ^ Sleep(5);9 i1 {0 Y! [0 U: V% _
//Error("移动 - %d->%d",nSrc,nDestPos);) o8 w: z/ y- j) j) B# a
nDestPos++;8 D5 A% y8 m$ J, D
}
. }6 d0 {& \3 x" V6 @1 `* f) l0 | //取第一个元素的信息
6 W6 Z2 B) ]. j/ E1 R* K; ?( W _ /*
/ [) q( H! b$ K# y' E9 k if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
6 Z- r! {" C: z/ n {$ ^/ }7 V3 {+ [
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
( G2 V, ~6 M1 B9 k g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);# R# o) n0 E* t4 }/ @; y
}" q, @* o, @% ^) Y/ R/ w
*/
) ~; Q" g* \! ] D, J1 u* i //////////////////////////////////////////////////////////////////////////! u- I' Z, x# N
break;
# A8 b- s+ Y, ~, I: w }/ @7 H5 c. W( l4 W* o h
} % p7 \9 T0 K2 t
}
- v, D5 |2 J( K8 Jm_wndMenu.SetVisible(FALSE);) m- _% N" K& w9 @, I E. l
7 S; x3 W9 Q5 `3 g' l5 _' Y5 H
--------------------------------------------------------------------------------------------------------/ N7 }4 c, }; Y0 O6 T% Q, j' U
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)2 f$ C8 r: A7 O, G9 s: y
{$ i+ c* G5 O! L7 l
BaseMouseCursor();
7 N3 S+ k/ `0 f( L}
9 C3 Z$ m1 Q0 V在其下添加:" _9 x4 }1 t; D3 g1 m( y# [
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" r8 o, c/ W( z; f{) Q! }* l4 U0 Y
m_wndMenu.DeleteAllMenu();
$ T+ ~- ]' G2 Q' d, Km_wndMenu.CreateMenu(this);+ _ }5 P% {! o4 c
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! F/ b4 \: S" F* }1 M9 @, K+ d3 M V; h( b! ]& s0 `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" j9 M4 R& S1 L{
$ E8 F ?8 M- D: ]' n; i% o* z/ G4 ^ //P以上级别才可以删除所有道具! l; q2 j8 i. p, \
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
0 B( g( X3 f( h7 \, w5 q# A, n5 y}: a7 C- C; o J* m) ]
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% \5 V: w5 p# A( C* g: j/ s! \$ [m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 D) v" C3 V# k. N1 L' Qm_wndMenu.SetFocus();
* m: L. I8 V' q% Y2 Q9 p6 y}
* i0 V. f, ]$ S7 \------------------------------------------------------------------------------------------------------------
1 T7 _2 z* m8 T/ L) c5 T3 ^6 q*************************
4 q8 k, M0 r+ U. [0 jWndField.h文件$ t) f* j/ @* Z; \3 T$ m# k9 t
*************************4 x/ I3 p6 L5 b+ a1 w% ?. F
搜索:BOOL m_bReport;" r6 B, u1 W3 l( R F" u+ }
其后添加:6 J, s. p9 Z/ Q
CWndMenu m_wndMenu;
# [- l; D$ V. {2 J( v( \( L9 j2 u搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
3 g) W+ W8 y$ t0 ?其后添加:
+ x- u) i0 \) L, Kvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 K Z% h* a/ p7 ~* y- j1 Z. H
2 F1 \% l% k, x1 L# Q4 {6 H# w2 l" G/ z
5 l/ {9 R- E( w2 }0 p' A- ?9 I7 L |
|