|
|
源文件中_Interface文件夹下WndField.cpp文件9 E! }# V" }" y; d6 `/ n# b
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) j% [' [0 B; A4 b X+ @6 s6 g4 L/ J
struct sItem! m5 _7 W- ^! t, \2 `
{
$ _2 D! |. F( p8 L* JDWORD dwId;
0 F# ^! z3 D' d6 h; f5 JDWORD dwKind2; H/ Q3 C: m& w. m8 i% U
DWORD dwItemId;
$ N4 q3 E( X) M2 Z/ Y" {& gBYTE nIndex;+ Y* h- F; N) ?0 z' Q" O: L! z
sItem(){
$ a6 s" M G) t% [5 u& R dwId = dwKind2 = dwItemId = nIndex = 0;
/ ^$ y O' E' k/ H( M1 t}& b8 f/ Z: @. Y7 a* l+ j! {/ @* K
bool operator < (const sItem p2)' }& z: n0 A% s" `2 b" U4 t- @" u
{
. E* X3 O `/ }1 q2 F) z if (dwKind2 == p2.dwKind2)0 U$ X$ i7 b3 S4 @1 D/ V; \' \3 N
{% b7 G5 T4 m. s( L. B% }
return dwItemId < p2.dwItemId;
4 g6 a- `. Y! J6 H' H% P }else{! w- T$ J- I3 v' }8 g
return dwKind2 < p2.dwKind2;4 M! J1 \2 x' t
}5 E/ B9 t5 v4 x; u4 |4 Y
}( L w% W# k9 `2 T
};
7 {) _5 x" w5 |class CInventorySort% t9 x. |4 v# w8 W/ `$ l6 A; E
{
$ | Q1 E1 G9 G& Q& |public:
9 S O9 Z$ f4 CCInventorySort()* m6 J. _/ U) W4 W9 g
{
2 R+ v1 @& j4 Y3 ^; T& _4 W m_dwPos = 0;
! g; }) X4 o4 r5 q) C3 ^/ m}" G% e) g+ ?) w) P& g
~CInventorySort(){}! \, `2 g3 Q P7 L" J$ ~ z
private:
$ t. h2 N5 C8 q2 i8 M$ esItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* M+ a% ]! ~; w' _: D BDWORD m_dwPos;# `: `* p, |! g. \) E
public:: e! @: m+ p8 g& d% I1 ~, X
void Add(BYTE nIndex)
) _& Y+ }- R5 o/ p1 c5 Z9 |# F{
) ], U3 C. x% Q# p, V% K1 f* d if (m_dwPos >= MAX_INVENTORY)
% _* @* M- c, r {! E" `- d4 Z8 ^, h7 f6 `
return;1 E; w: v( h' L8 a! ?: s
}* g/ Z' U6 u6 N6 l
m_Item[m_dwPos].nIndex = nIndex;, g/ g4 _. c( b
m_Item[m_dwPos].dwId = m_dwPos;# M3 X: ~4 B% P1 U4 ?, l' L
m_dwPos++;; l2 @# F! z7 }/ C5 P- ?' F6 B
}' i: N! ?! w" s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' }& N+ w9 B K3 J
{
! r n7 q! h0 |5 K/ U for (int i=0;i<MAX_INVENTORY;i++)" m# @) c' V2 C& E& [
{
C) x( ?$ D. J0 M0 A( ~, I if (m_Item.dwId == dwId)( r9 y- B) Q% s: P# u
{
( O$ Q3 {* x' t( U3 _$ X5 t return m_Item.nIndex;" z$ s! O4 d% N* J; R4 i3 c
}
" m6 H3 f# u9 }: \ }+ e4 T( d1 R% `. N- f- w0 J
return 255;
6 i4 B! c8 Z$ H6 O7 d' J}
+ P$ C' S/ m. O& ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! F) G: Y% t. ?6 y* u
{
. [ f2 r1 G9 P BYTE nTmp = 0;
s' y* W( s9 Y3 R$ T! T0 W9 P$ X bool bDest = false,bSrc = false;/ N; l, P$ }6 l1 K% V
for (int i=0;i<MAX_INVENTORY;i++)
7 R7 p3 e5 T: P" R4 {7 I$ a( S {" @. G6 L. B- K; |8 f8 a4 D( }% _
if (dwSrcId == m_Item.dwId)) J& a8 _- I! X2 b
{# H3 l- Q/ I @
//id相等 则 改变对应的dest和src
; Y- d/ e0 V6 F# }* r+ L6 f nTmp = m_Item.nIndex;
5 G: L# B |- [* j m_Item.nIndex = dest;
3 @5 ]: M% U$ C! F$ u1 r" J6 }) E, x) b }
: R. H8 s+ e8 {, r }. _4 m: ~1 o+ ]# s3 \4 w/ z
//临时数据保存完毕,交换开始3 G1 l9 Q8 t% S. s( G. n4 k
for (int i=0;i<MAX_INVENTORY;i++)8 q5 B6 n3 A0 W2 v
{+ X. d! t' V" r! l- Q
if (dest == m_Item.nIndex)& q0 G: m: O: H
{+ P2 T2 N% g7 \% ], o6 g
//id相等 则 改变对应的dest和src
! ]$ x# s7 R7 f; D- K$ [ m_Item.nIndex = nTmp;
* }& F6 U; N4 a3 d3 r" z1 R% ~9 q }9 S9 P$ P: y5 ~& N, g' Z
}! }/ g: M1 x4 Y. @5 I
}, s/ J1 M; V, ^- g# f
};
: H7 v0 e+ N" V-------------------------------------------------------------------------& z B4 D) }8 M; t, s
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ a' r2 \* A6 s6 ~& W# g6 [! l8 D5 s
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 b, l$ P; g% ?- H3 O
紧靠其上添加:
c8 J; K- }1 y# D8 x: Gif( pWndBase == &m_wndMenu )6 z- r5 Y( k" Y; ?! h. ~( b) `5 y
{
7 u+ v% N9 K+ A+ `2 P switch( nID )$ u5 e/ e3 g) g3 n, Y5 q9 U
{
# A, j* k- R9 j7 p/ j6 H! @ case 2:2 r' X) U. u0 w/ C
{
4 x- |! z! R0 S4 N //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 L5 f$ m& P' \) r: J6 O# ? if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! r9 \1 M* t( G1 S9 [ {
7 W5 Y3 Z+ V. A- ?* d% a+ [* ^ break;: a) N0 m$ N8 q. R& w; F5 c8 v. O
}. V3 G: h( S' [5 ^, c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 ^; i/ a" y9 ^ {6 ?& y G. s( X" b6 F
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);: F$ O9 m8 Y `& L# X! O
if( !pItemElem )' |! o" B) Q+ X; w+ v, h4 `
continue;- U( l! @( U5 |# p. M
if(pItemElem->GetExtra() > 0)
# I( ^- b! G! r# t6 c4 l continue;
* P3 L+ c/ a1 [2 [' h# e if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ( |) Z' K7 A2 A N. A
continue;
& y3 ~, z" w7 l' V0 ?& {$ W if( g_pPlayer->IsUsing( pItemElem ) ). B# o' m% [& o$ V3 t
continue;
) M/ K! a( ~ Y" W, n* a if( pItemElem->IsUndestructable() == TRUE )
* I3 C/ P. W1 s: f# l* v4 N. ~ {
: y8 y; C |" e2 Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, l) r/ ~. i% F. l# T
continue;
; a6 J* D2 v( ^8 d+ k }
4 ^/ F. ]* y/ a2 L) N* { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! G5 N, P8 @. N! q }
3 V, z) N# F; s, _1 N break;7 T: A# T9 F) F/ x' a
}
. d" A9 b9 D' q; _+ ^0 B2 E case 1:
( J: B$ ^* G- ^* M1 l5 R {/ I/ s0 q7 Y7 C/ u& w8 X
//整理背包
1 [: x) k/ J5 C //////////////////////////////////////////////////////////////////////////
4 X$ E: B M+ h% P9 f1 d- N) P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, Q/ [8 x5 j9 {& k$ K+ H; u8 S
//////////////////////////////////////////////////////////////////////////
. P$ Q/ Q+ S+ r/ h //////////////////////////////////////////////////////////////////////////$ Z4 M/ R+ E6 M1 x4 N6 p ]
CInventorySort* pInvSort = new CInventorySort;
% Y9 ~% w+ Z5 l/ h6 o vector <sItem> vItem;
' S" ]' ]& R; w( r) b3 U: L7 F. q vItem.resize(MAX_INVENTORY);//初始化大小, v$ l% m5 k- i, r# \
//////////////////////////////////////////////////////////////////////////
) R0 c5 R8 G" z! f0 ^! Q0 d //填充数据
8 v! Y+ V$ w5 m+ a for (int i=0;i<MAX_INVENTORY;i++)& G& f9 r+ \+ r) T5 e
{
" q# ?# i* H) V! o. O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ e7 W8 n( U/ } S ` if (!pItemElem)
. j( ?! N# j3 I* u1 d; ^6 j0 S {
6 C/ L$ p% e; q! G; b- J- Z8 B vItem.dwKind2 = 0xffffffff;
0 G3 e% y' Q" Y6 J vItem.dwItemId = 0xffffffff;6 |: t9 j6 A, \+ b& A
vItem.nIndex = i;+ c: P0 L3 m. _: ~+ I: {& U
}else {
4 A7 w; S9 i2 ]! c$ L; e$ a& y ItemProp* pProp = pItemElem->GetProp();
1 |( ^$ \5 X: b vItem.dwKind2 = pProp->dwItemKind2;
) {7 `5 g+ \& q2 N8 Z3 I" n vItem.dwItemId = pItemElem->m_dwItemId;& O5 N: N5 p4 u9 A0 B7 [
vItem.nIndex = i;
' n! O) Y1 C/ Y! g }; C0 G$ x5 b6 C4 Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 [ M4 `% u9 I; o- X2 Z9 Q% x0 o& g
}, {0 ]& h8 j0 t* n* y0 f- ?/ z
//////////////////////////////////////////////////////////////////////////# U* \. R5 `8 c, [; m9 t' |
sort(vItem.begin(),vItem.end());//排序
$ s% A$ R: {. [3 D6 {; C$ O //////////////////////////////////////////////////////////////////////////5 M9 M; P! i$ h* K; e( D3 B
//交换9 H8 A; T$ p, G! d( n( P
for (size_t i=0;i<vItem.size();i++)+ q! \7 n$ `) N) Q1 D: t. w; \& A
{
! p2 N& ?( {( r& A; Y //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" p: W2 l2 @) t$ N pInvSort->Add(vItem.nIndex);
! D5 D4 [0 H5 s! o }8 z& | L: p& w6 Q! U9 r ~9 j
BYTE nDestPos = 0;! f/ P) F& [; N f
for (int i=0;i<MAX_INVENTORY;i++)
0 h. E( A& y; V, S {3 W1 [8 v" O `" D' \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& D8 h5 ~6 E$ t! X( K/ |; `5 i
if (pItemElem)
+ @& g) ^$ K0 Y {
|& T5 l- m) ^7 h( L* H if (IsUsingItem(pItemElem)). W" ?9 P% C2 @% W: N" t8 R
{
( j% D& C* g: _7 f9 Y% ^: L //这个位置无法放0 P2 _" a9 A3 ~$ G; ^% J5 F, w6 w
nDestPos++;
2 X& b1 u' O5 f4 E9 S }
. e, l! T G q% m" p6 q$ g* h }$ |8 h+ V* [. U& ^
BYTE nSrc = pInvSort->GetItemSrc(i);
+ T( V& { @1 j0 @1 ]* C" N/ A pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
: w5 B' a1 F; P, m if (pItemElem)
) E) ?# _4 T+ X7 r4 C { L/ N- H( ?# ]7 m: k
if (IsUsingItem(pItemElem))
$ `% o9 q) {9 W* s* t {( W/ }; ?4 Q* k' j7 x: p
//这个道具无法移动,跳过7 T! _ u8 \( Y# C- s/ I5 b
continue;' ]7 e6 ^9 ~- D' L/ Q8 y
}4 y( X0 i4 z3 X; B6 v0 e
}else{2 W' d- ], }2 ]0 _* t1 C7 U
//空位置 不用动
) v5 A, w- u* K8 P+ Q" v; W: H continue;2 w |; B7 x! A7 L0 ]" W
}
- n L: b! U, E0 j //////////////////////////////////////////////////////////////////////////
8 v1 d& w" _' g6 S/ k$ g //开始移动
( l, J' b0 a: R4 G; e if (nSrc == nDestPos)
4 v8 i& G+ O6 e5 |3 ?/ i {3 G5 {0 l: _$ r3 |! A4 |, c
//原地不动. |$ F- ?- A. k: Z7 f
nDestPos++;0 I* {" v: }- k5 D. r6 D# P8 x
continue;! M, s# Q- H0 n" o/ ~% { [
}6 `7 _7 Y. o- _# K9 ^ T1 G; o
pInvSort->MoveItem(i,nDestPos);
3 ]9 a( ?8 w. ~ o: i9 P/ M g_DPlay.SendMoveItem(0,nSrc,nDestPos);' S# z" ?+ n* m0 V0 h ^
Sleep(5);! w! U: @% V5 Y8 [/ u0 q$ D2 q! X& [
//Error("移动 - %d->%d",nSrc,nDestPos);' }5 n- s5 w: v, _6 o! j" T/ A
nDestPos++;' c, a# a" x5 y2 R) _* C. y' `
}; }$ m) O1 ~7 x) a/ g
//取第一个元素的信息
5 c3 C! m( k J+ F, m3 @ /*
: s' {/ o" V! O% h; `0 n if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ C4 k; L9 B& A" V/ i6 ?# G
{
* E0 m( n* G! K Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ m2 I/ E/ [ J( ?
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
0 O1 Z* M3 Q) a0 S }
6 T' D: D7 ]# S* }. @( m */1 n& M& O5 f# W3 k" S3 T* W
//////////////////////////////////////////////////////////////////////////
' t; ^2 N: ?- ^& G break;
7 ~+ b+ T; ?7 r" u/ {9 G( L. x }# B6 y6 n7 u: C, D7 i4 U3 i
} 3 t/ R1 Z7 u1 v) C/ \7 i
}( d. @" M6 O0 x4 M; y l; I) Z! w
m_wndMenu.SetVisible(FALSE);) s& X5 B' C9 ]0 v4 M, L
7 `0 w! \' i/ D
--------------------------------------------------------------------------------------------------------6 o; K i. z, s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ n1 H2 L6 W# X
{
9 i6 G- s L6 w% bBaseMouseCursor();1 D' o4 @& ?& R* U
}
+ l8 P: w9 }( a$ H) B, p0 v8 u7 B在其下添加:
5 w5 s0 t; E \# P, Lvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 r5 W! s9 e7 n2 q: ]{7 R; M$ Q0 j& C% }
m_wndMenu.DeleteAllMenu();
- Z+ S4 x' N! Pm_wndMenu.CreateMenu(this);9 L% y7 R$ ]! a
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# s$ `0 s7 o, g5 Y8 o& O# n3 ]6 u" t) J9 Y# E7 V, z
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 N! n% n: V; `+ B$ |
{
4 W; Q% U3 O/ J0 ^* [3 v2 A //P以上级别才可以删除所有道具) |4 S! {* }; N+ W4 v8 E
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; H- r* n4 J; H}+ P, R, v# @; {9 \- l; p8 R9 y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
9 t2 i) a$ [. [" y; U; J& \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, I8 ^+ k. y! e j- l# L4 f6 Um_wndMenu.SetFocus();5 o$ @+ n" |2 r7 r$ x7 x* H& P; _
}! V% e7 a0 U: `7 ?
------------------------------------------------------------------------------------------------------------
0 @ @+ i3 ~8 h" m0 {4 A*************************4 g- t$ V6 U6 C6 w
WndField.h文件/ m F4 J) `) V( v& U) n5 v( `0 D
*************************: E- J/ k3 b* C! l8 r W2 L% |
搜索:BOOL m_bReport;0 {' O5 c' W- |" S3 m
其后添加:
7 ?1 x9 { }1 x4 J* h3 H+ KCWndMenu m_wndMenu;" N3 M7 Q j1 f) n4 T
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# S4 N- E O, i, S6 C! A其后添加:
! N/ h! d$ z1 B8 u; |" f7 a) mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 S1 ]; @4 X' K) Z0 ~5 F' z. z
9 i0 q* |. `& U5 Q4 y( c
3 g6 }3 H1 E1 x/ L w6 |+ q |
|