|
|
源文件中_Interface文件夹下WndField.cpp文件8 J/ w+ R g G1 ]3 C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! U/ u8 U$ I3 X: {# n3 S A6 c
4 e# X3 l+ Y$ s n4 cstruct sItem
. {& Y' ]1 v, e{
( X5 R. c" i8 Z, i& qDWORD dwId;
& p# j) N* s& E) s* L7 _5 IDWORD dwKind2;
; ^" S& R# n z2 r8 h& `DWORD dwItemId;2 n7 q/ }( X2 [1 k& M( Y
BYTE nIndex;
w3 B# ?) `9 }6 ]7 QsItem(){
8 ^- C5 ^0 ^" }% E* e dwId = dwKind2 = dwItemId = nIndex = 0;
6 V- w9 l( S$ v X; z: V3 r2 c, P( b}8 O3 ], \7 _6 \
bool operator < (const sItem p2)6 x, ]6 C# c" t+ @+ h
{
. T f' i4 Y7 O" j" f/ x+ F if (dwKind2 == p2.dwKind2)/ {9 V0 m2 s) |( I
{
+ m# @) U+ `% l2 j( K return dwItemId < p2.dwItemId;
, E5 H# Z) t; W& n }else{7 i) r) a% v6 }
return dwKind2 < p2.dwKind2;
3 q: r: `& N# S) o$ b# U }3 r7 t; x7 `; R
}- F. S& {0 q X) O& f1 `
};- [+ d) d" Y* h+ a* X
class CInventorySort
+ f! E1 p: d5 A6 T, z{) m- s. W7 \* p0 Z
public:5 S3 l4 P* |6 A8 N9 d* K3 k( j: ?
CInventorySort() `8 ?; ~* @5 y% R3 t+ a H$ w
{+ Z, O& P9 i" R( F
m_dwPos = 0;
6 x S- N# K8 W6 z& E}0 ?' g5 g1 T7 e( l) ^2 e
~CInventorySort(){}
5 h0 \% h! E9 p f6 Jprivate:
& n1 p5 h7 l% }& bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 Q. ]9 ^+ X b& v3 z( l0 t; M
DWORD m_dwPos;1 x$ l7 u; W5 T1 E7 i7 @/ k
public:* t x6 {) v" ~3 s
void Add(BYTE nIndex)5 [: N e# m# c, |
{
+ H( m1 N3 u/ `' j- C, p if (m_dwPos >= MAX_INVENTORY)
4 r: S$ K+ x4 k5 e9 ~ {
% c# R7 ~# r) S) S+ y; x6 | return;
- b9 c* w$ X0 M# l# K }
, g& D# g+ H. g0 I m_Item[m_dwPos].nIndex = nIndex;7 P/ ^0 p* _* Y C' a$ @% a
m_Item[m_dwPos].dwId = m_dwPos;% T* S) O( z# w7 K5 o
m_dwPos++;. f0 g; s: [( n
}
8 q7 k- y. G* l0 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% u0 _; V7 W. c
{
4 a' Y1 M! O. r- C4 M5 ]8 Z+ w" ] for (int i=0;i<MAX_INVENTORY;i++)
6 _4 L+ `1 v5 {8 T# h8 z2 b# \ {' V/ C# }/ a1 n2 Y7 Y
if (m_Item.dwId == dwId)
8 g4 G, Y; D- A+ V. N g4 M: Q. F {
' |% Z& V% U3 k, n return m_Item.nIndex;: Y2 Q1 M! C% K
}2 P4 z1 w, o/ ~ J
}
7 r. _ Z5 ^0 O+ ~+ i5 Q2 G; A return 255;
7 `. [ |$ R7 t9 Q# z i- X}( m( k8 i! D* c, j9 g6 B0 ~ S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 n0 ^3 N3 V& w0 T4 `4 ~
{( G( D7 ]9 B, ~2 |
BYTE nTmp = 0;! K% ]" w( Q# s: F$ ^+ z& i
bool bDest = false,bSrc = false; L( O5 b8 g( `- U8 Y+ \5 w
for (int i=0;i<MAX_INVENTORY;i++)6 r7 G7 A) D3 _' z. ~6 M1 j+ @; S
{
# ?& c. a9 {7 M. V6 N if (dwSrcId == m_Item.dwId)! p+ b) [& R# K& g
{
: k- C3 K; m# H$ J //id相等 则 改变对应的dest和src
& E1 C* u- H6 {9 q# K6 D: f nTmp = m_Item.nIndex;: y E3 y; _) t( Q: x+ C
m_Item.nIndex = dest;
8 Y6 Z1 b4 e. F" F3 f }
- }8 k; O1 \; A) Q6 h9 ~) \7 y; E }
# v4 \, L! d- _ P% _2 ~ //临时数据保存完毕,交换开始
. K7 m9 V* g D# E- d0 c5 a5 E for (int i=0;i<MAX_INVENTORY;i++)0 [9 k2 b! s. l
{
1 M7 M/ K4 Q* i9 z) R3 y if (dest == m_Item.nIndex)
2 k, T/ @+ o3 H {5 d1 m |) @$ k1 s4 u
//id相等 则 改变对应的dest和src
. |- Q( y8 W& z* e+ Q3 Q5 \ m_Item.nIndex = nTmp;( X' Q# k, q4 d6 V% y9 M
}
. \* p. Y9 y& T' T1 R; z4 A' f( k }
7 W7 O+ }# O7 m* z! }- `$ w. q: y}! d" q6 E/ r% a' E$ i+ d
};) a( A* r+ T$ K, Y+ F! c* F3 n
-------------------------------------------------------------------------7 i7 W8 l* N- J: ^+ C
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ o: U+ j: u( X! V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 j z0 w8 y: W' o# K- F; F
紧靠其上添加:
1 U k3 @5 z d) x( f" C4 xif( pWndBase == &m_wndMenu )( e* o. `2 P+ l& g
{+ J. {, e$ ^, R8 H# H3 T
switch( nID )5 v4 U; d, A3 _2 Y2 [5 U: w* y& x
{
0 r% ?* K2 [& q1 l5 B2 I0 e case 2:/ y) R. a) |; u% H* q
{' p- {; B# r5 n7 K' L) s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; _: f' k5 \/ _, J) f( i+ X if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); T- E% g+ L. H" N" J# m# \; g
{; u1 g6 Y8 [) o9 q7 o
break;
) L7 Z) y( Y/ Y( Z4 B }! c) |( Y( _! {& m+ T+ s3 e
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 I9 c$ O! U u( ~; _# h
{
) u& y2 b* p& U# l% [; o CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; o+ {+ @% ^, ?8 p if( !pItemElem )3 j: I# I) u4 O/ h5 K t9 }$ o
continue;
5 Q& c, l$ L6 Q3 U- g if(pItemElem->GetExtra() > 0)
+ V+ k. K8 u) m& y3 S continue;
1 R9 a2 L9 Z$ d/ _2 }7 Y' @$ g if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) * M7 k7 z1 s& y0 v* F1 r( w- l+ Z5 Z
continue;. _) T% I& n! |9 { Q9 `! g
if( g_pPlayer->IsUsing( pItemElem ) ); H- `/ X0 @+ w- h+ y9 f, C
continue;
# O$ j& {9 `0 M, ?9 D/ ^ if( pItemElem->IsUndestructable() == TRUE )
" ?$ H! |9 m0 c; b3 e {
" y- i0 U) C) g: A0 D: S$ y8 m4 g. p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! j# C$ r% }/ c. L7 o
continue;' C; N6 @0 X! ?. D" r- R
}7 u0 Y# c8 B6 y- ~1 [$ W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% V4 ^+ P% |& L+ v4 {) L
}& [9 x% z5 o- ?( N& a) @
break;
: X3 |4 P q/ L! @* G @' a }
) c$ E0 x; O, V: ?$ e# `& U case 1:
, E: C' i& W8 h" Q; V) f% X {
6 ^& @ c0 n, t //整理背包( s1 F( Z1 K9 m. C, @: ~
//////////////////////////////////////////////////////////////////////////! J3 f) P% q1 W/ j6 L! F' n8 T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& `! c3 n+ B3 _; ~0 o
//////////////////////////////////////////////////////////////////////////
3 S+ Y0 T! `, _- }: u" F' F- q: ] //////////////////////////////////////////////////////////////////////////1 l& Y* f; b6 w
CInventorySort* pInvSort = new CInventorySort;5 [0 Y2 F P: H. p0 E
vector <sItem> vItem;
# i. [; \- o- g5 {7 Z vItem.resize(MAX_INVENTORY);//初始化大小
, o& V: c1 X2 ^- U& z( F% w# Y //////////////////////////////////////////////////////////////////////////
4 s2 m7 B6 b3 H //填充数据
! O, E: W6 ^) ]8 k6 G* }3 v' {5 Q for (int i=0;i<MAX_INVENTORY;i++)' f+ u. ?/ p% M h/ t$ k* G
{( M1 p3 j+ \" }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 X7 |3 B0 }6 f. v if (!pItemElem)4 }- m9 N: l" u. u( ]: N4 v* h
{5 F. D- W1 i. I) h9 Z
vItem.dwKind2 = 0xffffffff;# g9 B7 M0 y: K' l; R, h, `6 f
vItem.dwItemId = 0xffffffff;
4 i( M7 D, u5 d vItem.nIndex = i;
3 l- n* ?5 K7 m& h1 N7 k7 |; ? }else {
0 R' r1 I- s6 q9 k* S5 u) S ItemProp* pProp = pItemElem->GetProp();, d# z% z$ A* F$ o0 F( N4 B+ X
vItem.dwKind2 = pProp->dwItemKind2;
# V: w( h8 ]# d" Q: G c' s vItem.dwItemId = pItemElem->m_dwItemId;3 P1 ]6 b8 X) _) Y' s6 O' X+ w
vItem.nIndex = i;8 A0 h9 n! Z% {6 X. t' F* y5 j
}, x' Z0 N. R( L% r1 T8 f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" L/ v7 h4 b) s }: c8 h1 V2 `# ^0 Y" p0 T
//////////////////////////////////////////////////////////////////////////
+ ^8 J- e5 P$ ^4 O( W sort(vItem.begin(),vItem.end());//排序
* @6 Q6 Q4 @; L/ x& { //////////////////////////////////////////////////////////////////////////3 a4 Q5 Z) Z/ R: {. Q x
//交换/ b0 I; D4 e ~! f. ?2 y' J
for (size_t i=0;i<vItem.size();i++)$ y3 f6 [% l R/ E7 Z$ [ C
{
: e& }& c* B+ r. ~ w) a b //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% |) L) H: w+ y' H+ W4 P1 C2 [+ U pInvSort->Add(vItem.nIndex);
7 o' V1 E k1 Y9 {4 U5 j9 l }
[8 F0 \3 V0 j BYTE nDestPos = 0;
! g" j! F; Y7 u! Z for (int i=0;i<MAX_INVENTORY;i++)
! L2 l) i9 U9 `/ K1 `3 I& ^ {
5 d9 c1 |$ L( O- ~5 P CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& P# m+ L5 F2 F
if (pItemElem)7 D* B8 o. X1 E# y' J0 P* W
{
: w0 R4 l2 U& ~& P" }; J0 M; b if (IsUsingItem(pItemElem))
3 L5 }2 H+ w; w+ n {* `, x: H, U) D) x! v
//这个位置无法放
, Y1 l; Y! n' u: q/ j7 e nDestPos++;
: Q: L' g+ z c9 B- k& o }0 Y2 d; Y" }1 v; J3 f
}6 N) V$ b0 }8 _4 @1 P
BYTE nSrc = pInvSort->GetItemSrc(i);- H# m( L+ o" N& }, n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# o4 r$ g' C' Z0 ]/ w2 J
if (pItemElem)
' U) C* Z9 u) ^( I$ ]7 M {
+ f- k3 U5 N( R if (IsUsingItem(pItemElem)) w& r0 E* d- Q+ `# I, O
{2 }. u4 {% g# B0 Q8 l
//这个道具无法移动,跳过! e, J3 D4 b. ]1 ]1 a! O
continue;0 W0 e, @% f: Z* i t. a5 `
}
( ~6 ]9 L% h2 }6 {8 \1 x }else{
b/ ?7 u8 Z/ v# T* S/ D //空位置 不用动
- F" B; x6 a* B continue;
W' a& d! l$ r+ c6 J }
" r9 _0 U' d0 m9 U( E6 v0 X1 U ////////////////////////////////////////////////////////////////////////// r( _& O( m7 N# N5 _
//开始移动
6 K! U1 F: m& A* z5 R if (nSrc == nDestPos)
. F8 v' j0 ?, ~( A; ~9 L$ q {
+ ^" t: Y8 |3 h //原地不动
8 a% ]! @% G4 H$ Z. \( Z4 G nDestPos++;
4 r) k; {* [2 L: d1 v0 `$ H. d+ i continue;
) C, w! ?! m9 T }
& k$ U0 P5 y h, t) ^ pInvSort->MoveItem(i,nDestPos);
5 U; N; }0 y$ O g_DPlay.SendMoveItem(0,nSrc,nDestPos);% I U7 |3 }% b8 z# _$ ^
Sleep(5);
$ V E" f2 }% q* O2 X; V" C //Error("移动 - %d->%d",nSrc,nDestPos);
T4 l/ u9 ^# K nDestPos++;* a/ ^) M6 f2 Z8 X$ G$ e
}3 ]* H2 h b3 U" \$ _
//取第一个元素的信息1 Q! {: a: }5 x. }* _
/*3 r [8 c$ I. k! K9 T8 Q& l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ G$ M9 U4 @, s/ z8 k& k {
5 O6 X& O$ o" P" U. M' X& P Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. T, q8 g9 O; Z8 G' @
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ f! o& [6 v* y" z: D }/ f/ p9 _; K6 @# l
*/: B a" Z8 I7 o" T: S e. v
//////////////////////////////////////////////////////////////////////////- D& k) _2 Z1 [* }( j& r
break;4 |8 g) {! `. w7 a& s w
}
4 ]; N q) ]- | } # J1 }2 Q5 Z2 V* B$ K i, {2 n. C
}8 r$ N: m8 r: h# b5 h- Y {
m_wndMenu.SetVisible(FALSE);
! B$ ^/ E* }! ~4 [0 [% k7 f! l1 Z# o( G, y% h
--------------------------------------------------------------------------------------------------------
: e! L6 w _6 k1 `$ _- n- r* h3 g搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 K; @* O, E+ F: [' ~7 }
{, ^) y( b- C7 [7 K2 M' S, H' h
BaseMouseCursor();2 E @: e) E: s5 y* `* l: k5 g
}6 T! [6 s R( y' V9 j* |$ D2 S1 x. p
在其下添加:( K3 z2 u3 ?& P. Y+ J
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 } b" H: \( f3 u5 B
{ Y) @& ]- `$ M% T
m_wndMenu.DeleteAllMenu();. y# R' `( J. `! ?+ S5 l" v9 W3 t
m_wndMenu.CreateMenu(this);1 |, @$ `/ n W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ y% f6 j4 Z: ?! ]
) E' k$ i# b i5 ^% s- n. [if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 r+ g! D- p& Y6 ^$ U! p{
/ E7 r' D4 B' H& @* Z3 O- m //P以上级别才可以删除所有道具, X" g3 ]2 h* W0 U3 y* K( g" F
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 _3 n/ Y! w! S
}
8 R! N& h Y( Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# m% M5 m# j5 c9 h- p
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. S& `' J: \4 m" w. t. U( l6 k
m_wndMenu.SetFocus();
; w. ~' t: r# V1 Z0 {" y& b0 d$ y8 }7 \}
- @$ ~1 k+ [) r9 P------------------------------------------------------------------------------------------------------------
4 X& M6 K& M; S: X* M' ]9 U% Z3 ?*************************; M1 |3 D3 n) C
WndField.h文件0 f) ?, F% h" v6 o& Z: d5 C
*************************& n0 U3 s: k' k" {
搜索:BOOL m_bReport;
6 r$ E0 n0 W& h! J: U2 d6 ^其后添加:4 G& U/ H9 M- M
CWndMenu m_wndMenu;
$ b+ Y; \+ v6 m" f3 ], p搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 w/ O. w/ L+ v. X& x) A其后添加:. F9 w) M+ [" l7 m1 A* t
virtual void OnRButtonUp(UINT nFlags, CPoint point);: f& p& ?8 }$ n" H/ @% U7 t
, K: [8 L% j1 L$ x$ O9 x& S/ j2 a
, b9 q; j, Q+ D6 Y4 V9 w( j/ e
|
|