|
|
源文件中_Interface文件夹下WndField.cpp文件% I' ?; @9 v p+ B3 O' r: v! k3 n8 A
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 N$ X# m) v; v/ i3 S) _" c& I- L8 W8 x5 x. F8 \
struct sItem
# n) [0 y+ a# ?: X. V{# V o- [3 V" z) i
DWORD dwId;& Q3 Y' C) ^7 v) @8 S
DWORD dwKind2;
% n6 }8 `) y, U, o4 D! WDWORD dwItemId;% ]2 ^2 o/ w( I
BYTE nIndex;
, q# S+ `$ S+ b9 Q: d- }sItem(){
; ?! \. R& r) C8 Z dwId = dwKind2 = dwItemId = nIndex = 0;
' N- ]7 J- Z) g* X( I' O}
% l" Y7 v3 {: ?. p4 Wbool operator < (const sItem p2)
) C" o- o8 R P% a( b" N{
# |! Z/ W4 K- P& |0 ] if (dwKind2 == p2.dwKind2)( c, C2 ?/ X3 U
{
) W* w! o0 @+ Y return dwItemId < p2.dwItemId;
3 C c0 o k1 H }else{
X7 P9 t: q. D return dwKind2 < p2.dwKind2;
% k0 ?) U2 Q# V9 V }
3 Q9 P. i" O* \5 V) h/ h/ Q* o}
# H+ J: V Y7 f9 g; y# J$ q& e9 C};; ~ p0 Q4 G0 ?
class CInventorySort9 d# z9 g. B' `" {4 E
{" S6 h2 R" K; S/ J
public:! ]/ R5 p8 Z7 x) K E! h# h2 L
CInventorySort() E9 K$ ^% F. p2 x
{
5 C! G D- b! b' Q- e9 }6 S3 @9 o m_dwPos = 0;4 Q4 B' {, s9 `3 n) q$ z/ |+ p& ]
}- D9 N9 X! D9 t# w" y+ I9 }
~CInventorySort(){}7 c: p- |, r h' k( {& a
private:
8 i" t$ x, w1 z) }8 g$ I- vsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' P. H5 ^7 D$ `, U! Z$ v& f( EDWORD m_dwPos;
* o2 e$ T) a5 {, H) `9 gpublic:
" Q% d! C3 P# {) vvoid Add(BYTE nIndex)) o+ Y* B( S7 v
{
3 m. J0 o% o' [( S+ n1 n6 l if (m_dwPos >= MAX_INVENTORY)/ P+ c" _3 Y1 _1 c0 t
{
+ ~3 Q& u& W; x# ~5 C/ U9 V, ]; Y; Y return;0 r, j. x4 f3 n1 E9 ]- m
}1 H! k( u$ Z# T: Z1 m' {
m_Item[m_dwPos].nIndex = nIndex;$ C) L2 C- y W: ~
m_Item[m_dwPos].dwId = m_dwPos;. ]' J# n; t( m/ r
m_dwPos++;
; c, k) N% f v}
! z8 Q' N ~; i) gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
' O, B q* p5 r9 {! F{
" M+ e' ]/ @4 r B! P for (int i=0;i<MAX_INVENTORY;i++)# o" N( f) w% [4 L
{
) e9 ]) C1 A1 T) u5 P if (m_Item.dwId == dwId)* K7 C) c2 q, ~3 f' P' l9 e
{, y" P; L1 x5 _- U9 _9 U
return m_Item.nIndex;
4 N0 t- q! R0 H1 F }
+ |1 b! ?- v6 `6 W4 L3 @ }
5 k, U1 A) ]' `' o! e return 255;
! y2 p: `5 G- {/ X1 p" j}/ T! r$ [2 D6 l4 H! V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 b V4 c( C9 ?' I1 i' {9 S9 \& {{
8 [1 n# D& M- O+ `+ j( t BYTE nTmp = 0;
9 L9 D9 b e/ _- ?$ a" ^" e bool bDest = false,bSrc = false;
* d0 {" p" y: J, }% x for (int i=0;i<MAX_INVENTORY;i++)
# Y* N e3 X5 ?* F f2 L {2 W) O, N# @* l, Z# ?+ s
if (dwSrcId == m_Item.dwId)
0 ^9 o' j- i. z. M {6 e9 R1 T3 w$ U O% y- d
//id相等 则 改变对应的dest和src
% l4 U9 D+ U- A/ ~& u% r$ j nTmp = m_Item.nIndex;% A+ t6 \/ s+ m1 y3 N" A a
m_Item.nIndex = dest;* O1 T& q5 l5 U: ~& }8 N/ `
}
% e W4 o) Q2 x5 R2 r% v+ Z3 G }
W8 P) P1 v0 [* y3 C# k2 ]" G //临时数据保存完毕,交换开始4 f3 V, ]! g8 M T5 I. D
for (int i=0;i<MAX_INVENTORY;i++)
" m' z1 m* q' ?. [7 R! ?* K' o {
+ W! g( J2 t' C6 B3 l$ t( F7 `% U6 Z if (dest == m_Item.nIndex)
, Y6 D& r$ I; x I {2 u$ {! U2 u* a' C, a2 Y- M
//id相等 则 改变对应的dest和src
5 E6 j) G4 b O* a# H# n, f% b m_Item.nIndex = nTmp;
6 n& z% Z/ g) C& ]0 f8 N }2 a9 E1 W- z# Z& N/ I" x6 m: M
}
: P6 F3 s9 B v6 {9 i}! E: X- z$ a* U# V
};3 _, X1 | n8 g6 J8 F/ f
-------------------------------------------------------------------------
( a6 N, P& m* H. c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )) `+ J1 I9 o E b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" I, O% a% {, J1 R& j+ u紧靠其上添加:
1 r4 _; r% q2 p7 k: g0 P+ Z4 Hif( pWndBase == &m_wndMenu )8 c0 ~% u, V0 D: @8 F) C4 m
{
3 a- b; J r" [$ ] switch( nID )
9 z4 w! X; t+ ` {4 b% m5 z7 K$ [* u8 q* W, _
case 2:( L9 K, g" W% @% _0 W# R8 R# F
{
) h" J% }4 M3 D5 g5 W% l" L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 N+ T+ W2 `5 b! k5 W0 U' W, K0 G# F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
c( g! `& I% q7 C' [ {" z+ F/ I9 m5 Y& f: |7 o
break;
7 I( j q! H$ N$ H5 c/ W4 a }
" e3 ]0 x2 i, j$ W; f8 e7 G for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
a t* V7 @( z- g. X! o {8 l3 _, y0 m" ~. ^9 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 Y h2 p; E4 d- @0 J
if( !pItemElem )
' Q3 ] W- i+ x# p continue;! X$ Q! |3 c. N/ A
if(pItemElem->GetExtra() > 0)
8 A/ K, r! H8 j* m6 x- p5 k2 z continue;8 u5 S# g+ W; Z, `0 x
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ J5 M4 @4 n5 z/ G0 { continue;
! y4 E, E0 \5 H/ r7 \" `- [3 _ if( g_pPlayer->IsUsing( pItemElem ) ) E6 n3 R2 Y* k- f
continue;, S. c+ i) P( P( L( w
if( pItemElem->IsUndestructable() == TRUE )! Q- T3 G- D/ T- j7 e; J! ?+ ?! A
{
" Y" K- |' n1 y7 N2 |8 T% Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 }% V1 V7 r3 O: j* W7 J3 d9 w continue;
* T# I/ N& u" t# ? }" e+ L- c; M& v) `+ \1 `( G. C: g
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);/ [1 d' j4 [% e+ s r6 {6 W! _1 K5 L
}
0 B- e; N" F* A break;
6 {: ^. S4 `9 d4 q2 w( l* G! J/ } }
w. @5 h7 I5 J A' D& z case 1:
; q; }# V- I& U L: v& Z0 f+ s {
; M& B. n% I) l9 X7 ?1 N //整理背包
/ d! ?& z; }2 e0 u //////////////////////////////////////////////////////////////////////////
4 b# w9 ]# Q+ O, x5 Y; b //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 A, e4 z7 i0 w //////////////////////////////////////////////////////////////////////////
. ^3 B7 }' z( \$ |7 i) F c0 y$ p //////////////////////////////////////////////////////////////////////////0 F- Y, H! _& G8 A
CInventorySort* pInvSort = new CInventorySort;+ e _0 H6 S: U$ k
vector <sItem> vItem;
: b Y3 _( _, t+ Q7 M' {4 H vItem.resize(MAX_INVENTORY);//初始化大小; f( a3 N* N! v7 I, c. i! u5 @
//////////////////////////////////////////////////////////////////////////+ e( g8 Z% W* E6 F
//填充数据3 ~' P. u' v3 J) m/ J. B! F
for (int i=0;i<MAX_INVENTORY;i++)8 l2 Y% Y0 C; H3 N: v2 i) Y
{
6 `3 x( K" {* N# K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* _* q. v v$ }! P- A+ Z
if (!pItemElem)
* {$ Q3 ?$ q+ W M; `. _7 m {' o* n9 P: L3 F* r
vItem.dwKind2 = 0xffffffff;# r, _& A- e4 M) S
vItem.dwItemId = 0xffffffff;" Q9 {. H0 i! { {- V& v5 }% U
vItem.nIndex = i;
1 c* @2 I: j6 `9 y4 z& {8 r }else {. ?- p$ a8 K) W3 R& K! {
ItemProp* pProp = pItemElem->GetProp();# f# A7 v" w! J+ K
vItem.dwKind2 = pProp->dwItemKind2;' V+ Q7 Y# |) i1 k% }* m7 [$ c
vItem.dwItemId = pItemElem->m_dwItemId;
$ ~5 N) |! k% {& P* N& ^* V0 Q) f* r vItem.nIndex = i;' _$ _) k$ q! D6 M# `. D
}1 `* I" o7 u$ |( ~ W5 B% V8 u# L* g
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" j2 H" ` a! ]- H& w; L% ^, k" t# _. h
}7 k4 {7 v% ^: |$ K# E) `+ y7 Q+ ]
//////////////////////////////////////////////////////////////////////////. e$ L- q% @4 `$ g
sort(vItem.begin(),vItem.end());//排序
8 q% }3 Q/ H" G f! i& b+ e; [% d. g //////////////////////////////////////////////////////////////////////////3 V4 a+ O* j- I6 P: s9 [/ Y
//交换+ D4 R8 B% _. [3 }! y
for (size_t i=0;i<vItem.size();i++)5 X2 }# ?' s! j9 O9 s
{: s& n4 v5 H$ [3 i3 ]) |$ H+ w
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- z$ l7 Q; |+ N4 u8 I
pInvSort->Add(vItem.nIndex);# u$ }% \- L9 B( [! z1 c
}6 o9 D7 F9 @+ a4 u, k
BYTE nDestPos = 0;
' [1 }% v3 F/ d+ |/ q2 l2 X/ I% ? for (int i=0;i<MAX_INVENTORY;i++). i' T7 U* e% C# l7 N4 @
{8 A# r. n4 H9 o/ q+ x/ i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 j5 I9 S; t& r. `! B1 j. \- W0 G
if (pItemElem)* ~" A$ E: D; z7 a
{
8 A) w' x' w4 Q3 W5 G if (IsUsingItem(pItemElem))
" j9 Z& W; B% y {
- i0 @' C" o7 H6 E- G: ]; J* G //这个位置无法放6 d4 z8 R, D5 V. n- s1 e( U
nDestPos++;- s! z* C6 J- K0 u1 u
}
) l" J/ K4 b6 _9 q9 E8 h7 | }
4 C, l( E0 {$ i, ], j BYTE nSrc = pInvSort->GetItemSrc(i);' }( j' A& f" g' m9 A, G5 x
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 J3 Z: I) j* d1 ^8 w! m if (pItemElem)# W1 E; T& |- R, x$ u6 Y: t
{+ V% J6 }; D5 W. k& J/ p; s
if (IsUsingItem(pItemElem))6 x% j) @; y9 I+ |+ D3 E
{
/ d/ z# _/ _; [ i% Z7 z //这个道具无法移动,跳过
( U( w$ P! k7 o" s8 Z z. @. \ continue;5 R4 ~9 a& [* D5 J; w
}/ P5 J5 m/ J5 D6 E+ Y
}else{* ^* c7 b; e3 ?
//空位置 不用动/ A: i. Z- q: [% |5 T
continue;
6 v2 b" I& v$ o4 _1 B( U }+ I, f$ ?0 h8 y+ a- K
//////////////////////////////////////////////////////////////////////////
* p& N, w K2 e! r //开始移动
" ^: ?. G% T1 d: Q$ U if (nSrc == nDestPos)
4 x8 D: I/ d# g6 ` x) L {
* }; U% U2 B( l) A* p //原地不动
- T1 _3 l( ?2 |' S) J nDestPos++;. J- J* W. P3 r0 u* U% b! `' r
continue;% ? K9 m- B" j* [" m4 J
}
% M6 P' i. f# ~7 V0 _9 p0 U, S4 Q pInvSort->MoveItem(i,nDestPos);
9 D9 P1 D5 ^' U. S5 j: h g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) o5 {' e4 Z! F" c: t9 b1 z Sleep(5);8 v, \7 v2 E7 f% R5 R9 y/ p
//Error("移动 - %d->%d",nSrc,nDestPos);
* \2 |. h0 L8 o( C nDestPos++;
# Z. j$ V7 E8 b# `3 Q7 t3 k( d }
/ d: T. | f D) t$ { //取第一个元素的信息0 g7 ~( F, A9 }3 _1 C6 I
/*8 x9 G! ^& P% W
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 ?5 U" j; k5 {# Y7 L9 W" _# P {* |0 A8 z& f2 R o7 u# a
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);; R/ }0 m* `6 A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 t# t% ?- R5 r& C$ c& S5 Y
}
3 z( K6 o! ?; z */: W% I. v* p8 u/ T
//////////////////////////////////////////////////////////////////////////1 _# f8 c0 _& x( b0 p0 Y
break;5 e( `, A- Q' E% j5 Z
}
" O( m4 X# o @) Y } $ _/ H- ~& c' c1 i! Z9 V; |# V
}8 C5 ~$ z C& i! [- v7 m" E3 R7 t* R0 B
m_wndMenu.SetVisible(FALSE);
6 }4 u v& L) c* Q0 I$ p- c+ n& I7 o! c7 c# a) C! \7 O
--------------------------------------------------------------------------------------------------------
# R4 Q; ~+ ]7 R7 Q9 m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- a! t& U$ P1 h, u; w{
5 e2 k2 P0 N3 Q7 f! P* FBaseMouseCursor();7 q) V2 W4 W3 V J7 m
}- L. Z- v2 m! Q& [9 r7 q: p
在其下添加:$ j+ m- e/ q2 r. C, F% [$ C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: f: u- D6 M2 P2 m{
2 O% @. C1 e. Em_wndMenu.DeleteAllMenu();5 f& w$ k/ S+ n5 h
m_wndMenu.CreateMenu(this);3 H0 t5 N, W( t3 U
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: O0 t0 m4 Z ~2 k8 I
; J& v% p# y2 c+ o& F1 e0 rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" Z$ U' j) g: i7 ^- n: ]& l{5 ?5 y3 x7 U. j) O
//P以上级别才可以删除所有道具
" o8 A( T. D ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
{9 g. i2 J, }}
& H; P( F6 t! f! O, M/ |: r& h2 cm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 v! J% S8 Q/ [8 \ ~9 Y& a! [
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( v: D0 P. k; ? d, d5 ]$ i: C
m_wndMenu.SetFocus();) f8 `) ]% h) D. j/ ~& Z
}
2 D) H7 G$ z$ \* o, p------------------------------------------------------------------------------------------------------------2 R# a1 ^$ k0 i9 o; L
*************************+ I6 i9 B4 L' ]
WndField.h文件; Y) ~+ u c8 ]7 X2 d! t3 j3 `" i
*************************
! B4 W7 `+ r* H8 \5 z; A$ e搜索:BOOL m_bReport;3 v. ^9 Q! o) w5 J5 y! k
其后添加:
8 a( U2 `9 H: T" U F, WCWndMenu m_wndMenu;0 B, A5 w7 n" k9 `
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ n9 y; g& e& {7 n: Z
其后添加:
! a/ g3 N0 ^. F5 [8 o8 J O5 |% v! Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);
% |7 [6 ~6 D! U, R) G7 n1 ]# M. g
6 E" k0 h/ j; h* x& m) m
1 v9 \5 z; e( C |
|