|
|
源文件中_Interface文件夹下WndField.cpp文件
: O( }6 E2 q% v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ s% ?+ j) L4 b% H: J7 d$ y; V: w& k
5 b# z0 i. D5 A7 P" Z- ~6 v! hstruct sItem6 P$ f$ W& w) W# A4 n/ E
{/ k; P {- U9 `$ L+ X
DWORD dwId;0 O* C' { p9 p
DWORD dwKind2;
- E8 I2 Z# f0 @ B/ b' {DWORD dwItemId;
( L- }- S' A T, YBYTE nIndex;
% O: c% Y0 t2 S0 p% y+ x2 x9 r, ysItem(){. z: n) M& `3 b5 E$ L7 _
dwId = dwKind2 = dwItemId = nIndex = 0;& z- x0 @" i; y) r% }
}5 E* w2 }0 J% [ I) @
bool operator < (const sItem p2)
) \2 _ y; T3 q* j9 d{% n- |, u0 a; u% H' C
if (dwKind2 == p2.dwKind2)
+ {- F8 a- \( Y u; ]: W$ H6 _! L {- u6 u0 ^$ T& Q! G! S
return dwItemId < p2.dwItemId;+ w) ~) I" W/ r9 E2 u
}else{2 C- K: ]& X+ e$ X
return dwKind2 < p2.dwKind2;! G; v$ T2 C8 @1 ^% v, H
}
7 N7 J: t& t; i: b1 [* j}
" C5 {, a% Q1 R) C- V& E};8 s3 j! y5 E9 {/ }
class CInventorySort. Y$ ~4 Y. ^( m; c& y) Q' r* @
{
4 j& X/ C) p& Z# H, |public:
4 G! g% b6 R9 ^7 D. s. r, z( N. J* gCInventorySort()8 F/ _. Z# b( B( X3 H% `, x5 @
{8 n p' D: g2 @0 g
m_dwPos = 0;6 h+ {- G, x8 }2 t4 G
}
+ r* S* M! Z0 D9 E~CInventorySort(){}8 P8 n' T1 R$ _% K
private:% z. l4 m$ Y" V- h
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 r* V3 {& `$ ^- w" ]
DWORD m_dwPos; Y1 L$ Y( U5 y# r% Y: V
public:. ?$ s- r6 C5 y* S
void Add(BYTE nIndex)
4 Y6 I+ B2 B" M! h' C" d9 f" y{7 c" Y5 m$ h2 p) A, N/ C
if (m_dwPos >= MAX_INVENTORY)6 V3 y6 q" K# H: C
{+ c7 @* X: Q1 p( @
return;5 o6 l2 X2 M2 ]6 ^" {; o
}! `; h7 _. Y7 _4 P% C8 w: P y, `
m_Item[m_dwPos].nIndex = nIndex;
3 W; g) i# K+ z, _2 u/ o+ I- q m_Item[m_dwPos].dwId = m_dwPos;
+ }. J, u$ B% r2 {! J$ P7 H* z& y4 i m_dwPos++;' ?* N, q% I* N* ]: \
}9 ^8 u Q# R5 P+ Q2 m" m6 D* W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' H' G) Q* v' X( R0 F0 b* u{# X8 g# m3 F8 R9 K, M
for (int i=0;i<MAX_INVENTORY;i++)
$ c# L6 x6 t0 G, T, B {' l, Y0 a( L$ j0 J' o i2 m8 f+ P
if (m_Item.dwId == dwId)
6 j8 P# A9 q& d! W+ g {
- `0 i/ K% I9 R' l e* @6 ?9 C return m_Item.nIndex;
* _4 I: g9 }) F+ F8 g5 t7 n9 [2 H1 X4 ` }: R# E; M6 v: l! v6 \) Q0 d4 n
}
# s$ t( { m+ O return 255;+ _6 `5 R5 r* B. F1 u
}+ ^& L- a! }) j( [. W+ S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' B5 h2 U% C. ~; Y{
% t9 i8 b5 B+ |+ l" ^( Z BYTE nTmp = 0;" a; q2 v. k+ d4 b _2 o4 y: w
bool bDest = false,bSrc = false;. c; F' j' a ]! R) O
for (int i=0;i<MAX_INVENTORY;i++)! D) q! T1 p+ T( z+ `# l/ [+ u
{ L" H1 H4 V6 f# ?' E
if (dwSrcId == m_Item.dwId)
, o9 R5 R2 i2 C& J4 o {
3 W; l" @; J" [ //id相等 则 改变对应的dest和src
% k) Z k" V' o! K9 r% c nTmp = m_Item.nIndex;8 x5 `/ G/ \, d1 V* H3 T4 o
m_Item.nIndex = dest;+ _" w2 {6 S# g- r! b2 X
}6 C2 p, P h7 R7 x3 y
}. F9 m, D+ l+ i2 O( k
//临时数据保存完毕,交换开始
8 G) @% B6 O! N for (int i=0;i<MAX_INVENTORY;i++)- m2 V0 m; |9 Y6 b
{( r0 A* P$ g$ o) V' {3 a3 B
if (dest == m_Item.nIndex)
2 j4 U5 W* r; B/ K7 }2 }" \ {9 ~$ Y/ ^& M9 n! C
//id相等 则 改变对应的dest和src9 `6 E/ O6 X2 Y8 e4 S8 M( {" t
m_Item.nIndex = nTmp;
' _1 z, s7 N* i$ r: e }
+ D' w- ?/ X* L+ F) W }
& i0 E' e% [# G9 z}! D4 c- @# f) b, L1 D3 V
};4 x* i7 c5 ]3 P1 U
-------------------------------------------------------------------------, _/ Z; v% ~: n$ Q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# o. b# \% a3 Q5 p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 C8 f% q" L5 @: F% `
紧靠其上添加:
/ c$ L/ U/ [6 Z; ~) z; ]if( pWndBase == &m_wndMenu )$ \1 ~7 N0 y0 k0 u
{; |7 |4 \3 e+ ^7 h
switch( nID )& @% R- A. X* |) i9 C1 U
{
/ s+ \* ^# D3 W% [7 ? case 2:
% M" M9 u& Y$ N) u4 F {. u, |0 R; o! K; l ]
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# Z8 G6 t+ b7 h0 A2 d2 J0 x. P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), f& A7 D: l7 P% @% B g0 I
{
( P7 u- v( _) p6 v break;
1 j+ E2 c7 O8 ^$ ? }* v# n- J( R+ T u+ @3 ]
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) s2 c& \4 l$ M% Z( j9 \ {/ p5 C5 U- G2 @7 y, j0 [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 x* v, I% l2 j* o2 i3 T
if( !pItemElem )
: ~; l8 O0 V( N& z4 n7 N continue;
4 Q& f$ T6 ], a) H# t& k if(pItemElem->GetExtra() > 0)
. u2 F0 \( B5 c8 c: W5 [ continue;
3 ?1 E6 ?8 V* u, e/ A; B$ g& a if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % L% a2 ^8 ?; r/ [
continue;
8 O+ x- `3 ~% e) B: f. C4 z if( g_pPlayer->IsUsing( pItemElem ) ), C# L. w$ \2 {6 M4 W
continue;) `( I/ A! B9 ]* w9 f" C
if( pItemElem->IsUndestructable() == TRUE )/ J. L( X3 |+ {8 P5 I+ z
{
" h7 z, w+ q* J g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ |* ?8 P! S }1 F6 M( L% d continue;8 |) ?' ]# M1 S. a6 u
}5 |' S) ?" ?$ D, J2 v* F! Z* W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& j3 C1 @5 g, R+ k$ J/ c5 F7 d6 d6 O: ] }+ J. A. y0 N! h3 P6 Z5 o
break;
0 J( [, [; M, O( u+ d2 ~& R" |# B/ i }
- H F1 l8 _' Q' @3 u3 W ^ case 1:4 B- |7 q M0 ~# X! s
{6 m. x5 W6 v" g! C" }) a
//整理背包
8 i4 O$ [+ E; E( d //////////////////////////////////////////////////////////////////////////
+ v, E4 F$ D! w" q( u+ p* H U, C8 V //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); V: I2 N1 {, u7 h
//////////////////////////////////////////////////////////////////////////
! m3 r: k3 S: { \- F //////////////////////////////////////////////////////////////////////////
. S0 h- K9 r& x9 R d CInventorySort* pInvSort = new CInventorySort;
9 ^* V( O: Q U( a% N% j! G& u vector <sItem> vItem;
& t% M d" ^2 [* @; u: { vItem.resize(MAX_INVENTORY);//初始化大小
5 g. |8 M7 G- n, v- U' Y2 \ //////////////////////////////////////////////////////////////////////////
$ }2 d4 g; {6 z* F1 t" I5 M //填充数据) R+ ^2 s U. A4 l: Y1 Z1 B' i
for (int i=0;i<MAX_INVENTORY;i++)
$ k" s( `( Z7 ^. Z {
5 Y2 c# P; t' ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# S4 v& g3 `2 `. b if (!pItemElem)+ s( f0 S6 e# e0 I3 |1 j
{2 h1 G2 {2 C: G6 }
vItem.dwKind2 = 0xffffffff;
7 B0 s7 F( F7 P+ x vItem.dwItemId = 0xffffffff;
$ V' E" H O* N( q vItem.nIndex = i;5 ? H9 g; J9 [+ j) U7 A
}else {
! L: o) ?& s% h+ X5 O) {/ G$ g; m ItemProp* pProp = pItemElem->GetProp();. O5 S# a, P/ H- X9 c3 n2 |
vItem.dwKind2 = pProp->dwItemKind2;
& k/ H3 O/ E4 c: @ vItem.dwItemId = pItemElem->m_dwItemId;3 D' w, x! j3 l9 b% b
vItem.nIndex = i;
% x9 i/ t6 E- k2 t* L) S8 N0 F { }% w) a# ~: F8 K4 A9 h$ Y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 a, E8 U5 F, \2 `6 {# z }( p! {" k( z K& I0 R" R9 O+ a6 ~$ G) v
//////////////////////////////////////////////////////////////////////////# K9 r8 G! V0 Y5 S- f/ F
sort(vItem.begin(),vItem.end());//排序
, \- c) w% j4 j, K5 l6 K //////////////////////////////////////////////////////////////////////////
$ F; |) [3 @) W" x h //交换
6 L% p) ~2 f& a/ L: S- I j* f for (size_t i=0;i<vItem.size();i++)
5 \! [4 ]8 J6 ]4 {, m& e5 U {
- ~* B3 z) y' c3 L. K5 d, |, O4 _ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);4 t" T2 i7 @- Q! |4 o
pInvSort->Add(vItem.nIndex);
: l4 s2 l( C/ m/ q) | }
9 p" l2 @5 m+ n* d" e8 P2 t BYTE nDestPos = 0;1 t9 L: h- W1 R3 P U
for (int i=0;i<MAX_INVENTORY;i++)5 o8 d7 K, y0 `: D m
{7 M5 |, o; m; B. {5 r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# X; Y0 @# G8 W0 P2 g9 s
if (pItemElem)3 e6 S4 g$ r5 N+ M9 y& m
{
% u; n! @9 k [7 ~3 ^. t1 [* | if (IsUsingItem(pItemElem))
+ R4 n; ~7 l$ T G" l5 i {4 @+ h* [' ?6 p/ q1 |; U
//这个位置无法放
" g7 L4 e( p( Z2 Y" `% m* A% ] nDestPos++;
+ B! R% K0 e. y }
, s" g# @2 h' R+ s0 ` }# j- k, w+ w; K, m/ V' Q
BYTE nSrc = pInvSort->GetItemSrc(i);' c9 _/ W: f( j0 Q
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 X6 |& v. P: Z9 |
if (pItemElem)1 W! U @ K+ R( E4 K) a% r Z
{
# i8 I. I9 f0 r, G) Q7 v if (IsUsingItem(pItemElem))2 ?+ n! u i. |1 u9 x5 x% f' ^' H
{, a! j7 h0 O5 I/ t- ]. ]
//这个道具无法移动,跳过
( X* Y2 r" T& J) a4 X continue;; I+ N0 I8 }! r5 e) g, {9 K
}. _% n, ^" B6 ^. Y
}else{6 i# @; c# x& j# x' |3 b
//空位置 不用动% @3 y2 B, u4 b& L$ _' q
continue;, m; g) w' C8 X: k, }, ~
}+ _$ B8 o! h H; O- f2 H/ l
//////////////////////////////////////////////////////////////////////////
; Z1 `9 X( w& c) x& I //开始移动- J% U$ V/ l$ [2 f: L
if (nSrc == nDestPos)
1 f `2 d; _2 ] {
7 {/ U0 X/ A k5 S# S' E/ j' o //原地不动
" h, u3 J1 G% v2 s nDestPos++;
6 q: Y& X4 E! m! E8 c continue;
" G* h: i7 Z# x. _' f2 i }* z1 @% E ~' p5 Y! t; Y* I) @ r. J, q
pInvSort->MoveItem(i,nDestPos);
/ l: ~4 G; c8 A7 B3 ^9 J g_DPlay.SendMoveItem(0,nSrc,nDestPos);% U9 A. ?6 i2 \% L& N4 X
Sleep(5);' r, e- _& h0 Z. C& o
//Error("移动 - %d->%d",nSrc,nDestPos);* I1 B+ D4 Z* K' @+ z5 `
nDestPos++;
6 c9 o( y3 C7 n( a9 h+ i% ] }; V! V* _0 f; N- V# z3 q# P
//取第一个元素的信息1 t, Z9 @+ J3 \
/*
8 K) C; g; A1 a/ m if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
Q' }% Y8 B( p ] b0 x# s6 ~ {! I- r% J8 F: D5 g5 {2 H' q3 d* G
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 F6 D( |7 p4 _ F, Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& ]5 x* N" a) ^
}# W. [/ s1 Q1 q T" `* e: |+ h, L
*/: n: w( M8 v* ?: k0 D
//////////////////////////////////////////////////////////////////////////
2 |" ]1 d8 t$ e& B break;
* l- y1 c0 S" a7 Q8 m1 |% R }
. u6 M% `3 B- J" o! c } , t$ a2 z Q. J7 [- R
}0 e3 }, A: i6 l7 F0 Y2 b
m_wndMenu.SetVisible(FALSE);& S/ d1 k# L" K) j: `
" h- A: A; p s( [
--------------------------------------------------------------------------------------------------------
0 r" T% G# d Q2 K* p* h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! w3 v: t" [6 t% n% l2 i. i: _
{8 q/ J( |, o% B8 ?
BaseMouseCursor();
/ \5 r, Z( V3 |$ F: I5 f}
% H0 ~, r/ K/ @- q& E在其下添加:
& W, G! }/ y* n8 K j! D3 Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 b, `# l0 Y) ]! ^ F$ P# g- ~* j k
{) |2 Z: G' g% I9 R+ K7 E" }
m_wndMenu.DeleteAllMenu();7 j4 ~7 p8 N- T7 n+ c& K. W
m_wndMenu.CreateMenu(this);
# J$ u2 D0 E$ s: Rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
$ M: l! G$ r& f% K# G+ z( n; E6 j. \$ {& ?' O `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 j' o% Z4 S/ |$ E1 L0 \- G{
$ _" S6 ^+ K* z$ C* S. S' T //P以上级别才可以删除所有道具1 s6 Z" i' @( q- D, f
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 F1 t- \( s$ |% }+ X; G- S}3 s8 I4 x3 i, I) Y5 r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 X" w. U* Z; d% b. B# m3 ^: D( Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
8 ?7 Q+ j$ H7 q8 F7 m1 ^m_wndMenu.SetFocus();- \9 V+ p6 f/ R7 X2 [
}7 c$ |0 M5 V4 _$ Q- X- ]
------------------------------------------------------------------------------------------------------------- H$ B e' ~/ s% F% }. z
*************************
- d6 v" c# u( f, f4 l6 B% oWndField.h文件4 L1 {: x5 h/ v l. e9 p$ x/ ]
*************************0 A& Q9 H5 {$ \) i
搜索:BOOL m_bReport;
0 J% Z6 G" R) y8 h8 h1 O3 x0 s其后添加:$ A! F$ Q K0 u
CWndMenu m_wndMenu;6 W) ~) o' H$ @ s4 V* Z# Q1 ^# d% H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
. U8 o3 |1 ^1 n5 Y# H9 W* E8 [其后添加:
5 t* L/ V& E- }virtual void OnRButtonUp(UINT nFlags, CPoint point);
7 v/ D% X; ], b; B% @8 @9 R6 E
' J( U2 \5 B' U
0 S. |" M7 [9 R% a |
|