|
|
源文件中_Interface文件夹下WndField.cpp文件
1 E- U3 k2 ]$ K" I9 j: L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- G1 U' k: l$ p8 S+ P ^" Z+ J3 E' w
4 f5 c' P# W2 _
struct sItem
% P! h6 n" w% e7 ]{) ]) J# x3 s$ `1 O* Y" }8 n
DWORD dwId;
$ T F6 C( {4 U9 a0 @, {DWORD dwKind2;
- [ d6 U4 T( {: LDWORD dwItemId;
$ v. i5 a1 l' |& g7 |$ GBYTE nIndex;
7 v8 F: d5 @3 nsItem(){
0 M6 q9 n: X& R4 ^4 E) O dwId = dwKind2 = dwItemId = nIndex = 0;
4 U1 W% u# \- j5 M9 |}7 G: t8 ~" ?" R
bool operator < (const sItem p2)( D( b- l4 ~( g
{
( G; m" m; F5 H, b) u3 f if (dwKind2 == p2.dwKind2)
- d: L1 w1 p' a6 [ {
& t, r% h- Y) N( J' O$ C% o/ o return dwItemId < p2.dwItemId;
! Q I+ I, D W @% F) j1 n- h }else{5 D5 _; m% n9 p, u Y5 W3 O6 x7 ]8 E
return dwKind2 < p2.dwKind2;$ P i, v' u, q* a# K
}
2 G1 _, _9 {0 @7 C2 m o( O+ m' A+ p( ~}
8 x6 C$ z6 f! O' }! K1 i# H9 m4 t};
" t& g2 ?& ~8 r# hclass CInventorySort
4 K& F, x* I4 C{
; C6 o/ x2 H/ P% C4 `public:' G, J* l I4 y& Z: Q6 Q7 G+ t
CInventorySort()( K9 a! |* U) `& m
{ f% h$ g7 l' q9 J3 u. u
m_dwPos = 0;% b3 l- N. Y( ~4 E
}
3 S d: ? j' |~CInventorySort(){}: R) p( F# v1 W$ \! J) ]
private:# p& _2 N0 t) k# }( z) O9 E7 [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* Z+ }$ W d; J
DWORD m_dwPos;/ z- v& |5 O v: d* T
public:9 Y1 p. t) h, w" P3 p0 W' A
void Add(BYTE nIndex)
$ B8 |$ }4 Y% f1 X4 |' d) D{
/ u, s" G/ D7 C8 [ if (m_dwPos >= MAX_INVENTORY) o. z# X; h2 G' P, w" @6 X
{, x5 M' j! Q- {: m
return;% E, i; x8 t: g5 R- @
}: ~% U. s4 p7 _8 a
m_Item[m_dwPos].nIndex = nIndex;
+ l/ l3 o1 G) z6 ` m_Item[m_dwPos].dwId = m_dwPos;
8 j( G1 F7 E) M; M2 p# ~* z0 v m_dwPos++;7 {9 R4 J# O t/ N1 H9 ^' q
}
" p3 M$ K, [9 y# ~3 m" z# ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
, u/ I* h4 y3 J6 U{# ^9 A5 d5 a7 }( V3 P
for (int i=0;i<MAX_INVENTORY;i++)
) H; E# C: W% `1 ]" Z$ X" m2 @ {
7 S% B7 q% n* @3 O/ U& F if (m_Item.dwId == dwId)) e4 z9 C' n. I1 ]7 V
{
' ]( C6 A5 y3 K+ t0 O6 ? return m_Item.nIndex;
+ T! Z8 P Q7 C. i }2 i* J; I9 g8 F* w5 P5 w8 K$ `
}
* S* K+ q Z1 t return 255;
1 F% ?6 |- m1 q8 [3 W$ L0 S; M4 ^}
7 q/ {' C* j4 v0 O8 y7 Z7 dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 B u3 y0 ~! U: a
{ _. K4 u, F. J# P
BYTE nTmp = 0;
% H# Z9 Z8 k9 q [; z bool bDest = false,bSrc = false;
. v; R; E0 j) O9 Z/ ? for (int i=0;i<MAX_INVENTORY;i++) C: K/ l g: y: w& O9 D4 L$ t
{* f" ~9 g/ i# o7 w3 [# R
if (dwSrcId == m_Item.dwId)
$ O) g2 R0 Y5 O {
( j" X! T0 n- g7 k' s+ r/ t8 b //id相等 则 改变对应的dest和src
6 V& X3 z4 t9 t$ S# [$ u; g nTmp = m_Item.nIndex;# k4 B. ^8 o4 B; \
m_Item.nIndex = dest;
7 \5 S+ |+ K" R5 o }
O6 W% s# B+ r- m! } }
) y c" K* L8 P3 H //临时数据保存完毕,交换开始2 g8 U) r, k5 d L7 r
for (int i=0;i<MAX_INVENTORY;i++)$ B" E1 n, G, @+ s1 { i6 ?
{+ p7 H b4 k/ a' G; @
if (dest == m_Item.nIndex)0 U; C6 `" D. q9 v
{6 I7 i5 R$ Y! a" B7 c4 l9 Z
//id相等 则 改变对应的dest和src% ]5 n8 Q! Z5 L7 N! w" s/ W
m_Item.nIndex = nTmp;( L6 f! y1 ^" b! b/ Y6 u. e+ X3 P. a
}
; A/ ~5 Y8 K9 B$ t6 _+ u }1 p% e M6 Y" M+ Q" w5 D- `+ L8 Q. c
}
7 e* F$ v2 `1 B; x* z};
0 T7 ~7 F4 d7 ]-------------------------------------------------------------------------7 q; l4 a$ T" R8 ], I; T1 \1 F
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% R* E( |7 I R1 y: T% r
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& y6 Y9 O* F! `( A# U& r! t4 {/ C紧靠其上添加:9 C, H3 O( y. U9 d% }$ a
if( pWndBase == &m_wndMenu )
; F# C: F/ W0 F' ~% P0 V{
' M, R( C# u+ \9 [# \" H. s switch( nID )
6 Z' @+ w6 V. [3 m {4 f, T5 d9 [3 G, W' B
case 2:
* j6 H, }1 `( s {
* k) F: E; {% M3 Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
2 }+ w- Z# `2 N3 [# ?8 Y7 m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Q+ z1 M) t; A8 s' |
{" c& f5 O& K* {6 w" l, c7 ~
break;
% D3 a3 N) R: R5 r9 o! b. n6 m }, y" a2 R8 e! Y) c
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" {, Z9 {% b* G, F" ~* V' d+ }
{
C4 H6 F% F2 w7 v" O, q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% r1 q7 P) X6 g2 x* U
if( !pItemElem )% V6 c: ^& }* |, A- {+ `% A2 X
continue;% Y; S& V& W: F" [& f, Z
if(pItemElem->GetExtra() > 0)4 Q* v) ~" {5 p9 k9 b- x* o( U+ z2 p
continue;- d; Y" w( H$ d. ]
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% M @6 ~. k, p1 b! m1 U9 [ continue;
# \3 {8 r, P. h k' ~0 t% J* X3 d- s if( g_pPlayer->IsUsing( pItemElem ) )* ~+ _; v5 F- L9 {% i1 t
continue;
2 M0 \- |6 C/ O if( pItemElem->IsUndestructable() == TRUE )
- e) h' @7 i3 d- H4 F9 j0 c8 R& a {2 X% L/ b* Q) E" K! t* G$ i# e4 \
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 q- z) X! V: o* T- R# n! i
continue;
2 Z4 e( w1 J0 H3 S1 J }3 s! R3 [- r* y4 T8 P" _; m
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
% ?; c7 {. T( R }
$ d3 {5 h+ q$ {( d8 X- W break;
2 _) c8 E0 L1 v8 v7 n$ b# i. q( m }( `. g! i4 `8 l
case 1:' l. A8 Y0 B* h, y1 y( m
{
0 \8 g- X, [) ~ //整理背包5 H8 S, x+ m I* J* S$ V
//////////////////////////////////////////////////////////////////////////
1 d9 s! _4 @+ U t/ o- C# v+ Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
0 G9 k* j* n1 G% \ //////////////////////////////////////////////////////////////////////////( w+ r- e n& K
//////////////////////////////////////////////////////////////////////////( d- S& e% e. s" F
CInventorySort* pInvSort = new CInventorySort;' ^4 H: M; B1 J. G: n' n
vector <sItem> vItem;$ Q9 {* G' q6 M
vItem.resize(MAX_INVENTORY);//初始化大小1 B4 |, I4 ?- d- R
//////////////////////////////////////////////////////////////////////////& t& @# _2 X" k9 r
//填充数据, C2 H4 c" A. ^* f8 }
for (int i=0;i<MAX_INVENTORY;i++)! g- h4 k, z. C+ V
{/ ]% L, y1 t5 W# z+ t+ m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, V: i& `- R3 J' G if (!pItemElem)
, ]3 ^7 I& C1 N {. s. ]6 L( O5 i" C# @. b
vItem.dwKind2 = 0xffffffff;
; d, R9 L9 r0 u0 c& W' v* R vItem.dwItemId = 0xffffffff;% e8 j2 b7 M7 m; J7 o
vItem.nIndex = i;
8 q2 I T. W7 E/ g& @9 x8 j }else {8 b/ F+ t. z: V
ItemProp* pProp = pItemElem->GetProp();
- I$ @, A. ~* y- | vItem.dwKind2 = pProp->dwItemKind2;) d4 G- ~! o; Y+ C# u) |
vItem.dwItemId = pItemElem->m_dwItemId;
+ F" P5 _ e$ c3 U+ l vItem.nIndex = i;
( C* c3 T( H1 _; j! B }
2 P& R' @6 `/ c; R4 T5 p9 N; v5 j //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
S9 x& h1 {- ^ }
: j7 F, d7 }& ?9 \1 b: H //////////////////////////////////////////////////////////////////////////
4 T3 f) `+ {# v, q, o9 o% h% Q sort(vItem.begin(),vItem.end());//排序
; k$ E7 I) a! @6 x1 k7 l1 D$ W //////////////////////////////////////////////////////////////////////////- `4 U9 T: ^& q
//交换% Y% H5 y# y/ ]( O
for (size_t i=0;i<vItem.size();i++)
6 H8 y4 u. r4 j5 K0 }6 |& }# [- B {
: F$ }. X. f$ ~+ ^0 |) { //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; H2 \1 w+ z+ ^! H6 e4 G
pInvSort->Add(vItem.nIndex);* E) ~ U+ u' d2 `2 ]
}( x6 C8 ]5 s2 x, B( ^! [
BYTE nDestPos = 0;
1 r! z: _8 `( ]+ u, ?$ I/ ~9 u, x for (int i=0;i<MAX_INVENTORY;i++)# Z0 w3 _/ w7 W( T
{2 M6 a& L7 y" D. g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 k8 P7 o: c8 y+ N& t9 P1 | if (pItemElem)
6 V* @+ x& {9 J/ ?$ R2 } {
3 _5 g+ o! l" w if (IsUsingItem(pItemElem))! Y1 B! R# e" x
{
% Q' l/ _1 m6 ~5 ^! @0 a //这个位置无法放
$ p* c8 U# |' d5 T" ?& L nDestPos++;
" i0 R$ Q3 w" W6 y }$ n- G+ Y+ o! ~+ ?, N
}. w: z( u$ U0 k4 T4 Z1 J
BYTE nSrc = pInvSort->GetItemSrc(i);
' ~: g/ u! V( P% ^" p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 u3 q4 ?% U: s% I3 R4 ^2 ]) A. H- c
if (pItemElem), i- u" c* H" Y9 l9 f, z( P
{
! `; ?* Y; F6 \$ O$ Y if (IsUsingItem(pItemElem))
/ E6 {% F5 h' u2 }3 ^9 a& j {
7 ^! l$ W% K+ C) V7 d //这个道具无法移动,跳过" o$ Q3 n* K7 H& R J( t
continue;6 M: w7 }/ g. F' `# H+ W
}* `9 ]) S" I8 N, j" ~0 y& a# W
}else{
: E" ?- o8 Y! k/ q% t* a //空位置 不用动
, z0 D) X5 C6 \- ] continue;
& X0 f7 i" z, l8 P }# M& H' J; d; {6 C
//////////////////////////////////////////////////////////////////////////
+ l0 `, j, j# t //开始移动
" W' Z v- u( R/ A- S. @" Y if (nSrc == nDestPos)
- {$ f! r6 l( @5 s {5 b& o2 I2 A$ v+ t! [( C
//原地不动; v4 U/ W ^" W9 X8 k
nDestPos++;
: e9 y5 y7 a+ f/ s continue;
- C2 L% O9 \' y7 y. H. B; a5 U }( G0 ?+ N" x C7 X
pInvSort->MoveItem(i,nDestPos);
8 T* f* q& w6 [) x. [6 c g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 O8 i/ e# S6 E- z6 ~
Sleep(5);7 T- ^# i4 u3 h5 n. G# j
//Error("移动 - %d->%d",nSrc,nDestPos);" A# j4 z" l/ ]0 a% V7 O- h# E! y* t
nDestPos++;% K" v4 r& Z) o
}" m+ j- }# {' y6 S! X4 _ h
//取第一个元素的信息* s, O. i; f9 z; Q. i" }
/*
) p# w7 s; c7 ^0 F8 q$ G if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* f2 S/ v% T2 d# y& b: [ {
0 v* N- T9 M+ y% |5 n Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! S# C4 p0 F4 B" D+ w; t
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- D! ^4 }: O5 g& |: e* p
}* m- t" T/ {1 A" W1 e O, b
*// b9 ?- H" M" J; |
//////////////////////////////////////////////////////////////////////////
9 Q f! z" ^ K/ h4 G! \4 n3 q% O( Q break;" \% `$ c1 C n" S+ M
}
7 _+ |5 n, L# e: p3 `% C) y } ! D/ [" g/ U+ A
}7 J% Y) p' s" e, O2 J& k
m_wndMenu.SetVisible(FALSE);$ x8 p: \/ N. ~; N: [
6 \, Y5 A# \1 }6 Z3 A3 t
--------------------------------------------------------------------------------------------------------" W) T2 }7 Z1 g/ d a
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" T0 r8 f. Z3 S; d% J
{3 ^ Q% _; g4 o* l/ g9 M6 ^
BaseMouseCursor();+ z! l, [: l2 t$ Q5 T" t
}* |5 N d S/ o$ E. N2 i/ V
在其下添加:7 O$ g- E2 j- I' I* k
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ t2 n, i5 a! C9 y/ S{) a- U8 h1 B5 m. [
m_wndMenu.DeleteAllMenu(); g* B) D q+ p% d5 R6 w
m_wndMenu.CreateMenu(this);
6 ^- A# t3 A' X7 z( }. u& @4 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% {" ?6 z7 T% k6 l4 H9 i" V! j. z1 h
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 P: W# a% r9 C0 a0 x{$ B4 H, O( O' Z2 R2 H) {: \- c& c
//P以上级别才可以删除所有道具( D0 K! Z; J3 _! ^/ e8 X+ n
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");8 Y5 F0 v8 l! a' w. d
}
% s6 J: G6 K- ~( e# d& v6 sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( H6 t0 b4 l. U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 I& ]4 S( {+ m8 A7 L
m_wndMenu.SetFocus();
# F: D/ d% k' a( W}+ p+ [* q8 i1 q7 v
------------------------------------------------------------------------------------------------------------" v5 P, x2 @9 L
*************************; O; I& P V* g$ E/ ~
WndField.h文件
" j; E* D( p n4 k6 K*************************5 @- v- I4 i1 |4 Y& k4 R
搜索:BOOL m_bReport;
) i" O- H5 p7 O" Y其后添加:6 }8 B% T8 O I3 K2 _" ?: c, N$ `: L
CWndMenu m_wndMenu;
, r% q- U/ n& E' ]搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);* f' | C, h3 J" q2 b; Z
其后添加:
% h* W7 J ?8 |# M: [9 g+ Q# }virtual void OnRButtonUp(UINT nFlags, CPoint point);- a1 V0 |' H J) |) F. o d
# p5 x6 ~5 m: U8 H
6 n/ ~3 r5 V& ~2 i( {" }; f |
|