|
|
源文件中_Interface文件夹下WndField.cpp文件
1 X1 k) `2 ~0 h% x. n2 J搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 L/ j$ N& }! V1 Z( ^) |" j9 t; p% x8 t' U" J q4 w- q
struct sItem/ [" [, o, p7 d( A% D
{# v# [9 K% Z/ {
DWORD dwId;0 I. V3 p4 [# J9 z
DWORD dwKind2;' L1 c# N$ K% L* x+ F( G, w
DWORD dwItemId;
/ i9 R h# X, EBYTE nIndex;, I4 d, R2 ^2 P7 ?1 Z0 E
sItem(){
% `" g. F" ~+ ]' n2 g dwId = dwKind2 = dwItemId = nIndex = 0;
. S2 {& x' M) p3 w}' G% O- K: @% B
bool operator < (const sItem p2)9 e5 L" H4 u4 L( a
{0 q* c5 r4 y7 q
if (dwKind2 == p2.dwKind2)
/ B! v) e6 p1 [( n {
$ O E0 i3 h& [# \( B return dwItemId < p2.dwItemId;
+ V1 L6 y9 ]8 |8 d/ R6 P }else{- O; O$ E1 w G4 l
return dwKind2 < p2.dwKind2;
7 z0 O) F* _8 Q. J } g C1 F% u1 q, a
}1 h5 |$ k9 ]: {. n- t- }
};+ Y' I7 I9 ^; i/ K0 f
class CInventorySort% j0 t) [9 r, m4 l
{6 t$ h" H7 _- m* D, o; {
public:
4 K& n2 t+ O( Z9 q+ ]0 YCInventorySort()
$ X3 N3 S8 S+ _% j% e6 | V{. H( }! |& e# T4 l; ] d' Q: o% u v
m_dwPos = 0;; ]& Y3 g" X8 L6 G4 d
}
$ o( ^1 _! F, I6 e~CInventorySort(){}
8 y1 b' G+ ^! q$ J# H# wprivate:
; m/ w0 J. V0 [$ ^( OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! z2 ^) p! g/ |" X5 b
DWORD m_dwPos;, h8 e9 W j6 N; a( z! q' h
public:
, U* T+ U% `- n; O7 e) X+ qvoid Add(BYTE nIndex)# \; g3 L) U1 h% r! Z X' X
{1 w. Z3 A4 A( c: O, k$ \/ R% v
if (m_dwPos >= MAX_INVENTORY)
! H. p9 X* C2 s- u- i {( P1 m' v1 b- _
return;
; c0 k4 e5 X; W) Y# [" f }
+ O4 n1 V+ O* W) n9 X m_Item[m_dwPos].nIndex = nIndex;1 z) a! R& T! K
m_Item[m_dwPos].dwId = m_dwPos;8 r* D3 J/ l' N5 l3 o z
m_dwPos++;
- P* e# }0 P3 p0 [6 t}
5 F4 f, m5 S& @) J4 E) E6 BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ n, e, r3 @* a q- F+ W
{
3 ~) k. c; n! {# V+ I8 v- k for (int i=0;i<MAX_INVENTORY;i++)
# ^# L. u. f! m# d3 {( N2 v {
+ L$ ~- d4 u, @: V, a7 } if (m_Item.dwId == dwId)3 A5 o0 f4 b( g; J* p
{
' R9 ?6 B T4 O" A return m_Item.nIndex;
. e7 Y6 S7 T& V; w5 Y }2 E# T" I0 k: S- x- T3 K0 w7 W
}- z; H q; Q+ V, {
return 255;9 Z$ K" g9 s$ y9 H+ y/ L# C# M8 {
}! Z n* g' k! x& B5 E. S- }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* ~; J, Z' A5 S{
; k( ~& m& ?/ t. _" \1 k2 s BYTE nTmp = 0;
V% r* v5 f! u1 _% k bool bDest = false,bSrc = false;
" g8 ^3 d8 J* S& S. c' J for (int i=0;i<MAX_INVENTORY;i++)' \, V2 X3 j5 w) D
{
' g0 e. U- A h5 n( X- y, m) B if (dwSrcId == m_Item.dwId)1 R. i s" R5 n
{
9 v* e, b* @: u" \3 e( x! u //id相等 则 改变对应的dest和src
: p$ e7 z( G- X nTmp = m_Item.nIndex;5 i) x$ u5 H/ G) E2 X3 g
m_Item.nIndex = dest;
0 E# e* \ L! ^5 G/ r }# F5 S' y2 B3 L* R5 @' f" H, F
}
) a! c7 {+ b s" s% G, P/ u //临时数据保存完毕,交换开始
) [& b4 v! y. ~* V, h. \ for (int i=0;i<MAX_INVENTORY;i++)% l- F% q. I# D9 y6 v$ O% U, D
{
3 d% ~$ g3 h& n if (dest == m_Item.nIndex)
2 r/ X) H) y2 A' a# H# g {
1 ?5 _' N( j' X* U K/ R9 W //id相等 则 改变对应的dest和src
6 J" b2 S7 |0 K5 w, e& y m_Item.nIndex = nTmp;; X# o7 M7 n4 w! b. g3 |, n
}
, c: x G5 W6 X }+ L' v. B! ^3 o
}( }7 t0 A$ ?/ z4 j6 q. t
};
0 r9 n3 z& Z$ f' y# J-------------------------------------------------------------------------
, m/ Y+ x$ ?/ n2 O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 A' g9 L( H% p' P9 J8 @ f; z- ]& P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* q( _. V- u4 o2 l3 }5 f9 e紧靠其上添加:
1 ^2 x* j) s0 @/ X+ Z; j9 j$ t1 rif( pWndBase == &m_wndMenu )
+ j' p5 T w: G8 g. z5 _& C8 o{7 l' o2 W; V! y/ H" f$ o
switch( nID )% W: z, X3 t8 i
{
! z. O1 N6 u' l, F case 2:3 K3 p& C4 D. j1 H8 M6 C
{
5 e4 l0 l/ F j6 B9 U& m* D3 [* C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% f& Y+ p9 P# d6 g4 ~: g if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 @9 b% \* B; Z! F; [ {
: @- b: c8 V# ? break;
}( E1 S! p \4 W' `6 X. H }
/ q$ ]% A5 |) O7 t/ r for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' I8 \8 L) H/ s: @1 v {
) @' d( ~: @/ Z" J( \6 X/ \* j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% L, ^" f' N- x3 I" u
if( !pItemElem )% v8 ~8 g. I/ H, t' F3 C1 G
continue;
- F3 Y" O% m' O' x& f% m# F if(pItemElem->GetExtra() > 0)
4 T# l2 g, d. B4 ^ continue;
8 x. V9 U6 y- _; U( @7 n( s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 O5 u2 l* J4 D" h
continue;1 s* h5 J2 e$ O
if( g_pPlayer->IsUsing( pItemElem ) )
) u2 H; @: Y. k2 e. c# @# r7 T continue;& b1 k* @1 a3 f5 b6 A$ _) z# O
if( pItemElem->IsUndestructable() == TRUE )
' }- ]- B% \$ @1 s {5 i; ^. u7 ?8 ~5 [" s
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( g/ A) b9 R6 i# r8 n i' Z/ | continue;
! m6 p J% d0 _. f. K/ A6 E }
' t! ]- Z( e q5 c. X- q+ H7 F6 s4 o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 u8 j) m$ v/ k }' S" B$ f- X1 @ }$ K2 q5 V; e. d0 Y& W2 z7 a" `
break;
" M5 E0 E' @. G$ L0 k }! i& ]% [+ p6 s5 r, G
case 1:
% i: `8 P; R# S# b* q {2 R" `( u- ^8 [ P% A, {
//整理背包
: D7 V2 H/ W$ d# L$ i3 H' t5 } //////////////////////////////////////////////////////////////////////////) K8 P2 S) v3 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! g; X3 d/ V7 x3 _
//////////////////////////////////////////////////////////////////////////
7 X. `8 w4 e6 E: B //////////////////////////////////////////////////////////////////////////
1 q8 Z8 f! s5 X+ F$ b CInventorySort* pInvSort = new CInventorySort;
0 O+ H1 U5 z/ o! D vector <sItem> vItem;
. N7 M* i9 q: b6 M# i0 N vItem.resize(MAX_INVENTORY);//初始化大小
5 r1 a8 u K% W% n //////////////////////////////////////////////////////////////////////////" z. i! C0 @7 X9 G; O8 |! V
//填充数据$ A" |" o Q- J. w% b- h8 `, z3 r
for (int i=0;i<MAX_INVENTORY;i++)
$ K: u- S1 u. s2 S- D { w# _' L5 j, j) P2 |- _
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ y; q1 r+ h; g- P* H6 C/ ~) f
if (!pItemElem) V, p ]2 j2 e. i% s0 F
{# D5 y, e0 t* {. n& R
vItem.dwKind2 = 0xffffffff;
% w a6 I) G' h8 G vItem.dwItemId = 0xffffffff;
. L: q- p! k. t! u+ k) e4 U4 L vItem.nIndex = i;
$ k8 z) |+ @. n& b" k }else {
; j8 a: R- u, i! I9 z ` ItemProp* pProp = pItemElem->GetProp();3 K& P8 }7 g( U/ e% ~! k- Y" N
vItem.dwKind2 = pProp->dwItemKind2;
& t3 l4 T1 t9 w3 k5 m vItem.dwItemId = pItemElem->m_dwItemId;
# p4 K5 Y: v4 u3 U0 { vItem.nIndex = i; U) o0 a: n! X& P& Q: ~0 E# {
}
4 w* U, w3 A$ t6 a l4 e& t //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 U+ h5 w4 [2 {! |% q
}) k, \1 K; |! L
//////////////////////////////////////////////////////////////////////////
1 Q% H& k0 {* l" i2 S; P sort(vItem.begin(),vItem.end());//排序
1 a, A% { ^ E; v //////////////////////////////////////////////////////////////////////////
: r" K& C+ M2 g, Z. x6 d //交换
3 A6 o3 F/ O a( J for (size_t i=0;i<vItem.size();i++)5 A4 h% x. Z4 H
{1 v% m/ s2 ~$ ~# Q! r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, X6 v7 c5 l a/ w% V3 C; e' F) F
pInvSort->Add(vItem.nIndex);
) {; m( T: v1 S8 [ }
' R3 s0 g! W& }0 l+ f: K( u) I; {; h" i BYTE nDestPos = 0; ~ H$ q" c" F0 t& i. X+ y
for (int i=0;i<MAX_INVENTORY;i++)
* ]5 H b$ e5 N {+ m- h6 u' u2 L/ P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* q! w- U% {2 V& ~5 Y& F if (pItemElem)
* s6 B9 w+ g+ @2 y0 j3 O0 c {3 |+ n7 r) q+ L, u* t" [
if (IsUsingItem(pItemElem))$ ^9 @/ [4 \4 p1 M
{1 \; O& `: N) D
//这个位置无法放
& D- o# I# r) ~0 s$ _3 l v, j nDestPos++;9 q8 d+ y4 i' k( S: P
}
( n2 g( h8 B; h6 a$ N }# U5 }* \# [# D3 U
BYTE nSrc = pInvSort->GetItemSrc(i);: F2 x% G6 w9 E) C. t+ u
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 v) m% ^" p3 x6 u# B if (pItemElem)( b4 d8 I+ s; C: G+ u7 t1 {
{
* i! ?; u9 F5 M: l if (IsUsingItem(pItemElem))
, o# J$ Z' K! q9 j' Z& ^. @ {
' N) {- S3 D' K X //这个道具无法移动,跳过
3 n+ p* x1 B/ w( k4 [ continue;
5 r& F5 {( F q% j# {* z }: ]; ^* |3 z% u8 Q- D( X0 J
}else{
1 x0 {# r7 n8 e" X$ A3 H //空位置 不用动* ` |* ?7 F3 ]) x
continue; {1 s$ i3 _; _3 F$ _6 l. G, u
}
5 H: O2 c$ \, b. w9 D1 ?2 \ //////////////////////////////////////////////////////////////////////////8 J6 r7 y( D% ?) H; Y
//开始移动
, q- o6 J1 }: r! s3 [# A( X: O if (nSrc == nDestPos)+ F" D: u# ~. Z9 V9 w8 ?8 H
{- }7 N& t$ S8 K
//原地不动
4 ?, c' Q! E0 z: n nDestPos++;( O1 u' Z3 `( W/ j: R' F
continue;% k2 L# h1 z# X9 x' B3 h* B% A/ K1 \& L
} g. K2 U) C$ ~$ M/ l& i9 `5 g: n
pInvSort->MoveItem(i,nDestPos);- k$ a1 \* P% {
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, O1 e( I# K8 r# g3 ` Sleep(5);! T1 `& Q5 p. E9 x, k# @
//Error("移动 - %d->%d",nSrc,nDestPos);
& Y" s Q0 H9 z3 v nDestPos++;4 p2 k8 y& z2 y$ [6 o
}
+ Y: a/ x. ^: \! z //取第一个元素的信息9 M* r* y4 j0 y/ m1 P0 x+ K) M
/*! y" r" v. {5 i) \
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ N# S# q" A( J8 \+ p. _
{/ W, {: o8 h# Z; U( F0 O
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 w# X! k+ F5 }# f# A, Y g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ C4 T, V5 X, g8 @
}
8 z" h6 ~- v1 Z. G. y */
8 }' Q S; S1 C; T5 U1 ]0 A3 \ //////////////////////////////////////////////////////////////////////////5 J) U% D- _% o, D! n% Q4 X
break;
. Y* w- X* c D, ]6 S }
% G3 F1 v% ~7 f/ j4 Z. h } # J8 w. f1 I- ?. O" z
}
4 `: L1 U0 P0 J7 e$ C# z- lm_wndMenu.SetVisible(FALSE);
4 Y: ^6 f# U- P
* w/ T) D4 q7 x, z; o4 K% z--------------------------------------------------------------------------------------------------------7 C, g$ }; Q+ a H; m2 k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 H: d& o( I+ W3 x" @- A{
5 J" }/ F7 x% a6 X) \BaseMouseCursor();& C" d4 ]1 P/ B/ V+ f0 u- M9 `) X
}+ m# q" o6 P( g7 d8 B a
在其下添加:
% A" \( W3 l8 P6 \1 l& f0 i. i5 l' H6 yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), ?' w$ v/ o/ F3 w7 h
{6 i6 ^1 r2 M' O+ {$ z
m_wndMenu.DeleteAllMenu();, O- V) G2 H Y1 N
m_wndMenu.CreateMenu(this);- g* p) V; ~2 Y1 G2 G: Q7 l
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 w, z- q; ?' u; X7 f
3 f3 b' g, D( \: f1 |, A$ x( z kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 Q& u1 C! P9 t( ^8 v' R. x{
3 _! _; N; d( _* d- C/ U& j& U2 E+ P; V //P以上级别才可以删除所有道具
1 R2 p$ L5 @6 [1 f# i! Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ ?) F8 |% M9 ?# I! d8 A9 b. O) s
}
( Z+ a" }) D' y# N8 \: mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );0 ]* [; ?" I5 R
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ H; x7 |' b4 W, j/ {9 Pm_wndMenu.SetFocus();6 b, x% b+ p% N, P* U; c
}/ h$ V1 i5 }' G7 S% g
------------------------------------------------------------------------------------------------------------
2 ` w- f3 x2 u*************************
) V) w7 F6 O) {! |+ kWndField.h文件
% J& T, E' T; N; Q/ ^) Y& M: U*************************: A( `1 J; o0 i) j2 \
搜索:BOOL m_bReport;
" P' y) M0 U- M! J) e4 g. a其后添加:
. l0 `* q& Z/ F& Y! ~CWndMenu m_wndMenu;
- a8 _# e: D4 O! n, Z$ i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) G# |& r* J* f- n5 C0 C其后添加:
0 M2 e+ P+ p9 @% z/ ?4 v# Ivirtual void OnRButtonUp(UINT nFlags, CPoint point);
* G1 d e: A' ]
' Q' g; I# C9 j P# i8 Y7 Y' z& z: V( @& U9 t6 H, w$ w& j
|
|