|
|
源文件中_Interface文件夹下WndField.cpp文件
3 `. C9 z" k7 @5 r( R& L, Y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 y- _: z* f8 M% z! \0 _
" k- C7 c, T# a# t _5 kstruct sItem
# ]. T a& k8 J0 u' l5 w{
4 W9 \) b' K' l7 @DWORD dwId;
. ?2 [( u: K! Z3 rDWORD dwKind2;
- M4 D7 r6 ] JDWORD dwItemId;1 `' G1 U6 ~8 z
BYTE nIndex;7 @ E2 A( y$ k( J. Q' H6 p. p
sItem(){" t% U+ O7 C& Z/ a8 _
dwId = dwKind2 = dwItemId = nIndex = 0;4 x4 [& n4 e* Y$ @) h8 ?- f
}1 {4 ]+ n; _+ k4 d4 V' b [
bool operator < (const sItem p2)
. e3 H6 F$ z8 K+ X{
4 a; ?! K+ m, j0 a ?9 u if (dwKind2 == p2.dwKind2)
8 J( S7 M$ I( O7 q {: `% V' Y4 _/ `0 T9 Y7 ^# y, O4 v/ ]
return dwItemId < p2.dwItemId;
; H& U" L/ D( ^) R& L" ]& } }else{
% v2 a: }, K, @0 D1 ?0 Z+ ] return dwKind2 < p2.dwKind2;7 `; S; a: d5 X) g y# ~& b
}7 O: R7 g8 K/ y8 ^* a3 u n
}
& u7 H3 O, v8 s. T3 j5 C, ` ]! U5 A};
- s! M9 F* t; z; E% N7 Hclass CInventorySort( g l! z' O2 G8 i1 ]
{
9 G) ^9 \$ n1 ]5 B7 g: v# R+ Npublic:4 a: ~" B Z- [* c7 L) ` ~% Y
CInventorySort()! `; {# R) H' x$ N9 J
{8 }4 W1 x/ `! q2 D7 A7 v% x- B% P
m_dwPos = 0;0 t+ m y" [& D7 L. l
}. |. a! g/ f6 F; Q( `8 M3 K
~CInventorySort(){}
( C0 ]) M6 w( b) A4 l4 k1 Sprivate:
) O6 |# B3 g: p4 O1 @( X0 lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: D |# g# a1 \8 H
DWORD m_dwPos;& g o0 D# a# j
public:/ o+ U, E+ t1 ^$ j V; Y* h
void Add(BYTE nIndex). u' r5 V8 T& i' `4 ^
{( H5 m0 i; c+ U
if (m_dwPos >= MAX_INVENTORY)' a* y! i# C/ A( T; L4 S! R$ b
{
2 P5 T0 V- J6 t0 w2 V( x! @7 W% C) H return;
2 c7 l; Z1 f# v* r }: y& }3 P4 F. V8 P- ]- |; k* U
m_Item[m_dwPos].nIndex = nIndex;
9 Q( y1 _, f+ m m_Item[m_dwPos].dwId = m_dwPos;
" l5 T5 y( [) Z6 n2 e3 m m_dwPos++;
" I( ]. G4 _5 ^9 |& n8 _0 I, p1 s}
8 T/ @8 X r- U; _. h) y/ PBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% g6 c8 X& F% @4 d ?{
% j9 ~( Y" Z: L7 k$ n( ?6 X6 ^ for (int i=0;i<MAX_INVENTORY;i++)6 ~1 h% x, G# y: v: z
{, X) r% a; |& i# ~) u& ]
if (m_Item.dwId == dwId)
, v5 j$ C+ L! |/ n: |$ O {& x6 W* l; v! Y+ }8 d- j _
return m_Item.nIndex;
+ H3 X9 d3 m4 f9 G" T8 D$ T }; n" a: c' }4 C: q% c2 X Y
}# R# I2 R3 Q7 f( B
return 255;
# i: V/ y: _5 S. `% r}! |5 Y3 @; b- J& C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 K, e Q2 r6 E
{
8 o/ _8 Z$ d1 ~0 ~) P: I' z3 Z BYTE nTmp = 0;( {* d( W% e1 e% T: l; }1 E6 Z/ D- P
bool bDest = false,bSrc = false;
0 _' }) a4 V3 f" G2 j+ f' t for (int i=0;i<MAX_INVENTORY;i++)
+ ?" {. {- n' \/ d) t1 Z9 w {5 {1 _( V9 T9 N, j |/ O- f% ~
if (dwSrcId == m_Item.dwId)
X* J. ^! s* w" C {
0 c- |" n: _% j //id相等 则 改变对应的dest和src
' f! v# s" t" t+ ?' Q# _ nTmp = m_Item.nIndex;9 O1 C- C4 U- S5 F8 Z7 A* d& [
m_Item.nIndex = dest;
' g9 G7 m. h B* N7 X# ~ }
; G8 k5 q" n8 U" Z }
! ^/ W A0 E; A' C7 _) m //临时数据保存完毕,交换开始
5 ?4 ?4 O7 `) y' I/ f8 W7 i7 e for (int i=0;i<MAX_INVENTORY;i++)# V; c2 g3 \! q* f/ R2 y
{
# G* D* C! f( g if (dest == m_Item.nIndex)
0 y! N% C, a7 N- U, U {
* V" \0 [6 }- u! }3 Y/ w //id相等 则 改变对应的dest和src
6 E, ?' |# G) N5 m1 ?/ [ d m_Item.nIndex = nTmp;" S* y" v, X9 v: W2 M% F& C1 z' h
}
& I% O, b, P2 S0 Z }
7 _8 V/ S; X# m' n7 V; G7 P2 d. }}% {) n) _5 ?' r
};0 A1 v2 ^- T% {/ p+ E
-------------------------------------------------------------------------2 D. W0 X% m7 c' E" ^+ [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ?) e# p) w) J( {' ]搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' q3 b1 b) Q# H7 {4 j$ @紧靠其上添加:
7 Z8 |& ^2 D& B7 Fif( pWndBase == &m_wndMenu )( y! O/ u9 ?/ k6 t/ L
{, C3 S; W# N" V
switch( nID )7 n1 C7 `8 J c8 m4 d8 K5 M X
{) ^! f+ `0 l& n0 W* z8 Y( M9 J- i/ d- F
case 2:
3 g" Y) _' ~! v$ A l- m {
* s O, T3 a c$ M$ e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 }, y/ A. [- Z7 m* N2 _! N if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))# I6 p1 u: ~" {7 E0 \
{, P: ]" ? _, t2 a, Q$ t
break;
6 C7 k6 ~( ?) f6 e5 ? }
2 @# L+ u) h: z$ H( d/ i3 F for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" Z' U& O! W2 v/ E8 @4 o {
9 m4 S S6 o4 c7 ~# ^4 Q# L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) u h9 N% S/ F" ^
if( !pItemElem )- I' v$ |8 N" f- z# p" A6 S' I: p
continue;
3 p4 o( z6 q3 P$ X if(pItemElem->GetExtra() > 0): E) e9 n7 C/ P" } m8 d
continue;
4 \; K2 K0 C( ?& s7 ~4 a, p& ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 1 E5 K, F# v3 B1 m( S b
continue;
. e* U9 d) X; S5 J, q- f3 \! `4 k if( g_pPlayer->IsUsing( pItemElem ) )
6 [1 S2 t9 r8 Z* d continue;' A/ _6 e0 L& Z+ R& y$ d8 q
if( pItemElem->IsUndestructable() == TRUE )
. J% @8 |& c# E2 M. _ F. B {6 \* T. L4 F# e Z: y4 l) {
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 ^' U2 Z% c+ S, C P. u A
continue;
2 O! |( Q. K4 ?2 c5 m }' A: R% D- V! |% b$ f2 y
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 w" L( ~7 y/ M& E. M }
- \6 k! H3 Z$ Z break;
, u( P8 w7 G, ~) k! L. ~! F }9 F/ {8 T+ ^4 D) S1 l* I* f
case 1:
' |6 V. ]* U g; S& ?& r! D {' i3 K& _- W. l6 J
//整理背包% K6 V" [. w1 \- ]8 p
//////////////////////////////////////////////////////////////////////////
1 |9 D( W/ H5 a //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
/ A( }/ N% N3 c t% @3 G1 L /////////////////////////////////////////////////////////////////////////// A$ F% T3 |0 V
//////////////////////////////////////////////////////////////////////////3 z! \& p6 F e0 Q# Y4 w+ e
CInventorySort* pInvSort = new CInventorySort;+ I4 U+ t! V7 C- v" i7 T
vector <sItem> vItem;
- A0 p7 @ x' D+ w' l vItem.resize(MAX_INVENTORY);//初始化大小
" l* o/ ?& I/ n" v //////////////////////////////////////////////////////////////////////////
9 i0 Q# Z' y0 U' B' F& s6 G //填充数据
/ g9 b; H' R, p for (int i=0;i<MAX_INVENTORY;i++)8 b' c, x8 m9 l2 i, F0 C/ M* ^ g& Q
{
' c$ C+ t2 c- {& B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
2 r) ~. a, p; c& |( {$ _ if (!pItemElem)' [( j7 i/ ]4 w* A# T5 H% h
{/ N3 f' e0 a$ b
vItem.dwKind2 = 0xffffffff;
% o4 c0 G% {0 u, Y vItem.dwItemId = 0xffffffff;
8 G/ n' M. t9 y- P8 a* Y vItem.nIndex = i;
9 Q9 ^9 R! s- K0 W }else { Y. x9 F* R2 O. y; J3 l0 E) V
ItemProp* pProp = pItemElem->GetProp();
( K7 x4 F0 J" N' U5 L vItem.dwKind2 = pProp->dwItemKind2;8 D! R: V" x) l0 V1 c$ q% }
vItem.dwItemId = pItemElem->m_dwItemId;
4 n w. ?" K& Q. n; D- e3 @ vItem.nIndex = i;; v5 o3 b5 P& m& P* z+ p! v; y+ E
}! B0 j9 I ~+ I1 w3 G. ?: ^
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; { |" H4 A' q. f8 p( j' O a9 u k; t }
p, t3 C; F7 L" F5 g6 C //////////////////////////////////////////////////////////////////////////
/ f3 u9 D1 s# f8 Y" ]# N8 a+ X sort(vItem.begin(),vItem.end());//排序7 @' Z: J" |6 \
//////////////////////////////////////////////////////////////////////////0 o% K0 a, L2 O5 U, N" N8 J
//交换
; ?% x% q( M; X' x8 o# ] P for (size_t i=0;i<vItem.size();i++)
- {! B* a& w' H- v {
! {' B0 _9 Y: A7 l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 ]+ Z" P# M& Q1 n/ X8 m
pInvSort->Add(vItem.nIndex);2 S* o' o! S/ x0 q0 v
}
$ k& c1 \( i2 d) N BYTE nDestPos = 0;6 r- [" U3 x/ T5 i+ D& U/ H
for (int i=0;i<MAX_INVENTORY;i++), }! a$ A( p% a+ M( }. g
{
% x* S4 T& M5 C& y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" i* a9 l, q- S3 A& c
if (pItemElem)
3 Q B* m/ `2 P7 ~! W- O {
1 \; g- n% B( H1 p" Z if (IsUsingItem(pItemElem))( d$ V+ ]2 I! |7 f) x" E1 l
{
+ u# w$ S+ c. @) G& n3 i# K0 u //这个位置无法放1 m4 O2 ?3 c5 w9 b
nDestPos++;: Z$ I& a% _+ E' e+ Z1 }
}
& u1 b7 i9 {" ?' u" o* S' { }5 J* G7 G3 M7 A4 A* C
BYTE nSrc = pInvSort->GetItemSrc(i);3 E8 U/ K4 s' B0 T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( W9 j& q$ I2 G; B
if (pItemElem)
7 W8 y: y4 G, e) p {1 L: x2 q, T0 b/ ]
if (IsUsingItem(pItemElem))" ]& a/ v, r+ V& s) H
{" ~' m6 [9 W8 G0 x6 F9 [
//这个道具无法移动,跳过, c4 _6 s. r- `. l3 [0 c
continue;$ D) R- r) s+ m
}; U/ J% `8 Z: l$ V: U
}else{
; _) W1 U. h: |# w //空位置 不用动( S/ h o3 J& t7 c# i
continue;
7 }0 H! ~( T" }5 s- E9 e# g: ]; @ }; k2 e* H' o/ e0 a) l* v
//////////////////////////////////////////////////////////////////////////. H+ F; j1 t0 ]# a0 D7 X
//开始移动4 P$ T, f, ~. U( N. q4 s
if (nSrc == nDestPos)$ x7 B& D( v' Y( C4 Z5 t
{# b `9 G L T8 d T" D5 C9 {" q6 |
//原地不动' B3 A& [8 P/ U1 F: ]
nDestPos++;
' j n3 r- m( T4 w8 S continue;# C5 ~9 ~# a, O
}
. L7 L/ O8 ~# ~7 }( a3 X6 ]$ s& B pInvSort->MoveItem(i,nDestPos);8 s" u0 i1 f% F5 J, {
g_DPlay.SendMoveItem(0,nSrc,nDestPos); r4 c* d+ K8 W2 \* U
Sleep(5);; n2 M- L; m7 Q" W4 Z/ Z
//Error("移动 - %d->%d",nSrc,nDestPos);
3 Y1 e4 k! Y3 p) v nDestPos++;7 m6 [7 @, j+ J1 h0 r3 j
}
2 I% H b2 `3 ?$ b* h //取第一个元素的信息
, [3 b0 v. N! k /*
~: v) f+ V+ _; m6 Y; s% u& { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 S$ r7 Y6 P9 I9 W9 e
{
! ]3 }) o8 Q e1 a Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! M6 X- w# i3 e' J' P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. n. m, g c2 o }
7 f" D, [+ I' u q: l" Q8 V4 T5 s */
- }# y$ V" |! W8 h0 T //////////////////////////////////////////////////////////////////////////! A" O) {0 p& N- P
break;2 B3 l. |/ y/ {; \% S: N3 ~
}
( ]4 w X' F0 P3 w# f- ] } 9 E: v5 N9 S$ A" G
}
' M; I; ~; z1 g7 |8 jm_wndMenu.SetVisible(FALSE);6 d* W3 T- | ?1 n: ]
' p L; L+ ~! s: @
--------------------------------------------------------------------------------------------------------3 U+ ~- K/ l% H/ [
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- T" m; U& Z- z
{
2 | H, i3 F! `9 SBaseMouseCursor();
; x/ m s1 `! h* e0 R' l}
/ k& S9 r, z; q在其下添加:7 N" p$ N) {" l/ d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 }+ V0 Q, O$ O7 p5 y$ L0 a{; u r0 i2 q4 y9 y3 @) D: `
m_wndMenu.DeleteAllMenu();
5 m0 X2 P+ v4 R* Qm_wndMenu.CreateMenu(this);' m1 c; J# I2 B: R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) z$ ]0 `8 q0 k3 u
3 Z) o2 Z9 q% V @$ V$ _
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 w. S( O& k6 W$ E9 `# r
{/ J) M) d6 V7 Y% W% j
//P以上级别才可以删除所有道具$ c, P) p7 i3 {' M! t% N8 ]
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
& z( ]. C4 @* v, x) l* m/ B3 x}5 B, a1 n# O" |7 ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* D! b4 L6 `+ k E6 r- mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ T+ m+ h0 U. H" H/ i! j/ f5 b
m_wndMenu.SetFocus();8 v; ]7 T1 j1 @
}
& p; }0 ^4 Z6 {* {$ I3 T9 p! ]3 c- r+ I------------------------------------------------------------------------------------------------------------
v! Y+ M* X1 P3 ^4 d* O*************************
, k. ]; m0 c6 F9 X2 k' ~' ?. k0 m# [: \WndField.h文件
, K! l; h4 j. L* e1 t% |% V s*************************
0 p$ E& x) u% a) Z7 C: z3 r8 J搜索:BOOL m_bReport;: M& c6 @: v0 f8 r$ s0 n" z; g
其后添加:3 M/ J2 F. s/ \' q) C2 S
CWndMenu m_wndMenu;$ i/ y& A! M' T1 F
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ S% s$ u$ A) y1 e其后添加:
6 Q: c+ R: z* X7 t6 [% @virtual void OnRButtonUp(UINT nFlags, CPoint point);
- }4 t, C5 b" o! ^: p' o
9 `% m2 ?1 j* ]* X
9 t/ w5 J8 C( A |
|