|
|
源文件中_Interface文件夹下WndField.cpp文件
: X& Y! l) |% g& g- K0 e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ [& E; U! [' ?0 [- a' J9 Z
; _8 y- }3 K" Wstruct sItem
n5 W: m/ @& _; R& V' t( h! ~' b{0 F' l2 F, C( V, A) K
DWORD dwId;
, ]8 I+ B) Z' A5 A1 I+ YDWORD dwKind2;* E9 t' B3 Y, A% Q* {; P% U5 p- a: X7 `
DWORD dwItemId;
8 j# ~8 ?( p" F) g, SBYTE nIndex;2 H3 r8 Q) a l2 s
sItem(){) k: C' m8 A% R) O% K
dwId = dwKind2 = dwItemId = nIndex = 0;0 G3 u; h; x6 i+ A" `0 r) P) }
}
* R C' k" A& v2 u/ |; Ybool operator < (const sItem p2)) C0 A: k2 I8 C
{
* x1 k( t e6 L P0 k9 [( a6 Q if (dwKind2 == p2.dwKind2)) {# c3 g- P: i* e0 f' X, C- T
{
6 c1 _5 L3 a" O return dwItemId < p2.dwItemId;
! x8 V' Q2 M" k' ]' b }else{
" ~! p M5 E: h# j! ` return dwKind2 < p2.dwKind2;
4 ^/ k% j5 F( v$ S" N1 T }
( w0 y- C' A) c}
4 M( H3 O2 X! S; G; y, c+ ^5 i};
6 N9 ^% G; f _6 n/ O/ H2 jclass CInventorySort
! I8 @* G3 H2 w) T% T, d{" q) r9 h. L4 T7 D% @
public: l- q* H$ E7 Q
CInventorySort()5 @' Q5 {# E/ g {
{
+ f2 E3 u- R4 g! Z, C m_dwPos = 0;
0 C/ {- j, a9 x* Q}
# X3 ^3 \, Q2 J~CInventorySort(){}# X+ \* y4 Y& B" R. p
private:" @# A3 X" o5 i. k7 Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! a+ Q& P1 K4 ]- oDWORD m_dwPos;, Z7 t' z$ p E: G6 j
public:! z, k* E: q6 s1 _" c
void Add(BYTE nIndex)
% N" W9 C& K: u) P9 x{
. \2 Q$ E5 [/ Q: F# L& h1 w if (m_dwPos >= MAX_INVENTORY)9 Q. _' {3 w$ H/ Q- V3 N3 t
{
0 z' ]4 e: u. v# z6 o! p return;; `# I6 V) c; l
}' m; w% |; w' S8 k
m_Item[m_dwPos].nIndex = nIndex;* `5 u* ~7 [1 m- A# U
m_Item[m_dwPos].dwId = m_dwPos;
1 b4 z! R, Z& h: o9 a( ~/ p/ A+ Z m_dwPos++;
+ V8 X+ b# E8 [4 Y: D6 ]}1 }4 j7 m8 p6 r* l+ ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 |2 E; Y7 y) i7 o/ @$ {2 m" P{8 d: X7 K! u2 ]1 ?! q5 d8 r& ]( U
for (int i=0;i<MAX_INVENTORY;i++)
$ h0 ~2 e0 H+ n/ _$ P6 \7 q {( l7 K7 \2 C% H9 v5 `3 F2 O3 G2 K; r
if (m_Item.dwId == dwId)
) S( s7 z5 ^5 Z$ d" t7 ?$ Q { E8 D/ ]& t; [" j7 b, N2 G- `
return m_Item.nIndex;
9 w+ t, x5 @! N. [ }3 A$ | }. q" N, j9 S0 n4 \
}5 w3 e" \2 [; `& K# H
return 255;
! P. P/ c4 j& Z+ C v& Y8 s}8 n3 s4 a+ c7 }5 C( K4 `- R" [, N
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) J, e8 T, n( {0 o8 C/ h0 A{
& X$ _& x& g* x& G3 T BYTE nTmp = 0;9 [2 Z5 {6 G! L+ z. I. n
bool bDest = false,bSrc = false;
4 {1 w& V. w1 s6 X' S8 n! X, S for (int i=0;i<MAX_INVENTORY;i++)
, L- J+ k! I* c6 j2 [) M9 p% m: c {
5 {* _' j/ |5 h) w if (dwSrcId == m_Item.dwId)
8 h, O! V5 E& R# w6 ~ {
9 Q+ g7 A! D+ A% d% E j" t( c //id相等 则 改变对应的dest和src$ \7 p5 q; X, ?, D: S6 y
nTmp = m_Item.nIndex;
' |# R6 M+ ~2 N6 N4 l* L! X m_Item.nIndex = dest;. b" t& `4 W" C; l$ ?) d. U
}4 H5 L1 }/ w! T" j# Q) |0 z3 _8 X
}
" e" B, z3 I1 b }; ]4 c0 z( T4 `" S //临时数据保存完毕,交换开始. @, Z/ U! l. i3 p1 X7 H
for (int i=0;i<MAX_INVENTORY;i++)! I# v- P4 V+ e3 g- ]$ n' @" U
{
5 _; l: T7 D: ?+ H4 `( s8 K if (dest == m_Item.nIndex)
r3 r% B3 m0 I: W {
0 H; g4 n7 \+ E; e5 m5 E* r2 Q( A //id相等 则 改变对应的dest和src
1 R) {. `5 T+ d0 J1 ?" o/ p+ e$ ? m_Item.nIndex = nTmp;. Z) D. F2 c! O% ^
}" D2 T7 c/ N( v4 U+ A5 U
}4 w1 J$ {% z% O3 y( V% o$ T
}5 v6 ~2 e1 u1 `. U9 \8 q3 i
};( p. C9 {) V B6 p& p
-------------------------------------------------------------------------6 C; ~/ \ y0 [5 x2 x/ B# P+ t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
' X/ ^" H; C' Q* t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 X) E( G: B5 h- P- J* c7 F紧靠其上添加:, Q6 Z0 Q3 i o. k, P1 R
if( pWndBase == &m_wndMenu )* Q9 U5 ^$ t' j% t3 I2 A
{' E4 Y5 W* _* O$ x$ t, _0 a; P5 Z
switch( nID )$ i/ u2 b, y$ `( ^
{1 y: @9 s7 _' Y0 c1 _1 C5 v- D2 p
case 2:
8 F3 v! e* \8 e! G3 v% |5 r {/ L4 z9 w1 [0 M0 D
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& u& U p( P- z* Q7 F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% a! l0 P/ y4 I5 [ {
" x1 w; ^8 k- g5 `5 d break;3 b$ J0 l. r# f: E" P: y" A
}
& g* Z: ^0 U7 }" [' j) m for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! F4 K" I: C1 w2 R9 c {- W& [$ L0 L. S2 V/ X) ~7 ~* }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);; D7 M, G( Y, `( t
if( !pItemElem )
, }9 l7 d5 e9 }4 n3 A. s- U, Y continue;- q* C; B0 O& M9 @3 ~( }) K8 ?: P
if(pItemElem->GetExtra() > 0): u$ K1 v- `$ ?: o3 |$ p
continue;5 ]- i7 m4 {8 j/ r% k& Q6 c* o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' \1 P+ w2 O/ e
continue;
, F# x0 N' [) D- W4 ]# E if( g_pPlayer->IsUsing( pItemElem ) )
4 X. Z3 o: F5 c( @: e! f; A4 W continue;
* k* l3 i( M" D& {1 X if( pItemElem->IsUndestructable() == TRUE )* E/ A% X/ k: ^' N- u- b$ X" A5 g/ E
{" q4 a* G2 j. s& ^
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
$ N7 E2 W/ v( O continue;7 ~7 p% U7 U. W% J
}
2 f$ O0 \# V1 o9 Y6 J; o ^3 b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 }) o4 m% e" W% x3 t5 l( x! { }
- |# L2 L) ]$ ^) L ` break;: [$ t. j! W. r: N
}1 C! x- _9 \7 Z: K7 N
case 1:- r( c5 [1 m7 s- _
{
6 |0 n L) s" S //整理背包
' {6 Q3 h- }( p4 v$ L //////////////////////////////////////////////////////////////////////////
& L0 Q! q8 i9 A& x# k( T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );; ~$ ~- p8 W2 F, R
//////////////////////////////////////////////////////////////////////////) }* _! U8 \; S" }$ F
//////////////////////////////////////////////////////////////////////////
" [& a; D6 _8 m9 J) t5 i$ |0 b- r CInventorySort* pInvSort = new CInventorySort;: a* N/ ~% _; |
vector <sItem> vItem;
) l0 }; g. m8 R; v. X$ Y5 [ vItem.resize(MAX_INVENTORY);//初始化大小 r6 B$ |, `2 _; \
//////////////////////////////////////////////////////////////////////////3 p" z1 B7 T+ `4 v/ [$ K0 [! t! c8 q: R
//填充数据( b. D, @4 Y8 o/ M+ i
for (int i=0;i<MAX_INVENTORY;i++)
. t! y1 w/ {! G3 K/ h: L0 o( E) j {# F6 D: m7 t, ]+ f: E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 H% n* Q* C( g9 }: a: C& u* N0 h
if (!pItemElem)
, ]0 f/ u, g& X9 z2 t6 q6 X {
: o1 r/ X8 {- b) i3 O vItem.dwKind2 = 0xffffffff;
6 q2 L8 O2 y/ S3 m vItem.dwItemId = 0xffffffff;
& `: f a" ?+ P2 m4 x5 c0 B- ~ vItem.nIndex = i;- Q$ k7 }5 N4 H D
}else {
5 I0 F6 p. ?. A1 } A3 v0 Q: j ItemProp* pProp = pItemElem->GetProp();
4 `9 h5 z" j" e vItem.dwKind2 = pProp->dwItemKind2;0 E/ N5 G- G! e/ c; Z+ R& w0 }
vItem.dwItemId = pItemElem->m_dwItemId;
; g; B) ?( u/ i& ] vItem.nIndex = i;
2 }5 e( M5 m+ V- l }
$ l! H5 T& L5 K+ K! C9 w- \8 \5 l //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 E( B8 q1 e1 ]& x7 m0 q. z
}
n0 S I$ m; t4 B) G. I //////////////////////////////////////////////////////////////////////////" K& } l! Z; h0 r$ R
sort(vItem.begin(),vItem.end());//排序* }5 r+ w9 k# j, } f
//////////////////////////////////////////////////////////////////////////
V+ A) ?: e* M9 B6 \. \ //交换
$ V. O/ \3 p( R/ m/ G for (size_t i=0;i<vItem.size();i++)
. s3 W. f1 r8 E& `, \ {
( z3 p5 J) A, Z- j Z$ r //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 S3 v" U5 q1 d, X, P) N5 d pInvSort->Add(vItem.nIndex);
" W" N* V* c8 }( ] }9 ^! T8 ]6 O# Q A: x: x5 x
BYTE nDestPos = 0;
, B5 G9 z- ]6 b2 t7 W0 k* }5 E for (int i=0;i<MAX_INVENTORY;i++); d; _+ d7 g2 e$ W4 u6 }
{8 M" _7 w( A5 k; X8 Z3 z: Q3 I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ Y4 ^- g2 k& E! v- D4 S if (pItemElem)
- c4 w& V' Z- V {
$ H. h- M2 M& N. d' c0 [ U if (IsUsingItem(pItemElem))
9 K2 ]1 U/ [$ }& P8 A# D% F2 S6 ^ {
2 U) F, j# t7 ~, |/ ^ //这个位置无法放
- q7 a7 i g' d1 g# @4 r C0 d nDestPos++;* w, x" f0 W) J
}; r9 V, i' G/ f$ g
}* P/ t( M4 a; v- p5 }" O
BYTE nSrc = pInvSort->GetItemSrc(i);
. Y% x/ ?) z2 i3 D1 W# h5 D( @ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- Y+ `4 P6 U! Y$ l" e1 E if (pItemElem)
) J* r9 a+ {& w4 Y% G {; W* s* K, `& N- z1 \
if (IsUsingItem(pItemElem))7 Z3 ^6 R6 P0 c' d
{
$ e) }/ `$ M8 c. h //这个道具无法移动,跳过+ ^' e" Y! B6 x* ]% E; r
continue;
# }! f: T R# X1 T; P }
" H/ Y- r, `% L0 y, I8 s$ d }else{
& @; y/ r- H6 v/ M2 ^( {$ z% S4 N //空位置 不用动
- w2 j- r( [# s/ `0 L6 w [ continue;
$ _+ x! z6 {+ b6 S5 M" F }
( B% ?2 f! |! p/ ]$ R //////////////////////////////////////////////////////////////////////////
8 s) L5 d! T$ _6 z2 n //开始移动
2 ?' R- u- @& G7 d$ a if (nSrc == nDestPos)
4 V8 ]" D& Y4 W# D {
5 v6 {2 t; r. y7 R0 N9 Y //原地不动
- W4 f; W( [" o+ N0 x0 e. K nDestPos++;2 S) x5 k4 j' B
continue;
! Y ]& z2 T( u, x0 \. c, c }
; v+ f/ X$ e. g! u pInvSort->MoveItem(i,nDestPos);9 w' G- _( k5 q3 c) O
g_DPlay.SendMoveItem(0,nSrc,nDestPos); \8 y! E \' Z" B# w H
Sleep(5);0 p+ c9 r+ M8 P4 ]
//Error("移动 - %d->%d",nSrc,nDestPos);* I8 e" A0 S1 q+ T5 A2 h
nDestPos++;
1 p) S; E2 ~ f) h2 l }8 J, H( ?# N- `9 ~3 Q1 z& T
//取第一个元素的信息
: o2 S5 y& ?4 c# r# v /*
+ P1 S3 L b2 G% A; H/ h if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 F5 H5 e+ U/ q8 s% B
{
: W e& g5 @: ^ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);- d: ?8 }$ t# h- e" P w. s$ S
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 O2 A" ~5 g t2 X4 o+ p* G- W3 ^$ W }! Z7 L* P2 s3 M& g6 U# P* g9 o$ l5 I7 M
*/3 [ d' b1 m U" e
//////////////////////////////////////////////////////////////////////////
$ P# ]7 A7 Z \ break;7 M: \, V2 J: C/ X: i
}
. M- E8 @! y9 ]. d8 @1 W% G" v } ~4 f- V# b" O% E' h
}
" U# b, C$ q" V7 fm_wndMenu.SetVisible(FALSE);
/ F! C Q: p- A; V6 K3 ` D4 R$ \4 J
--------------------------------------------------------------------------------------------------------9 i8 f, d* G0 x1 P$ @' }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)" p' f' Q& \/ p8 Z
{* ^1 M$ i5 Y( C- m
BaseMouseCursor();2 Z) n% [; x$ r Z* x* d$ O
}- w6 j4 R8 n, W. k. n; e
在其下添加:
& g! \4 |' ?; C. W: Avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 _9 m1 f/ [7 P& u
{
' E! S; t; E' \2 J3 P( Z+ y7 y; O' @4 ]m_wndMenu.DeleteAllMenu();
4 Z1 a$ h' R# I# N( _! Zm_wndMenu.CreateMenu(this);
- w& @& h+ l# Y; _1 o) j% om_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 e1 h6 e2 ~6 P I: N, j* w
# A( g' O# y8 ^) S$ Z7 l+ D
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' f' R% b. p. E" R5 ?& k9 K
{. j b' j+ Y" h3 l6 W
//P以上级别才可以删除所有道具
) A* W% i& C6 w3 s: z* Y, X8 ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- |- a! I! U4 U+ Z2 D& y}
7 b% e( q/ I1 D& U2 B2 ]. k) g7 D! Wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 p: [; O6 G D3 _" |3 A5 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 R8 r0 O7 S% p( V5 Bm_wndMenu.SetFocus();8 p. f2 l4 \9 F: I8 M0 D
}( J8 x0 A. ?* {9 ]" Y2 P! B
------------------------------------------------------------------------------------------------------------6 S0 I& n! F( l6 e" y( L9 Y2 O
*************************+ @& x7 Q# e+ a' D
WndField.h文件
! h- W; @' C8 | L*************************
7 g# T' v1 M/ J8 V/ E& j- v0 m9 L搜索:BOOL m_bReport;( U! [/ B: T1 l3 p( Z3 W
其后添加:0 W) v$ h$ L4 u2 P( k5 Z
CWndMenu m_wndMenu;
/ H) @0 {' u" z2 D- u6 R) |3 F% y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& U m: g- T) w2 k$ o( S2 k' n$ m& K
其后添加:" b y% _$ K7 v: } T& x- q1 K
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 }8 i1 U) q2 Z! Y7 F; R. Q4 C, v W
, J4 e+ S# j6 u4 F1 _. {$ O' F' m! U% K- C! s
|
|