|
|
源文件中_Interface文件夹下WndField.cpp文件/ a6 O8 \4 _* c3 U4 ~. A {
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 U$ J: V9 ?% ?
" y6 q; L8 W9 s$ K' q: i, Astruct sItem4 B$ L. t( |0 B
{
/ G6 e/ C9 E, l" vDWORD dwId;
{: s1 d$ j rDWORD dwKind2;! D; Y* G0 Z, Y; w
DWORD dwItemId;6 h* c. |9 g( z: r4 G
BYTE nIndex;0 [# \2 U J( M. u) R/ r
sItem(){. z* G5 M- _, g/ u
dwId = dwKind2 = dwItemId = nIndex = 0;
) G( L! W6 R3 N: U7 V}: v. _; i0 V9 B' O
bool operator < (const sItem p2)% \ h7 a7 [! ^* O* ^/ _
{
5 V! N% ?/ O K& s if (dwKind2 == p2.dwKind2)
* N0 H6 }3 |+ U {9 y/ f' _1 S' W& G. Z4 n
return dwItemId < p2.dwItemId;8 ]1 T$ T9 Q' }* O% q
}else{
6 i* J- e6 @& k8 ^$ E3 A# M9 \ return dwKind2 < p2.dwKind2;
" v' }" H. T, h j$ u* J }% Q3 J- v8 j# a9 q
}- `# H2 I# o# G8 j3 x% ]
};. N' B9 N) `3 B( z& {! v4 r* [
class CInventorySort
$ U, P& G/ P* i4 ~{
3 ^4 A4 Z( u6 G: u. Upublic:
- M# r5 J0 y* m8 V8 zCInventorySort()
: p/ G3 l+ ?; j2 I; Z{
7 L9 ]7 P- t9 Z- J4 \; k m_dwPos = 0;1 |/ X' m: n' u6 W, \+ ~
}& n. Z6 w& {9 u2 h( G
~CInventorySort(){}
# o2 P, @" E! o6 k+ b0 H( U2 Mprivate:
3 h/ a7 R: P, IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! G' g- y' E2 WDWORD m_dwPos;
V5 {: B U/ m. Gpublic:
+ J% l! F" n+ U& _; Mvoid Add(BYTE nIndex)7 R& C/ I+ E$ W! u- F
{
6 @& ^3 b- \3 _1 Y3 Q8 ]9 x if (m_dwPos >= MAX_INVENTORY)" Y, Q, v, N" b- ]+ M' e9 ?1 V
{; C# O8 Q- Z+ r
return;( x; b S, g$ T9 J; X: Y* v
}. p8 Y4 J0 R1 X7 u8 Q4 ~, `2 s
m_Item[m_dwPos].nIndex = nIndex;" j( w2 U( |7 z" r4 |3 W- h
m_Item[m_dwPos].dwId = m_dwPos;
! W1 h, Q, G: ]8 a4 E4 i3 \, w8 d m_dwPos++;
. K% t; ]. h6 m m ^+ l}; S/ }+ v, t. F" p* f# r; o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* j% a% h* E& H{! J% q- [# r/ w L" j
for (int i=0;i<MAX_INVENTORY;i++). t: Z" q# u. b1 N l7 U
{
5 ]# T( L$ P3 E9 W9 v if (m_Item.dwId == dwId)1 w7 S& u9 O7 u( ~7 J( c
{
# u7 A9 K4 J2 x return m_Item.nIndex;" K& w3 d- J/ {
}4 j7 @# ~+ _$ X j: F: w% Q
}
5 E# R0 E- I+ e return 255;+ t1 E) ] C. I7 V d2 d
}6 p" ^3 ` h) K" `: b+ C3 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 g" A% y0 V% K( R8 ^5 ?6 D. b
{
H0 s |! O3 B! F BYTE nTmp = 0;
, ~# e" j q5 ?' `0 L( G. d& ~" Y8 Y9 h bool bDest = false,bSrc = false;# }5 Q1 c8 Z( K6 T3 j5 {
for (int i=0;i<MAX_INVENTORY;i++)* L4 b7 Z# p( k5 K
{0 R* A5 z( w3 ^
if (dwSrcId == m_Item.dwId)
; _/ X6 z0 a0 P. A0 w$ w {# L( k& M* h3 \1 H1 u9 s6 ~: ?3 H# H
//id相等 则 改变对应的dest和src
' u& G8 q* \9 w- X& G nTmp = m_Item.nIndex;
" `- U* w' e+ x* w& b m_Item.nIndex = dest;3 r/ a- v' p( g. T$ M9 R. l* O
}
3 ]9 P; X4 {1 {$ z+ H/ ?7 ]2 | }
# ]( [/ l+ l, O" c: `2 O- H) I1 _ //临时数据保存完毕,交换开始/ ~: X2 [8 ?1 i( x3 `
for (int i=0;i<MAX_INVENTORY;i++)4 @- w/ R" R) e1 c E% H
{- Y# r2 t! G; F3 C5 O; ~
if (dest == m_Item.nIndex)' D, ?9 r9 e2 ]* b+ x0 f. n% |
{
6 w k& c' J6 E2 i- ^+ ? //id相等 则 改变对应的dest和src1 H; S- _0 O8 y/ L" T- w
m_Item.nIndex = nTmp;
% T. `+ o& h0 |/ v2 m5 y: W5 n }
$ Z& q9 g5 l# c; w4 y( W2 Q }
5 [5 O$ R2 D6 d5 E/ z2 z6 O% u* @}
) ~* s- r( p0 E/ R5 z$ y};) r4 n8 v2 B Q7 z, u+ I, O
-------------------------------------------------------------------------: W8 X, `9 ^/ l8 `" E+ I$ O2 o
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 B7 `. o% w. u- n) X& T搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! e" b, F1 @' X
紧靠其上添加:& l/ ^/ X, c9 Y( e
if( pWndBase == &m_wndMenu )
2 ` e ^* U( T; a5 @5 e" T{% n$ w5 p" E; g6 D
switch( nID )
6 E1 m, u; @" N- u7 i: N {( U! f& I l; L3 F
case 2:
, u6 P' L" T5 Y {1 s0 A$ g) |9 Q& r2 D' ~4 r( c
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* N2 Q& G) f. l9 T3 j0 S! }6 ~
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) Y6 [( `! r% [3 Y# T9 \4 e3 m' ~
{
& T) N* c5 z5 |) s break;( {6 W" _$ N+ X( z) v1 i
}
# A ~% {" Y, B for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ N0 t& N9 U8 X- _- D
{
9 a# j5 v3 x; p1 n9 t& K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 t8 X7 C G6 [/ O% \
if( !pItemElem )' b. e8 K3 P; [, N/ R8 p# q) }
continue;* m! {2 d0 E( U3 `& P
if(pItemElem->GetExtra() > 0); j: p5 ?7 g7 K2 I- H4 A& C
continue;
2 _0 d1 `7 \, I! w( m0 ? if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & s7 g/ C# k! A' y, _5 w6 L
continue;6 L. e6 F. P1 c( X
if( g_pPlayer->IsUsing( pItemElem ) )
. J, V; X2 s q8 J/ c% b# m$ `/ O continue;. v1 j# }6 A* O+ n* i) P4 }- t0 D+ R
if( pItemElem->IsUndestructable() == TRUE )) ]) m3 @, l3 @1 y1 w2 `
{
8 X! P4 X$ Y9 f* u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
3 V- h. K! U7 \' Y; l4 a continue;# M6 D$ v* y, n% V2 }; m
} @) j$ h2 A( ], I. N/ Q
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' ^4 ]$ H4 m9 J/ M }, l1 e, D7 n+ _5 r" ^6 P
break;3 R* F+ B" v/ F$ A5 S# `
}4 g W6 @: G7 n% {$ n
case 1:
% A& _+ M3 ]% [/ A6 J1 F {7 m+ [7 g s) d- q) f& I. Z
//整理背包
+ O# K+ ]& s# N) v //////////////////////////////////////////////////////////////////////////
( o+ `" i ~/ p //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( ?/ \8 c9 J* p ~& w6 W0 \ //////////////////////////////////////////////////////////////////////////
6 J5 ]3 a3 }5 @' _7 Y //////////////////////////////////////////////////////////////////////////* D X! Z7 U9 R1 D
CInventorySort* pInvSort = new CInventorySort;
( t2 F3 |8 m" `$ G& g7 A# b% e vector <sItem> vItem;
4 d4 `3 X' [' c1 |9 b4 ?) x vItem.resize(MAX_INVENTORY);//初始化大小
* |5 a- G! A$ o) J9 E //////////////////////////////////////////////////////////////////////////; h: Z4 W; n6 N: r, G" p; Y5 m
//填充数据' [9 f4 ]& b" [
for (int i=0;i<MAX_INVENTORY;i++)* S/ r3 Q. b) k
{
" f' O5 t- \* l8 f/ p0 F; W' D CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 [% X7 P1 j. ^0 f
if (!pItemElem)
4 E# v2 n2 Y5 G! |& @/ N {
6 ?2 y% O6 i, F `( g3 z vItem.dwKind2 = 0xffffffff;
+ p7 W+ G5 v+ A vItem.dwItemId = 0xffffffff;
6 U, S! g0 b; | vItem.nIndex = i;
; u3 H% v! `4 e- n& g5 ? }else {
2 }/ r8 Q R. d4 T1 T% H- {5 _3 z7 r' T ItemProp* pProp = pItemElem->GetProp();0 y' Z0 J& p) y' j$ u( K8 c
vItem.dwKind2 = pProp->dwItemKind2;( H* a2 q" {/ R" J0 `) v: T$ a/ y
vItem.dwItemId = pItemElem->m_dwItemId;
1 e7 W* o; S3 K- u5 g vItem.nIndex = i;' d$ [9 Y. G! g7 A+ x" Y7 S
}) e& C2 G5 y/ Z. \9 b, F
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) v k% y. m3 B" [ }
. W3 I, O" } n" ?# v7 s //////////////////////////////////////////////////////////////////////////
+ M' j, @1 l6 j8 m sort(vItem.begin(),vItem.end());//排序
% V' H* G0 R4 \) I* e+ x1 D //////////////////////////////////////////////////////////////////////////% [4 O8 `) _) q8 y" d0 h2 A z! y
//交换
6 J# l" O$ q' Y) p) A for (size_t i=0;i<vItem.size();i++)! z6 e7 Y7 B% t4 g( R
{
4 q; _, z' R& K) {6 I3 s, i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ x2 s4 {/ o1 t
pInvSort->Add(vItem.nIndex);, i+ {& b7 e( s( @. R
}0 g3 u+ j5 X" S& v+ l" `# F
BYTE nDestPos = 0;
]3 t h1 n2 R: f) f0 a4 g. a for (int i=0;i<MAX_INVENTORY;i++)& H" z, s" w i& \3 Z
{
G' b9 N& ~; J8 F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);2 @" l) y0 i0 K8 u
if (pItemElem)
3 D. n3 H5 b- J$ k! f( |4 O {! `/ {2 O+ F! ` Z1 S& j ]! j+ |
if (IsUsingItem(pItemElem))
9 h: k* \( ?$ ?1 T y, q4 q: P {: l, V$ P" X7 {$ {
//这个位置无法放
) l' B0 v/ { A nDestPos++;( Q& m- o( G' E9 h# f: j
}4 a$ }8 I% K( f
}
) Z- Q! r; `" b' d; h' B: z, ] BYTE nSrc = pInvSort->GetItemSrc(i);
, U# ~4 \3 ?1 t' ^& l; Z& W$ y5 u pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
4 l8 q2 Y. H$ z, ]( z6 C if (pItemElem)" j: L& e& g! w( o1 Z. u
{, y0 F/ h( Z/ B3 x
if (IsUsingItem(pItemElem))
$ B9 x& @( d# d f1 e5 m {3 h1 u7 E( \5 c; P6 Q% F: b
//这个道具无法移动,跳过. ~/ U5 d3 g/ h
continue;& K% |2 {+ S" ?6 s
}, V0 n( H- {/ t$ A4 @2 J
}else{
9 d, r2 [" Y& P* ]# k8 P1 g //空位置 不用动" `/ U+ q& C2 U# K5 d
continue;* C% H! B6 y/ T9 F; I6 a ?
}2 n* g$ [) G9 K5 V2 w( l
//////////////////////////////////////////////////////////////////////////
* }4 A$ d) A/ E2 g' k //开始移动
6 \ ?' i' S' |* C* ~0 r if (nSrc == nDestPos)! Z* z" v! J G7 H3 U
{7 e u# `6 a6 Z! V& \# L
//原地不动$ a/ T) l% ^% ], A& h" _
nDestPos++;* K0 Q/ A9 g- _; w. g5 e
continue;4 q3 x. t) M5 T
}
. h6 i5 A' B% j3 Y6 W/ g: E( v pInvSort->MoveItem(i,nDestPos);
}' m }' V' @0 Y7 D g_DPlay.SendMoveItem(0,nSrc,nDestPos);& U6 Q1 d2 s4 v# J6 U
Sleep(5);# _5 S4 k6 }$ S' N* V! d; _- g
//Error("移动 - %d->%d",nSrc,nDestPos);
: F$ d( f. g( X! | nDestPos++;6 e$ B6 O( m" q8 K1 H1 F9 S
}/ y3 S" ?, } N9 R- T" t8 s
//取第一个元素的信息: J% K6 Q S" j+ s) Q
/*
8 X1 p/ H# w( { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 p+ E4 j* c$ D8 b0 Q
{
+ \% C. v- _; b& } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: j% N! r, d# O" R% b/ h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% Q9 o& n z6 c" t4 K& B& {( B( T }& }! M v$ W! x/ a
*/
0 {2 T! D1 {4 z3 H7 c; ` K //////////////////////////////////////////////////////////////////////////
4 J4 C5 |2 [" ~1 t) N break;, P7 S! d1 T* S2 {: Z
}
0 u6 j( k- F, B# z- D+ s } 0 N, T! }9 R: S- z7 i8 P1 ~
}
: S! y+ w+ |# Dm_wndMenu.SetVisible(FALSE);- _" {" _6 O) J3 l* x
; j$ H% x- R& k4 b& e* l--------------------------------------------------------------------------------------------------------7 P, ?4 i" h+ G, j: e4 e! K
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# X: L. F6 g1 T
{- S3 h( v& g& M# P8 R. j% ]9 C4 ~! X# E
BaseMouseCursor();
* G4 t+ |0 O: `: C1 K5 n& I4 y}
" x: h0 E* x r. V: |2 i在其下添加:; W* ^% s; d$ x
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 }- s: z- b/ K$ e$ o
{6 y2 V* S5 J9 A; G! J, g# m& ?
m_wndMenu.DeleteAllMenu();
8 t$ C4 U5 u# q8 B4 p) R8 Sm_wndMenu.CreateMenu(this);
% K, ~' }& _7 p0 T xm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
) E6 a A$ m7 t5 @4 I7 f( |$ r: Z9 ?6 X5 e5 D7 ^# e
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ {1 b }6 F7 u
{) R2 u4 i5 x7 h/ K E% k
//P以上级别才可以删除所有道具3 S, @) W) ]4 O3 [) B
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");3 s$ g$ o* t* Z! m: k7 `7 r2 u
}
3 U& E( Y5 f/ O2 m" {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ v9 }6 `+ s4 y' P! Om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: U! P- m$ S2 |, c( W
m_wndMenu.SetFocus();
9 c: \7 M) \ @! {/ n3 j0 X}
l# A. s4 \% U6 B( i------------------------------------------------------------------------------------------------------------
4 ~& H$ M# @# E! e$ w* z) x*************************
- \/ o$ C8 d; D3 TWndField.h文件
6 L! m' s5 O. e*************************
0 ]' I* }& v# j6 o8 u* L4 n搜索:BOOL m_bReport;2 z# s [& D: s( E3 j% p
其后添加:
* y( v: i2 k) a( O) J8 [1 X+ u4 d; sCWndMenu m_wndMenu;
3 C; R) P5 J# o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; O4 R" V1 u7 G1 J
其后添加:
2 [. ]3 }9 t. f) tvirtual void OnRButtonUp(UINT nFlags, CPoint point);# p- t* p. N; {7 C" j+ {7 S" F
7 e* w4 A# A5 P6 V
* e" m3 K4 h6 f6 E |
|