|
|
源文件中_Interface文件夹下WndField.cpp文件# ~% M( I1 Y. [+ S: I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 n$ M4 n* D1 `0 K* U
0 \( Y* P( N' K b5 v1 }8 sstruct sItem+ ^; W# M2 j n6 { P+ e" p9 K
{
& _' q2 ~1 U+ EDWORD dwId;
/ Q' l) K) v1 N4 h: FDWORD dwKind2;6 ~/ K7 u6 l, _/ m
DWORD dwItemId;
) g5 I; S0 E* e6 X8 X, Z7 YBYTE nIndex;& d) J6 j+ n) L( i& y
sItem(){. q5 U& h) D* R. W
dwId = dwKind2 = dwItemId = nIndex = 0;0 d4 u4 Z T) ?' W" j
}
8 K' _* J/ {. S; s$ o' p6 k) ubool operator < (const sItem p2) A% Q. v1 s' N, ]7 ^
{3 O: Q. X3 o Q
if (dwKind2 == p2.dwKind2)
1 D, I4 u8 Z$ t {* K! a: O% t+ M$ B
return dwItemId < p2.dwItemId;' u- s/ V! ^/ ^/ M& {8 g
}else{
* @* c v. y$ i, H4 P* r return dwKind2 < p2.dwKind2;
8 s0 a! S" e j: E# | }
( r. X& {3 ~; _) j}7 W- l& T4 V+ i+ y; i1 @1 }) J
};: P0 H) R/ \" j; Q
class CInventorySort( u6 |1 ]8 E! K3 F+ r( k
{( e: Q1 |0 m! l6 F* h+ e& F
public:4 l5 X2 C, D7 s. y
CInventorySort(): N; c" ?9 l/ q8 |
{1 G! o0 i5 R# r! ~
m_dwPos = 0;' P0 I' h/ m0 j1 a" e! K, l
}
, u8 E( f& h: e% L* V~CInventorySort(){}
& B- v; o& ?' e) `7 Aprivate:1 J4 r9 |6 Q- R5 \# n* Y; F& @+ i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" p% b$ C3 H4 b: b
DWORD m_dwPos;# R3 J3 \+ _3 y: Q
public:. E8 L9 X u2 A1 m8 @( E" p
void Add(BYTE nIndex)$ H. a. t! s; t. O* F, B
{
2 ~6 `1 N2 U+ c& r N if (m_dwPos >= MAX_INVENTORY) ?. B) s, v0 h3 R; g( `! G
{9 |9 ]* J/ D7 B p' g
return;) Q7 h5 Y# E4 h; r
}# L# ?8 a& b. f7 t7 A/ F# p$ m ?
m_Item[m_dwPos].nIndex = nIndex;" N" i6 I6 ~/ @
m_Item[m_dwPos].dwId = m_dwPos;" l, b) u0 Q- c+ n
m_dwPos++;
% o! I$ d9 X* R* e p& U+ G& }- C/ c1 j) A}
3 g5 x c- Z5 { rBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
- y1 q2 ~ ~' L B; V. |) h{
. \- O, a; l& v for (int i=0;i<MAX_INVENTORY;i++)7 _6 {- r, e4 P3 ~5 R
{* _' I2 g; o% L6 n) r
if (m_Item.dwId == dwId). K, t1 D+ ^! k; e4 R# M" ~
{
. {, ]) e8 q5 F) g% P% } return m_Item.nIndex;
3 L2 u; M" n9 { j! V* a }
6 B6 S4 }0 c9 z B1 }8 I }' Y5 P( ]' z$ }2 B- X, K$ g) m& W# a
return 255;
+ o7 i7 m" [- ^% ^7 H; N3 k; V}
- y# D7 ~+ y) E3 M+ t8 K* Y, ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! ]7 \. |% J$ n! L/ p1 G{
7 k2 u9 q9 W- m) V- W BYTE nTmp = 0;$ u6 y) m! _: l# @$ y! p* g: I
bool bDest = false,bSrc = false;
: I% g+ |. ~ A6 [3 S) v$ E9 R2 }& L9 [ for (int i=0;i<MAX_INVENTORY;i++)
1 F) D( w+ O. _# P2 u% T {/ }4 k: D) E' e- i c5 H- k
if (dwSrcId == m_Item.dwId)
5 J8 q3 e$ Z V' q {
# V5 E/ `; }/ n1 l. W //id相等 则 改变对应的dest和src D& d7 A1 d, P% v
nTmp = m_Item.nIndex;& s! d2 ]5 _1 o# h) {: s$ |
m_Item.nIndex = dest;- k( W/ K' z8 Q0 O7 G; O" S
}4 ]! C- p! |' }; {! }5 `/ c- V- F
}
) @; s; {4 q3 T7 R: E+ q# Q! i! ` //临时数据保存完毕,交换开始* d* ] @; }* e( k; c
for (int i=0;i<MAX_INVENTORY;i++)* ^2 D/ o/ U! w4 F# x' Q
{
( E9 Z' |5 E0 ?0 ^5 o8 q: ?; C, [$ q$ N if (dest == m_Item.nIndex)
5 k/ Q( s: l) a! o5 \ {6 E Q, g5 X! K( ~$ F- @& W
//id相等 则 改变对应的dest和src: Y9 Y- L: v4 W& l
m_Item.nIndex = nTmp;2 U# m% g# B; _# |5 t+ K1 z# X
}
. }! z* J4 H5 k& W4 Z }
% u- G$ C5 r4 E( _, ~0 F2 D* }( t}
5 ]# W9 ~, L! \1 k8 U" z" [};/ ]( t) M2 w$ ]; d
-------------------------------------------------------------------------& ]7 S1 [2 F4 f9 L7 ?
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ?! O: b3 ~0 H$ f& B
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ s, C* h1 j- Q- S2 [ P
紧靠其上添加:
$ T2 v; J! \7 xif( pWndBase == &m_wndMenu )+ u/ _' m9 b5 U) w% W+ W5 v3 J( o8 E
{. `: r* {( G* m( J; `
switch( nID )- x$ R7 t) I" q5 C
{
. ]0 _4 N* t2 f* o, a! c case 2:
* D% v' R% k: y2 K7 r& f2 K {
) K* x" }) N. u; X6 Z" e8 B8 d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% `2 a- N7 C: w l8 Z) ]; @# g( f& u; } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! C. W5 P& V6 a/ I4 I* w { C9 k# K8 t+ a6 F
break;2 d$ K6 x8 B" c- T% O0 R8 l
}% \7 }2 X3 F1 l) w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++), r" [4 n( h2 E7 ^
{0 h- @3 j- k, V8 ~8 H% }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- G* @4 s: U' `% i0 J5 X* V, Y if( !pItemElem )
# \* S4 I2 x7 h# X+ u0 @ continue;
+ L( P4 B) J6 c# B) t, b if(pItemElem->GetExtra() > 0)
' ~$ B- o4 X5 N- h8 H( `" k# |* ^ continue;1 z, z: N1 F4 l$ N
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 `' S; o8 [7 O continue;1 g. D) c3 {: Q D8 d: k; q
if( g_pPlayer->IsUsing( pItemElem ) )
' S' p7 r/ E* q) f/ B# G9 Y continue;
2 @' e1 \2 l' s# i4 y7 E. F7 t if( pItemElem->IsUndestructable() == TRUE )
6 {0 r6 D5 B3 E {" ^3 Y) X# Z6 m. }* o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) J5 @/ P7 C% y( C$ ?4 F; A continue;' F$ g. V( n$ t2 L1 k& E0 K
}
3 l& e) b/ u$ k g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); \8 Q6 N: Z% t8 |
}/ w" m9 K% }% j9 a8 |
break;
$ P% H# o# O+ o3 |* i2 \ }# s4 H) b/ b5 r9 ~
case 1:
9 u4 D1 I4 @& | {
- a2 |) N0 B" r; F //整理背包2 {" ~5 R |1 b( T/ ?6 I5 v+ v5 s
//////////////////////////////////////////////////////////////////////////
( m2 E( g) K. ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, a8 {4 {; I1 I! {. P7 t: M+ Q( E
//////////////////////////////////////////////////////////////////////////
% O* t; d, } Q9 U //////////////////////////////////////////////////////////////////////////
+ r3 Y8 V8 X' e' I CInventorySort* pInvSort = new CInventorySort;
, H- O/ ]. c/ u" Z$ Y9 D, z vector <sItem> vItem;
0 g4 ]9 p" x7 Y* H vItem.resize(MAX_INVENTORY);//初始化大小0 F* L! |, J: A! C! ]) o3 E# m% Q
//////////////////////////////////////////////////////////////////////////2 E8 ]6 @ t9 ~) {7 b
//填充数据
4 l9 p7 w: S4 l, }9 ~& | for (int i=0;i<MAX_INVENTORY;i++)5 C$ d9 s; E5 R- p6 ~
{
4 D7 \/ M6 a' R f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* Q# Y5 `; P, c8 v if (!pItemElem)! V E( C# P4 I6 J
{
, Y( \0 n0 L; `% H* { g4 s vItem.dwKind2 = 0xffffffff;, a7 }' V1 H3 S
vItem.dwItemId = 0xffffffff;* e3 ^: Z& g, n( l# y3 M8 ^8 Z. h
vItem.nIndex = i;' _! @7 k" C1 \- M! o1 d
}else {( D* s5 D5 n$ S9 C
ItemProp* pProp = pItemElem->GetProp(); w7 y4 z0 i) v, X# s" v
vItem.dwKind2 = pProp->dwItemKind2;' z9 q( i2 F f" `
vItem.dwItemId = pItemElem->m_dwItemId;
- J- W5 m. E& n4 U vItem.nIndex = i;! m: a% W/ W$ H4 x9 ?
}% d& ?5 j! y" Y5 q3 Q
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' b/ \4 r- @% C+ A }0 V: Y/ |2 Y) h; i
//////////////////////////////////////////////////////////////////////////- R; V! F+ @" \' C& F7 Q: y
sort(vItem.begin(),vItem.end());//排序
5 X( V6 M0 Q: u/ p$ _% A //////////////////////////////////////////////////////////////////////////
D" l: s# r" H) q% u* }! U% ? //交换
8 r# m% {1 y9 ?) p$ f for (size_t i=0;i<vItem.size();i++)5 s3 b- Z% d1 A- h$ E0 D+ p/ b/ ]6 Y. L
{1 N1 Y& v' @7 [1 J/ r4 U* j: s: T
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' T2 ], I* L4 @# V* C% z @) _
pInvSort->Add(vItem.nIndex);$ d( `8 _0 c# Q6 `6 C
}
. A% q8 B) z9 s2 {) p" G$ b4 h! V BYTE nDestPos = 0;
$ v9 E7 @5 g, N# b for (int i=0;i<MAX_INVENTORY;i++)
5 v4 T& I7 I; [7 h1 {" ] {! f: e7 L% i4 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 j, y4 ~+ P* s& ~! z
if (pItemElem)" }8 x5 G8 |7 w2 K. u
{4 D3 ?" c- V3 ^( [8 K# p/ ]
if (IsUsingItem(pItemElem))& z- f$ r; L3 L$ _7 R
{8 F8 l* } G2 y4 f, H
//这个位置无法放 q) c6 g- y( ^
nDestPos++;1 W6 w8 X/ \& d
}0 B; y7 J6 p1 c3 p7 y. E6 Y. L
}$ f* I/ k. @/ c% t0 v3 r% G
BYTE nSrc = pInvSort->GetItemSrc(i);
4 m2 T( c% }2 v! w& r a- ]- M pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
Q9 u2 n* G, f* p' B: F7 A, o if (pItemElem)0 ^, y( ~8 j- c) r. C, o! z
{
z. E: ^3 ~4 ^& I u- L; j if (IsUsingItem(pItemElem)). ~7 ~, _5 w) j+ D2 m6 P
{
' L: Z6 E" V- m //这个道具无法移动,跳过
! Y% z F# ?* X/ n c: p, Z% c continue;: o( [: K l$ m$ X) A
}) y7 [7 l: K$ K
}else{, T( D( F1 }9 k1 r z" c
//空位置 不用动
, K6 u' F4 A$ C$ @* _ continue;0 }; t' w' l4 j# F/ t1 \! J1 m! C
}% A3 T* r7 m5 l, I: ^
//////////////////////////////////////////////////////////////////////////2 s$ X( C+ N; }4 J: ]6 m
//开始移动
# ~& Q6 ]' F1 n% o, w7 H$ z6 A! m if (nSrc == nDestPos)
& O$ C9 D$ x- l( Z( k {+ x2 y+ {! n# B, C- G, A' q
//原地不动
- N8 P9 u; s X. y nDestPos++;
# @7 ^' K5 c# \' y' \* l: \ continue;% M! A) [6 r, T0 }1 p
}7 R8 e% s: D: g+ Q8 d2 E: h- \# ~
pInvSort->MoveItem(i,nDestPos);. F1 K; x: y; `% F
g_DPlay.SendMoveItem(0,nSrc,nDestPos); Y6 }$ o6 z1 w7 t" V
Sleep(5);
+ n1 S' W7 S/ \ M( U T1 F //Error("移动 - %d->%d",nSrc,nDestPos);
! E% M) t& ]0 f0 m0 y2 A nDestPos++;
5 }& Q& C& G" e0 W }
$ b3 a4 g/ Q7 b //取第一个元素的信息
) p0 c1 n% d# g% _, I. [/ t) n /*
5 p/ S5 c8 U/ D- K if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% K# N6 p2 C0 f; w' Y7 g. v {2 O$ F- O/ B" }1 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& N' Q4 W9 F$ O" `: H+ X P B g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- ~- Y* {/ M% A7 D4 P2 Y
}
, \ u1 S% L, n A */! i# _1 Y$ `" P% {$ K3 i* y# M8 @
//////////////////////////////////////////////////////////////////////////
3 ~5 o& O2 a. z( k break;
$ A9 I! H7 g: g7 O' D, e4 s2 w }
6 Z" ]5 I5 a) I Z9 W } # v& p3 c# [! W% C. M
}
) q' h$ w0 n. Y! ^m_wndMenu.SetVisible(FALSE);
! m; z* T# ^1 a3 ^' `/ c
1 O; E, u# O3 K, H. ~--------------------------------------------------------------------------------------------------------
" w( l6 h1 [! e+ N搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point) h0 F0 I. k+ h6 V: w& ]* n
{
# u% f5 j" ~# KBaseMouseCursor();) ^- n! }; u9 A p$ O
}+ o- O: B7 d9 b) |$ a1 p! ?: A
在其下添加:
$ Q2 X" D8 g3 T5 [. j3 Rvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)- y+ v/ X- O. ]. v
{7 e% [) s0 j7 y. a8 f; m
m_wndMenu.DeleteAllMenu();! o% |* p) M7 w6 g3 ?% R
m_wndMenu.CreateMenu(this);. s5 G, f) M7 b% I/ B6 o# F
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 u1 ?8 `& J! v% G# O
, }, V4 N9 s# _! rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; u8 u; W3 z% A{5 k. B5 k U! F6 ]
//P以上级别才可以删除所有道具
7 B4 P! O5 z4 i- D8 L. m1 z! Q* Y0 S7 s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
4 b! p& v3 w6 |1 `, A}% S* m+ [1 v$ ~4 h( `
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 N, g! C) k9 Z
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );/ L" b) _# U8 c" ^) x6 |" a2 s! e
m_wndMenu.SetFocus();8 o- m9 A: B- q, X9 l l. a- o
}2 R* e* y) X5 T) e2 H5 z
------------------------------------------------------------------------------------------------------------
" u4 f( P3 B% S- R*************************
7 L6 E4 o7 v' e) wWndField.h文件' D9 J' ~$ Y. l& a
*************************
+ m3 F1 U5 l ?2 j搜索:BOOL m_bReport;
( `6 U/ x, k' B. Q: |其后添加:% B, o' r: `% c; \6 L+ Y, Z
CWndMenu m_wndMenu;
& ]$ b, Y+ @2 |$ j W) ^( H; U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 h9 ~2 b1 b; n$ p. T9 m5 W% k其后添加:
- Q1 y' ?+ B& H! o/ k; S; V" lvirtual void OnRButtonUp(UINT nFlags, CPoint point);" o0 Z; h9 F! J6 ]' p& ~7 X0 A
% X4 E; X- L5 ?1 o0 |$ o
5 L" l' ~3 f" _$ |% |) K0 f
|
|