|
|
源文件中_Interface文件夹下WndField.cpp文件
5 b- r/ w8 P9 ?+ r- G搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 s. `; Z# N' c* F6 k% O2 o& h6 W) M
+ o! R N' s+ P2 T" V$ y5 P$ w3 u2 d
struct sItem
$ |: j8 {- q% R/ S/ }{/ f1 U+ m8 }4 F8 N
DWORD dwId;; U1 B; r6 m: w+ `1 f" S8 m1 O2 ~
DWORD dwKind2;
, a4 l" T7 F# c- b- j9 S7 C" k) JDWORD dwItemId;
$ K! u# q1 Z, g t, k5 `BYTE nIndex;
* T: A- f- S- j+ \; s! r# JsItem(){
* G1 y# s3 R$ `# w6 p dwId = dwKind2 = dwItemId = nIndex = 0;0 a) V4 Q* o0 R6 Y6 p/ `( [2 ~4 x/ c
}) L9 C- r; M0 A3 b5 R6 l' t8 F' e
bool operator < (const sItem p2)- q7 t- j2 V4 r3 q5 I
{
* E s- ]! J; o, U7 e if (dwKind2 == p2.dwKind2): O! i: X4 H% c1 i3 y5 Z
{
4 z+ u0 s) c/ z' h# L return dwItemId < p2.dwItemId;
* b/ T! R& @" E$ E }else{- f @/ Q" j- n0 g8 _- S
return dwKind2 < p2.dwKind2;0 ?$ o9 j; U# M( ^9 U
}8 }2 n6 u5 f* i! m
}: b- V; M5 X% I+ v
};- A8 o# K" s! y/ f1 O1 k
class CInventorySort# f& G2 S2 B) U7 D2 f3 |
{/ t ]- n( r" C) }( J! @# p4 f
public:+ }$ G+ J% A1 z! g4 L. Z, H
CInventorySort()
0 L0 h1 _" F6 G2 \+ @$ Z% v{
7 r" A6 {6 @9 }# G1 s: u' ?4 o m_dwPos = 0;) z2 p) E; a; F7 K
}6 S8 k. m5 [$ q
~CInventorySort(){}
# {; O9 r+ `) D) {" f X, Sprivate:$ z0 U( O+ [' o0 ]& X$ _3 v1 r- r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" d1 M* d6 f- K/ d' A% i- A
DWORD m_dwPos;
9 o# k4 e. f8 H. fpublic:. Y, s# A' P7 h
void Add(BYTE nIndex)
% N, r" O; @, V2 ?+ M{# r# ], i+ r8 W' ^
if (m_dwPos >= MAX_INVENTORY)
7 [! {( {' _" P; C {. D$ G% z. |/ k. |! Z m
return;
* ^4 m% s0 G" Z6 Y( g }
) o3 {, r& S! s9 {3 j: q m_Item[m_dwPos].nIndex = nIndex;
' ~2 k% ?( r9 m6 Q. {5 v' e m_Item[m_dwPos].dwId = m_dwPos;. `2 I# _* r3 K7 P! f
m_dwPos++;6 O; s- [2 {9 w
}
# U' \; I U# Y8 H1 w) u' FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: C6 n* L1 F, m9 Y" i' k" b# x& b{
" I4 @2 a$ @0 {( F5 Y V- N for (int i=0;i<MAX_INVENTORY;i++)
0 [9 l% ?" k2 B' t0 w {- I: ]3 M- L @& S% W, r9 D2 k
if (m_Item.dwId == dwId)
' u" h" j/ e& E {
5 E4 _4 M: F( d1 a6 ~ f. N return m_Item.nIndex;
% M" F7 ?# }# j; o! k+ K }
1 e. F7 s4 {3 b# |* `" y: } }
1 d; |* o2 E% I: M- L+ M) w return 255;
s h4 P& |8 I, }' b/ X1 C}
) x4 h8 A( y% Gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ x# ]7 A& ~# M9 q% S
{
1 o4 p; Z# h% q; i5 d BYTE nTmp = 0;
, @# Q7 i- d2 G v- ^) Q9 p, W bool bDest = false,bSrc = false;7 w0 u9 B; \6 |# `2 S+ `
for (int i=0;i<MAX_INVENTORY;i++)
( t! W" C7 a7 Y* y( Y: D9 |, O {
$ l0 w1 w$ D0 F6 I' p if (dwSrcId == m_Item.dwId)
9 y; [' T1 Z: h! X$ _* N, E U {
( X5 |4 z" u y, c+ X; H //id相等 则 改变对应的dest和src7 Z$ o5 t8 ?$ y4 L7 j
nTmp = m_Item.nIndex;8 a" N/ k1 j4 A$ H4 x
m_Item.nIndex = dest;4 P8 h# w+ d9 ^$ ]
}
- o- u( w* o) q+ r$ K+ ~2 y- i }
7 l; Q1 p/ {, G7 V6 S+ P //临时数据保存完毕,交换开始5 p* C1 D1 h" P$ }1 N _4 ?
for (int i=0;i<MAX_INVENTORY;i++)
! l; c% [" s5 j: p: i {
4 K5 B% k g' g+ U0 m J if (dest == m_Item.nIndex)7 h5 K/ P0 O- v
{5 C/ u: @+ ^9 d! j1 D
//id相等 则 改变对应的dest和src
8 `; w/ f7 o% T! X# R+ w m_Item.nIndex = nTmp;0 Q6 h; w3 @- n" Y' Y; X
}
- @; v' B8 E1 [+ r6 b* B }
P6 N# I7 F6 I1 }: ~& U}
9 i1 U' f* ]4 x6 O9 H, C$ K4 _# |8 X};5 X+ k. C2 S$ K
-------------------------------------------------------------------------( z& w9 w3 }9 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- ]& {0 d% y' h/ n
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);4 O' d9 J- F6 A: V! ]
紧靠其上添加:
+ D( H! {& P2 u, z5 v9 lif( pWndBase == &m_wndMenu )
( }" H2 v6 i( u& }7 @{
- G, x2 T, A$ W, N switch( nID )
f0 v4 O' v' `$ v" e( Y {. c( R9 z g9 @- X1 t1 S
case 2:
7 z7 P, R4 \$ x! L9 S& ~% {4 a {
' g! f, }. E5 V { //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& ^+ i4 q. ^9 j2 ^( r; E+ F' p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" h7 J0 r0 j5 \& g1 ^7 s% i4 L {
, Q z$ d/ T/ h7 {) b" q; P2 W: k break;+ _( S: X" v8 A0 r
}% q) N' a% t4 `1 ~5 b
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) U/ f+ |6 j0 B- z% L9 I {
2 p; B. }, ^9 l& ^% Y2 n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: w( P/ b: _! y& |0 \ if( !pItemElem ), n7 t$ {1 R; M; X
continue;, h7 ^; ?! t a
if(pItemElem->GetExtra() > 0)& N( ]& N& K0 @( C4 u9 Z7 T1 W
continue;
# T. q5 z, [) v4 a: h6 W, D& M+ E if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ g& t: t' d) w, S continue;
$ n8 K) S( T) A/ w4 R: ^& e if( g_pPlayer->IsUsing( pItemElem ) )$ v% i, X+ [$ j/ x* A
continue;
: }7 p9 h! q. ^% b3 b if( pItemElem->IsUndestructable() == TRUE )0 Q) ?# f4 ^7 n# D4 {2 y; ]
{
# l1 _" W; }/ l5 R8 s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* q+ b% V7 J* ]4 l' ?5 { continue;
3 Q2 `: a, W( v. M5 J* k }
( F4 }6 a( D t- ^) e9 F$ _ g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 _. m" r% Y0 ^6 N
}
& r7 p1 g b3 W3 o4 D+ c0 A; X break;& b6 a) t- T c7 h9 }! r/ \8 ?
}) U( C3 }& ^' `4 L1 W# p# `
case 1:
0 P7 Q$ g3 K+ c- A4 N( q {
! ]: `8 t2 F/ h8 T! N/ o: e; G //整理背包
, g0 n; M4 f- K- O //////////////////////////////////////////////////////////////////////////6 J* ~1 F2 |: ^% q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" S' [; D# | v& {! \& h L( `
//////////////////////////////////////////////////////////////////////////3 l0 s+ H* C1 x! F4 I1 ~
//////////////////////////////////////////////////////////////////////////
+ O! R. Y$ ?8 u- v9 F6 l* L) k CInventorySort* pInvSort = new CInventorySort;. p6 g( k0 e6 P r" d
vector <sItem> vItem;" m* ~5 c0 }* [9 [
vItem.resize(MAX_INVENTORY);//初始化大小/ t2 a9 C, c2 {3 b6 D6 [# U
//////////////////////////////////////////////////////////////////////////* W/ u; q) V. V
//填充数据
' o- F; U* F, u* o for (int i=0;i<MAX_INVENTORY;i++)
" i. Y: B% W7 w8 ~( ^0 b r {" K$ F& o; p( y1 q* z
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# g2 V- c2 m1 G5 H0 s. V L# [
if (!pItemElem)% _3 o! X+ W. q1 ^1 u a% b
{
, @( J N& F' Q! c; H vItem.dwKind2 = 0xffffffff;
- T! f; Q0 K. V& J vItem.dwItemId = 0xffffffff;# }* `3 u: E: t1 n F
vItem.nIndex = i;, h3 s6 Q% @, B! j
}else {. [: s! e. ?- g, _/ u# t) p6 G
ItemProp* pProp = pItemElem->GetProp();
4 F3 K$ I5 L+ e& m4 _( ^* G vItem.dwKind2 = pProp->dwItemKind2;: P; F- n- [, h& J7 i- {3 y" \
vItem.dwItemId = pItemElem->m_dwItemId; B& M n6 d& _" }% X3 o% I
vItem.nIndex = i;
' I3 w6 N, X7 I9 r }
, i3 K+ h- V, Y; V) M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 A- q$ y9 e# b K w }
( e8 b0 `, v1 A# P! a" | //////////////////////////////////////////////////////////////////////////, w( p% o" T9 V0 }
sort(vItem.begin(),vItem.end());//排序
; _4 G+ ]$ y' }# V q+ A+ q //////////////////////////////////////////////////////////////////////////
# x: g; ~5 f6 I! u //交换
* K. l2 I2 s3 {; D e) t' T for (size_t i=0;i<vItem.size();i++). u; x# P2 q) T4 y0 ]2 A
{( _0 \8 O) C [9 x Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& X3 Q* u+ k2 \6 v
pInvSort->Add(vItem.nIndex);) f6 n p2 |8 y* d6 {) w) q) \6 }
}" K+ a( e; m1 Z: a7 z3 q `
BYTE nDestPos = 0;
, O9 G& B0 `/ B2 ~9 Y- C3 a3 [ for (int i=0;i<MAX_INVENTORY;i++)' z3 I9 J: D' {/ {! M* n2 n
{
8 e/ e; J) x! \) q$ ~; [# Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! H2 b! Z8 Z" i7 M( B/ ]6 H/ O if (pItemElem)0 G4 e. j4 S) j
{: D) ]6 q) m7 ]+ v: h0 _. u4 ?1 N
if (IsUsingItem(pItemElem))! Z( o! d2 a ~$ T# @
{
, I8 I$ b- i4 a1 u" ]; u //这个位置无法放
* A- a4 C4 b5 I/ d- @6 ` nDestPos++;
. z- A& G/ C0 e+ B) d& O }0 R0 Y7 r) L2 [; g- q
}
L1 m1 i% `' D9 E6 m6 M7 J) ^ BYTE nSrc = pInvSort->GetItemSrc(i);
7 j8 w( l- A# p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);) k( |" s" S& D& d* q2 W
if (pItemElem)
# S6 ^+ }* X* A A* Y* l: Z {0 D( R2 ? }: y4 B% @6 ^
if (IsUsingItem(pItemElem))
: n! o' o- }% W5 b. q& o, P$ { {
" ]2 d+ e. Q% J, g/ F \ //这个道具无法移动,跳过% g( @& j+ ~1 G
continue;
0 L- V% W* m8 e0 |! ~ }3 Q3 m! @2 _9 T3 }1 y5 V
}else{
! `6 `+ G! O) c; g //空位置 不用动
/ J+ l3 Q! l# u continue;
/ i1 l5 R: T9 ?8 h! r6 G" S0 c }
: S! D5 o* g4 a" u1 ~ //////////////////////////////////////////////////////////////////////////
3 O3 m3 A7 i' V4 j4 y //开始移动+ L2 N' R- O( y a
if (nSrc == nDestPos)
6 b' A7 ]6 I# d- H3 V; _ {+ H. y3 P9 ~( d& E
//原地不动
! q6 [' y$ A; `6 Q9 p B) j& g nDestPos++;
% P- z9 ^$ l( U# K continue;
% r4 d+ {3 N* ~) q+ | }* d. j- S/ p* {7 z8 M. d
pInvSort->MoveItem(i,nDestPos);
3 N% ^/ n. h t& k" @0 W+ K" W7 O g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ _/ [* Z; |7 L1 v! }* { Sleep(5);: X( i3 x5 S) l' Y
//Error("移动 - %d->%d",nSrc,nDestPos);+ m8 ?; H: K2 A1 \, G0 q
nDestPos++;- Q: i4 @' B# c' l- a
}% f7 f: C( t1 O9 ]3 ?
//取第一个元素的信息& t, f1 ]7 @6 u* F4 V- W, A+ L8 m6 p/ V. p
/*
- l! Q* y: u3 z' N: k; Y6 N if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" R5 j# Y! f7 e7 `8 A7 w+ B) \; D
{1 H D+ k, Y r. g/ y
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);' @0 h+ m: Y5 z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 B4 ^3 {7 V& G6 h O% \ Z
}7 ]- q# u O8 M9 i
*/
; C& K7 z: x1 L/ r' I! D //////////////////////////////////////////////////////////////////////////
7 L) U6 T) x: e t+ a break;/ H* R3 ], l! n* m" b8 N+ w
}8 |" n, v+ \7 o7 x; j+ d
}
8 {0 ^' e, }+ D, r* \6 |# o1 Z}) ?3 }9 F n6 O. r( k
m_wndMenu.SetVisible(FALSE);
1 o8 i7 O3 n: d7 L/ }! e6 z+ @/ U( Y4 Y
--------------------------------------------------------------------------------------------------------% ]6 U3 s5 i K* ` H) h3 `
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 }9 _ }/ h* S' t8 g
{
5 o: [" J- p+ m& f& \0 EBaseMouseCursor();
# M2 A7 g- J% _/ I} L9 U4 ~8 W, \( |& f- x; E0 R
在其下添加:' H# d# X v1 n, Y9 ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 W: |$ O, \2 n3 j C, N3 H0 W{
C0 L$ S; a1 N' l8 jm_wndMenu.DeleteAllMenu();" B& |# O2 l" \( A, b
m_wndMenu.CreateMenu(this);
: E6 W0 e% d0 J( }# |m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% R0 I3 @6 Z* r: l( q8 `% @
4 h; z7 r; i0 w$ ?8 f; Wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 R) r" K& M. W3 V
{
$ ?" Z: f- _' h+ H/ i+ F //P以上级别才可以删除所有道具0 N3 X" [% p1 b) j0 U1 s3 [ Y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");. p$ |$ [5 f/ z0 {' n& k" w) \
}- d6 n9 E$ G) n; R! p0 @
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, o) h( B2 E! h: Mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
( E& H! D) k' L# O2 rm_wndMenu.SetFocus();% O3 Y: }" \! z+ ?5 J/ v
}
% X1 E b) X( E9 l5 D------------------------------------------------------------------------------------------------------------
5 i( ~" d" v u8 [$ a7 x*************************. [- R/ [# T; ^/ O3 f; h
WndField.h文件: Y% Q7 X1 W! S3 W
*************************3 l- p% y5 `6 P9 ]5 ?$ r* {
搜索:BOOL m_bReport;
8 h# y( i4 r% D* H a) r" s; q其后添加:
; U7 w* R: G9 S2 ACWndMenu m_wndMenu;
% S1 J4 A+ H% G; |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 W& L( R$ V5 g5 j6 o
其后添加:
6 I" J9 a" U& h9 Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
0 m; ~: G& U/ P& k' B( n
3 G6 O$ |; Q( ^) I6 n
& @ }" G% H4 C( K1 y5 e( x |
|