|
|
源文件中_Interface文件夹下WndField.cpp文件 O; M# M p" }' m q
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 Q4 J- G- O' v
# b8 Y- c5 ]5 r9 H' m1 L) astruct sItem1 w' x, f. W+ u
{1 M9 Z$ s6 S& w1 M7 ]
DWORD dwId;
: ~* S1 z; Z$ qDWORD dwKind2;
/ f5 J' Z+ c; d' Q1 \8 kDWORD dwItemId;- l& D2 H, ?- B+ F- Q$ S J
BYTE nIndex;
9 D& r/ H! ^# r0 M6 V8 jsItem(){1 `" b) Z1 L* h4 D0 ^4 s
dwId = dwKind2 = dwItemId = nIndex = 0;
% u+ y+ J4 R/ \: j* J% L}! ~& G) a) B2 m( Q: J7 x* B5 s
bool operator < (const sItem p2)9 R* C9 M( Z. j: q+ h
{$ s; E' Y3 w. R5 l" Z
if (dwKind2 == p2.dwKind2)
# T1 Y! J/ W& T6 ^! L {
' {+ Q! D2 X- h3 U( }& u9 J/ p return dwItemId < p2.dwItemId;
0 Q# x3 u% j$ h }else{
* H5 m- j% v/ E* o y return dwKind2 < p2.dwKind2;/ R# c" p, ~* I% p0 j
}/ J: F3 n' W$ p% W2 n: w
}
* i5 J7 e X# f( v};
5 j3 P. w% j! {( ~class CInventorySort
& j' ~; N6 a; V& [6 h{$ x' H4 q8 S( k7 P
public:. c6 g/ F2 r4 a3 B; @+ x
CInventorySort()6 b6 H# G& n' O1 V' f x" y
{
' {8 W& c6 ~; ^, d; S3 V5 { m_dwPos = 0;( F# ^' Q) q5 i& J
}* s; d. |9 ?; A
~CInventorySort(){}
3 V) o; G* [* Eprivate:9 X) e( |$ g/ B" c* S. G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" E$ V i1 r2 P$ P
DWORD m_dwPos;+ T) N: ]) H2 h# L- a% C- Z% `
public:
7 T& B T& R/ D9 c6 T3 p; ?void Add(BYTE nIndex)
) a* V) T( W% B$ t) J9 M9 T! F4 v! O{
d* E6 H9 S' [" m- b8 K if (m_dwPos >= MAX_INVENTORY)
n: c* ^3 O. L! J) ?! P9 U( Q {* r" b$ R3 Q/ o; _& w
return;
$ w- e. b( i" l9 Y! v; e }
6 t+ F) E* C$ S- O! b, }& i5 ~* c m_Item[m_dwPos].nIndex = nIndex;' f) k; d, y0 c$ @% e5 Y
m_Item[m_dwPos].dwId = m_dwPos;4 w9 a" Y: j x$ L$ F
m_dwPos++;8 [- h0 S7 c2 j6 O+ |& ]
}
$ ]! }* {& w6 zBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& t8 O1 V% k! Y8 U/ n1 g
{
9 x- ~0 ~- [! \& C% v for (int i=0;i<MAX_INVENTORY;i++)' o; C. |" W) z. X- k
{
" U" g0 P' X* t& }$ Q8 J if (m_Item.dwId == dwId)
+ k( D1 o# k `' M7 z4 u {; F8 H @& \) E: y0 P* @
return m_Item.nIndex;6 S' [7 ?/ V" a3 E2 ~: i
}, f. q9 Z1 U0 p/ u
}8 W# Y' G j8 \/ S/ o0 r9 f: r
return 255;
2 P7 {, Y- U& J8 V0 Q+ \}
. B' \: _, d$ o/ k8 z9 H- P0 }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 t0 i: @- }# e$ v s{! {2 E/ y' N# c. }
BYTE nTmp = 0;
* B# o8 z+ V" k- z bool bDest = false,bSrc = false;
( L c" s q/ b6 x* I8 q for (int i=0;i<MAX_INVENTORY;i++)
7 o2 z! U+ e* _7 S" [4 r {
4 f- W+ o( _, { if (dwSrcId == m_Item.dwId)
& G7 ?/ T/ @' R {3 u' {& o W1 {+ u& O& E
//id相等 则 改变对应的dest和src% r9 o: U' a: k7 V4 u% X& x2 a1 U: }
nTmp = m_Item.nIndex;, D5 p# q0 S. @# h5 h6 c
m_Item.nIndex = dest;
) B8 b! J) U1 Q9 w: n9 b }
$ R: H L3 n. q' i! K3 I }, w4 ^' i5 r. c- T
//临时数据保存完毕,交换开始# u' m9 W0 x9 R
for (int i=0;i<MAX_INVENTORY;i++)
1 \7 l9 @# J9 Q5 ]& S7 @* X( w {0 ?6 }% N" X( w' O& k. D5 ~
if (dest == m_Item.nIndex)
( w/ m5 y: Q2 S( f6 p {6 N; f) [: a( `0 d. V
//id相等 则 改变对应的dest和src7 a! _6 g7 n; R9 i4 e7 `
m_Item.nIndex = nTmp;/ N; |& C9 ~/ g+ {# r7 ~
}; N$ m- |% L* h- `3 N. m {
}9 b( B; j! N7 F( K/ Z+ R' k
}7 u& i% l2 z' a4 @$ m$ `; m* h$ \3 x! v
};
0 B( d0 y% L$ `-------------------------------------------------------------------------
! b/ X0 q, M) W6 h2 B% G y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 c" U& k1 @5 H( A1 f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 s6 M! x, u4 v0 n, B2 W紧靠其上添加:7 G* ~! F- W' @1 K' ~- W
if( pWndBase == &m_wndMenu )! H/ V* h, y# S: B
{) ~3 b/ z: M0 s! J1 b
switch( nID )
: E7 W5 z' g, {: ~# k4 j/ c {6 [) b1 g. h# ]: Z
case 2:$ T$ m( b4 C5 |) P' ]8 d5 R
{7 X" w) O& S2 l, m1 W. H& n8 `3 L/ k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
7 {( ?8 g! F* b- }! V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) W$ P' Q! H m5 P4 G" f: A {
2 O$ U3 J& _! X) t break;/ F4 W* g2 d' ^; s. ]4 S
}
& I) v5 u7 D8 F: f for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 q2 F O* E0 `1 x" u+ j
{
r+ ^$ e1 b! }. D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% l. S' Q, P8 W
if( !pItemElem ): t! `5 z" j6 Z# o; Y) x5 w
continue;& j" i8 _: C$ s% T v
if(pItemElem->GetExtra() > 0)' p* Q3 F3 A& I9 k& ^
continue;; R5 s$ l9 D: l) r- X, [
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + U" M7 a+ ~: j$ H5 `: F0 m
continue;4 v2 w. C z4 T \
if( g_pPlayer->IsUsing( pItemElem ) )- Y) l& h6 d( {# T
continue;
1 h" e9 y, p7 Y& |7 L u if( pItemElem->IsUndestructable() == TRUE )( E* {" O" q \8 z$ v3 b7 `
{
$ z- }9 f2 C8 e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ ]! [) P) X, w! z/ \$ F
continue;
1 N: |- h1 o- X/ W% | }
: H+ c; b7 o3 F3 q- ^ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& D) I- x9 S* ^. w9 l, f0 o, o
}( n: h& r) q& A s; c
break;4 x2 O& C6 T! S4 |' M6 N9 p0 M
}. ?6 t% {* M5 C+ S! s3 k' V
case 1:" r* n9 Q' x- n+ Y0 T# Q
{
1 S! A2 \0 t' Z //整理背包$ ~0 t6 x3 o( C& A; T. S( Q
//////////////////////////////////////////////////////////////////////////
5 X ]& z2 y* @/ P+ h) }: u //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
* A6 g- a3 Y/ R5 l- c //////////////////////////////////////////////////////////////////////////
3 w2 N3 a$ T6 C: Q //////////////////////////////////////////////////////////////////////////9 E! ?1 @% U1 `2 F0 w
CInventorySort* pInvSort = new CInventorySort;
/ B" ]7 L4 V) j4 e$ k* N vector <sItem> vItem;
, l0 f/ e+ w% b5 O vItem.resize(MAX_INVENTORY);//初始化大小
6 n% w( C/ d: b //////////////////////////////////////////////////////////////////////////% `* N! p6 c% A
//填充数据
2 ]* V+ J% L v, {- c. `+ {3 } for (int i=0;i<MAX_INVENTORY;i++)' x% h8 ? U& K9 p* H
{
% J9 x+ [2 K% E+ i9 A2 L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ T6 T3 b U/ C! t5 s if (!pItemElem)
; C$ z! D4 ?: m7 n( ?$ ^ {
; Q3 P2 S; U e( l- n1 V vItem.dwKind2 = 0xffffffff;% k% z: S) J+ @" A) w
vItem.dwItemId = 0xffffffff;
* `, M3 Z& y+ x vItem.nIndex = i;
: x8 p8 G3 n7 h' v# W/ I6 u) O }else {
' |5 Q1 f8 D# N9 c+ ~2 O ItemProp* pProp = pItemElem->GetProp();, T, G& }, S( j! O
vItem.dwKind2 = pProp->dwItemKind2;# `5 r' A5 B9 S6 K& x& @6 x9 Q4 L+ j
vItem.dwItemId = pItemElem->m_dwItemId;7 M- y% Y' @. f, P& I
vItem.nIndex = i;
$ R; O+ O- w4 J5 h! P }
9 s9 l1 d4 u- m5 b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. l* b$ M9 _4 @/ n" Q }9 A3 F! @2 g; V U1 {
//////////////////////////////////////////////////////////////////////////
( _: ?4 o. i; }2 u7 R sort(vItem.begin(),vItem.end());//排序9 Z5 y, v/ S1 [8 j! c
//////////////////////////////////////////////////////////////////////////" Z( }( | s3 w9 g. W: ^3 [9 c4 ]
//交换
" O# l+ S2 j/ i* K for (size_t i=0;i<vItem.size();i++)" z& l% M5 n; l7 N: J; u+ ~- `' k3 j
{; a6 \/ u% y; H* A; S6 f
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ _! h# V8 Q. `+ d
pInvSort->Add(vItem.nIndex);* ^ n% E6 S5 @8 |* q' _) d* L
}4 G; W1 [# F) x: y
BYTE nDestPos = 0;+ A' t+ {* r* u, e+ V
for (int i=0;i<MAX_INVENTORY;i++)
; {4 H" p& X: F+ k7 h$ X {
O- }: U( _* G CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);7 n9 R+ J& [1 m+ |, w
if (pItemElem)
1 s& o, B$ c( u0 f. B {! z) c$ x: D( F1 K. B7 o% S
if (IsUsingItem(pItemElem))
7 r4 D4 @" |/ f' @9 C! B: b! h {! b: B5 I8 s% { O; P5 P/ W, W% B
//这个位置无法放$ v' O" L! `; L' y" Q* P9 x
nDestPos++;3 w0 }* u3 U* I2 G
}
) m( Y& J' i w! E" y }$ i; e5 x- \. y
BYTE nSrc = pInvSort->GetItemSrc(i);5 B& T$ Z- T( o' t/ C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. s, ~: w6 w! S" R% P
if (pItemElem)
2 w7 Z# \) E: a' E- Z' Q% m/ c {
. @- n% x# ~3 Z: C' Y; e if (IsUsingItem(pItemElem))
' r6 c3 n8 l7 A3 ]+ F+ h4 i+ _" ]" h {
' S$ ]& K! ?7 V' z* M0 v( p //这个道具无法移动,跳过2 t9 C& A( J; O' F
continue;
2 J% \7 B; R6 x" [ }2 \- d Z: ?, B/ O0 } c: Z+ H" H# [- X
}else{: H! r6 a' {' C# `3 Y% s
//空位置 不用动; P: Q- j7 ^+ |$ C8 l
continue;
1 V& _8 f% u/ V, I. ` }8 k3 E2 I, N% m* |/ {
/////////////////////////////////////////////////////////////////////////// r' `; T5 g0 _ i
//开始移动
1 m. @2 d9 p2 w) \# q! g if (nSrc == nDestPos)4 i( {' ~8 X$ G% s
{
2 ]8 W. e1 g/ i. L! b( I: r" W6 ` //原地不动
$ u4 w+ |; V4 } nDestPos++;
/ }; ~5 r/ k+ e+ k& E6 x) u continue;
- D0 J( u! }% ]$ b8 Q' e, ^ } Y- J; `+ s: ^( p
pInvSort->MoveItem(i,nDestPos);
8 G0 m( l9 ` Q g_DPlay.SendMoveItem(0,nSrc,nDestPos);- u1 k( b* g/ q, n& ^, p
Sleep(5);' F; W+ l7 l1 O- j5 n$ ^
//Error("移动 - %d->%d",nSrc,nDestPos);2 }- c2 W0 N4 r, _2 T
nDestPos++;! Y/ X8 X7 ]1 X L3 C
}; z1 G3 M9 S. N3 U# [
//取第一个元素的信息- S5 Q2 A! u4 u
/*
' b4 ^2 r3 i t+ Y! Y0 S if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 u+ N7 C6 {! A. C {* s* _" a* k2 a: \) F% M9 y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 O" U! i" a- q9 S z# }1 e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- T0 V5 [, D* ?9 E. g }
! S }2 s3 R- l& m9 F0 g& X */
0 `- i: u$ n+ ~" E g5 D //////////////////////////////////////////////////////////////////////////
. V* S- h8 `" g3 ]- t break;
6 Q3 J# |" `: ~ }
5 }1 W9 ~6 b+ x1 e }
+ H* X* E8 C- E3 O" C0 P7 g}
) v+ ]. E7 V: Wm_wndMenu.SetVisible(FALSE);
/ V& ?: ^( n# s) c l7 g5 o% E* b3 [5 a" x5 f
--------------------------------------------------------------------------------------------------------
" s/ X. Z2 e7 k2 L* ]6 w! k搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( ]/ a# M; ?$ T$ F{8 r$ h+ `5 c+ e0 [! T2 Y' X9 O
BaseMouseCursor();
" y' B3 U( A$ y/ W; c' H$ Z* b}$ j Z$ ~7 k1 e& |! A7 d% e" I
在其下添加:5 y P7 s+ V, i; I s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 k6 V/ u4 S" D2 j{
c! y. l6 M V2 U: F m( om_wndMenu.DeleteAllMenu();
. f" U' M2 z9 h) V3 T+ p/ L; xm_wndMenu.CreateMenu(this);
- Z1 z h X' {9 Lm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");; C \7 [4 ]7 l
7 L- Z9 J/ f' ~1 L/ M
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& Y/ }( K+ t* {1 e/ E8 N
{1 q% N' [0 \+ s4 }8 A1 k7 S
//P以上级别才可以删除所有道具
% I9 Z/ V6 s/ e2 N8 a W, Q1 C& D( S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; a- h$ \5 h- c8 c: h5 s( H
}0 [% ]( \+ ]1 Z: b0 I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: @% e. ~, p0 Y- r( h" tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ p$ R: W: n3 v
m_wndMenu.SetFocus();2 \9 ^7 O D. v* E6 V
}" {9 E6 T; k* Q% k$ |+ J2 T# m
------------------------------------------------------------------------------------------------------------
1 r5 F. ~% a( S' z( X*************************
) C; O) _4 @5 B' I6 Y" f2 FWndField.h文件$ U: c6 f0 _$ s4 M+ X8 T
*************************
8 L7 y) J4 V L4 f+ E1 U/ O搜索:BOOL m_bReport;! G5 A# R) I1 e! C( h6 q
其后添加:
1 F. U# [8 ?, ]8 R& |6 h n5 xCWndMenu m_wndMenu;
: T7 v+ B, \7 F0 V) C, ~$ ^ J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
`& n8 w3 c9 E9 f" R# J* X其后添加:
6 ^* t3 H' W9 N) b S6 |& ?virtual void OnRButtonUp(UINT nFlags, CPoint point);
( E6 R g. N. ]0 i
/ q8 @: @, |& U: H* t
3 }+ ?1 ^9 D; g1 a2 ~ |
|