|
|
源文件中_Interface文件夹下WndField.cpp文件4 z6 a' P# l% R" C
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )0 Q; K0 n1 ^# H: E+ K$ D" ]
) ?+ { x: \& {: y- D! W: ystruct sItem# I- }1 t' R$ j9 q C
{
: F9 N* t$ p! U' K) I. WDWORD dwId;6 m O! L; P& G& E4 a1 P5 _8 y
DWORD dwKind2;6 J9 n9 F+ q3 x3 ^0 [
DWORD dwItemId;
- B0 j9 Z, L6 JBYTE nIndex;
- C* q& K% Z9 l* VsItem(){6 q/ C2 @7 j. C# ^. Y
dwId = dwKind2 = dwItemId = nIndex = 0;
$ q% T! v9 R. m}& C- l& H6 S" H! U
bool operator < (const sItem p2)
" [) e; m5 ^5 ~& J1 I5 q{3 y( k1 S" F. I: \8 `/ _$ v* |, j
if (dwKind2 == p2.dwKind2)8 p) M) Z) |4 `: z( R" z
{, f5 L7 _3 s- w0 H
return dwItemId < p2.dwItemId;
$ s/ |" E) u8 W I- x# y1 G9 l }else{
" t4 Z& ?# G1 m5 y! j& |5 y return dwKind2 < p2.dwKind2;
* ]" o- v5 |3 [0 ?- x$ f }
' L) a/ Y' v; J( M/ {}
- e5 Z h. j$ D. c# J# l/ N};/ r( [$ H) d0 e1 V2 ]2 N" D
class CInventorySort2 Z7 d2 {5 ~+ A8 u: Z! k
{
4 y& U, [) H- q# r [9 kpublic:0 g4 Q$ F+ Y/ n* c% C
CInventorySort()
* I2 x1 v2 I( z! k9 K{
! D4 X* j2 z1 z C m_dwPos = 0;
$ q8 F( F! d- ^1 V# ~}
/ a% v1 s2 R! ?~CInventorySort(){}3 [: X8 `" N2 S" Z) ?9 D
private:$ d% F7 i" c* D3 F/ }' b9 w, p
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( ?* \2 g: J2 Y) W0 I
DWORD m_dwPos;
4 n; d9 K2 l+ f+ {public:4 _7 V; z4 I, y& O
void Add(BYTE nIndex)
' K4 Y2 N* K% ~5 C" A{
; b- k) s3 Y2 o: l5 N6 @ if (m_dwPos >= MAX_INVENTORY)
( K# a/ ^. q+ g {, n1 a* s$ f+ W% `
return;& }- D% F9 M w! I$ X" F# D ^
}+ I0 v7 \2 k' d
m_Item[m_dwPos].nIndex = nIndex;* l: P* r% k# O3 O" B# s1 S# ~
m_Item[m_dwPos].dwId = m_dwPos;8 r9 W* _( l* m: k
m_dwPos++;) F Y( c+ o, M: c
}
4 X. ?4 P, @0 P) h1 Q% L1 S, U9 MBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 }: e6 M* M0 w5 y; j
{
% H0 \9 ^4 F% v2 M9 `! o for (int i=0;i<MAX_INVENTORY;i++)9 u% \. ~' l- X1 ]" y2 q+ w0 U
{
, v- Y; P! N |/ z* T if (m_Item.dwId == dwId)0 a g, I) U- d
{
* _: U) ~( b" m) v3 N# \* ] return m_Item.nIndex;
. u" F6 K. ~% z; S+ } }
9 t& B$ G. r( B8 n8 r) D* K, d }& [3 j# M' A% Q3 e) h% y& p0 ?
return 255;
5 f# f* I, J- z' q; v* o}9 u( f6 x. }+ }- J7 D4 }& ]
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! y0 [: n7 L1 [# Q6 w
{, n, O, v- U- ~/ b0 G0 k2 R- i h
BYTE nTmp = 0;5 u i9 ]9 h' G. p) \
bool bDest = false,bSrc = false;2 C* e" ]# {& n$ @3 H, T# I* @* C( G
for (int i=0;i<MAX_INVENTORY;i++)& G0 L6 j3 [9 e4 c: N- k
{. z: y, ~2 u4 Y/ X; y
if (dwSrcId == m_Item.dwId)
0 K3 R; {- r' x+ D {
0 {1 L' [( s2 T) p9 y //id相等 则 改变对应的dest和src i! B) f0 X0 N' j
nTmp = m_Item.nIndex;
) B& r/ _' f* s% @ m_Item.nIndex = dest;
) ]) z& _; g3 D }) }* r$ W! t9 K# ^
}
3 g; w* Z6 b/ p* J, i //临时数据保存完毕,交换开始
: j1 W6 y3 @4 d$ f3 i( t9 j; g for (int i=0;i<MAX_INVENTORY;i++)9 d6 L, O0 d1 B7 p. J5 f
{+ s0 C' j- K1 ?
if (dest == m_Item.nIndex)
& W8 o( g% [; f$ I( u4 i( x {
' {3 ?% o7 Z; a* Y //id相等 则 改变对应的dest和src
( L- K+ N w3 b! G0 e m_Item.nIndex = nTmp;
! H0 |/ G! R: i4 N' W1 B( ]0 B$ o }
; K+ ]5 E6 J" }4 c" Y }5 F3 H3 a0 p2 @$ R+ t
}
. b' k$ }/ D: d3 b};
# B2 w5 O7 s1 B- R# A% H5 V-------------------------------------------------------------------------# @. ]# r% |$ [# Q' f8 L% F7 [1 J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
U. A( r8 W4 W3 }1 G搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase); L" p f& h* Q
紧靠其上添加:3 o: {; n$ \: C) h! Z' Y" D
if( pWndBase == &m_wndMenu )) A' C3 I B- I
{. h1 A7 D4 x/ I8 n! s- K: [2 a
switch( nID )7 Z/ D. s. S& p- k/ i/ o
{
8 v. q" {& T8 b, j0 D case 2:0 D% @! x! D! e/ b* e
{$ K) \& O% z, Y. b4 P% \' _$ U# |
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ L* ?; W, h- K# k6 e% Q( M if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 X- U* v+ f; ]% U
{
+ a9 \0 i( t# U7 `; K; L break;2 S! e/ `- Q+ y; v5 m7 h% o
}# F: `+ @- W9 D# K. }9 z4 f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 s3 x+ G0 v% ~" B4 y5 p/ A {& H# p R1 R# k+ l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 e; j, n4 a1 v if( !pItemElem )' f) {- m: A+ x. `$ T3 |
continue;+ |1 X N/ R5 P" @7 d% \. c0 v
if(pItemElem->GetExtra() > 0)9 H) V, K0 ~+ j1 ^
continue;5 h9 ^- o, d% q" [! p* _4 q9 P
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , V6 u$ z" ^# @; D* k) \3 V
continue;
4 m8 ?& @8 j( U6 M if( g_pPlayer->IsUsing( pItemElem ) )
9 Z8 h, K$ B& R continue;6 L7 A3 \0 R e N6 L
if( pItemElem->IsUndestructable() == TRUE )
+ V$ \1 U: ~% ? {
% U9 Q. b$ U6 H, y0 X! T g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
: i8 A- p5 L$ x- {$ ]; U continue;, X F* ~( N$ j% q
}
- Q; ~3 ^, T1 T# u8 @, N g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# y: A n* y1 m# r2 \* C1 w$ o/ Y }0 `% j3 a. J z( G4 H" h8 t
break;. b) `. p5 \; g/ E4 F
}/ }; f8 _( G- M+ |: @0 X- ?
case 1:" H! g& I( {! u0 e/ I. Y! t
{
0 L% U( _; u: \% h //整理背包
( }" z* M4 v3 k. S //////////////////////////////////////////////////////////////////////////
; b: [& v8 F3 t4 z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ e) a' u: D+ j) w! F6 S1 \ //////////////////////////////////////////////////////////////////////////
7 o, o b" Y8 R //////////////////////////////////////////////////////////////////////////
) R, J, w# ]( X; o2 q( ~ S CInventorySort* pInvSort = new CInventorySort;
) c2 O2 F- U5 |1 }' W6 F2 s0 b vector <sItem> vItem;
) @$ {) r5 e( ^+ Q. S vItem.resize(MAX_INVENTORY);//初始化大小# g0 ?8 \; U" Z
//////////////////////////////////////////////////////////////////////////$ j* c/ O' W% \4 n( e Z
//填充数据 X2 j( |# V5 V7 a( k
for (int i=0;i<MAX_INVENTORY;i++)+ d; v! F2 J8 H& f
{3 G5 n) z& k7 [5 q2 A7 I0 \ a
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 J! q' o- Q5 R. Q9 H2 ~. x. F
if (!pItemElem)8 s$ n4 Y; r8 v4 m/ M. P
{/ T8 |( i" X% y' c7 S9 S. I/ f9 P h( l
vItem.dwKind2 = 0xffffffff;; N2 h2 c+ y) `# \. J. s& H
vItem.dwItemId = 0xffffffff;
9 g4 R# ^1 `' n vItem.nIndex = i;
; \# T. l1 g! q) e$ Y# e# C0 T }else {
8 F8 Z3 ]! R/ n* }! O$ Z! e ItemProp* pProp = pItemElem->GetProp();! q. t9 [- P% F' _6 A% K, y+ z) q2 p
vItem.dwKind2 = pProp->dwItemKind2;8 p. `7 M7 c1 f1 ~, ^* x
vItem.dwItemId = pItemElem->m_dwItemId;0 a5 g) L$ }: |7 U
vItem.nIndex = i;
! C/ F# f4 l$ q" O* W }
* h4 s6 S, K, x. w, k% @* @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- D/ h( ?* H0 N/ ` }& E- T5 q Q7 j L
//////////////////////////////////////////////////////////////////////////
+ D! i" G8 q# H& C+ Y! W6 Y5 I) { sort(vItem.begin(),vItem.end());//排序
7 d4 }) F3 M/ X+ h2 d# ?8 ^" b //////////////////////////////////////////////////////////////////////////
9 }$ }0 p/ Y& a& _ //交换* Q8 ?" l4 ~4 \. }* q$ ^
for (size_t i=0;i<vItem.size();i++)
0 V T! x& \5 a" G {# l5 |& o% V8 `# B Y
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 ^/ n$ i! U6 D! x$ l1 J, H pInvSort->Add(vItem.nIndex);8 d: @7 V/ \/ ]9 |9 z
}9 s1 u2 X. d( r9 ]2 U h8 I
BYTE nDestPos = 0;. B% b) K. O. I3 n$ K2 l( Y
for (int i=0;i<MAX_INVENTORY;i++)6 i' B9 i% [ d7 G T7 l& y+ Q
{
& I: Y+ N! j* y% r( f( n) X, N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ l, l/ i9 N% f# ]; z, f
if (pItemElem)3 s' e# I' i# O
{
! I+ n; i& |% y if (IsUsingItem(pItemElem))0 h0 t/ j# K' v2 n
{
2 B) ]$ u+ z, H! u | //这个位置无法放
* w% g" Q+ u6 ~9 C: M* ^ nDestPos++;
) P3 q: X+ K t+ G }" Y1 X7 ?% F1 C" h. j' H, ^
} g$ W( g- A2 M/ |5 W' F
BYTE nSrc = pInvSort->GetItemSrc(i);
0 D+ ], a& |1 G( @' j9 ~0 U2 Y7 V pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' G3 X3 ]/ }! P9 X. j
if (pItemElem)
# f3 ~$ G& v( f- Q" }$ ]- Z {
8 }, i$ B1 N6 l/ G if (IsUsingItem(pItemElem))2 C9 h% i) l0 k
{
) n7 p8 d E4 ^( H //这个道具无法移动,跳过( w3 W( @' w$ F7 C
continue;
9 D& D& G9 ]: p. g }
G! J% n5 T9 ]) E/ S* P }else{
5 R$ O; P" k" ~* P. S7 O% K6 e //空位置 不用动
" Q6 f7 _# E0 Z. i continue;( o* @+ D7 f; J+ B7 |# U2 n% s
}' ` g% _0 M! ~8 @* H% y, X
//////////////////////////////////////////////////////////////////////////
3 ~3 B3 h' \4 A3 B) B8 ]7 F //开始移动
9 g4 g5 b4 V7 b( q O4 D7 n* _ if (nSrc == nDestPos)* X! b* y+ s2 a: Z1 w; g) G4 ~* n
{
+ O D8 y! p5 ~) K/ r //原地不动
) U( d0 p+ v, J6 Q. Q: ^4 Y nDestPos++;$ \! I! _' G/ f+ Z) K# [
continue;
+ U1 L% K2 x* y }! L8 j3 C' j+ `# U
pInvSort->MoveItem(i,nDestPos);
) H% f: `' P! _6 W1 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 {' H5 r3 ]6 o Sleep(5);6 T% t7 F) A$ o" _
//Error("移动 - %d->%d",nSrc,nDestPos);
* @, w2 P0 w8 ^' K { nDestPos++;6 o3 j+ Z- Y) m2 \
}; `6 {, f) Y) d; r7 m8 |5 M9 c, `
//取第一个元素的信息
5 M; Q. k9 Q( g5 i /*
) _ A& r' n/ H: D+ ]& U if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 A5 o. T. ~* ^: I: z {
+ m p$ N# G( m Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 ~# F: f; c: R- P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 r) a- B) a! m) X2 |( R* x! C }& q9 K, o) c4 m5 x. G
*/; E1 W( a1 v) M% T0 O' `4 S
//////////////////////////////////////////////////////////////////////////
& X! B) _+ n0 x7 A5 G& d9 @ break;0 Z6 T; e7 J) A7 a- O
}
# g( J0 d$ }' M! j; b: l3 z }
0 r" s7 ]0 k4 I( A}. t/ H4 j- d, J; E# c
m_wndMenu.SetVisible(FALSE);
^4 x& ~6 V0 k2 W5 T. _' h) U' J: u& n# N# }' c0 i
--------------------------------------------------------------------------------------------------------, K& {5 I `, ^! E1 n
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* Z: `- ?2 D2 y; a' u{
2 G: y2 z$ X/ I) R4 Q9 rBaseMouseCursor();
( X# u! ~% `) a7 M8 O4 ?6 V, E* Y8 |}7 k: H9 \1 ]0 d' w1 [: P& h0 ?
在其下添加:6 o5 Y: r: f v9 ~, Z w( O
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* [* a, c) }9 L5 G: t3 t, ^0 q
{ o% ]+ K8 B6 [5 h: U8 A3 U" d# J
m_wndMenu.DeleteAllMenu();
) D% k+ s! F% [& Z1 D" tm_wndMenu.CreateMenu(this);9 R1 t, V; O3 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* Y5 _+ z+ }- F" \9 X$ W+ d
1 G: p* N* m! B% d5 ^" s9 n/ k1 wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), i, B6 [1 V. F3 s4 |4 z; y
{( i% S P7 ^7 |1 G0 U3 I
//P以上级别才可以删除所有道具
) z" c- I' S! Y8 n' m& k( G) u m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ O U# O! _7 @& R
}
T% ^' m1 U: M9 g- |# k/ N( Fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );# Z1 _7 p- u/ u% g
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! U) ]$ e: ~& i/ }; sm_wndMenu.SetFocus();( q8 f* m% g! t& `1 ?6 N% k
} V: J( P; R/ g& {
------------------------------------------------------------------------------------------------------------7 d7 u. g( F. `. S4 e1 q4 H# ^
*************************
' f3 e2 N" M6 D t# n+ GWndField.h文件* d0 s9 |8 |7 j$ P
*************************) Z9 e4 a! {* t3 S/ @: }
搜索:BOOL m_bReport;
8 y: D; X# ]& [* M6 Y* [# i! c8 }其后添加:- e o& w1 k& s
CWndMenu m_wndMenu;$ h0 ~! l: L0 k9 B3 ?% R, \ b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( X1 K- n* h$ K' M+ V. w
其后添加:
* `4 N) Z+ [' l" ~7 v1 G* ~6 {* Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);$ h$ p0 t; R" J4 C: C3 T
/ K- Z( {% P% e {$ ]" ?' z/ F) c4 S& F. B+ R
|
|