|
|
源文件中_Interface文件夹下WndField.cpp文件
" m5 `& K- a8 e7 m0 q8 T4 w搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 Y2 C. ~5 T* u: t4 `% g7 F5 P
) J E; Z9 C$ @! v
struct sItem/ ~8 }8 z/ c, j( `9 U
{1 E+ I) V' B& o$ Y4 x
DWORD dwId;
) ?7 I4 M3 x0 y; jDWORD dwKind2;
$ Q( j4 Z6 F7 z/ f) ~; v8 {DWORD dwItemId;# o9 J% N% [4 Q0 o1 v+ c6 x* _
BYTE nIndex;
$ f7 Z# L) U# V g0 M# a1 t# B6 N4 BsItem(){
9 B2 ]4 Z7 q0 n1 Z9 h s dwId = dwKind2 = dwItemId = nIndex = 0;
0 `* j. @7 W7 F}1 p# w$ |1 p( B1 f6 `
bool operator < (const sItem p2)
, {( M! n+ s$ Z1 s{' i6 ^4 {6 e/ u
if (dwKind2 == p2.dwKind2)* c" e% ?0 f) Z. s9 r; f
{
2 p3 Q2 ^8 A! q2 l' l7 K return dwItemId < p2.dwItemId;2 C5 [# Y) B* A" J* f# j' b
}else{4 w8 o2 K) q' ? V, f
return dwKind2 < p2.dwKind2;
% J3 N8 j4 I9 g2 U$ A1 U9 u! A }
, h4 W" _/ u$ F2 c( Q/ S4 b}
; I* m. I% O" x8 P, j, s9 W% g};6 e6 U# ]" |% z/ ~% w' R/ o6 O
class CInventorySort
3 q2 [4 ? J" Z9 D: B{
5 A% P/ I) W# d4 }public:
3 b0 K* C2 l; w( U$ G. \) o+ D) O. sCInventorySort()$ z( w9 d, m$ T& I
{( k! V6 S. W$ Z% f
m_dwPos = 0;3 O2 O" T1 v+ G2 v8 o( p# r
}
1 d' W2 S+ ^7 q3 I0 N$ E$ K~CInventorySort(){}
2 |, `$ \! }; N: qprivate:
; {0 {$ |7 D) ?$ q' X' J' xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ b% ?. L/ t. a$ T9 m9 t* iDWORD m_dwPos;% ?, K L$ A/ s
public:
9 u/ X; ?8 b H6 p: [void Add(BYTE nIndex)
7 I# f+ ~9 F% v/ i) S{
* c" z" T" T" j* x if (m_dwPos >= MAX_INVENTORY)
& S! t! l3 w$ }4 z' p' p {9 `4 r! i! \7 h Z* N* L( ^
return;; W, {/ [ r! S& @
}/ F5 z+ T( s0 m8 ]# ~
m_Item[m_dwPos].nIndex = nIndex;1 n0 a: o8 v4 u4 q; Q- M% \
m_Item[m_dwPos].dwId = m_dwPos;5 ~ P5 k$ t3 D( q# e! e. V8 S
m_dwPos++;
" l) x2 m. Z& o/ l}) |" \3 g1 t3 `8 ?; ]# Z7 G: s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* P! k5 D3 a4 R
{) D* I' w0 q0 u7 M, R1 u8 Z
for (int i=0;i<MAX_INVENTORY;i++)7 J0 g/ k7 ~' l$ G1 ^
{' m, G9 I; x! s# i, `
if (m_Item.dwId == dwId)
0 j+ o! ^ X- i: o4 Z3 D8 C {! z, `! f" B$ H
return m_Item.nIndex;
$ r D: t5 V" K, }- H( T& E9 v }
+ d/ G' |1 [# L! j& n) E) o }5 T% l7 H# z2 z% v0 D
return 255;2 m) b+ O U& [) t+ V3 U" T
}6 M0 i% p+ p% n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( D, ^' h0 A' x" A
{
4 s: [' f1 d+ @5 r ] BYTE nTmp = 0;8 t) e% |" e4 h) e
bool bDest = false,bSrc = false;
+ X+ ]4 r5 H3 \& G# K I for (int i=0;i<MAX_INVENTORY;i++)
/ W6 V) U. Q" X7 a: S {
- P% R1 S' |' u8 u if (dwSrcId == m_Item.dwId)
, l0 `4 }8 _4 V5 R# X9 ^ {5 h. t6 s4 [' D7 B; @0 h" I1 b+ g9 o
//id相等 则 改变对应的dest和src# \4 x1 U8 l" _+ y$ `; Z, i
nTmp = m_Item.nIndex;! M; O- N8 ]( H
m_Item.nIndex = dest;
0 o7 O' P- ]. \. u }
/ P/ L/ M0 E* i" p8 s( A }
* T2 t: P8 ^! V) M //临时数据保存完毕,交换开始( C& C) D1 p" b/ V
for (int i=0;i<MAX_INVENTORY;i++)9 }5 m& q( U+ u% g& i
{; c' |7 f7 @3 @
if (dest == m_Item.nIndex)
; o$ a, d+ t8 u+ f2 v {
7 z9 ^# B& ^3 R O7 e //id相等 则 改变对应的dest和src- t7 l' N, Q- T& h) @
m_Item.nIndex = nTmp;
4 o' k8 L0 Z: Z" \' U8 K }
0 T9 ] A+ F) x# ] }8 N3 z) X$ g/ B
}
; `+ J% `, I9 H; W: \};) W, \+ N% t$ b6 |9 ~; @
-------------------------------------------------------------------------$ r; o% R) Q! d2 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 H4 v) j; Q; q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ J4 n$ I' D. X- h8 g紧靠其上添加:
/ P1 V4 K, ]% \7 D! I8 e2 Yif( pWndBase == &m_wndMenu )( S+ {' X4 M* B4 H
{. w0 z0 y! y- s+ q" ?
switch( nID ); s! y: d( `) w7 B2 }
{
. O" T3 f5 G) c: h7 B case 2:( ^! ~" H# o! E
{* W8 ~, K+ m. D4 p0 O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 }0 E7 s1 f3 h
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- R" _% g: D3 ]) i; u1 I+ }
{
9 |* p& Q% C. X& h8 v( m break;. v, ?; N) e: M/ q' t- ?6 I1 @
}
2 c6 `, n1 u" k& o3 f9 q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 U2 R0 \' |. A) D& z5 N, g {
. M8 P @9 U5 J' k. O CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 q! u$ ~. ^& m6 T% q
if( !pItemElem )
3 \3 I0 B5 z- g+ r& g continue;# L% G5 S5 R5 \, a3 k0 K7 h
if(pItemElem->GetExtra() > 0)
% K4 ?* g% a! b+ J continue;" j2 s# i; R& ^; M' F+ w4 D$ h
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) G) H% W' R# R- d, j$ T/ h* z) V
continue;
( w6 ^/ f% L( b2 W; D) C if( g_pPlayer->IsUsing( pItemElem ) )
, g/ i: Y& P3 P0 \5 z continue;
, ^/ `1 G( Y, I7 J9 w if( pItemElem->IsUndestructable() == TRUE )
/ \+ l6 U7 E$ ~ {; S+ ~! H! `& y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ S9 ` Q8 V/ ^/ @, \9 ~, H continue;
) p7 f/ k6 j9 z5 Y6 O }7 n1 e, R1 V5 q" c) L# V& P- Z. i
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 H& V' m1 c5 g4 {$ y# k }
+ Z, B$ r/ t+ m4 r; L* h6 V$ Q break;" i, K/ G9 _ o! v3 n0 x
}# W/ n+ \: J( O: ^. p+ ^* e
case 1:2 }; X+ R( {9 S) Y+ l- q
{- @/ Z2 q4 ?$ P, o8 B* |
//整理背包1 N. ?/ N$ _! G$ N* \
//////////////////////////////////////////////////////////////////////////1 L" t: A/ \, _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 J4 ]1 [ n t# M( B3 V5 D //////////////////////////////////////////////////////////////////////////
) F3 G5 |+ Y% P3 _1 u //////////////////////////////////////////////////////////////////////////7 @; T x$ _7 C' j& A; R4 ^9 d9 o% w
CInventorySort* pInvSort = new CInventorySort;, @( p4 c' K9 Y1 c- D" l
vector <sItem> vItem;0 f0 j2 y5 r7 a3 \# t! b
vItem.resize(MAX_INVENTORY);//初始化大小
! x' C& ]- [$ F+ o' {* H4 C' s' _& } //////////////////////////////////////////////////////////////////////////
8 d: W" X& x) @1 J; [/ t8 H! q% { //填充数据
) v0 `1 e9 H7 {2 p' X6 j" d% O- o for (int i=0;i<MAX_INVENTORY;i++)
& t# v9 \; B% R6 a5 O {3 h; Y# i+ t& T% I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! L0 y* j4 R+ ?/ e9 a% [- v. F if (!pItemElem)
1 S. P# n3 b h' u. @) g {
* B/ g, q+ ~ l8 F' } vItem.dwKind2 = 0xffffffff;
$ `" r* ?8 I) P* x% ^ vItem.dwItemId = 0xffffffff;
! P) n7 Q9 p( x" z3 V7 w vItem.nIndex = i;
- ], K& c: b z# w }else {) Y+ M# ^, |! r' \8 R) |
ItemProp* pProp = pItemElem->GetProp();8 N) Y+ w/ s; t- U7 W$ I' R. z- V
vItem.dwKind2 = pProp->dwItemKind2;
( j6 D4 v- a5 [ vItem.dwItemId = pItemElem->m_dwItemId;
5 x8 Y# C. X3 |, @; v, F% T vItem.nIndex = i;
! o7 h6 P, R1 N }
9 ^1 o8 d, R1 T6 z; ? //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 G- {1 {3 U0 A4 f }
+ R" W. X c' D6 a1 r( n; V9 Z* L //////////////////////////////////////////////////////////////////////////
- H- q% X+ `1 T2 o$ l$ x j8 ~+ | sort(vItem.begin(),vItem.end());//排序
6 Z/ _0 {% x \" r- q //////////////////////////////////////////////////////////////////////////) \% X5 G. Q* f1 N
//交换
5 r% q& x! ~$ f- l for (size_t i=0;i<vItem.size();i++)
8 h! I( ^. [: `0 q {
( O" D1 i% e8 w5 c) p- @$ J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* D2 H4 R7 ]5 o5 g- X5 J+ ~ pInvSort->Add(vItem.nIndex);
7 d5 V& ] G- }9 M; C# s8 O9 t3 l }
( w& K; D q8 N" |8 K* q BYTE nDestPos = 0;# ?2 ^1 r1 K+ k" L/ k6 t
for (int i=0;i<MAX_INVENTORY;i++)+ q8 m' o0 z6 T' v4 V) R% A v
{
% u' P3 v' X: Q7 k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% O$ B& }% H/ H. S' d9 S
if (pItemElem)
- ^! Q ]$ b$ e: b. P1 S u {
O9 j/ C# g: {( k if (IsUsingItem(pItemElem))0 g/ s! L' M/ u3 s' {; f9 T& C
{. U; o# Y# V, a4 F9 c" w- d) E
//这个位置无法放; _6 ^1 E; ?! D% R/ E
nDestPos++;) g' y9 o# h% @1 `& ^4 M
}
1 K; F( Y( ^3 ~. r( r. S: N% Z }7 k6 c1 R7 ?6 C# s7 S* r6 r
BYTE nSrc = pInvSort->GetItemSrc(i);/ h1 s a' j% N8 X
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 h7 k# H% M* b; Q; ~& Z% \8 S if (pItemElem)
3 m9 s D- T- ^3 G$ i: q {
4 i4 m/ f4 w- `$ B9 C if (IsUsingItem(pItemElem)): q( G" C! L' Z$ k' M
{
; _: |6 ?+ Y& m! s //这个道具无法移动,跳过
1 |. _7 ~! g5 ]8 k. c" C1 | continue;
/ e0 v& w3 p |* v }9 F3 x& I! q; ]
}else{+ R* G3 r5 @( ~9 n0 ]0 O
//空位置 不用动
" x' R% B% |$ Q3 {; ~, r+ B continue;4 C* Z/ o4 W. H; J8 m5 F! e3 P
}
5 ^% p( t! \) {9 M' p5 D% b //////////////////////////////////////////////////////////////////////////
& W1 ~6 v1 B' o( `( F3 B //开始移动
* t/ E0 j0 t y if (nSrc == nDestPos)
% O; L' O$ l0 r& M) M. ` {3 C3 P. P) A& S: \7 c- l" T6 g
//原地不动
1 b* h0 |# }$ s1 f. n: b5 V nDestPos++;
' ]. q+ b" Y r( }0 F8 e. V continue;
5 }6 N- {+ g& H0 a, O }" N' s7 U2 g' `" ^9 S: b
pInvSort->MoveItem(i,nDestPos);
7 M" c1 C$ z8 h# ~! H6 ^' h/ V g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- \3 U0 k' i6 F% y Sleep(5);% l( K6 i7 Q" c# M: \) I% y7 i, F" m
//Error("移动 - %d->%d",nSrc,nDestPos);$ O/ Z* P9 D7 J, r9 Q! A
nDestPos++;
. X& q& b/ `) ?# J# V2 f& q }9 Z' c9 o1 F: ^2 t, F
//取第一个元素的信息
) m8 m+ R0 ^5 b& ] /*( Y3 J6 v! X5 C
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 {0 q' F' |( V0 t4 j {6 z( c! o' t4 ^3 t; y0 i
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 {* p) |/ x4 \8 N: U$ e9 E
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( ~" I# J/ ~& W4 c* d/ { }
]7 |& j" x; I */, c: V6 e! {+ T4 W
//////////////////////////////////////////////////////////////////////////6 V6 Z* G2 J3 p+ I
break;" `1 U* ]+ n4 T6 W. l% D
}
8 d" S/ K# g' v6 R3 C' E. A }
' D% v4 R$ }& q}
; R# P- M+ k# vm_wndMenu.SetVisible(FALSE);, x$ `9 P1 L4 r/ C
5 b8 |* L- R& b+ \--------------------------------------------------------------------------------------------------------
* f+ ^+ h. z G1 @$ G3 Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! t- t6 q8 k# r9 g6 M
{
/ Z: |; x6 G5 `+ w" n. |BaseMouseCursor();, Z6 L# j/ [: f2 o3 o
}9 n# v6 H) j2 }" F
在其下添加:
s* }) c h3 n+ F3 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: ?) j3 k& u' a5 _0 X" n1 k{
1 G; ?: a5 v/ S( i& u6 _+ _m_wndMenu.DeleteAllMenu();: Q. i5 o4 X; I9 [6 f
m_wndMenu.CreateMenu(this);& F7 X8 e9 a7 R& G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 p$ f2 x- Z- j
1 i; h) y' O6 S6 o) @* r( ^4 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# f9 r) S( v/ g' ^6 m/ [8 e{
% s. t$ ^9 I, l: [6 @5 d //P以上级别才可以删除所有道具
% H I4 O+ `/ E5 G7 ^' B$ t m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ o) n0 I( [/ u _
}1 F n. G2 t% e/ B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. q+ F/ v& ~; q. I$ Z+ a# nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; s5 O" _5 o( Q( k S; \# ?5 Km_wndMenu.SetFocus();
; W0 O' S1 ~% b( k1 c& P1 i+ j}
5 D! }1 J1 O; }7 b; M" A------------------------------------------------------------------------------------------------------------
. f, K: H. S/ R, d: u*************************2 Y( y) ?, u' e; N! W6 g1 v
WndField.h文件8 }, J( g0 Q- ]
*************************
- k) w* Z. H" U; F# R# `" Z搜索:BOOL m_bReport;
8 s; I5 V, j) @% I+ b5 W1 o其后添加:) s* l6 h( b1 a' V! x% z: b$ A
CWndMenu m_wndMenu;* p2 K& g" O/ m: |! b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 y/ }+ M: o7 V其后添加:# V) M5 [' u1 K" L) Z& L
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 B" A$ T0 }1 M3 i4 Q
- x* o' _1 |2 B" r& f% K. u2 A" ~: r; M" Z/ S; D" q
|
|