|
|
源文件中_Interface文件夹下WndField.cpp文件
/ X8 L6 {6 t$ t9 I' ^$ `& \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ @- {" R, `) H, {4 H
/ S5 i- C1 y7 K! Fstruct sItem' Q# k P9 k8 Q) D+ r5 w. U
{
9 Q6 @) v3 X( e) i$ `6 z6 VDWORD dwId;1 S* d( T2 g- d4 n3 N
DWORD dwKind2;- b2 Y3 ^2 {! i/ @' a8 w
DWORD dwItemId;! k' G: i" A& k3 M
BYTE nIndex;8 n3 ~; v! b+ q! j. k
sItem(){7 f6 h7 i: L# l( E+ \1 v9 }) m
dwId = dwKind2 = dwItemId = nIndex = 0;
# `& c( g8 x. @: C}4 s1 b% n, ^# }4 y# e/ |; i* P$ o
bool operator < (const sItem p2)
4 i6 R' ?9 m& X' J/ R0 y5 ~* q{# w( _2 q: V9 U5 H0 p& Z0 \
if (dwKind2 == p2.dwKind2): ~/ C; d. P4 e9 n
{4 L' y u& U" n/ d
return dwItemId < p2.dwItemId;
5 a% c6 [4 F( m% O% Y. |; [ }else{. M* [; }* J+ w4 l
return dwKind2 < p2.dwKind2;
( y) ^5 v$ q% b* a" h9 E }8 X* Q. ?, F' u2 P* j
}
- k/ C" g. W6 b8 E$ v* v. y* R, Q* i};
' @$ X- |' T( N' W* ~class CInventorySort
- s. S* W0 w! ?4 V8 G4 v" m{
3 ], x5 I( w E7 F, Q, Dpublic:# g+ y/ @0 g" U; P+ [& r
CInventorySort()
# u# t- Y& N% t0 l2 L{/ T% y, d3 o) v9 B3 P" {4 e; w8 @2 t
m_dwPos = 0;
p% {+ I# j! e E! i7 L}
8 i# z8 {/ z( t5 e0 |6 X# ?~CInventorySort(){}4 V a7 _/ V; O% X0 u1 I
private:
4 i( Z% d6 n4 y6 ksItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 |; v9 h [9 h9 T* _5 b
DWORD m_dwPos;
+ q- `% a% x- ppublic:. u5 ?( u- T0 W+ g- A) C5 p
void Add(BYTE nIndex)( d# i2 {7 w l5 e: \2 B
{
4 `. d. `6 S4 B* _ if (m_dwPos >= MAX_INVENTORY)
4 |+ o! P& l- f" {4 }- S' n3 ?7 o {
) B6 o! w% N q- ^7 N9 ` return;
8 t+ F' x# ^- J7 _+ V. u' M; g }
4 X& H1 Z* O {! K m_Item[m_dwPos].nIndex = nIndex;2 T( P$ C% i% [7 q0 K
m_Item[m_dwPos].dwId = m_dwPos;
, H. w. f3 G* Q) Q" \ m_dwPos++;
: M: i8 h; |* [( O i: H% b}# u4 I9 ~7 P; R) |6 O8 I; N; E
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ u4 C, Z% F. m- G! d' {1 k; r
{
6 o2 F U1 J V$ L8 x; @ for (int i=0;i<MAX_INVENTORY;i++)
8 L0 O+ i# Z2 ^; r/ E# d$ P8 o {7 W9 a. M' m/ v" W
if (m_Item.dwId == dwId)) A, R# |2 R+ {- O. K9 X
{+ P; O! g( G5 ?8 l
return m_Item.nIndex;" j$ A! S% n+ G) q
}
1 |/ d% S4 W5 }7 W; i4 _ i" K }
$ ]* I5 ~8 d* @+ `# J/ T! j return 255;
; ?7 }/ ]$ N1 X3 T3 x, e, n ]9 O}
4 s( ~9 }8 n8 L( Z7 e3 }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" B5 n, W. G! P) v6 G, P{
- z; ]8 k! \% X7 d$ Y5 l' P% M BYTE nTmp = 0;0 i& K# g* [' n8 P
bool bDest = false,bSrc = false;
. {6 d- w7 u' c: d" s f2 O for (int i=0;i<MAX_INVENTORY;i++)
) z3 n- _- S z, F# H1 B {7 _0 U) j* ?1 x9 o( k/ s7 A9 M1 O
if (dwSrcId == m_Item.dwId)
8 f( M* w/ ?# j3 A$ S {. C' U: g% T) V- M% e( e4 K
//id相等 则 改变对应的dest和src
* D& f4 x* V4 T5 {, O' X: n4 O nTmp = m_Item.nIndex;& J5 S2 V8 _6 h |1 G7 I5 ]* C
m_Item.nIndex = dest;
0 i" B* z) }( z& s! y) J* B' Y8 } }% K: P5 o1 ]" L% {2 ` \! d% F
}
( c9 U& T5 o1 i: E' c$ D: d( t //临时数据保存完毕,交换开始
. P3 @7 J8 d2 \* M$ y' x8 U5 r for (int i=0;i<MAX_INVENTORY;i++)# n+ g9 d% j' j4 N0 @& m% C
{
( |5 V8 x4 I8 S5 P0 X' N. H# X if (dest == m_Item.nIndex)
: C6 x( U! w# z {0 U* N& l d# |
//id相等 则 改变对应的dest和src/ n) I6 l9 C, _* n/ c8 G* @; ^
m_Item.nIndex = nTmp;
% l( w9 t& x3 s5 k1 o4 A } I! } A2 c6 K
}
u& N( @7 c4 X; v}- Z8 h' Z: R5 P2 U# C: h5 T
};5 P* [& w$ X( {
-------------------------------------------------------------------------* L& L% E. K1 ~' L9 L
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% n2 h( W. T3 \! i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);9 G8 t% R/ n4 ?! v2 A
紧靠其上添加:
( Q5 J J( y& a% V+ D/ H# p& `if( pWndBase == &m_wndMenu )4 ` Y% C+ d; e" w3 G U
{, }% t* i- q. _+ `" B% s
switch( nID )
- I- q' X/ K5 }5 Z! Z- g {! z/ o$ ]5 K) M7 {
case 2:
7 u2 i; f0 n+ n8 L {9 |4 Q$ \0 Z" b7 f: Y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 l, N/ o. x7 ?$ E% p if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& T5 e% i+ C5 B, {5 I0 Y
{
6 b, v; T" C) N: y; H6 y. ~) |* f break;
8 A" A ~ ]4 r8 H4 p+ M6 O }, M/ M, Y, ?2 J$ V% T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* ~. K8 z/ a4 B- u! d4 R
{
: V+ N4 ~ n3 ]4 f CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, z* ]) t {* D. \
if( !pItemElem )
O1 X; `- s& H continue;
9 W+ g1 { f$ p4 p$ f if(pItemElem->GetExtra() > 0)
& i$ H# f5 r2 A1 |- \: X4 ~; ]$ f+ l continue;$ {" X* X0 Y' P/ z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 s2 z- D1 w: r8 Y continue;
' b" a9 f% \$ E4 l& f8 x) a( Y3 C# R if( g_pPlayer->IsUsing( pItemElem ) )/ R) T, q# O y+ l$ }
continue;
6 U: f$ C; D& t2 f/ u$ K if( pItemElem->IsUndestructable() == TRUE )
7 x& Z* A0 e4 L) O5 i1 D {2 y; E' b0 _' l8 w8 E
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ U7 J/ r5 t3 @; E
continue;) a5 _7 v" E7 q) [ m+ P {5 e
}
- Y0 X9 n2 G: q) o/ \5 @ U9 l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! A; n' R# h) Z$ b p
}( U7 i, \& w8 e) A6 R1 u
break;
1 |5 G6 I9 V- D/ ~- @ }
Z! ]) m6 O3 Y+ @/ V" E3 L case 1:1 u; K, t6 D9 F b2 i9 Q }8 k
{
9 ^( z/ i- m% C1 ?+ b0 [2 B# L //整理背包
1 u6 Y4 b! H9 z; h //////////////////////////////////////////////////////////////////////////3 C( ]4 B( H d; {3 N0 t
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; T5 l* K! q& [, g //////////////////////////////////////////////////////////////////////////3 [6 |* L1 o8 x3 s5 i0 L2 |: W4 J" m
//////////////////////////////////////////////////////////////////////////9 F0 t- E B- T# W8 [ C
CInventorySort* pInvSort = new CInventorySort;4 @: j3 `/ U/ I' h: D9 b
vector <sItem> vItem;! Z: y4 z, N/ O' u8 \* c2 B
vItem.resize(MAX_INVENTORY);//初始化大小5 F" v% T; S3 C7 z1 N5 @& @% h% p- f# e
//////////////////////////////////////////////////////////////////////////- Y8 i2 Y2 p4 f7 M$ `+ h8 s8 p
//填充数据$ T. c& e, A% C7 J! }0 A0 ]3 b
for (int i=0;i<MAX_INVENTORY;i++)/ J" {0 f$ [; H K
{
2 |7 {) ^* } K! J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 ?( N* e+ J+ [- L- l+ { y5 x
if (!pItemElem)
. I3 f K, d2 H {; w4 t' o) z; p% ~# N" s4 s {
vItem.dwKind2 = 0xffffffff;
5 S% F' F v7 ] vItem.dwItemId = 0xffffffff;2 q5 E5 J/ |5 \; F( {/ e6 [- v
vItem.nIndex = i;
; @- R9 B- e- H1 H$ T1 [: N- F }else {
Z7 p8 \* N6 V+ t$ x; p ItemProp* pProp = pItemElem->GetProp(); r6 q1 E+ d% F: h, r( n/ M
vItem.dwKind2 = pProp->dwItemKind2;
8 X1 F7 F$ f, I# E vItem.dwItemId = pItemElem->m_dwItemId;: f/ I4 C' s% w- C8 x1 l! M" N
vItem.nIndex = i;
) v( b( t1 r1 {, N: {! e% K }
# K, Y( _+ {9 i# }& D' p% d4 s //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ ]. }; B' O8 q% C3 Y* M& [7 j; p
}
( T1 k0 T2 d0 K4 l$ j0 J# x7 I$ M! x /////////////////////////////////////////////////////////////////////////// W& E4 n5 a) M! v
sort(vItem.begin(),vItem.end());//排序$ C1 s. C5 r( R* J! ]
//////////////////////////////////////////////////////////////////////////
2 C2 ~' j0 O- k- B& Y& Y3 x. n0 g //交换# t, M- n: f5 p; {) _8 Y
for (size_t i=0;i<vItem.size();i++)
8 R8 Z0 R6 A6 A% y' k5 k1 T& C: f {# \6 ]$ p( i# \' ?5 ^2 H' W
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! y& M& n- i. s1 g3 n0 T5 A( B! r pInvSort->Add(vItem.nIndex);
2 o; n$ m P3 U8 C* m }" R' `, \( j# i+ ]$ o
BYTE nDestPos = 0;
/ s8 M. L9 j0 f6 L. n8 _ for (int i=0;i<MAX_INVENTORY;i++)# }: \" K2 c3 e; D( [7 X
{; O4 J' p* g/ k9 k+ R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# x0 W) }1 C; C3 Z, g& E$ ^
if (pItemElem)
7 }% y# d9 J4 K2 H2 V$ Q3 a {
8 C% b V* Y# ^0 Q, ]1 L if (IsUsingItem(pItemElem))' F; }( w: d. K i$ h9 o
{: a/ K& G" G9 L) i
//这个位置无法放
' M5 D) H: |9 N nDestPos++;
O* t' S7 I* h' x4 Y+ U+ f3 I }
% ^2 N. e5 P3 f# a9 t5 m; ~ }) v* q/ g7 a: O @- {" g6 i
BYTE nSrc = pInvSort->GetItemSrc(i);# ]" V0 ^9 m- u* ^+ J+ d9 U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);8 v5 ~4 f& l8 F# g% C$ I
if (pItemElem)
1 u' ^* o0 x2 Y, T {9 ?7 h9 ^5 y+ u: j
if (IsUsingItem(pItemElem))
0 ]2 W( C' ]- j: j {0 Z" M4 Z! |4 ]- [9 B, x0 y
//这个道具无法移动,跳过0 I5 {! J8 O$ B$ G
continue;
0 l& L% J/ |+ O3 w; S }5 J& C# Y7 A# b: [6 | x/ O
}else{
5 N$ y: N3 F5 D' T' M0 l //空位置 不用动/ }, X; `+ X' c T" z" G4 I
continue;& L2 J7 l7 m! B. K1 I8 E; w
}
$ k0 P% T! G" A7 S! M% N* y /////////////////////////////////////////////////////////////////////////// o# O W7 n& b" }. n" K* o
//开始移动
" w: O( N9 l5 X5 F" t% g) J0 H: m: A) K if (nSrc == nDestPos) U5 d) b' l1 E
{3 S3 `6 {9 O" M5 e
//原地不动) D* Q$ u# i# T+ ?8 Q
nDestPos++;
1 J+ V( h, i/ l( F6 H" Y continue;
6 F1 x# C* s% B. \. s6 Q3 l }
6 }9 b/ e$ W8 N' g2 V" e, X pInvSort->MoveItem(i,nDestPos);
, H) N7 M4 P% A$ P g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( ` G7 W- t- `8 M. V Sleep(5);
F, H" @# L+ f //Error("移动 - %d->%d",nSrc,nDestPos);; A/ @: W* W+ N: ]
nDestPos++;
8 F! |% E3 B2 h$ G/ C, {4 e& D1 Y }* d. |5 E a3 h% e; C
//取第一个元素的信息& }2 g! S7 m7 C9 \; g h7 X2 x
/*
9 n4 _2 t h4 m: k3 \" W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
8 C, k1 j9 `& a8 e! e: e {! N, x& [% d+ W( x2 v) J/ Z) s
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
0 e9 I3 R9 {. ~/ J; A8 [# P g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% x9 V5 R3 ^1 l! \( J# h t }
2 n& W" V$ P6 y" M) n% z! j */- [/ Q. a/ G- M- V' [
//////////////////////////////////////////////////////////////////////////
2 I* |( F0 E1 [5 M break;
$ v4 t" `- C$ r }& a: d9 l( I8 J8 \; h: _! T, y
}
& c# X1 ]0 }7 u$ O}
2 F, s/ k3 X% c# x+ _4 e" ?m_wndMenu.SetVisible(FALSE);
; n }- m9 M/ ^9 g2 q; ]
5 g7 D3 t$ l% q--------------------------------------------------------------------------------------------------------& b& l7 ^% D3 h" T% E
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! z& l, l- o! p+ F7 C{
- m) T8 Z5 G' z( P. Q1 xBaseMouseCursor();
2 I9 s: a, y2 q0 p}0 V- y1 Y. x+ O, K
在其下添加:0 E7 U1 O; e2 c: q
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ P' \# S2 Z- q
{
! {. Z& h+ w3 R9 cm_wndMenu.DeleteAllMenu();
/ I' x/ V+ H& @m_wndMenu.CreateMenu(this);- f9 g8 L% w, x( x3 @5 }# W0 I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) o* Z, z& b, g$ |/ y: P: c# k% g
1 N: F+ [7 }9 M- D! X, w; V. L1 H8 l
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" `9 k" z( Z: e7 Z& O% W{ v/ G/ t( c0 I$ g1 Z7 Y
//P以上级别才可以删除所有道具4 M* @* Y: ^! B' u' z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* k6 N' `2 t) l9 U
}: [. P' t- v7 v: i$ Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. u( f# s5 I! U3 `. p5 y/ M5 @m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: X" H& N2 u' E1 s) W; l1 H
m_wndMenu.SetFocus();3 r7 g/ I" P0 {$ E" }. U
}
/ w% v8 k/ h9 e9 c, `5 y* g------------------------------------------------------------------------------------------------------------ _: o7 ]. {0 B9 [# S, o% N/ a4 d
*************************
U$ m; J8 U9 C ^2 n0 w8 J1 @WndField.h文件; O: W. A/ e0 J6 y2 N+ \" y# S4 d
*************************
2 T2 h& G8 V/ Q6 @搜索:BOOL m_bReport;# Y' n% h* O) U! k! L9 F
其后添加:) Y* u; I5 ]2 |* n
CWndMenu m_wndMenu;
0 f2 M& l) r+ U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 W% [, j6 t8 U% X, b e
其后添加: v% j f6 l9 N- n, w
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 R: X9 @# x8 M
. Y9 ]$ y+ x- y: Q
9 N2 z6 x* A5 f" s8 \ |
|