|
|
源文件中_Interface文件夹下WndField.cpp文件8 l& P) `& {/ H. p& r
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); U" \ l! h$ l9 m& o! l
( R2 F, `4 x( H3 a$ Y R
struct sItem0 w$ G0 N) A" @7 E
{8 d' P, F8 v4 E$ ~
DWORD dwId;
4 I) J) t4 N) [8 m- uDWORD dwKind2;' O: X& ?7 |- F6 ~0 F# D$ ^# Q
DWORD dwItemId;
2 I/ h) M3 Z; qBYTE nIndex;
3 T9 _8 l+ K0 W/ n; XsItem(){
5 ~6 [, Z* f; O dwId = dwKind2 = dwItemId = nIndex = 0;
6 _: M- g1 V F# S}
+ c1 {' J3 q. n, n' vbool operator < (const sItem p2)
0 P; b0 E% C4 P6 c7 [{
- ~" U" U1 G' V+ B B( Y! ~ if (dwKind2 == p2.dwKind2)
2 s6 E! r! c- h# u5 B/ T3 u( M3 G {
& P0 D" W, Z# O return dwItemId < p2.dwItemId;
" L/ g$ s: I% l0 e5 v4 e }else{
8 l+ s, u% p$ m/ ~' q# Q return dwKind2 < p2.dwKind2;
3 U- d: j5 s4 e$ ` }0 e+ C; L# I" M) a$ b {' f2 ^
}
% r; T. Z, }! X) U3 {0 v! H2 b};, S/ g( F3 k' M/ l* {' s$ q
class CInventorySort& n) J7 j$ ^$ b' ~+ t; X
{
5 i7 x7 B4 m! q$ spublic:: [, Z/ j/ t2 X: V' W: R! x9 R
CInventorySort()+ T7 F( G9 y. J% X' ?/ l3 D
{
. i9 S2 F+ r4 F' d7 | m_dwPos = 0;6 x, v) t/ x* c; k3 [8 K& j0 G7 f" S
} l/ I5 x3 {, f, B# m z: h
~CInventorySort(){}8 }3 C: a4 I, d! q' b# V
private:- {# A+ V. b" n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 W4 g J2 X3 I& X+ [( `3 N
DWORD m_dwPos;
) L2 h4 k4 O o# u; o8 u ~public:
+ m# ~" W: d8 D- L3 ivoid Add(BYTE nIndex)
( K. u# _% |/ V; r F3 l{
6 C5 d) {% ?% n( C; b2 A if (m_dwPos >= MAX_INVENTORY)
( ?2 D _ }; Z: @* g) J {
( H8 t: j" i1 S3 v. z* k; q return;
i1 {+ a# b6 n# t) ` }
0 M: [" C5 i( z$ W* w& c- ]9 F3 ] m_Item[m_dwPos].nIndex = nIndex;0 o4 k+ V6 R: y* Y& H
m_Item[m_dwPos].dwId = m_dwPos;
8 X/ Y) _: O, `' r m_dwPos++;
; M9 V/ S! J. a/ O+ s& m}
; p8 o/ I# d$ J7 O- o4 BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 Q- d5 z$ l5 E* b0 z2 M
{
+ }* }2 ]% ?! w, } for (int i=0;i<MAX_INVENTORY;i++)
. e3 g+ i# N# p9 d& Z2 n {
5 V) k; F. ?, a2 m5 ^' t if (m_Item.dwId == dwId)
. y. H9 q) F7 U( K; A { N# D+ @$ X% A4 i4 p' T
return m_Item.nIndex;
2 ^8 K+ R: D9 V+ Y5 q7 @1 y }0 \9 V2 P8 C) z- M) Y" t1 I" U
}+ ]: Y: D- Y6 v
return 255;8 ?, G4 w6 |. M. ^' h) P- p0 K
}0 S9 w+ j# v5 P) j) F5 |% |
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, N1 n( _$ m( w5 M' K8 A{
: b. T( F7 l7 e4 U0 g; | BYTE nTmp = 0;
) g6 J7 @, [/ B0 P3 d& Z bool bDest = false,bSrc = false;
$ i3 T5 I# i4 @" v; Y# X for (int i=0;i<MAX_INVENTORY;i++)
. L) c0 k2 b3 c. l) l- o1 n {
. F% ?. X. C$ d* Y7 i* ` if (dwSrcId == m_Item.dwId)
/ \& n' _3 W4 J$ a1 z1 i {. p! V+ w& w# W" N
//id相等 则 改变对应的dest和src
4 I; |5 k1 M- T5 N8 o6 N3 U! D3 F: k nTmp = m_Item.nIndex;8 L, I, v- ?# R2 A
m_Item.nIndex = dest;/ ?3 N+ \. U# \/ J% }
}8 L/ L5 E- E: Z2 G- B9 w
}/ W. y7 M+ Q1 I
//临时数据保存完毕,交换开始
) f4 p5 W# a, ^, q% k1 @( r for (int i=0;i<MAX_INVENTORY;i++)! m3 z; ^( N5 D8 _; V3 ]
{% [- U' c7 ~: E& I" z$ `! R7 r. ^
if (dest == m_Item.nIndex)
" u' E6 Q F' {* [/ c {0 m; O7 X# U; k- d
//id相等 则 改变对应的dest和src
$ M' r* M; K: ]+ }: ~0 { m_Item.nIndex = nTmp;4 a8 F8 ?: @' b
}
0 q/ A# b6 m& ~) `9 w/ y }) L8 i7 a: }& f9 L! ~
}2 O5 ~# |/ ^! O( A. \
};
- B4 H/ C1 ~( L6 v7 f! X5 S0 [-------------------------------------------------------------------------4 r# w5 Y1 E" D& a1 {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 `% J. t$ f3 h0 ~搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& d$ S3 t8 i2 x! U: v紧靠其上添加:
1 q0 d7 L3 k0 F. U$ @if( pWndBase == &m_wndMenu )3 |0 D- D0 f* f P/ t
{# K6 D+ ^8 m( Q2 \8 C# @ `* ^ H
switch( nID )
) z: m9 ~, X- t; V. B4 x {9 u q5 M! i/ I+ W# v
case 2:
" l. q) O" ~4 f# _9 N1 g+ A1 _ {
6 ]" m1 ?! Z7 A //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. R/ ^0 ^+ p$ Y5 j0 E' j2 k4 \0 R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 h* i" U. H5 I. |/ Z {
5 j' S! A# X0 K break;
/ ~- ^! K- s: d1 c" m }
; y7 v: V" F6 ^6 ]7 h for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)1 |$ d- v) W% S
{( I2 a7 |" V: F1 M M3 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. w% h1 Y2 {4 u5 a$ @0 K* e
if( !pItemElem )
! D9 O0 ~; W: s* Y) I$ L0 C8 k+ b continue;9 j. Q2 p/ H0 `$ Q- g
if(pItemElem->GetExtra() > 0)8 E, C8 L* B6 o6 b+ z, O
continue;2 L6 f# v: L& \) O
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
( `" Z! p3 `: {0 p8 a9 P6 P2 r continue;
7 h/ L& x- z8 G. f7 C' f) o& \ if( g_pPlayer->IsUsing( pItemElem ) )
3 G( M+ y. L, w& n" L& U7 ^ continue;
1 b; H U9 q. H$ j' d+ u" P if( pItemElem->IsUndestructable() == TRUE )# p3 v; n7 M0 [( K0 _9 s% \4 P* o: q
{
4 o) {9 |# ~: L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ g. _; W5 j6 Q3 W7 ^: T: J
continue;) s: q$ m, d) O; a* K E
}" a3 h! K3 [$ h/ @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( E5 A/ F1 d, Q* d$ B }3 n; q3 p: q8 M! d1 y7 _' }
break;
( F4 c) }% h! n# E$ D- J* |9 N }) y0 {4 y/ h9 F9 o% d% d+ U2 H
case 1:% n' |- i, n5 ]! H2 N5 v
{
. n5 g' d& S, K0 _( [$ T5 h //整理背包
5 `# ~$ `* {8 K2 F3 Q: v4 o //////////////////////////////////////////////////////////////////////////, o9 G+ C X! j7 x
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 g9 S$ Q+ b8 L //////////////////////////////////////////////////////////////////////////
6 P; R4 }2 e. [) {! |) ~# ` //////////////////////////////////////////////////////////////////////////
+ ?* Y- H2 q: i- } CInventorySort* pInvSort = new CInventorySort;
/ `. C$ U. L w& r" r( M K" H) I) [ vector <sItem> vItem;
9 u" T _1 v4 H# H# _6 Y4 c vItem.resize(MAX_INVENTORY);//初始化大小
) v+ m! y: K, g! ~8 C; N //////////////////////////////////////////////////////////////////////////3 A6 I/ B5 u0 i
//填充数据
% P6 s" i- M3 ?2 j for (int i=0;i<MAX_INVENTORY;i++)
% N* }4 `$ {# K! v- S' ]# v6 I* @ {
: Y$ E x& l# g2 k8 s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% |0 c7 W+ x2 w1 R
if (!pItemElem)
: |# s9 H1 k7 z& f( c" _8 P8 o {4 C" M4 a. |8 ^$ o0 S( B* I
vItem.dwKind2 = 0xffffffff;
5 ?( M+ G. M" ` vItem.dwItemId = 0xffffffff;
5 u+ Y( `1 h7 u vItem.nIndex = i;
3 g4 L" |/ y8 r6 x# }% X }else {' W# Q1 u1 y4 d# N& p* T
ItemProp* pProp = pItemElem->GetProp();/ s" n+ Y+ t$ C6 Z( g( r
vItem.dwKind2 = pProp->dwItemKind2;
* P$ [" c8 @) m4 A6 ^8 g0 ` vItem.dwItemId = pItemElem->m_dwItemId;/ N" V( G- M) d8 M2 ]/ P
vItem.nIndex = i;/ y' | H) @& t$ l( ]- R" [7 l
}
' a& w6 d Y2 k. f5 s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- N2 [3 a% b0 H, O. k+ j2 ` x
}9 W- Q0 P% T6 k% u
//////////////////////////////////////////////////////////////////////////
7 m S u {: o0 R sort(vItem.begin(),vItem.end());//排序# M3 Y& ]" ~; m9 X b
//////////////////////////////////////////////////////////////////////////& Y8 T! }- `7 T+ ]. t8 W7 {
//交换- Y$ j0 y/ h& k; v( y6 s& j! A/ e0 d
for (size_t i=0;i<vItem.size();i++)
6 s1 G: i- E7 R- Z# d9 F z {2 O) `% Y% O3 @: l1 J1 v
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. s3 H- j% J3 D; V+ k5 @2 H pInvSort->Add(vItem.nIndex);2 i- z6 O+ H- ^, L
}
0 F1 C9 M- ~: @( T BYTE nDestPos = 0;
/ R$ N, I1 ?- f+ j4 G# Z) h for (int i=0;i<MAX_INVENTORY;i++)) x y3 V. O2 U/ I
{# ?: f6 M: b; ]/ k% f( s" J! T- P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# o/ K4 c. K& ^, t if (pItemElem)( x, C4 w6 _' t" p: U
{
3 i! [* d8 Z3 i0 _5 S& r if (IsUsingItem(pItemElem))
4 O' h! ]/ N U" a8 }9 ^* V; W {
5 y4 s9 d$ P% {# r2 J. I6 t //这个位置无法放; i# C' _( k* y
nDestPos++;
. g% X$ P& k+ }+ u% {. a }5 s3 K" s$ U; v" q7 Z; Q: _2 o
}4 D- `# ^$ z+ @/ V0 r. c- I
BYTE nSrc = pInvSort->GetItemSrc(i);
( [# Z) W: a n$ Q pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ _3 ?; I/ T1 L0 @5 t5 M }7 E if (pItemElem)
+ C3 @- z* i# v7 ]# H" C# o: T {& V7 m5 w+ m2 \( i
if (IsUsingItem(pItemElem))
; q. x4 B) c3 b: e {
6 n7 q. d; |8 t& j0 |0 l2 ? //这个道具无法移动,跳过
. \! s$ q' | O3 f+ P continue;$ w, N: O7 I# l$ f- x( c) U* y9 Y3 b4 R
}: @/ s: I! }8 n$ l% g% f$ K6 k
}else{
j. e6 N4 }" A1 v! c5 J- ~8 W; j //空位置 不用动
( ~/ O2 M' P- M1 y% v; U9 G: q* q continue;
2 `% e9 k' q3 Y* U7 u. ?- m$ n }$ j9 j/ o6 [- v+ J
////////////////////////////////////////////////////////////////////////// Y5 H/ f$ [" M' i! x- }0 D; a
//开始移动. \- W6 V" ^/ l% y: A n3 Z
if (nSrc == nDestPos)
. O6 U. \1 M; J/ M5 s4 b {
9 i2 _, A% L1 ^( G8 e" s7 V6 k //原地不动
: v/ Z" s7 y) i. @5 C* O nDestPos++;2 w: j9 H! B3 I9 O
continue;( X& y/ Q# F' o: ^8 @/ u
}
' @2 w& K5 g' X$ V pInvSort->MoveItem(i,nDestPos);
4 \( B& ?0 U' d2 l5 O g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 j: A0 l% w9 Z5 T6 l0 Q% r Sleep(5);
% O7 `1 l% n Y0 D# Z //Error("移动 - %d->%d",nSrc,nDestPos);. \2 C' W6 {* |
nDestPos++;
( z0 O7 f) u9 h$ X1 n% Z2 _# X* j }3 E% Y: c& z/ {; F3 l9 \
//取第一个元素的信息6 ]# w6 @5 P: l# l0 m4 \: c: R
/*. u7 O u8 A/ J7 c% C' l% ^ \8 Q# Y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& H6 o: m' d' }- R% M& m7 d& d {
- l; ~1 \ I% r5 ^ w8 t5 H) w' R Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* \# r7 Q0 ]1 {5 x2 A! @ e
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' @- `# N3 I) L6 G7 \) ~$ I }
& C- H$ X. u' {$ Z5 E* ~ */
5 X2 {4 @ h" |; G //////////////////////////////////////////////////////////////////////////
8 B$ B- c$ }3 g! t5 }2 s5 l break;( R4 P4 ~4 `& \7 K" Z5 M' U6 e
}4 x1 W# l' y) e' f8 G
} . B+ v4 q* `4 |! ]- N0 z; M2 c# l
}
& G0 t F; c+ }) [/ I& zm_wndMenu.SetVisible(FALSE);: M# f" G1 A, d$ _5 g' [
7 Q7 c# R9 Y+ e" a( Y
--------------------------------------------------------------------------------------------------------, P+ }' t' \7 j( t: q7 `5 q4 z; V! z
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 R7 Y* I& A2 b% @# i{
% K, t5 V$ B) g% S) M6 q$ IBaseMouseCursor();) S8 X( ^8 L# ^4 B+ \
}$ N( H2 | r0 h8 h, D+ j- J
在其下添加:/ A% C+ f8 E/ g* n2 F" R
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% p6 t3 Y* P% ^2 l) k3 G! ?5 l& J: O{* c' @7 G9 E4 F4 Q+ Q$ D/ U
m_wndMenu.DeleteAllMenu();" V$ ]- m- p& Z, l: B
m_wndMenu.CreateMenu(this);' i1 ~/ G7 t& J0 s) E1 m7 d ^$ f9 \
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");: q6 E' |# m/ ]: M9 D4 k" x
) {# ]$ w( f6 u( d, Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- V( |7 R$ ^! W! |9 }{
% Q0 n+ T( ^2 I2 ] //P以上级别才可以删除所有道具! }9 j! j( u$ [8 b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 C6 w6 D1 T+ S; z2 N}
& v Z h# @6 b# ~# d$ ?9 gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ C4 I9 t! I5 U1 y5 N3 ^$ {m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" n1 s3 b' c( X$ n- _
m_wndMenu.SetFocus();
1 x2 K" R P f m8 p% g}
+ r2 e9 ]& O3 {( M------------------------------------------------------------------------------------------------------------% h% ?% c) @5 a: X
************************** z' {+ R" F+ K9 J% B9 i) V
WndField.h文件
; C/ c6 a3 s" t$ g! n- ^6 l% N1 O*************************( u$ Z' k; n( o9 A+ r7 O
搜索:BOOL m_bReport;
. A9 A& b/ Y. N6 e其后添加:9 P6 s: J$ e- @- h: _% B
CWndMenu m_wndMenu;) S7 a; t3 T% g. c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. }- _1 J4 c/ e) t" u
其后添加:
' ^/ p4 Q. R, B7 i, ]virtual void OnRButtonUp(UINT nFlags, CPoint point);5 S+ B* K8 |5 `; G& v! y
' J) Y$ @. @/ s, R
' M6 z+ k, [9 |+ h* C( z' h; E( P
|
|