|
源文件中_Interface文件夹下WndField.cpp文件
5 C0 d, A" t( ?* e0 Z3 W9 d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 Y0 P: q1 i; I% |+ g3 c2 o5 w' k6 G$ \. A
struct sItem
8 G4 f7 Z8 n2 p, y& O) i; u+ W{
+ t4 h& V; h, z4 g% X* `DWORD dwId;' x& U' K. Y/ Q; ^
DWORD dwKind2;
0 C4 h1 P' m7 R8 Z8 {$ Z5 ]1 w: q& VDWORD dwItemId;1 w" w; B6 H! N
BYTE nIndex;
) o- X5 j, f4 i, g$ @: ^- ^sItem(){0 R N7 p2 w4 w8 g
dwId = dwKind2 = dwItemId = nIndex = 0;7 G2 r, W! d( S# W2 S$ \ h% d- g# d
}
, {3 H! F& q. C u- i2 X. Lbool operator < (const sItem p2)
6 t8 B, g7 D, G* x$ [{
[: z6 w( I1 c' e8 r if (dwKind2 == p2.dwKind2)4 ~$ {, d* O; D7 N1 n8 [/ y
{
J4 c5 b# Y9 h+ K return dwItemId < p2.dwItemId;
. b' @. u9 U. y7 _0 x& ~3 j }else{; n1 M2 r, c& T' t; O
return dwKind2 < p2.dwKind2;
7 O, Y. t6 w( _! |( o }
/ A4 S" o- L4 Q$ O7 Z}3 P/ Q9 i. h' w0 D
};: e& w" r; }0 {3 o% \# N
class CInventorySort5 E" G- ^) o8 U: l
{: H' e+ F% a, [+ U o
public:# `: L, T6 u+ y0 ?/ I5 G5 J
CInventorySort()
s/ i, ?, ^1 h! G5 j{
6 I9 }3 |1 ?% P0 a( F- T- |$ c m_dwPos = 0;
; {3 O# v& P0 j7 f}! ?0 n& u5 p6 n& H1 T1 b# I/ z
~CInventorySort(){}- S% K# V _0 v: K; c
private:
3 M6 n' M7 w9 A9 k ]+ ssItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 g( i" y( o0 j& K9 D- fDWORD m_dwPos;$ X( A( U( [9 P" X
public:+ t z/ M+ s5 [2 K
void Add(BYTE nIndex)7 X( ~# @9 d: ]6 E( R# Z1 }. q
{+ \% D3 e. w M( b- c( Y& U! S
if (m_dwPos >= MAX_INVENTORY)
$ a% x+ a, B( K! ` {& @& M) A! Z+ f, ?; b) a0 r
return;; L8 x( ^0 @7 t; c
}
0 z* r' j8 o) @4 N m_Item[m_dwPos].nIndex = nIndex;
) ~/ t2 O1 F& I( |) ^4 ~! U5 O5 x& X m_Item[m_dwPos].dwId = m_dwPos;9 e, m4 D0 {! O8 {& d
m_dwPos++;
" _+ a3 Z7 B5 O}2 c& Z' d, B% R; v8 \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( b$ l- `- z) W" ^( }
{; w u# F" w& r
for (int i=0;i<MAX_INVENTORY;i++)" h* o4 H/ J2 b
{
6 G: D! Q6 y# `7 N8 W if (m_Item.dwId == dwId)& a3 W; y* z. m& C0 |
{
* P0 p- u& S6 V; C$ j" Z7 D' P. @ return m_Item.nIndex;
; f7 h# Z2 Y" D( w7 d+ { }) d z# q* O/ t! D
}
6 j+ y9 m6 y' P' H return 255;
; V% ^5 R! p8 S$ a m}, ]+ w+ v/ T' G# D8 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
% |$ ] L7 w0 u. I# Z M( s8 a{
# G$ e9 t; F9 j) t3 h! e BYTE nTmp = 0;
) `2 e) H& K/ |# h% f7 t, v1 ` bool bDest = false,bSrc = false;5 P# N% a8 t3 w6 X
for (int i=0;i<MAX_INVENTORY;i++), F( p2 x% k) t X, K
{* h9 ^. j7 V+ g1 y
if (dwSrcId == m_Item.dwId)( u; {! F* X4 Y6 e: V9 F! v
{) C3 G: G7 Y2 h
//id相等 则 改变对应的dest和src% ~) I4 `6 ]+ s- o1 x1 g0 @2 b
nTmp = m_Item.nIndex;
$ ?0 L2 [' L( X$ {) ], e; i m_Item.nIndex = dest;
* O4 d9 |) _% |* T* e! y9 {7 b2 n2 v }" S( D. D7 s$ h' ^
}; x$ ~- [# i1 S( j
//临时数据保存完毕,交换开始5 ^% k* K# X% `" P3 T8 r
for (int i=0;i<MAX_INVENTORY;i++)
9 R: a4 n0 p$ f0 W; { {
+ X1 z+ R/ W# V if (dest == m_Item.nIndex)& M& Q! z; g+ T0 d" I& i
{0 s& r- a" S5 @. Q% D) W
//id相等 则 改变对应的dest和src
& g) {8 W- r, \ m_Item.nIndex = nTmp;
& ?( U' \% n0 r! i8 w' C; G }
1 ^) R* \+ i% M }
2 z* \3 n! N0 J1 ^* ?$ H}
+ y$ I4 K' I5 `1 G, z6 C; t" K0 T};, S! A' ]4 X' t2 J3 t
-------------------------------------------------------------------------+ ^' z9 M" w* p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 X. D; u3 C0 D! E; l3 ~
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);- e1 A9 I* _, u. \9 A
紧靠其上添加:
% M) i% s+ a# h' e P( Lif( pWndBase == &m_wndMenu )
$ {; @1 k: J6 J' _{ i, b% h; L2 B; }, d& ?
switch( nID )- C# ]5 D8 r0 \0 m8 t+ r
{
" X8 i/ f- }9 y3 v" A8 C2 P' E0 U case 2: @/ \5 g# M8 d" u2 F3 h+ e; P
{
# E: V2 B* k( z4 r5 |8 J$ h //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! u. u' k! k0 w( M* W" c3 C1 C if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); _* X. O+ U4 r8 v3 g0 X) z
{; R$ [/ y/ L4 I
break;
" E: N; z7 m' k% Q2 L# ? }) V% @4 v) v( Z9 V8 c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)9 H% }: a. M2 ?. Y
{/ F b8 f4 z' ]4 |$ w+ d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ w4 t' ]' R, ]; @4 v f8 d if( !pItemElem )) E0 l+ F! K3 u+ N
continue;6 l0 ?/ H: |1 l6 N {, U
if(pItemElem->GetExtra() > 0)
! c4 e( G. ~9 z continue;- U$ q( d8 D7 m1 v: s) L
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 O f; M$ R7 M$ \, [. o
continue;- @! z8 w# @: R" L
if( g_pPlayer->IsUsing( pItemElem ) ): J* T) @9 A7 Y) [5 }7 v5 }
continue;
, ~6 H6 C/ _! l# M1 s4 ^1 |1 P if( pItemElem->IsUndestructable() == TRUE )
8 f* Z* u% @" ]2 A {
# A- q t9 D$ |! C g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 J0 @; x& F1 \# T; |5 @$ @ continue;
/ ^! G' K" t2 H, h7 r }
" S' h, \' G1 v, n( O8 J, W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 ^8 l/ z* z z& @" J" C+ x }) A/ |( Z/ W+ R$ z7 }+ p1 h" h
break;1 f5 Z. ]5 P! U+ F3 k- d
}6 N& U% J! C2 U! a5 E z. G
case 1:" I- X" J( n, u7 S
{/ m$ a" N& G5 Q* ~& t1 m7 P% M
//整理背包
- W+ W- L4 [7 e# T! U //////////////////////////////////////////////////////////////////////////6 \- y- F) C3 `- `9 J& L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- I5 m J7 ~5 u. o, V1 R0 R //////////////////////////////////////////////////////////////////////////
6 N9 M# Y$ f5 G) a //////////////////////////////////////////////////////////////////////////
6 e$ G- ]8 Q7 }$ { CInventorySort* pInvSort = new CInventorySort;
# c8 B. i* z% S V3 v vector <sItem> vItem;8 V) B4 I u- o# |. |
vItem.resize(MAX_INVENTORY);//初始化大小
0 ~: O7 b& l v- r& u //////////////////////////////////////////////////////////////////////////3 \9 }" d1 G( H4 V
//填充数据, f4 E9 _5 d2 ~5 Z; h9 ]
for (int i=0;i<MAX_INVENTORY;i++)
7 T( y0 x, [! a; G {
3 u7 J6 O5 Z- O$ K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# e% c% Q3 w0 L
if (!pItemElem)& Y/ K4 y# i0 X6 i
{
; z8 ?% h; r0 D+ M) A. p vItem.dwKind2 = 0xffffffff;
' W7 ?- T; i) L6 i: ?4 y* N vItem.dwItemId = 0xffffffff;
; f3 O6 S2 b+ e# ^( A) C vItem.nIndex = i;0 \4 R0 j7 v; u& d
}else {. _9 B! y! I8 p! [2 h, C
ItemProp* pProp = pItemElem->GetProp();
; K. j+ u3 Q& U- P* S vItem.dwKind2 = pProp->dwItemKind2;# a. [! N0 e$ d& k6 W$ |! |0 _
vItem.dwItemId = pItemElem->m_dwItemId;2 D* D6 a$ h7 [
vItem.nIndex = i;
, d7 B# F" T& z }
7 B8 {1 A1 A5 U0 E1 s$ ^' b //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ @% o5 T! g6 L/ j, c p, l5 w
}1 y* U) T( \7 r5 Q; [
//////////////////////////////////////////////////////////////////////////
. O: j( Q* F% P' U6 @& W sort(vItem.begin(),vItem.end());//排序
7 n9 F4 r! K4 `8 \: T. V* o //////////////////////////////////////////////////////////////////////////! t. ~0 A j/ k# N3 i% w
//交换/ P; i5 M4 J0 x9 ?# R; x2 X& X
for (size_t i=0;i<vItem.size();i++)
' w) v4 C B4 P6 a+ O {- v* U" }% ^; G6 e7 R/ w$ G
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' P$ O8 b3 r/ J+ K1 @* U4 H pInvSort->Add(vItem.nIndex);
/ [" P9 P( r- V# B) K( l }
) A A( w0 d5 G6 W! p BYTE nDestPos = 0;
+ ~4 a9 d# @5 \) c9 | for (int i=0;i<MAX_INVENTORY;i++)8 V: I) n4 z' w$ A0 s5 F& y
{8 C0 J1 I% c8 f& d
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: x! n' C# n6 ], H
if (pItemElem)0 |+ o$ s% n5 B$ _( M
{
0 c8 Y5 a+ M8 M9 [2 k if (IsUsingItem(pItemElem))- H: @( l2 Q& e
{. E: V* n6 h. e F: L/ D( c
//这个位置无法放
# d- }3 p, p) D5 P$ X nDestPos++;
" F p( G5 m3 n }3 \1 y0 s0 Y H0 h3 u* ^
}
5 B$ B% O. M7 ^$ j. } BYTE nSrc = pInvSort->GetItemSrc(i);
5 t" C$ B8 j; z c6 i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);. U) |, v) ~) [$ x7 ?7 C* T
if (pItemElem)
3 @9 H' f1 R, I, v L3 i! C {
+ B. U1 |1 V. h/ Q, k q8 u: | if (IsUsingItem(pItemElem))0 ^& Q' V; ]1 q" s: q( e
{, |# w* e' @7 g% r' c7 w: ]
//这个道具无法移动,跳过( A5 X) y2 [ X) K, v- G2 p
continue; S' `; J1 L y( P5 t# F8 z
}
6 P9 {" c7 }+ W& l2 A) l- T, t( b }else{
+ Y8 O- _* F; d6 e; q" T8 S) A9 F //空位置 不用动0 v5 Y) B6 t( P+ d; F
continue;0 ]+ K: N6 c8 `+ D8 p9 I3 T
}
3 [1 _2 T: e- m3 h7 c4 T' ? //////////////////////////////////////////////////////////////////////////' s- m8 O3 z( g9 O$ w
//开始移动1 H# _+ L4 l# |, d( Q1 r
if (nSrc == nDestPos)
6 d8 \2 [$ W7 Q7 }; P5 a" W+ d {( C u) z3 a8 d6 W" y$ j
//原地不动
+ l: B/ ]1 ]: |8 X9 ` nDestPos++;# G+ `2 U3 _: m" C8 O* S. M
continue;
7 Z) m- c2 C& F- E* L7 ~ }& I; a3 E: d& M' v0 Y
pInvSort->MoveItem(i,nDestPos);$ N, v0 _" o, X' {" B3 G
g_DPlay.SendMoveItem(0,nSrc,nDestPos);* K% L8 ?3 c: y
Sleep(5);9 s! x; u; M1 P: a$ c, r8 v
//Error("移动 - %d->%d",nSrc,nDestPos);
: j9 x0 {+ V( R/ N8 \1 F nDestPos++;( s8 Q* F- N! b/ \! U
}
' ^' R( s' Z. L //取第一个元素的信息: \4 r1 @1 {: L! G8 Q. o: I3 h
/*
4 T% A# Q( o( \. e; g# d2 ?' p if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 o) Y0 K& l9 O, _5 _) d9 q3 \ {
7 p0 a% t1 j( S( o Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 j: Q+ o; k, A g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ J, D' B6 g: R1 y3 t X3 r8 n
}. U$ E. E6 t7 m5 L. ~0 S
*/1 N% {% E5 |! T/ `
//////////////////////////////////////////////////////////////////////////
6 @4 ]# ~& M; `' t* r) K break;
+ a" j& k; G$ }7 j( f+ ^ }$ I A6 w7 t5 r% K% ]" q" R. h- H
} 0 T, C7 c# V! O1 i f* U
}4 g \; W, Z% @) D( a B0 d
m_wndMenu.SetVisible(FALSE);3 o( J5 m( o+ t
' F1 @! i* E/ p, B--------------------------------------------------------------------------------------------------------
7 I, ~6 T! D# m: R' Y" e' ?/ |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); l! `# m- T1 R% A* M4 \
{' |; E: S ?6 {( q# M+ n
BaseMouseCursor();
$ ]4 v& N9 h; W$ V& Y) V}$ d) g1 Q$ a' L
在其下添加:
7 a! F. z @8 \' B$ m9 wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), B% _' t+ P# R1 y
{
- W. A! Q+ d; _/ | d' tm_wndMenu.DeleteAllMenu();1 F3 K) @3 K" x( M4 O# N
m_wndMenu.CreateMenu(this);4 S5 j; s; `4 D( [
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 z! z$ e2 o, E. b
W- H. V. W, W6 @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- a6 y, D. m5 c/ T" k. `! B# h
{; W7 V4 K, i8 U) _4 @$ L
//P以上级别才可以删除所有道具
: W, D- @( J4 ^0 a9 ]7 q$ x$ c' m m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* s6 L% I! A h* y
}
_8 g' {0 U5 F; m1 h' Qm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 W) V" f/ N$ S- Z/ Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% U* q% A2 J$ R3 J W
m_wndMenu.SetFocus();; d7 R* T! M' q3 z7 ?% u; v4 l' L
}
$ v& g' V, X5 C* _5 h9 ?------------------------------------------------------------------------------------------------------------) d7 m' | [, n' q' H
*************************7 r# F3 P) {8 ]& j, ?! a( f. N @ C
WndField.h文件5 j* K+ Z3 `# \" }6 V0 V
************************* {$ v! p" G5 A
搜索:BOOL m_bReport;
% j/ i$ Z# e) p7 m9 c$ P1 z! V" [其后添加:* D4 A/ D( Q- R$ t. _ y
CWndMenu m_wndMenu;
) |( x% ^6 @% f7 Z) V! Y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 {; Y0 N/ g7 |( ?$ r: g* G其后添加:* d* t/ \7 ^, W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
1 R( ~9 K: J: P! l
, f" W& x3 B! h
. A9 Y) l7 N% k: m |
|