|
|
源文件中_Interface文件夹下WndField.cpp文件
1 \9 I' d3 U8 v搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) t0 O- y( g" x5 Y
. ~3 F. r0 b6 @4 u8 c
struct sItem$ B0 c: W+ H& O# l$ C G T
{
6 A! I) [: g) v( @% ]( CDWORD dwId;
8 L4 R p/ M* K' M- p/ K" QDWORD dwKind2;
+ O/ |' H, `/ F5 T2 ZDWORD dwItemId;
& s! Q$ v! h7 B# i+ w" IBYTE nIndex;/ o# _/ m t* ?( h
sItem(){
" v- Y& V6 r* X0 D' u dwId = dwKind2 = dwItemId = nIndex = 0;; i% z' ?; R4 H' O+ z( F% ]* \ i
}% k8 j: s/ v$ L. j5 s6 ^
bool operator < (const sItem p2)
' S( X0 Q* |; x# g8 V, O+ J4 Z- y{
3 y- }$ g' T. K if (dwKind2 == p2.dwKind2)
) e3 _, ]* h) Q9 q- K {. y# ?( s5 J* ?0 r7 P4 ^+ e" g: u7 F
return dwItemId < p2.dwItemId;9 F3 v! ?: c; r3 I: U3 |) D
}else{ [# B W$ t- `0 ~# }
return dwKind2 < p2.dwKind2;; n) W2 w5 X% q7 g/ Y
}
! _0 M4 b5 }( J5 b4 ?. ?}' T7 P; i# M! s9 M5 a
};) N( a- D1 w! U' ]1 M
class CInventorySort
( g5 J# w& X/ a' Z! ` K{
2 z b+ S' {6 Vpublic:
% e) D- E' @9 O! NCInventorySort(); X1 Y9 Q4 r& E6 s% \: s
{6 _ }6 e8 I2 }. m5 M/ K
m_dwPos = 0;, f- u; W5 d! T$ N! x
}+ U7 K- [1 s# E D, q! K9 @
~CInventorySort(){}
, {9 Y. X) C+ H. N5 G* Yprivate:
9 i) I% X3 |# @# K% v ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 f s% g0 m: y$ |
DWORD m_dwPos;. g8 z9 f# A5 N2 n2 I, C$ U
public:' x) o, t4 M! g& C+ F3 U7 O6 Z: Q
void Add(BYTE nIndex)
, C: g: h( X% ?+ m2 g" M{& r3 d$ r. d) G; m5 m6 G2 V
if (m_dwPos >= MAX_INVENTORY)
4 ~) P7 A8 y$ R) x0 A1 ~ {
: P6 Z; Y; J0 E- c return;# }8 L, D( s& I0 F t
}' ?1 P7 D6 ?- w6 U
m_Item[m_dwPos].nIndex = nIndex;, }2 T& g! X$ p2 b7 y- x
m_Item[m_dwPos].dwId = m_dwPos;: v3 D2 A0 s0 e2 O/ U3 g! F) o
m_dwPos++;
* A2 O% ]; R) N6 v}8 U8 k4 _0 J6 b8 K, \
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列& ~! |5 O2 c2 G% N: q* @
{- {# K; h9 K7 a5 y2 I
for (int i=0;i<MAX_INVENTORY;i++)
" J8 l) f/ C- n2 ?. M; v4 a {
# J2 p; p$ u, i+ {3 O0 O. S7 [ if (m_Item.dwId == dwId)
' s- s( _9 c6 t( t {
4 h9 |# O. D7 j1 P$ E return m_Item.nIndex;5 x8 m7 p/ `; @
}7 N& @" ? i F
}
' b1 b) @ R5 h. ], C return 255;: ^% E! l6 a4 c/ {* D
}
! n% U ~5 j5 _0 y- ^void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% D% |9 U; z( K8 K- A8 Z* {
{# t H3 d& }; w# S: ]3 n; W" s
BYTE nTmp = 0;, O6 h X; x4 O5 [' K) y5 R& [
bool bDest = false,bSrc = false;. j( `# w) X! k# i. [7 a
for (int i=0;i<MAX_INVENTORY;i++)
7 c) M g) w) {4 h% |9 Z {
' _6 v [% O% ^& o5 B s2 E if (dwSrcId == m_Item.dwId)
\+ u: r5 ~& D {
. _3 s# G2 |+ e: E+ U$ f. F //id相等 则 改变对应的dest和src. H& y$ t0 Z! B, D4 i9 m( T; c
nTmp = m_Item.nIndex;
8 h3 J) O# {; S9 n m_Item.nIndex = dest;; [! z& m& n+ r3 p- L# @8 S5 @
}
; j6 y6 d5 P& z }
8 ]0 R( V+ N, H' t //临时数据保存完毕,交换开始
$ g/ Z% W% p, q8 A* \ [8 Q- Y for (int i=0;i<MAX_INVENTORY;i++)
- F s4 N5 R2 m {
& C; d+ ]' c, m" w6 D if (dest == m_Item.nIndex)
( _9 e# S/ c: h4 P! i0 u) l/ ]/ c {& B& f( B+ h+ w8 C8 w/ j. U& k: U
//id相等 则 改变对应的dest和src+ A9 Q/ B; V, s* h0 ?: n+ z5 o
m_Item.nIndex = nTmp;
3 a2 d8 r& q. N! Z* K" x6 G& u }5 O/ n" R( y0 ^0 S! X
}
G6 t' E2 q8 i/ D8 a}
" G. D3 o$ L( B0 z};
; \# v& I+ ?4 Q, \/ R4 Z-------------------------------------------------------------------------
8 D) y9 X q* {. D% g2 S' Q' H依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* |7 ?- N% Y4 f! W% {
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);, w9 B4 X$ B0 z4 B, P* C5 e' z7 I
紧靠其上添加:
! H- J& S) F3 O7 Kif( pWndBase == &m_wndMenu )7 T) R$ X! t0 L6 z$ Y! Y
{1 A$ ?- C$ J, _7 K0 K
switch( nID )
# p7 ^6 K T+ S& g# C0 T% G, H* T {; x8 [- j4 e- z
case 2:; g2 t) T7 T2 V5 |' {
{
: Y: e t0 u# B* m( m3 A8 ]( ~, W2 C //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% `+ R5 F) n4 `, C* O$ ^ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: A2 ` V, n' X4 u+ { {
& E5 U& m0 ^( u& i! h8 N# a0 J1 Z break;3 D: O$ C0 Z q) e9 z: l* V# v
}% H( ]& @) s1 L# H: R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- Y# o, o) y9 f4 B" W7 r {
. ?0 Q$ j* _. V# z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: c6 h& q5 `6 g5 d l! O if( !pItemElem )0 e- n+ R2 }3 y
continue;
6 D( m; ~( T# m2 }1 E/ j if(pItemElem->GetExtra() > 0)" p [+ ?9 a3 `8 V
continue;
! Q3 j& B. N- l) s if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. d' S" b) ~, \( k5 U0 H% w4 s0 [, K% O2 | continue;
2 s% C" G: n' S6 e' { if( g_pPlayer->IsUsing( pItemElem ) )
% J+ W% M. u, E* M) |1 i continue;
& {: G$ H- |+ H7 R& L. B( b) R$ { if( pItemElem->IsUndestructable() == TRUE )
# e( |0 H/ b3 q4 |( @% ` {
& D+ C! r6 c% M: }8 W' X" b g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 I# w, t8 N" a# k% s, ?8 T continue;
* B8 y/ P- b& h$ S: {! Z u }; w4 Y _, b: O0 G0 M0 J8 B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 s2 E2 i+ E, X$ D }
8 d- ]% c @2 \# @: u$ c break;
T' e6 a- p" _7 u }1 V8 H2 I6 Y: m
case 1:) P* Q7 Q- K" B! i6 i. c0 y1 Y
{0 M* V5 g' t2 s1 \
//整理背包
( k; G- I) s! A: T1 r8 d //////////////////////////////////////////////////////////////////////////! M+ H1 `* H" Y9 h- c H$ S% m
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 N8 H& }9 ~9 Q+ L( U
//////////////////////////////////////////////////////////////////////////8 U# E, G3 D* s( g. `4 d& O( C
//////////////////////////////////////////////////////////////////////////
1 F/ ~& [- _! } CInventorySort* pInvSort = new CInventorySort;
$ a9 a% u/ y2 x) | vector <sItem> vItem;
) M" ]1 S, |$ D; v0 V( k1 X vItem.resize(MAX_INVENTORY);//初始化大小3 J- y' ]% P6 R* K
//////////////////////////////////////////////////////////////////////////
% D* p9 j( J8 P9 h //填充数据, b. M) j( \6 |+ C- n( j( N/ B4 L
for (int i=0;i<MAX_INVENTORY;i++)
% O. R3 b: n" Q+ z3 c {
6 N' r$ v! l" E* y5 L, T1 g. u/ W. c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" A" l1 d$ j5 x1 W if (!pItemElem)7 M! j) g) f: B, r9 ]4 U7 ?
{
) @4 B1 |8 |& U vItem.dwKind2 = 0xffffffff;5 I! V5 t L# }$ Q) b+ e. ~& g) ~
vItem.dwItemId = 0xffffffff;
% t0 J) q. r/ s5 S9 F. @! ?3 J& N vItem.nIndex = i;, s" r H" z7 F
}else {/ h4 _* \5 _4 K" h
ItemProp* pProp = pItemElem->GetProp();
% z' C7 T8 u; ^/ E$ H3 U4 b vItem.dwKind2 = pProp->dwItemKind2;
6 f! {% V/ `! |+ N) U vItem.dwItemId = pItemElem->m_dwItemId;
; [* ]; s8 L( \9 l* r' h vItem.nIndex = i;8 m' u; A: p' b5 b0 f! B' z
}! r. e/ i7 W$ s6 b
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 K- t( |& z5 E; F1 u
}
1 p4 ^& G: N& ]2 B2 k* I0 \, \- ~ //////////////////////////////////////////////////////////////////////////
8 o# b% {- @& |% i% x/ v+ ~' ~ sort(vItem.begin(),vItem.end());//排序' y2 B1 p* f5 L N4 K5 ~
//////////////////////////////////////////////////////////////////////////
& Y. R" @& r6 [! }# e //交换
5 M9 A- H* C( g( f3 @6 S, A6 R for (size_t i=0;i<vItem.size();i++)
) O9 b- `) r& v- J7 A {& z8 ^$ p. Y, e' }- a: s
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" s* E) }% b4 N8 p. p pInvSort->Add(vItem.nIndex);
7 q/ t4 H! W2 F$ W* L% F. K }
& R$ W) N, K: P! W0 A BYTE nDestPos = 0;
/ _7 O8 N% t, p5 W% W$ D* n for (int i=0;i<MAX_INVENTORY;i++)
5 u% s( P K O, ^6 @* {* a {
9 y2 i- O K& w" N4 Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: A$ d' e9 |& {# A6 z& F if (pItemElem)
* t3 H! l; m8 | {
7 \7 Z0 c7 C. [0 U7 E+ n if (IsUsingItem(pItemElem))
& r0 K+ O5 ?6 C" I3 d {) L ]$ N: M( |8 ]
//这个位置无法放0 B% X3 n; X% g H$ }
nDestPos++;1 S1 C4 [8 y/ b+ n1 f9 n
}
' q5 Q* }7 f# x; Y1 l. g }
& ?( O+ w. j. T BYTE nSrc = pInvSort->GetItemSrc(i);
4 b$ {8 S( g" e T9 V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 f: \2 D" U6 w' B8 y' t if (pItemElem)4 n/ u6 I2 T1 l6 M4 ~
{
- N7 O9 F M8 W" | if (IsUsingItem(pItemElem))3 p: x2 n9 C6 l9 R# |/ b$ n
{
5 E' U: X+ c/ A( y5 h //这个道具无法移动,跳过
H w( F1 H" j4 m# U7 |; n" k continue;
2 u5 \- A! t( G }
- m* q& e2 Z0 O" D' C! F }else{! @; W0 N7 h7 k
//空位置 不用动
( }3 F# Z& P A; e" H4 A continue;
/ G2 R4 r' \# V( f }
9 W% B1 K, P2 g/ q. i/ m //////////////////////////////////////////////////////////////////////////% v% D/ I9 W) }5 W* ^8 g
//开始移动
7 V5 w. u0 A) T* Y' @. ?3 \ if (nSrc == nDestPos)/ a2 T3 x* F# p& p4 V- r; ~- \% }
{
. |0 f7 H$ H- H4 i; f7 O9 h3 O //原地不动7 i! j1 Y) T% T! R1 V# l
nDestPos++;
- K4 ]" R; S+ ?% I0 W continue;
! L1 L# C: O8 t; L* ~6 j }
" t% k1 U- [! V1 q4 X7 z4 u- @( F- U pInvSort->MoveItem(i,nDestPos);5 p( ~" J3 n; K- \6 Q& ]6 k, k7 l) v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 f, o; |; X/ @, T Sleep(5);
6 h3 k3 Z: `/ h5 j, Z2 W //Error("移动 - %d->%d",nSrc,nDestPos);# F( Y: D, P" ~
nDestPos++;
6 Q* u$ }: Z3 e( G }
4 A) I4 A* }- I1 k0 e //取第一个元素的信息1 `2 s) Q$ F% A- B9 {: g
/*
1 M& I, U% v) U' t" ^& w if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
- ]/ ^8 z2 {6 ^9 m( V0 K( O. o {' s0 @& n) C) Z
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 F! Y! ?! e7 f |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' k2 r# E' e+ o- ?1 u7 V
}* Z, |9 G0 j* F6 |8 V
*/
; K+ m% \" C& q% G //////////////////////////////////////////////////////////////////////////
4 B+ R7 C: s& ~1 w s& e8 @! u, d break;; z4 _1 U0 P: |# I
}
7 Q5 m8 b: a! Y* A) k( c9 w% A }
$ h$ v! ^" b8 | |3 q2 [, R}
. z0 T" V& F/ u3 [' O5 t& q; i0 z6 jm_wndMenu.SetVisible(FALSE);
* j4 j& b; v' Z$ l" |; `
% P9 |9 G% ~! V--------------------------------------------------------------------------------------------------------
' N0 G1 l! ?# D1 ^! G1 O搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! U1 E, {2 ^% t5 h, `7 r0 t
{" W' t9 F' X3 n6 e+ o
BaseMouseCursor();
" X/ N8 ?3 f% ]& j6 _, z3 ?}
. Y: y4 F5 n8 G+ n \5 n, D8 V在其下添加:& `; N/ c+ e) r4 _
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
. g% l* m# g, x{# B( I' T# @5 i/ e* Z% n, j
m_wndMenu.DeleteAllMenu();
2 A5 N6 p) u% E& [! am_wndMenu.CreateMenu(this);% e0 O/ _# `! ~5 s+ s9 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");5 w: F2 M: {, U. o' j
7 m; ~' \* w' |0 W2 ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). g! b- ~6 H8 {( S. Z. w* _ A: \
{" y, Y* _9 D' Y
//P以上级别才可以删除所有道具
: j+ ^7 I, g7 A M m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ x1 N4 X4 ]' B0 X6 u, H' ^
}
( l# B4 \' f" a$ X" {* jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );, c0 }! b6 @- B/ k- `4 t
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- N3 k* x4 C V8 v
m_wndMenu.SetFocus();4 ]! _) @$ f! G' _
}
8 G" I3 b* A, K4 ?% \+ @: o# E------------------------------------------------------------------------------------------------------------1 a% T( D3 L+ f L& r! U
*************************
9 q" T1 ?# @$ H6 PWndField.h文件
7 v! ]6 A% A* w4 J4 h*************************
( c: e2 V6 c& [! `, L搜索:BOOL m_bReport;
0 c" K( F$ }/ j: \5 l) K7 R! k2 n C其后添加:; P' F/ U; a% n, t( ? c: H- h3 @
CWndMenu m_wndMenu;! u2 a# q6 i% f9 c _4 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- R z; j8 L8 J" A
其后添加:
@- i, u% S. r9 }virtual void OnRButtonUp(UINT nFlags, CPoint point);
/ H: B' y- d0 d) `$ I: I: j; v) C+ x# u- f
, g% y/ g2 N/ k+ x$ K, a |
|