|
|
源文件中_Interface文件夹下WndField.cpp文件& [1 \1 f" X# I% d6 n2 \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 u1 h3 @( G) q5 U& C4 D( R/ p Y7 M( C
struct sItem2 Y; B4 F r, }' W, ]
{
4 p- t1 ~ s7 _2 z2 ADWORD dwId;
) C/ s2 `+ {3 j1 ^DWORD dwKind2;
. j) H& i5 ^) B- N) v" hDWORD dwItemId;+ h1 U, h1 N; x9 m( i
BYTE nIndex;
c/ x# D8 S K3 _' C DsItem(){$ o" ~& {) W9 N. y" z5 G; L
dwId = dwKind2 = dwItemId = nIndex = 0;, c1 K% _( i: y- P' G
}" a2 w/ s9 P% [0 n
bool operator < (const sItem p2)
$ c7 k; j9 S; o! a* q4 G{& ~( d, G4 S* k% f8 \2 T
if (dwKind2 == p2.dwKind2)
, r# `' e) I4 [3 A& K {' I: e6 G3 O: J, W* m
return dwItemId < p2.dwItemId;3 X! K$ U& O: q b- Z% N
}else{
* F4 T5 T$ j8 T. @ return dwKind2 < p2.dwKind2;; o# R% W2 ~5 W- ^& F. Q
}4 D3 m# V7 M' b: U+ D, C, } y, ~! G
}. A7 F: B- P0 r1 V$ d9 i% X
};$ F, t+ q4 c. e$ ], b3 \1 k; Y7 w4 X
class CInventorySort+ _; E: n7 p6 m& H* {* f
{, ?6 |$ ?5 l7 h( q$ U
public:
/ b; p2 a1 l& w; `7 yCInventorySort()0 h& s, t4 {2 r( T$ {, Q
{
. n1 w' b! p0 O; G. C9 Y9 `4 \ m_dwPos = 0;" _! Q/ W6 ^" m% }5 |1 B; R
}
- i* \' _- p2 A0 l$ s1 m$ s" t8 Q5 L~CInventorySort(){}+ z( o: q+ v$ O# X. T5 v" W i- P
private:- Z; u; T; v: P6 {! X# Y6 u7 B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ T+ b( L/ s9 U" d& q/ f1 P& I! n1 y
DWORD m_dwPos;
) J5 z& q9 _9 Bpublic:
3 P0 l5 V( R2 z2 x; Fvoid Add(BYTE nIndex)4 U7 Q4 ~. l( O- C
{
" C7 M9 M7 X" ~8 I8 H) _2 U if (m_dwPos >= MAX_INVENTORY)
% U* z; `! E* |5 b {
; G) A0 _; p: g/ ^3 X$ C6 x* v return;
, D: I+ V* _5 s8 N7 F }
' E6 I6 s4 v" O0 U+ l1 r+ t7 Z( q m_Item[m_dwPos].nIndex = nIndex;
) v9 D3 {, K# l7 W6 i% S" I m_Item[m_dwPos].dwId = m_dwPos;
- X" I" v ~) i m_dwPos++;$ g# T7 K: k% u. B/ s
}
0 v' A' L8 ~1 A1 R# ?% t$ y5 wBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列( U5 }- c8 a2 `. f4 X' Z, f& J
{
3 m; g9 B, P$ E# K) o( Z' p* M for (int i=0;i<MAX_INVENTORY;i++). G f& x) v* a- @. o$ E. n
{# y+ Y7 i$ `1 i9 E3 c
if (m_Item.dwId == dwId). S" C k: ]$ o2 h1 J% E
{
& p2 z2 T5 u4 ]# k* u return m_Item.nIndex; \4 B+ T: V& ]! `: Q
}
- \* a3 C2 s7 i: s }
2 _# l& r5 r' ]; ]4 q% e; D return 255;
9 d R7 l/ }0 N7 ~( y$ s}; I8 h; p' Q. L4 Z ^! Q: f
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 D2 L5 k7 M( w/ k4 z. ?
{/ }8 x9 f9 ~9 `5 U) A
BYTE nTmp = 0;
0 K+ L/ o5 o/ v. H bool bDest = false,bSrc = false;
9 L) I) u8 n9 L% G for (int i=0;i<MAX_INVENTORY;i++)1 b# X0 n# V/ ]) L- _7 F
{
9 T6 R' }% `7 E6 ]' N% l: C if (dwSrcId == m_Item.dwId)) f% `2 z/ k7 w8 l7 l: ]! {
{
% s% t! @5 s" F- H, f" t //id相等 则 改变对应的dest和src) c$ W6 g. B& `
nTmp = m_Item.nIndex;
& h" \* r( N3 m# O: K/ d/ W0 y9 y m_Item.nIndex = dest;
) ?5 j( M( [6 C8 L% v7 a! G }: S, ^6 j0 V* p, u+ Y/ V' T5 R' f; J; q
}
, F& k* W; ?4 p+ o' e //临时数据保存完毕,交换开始
6 e& a+ x9 ?3 H& f3 u8 D! t for (int i=0;i<MAX_INVENTORY;i++)
' B& Q0 ~0 P! N4 R! D) V {6 Q5 q1 h8 `0 ]- l3 @* q5 z
if (dest == m_Item.nIndex)
3 m7 v5 | k/ r) k {
& U. u( w* B y3 p0 v5 {8 {! | //id相等 则 改变对应的dest和src: j& U; c4 s6 \
m_Item.nIndex = nTmp;3 ~8 u4 ^# T+ b
}
( K% {5 r% x. e; p' P+ Z8 S) g9 Q }
6 o) k! h4 E% ?) u}
* c6 q" y# }2 D7 R7 ^};6 z3 J3 ]& k) c3 d5 @! L: R$ n
-------------------------------------------------------------------------. T$ `- r& q; X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 Y3 C2 m0 O9 o: [7 n7 k8 P& @4 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% J8 ]2 Z$ j7 C1 s a8 x0 ^5 n紧靠其上添加:5 U7 J9 c% C' J, O% {* r) Q
if( pWndBase == &m_wndMenu ); {* ~, s3 r; ]* h+ M6 z. O2 ?
{% d5 c% I& t2 f
switch( nID ) Z$ X, b. f! L; f- P; P1 ]/ P
{
: ]$ f( p. J0 @ case 2:
7 |, ^! D% y/ \1 J/ k6 E0 N {& w0 i8 M8 c9 n# [, k
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 h" a/ l! Y, v! T L0 Q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% ]! k: b; k% Y" L" [6 T
{( U; c1 h( |1 t- J1 |3 a' |0 Z
break;
3 e7 d J" q4 P$ x4 j" F }
, H+ w1 f9 k' q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 G3 K, v% n5 p8 @8 Q. I' _ d1 w- A {
4 R4 ~, s& r: {! _& O+ }7 ` CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# C& v0 }) C2 X
if( !pItemElem )
/ n1 r! u8 o6 n; P8 Y0 M/ i continue;
$ @( V2 Z7 f0 p+ _+ h: X if(pItemElem->GetExtra() > 0)( H! I. m$ L. P, c& }. ]0 g5 _
continue;$ \7 D# L1 u+ m r: d
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; w+ P) I& R- o# N' ~5 H* e continue;4 C. F7 n& J3 [% c7 }+ x% L
if( g_pPlayer->IsUsing( pItemElem ) )
% A+ M4 i; e! }+ L* ` continue; |, K8 F% O% }8 @1 P) N
if( pItemElem->IsUndestructable() == TRUE )) `, c9 C& b7 h, R
{+ ]8 x# x2 g0 x" s9 n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ P, J, X0 n8 e8 j* R
continue;
2 @6 W" E# b: i! M( d6 H* q }
, z4 @2 a% |; y3 t g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 o) @" q7 A" Y( n }
3 M2 w$ ~2 w9 V" u# B break;& r' J! e* M7 e) r- q$ x5 e) u
}/ j! z% I- P/ ]* K4 x' X. W1 z" x/ G2 g
case 1:3 {1 u8 k0 w: y6 V+ D* `
{ @2 Q0 ~! {. q/ s( n. P
//整理背包0 Y" l; d, v$ ~( F
//////////////////////////////////////////////////////////////////////////
' u% B3 y! k) x- m; d$ G0 K8 |' C //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 g( B; z9 L6 d# E, m( G/ f //////////////////////////////////////////////////////////////////////////& v) ~5 A) [6 I$ j6 s4 j6 m
//////////////////////////////////////////////////////////////////////////
5 S ^# A C4 o, h" b- ^ CInventorySort* pInvSort = new CInventorySort;
0 M3 k* c- k" t vector <sItem> vItem;
) K1 D: t9 ^/ n vItem.resize(MAX_INVENTORY);//初始化大小% o, Z; \/ h+ [4 L2 Y R8 V
//////////////////////////////////////////////////////////////////////////
' L4 m' t: g4 V' C$ ]- Y6 v: j //填充数据
8 y7 m b! ~' ` `: y for (int i=0;i<MAX_INVENTORY;i++)
* M) ?0 E Q) x/ ^ {
0 w, b+ s$ n" C8 ^, h( V CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! T: ~4 K0 b6 S3 X- i, z% ^
if (!pItemElem)
4 K& U U! Y( v3 Y+ x {+ J+ {. J, @; V: i- p/ y
vItem.dwKind2 = 0xffffffff;6 S; j* n: u5 w1 U, t
vItem.dwItemId = 0xffffffff; ~# O8 `7 n( ?( t, ^% ]
vItem.nIndex = i;
" |) P; N/ X6 K( _9 k }else {8 I) t; i- z f) y" e
ItemProp* pProp = pItemElem->GetProp();2 @ Q1 T( Y+ X' ]# B2 u
vItem.dwKind2 = pProp->dwItemKind2;
, T4 t* W/ m! }- m: H! g5 n5 D2 m vItem.dwItemId = pItemElem->m_dwItemId;
: H' H* u& ?5 {" S! i- q vItem.nIndex = i;
; K* y& a$ }, L } h3 v8 g, Y+ [7 y
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 [ I5 R5 i) w
}
5 U* r0 B* n( \$ t: ~! z6 H3 Z //////////////////////////////////////////////////////////////////////////9 x6 q: w1 k1 n- r- J( S
sort(vItem.begin(),vItem.end());//排序! t8 i6 ], X0 A1 Y6 g0 Z# H& ^! O
//////////////////////////////////////////////////////////////////////////
3 E$ l4 h' d' b9 z& k9 Z& b //交换
4 U9 ^: z) _4 B4 h2 b3 k for (size_t i=0;i<vItem.size();i++), {% W9 r. `. P7 ^9 a/ G9 S$ j( p m
{+ w( ]3 e! s+ a# z) r! v6 y$ E" e
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 Z8 q1 o, [2 d' n4 y, L' P pInvSort->Add(vItem.nIndex);
6 O: e4 s J. A2 l9 J0 U8 G0 Y; x }
+ b; A9 q4 U. w) X BYTE nDestPos = 0;
I% C, v9 \0 n for (int i=0;i<MAX_INVENTORY;i++)* b7 b! U. A- V0 Z2 b
{
" |, c0 y. h$ o2 u. Z$ F4 I& F' W CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' M' P- k% o7 R j
if (pItemElem)$ Z7 F/ P5 j! X$ d5 Q+ B) D- e
{7 o S; v+ |& S7 G2 {# j
if (IsUsingItem(pItemElem))
3 Y4 v {5 g' O+ G/ J3 L; n1 y {# M/ B, n- q: o$ q$ I: ^& `
//这个位置无法放2 J5 S$ L5 r6 ^
nDestPos++;
, f8 C1 I& @# |" d9 f l7 s+ z+ f% ?" d }
' W3 V* i$ I! Z0 L: U }# O8 Z& X4 \1 T
BYTE nSrc = pInvSort->GetItemSrc(i);
1 o0 t2 g* o0 V. Y w pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 A2 l( a0 w$ ~! |0 v
if (pItemElem)
! l; d( c* R" y1 W' K9 [ {3 _) x h* w) d8 S ]( b4 w4 G# U
if (IsUsingItem(pItemElem))
9 `$ f$ `+ h& }0 d {. L9 s; Q. W, d2 d/ m# @6 E
//这个道具无法移动,跳过5 z; d+ y/ ^- e$ J
continue;3 h* z4 h |8 R; D# p7 L4 _
}# s6 }4 e. L" _- C
}else{4 |% y* m' s1 B' S% @2 U3 {
//空位置 不用动# W6 ?& T: p- b- V6 R0 I. \
continue;% H& m1 Y6 o7 U, n
}. l& I% B5 V: [& t0 _$ m3 p
//////////////////////////////////////////////////////////////////////////5 B. N& m! v5 _9 C5 D
//开始移动6 R, j3 W2 P. \) i" T
if (nSrc == nDestPos)
* s2 b; \! v6 l- C# |7 g {
5 G3 Y" j8 I7 P3 ]8 H) ]) ^; B //原地不动
' r. s+ k9 _: @# f5 i nDestPos++;
) J* b: ~9 ]" R/ g d continue;( y a U6 h4 t+ i: d/ E$ r
}
% t- S2 i) i3 h" h _1 ^ pInvSort->MoveItem(i,nDestPos);
4 f" E0 G4 G& ~+ Y0 w g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. h; Z% |9 c5 X$ w' Y a Sleep(5);
5 @, z! R# a' g- Y& w //Error("移动 - %d->%d",nSrc,nDestPos);
) S5 Z& T7 O0 U6 Y nDestPos++;: p3 q& r9 R( f# o. q
}5 D1 q7 _; A! Z6 O# @+ V
//取第一个元素的信息
/ L, t3 b5 z/ y/ w1 e: R6 D }8 f; M /*( q1 |1 v! X/ i
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& u* f8 T( D- O3 ~- R {
2 f! N6 r2 Q* F# I- X. A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
* {/ s8 c [ ]3 }* L; j g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& A# Y7 A7 Y# t# J* v
}
! ~0 a3 t G$ o# _$ s. b1 ?7 M$ n */
6 [# d7 ]7 V( D* M8 ^ //////////////////////////////////////////////////////////////////////////
3 s7 X9 @+ w. q3 s4 W. s) m break;
2 R4 ~( I) G0 v) f }
6 H$ C' R8 ~1 Z% h } / ~7 S/ A, X) M/ t* V3 F
}9 }( d' c. U& \. E/ ^: u$ e5 D
m_wndMenu.SetVisible(FALSE);- ~0 t# L! R8 V4 n( q! Y* m
3 { g- v9 k4 R, z; p& Y
--------------------------------------------------------------------------------------------------------! Q% p/ S/ W6 m3 s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)) ]0 n- w+ \0 ^# b3 l2 ]
{7 K7 W& b6 B" g& r; N# X o* d
BaseMouseCursor();
' W' y9 G$ s% u2 S: p}
( r0 P4 s. f% p在其下添加:
% v2 b2 Q" E8 T! S" u+ avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 k& m# F2 }1 r
{2 Q8 x: c4 }( A' {- B
m_wndMenu.DeleteAllMenu();
% l! X/ P1 y$ U% W' Vm_wndMenu.CreateMenu(this);
( p. ^3 e' i* i3 m3 ~! |* Gm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 B; U" l6 Y9 x4 @6 K
2 T1 V: ~: Y4 Z% t$ Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); @- ?1 @, U5 J' c
{7 e+ k& b# U8 }, t7 b: I
//P以上级别才可以删除所有道具
- @% L3 ]2 L8 M$ z* Q" o ?& y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
e) y- g" Z0 ^: M) O" _}
9 |& G: e5 x* P9 ]& _" O8 q2 [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) f5 C* f- } V |7 T5 ?m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 M% L, ^% I1 d$ E
m_wndMenu.SetFocus();
+ ^! C2 `: y- x$ p% A}$ {( y: T9 D4 E1 _6 E, X
------------------------------------------------------------------------------------------------------------
+ b- U# }! j3 ^" ^1 E% J*************************' M" U& q9 B9 z8 W# Z+ u
WndField.h文件
$ x1 @* n6 G( d& ^*************************" P; `8 X8 T% G. C4 q! q% ~
搜索:BOOL m_bReport;. u- C( g3 ~3 o1 ^
其后添加:6 I+ q; |. ]3 B& s7 C" T: W% k
CWndMenu m_wndMenu;
6 R/ z1 R3 T J) r9 ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ K$ I% v% y# i* ? F7 S @4 z
其后添加:# D" v1 s* L( J ]9 O& U: P# N
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 Q$ ?( Z3 U F, m2 v
" A2 h* r# I3 }
, E! H' A4 }. w, m+ I& D
|
|