|
|
源文件中_Interface文件夹下WndField.cpp文件
6 Q! t& p0 R: t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 S o0 y* S' T8 ?1 \& z
1 J7 e8 D; l$ p* A* B& U( ~& sstruct sItem
4 t; V2 F: P( L% a8 k+ [8 l{7 i J0 R! q# G3 m
DWORD dwId;
* f, O5 |% V) }DWORD dwKind2;0 S7 p/ |% ?2 W, O0 }
DWORD dwItemId;7 \- p! T. e" W! w; x
BYTE nIndex;
( p# s: l% f8 K! s/ ^sItem(){& ~$ y( g! `: t, h/ O& O
dwId = dwKind2 = dwItemId = nIndex = 0;
2 l5 f$ P+ `5 t. d}2 M0 ?# C0 v* S* X$ D
bool operator < (const sItem p2)
9 u9 F4 l) d' K: O{: R: T/ m' Z1 n- i6 Z$ M6 K) \' B
if (dwKind2 == p2.dwKind2)4 R1 D7 V3 N" W1 q* n3 ]0 z
{" Z% t A& J) `& [
return dwItemId < p2.dwItemId;
( [6 {3 D+ P' _# ]9 j }else{' E- u: ^% w4 O& r& O4 Y- V: c
return dwKind2 < p2.dwKind2;7 i5 ]" @$ R& n
}: I4 ~3 E/ R* j) V
}% J0 |/ r& D; J9 }
};* W( c/ C6 b1 _
class CInventorySort/ B0 U. A6 ~) V8 C
{8 g) I9 K% ?# _6 Q8 v! n
public:3 P( `# c9 X; r! n: u5 S. W% J8 s4 x
CInventorySort()
5 f+ W6 h* @* C+ D, R{
. [1 U' K: q( k; Z; [! h m_dwPos = 0;2 k2 e! z. y( x8 ^- V" c; |+ b) k
}0 P5 y; L$ V7 R' s6 U
~CInventorySort(){} Z; m; E4 ?, h8 P
private:8 R, h; @: P9 v8 h6 Y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息' x- o8 m( `! `: p
DWORD m_dwPos;- ^' w$ [' |8 Z. O$ Y6 E. o
public:, A! N/ M/ D7 W2 u/ _
void Add(BYTE nIndex)
4 K5 ~8 m' z8 v. j+ Z% l{& n w+ C3 ]7 Q. J
if (m_dwPos >= MAX_INVENTORY)
3 m/ n% r7 [+ L! L' j {* T& @) | Q$ ^* s
return;
: P9 Q! _+ ]8 \2 L1 F9 v/ f' x f } k0 Q- Q# R& ^& ?. p
m_Item[m_dwPos].nIndex = nIndex;
8 s7 N1 e: k6 i. r. G: O m_Item[m_dwPos].dwId = m_dwPos;" B9 B9 S6 T. W" h# |
m_dwPos++;
) h' Z+ j* m. e}4 T$ p( [/ p; X2 D, W
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列1 u" d# ]& ~( G8 N* k
{1 G0 X, W/ l: r7 J
for (int i=0;i<MAX_INVENTORY;i++)
. W Q; N# H+ Z$ @4 Z4 {2 R {
: W/ _: B; U0 y! v# O" Z ?3 \ if (m_Item.dwId == dwId)
3 K5 G+ Q% N" v- E$ Q; }7 D# E {2 d6 z* d$ O+ Z+ C
return m_Item.nIndex;) z% }/ H" {9 N4 y7 z/ d) q( C
}
( b: G& _3 U$ [) `- k! o }. |, E" z# c9 v6 ~' r _
return 255;
( d9 I' q2 P0 l+ G5 M+ w# \}& z- w! X" K: Q1 k
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 Q# c0 ]% N4 ~& f( w& r: a{3 J( G- Y- a2 o+ b5 G q
BYTE nTmp = 0;
$ ?% s# \4 g" o bool bDest = false,bSrc = false;
, h# H' @# v g: \! C for (int i=0;i<MAX_INVENTORY;i++)% w9 \1 Y) d3 C0 t5 \/ n
{
+ p7 o0 u4 R8 ^: { if (dwSrcId == m_Item.dwId)! G% ~3 G1 B6 ]% F) ~. X% C
{0 @: r- E: f f& v# P
//id相等 则 改变对应的dest和src
' F+ p! N6 Z; D* u3 ~ nTmp = m_Item.nIndex;9 ?/ w3 j6 u% i. V) z
m_Item.nIndex = dest;
( {2 h; G) l/ V }
+ { v- r" ?7 h o5 I' y6 q0 F }5 D# y: y( S$ P
//临时数据保存完毕,交换开始# N$ f# C6 j9 Q$ m, S8 r0 m
for (int i=0;i<MAX_INVENTORY;i++)& J! C5 x& O& u5 Q. z2 m6 @) g6 b
{' N, U6 O$ }' \* e) g8 r
if (dest == m_Item.nIndex)
: g' k* ]5 {' r& p" h% u$ |# R {
" Z* \; Y% d( {1 X3 O; A //id相等 则 改变对应的dest和src# }* A, K2 D7 O' N2 R! u" v
m_Item.nIndex = nTmp;
1 v' D4 o* F5 V7 M {( H5 w. q+ } }3 I: m- x/ ^% B! ?4 C
}
9 k/ ^4 P0 `8 i/ {5 Q% L}
% d- X, T- F0 |) |" D/ t: ]};; a1 Q2 u$ X* o) G- V& r, b: J
-------------------------------------------------------------------------; S- ~( m7 J( c% c I. U4 E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. x4 g, _ n/ t$ ~! l* ?搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 m) B0 Z+ Y' l
紧靠其上添加:: s! L* C+ c! ~/ }( S, L
if( pWndBase == &m_wndMenu )5 s4 a, {; d7 T3 e) W) S
{
" j$ J M# U4 K# u: s% e- \ switch( nID )4 c4 b$ n- g+ v+ a9 z( b% ]$ g9 L- k
{& d# C0 L6 u& S ?; h+ i6 r
case 2:; b9 D3 O- K$ T6 F2 G' L
{; V t! ]3 I+ z/ F' E! `
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; B* ^ i' `' @7 M9 M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% f# B k4 n9 r& a1 s3 S- G
{
( h. x8 O2 ^% X9 y" Y! B break;
$ w l) N* m2 g* ?& S' p }
7 A1 M; h' n: \ ^9 U for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 j7 B' D. b* e( l1 }) A {
. M' L6 A. ?" m7 B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; ~, k2 ?. C- B7 l/ w, `/ L' a if( !pItemElem )$ V. r: H- Z# ^! K% ^) j! w
continue;
7 L- l" F# i# c" R! x) J* V3 H7 Y if(pItemElem->GetExtra() > 0)
$ e; d8 o% J1 F continue;0 ?0 i7 l2 s0 ^' g, t0 p# N$ N: [4 l
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 K3 y: _; ^" Z/ L0 {4 w# J& Q( O
continue;
6 l, p2 |7 j, W' j& s l if( g_pPlayer->IsUsing( pItemElem ) ); q. @ a% l. C. p" }
continue;
6 X1 ~; Z0 x1 b3 k! }( }8 M6 ] if( pItemElem->IsUndestructable() == TRUE )! b1 W) B4 V6 S- W: v4 R
{0 W- _1 X9 u: o B" @9 K# k
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* y5 V+ c$ P/ `# X6 L continue;$ H: w7 ^" M' x8 _7 N' @% h
}
% f% P! N& j+ W, l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( L3 Y2 y; h- M( b5 i$ U% N
}# V" T" h/ {. ]3 G8 V
break;1 J& f* F- _! _
}
! @& T* |; ~7 `0 n1 j: s2 \' ~ case 1:
/ B$ l6 r3 x; o {# O6 O* @2 }+ k1 ~3 j% |
//整理背包
9 e3 V& J6 Y- ]# \ //////////////////////////////////////////////////////////////////////////1 [/ J8 a$ d* j/ ]/ v( c
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, U. _" v4 ?* t: [0 y //////////////////////////////////////////////////////////////////////////
3 E2 `. }) c; F5 F& S2 j# I9 y& x //////////////////////////////////////////////////////////////////////////
7 e% i3 Y& C# O% W. M; g CInventorySort* pInvSort = new CInventorySort;
" Z% Z) o: F2 X9 w& g4 F vector <sItem> vItem;
. o! s) q4 W ]) m% b( K, R vItem.resize(MAX_INVENTORY);//初始化大小
4 [" F3 o. X7 T v# c& r7 a5 m //////////////////////////////////////////////////////////////////////////- }8 p) x: z: K+ k* j
//填充数据
4 F# |$ a$ S2 y: G+ F/ b0 s for (int i=0;i<MAX_INVENTORY;i++)# ` Y, t& D3 ^+ t1 M% D) I, A: e8 X
{
. d$ e- J1 x; G5 S, s, O* I7 r CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) I7 \' P; N- Q; h if (!pItemElem)( R- L" b* r2 T! r, u& @: \
{
- q+ N% g) Y* k$ E( u0 A vItem.dwKind2 = 0xffffffff;& N, {) u) _: b3 J4 f: a2 M+ J. i
vItem.dwItemId = 0xffffffff;
3 H/ _9 }- e) c) i* B vItem.nIndex = i;+ z+ o/ x9 n' |8 d! e4 Z5 I& G
}else {- k$ T8 N+ W; Y4 t9 `6 v) w- u
ItemProp* pProp = pItemElem->GetProp();+ i, p. V4 \- [" z
vItem.dwKind2 = pProp->dwItemKind2;
9 C" ]/ |$ P/ G- h8 {* q$ P vItem.dwItemId = pItemElem->m_dwItemId;
4 R* h3 s- r' a& E% E! R9 Q9 f vItem.nIndex = i;& c# W; x n _' z: W, H
}
" B1 @) g. l. u //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 @1 ~4 g- d* f* S; X2 Z, z
}
$ i& [* ]4 f3 Q4 w- d) i! C //////////////////////////////////////////////////////////////////////////
3 e+ ]( p' ^- G# E/ O sort(vItem.begin(),vItem.end());//排序
8 Z7 [ [3 c) \- ^ m. l //////////////////////////////////////////////////////////////////////////+ u! p+ j* [1 U5 r- x/ D m
//交换
/ ^! H# v' c& n/ T for (size_t i=0;i<vItem.size();i++)+ F, u9 y. r: K
{
/ ]+ O% R0 Q1 q0 [( ~; u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 b- j( Q) w8 ]6 `9 e0 x( P
pInvSort->Add(vItem.nIndex);
* ]/ }& s' y+ d# Z+ G& T }
l. I1 m. R# T BYTE nDestPos = 0;) z/ _9 B# K! u( l' z+ J
for (int i=0;i<MAX_INVENTORY;i++)( _( u& a. Z/ Z4 ]3 P0 ]# l
{! z5 { ?. l u" W4 Z' K) e/ B
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);! N/ r X+ ?, h* k8 H3 T6 L1 D
if (pItemElem)
; \8 I2 n- @5 ]/ y2 C {
; `, t( ~- H# _ S4 c% t! @& o if (IsUsingItem(pItemElem))5 E M- h9 c6 u# W
{* F, N2 n# a2 |! ^6 V$ `
//这个位置无法放
) p2 |- N* R- X" v nDestPos++;' C$ e6 o3 k8 O9 l$ P! p2 |/ E+ A# }
} b1 V1 _) }( ]6 P2 J5 R
}) v) f# i" c6 }
BYTE nSrc = pInvSort->GetItemSrc(i);
$ C8 b; X. B* `& \ X pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& G X) _. l9 b! G0 Z/ q2 Q* Q3 d if (pItemElem)* r. p% Y3 n8 l! z; [
{( w: f+ R7 c* ]& o! K
if (IsUsingItem(pItemElem))
9 F; @/ i# ^* m( {7 B {2 Z' d# x* s+ o! y% z7 m# _
//这个道具无法移动,跳过
: U& `3 m( J E% ^2 y0 m0 x5 U continue;
5 } p# T9 R8 @- \0 c% G- Y }' r; r# @% ^+ y
}else{- k- K% v/ b# Y9 n" k2 Z$ u# L. F
//空位置 不用动5 H$ X8 _+ l; |$ q
continue;
4 P2 S/ [' j; ]8 H }. {: H8 k' i$ \6 P+ u3 h* j
//////////////////////////////////////////////////////////////////////////
# H6 f; a4 r: H' D( v/ S- @) N% _ //开始移动
8 x( q5 y# B7 ?) H( d# {" l if (nSrc == nDestPos)8 c/ K5 G; h5 w2 v& d! O4 a! t, S! r
{1 `% o3 Q5 H- B
//原地不动2 {6 I% Y' a2 _
nDestPos++;
8 l% Q Y; a9 _9 J continue;' C6 c5 R, N' t- H% F; @! ^
}' M6 J4 L4 A* u& |) d& z
pInvSort->MoveItem(i,nDestPos);- A2 o2 r2 h" U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 _# Y) _% {- B2 }1 ~/ r Sleep(5);
! K( f. O8 z0 N2 I* d' L //Error("移动 - %d->%d",nSrc,nDestPos);* x: G% x# k ?4 Q8 b# G0 g
nDestPos++;
" l9 a. D# |! m5 S }
7 e4 h8 j! w- ^5 W t1 H& C2 w //取第一个元素的信息" P. l" J% r5 K$ z2 v
/*
) }0 @$ g9 U# ]" [, D( r9 L+ x if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); c; G8 J& |9 O1 W
{
7 \0 n0 j6 V4 H0 k5 }0 G) B N Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. d$ l/ j6 \% r0 B: [1 { g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 @& B2 U- m& P5 C1 V% K8 o( M' P }1 x6 H7 \9 t+ X. ^1 p. l; o8 q
*/
( f- ]4 @) ]6 Y' g* a; @ //////////////////////////////////////////////////////////////////////////$ \" J- t+ }: g. ~2 y8 A
break;
7 z. Q! x2 T' { }
4 o& M5 H U: a1 F } / Q# h5 e3 f1 y5 M# ~4 }& ^
}
7 }2 |0 ~5 d4 y- t0 vm_wndMenu.SetVisible(FALSE);
! e7 f% u2 m w6 N5 X V5 M4 q1 B) e
--------------------------------------------------------------------------------------------------------
, V" W2 X6 j5 l @+ X( B; w1 J搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) U. G* ]' k: U" a! }" }
{" V" t4 Z* U4 @; r: x
BaseMouseCursor();
9 n* H& Q" j0 @% T}
5 B! G1 @. \1 f ?) ~9 }- I在其下添加:
- B9 y3 s- t' q" L) U/ Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 p) N3 Q, M9 R* T/ I+ i
{
) \- [4 p' o& g; d3 }" t/ Em_wndMenu.DeleteAllMenu();: x: g' X8 T4 q( ]" W
m_wndMenu.CreateMenu(this);
; g5 k- x. D) S1 V8 T+ o+ {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 ]3 u& p4 ^9 r/ C! ]# _+ t! E
& H* w: v7 J3 v) J
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 j( K* ]& I# e$ S8 j( F e{
3 ~* d3 N: \! v, y9 c //P以上级别才可以删除所有道具! O* o2 w; _+ [ G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' M9 x }# D# ]% K}3 { h0 D; f: }8 _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 P* p j$ s$ j" @8 q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* E, ]3 _3 Q7 u$ G% Km_wndMenu.SetFocus();
9 i6 h E/ O) Q1 @}
( l% d; B4 |* c8 r. i) Y' z+ w* i------------------------------------------------------------------------------------------------------------
- ?8 k( t+ S" q3 h*************************, E& }. j9 h' D6 Z0 O
WndField.h文件9 X; Y* X, t- C5 X& e/ R. z: y
*************************
( _) o0 ^$ k# @; U9 k搜索:BOOL m_bReport;
: Y% G& Y; M, P# \- g3 N其后添加:
6 p, n- t* f% o% k& S* G3 bCWndMenu m_wndMenu;
( }: w- X2 t6 p: z* c搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( ]' m4 n* p% H; o/ R" x1 d其后添加:
+ K, y' u/ r5 i2 T/ V6 G; @$ V6 evirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 i( \, `6 h/ e- L K+ p3 y7 a
* r1 i8 v2 _6 L) X b; O g/ E
- ~7 T& l- M! ~- V0 B5 p) b |
|