|
|
源文件中_Interface文件夹下WndField.cpp文件
# `9 K" w& I; \3 `) ?搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 i: E' y2 A! \! |) ~
: H; n9 C7 ], A+ v, W7 D" @struct sItem
* O' n5 q5 E$ P4 e! z3 |! _{8 g P4 Q* p2 ~
DWORD dwId;5 u! [! G1 \$ Y' s1 U) Q1 ^; T9 k
DWORD dwKind2;
7 f! N2 K# X1 m: }& ]4 g, a% V2 |( IDWORD dwItemId;
0 _. a; s2 t4 v. A! h0 yBYTE nIndex;
, A7 d! E" z. B' {sItem(){
; b1 c# t- d' @5 t. @- ]+ Y, X1 o0 E dwId = dwKind2 = dwItemId = nIndex = 0;
: @6 m* c& i* k* K1 y8 K}
. A) S3 x+ h, L0 W- l$ h8 y% Ebool operator < (const sItem p2)
6 `+ @; W& u. r9 j8 O, K{! Y8 m% R, y& e/ y( y
if (dwKind2 == p2.dwKind2)' Z+ \+ [+ `9 u5 P/ U- f3 h, t
{
; N) r3 j6 l4 D8 r. J- A& q# } return dwItemId < p2.dwItemId;6 r- C$ O+ \9 _
}else{: p7 }& {- d7 O2 y/ s
return dwKind2 < p2.dwKind2;2 ^) i; n" ^+ i
}% U# x- N7 o* n, b" b4 _) d
}
0 f5 N: a) ~, D, C2 E+ ], c! v};6 ?2 N$ [9 r9 L6 @
class CInventorySort
4 y$ }/ E* ~1 \) n1 l{
8 G! c- J& S' {$ r7 v3 I4 Cpublic:# O2 U$ ?8 i9 X" i) [5 a
CInventorySort(). |; k: l+ X p V
{
# ?5 r+ N( G8 N* |2 X& D m_dwPos = 0;
/ K. S; C+ E9 R" X}0 l$ B+ ], Y. r0 q5 S4 A8 W
~CInventorySort(){}3 \' K- V3 K# T) \" @% S
private:- k: B7 G6 S5 ^
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 g6 g" U4 X+ ~5 yDWORD m_dwPos;2 s2 s/ i$ ?) e9 p
public: ~% m# f% r0 `2 j0 x
void Add(BYTE nIndex)% j; J# {9 b$ I: W0 a; p5 A
{9 a% O2 F6 i8 r8 R6 P. k5 {
if (m_dwPos >= MAX_INVENTORY)
- S, u7 y8 B1 c! m+ F {
, }$ o2 o* c! ~& ^' {% q: z) | return;
; J g% \- _4 y$ \ M# f8 s7 k }, I% e7 v9 D9 u# f
m_Item[m_dwPos].nIndex = nIndex;5 q. f1 n" ?& ~1 x) n
m_Item[m_dwPos].dwId = m_dwPos;% }% Q# m, n" y5 N5 @
m_dwPos++;
% ~/ v" e3 D9 M5 J( M9 I# o7 R" O7 h* R}
0 G9 N/ L/ H! Y" q7 kBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
; x- O% c, _, d2 ]8 F{+ P- H' H. w1 K7 e0 o
for (int i=0;i<MAX_INVENTORY;i++)
- }9 ~8 r3 u) F6 S/ B- O {0 r6 [( q; \$ {9 B B
if (m_Item.dwId == dwId); G; m: S; |4 a% ?, e1 s1 N( m
{
6 k0 S3 s9 A T7 s& I+ r1 W7 i return m_Item.nIndex;/ {; n" a' i5 k8 ]1 E: i
}
6 _+ H/ t/ [& @) q }
% V1 u; q9 `( `( C+ P return 255;
* j/ S1 W2 a6 ?+ g) ~- g}8 Z( \2 H' J3 A0 [
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
. O6 `( z+ z4 G" j; Z% |" _1 D6 Z4 X' Y{
% x9 }: l9 w3 G/ h BYTE nTmp = 0;
# ^& [2 S7 K5 h( b% b$ d) b7 B( Y bool bDest = false,bSrc = false;
8 ?* S! E% m, M& Z4 n. w5 t for (int i=0;i<MAX_INVENTORY;i++)1 r1 y7 f4 c% q4 f
{
5 {/ Z5 b9 o; @1 j if (dwSrcId == m_Item.dwId)
) _. i9 q7 r' r: N1 g5 R" Y {
5 |7 o( J" u" e- h //id相等 则 改变对应的dest和src
- f. W) B' q0 A+ G; H7 K* N& a nTmp = m_Item.nIndex;
) ^* B. i0 f5 D m_Item.nIndex = dest;8 N5 ^ n: u4 i1 G: _! a# }
}$ {; W% r4 R* b+ p
}4 L6 n4 c2 ` w* ~8 K3 `! w$ k# g
//临时数据保存完毕,交换开始
' c, K. [0 d3 f for (int i=0;i<MAX_INVENTORY;i++), \3 T+ }3 J \+ R. I' g7 C4 U. ]
{
F% S% q: l' o# v9 } if (dest == m_Item.nIndex)& x& s' f4 O% A8 _: p. @
{% @, G: r u% \) ~: |& \
//id相等 则 改变对应的dest和src3 U+ \, G+ r2 m G" n' n
m_Item.nIndex = nTmp;
! u8 f% ~, D1 m+ y- x }
$ Q) Y; U# p: R$ }% g7 V }6 H) h& F& H& C
}
4 i( z8 C F) q; }% O1 g {6 y1 C+ X};5 f6 B2 Q+ j# P. a0 \
-------------------------------------------------------------------------" ^& V' i9 C! i( t$ |7 G8 x- a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 N. \4 f9 m3 L9 {+ ^2 O# ~6 o搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ i3 V9 j) Y( E, [2 n紧靠其上添加:' a- Y% |# V* k$ V7 { t
if( pWndBase == &m_wndMenu )
) w/ p( d9 [4 H/ o{
$ k6 I( W; J# k6 H. f% Y switch( nID )- i+ J: C5 `2 e; E
{# u/ s' H6 S+ l! b; ]& j2 w
case 2:
Q' D# k8 @& Q( R* F- x0 t* K3 W {
, `/ n- J! d' V: |0 ?; M+ C0 d //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 v4 [2 p+ v0 F+ u: J
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, I1 ] x$ B7 v$ i {
6 A! m* a/ j, x. d4 ?2 X break;
5 C& P! ?9 P( r }; r6 [7 |9 m9 l- {
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# c# @$ {& ], P5 M. D0 O
{0 v4 \" _& m$ ~( H. ~3 L. Q( q6 V) y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 i# A5 B' e( d6 ]7 \) I
if( !pItemElem )$ b4 G& X4 A; Y3 h% j
continue;
9 g3 Y/ q2 q! `% T if(pItemElem->GetExtra() > 0)
2 O: n" ^: E: P& I( w, s& c9 N continue;
2 ~& J: G5 |# y8 A: O! |3 H, u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 ?3 n$ p+ J1 B% | continue;
S P" A7 t2 I2 g. V9 _ if( g_pPlayer->IsUsing( pItemElem ) )
, K; X) @- j3 b continue;
/ L9 j2 A. A+ x5 g if( pItemElem->IsUndestructable() == TRUE ) X8 h+ v* G$ x) I D& f
{
* C8 O+ R& R" W' X$ N" { g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) d' o# k) D2 c) Z
continue;! P8 w* J" D- ^3 Y2 `
}
/ V# h- ~! r/ d# k, h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);* @# D+ k8 j) p+ c
}0 ]3 Q1 k2 G) b4 E
break;; l& w' `$ {/ Y6 N" W0 x
}
& m, H) Z5 W! x9 Z& }' l% ? K case 1:- M7 M5 a! K' s" x! x. ^2 G
{
% J: E/ r+ U9 f6 s3 l) ~ //整理背包
) Q! c X9 m3 ~3 Q //////////////////////////////////////////////////////////////////////////( @' u- ?8 j8 a
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- E9 v- f0 n5 o, I/ j& C9 K //////////////////////////////////////////////////////////////////////////$ n$ Q2 ~9 H& l. G; D1 W
//////////////////////////////////////////////////////////////////////////7 {7 d" I- L) F; c- K* n& @# u
CInventorySort* pInvSort = new CInventorySort;
, a/ ]& u! T' G8 G vector <sItem> vItem;
8 Y( @. ^7 m5 [/ H# z* W vItem.resize(MAX_INVENTORY);//初始化大小
8 s" b- h/ c L' x //////////////////////////////////////////////////////////////////////////
7 R ]: ~1 i; X- W4 l; O4 B //填充数据
8 N! _5 e& `, [& y W2 i for (int i=0;i<MAX_INVENTORY;i++)# @2 H5 j% ^8 v% f
{
! w: U# D$ \0 I c: D- ~+ c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" _& e+ F6 e% v+ V( Y' a- z/ u, u( P if (!pItemElem)- Q4 s6 ]/ [/ ^6 h, r
{5 A# K9 P- N) j, c9 _* h
vItem.dwKind2 = 0xffffffff;1 Y$ n/ m4 D5 d# X
vItem.dwItemId = 0xffffffff;! x- j- }2 ]" d1 p9 W0 A
vItem.nIndex = i;3 g" \8 g0 O: B5 M l
}else {
, Q2 i6 W9 ]+ U8 d, p ItemProp* pProp = pItemElem->GetProp();
% d. O$ ~) @% b' j vItem.dwKind2 = pProp->dwItemKind2;8 b9 W8 |1 L+ J+ G) V' }
vItem.dwItemId = pItemElem->m_dwItemId;
B7 \" }. t$ O( Z3 K9 K vItem.nIndex = i;
; Z' ]7 P# t, a, C7 B" Z& e' c; ^ }! K' } c7 }% F5 i8 w: X
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 l- W$ G( f, x# \" {# V
}
/ v( N% E9 S1 C# d! G# } //////////////////////////////////////////////////////////////////////////
8 W. b! N5 {% o6 h sort(vItem.begin(),vItem.end());//排序
3 O1 t- d# ^& m' [* ]0 G" \ //////////////////////////////////////////////////////////////////////////
% `; V: ]# W. U" |, O& M9 L //交换' ~4 p' }7 Z6 r4 D6 n6 `! ~
for (size_t i=0;i<vItem.size();i++)
9 f- M- Z# F2 \8 k/ m {/ s; w& @; `2 k
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 U, u$ N: r( C7 q% k
pInvSort->Add(vItem.nIndex);% p# D. O( W$ i8 w- Y4 Z5 ^: ^
}2 t p! A1 `, M% ?, ~' _
BYTE nDestPos = 0;
5 J- [1 ^( I) K3 ?9 G for (int i=0;i<MAX_INVENTORY;i++)
+ P0 t) e9 Y) L. \" O2 o {4 x j: O. S4 c/ |* m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& q; D4 v/ Q: @5 ` if (pItemElem) z0 I1 a" I; T! G6 ~3 f9 k! E
{
# O' u9 p/ I0 y7 e+ _# T: m o8 ] if (IsUsingItem(pItemElem))
( h |) p4 O: v& {6 G$ {# R2 p {1 y/ W" r, t8 e8 Z1 r7 R& H
//这个位置无法放+ r% C: Z$ w; m4 s/ I. {
nDestPos++;" \% Y; D& `5 o" J
}
+ b1 G' m9 P1 a/ E }8 R5 @, v( l8 @7 [' p
BYTE nSrc = pInvSort->GetItemSrc(i);
; A# u# {) a' z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' ^+ N2 U- A& Q6 n9 _' [6 g, q if (pItemElem), L2 E: t- V% T# v4 A
{; M1 S0 P: G0 G& g
if (IsUsingItem(pItemElem))
. S3 M2 ]/ s. _/ b {
5 o/ M$ m/ J7 z //这个道具无法移动,跳过
+ M4 a! ~# I/ X& H* L continue;
+ i( F% O3 n0 c; V" q5 V) I9 G }: V) J; ?& Z8 k% v
}else{
4 M. _5 m2 J- V" s //空位置 不用动" d# L1 o+ Q& j8 m* I
continue;% q% f; T- ]# B# q
}6 o3 r0 ]+ Q+ ~
//////////////////////////////////////////////////////////////////////////
* I, y! c C: e; v8 m5 E" k //开始移动
: B |# }& ?( D3 A6 M N: L8 o if (nSrc == nDestPos)
, f; F6 }. L/ k. o7 l8 O# w {
0 t: _: Q' J& X; v //原地不动# J: V# @, Y4 n2 R9 E, x
nDestPos++;
/ b3 j3 R! t- h continue;3 t! x& v; ^, Q0 b' b- K5 \" o$ L
}" J4 O3 y4 t/ D1 d
pInvSort->MoveItem(i,nDestPos);
/ v+ N4 `3 V" k# h+ H g_DPlay.SendMoveItem(0,nSrc,nDestPos);
' }8 Q K1 A( C Sleep(5);% T9 [6 L# ^/ w/ `! R0 Z7 F, S4 E2 d
//Error("移动 - %d->%d",nSrc,nDestPos);
' C- i j& [2 g' T" d nDestPos++;
' h+ v$ E! H T" }+ ^ }: V; Z9 X; [7 l# L
//取第一个元素的信息& j: l- Z+ X# T$ X/ i6 `: K
/*- ]7 b! y1 e# M* B
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 ], a( C$ c. a- N3 f8 L* |7 P' ^8 d+ K9 ?
{) C* p: k5 o$ B9 f) j
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ ~( j; ~+ v: U+ f- w, s7 h& h
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 b, b5 @' v3 U: b* ^# ~0 b' A6 U
}: v, X2 ?" ~$ [( Q$ ]
*/9 H# p- a: J2 A+ m* d+ ?' l% U
//////////////////////////////////////////////////////////////////////////
+ v- Y+ z X6 v; \! o8 P break;/ \; R7 C" u" B/ w) ^8 P* q/ s: t0 ~
}
( x K, M' [( v) A1 M }
0 D+ Q, b g+ S x! y. ~# r) i- I& P}
( i, {0 S' {, {9 O1 J- {m_wndMenu.SetVisible(FALSE);" j: H5 d7 p& Z. e5 R) I- f
- R' l. b4 p q8 U--------------------------------------------------------------------------------------------------------
D3 t( Y# j1 A9 z3 H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# v' `6 m2 L$ y: d{! w l. v: a5 x# `% H( @" c
BaseMouseCursor();
: v5 A9 U8 Z7 o& q}
+ E- u S5 {6 g在其下添加:% Q" l, T4 h3 P: n
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 `+ j8 a* y4 v/ e7 R! z{1 `2 T3 l5 g; T( B
m_wndMenu.DeleteAllMenu();* u6 V" n& P+ p( n2 v; |5 @: U
m_wndMenu.CreateMenu(this);
' C. E) k; b, k# Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 p! a' W1 Q- k
" j8 S/ k: L/ q3 wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ U1 u& [5 Y# L% J* H2 Q
{
' e# T2 o' R7 [$ \ //P以上级别才可以删除所有道具
! U3 x' s% L; e; G/ k( D m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- E2 b: y9 z2 s5 n}4 b' l7 q, b5 h3 ]+ W0 p9 H
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! p' u: M9 v; E3 L2 _8 }- v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. E0 B+ l' o3 ~! J6 C# Z7 K d
m_wndMenu.SetFocus();; @" S/ q* B3 V2 d6 n
}
, W P. Z" Q- T! Z5 \. T! m( `6 L+ A------------------------------------------------------------------------------------------------------------
/ r x2 H- h: ^; j6 {*************************
+ _* h, m4 t2 OWndField.h文件% s) ]% M6 X. J8 z
************************* Q% F; f- M: Y# @
搜索:BOOL m_bReport;
{5 u" M5 u/ n其后添加:
7 s0 O6 N3 J, J% XCWndMenu m_wndMenu;
& a, j' g3 F# v1 C5 k& Z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
' q# a8 r' L' J; a- k0 m3 h其后添加:
7 n# ^! o6 H/ H, W- [0 Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);& q! g0 w6 Q( o' C
9 ?% I: j. W$ @, J( W$ X X: O5 V$ w! t& ?% E- a$ t6 z
|
|