|
源文件中_Interface文件夹下WndField.cpp文件: D1 U0 ]0 m& B* H$ a& h
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" H* n, M, }8 j6 P. m4 [2 d/ w# `# |3 B' P/ A5 o2 D
struct sItem
# r: @4 D8 Y! R* f{
- h5 B/ U& a/ h4 u1 VDWORD dwId;
3 L4 \, z* u( _+ ^DWORD dwKind2;6 G' F% S+ |9 j
DWORD dwItemId;! d+ E o" J8 \ t6 q4 o
BYTE nIndex;/ V! _# Y) n! r9 ?
sItem(){
2 w! W1 O, o( l1 ^! V dwId = dwKind2 = dwItemId = nIndex = 0;& p% a+ ~; C; @8 r
}
6 j- h: N2 m1 H! p' s8 \bool operator < (const sItem p2). k/ }2 y- |/ g2 e5 [8 L2 x
{
/ L$ d9 n* {4 R if (dwKind2 == p2.dwKind2)
) @) _; S* g$ m' P; l {. N1 @2 p/ b, ]* b7 j" I3 \) m
return dwItemId < p2.dwItemId;; s! {- E! E0 j! D- E) }
}else{
+ t2 H3 z/ v3 h" w return dwKind2 < p2.dwKind2;$ c. g9 v3 z# z4 o8 x- Y
}
+ n. V, {6 C! q4 F}
5 s' Q4 }% j2 j5 x};
. B/ L6 c! B. c! Qclass CInventorySort" B6 @" b/ U9 z" o
{6 q0 l) U+ g) R* O8 C" t' z
public:
9 M# D' d; f Y) J; H8 cCInventorySort(). W# ?' r$ m$ t1 u+ `+ B1 e- d
{
9 r- y( m! ?+ ~/ i# G m_dwPos = 0;2 U- }' {' g# Z
}
& y# ?$ a6 G0 ?: b2 \& c~CInventorySort(){}! S* A {5 ? m1 S
private:- ^" o5 ~# S7 U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" ?: `# I: |+ t) T0 h
DWORD m_dwPos;
+ F2 w8 J# F" o1 I# q% P" bpublic:( F% q" U2 O2 _
void Add(BYTE nIndex)
* g3 v, G( } o. O6 A( m2 q{3 N% |( ?' Q1 W. K& r! ?& G, C
if (m_dwPos >= MAX_INVENTORY)* p: T8 j5 }! w) j! l4 V
{, ~: L$ T8 ~' m5 P5 s/ F' P
return;) j' h' O# V- U- v+ P* m
}
/ t l% E' H! U: T# L7 @1 t4 Q4 y" q m_Item[m_dwPos].nIndex = nIndex;1 R) [ Y; D8 q+ B6 p6 _$ s
m_Item[m_dwPos].dwId = m_dwPos;' g" `5 B" Z0 E0 a1 u( G
m_dwPos++;
+ v5 p4 g Y1 E" `; C! |# Q}
- u# h, x7 B$ C1 A9 i8 v" |! wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ E2 Z: O4 |: ?: U l/ O* h- e{1 U+ I0 \& a+ B$ m9 C
for (int i=0;i<MAX_INVENTORY;i++)
" Z- X$ P- J: }* |* A$ A! z; W {
2 J% y5 {" x" h! } \8 |$ K9 F if (m_Item.dwId == dwId)
" M# T; u" x, A) d% x# Y! C, O$ w {, X% y) u/ H( u1 T5 s- B1 v1 U
return m_Item.nIndex;5 B+ z+ j0 \7 B) U2 E
}. t) h# S8 a2 e! c0 b- O
}0 B) y3 Z) h; m4 t
return 255;
/ Z. y x5 D S7 Y$ C% D; |* p}) g. G7 G* ]- Q$ J2 ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
5 ?* Z* U( ?. J3 b, a% s{
8 f: ^( w# b1 ~6 Q4 K' Z/ P BYTE nTmp = 0;
: F3 [: Q+ a3 D3 \& ] bool bDest = false,bSrc = false;$ u9 t: N5 _8 G9 ?4 |
for (int i=0;i<MAX_INVENTORY;i++)
' R+ ^: F1 h& k! F/ P, c1 M {
4 R! \0 G. \8 D- K if (dwSrcId == m_Item.dwId)
7 D- r1 U5 o1 N! T3 U4 ^ {
1 X. ^; Q6 h/ t( A2 s6 ?. p //id相等 则 改变对应的dest和src
- ]6 q' q$ x, ^7 z( b( g nTmp = m_Item.nIndex;
/ ?! x% u9 B$ J8 `' P, i% I$ l m_Item.nIndex = dest;
* y, W; k% c3 k7 \ }" t; t5 w& E; {! c! Z. I
}
, E T9 q7 L$ k+ o( } //临时数据保存完毕,交换开始- T( f+ r/ ^! ~' M, ^& y
for (int i=0;i<MAX_INVENTORY;i++)
: w6 Y f5 k1 t0 f2 g& G {
' D; p) i, s% A! r( Z$ _% _ if (dest == m_Item.nIndex)
8 `1 h* B0 {2 L0 T) F0 h {
& a3 y, u8 F, B //id相等 则 改变对应的dest和src" B$ u' I/ L. L' ^( t K! @/ j6 P
m_Item.nIndex = nTmp;
, w7 s6 ~$ E& N: T; V }
: A6 v' C) d" A R, P } s# c' j6 B7 l k
}
* Y( @/ [5 Q$ _2 ]! r( a};' }( S" ?# [ w0 c+ h
-------------------------------------------------------------------------
- }# I b3 Y! t0 Y! ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ C- s5 t/ B) `$ t# |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! A3 G/ k3 x7 s, L3 c紧靠其上添加:& n K! ^* o; }9 U, k. N( f3 v
if( pWndBase == &m_wndMenu )
. u# x S s+ I! ^. M% p{
4 U/ l: ^; @/ q$ h switch( nID ). |" V! ]' I* F1 g0 T
{7 |+ R6 ^1 I+ |, f% ]. h
case 2:
' u) _ J+ J4 m3 i0 W {( f; d0 ~, E4 [* i2 s/ a$ W! h
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" s0 m. T1 n; o* e if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ L' i- V1 D1 _9 p; h1 [ {0 q0 a" W' F9 E& T3 s# {3 v
break;
3 Z; _' L7 e( O5 @. n5 ~! S }
1 G1 `2 [3 e+ z& ` for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 V1 z, m9 ]' u6 X; r2 ?3 T {" T/ x9 i' H) O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( e8 f4 U1 b" I. _ if( !pItemElem )8 h3 [/ \7 J! B* C; x% M {
continue;' Q! d$ x+ ^# T! F
if(pItemElem->GetExtra() > 0), g- D' Q) U# |" I8 C2 z8 V
continue;
& b7 R# b% E" f& j- @ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; ]% T$ `3 Q2 m' z7 Y, y$ }
continue;6 e4 Z i, \, F$ \
if( g_pPlayer->IsUsing( pItemElem ) )+ ~( @* w6 ? ? K: X" d, `: r
continue;
( j' G' o, t7 P5 ^" H$ F( z, Z if( pItemElem->IsUndestructable() == TRUE )
. j" q3 p, Y1 ^5 r {
; }% V0 { i0 X2 f' d# i9 z# W/ ~ g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 L9 X0 l7 a. C
continue;( {/ k( ^; {, o$ Y! i: g' u5 t
} q2 @9 A' M3 U) v4 o
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# z, Q* \% \' {) K. n3 g& X H; U, G8 v
}
" u N$ }$ `: V" @; m break;
6 N3 r: k/ v- I' w }& _2 v" ~7 d% I W$ k p
case 1:
& R( n0 b6 Q1 ^. M! ^. X) e4 K {( K9 p$ z( y' |; s V
//整理背包
: X( e" Y+ O( d1 ~! a //////////////////////////////////////////////////////////////////////////
2 M, }. _$ K. x //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 W& J1 l; g$ |+ ]9 K //////////////////////////////////////////////////////////////////////////. K; v2 R: ]4 Q$ p9 |7 R9 C
//////////////////////////////////////////////////////////////////////////
3 _$ G4 V5 ?/ l( v+ T7 z CInventorySort* pInvSort = new CInventorySort;5 d( d, ?3 a! z# n
vector <sItem> vItem;7 S S8 _* n* d' e5 |
vItem.resize(MAX_INVENTORY);//初始化大小
4 @* f" P! v9 W& r# e5 C6 ~ //////////////////////////////////////////////////////////////////////////6 V' X9 t4 ^0 a: P4 v: ?: K
//填充数据/ n" r' z4 t1 g& U, Y" B7 c
for (int i=0;i<MAX_INVENTORY;i++)/ a' y$ j, x8 u: u1 k5 Z/ u `
{- x- X ` W& U9 {/ o
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ S1 T6 H* p" K, t& E3 y" O# B: { if (!pItemElem)2 ^' Y, d; k( y. R/ N1 i
{
6 P: o, R" i+ }( w3 a. ]9 K! g vItem.dwKind2 = 0xffffffff;$ [9 p. B, H8 J5 T$ i" b
vItem.dwItemId = 0xffffffff;% e5 i" l, t$ `0 D$ L/ @
vItem.nIndex = i;8 Y8 w% v; d" M* Z. D
}else {. _9 k& `: {6 C% e+ h
ItemProp* pProp = pItemElem->GetProp();/ M5 J. R9 q8 s! N1 |4 k
vItem.dwKind2 = pProp->dwItemKind2;7 r. G6 W6 Z2 W8 C t' B
vItem.dwItemId = pItemElem->m_dwItemId;
5 q+ c7 l/ w: K) v' H+ m vItem.nIndex = i;* u+ r# }* E8 f! [
} M4 Y8 f& X H, c+ E8 f
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 F# j$ M; K! B& m; o
}
) C5 C) l9 x2 b# i //////////////////////////////////////////////////////////////////////////. i9 n/ u+ z8 ]$ A; s3 \, O
sort(vItem.begin(),vItem.end());//排序
7 O" ]3 j2 _! K9 b1 b5 E //////////////////////////////////////////////////////////////////////////
/ X' X9 s7 \! ]: R //交换( }- Z. S" I9 [% c
for (size_t i=0;i<vItem.size();i++)$ [- M$ y) H @. X; q: D
{
0 n1 |' d- n+ M3 `8 a //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ o! _; X {9 q0 I. s: K1 L0 Y
pInvSort->Add(vItem.nIndex);. S3 @) `5 o0 { A
}
. _; j5 w. I; i3 [$ X6 G BYTE nDestPos = 0;/ _, _$ `! _1 s+ Y* h
for (int i=0;i<MAX_INVENTORY;i++)
: t0 O2 D4 W, S2 `1 b' b2 s {
5 v) b8 U5 b3 D. F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 y. h* N- d' u3 p! S3 H! }* G7 | if (pItemElem)
" h# \; b7 S/ t8 N. H {
1 U: w) a! b, u) T& Y6 m if (IsUsingItem(pItemElem))
( \" Z2 ~9 L- y# z0 A0 j, [ {
2 E! w! {8 M+ [: [ //这个位置无法放
2 e# O0 H: O& v; s6 T nDestPos++;
0 |' z9 O. W# k, h% C* C }
' @& J; Y1 ?9 l, N S, W }9 R: l- ]1 y0 Y) y* V
BYTE nSrc = pInvSort->GetItemSrc(i);6 W4 b+ p: F6 V" m' S
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 ~6 N' O0 i" R
if (pItemElem)7 K4 _- i! X8 \9 h _
{" U2 b6 K" G; S; s, ?
if (IsUsingItem(pItemElem))- F* L" |0 B) G5 a: O
{6 H$ O: F( m8 k$ a. u% S
//这个道具无法移动,跳过
% t) m; O3 z Q! a0 k continue;
* u2 d* E( i# |, W/ v+ i" D }
# J9 f2 y2 j7 r# m; l9 X& u7 l }else{0 I0 ]- _- U' ^0 b; V
//空位置 不用动
# Y7 v+ k% a: z0 v) w- c continue;
3 q* E9 h0 a. A9 w' H2 e }( C, m$ o! e" W8 k; v5 H
//////////////////////////////////////////////////////////////////////////
4 W9 T( A0 U4 x; ]% t& x. D6 [$ R //开始移动
, S# D) M* E" j4 c. z/ t9 C if (nSrc == nDestPos)
/ Y# F! ^' ~ I) D7 k u {, o& a1 |. c e+ D# b \
//原地不动* `" F* t: N3 Z
nDestPos++;
. r( r5 ?9 l7 N, c continue;4 x8 K7 C+ o8 k+ g7 `9 u
}& L8 j& ]5 V+ E3 |/ N" X+ n/ n
pInvSort->MoveItem(i,nDestPos);
% \4 j/ ~( V- H6 } g_DPlay.SendMoveItem(0,nSrc,nDestPos); ]$ g' O1 X; c- F/ ~. x4 Z
Sleep(5);
9 U) W$ ^4 G* _( A //Error("移动 - %d->%d",nSrc,nDestPos);
" Z& O3 I3 O7 [( ^ nDestPos++;. \% U6 j) P9 C2 v4 p* X1 L
}/ E3 {; f9 ^4 ]! ^
//取第一个元素的信息( O0 r( `6 W& o' j
/*
1 i6 `6 t: M p2 R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ Q) M+ `9 J- V. z/ {6 f% j
{
) r$ n1 ]# s5 j4 U8 Z" h Error("Move - From:%d,To:%d",vItem[0].nIndex,x);( [& \1 `" Q+ O3 X4 J! o+ ^* C: f
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% C+ @- n: k3 H# r) h! U! k }$ f4 J8 ~- J% Y
*/! \/ T& [6 V8 q! r7 Y3 ~7 V4 s: P
//////////////////////////////////////////////////////////////////////////
9 F2 X7 m5 _9 u" ] break;% W9 g. _) l3 P$ L* a5 B: V: U
}
/ k0 k. U: R$ k }
5 C. ^, C7 m$ t/ w1 v0 z& @}' ]( J; X* w. @6 W* C; x
m_wndMenu.SetVisible(FALSE);
$ \# ^! a/ @4 ], ?9 N- s; }5 I
% `3 k& L7 S& d+ B) }9 D--------------------------------------------------------------------------------------------------------
+ ] ]. [8 s+ C( I; S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
5 E G0 P/ _4 l! I- j: ^{0 }' q. A$ [+ Z' F
BaseMouseCursor(); |( R2 A+ C" w0 K+ ]. A0 U
}( C( k, s( N& C; F, l; {; o
在其下添加:
: u7 D" o2 F$ R0 e0 M# ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)% I2 a1 j1 m, X% _8 `2 R/ y
{9 l' E3 Y2 H! I8 f! ~. v a0 z+ o
m_wndMenu.DeleteAllMenu();- W7 a2 ]& S2 Y4 q5 b) n; K5 o5 _4 [; V
m_wndMenu.CreateMenu(this);( s H* |% X% Q* \/ y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 S; B* _& Q Y: A# o$ X9 w$ {2 F9 }- w0 W* V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% W0 \& S8 I& D{
9 A p: R4 j9 A9 y8 F //P以上级别才可以删除所有道具
. [. _6 s/ B9 ?# @& j m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");9 X* @/ t7 ^5 I) m* ~( F1 e7 O
}
2 I2 D4 W5 r. N' G0 a% o; j1 p$ Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
% w: i8 z3 Q: nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ J* X7 ?/ z4 ?8 _$ hm_wndMenu.SetFocus();! E+ w. D9 G) j8 ]
}
' {3 H8 y/ @) @' q) P0 ~------------------------------------------------------------------------------------------------------------9 k& Y I& y3 o4 v
*************************0 {3 j! A1 D6 o G
WndField.h文件! p1 S9 X* u A$ h% t% |
*************************
2 t5 l# p" |) @( S. C O6 u! B搜索:BOOL m_bReport;
) n1 \& l5 i5 v2 Z1 o+ p6 y其后添加:
2 l, y% q" z* d' ~5 ZCWndMenu m_wndMenu;
4 [% J; h% n- l7 p1 l9 M' l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);$ C! b2 O" b& C; n) _: y0 O
其后添加:5 m. v9 z2 S1 _$ V# z. w7 E5 r
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 _' {6 B7 u2 c8 p; }' ~$ d8 A4 \
$ K; B* X' f, y5 ?: ]0 F1 B0 f& ?
8 p% p; k$ r" u1 g( ^0 q- V; F; g |
|