|
源文件中_Interface文件夹下WndField.cpp文件
0 l4 |! _& ?+ {0 \4 ?搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" y, t0 @7 w6 I4 S! {- J
* b+ N- T$ K) K; w
struct sItem
& g5 |2 I$ j# G$ R [0 [6 {{" f+ [5 k/ \/ t6 X# t, t, z- ?! q# }
DWORD dwId;2 O. K: F% G/ K- g- Z
DWORD dwKind2;
) d: _2 k# [5 ]( L+ m1 I, dDWORD dwItemId;8 Z3 f: A2 W1 E& w, T
BYTE nIndex;
6 v( X' W+ o+ K+ }5 L3 t. g: RsItem(){9 S, ~7 v) w) o$ }0 _- a
dwId = dwKind2 = dwItemId = nIndex = 0;
6 o, k0 r5 k; F: x/ @* f3 _! v}
. L. a9 Y, _) M- \bool operator < (const sItem p2)
1 d) J: {5 X8 h+ D5 K{
2 u. B" ? H. ~- Z9 V5 D4 p2 I if (dwKind2 == p2.dwKind2)
& W7 w2 _ w j+ x2 Q {
- i% c! g% y/ R3 t2 p2 L- @5 k return dwItemId < p2.dwItemId;( {% t1 h* C( I) x
}else{
1 [+ G# ?2 _5 L' ^; L return dwKind2 < p2.dwKind2;
6 L& t9 P) z( u7 Q& {* K }0 s" Z" e& L4 s3 s
}) j0 \$ P" k- Y6 @
};
4 W6 n; X' `$ D9 \* K1 W" Z S7 e3 Fclass CInventorySort
4 r* r9 T; X9 g; y" C1 n{1 ~0 W1 q. F. e, ~; p' [3 w
public:( Q' ?3 X# X0 ? t7 t
CInventorySort()
2 F8 }: a6 \2 i% }* [1 M' X{
6 @( ]$ M% S5 o8 C5 T" W m_dwPos = 0;% k4 |, C. }% E3 Z
}& ]$ l4 Q8 b! m+ g9 X* N
~CInventorySort(){}
" Z/ M. G2 {* Zprivate:+ R Z @2 a7 U# s/ R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# f& l- H9 x! X8 u& ~ c
DWORD m_dwPos;
) u5 h0 I& y2 cpublic:& `7 z5 z0 e* s! t' [2 x+ Q
void Add(BYTE nIndex)0 |6 @/ r; v# y" v: n7 v
{
8 U, H6 Z/ K8 K: Y) c, e if (m_dwPos >= MAX_INVENTORY)
4 w. ~# E" {# q! D! u: S {; f7 g8 V# G) G& o
return;$ p2 a- m2 a, @4 {) v! c
}4 v# M1 x+ P$ i2 B3 c G& |1 R% D5 z
m_Item[m_dwPos].nIndex = nIndex;0 P2 E% A5 Q6 {3 t
m_Item[m_dwPos].dwId = m_dwPos;
# S' j( j& E& n9 n m_dwPos++;
8 V( k" f# U8 I2 r5 k}# V9 L8 @2 ^$ q- u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ S1 _& F; ~/ ^{
/ ?3 u5 \( n2 {3 _3 W) v for (int i=0;i<MAX_INVENTORY;i++)
' B. P/ K4 G0 n8 [; ^# U/ c4 Y5 D {: [9 { c1 t' C! D$ v k
if (m_Item.dwId == dwId)5 |& ~; I, x1 f* `2 x B7 V* u
{/ M' H9 K# ~2 Z3 N ^& U
return m_Item.nIndex;
5 O0 e: g' o7 @7 K1 i }
0 F& R) ?, m! Y- A }$ t. o: W+ Z% t+ M$ C, W
return 255;
+ p9 a) K" E0 Z& f}
# \- y+ z, q6 tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' h% I( F- u& }3 C7 U P9 v
{5 J9 \! N ]4 m x1 f1 o7 ]# _/ K
BYTE nTmp = 0;/ J! O0 W" g F i+ A, n, p) q
bool bDest = false,bSrc = false;" |8 l* \, z" ]# X
for (int i=0;i<MAX_INVENTORY;i++)) @0 s$ N8 C @% s6 g$ b
{; x2 O( C5 K2 _1 t+ E
if (dwSrcId == m_Item.dwId)- G& k% v7 v, F" G7 m
{
5 |9 n7 Q3 C4 O: y //id相等 则 改变对应的dest和src
* u& o% x7 w* d2 @* \1 b3 W nTmp = m_Item.nIndex;7 P4 j! ~: Y1 M0 C4 j
m_Item.nIndex = dest;
1 |) a* Z) m, A0 A' j! ]* v" l }# `: g) _# L, D
}
( m. g( {% x) g# A, g+ p$ z //临时数据保存完毕,交换开始$ I' e6 Z. ~) c( p, Y* G
for (int i=0;i<MAX_INVENTORY;i++)
# @8 U/ o- }) L {
6 q) j4 L; l# c if (dest == m_Item.nIndex)
1 G5 w8 |* b5 i5 \ {
6 c, Y' l/ t+ M9 O //id相等 则 改变对应的dest和src& e6 N1 J# v6 O& D* R3 q
m_Item.nIndex = nTmp;* x H9 i6 J% y$ [4 |8 O( c+ N: r
}: `) p. i9 j, |. c/ D
}
& u1 L. ^/ u' [( a/ f! \}
# p+ Y' }' d( W" K1 s# M};5 a: i, |) i) N2 ~/ Z% G& x3 ]
-------------------------------------------------------------------------
* t: {1 r2 Y+ h( }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. d+ F4 b: g9 V( c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! E: s7 t* s: I0 G$ y: A1 |
紧靠其上添加: `4 _" h$ O" U1 r& N6 K4 e6 H
if( pWndBase == &m_wndMenu )
5 s, J: J) g* [{' t5 D) U& Y, _. Q/ i% M' _
switch( nID )
+ ~0 V0 h5 B& ]+ E( U {
4 L8 v* L1 Q D3 C. M case 2:" R- D4 t! g- ]0 d0 [
{
; l2 O" i2 }) x- v" o //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- v. j/ K# Q8 f; Q9 E/ v if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H( k O3 i! q& u* S
{# g- i: E/ j# ?- Q% y: g
break;* N; z! Z# V% d! R& N5 L7 v
}7 u7 T" a0 L( }& Y* s
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 E L! x f0 f9 u& `6 } {# u5 {7 M5 W. g& u$ w0 a0 `- t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 t5 n" q7 |" U1 t5 G+ Z if( !pItemElem )
) a7 Q" U) T2 f/ d1 U3 X+ ^8 @& M9 J continue;
6 c6 E. p' n+ H& S, I if(pItemElem->GetExtra() > 0)
( d+ ~; @, n1 x( ^ continue;
0 Q2 x8 ]" @9 f: o: b; y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. l8 ]- c$ f2 d9 w continue;
5 l, T3 S* q2 i if( g_pPlayer->IsUsing( pItemElem ) )
/ n0 L3 f) x# B- E3 h; b continue;+ q: E, x' M; s- F, }1 D( E
if( pItemElem->IsUndestructable() == TRUE )/ q$ M' G3 \! q
{
, o3 i4 |4 S& J- c0 F7 W& D4 N3 A g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& d3 T4 Y+ p2 x
continue;( g9 t" i9 Q+ A9 N( d: b
}
1 i/ {' v2 C- q5 [/ H5 v* G g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& G1 v( [! B# P: u" T4 G' v9 c+ t
}4 m; p @3 D! i7 }/ G3 x+ {
break;7 U1 B. v7 {, U
}( L* p) i* Y) a) }
case 1:
' i2 G3 d! I) j8 `1 A A% S {
: Z; t* Z7 k4 m; f' s //整理背包. j' s1 f% X1 }- z
//////////////////////////////////////////////////////////////////////////
( U. `) P3 h0 R" @8 f( G9 D //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# D) O4 w s3 Z# o, q //////////////////////////////////////////////////////////////////////////
- p9 C: D3 h0 `. b //////////////////////////////////////////////////////////////////////////# P* p- U$ f. q' o* [
CInventorySort* pInvSort = new CInventorySort;( q! Y* K `3 [, D6 P1 ~
vector <sItem> vItem;
/ ~4 y5 p4 n1 }; U vItem.resize(MAX_INVENTORY);//初始化大小1 Q- y" @* f) f
//////////////////////////////////////////////////////////////////////////1 _- t* `" D; Q/ Z1 k, Z
//填充数据
3 ^+ d5 u& \* g" F for (int i=0;i<MAX_INVENTORY;i++)
% j2 @- E/ m$ U- n$ Q7 ^/ A {9 E3 z( n, m# x0 }. R T5 i
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! R- R O1 v( ~, L& ` if (!pItemElem)
% T9 X( D1 }) F {
% Q( o& y6 ` w! w- \0 ~; ` vItem.dwKind2 = 0xffffffff;1 G+ X% Y% W) v( d
vItem.dwItemId = 0xffffffff;
4 z5 U8 Z9 L, [ `! ?/ Q* z vItem.nIndex = i;, L4 _3 e& K1 E+ I: f0 ~/ h% R
}else {: ~3 F5 L2 r, |4 x) E
ItemProp* pProp = pItemElem->GetProp();# y+ Z Z5 ]& v
vItem.dwKind2 = pProp->dwItemKind2;; q4 t6 u9 Z9 o1 z
vItem.dwItemId = pItemElem->m_dwItemId;
8 g1 P0 m9 D: G/ z5 w vItem.nIndex = i;8 P# H3 Z L6 b0 x
}
/ @% }& Q; h6 R6 N //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 |. Z4 m( ]: f; A g
}/ A; y& S1 ?& T' b
//////////////////////////////////////////////////////////////////////////
& r0 ?, M7 a$ L* }+ h+ ^+ b, ^ sort(vItem.begin(),vItem.end());//排序
8 i% C" @! ~7 w% S; i //////////////////////////////////////////////////////////////////////////
0 ~) t' |( l6 g6 F //交换
|7 ^7 _1 B n/ o for (size_t i=0;i<vItem.size();i++)
5 X5 h. N& _+ v {
' p3 z1 r1 e7 E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 H- a/ }" _/ x9 u2 B, N# z pInvSort->Add(vItem.nIndex); U- K& D3 N) a0 F0 {1 S8 _
}4 I. f. }8 u) \. |3 a
BYTE nDestPos = 0;0 e, ]: v( W u
for (int i=0;i<MAX_INVENTORY;i++)
. x1 b% a( y3 K: h' Q( z {+ t, N) q& z6 n: p" Z Z8 |6 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- S9 G" e+ e. _ if (pItemElem)3 W( q; b. z( z O7 a
{
0 I! q" s( e+ P. E0 g if (IsUsingItem(pItemElem))# k( d' i6 V9 H9 J- F
{) w7 I9 f) I6 I' O/ c
//这个位置无法放7 z' Y j/ {2 F( N
nDestPos++;# h: H4 ^) m3 N6 U( V
}5 F- G0 q# k& n- s9 u [
}4 I- {$ m! Q& t# f
BYTE nSrc = pInvSort->GetItemSrc(i);; s+ z8 `+ Y( T' P0 p
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% |( p3 L2 b# v/ n: x) [ if (pItemElem)
; x8 e& L% S* ^) s$ ~' S {4 Z0 h+ U8 a7 F: Q5 c5 x
if (IsUsingItem(pItemElem))0 k9 \; F5 |* k. e4 X: Y: {2 b% m. R
{, V, x/ O( q* d- Y6 ~4 k
//这个道具无法移动,跳过2 i. S! Z+ }% j. R0 V% N, i
continue;
' U- `* ^3 s- {* l; z* R }
& Z) O) X F/ T0 k. y0 b N2 N, l }else{
9 L! L' {2 C' _ _4 R //空位置 不用动' _( Z# k1 J3 G/ l" j
continue;
3 }: g3 R4 Y/ X4 Z9 X& i) R }- [. x5 x. v' f j
//////////////////////////////////////////////////////////////////////////5 i) C5 M# f5 H; \
//开始移动
2 y p% g9 ]* z; y5 k: H+ h S F if (nSrc == nDestPos)
8 x: w# c' @& y( c$ N5 Z {* a% g& _" J& u4 C2 D
//原地不动
5 s/ k; v8 ` f$ X8 s nDestPos++;
# E' z) U3 S, [, x% d5 v continue;
% V5 a8 ^# [4 }# o, ^ }
" w. ]( Y, g% H0 Q pInvSort->MoveItem(i,nDestPos);& o2 }0 N+ j* P5 v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 j0 [" U, C# }" g" T, W* ?
Sleep(5);- S# H5 ]; {& M" K, G+ P0 A& W
//Error("移动 - %d->%d",nSrc,nDestPos);
r: B, c+ c1 Z9 H( ~ D$ G: @ nDestPos++;
: Z& h x3 P: m* ^, L }
% D: `7 u7 e: R: j0 w. r //取第一个元素的信息
7 z7 t( k8 O1 k4 R+ w$ y /*
6 _: @4 B" q$ b3 S5 s if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' t7 l, C- N( \2 t4 w {
+ c+ W l0 S0 h! _$ g6 a2 c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: i1 c; S& H* d; x* V- \. b g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ n! t% V; y3 @6 t$ m
}& u4 _+ t+ _7 l/ j1 X4 T
*/
9 S1 A6 p9 ]9 t' J2 \; N7 B' f( G- g //////////////////////////////////////////////////////////////////////////* R# n2 v- x2 p8 e Q* N
break;: M6 t+ f1 S' l% H* d; r3 w
}' W0 e* G; m4 S4 g9 W0 t
}
& ~7 J8 z1 y" @5 R' l}5 W1 |4 s; Z0 L$ z
m_wndMenu.SetVisible(FALSE);
5 u/ Z/ a7 H4 y7 u
+ p. r( P5 _/ J5 _2 y--------------------------------------------------------------------------------------------------------
5 {) W% w0 K0 M* K8 E% V- l+ q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& p$ `! l# D8 G: z
{
/ e2 M/ b% |4 N3 t0 X9 K6 iBaseMouseCursor();- ~$ _) K/ x8 ]% }, X' {; V0 F
}
* g4 R. n+ X$ B) L0 ]$ n在其下添加:) k. m4 N. E2 f2 j# m" `4 B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 h/ e" K- \$ N) g- _6 {" b{
3 W* L% i' ^, Em_wndMenu.DeleteAllMenu();0 S! F4 j+ L: C( b0 A. ?4 ?* `
m_wndMenu.CreateMenu(this);2 f3 Y3 t8 T% A1 c, k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 q) O9 T! m4 r6 O* M* J. a) P" G' g3 z ?! S4 d7 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 R0 p7 K7 J8 q8 i5 V2 J( X# z
{
+ ^/ j) o9 N( H8 f) b9 t0 O1 J //P以上级别才可以删除所有道具
( M+ o, v( j6 P$ o. ?0 I m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 I" C6 n3 E1 x- J" n* s}% j v5 A* S1 B+ c% M" @# ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: i5 L- {/ l# I, I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: Z3 v/ a1 F+ x4 l* h# Cm_wndMenu.SetFocus();4 G/ v' N6 a4 _/ e6 N" T. u
}3 n! [; a2 h3 t3 [
------------------------------------------------------------------------------------------------------------
5 e+ ~' C7 s8 P1 R1 H" f5 K/ t1 ^*************************6 Y3 j) z% J! k }, V
WndField.h文件
7 |; r5 d+ C3 V" l+ ?& Y6 [*************************! x9 I3 E6 ^. T7 L* e2 T' n3 S! n
搜索:BOOL m_bReport;" I* m: {/ ]* L: S0 f' q) D# z# {
其后添加:1 z6 L! p' ?! v W1 s% \+ O* Q
CWndMenu m_wndMenu;0 q. _" ]2 E W4 s6 h, b- Q! H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ j( O' b1 u, S2 l7 {# K2 y/ T- ]
其后添加:
1 e# ^+ O- T& x+ { d2 F% \1 avirtual void OnRButtonUp(UINT nFlags, CPoint point);" A$ J' n, }0 v7 G7 J
, Y% Z5 J5 _4 B- }- T' Z$ r4 }# C7 {( k# ?! m
|
|