|
|
源文件中_Interface文件夹下WndField.cpp文件
) ? O1 d! H3 h9 y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! i0 o. G3 E3 \
! m, n% v+ h: z3 B1 y
struct sItem6 T$ A1 ]3 o$ |: I7 `; W6 h
{( r/ T' t+ u$ x0 Y* U- A
DWORD dwId;3 z6 P k6 r8 ~/ R- K
DWORD dwKind2;
1 V5 X. v% j& dDWORD dwItemId;
( J; B A& h! E4 q# K- e& MBYTE nIndex;
7 s, E1 z' L7 r- Y2 ]sItem(){
' K/ T- b. ]4 j! e3 d/ A: Y4 h# _ dwId = dwKind2 = dwItemId = nIndex = 0;
5 @- c/ b/ b0 t: u0 B}
5 k; k* m* ]) J5 fbool operator < (const sItem p2)! v# i, i9 M) D* J: }, i- x6 p6 \9 t# V, P
{3 o4 u9 Z" o1 o" M) J, r; u) f
if (dwKind2 == p2.dwKind2)
9 d! q. }* t$ @8 I9 B {
% F* d2 {. T8 p( }6 T+ e; E# @ return dwItemId < p2.dwItemId;
: d0 o& g: r$ F3 [! {7 n* n& y9 O/ ?, Z }else{/ J/ K. \1 z" H5 m. U
return dwKind2 < p2.dwKind2;
' I! Z+ |6 v" M% K$ W' Y }
4 ]' y8 t4 B& }1 V( @}
1 \ G$ I7 t( t. \0 u& N};
+ ?9 p& ~$ O* N; n0 J* S; Mclass CInventorySort
9 j$ e( q, ^7 b! U0 x/ S{4 \! |, q# o9 a& B
public:
" R2 \" |. Y B# R9 zCInventorySort()
8 `; R/ b9 r7 Y; H$ O{
9 T2 l& `5 m" W& c+ s; X, F% w- { m_dwPos = 0;
* p* [& l& v2 I! \6 I$ S}
7 E- ?* j9 E2 W0 @; D+ T~CInventorySort(){}; ` T* Y0 T' X, p! t2 G
private:2 z5 V% d; z+ o' {- v$ F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! a) ]. V, w8 }, f( PDWORD m_dwPos;
8 k, H) t( S- b) h7 N' ipublic:
& d# f- o) M. ~' v: T, Evoid Add(BYTE nIndex)
! K* O, ~, E; p% `{
: I3 u, U% \+ l6 m if (m_dwPos >= MAX_INVENTORY)
3 k, {7 g4 K6 n+ U; u {
, h6 m6 B3 N, {! s return;
5 [7 {. ^; _1 O% p$ F! z! D9 `. ~ }2 U, |, C. E+ T( T$ U
m_Item[m_dwPos].nIndex = nIndex;
3 K7 I- x8 D2 F m_Item[m_dwPos].dwId = m_dwPos;, e) A& G c) A9 C
m_dwPos++;* L+ {9 q5 w5 Y* V
}6 X( H8 T& u% J& z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ [: d' R: n' ]{1 e5 [$ L1 B! R8 Z9 o
for (int i=0;i<MAX_INVENTORY;i++)
4 b, l& J. V. v) t {$ P. M/ t; Q+ D3 ?- N* ?
if (m_Item.dwId == dwId)
5 d6 @8 N0 b3 }2 m1 Q1 M( W. v {: N( i8 e Q. t. ]* r7 t! H* S) e
return m_Item.nIndex;
! x( P# E' y+ R. y1 V( C }8 P5 j7 [, s( T0 H
}6 O8 Y% H' o: b( X
return 255;
0 M( u$ i9 M6 {0 r; q) z}
& Q/ }: g0 L/ s$ |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 s0 N1 a! u# q2 y' D8 }" T
{4 E3 H6 H! l) P8 M7 Y: }; W
BYTE nTmp = 0;7 L/ p& `+ u- F* l# {
bool bDest = false,bSrc = false;* L6 K! q; _. z2 f
for (int i=0;i<MAX_INVENTORY;i++)( w' T: D6 t# z! ?5 w+ f7 F0 B
{2 l, Z+ q- T7 H5 x+ x& m" k* B
if (dwSrcId == m_Item.dwId)
6 N% d; f8 k. @: H {$ g; m/ B6 `- V* d" }( C1 V
//id相等 则 改变对应的dest和src- g! Z) O l% Q" P# {
nTmp = m_Item.nIndex;
& X. t4 t5 Y$ A( A% X+ q m_Item.nIndex = dest;: t( S, B4 d# o: ?8 k/ h* C
}1 x+ E% ~8 A4 n4 n
}
+ J* u9 g, Q; n6 y1 v //临时数据保存完毕,交换开始
& x' E! ~9 W8 W for (int i=0;i<MAX_INVENTORY;i++)$ G' b: ?, A' S9 `9 {
{
) Z' r- ^: ~$ s if (dest == m_Item.nIndex)/ g$ E4 B, @5 {9 ]! k, k
{- n. g0 Z/ N8 J/ [4 T1 Z$ z" u
//id相等 则 改变对应的dest和src+ M9 c" l2 ~$ @ v2 w- _( C: W* p
m_Item.nIndex = nTmp;; s' }8 s; \5 a v/ ^; u
}
6 M+ y# W6 o" T/ ]0 N }( W; e/ P0 j5 N7 K; @+ h P
}1 ?' Z7 I0 {% A- z
};% N$ |1 ^. _( v
-------------------------------------------------------------------------/ g5 G, m, v: O; @# }% u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) S9 g, F: u" Q. \6 |1 N4 g# j( N
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 o V3 U# @" n; d; O3 N, z, o紧靠其上添加:2 H6 q/ B4 @, D
if( pWndBase == &m_wndMenu )1 X* \6 s) F! `$ O' c
{
2 M9 ~7 O2 a8 G switch( nID )* E/ ?7 R* [5 R- B/ y
{
* T0 Q; n* \/ a% t case 2:# p# t+ ^' u, H- y0 s; d" Z$ p
{
6 G; t4 t3 x+ i1 E //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 L e( K- L. ^% K1 z if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- v! G( V" B8 e3 N
{
7 s3 Y0 M, |7 |" m" ]/ v5 k break;
& y8 k \6 K9 @! S: J/ F }& t6 J/ n; r% Y/ U1 ~* g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); [ L4 d% T7 G& s( s. s$ M
{
6 s5 {/ D( K$ q) \! x4 H8 R% ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& a/ Y5 j! e6 D0 l
if( !pItemElem )) X' g: o5 l# W/ Z2 k# I
continue;- ]6 }. D4 q- X" I8 z
if(pItemElem->GetExtra() > 0)- `3 M4 y2 w2 n
continue;
! A- D+ D+ w+ P! Z4 i if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 a; {/ V0 r' C* C
continue;7 o! m- y4 M$ }, O( T9 S( Y/ N
if( g_pPlayer->IsUsing( pItemElem ) )
# Z, w" f7 J& N& S* N5 R2 c continue;, O2 m3 H2 q* f! U5 U
if( pItemElem->IsUndestructable() == TRUE )
3 g) B! b& ^' G z% u {
' ]: C' {* \- a, J' Z! ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 M7 N/ W% }2 [! o$ r7 {9 }
continue;* x g1 S- f6 H8 Y! i4 |, @: E
}: B/ V% q3 v; {1 \- N
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 \0 |- H1 q/ M1 ^2 G1 v$ A- Z }
% | U1 N; [5 G" L break;
: T9 n; R1 A+ p1 {. | }5 J" a) B9 T5 Q" V& B- I' O
case 1:% U$ d1 Q# @0 W1 \2 k" h: c
{
2 g, I5 z; V" u* \, [2 z //整理背包* l& [! W# |- h1 l& k/ a
//////////////////////////////////////////////////////////////////////////
, h% l6 w5 `5 N. O8 U5 R" k( d' Q/ F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( ]! s; r' \! j: A; P* L! X5 I3 t //////////////////////////////////////////////////////////////////////////. `8 R: f3 J: I) i
//////////////////////////////////////////////////////////////////////////0 [7 B4 m4 O( K% o, V& D
CInventorySort* pInvSort = new CInventorySort;: b& D+ F0 E7 Y5 r. g0 o
vector <sItem> vItem;/ t/ P9 `: P( m. X [: s
vItem.resize(MAX_INVENTORY);//初始化大小3 a w5 d1 p8 i4 K0 G4 y
//////////////////////////////////////////////////////////////////////////
. J2 S+ |3 ?, o: e6 ^1 Z9 p //填充数据
3 a2 }0 b. Y2 Y* n for (int i=0;i<MAX_INVENTORY;i++)6 h/ T6 v! G S. A2 o, i2 _9 t
{; N2 E. m E+ j$ z T/ ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ^! B% Y6 Y" N+ ^+ f/ D: D if (!pItemElem)7 g5 K2 X/ G1 B& ^' d+ f. `
{
, I, c& y* i/ c vItem.dwKind2 = 0xffffffff;
- N! H9 W( }* ~& _ C6 z- ] vItem.dwItemId = 0xffffffff;1 e" _4 {. {' P
vItem.nIndex = i;
" C }5 T7 N1 I( H( @8 D; h1 [5 V }else {; t: C ~* H; Q6 S
ItemProp* pProp = pItemElem->GetProp();9 c0 h" D, `7 z
vItem.dwKind2 = pProp->dwItemKind2;
; S+ ~# F' m% O4 K vItem.dwItemId = pItemElem->m_dwItemId;
f) w" a1 R0 d vItem.nIndex = i;( K( Z% x% S4 v0 ], B. P8 d
}7 ?5 {2 }4 t0 x6 C/ Q. O. r
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 S+ s$ T3 ~' t5 W! ^! }" P5 W7 L2 I }4 W! E4 ?2 F3 q
//////////////////////////////////////////////////////////////////////////% v7 ^; J9 l7 F+ T, t2 x
sort(vItem.begin(),vItem.end());//排序
6 `- W2 V7 x1 z* ?% u6 X$ ~0 A! b, h9 B //////////////////////////////////////////////////////////////////////////. u# f4 G7 M" v; v4 i
//交换/ U: v$ g5 M) A2 ?8 q
for (size_t i=0;i<vItem.size();i++)
' Z9 K$ _) z' U {
7 z) Y' }2 K" n0 W' u //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ Q; @6 l' T7 q3 [
pInvSort->Add(vItem.nIndex);; s# k( I @9 {7 E
}1 a8 a! u9 Q9 ?6 T6 s8 [5 m/ q
BYTE nDestPos = 0;
4 x9 h4 f1 S4 I5 o8 i' i9 r for (int i=0;i<MAX_INVENTORY;i++)
& v+ X6 v- { }7 F9 g' J {+ H2 H, T7 U" H* q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* k! |8 t0 w5 ]9 g" q% N
if (pItemElem)
. H8 D+ P7 Q5 K+ B s9 b; E {2 l7 \$ ?2 s2 C) E% f2 e7 H
if (IsUsingItem(pItemElem))
" Y1 J# ^" [! h& A$ v2 Q5 ~+ t2 R {* q6 V3 w" r; C& E3 V* b! z- G
//这个位置无法放
3 G5 M" S& F8 ` nDestPos++;0 a _9 a$ k! s7 D" J( v
}
' l/ J: a; @' Q$ | }8 s8 F( @, J1 w. a( e0 Q
BYTE nSrc = pInvSort->GetItemSrc(i);. s! _) u# z+ g t! a, B2 H' R
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* h! G# c" ]$ @# [5 _ if (pItemElem)
8 ^4 t4 O9 T6 D( {3 F4 T& o3 d5 e4 Q( [ {
3 \- A0 G s- M; W if (IsUsingItem(pItemElem))
+ }$ Y9 e% I) K {
2 m g2 q1 w) I5 w //这个道具无法移动,跳过3 n! w! a: A4 M5 D/ m$ N9 o2 P' E
continue;9 p" Q1 f1 S* Q1 E' q0 Y: Z
}* H- V' k9 {9 Q/ h8 ^' b1 K$ ^
}else{' T6 Y3 a u1 D3 k
//空位置 不用动
6 {1 n3 H% j3 L$ M2 ` continue;6 J4 u/ R0 ]4 L" y+ L- c7 ?, G
}9 y0 |6 g+ o* t8 V4 h' ]; K
//////////////////////////////////////////////////////////////////////////
$ r* ~ m3 z8 N. P //开始移动
' W; Z" N$ }5 ]6 z3 ?! _4 ] if (nSrc == nDestPos)
" H9 H0 c) j& J* S7 v {
$ E7 L8 Q, L0 R5 i7 i$ Y4 i9 z" H //原地不动
% U' H' l2 u: v nDestPos++;
g& \* P% e& i2 Y$ N" M continue;! ]# h U/ ^0 o
}3 n; z; T0 B8 f8 T2 F
pInvSort->MoveItem(i,nDestPos);
% |, `" s$ b$ Q1 Z% l& d g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& {4 w3 q( g+ ~ Sleep(5);0 s/ |/ e7 G! j/ L5 U, ?
//Error("移动 - %d->%d",nSrc,nDestPos);
2 L4 P% ]2 z5 H# ` nDestPos++;$ z/ e+ x; ]1 U) l, b
}1 ~& w$ S2 {$ N) G& Y$ s/ ]+ y
//取第一个元素的信息2 e& A" Q6 @& q
/*
; u! [; p) e& D7 D9 ~5 U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ _* K4 H. F# E6 l3 P( _
{
4 O9 o# ]' ]: I8 y5 s& D* ] Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; ?7 }1 }1 y. x. z# w g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ^7 X9 F6 t4 D1 t1 J }' K9 O( T2 Q2 a" K
*/
9 v% I/ F Y5 {3 z! f4 E v //////////////////////////////////////////////////////////////////////////
4 K- R$ S4 G( p9 w7 Q0 b break;
; V f6 Z M' w7 v' [; O' o6 _ }* p* P* o* O% c) v6 c; v
}
1 N3 N. E& _5 G, a$ p5 |% D d}
/ t+ i4 @8 b& m7 Km_wndMenu.SetVisible(FALSE);
! f5 Y9 j( z4 u
8 ~9 x4 f' T* V7 d% F; P9 c--------------------------------------------------------------------------------------------------------9 ~! x! S0 [9 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): x3 M! N' _. i2 y7 o( l
{
! T8 d9 q; E+ G. x0 }( w" `% w8 @BaseMouseCursor();: \+ ~2 H9 r! o3 N; w
}
1 k5 `0 S N$ Y0 I- ? P5 ?5 |在其下添加:% {4 l: u9 m+ s1 E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& V% K! R; u5 \{
8 L- i" V: ` c2 im_wndMenu.DeleteAllMenu();3 P/ T6 y4 ^+ g* b
m_wndMenu.CreateMenu(this);
; {4 N9 X8 U* `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 h+ K2 E$ U" Q& g4 @/ m/ G1 r
3 p* o; X5 t. r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: X. y' |) |- \( r$ u- X0 z{7 J! T- h; z3 X8 T1 p- E1 k; |+ X
//P以上级别才可以删除所有道具! U' L! v2 @0 l i) |) H8 v6 e3 m
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 U& `$ I; L& k1 v4 Q' A
}
7 f! X. P3 l: v4 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
k: W( C) ?3 h2 ^- F6 `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: h* {+ V4 i6 S) s, Y
m_wndMenu.SetFocus();
: W7 G1 e& m7 e; }2 o}
' X2 N" i6 r, J3 X9 R6 _, G------------------------------------------------------------------------------------------------------------9 q( n9 G# k" v s
*************************# L/ U# ^# m" y/ N3 i
WndField.h文件5 p- A8 a; o% l$ x5 u8 Y" l" R* M
*************************& Z& o: a$ r6 Z. l; m
搜索:BOOL m_bReport;8 ?3 z9 l, C) K7 G: W
其后添加:
* A3 b1 `1 b" G5 r9 m# dCWndMenu m_wndMenu;
# A# c4 D* ` g1 g4 Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; w0 d6 Z/ i2 N0 {# A
其后添加:
. U; D8 y5 z2 k* m) J6 [9 q+ wvirtual void OnRButtonUp(UINT nFlags, CPoint point);" \8 p$ p) A$ O
/ p7 d( a9 F _/ z! ^
( ?- a! P5 R, T! O) F |
|