|
|
源文件中_Interface文件夹下WndField.cpp文件
: f. @) M; c0 W* w/ I F搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& E0 g! n5 M' |1 p4 {# c* Y- R
4 b& W- Q& P- J0 d
struct sItem
1 V+ A. B; H$ w& H7 n7 N{7 D3 K. X4 P/ H7 i+ g$ T/ R
DWORD dwId;% q# U# G0 E+ M' O5 ^& V" N3 _
DWORD dwKind2;
1 i; z+ Z6 w4 kDWORD dwItemId;
$ C1 c6 _$ G$ q: P: a0 eBYTE nIndex;# Z) D5 f4 u# F3 S1 A: v9 h
sItem(){0 j) T& j' ~) \6 S' \$ f+ N
dwId = dwKind2 = dwItemId = nIndex = 0;6 z' ~$ _7 e- j' c! s
}; M8 w- s2 r8 W
bool operator < (const sItem p2)9 j+ h. K# P& S8 w
{) m- {, `7 w- D
if (dwKind2 == p2.dwKind2)+ T9 u" C+ {! r4 o6 g, L
{8 ^& B: C* P* E
return dwItemId < p2.dwItemId;
' t/ ^' Z- U d# J }else{- d, n" Z9 O) z: }; u. y# o1 r
return dwKind2 < p2.dwKind2;3 s! y5 k+ T! A. v$ U) P( a e
}# @& J8 `/ v" N
}
0 @; E. k- C1 T# s. a$ s3 P, {3 t7 M% d};9 _5 i: z, }7 g( K. b2 P
class CInventorySort
. G" Y( `! E- E" B- b$ Q{4 p* y8 }2 H7 A
public:7 s, o6 l3 O9 ]) u
CInventorySort()7 G' |& A/ R: h" o7 V' Z
{
8 y$ a! ^- @/ z1 B) r/ h4 j4 U9 T m_dwPos = 0; |- f& z5 D6 y$ s. f4 R7 p3 I( g# ~
}
6 w4 r# O# R# g; I~CInventorySort(){}
X$ t* d# h, I: }9 s9 k0 @private:& {( g) j; r/ ^0 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 ~# f7 n2 b2 e- |& O
DWORD m_dwPos;
6 O& }; e# `! y" b/ ?% f- spublic:% P, v4 }$ p: {3 r
void Add(BYTE nIndex)1 W6 b5 q# @. f5 e
{
6 v& X7 C% @5 i1 [( S0 q4 T3 T if (m_dwPos >= MAX_INVENTORY) Q# v; q5 ~( D( d1 t' Y+ q
{' Q* Z4 H3 {) N3 J
return;6 R& y7 y. `/ g- `# m; q P
}
2 t/ W( L+ |+ T/ ]# l5 W m_Item[m_dwPos].nIndex = nIndex;
6 M# A. N4 f. P- j9 d6 n, P) y2 N m_Item[m_dwPos].dwId = m_dwPos;
+ Z: D' ~+ v6 p3 Q; a2 x8 h m_dwPos++;
9 s9 d" a- X9 S8 Q4 O}
; B$ ^1 w& a$ A& M' b \BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- q' h( h6 o9 `9 d4 n$ n2 W% F
{3 G2 q3 G+ [, N+ k o5 j
for (int i=0;i<MAX_INVENTORY;i++)& G+ j1 ^: g5 r0 A
{% @/ Q2 W7 E- V
if (m_Item.dwId == dwId)) |9 f3 _" [8 N; j' k5 z
{
1 V* Y: U0 h1 g- h( S return m_Item.nIndex;; g; f/ b" l. C. C* ?0 ?* k
}6 S8 L, k( w2 K( p4 f
}
* j- p. a; O( \) m5 M/ z) ] return 255;
7 X3 l! Q" B. c}
1 |8 k, w3 w/ X0 u7 q2 w5 {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
9 F) G" w' P H{4 O5 O, Z2 Q- u7 _3 x Z8 j ~
BYTE nTmp = 0;
9 Z/ K' F) ?7 y1 k9 c bool bDest = false,bSrc = false;6 d1 v7 l! h+ v+ }5 g9 Y$ H* S# h
for (int i=0;i<MAX_INVENTORY;i++)5 [" O" `( K; I1 E0 ~( C$ `
{8 e6 N/ n+ q* ]6 z/ l; Z9 |
if (dwSrcId == m_Item.dwId)
j0 _1 [; L7 }5 C2 t. d {
* P9 F, D3 B: a; N; u; k8 N //id相等 则 改变对应的dest和src) {3 o7 v4 N2 o: o1 N9 p8 X" o
nTmp = m_Item.nIndex;
" q- V7 e# j" w8 }0 | m_Item.nIndex = dest;+ Q" k" e# G- M M
}/ W' t* V1 A5 }/ Z& I, j/ J. q
}
$ K/ d8 T- t' g //临时数据保存完毕,交换开始3 ~0 ?' z+ b9 @7 r, x {
for (int i=0;i<MAX_INVENTORY;i++)
) d# k3 E0 h! m6 j& q9 n3 }5 w {) ?* [3 j" O9 A8 T
if (dest == m_Item.nIndex)
; i6 z8 ^; m5 e% q5 h {4 K% v* T0 x4 i$ o3 s
//id相等 则 改变对应的dest和src$ \$ B8 B2 ?3 @* a* I
m_Item.nIndex = nTmp;
5 G" q! G7 }8 D, K: O% I. F }
5 g# m+ M6 v* C& h# P$ Q& c5 C }. O0 l% y7 ` J ^
}
* R, @7 A, ?0 D7 P2 l# b};
( B3 V' }& h' [-------------------------------------------------------------------------
8 ^) S5 l+ G# H8 v0 k" D' v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ I# p8 n; y" V: b6 R4 k1 ]9 e5 S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) i( ^6 ~1 ~/ \. q2 q4 K
紧靠其上添加:
3 J+ R t. [ j7 T4 J% ?3 X# \7 ?if( pWndBase == &m_wndMenu )* ]. ]# m" V* a$ Y0 Z: W5 A
{8 p, f1 y. H2 b, Q
switch( nID )% e3 s Q( I& B) T+ Y3 F
{
1 m! B) g7 ?& s6 z$ f, F case 2:$ ^9 e( i. P; x4 |- C! k; M: R7 `
{/ m# F7 B/ g8 E( b2 s
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 V/ J: ~* B, W |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)) y6 \8 t# s0 ], F
{
$ O* P, F6 Q+ w break;* q% T k) i( \- h* J5 i8 a
}( a3 x9 \9 v$ r) B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* }/ V& y9 O5 \. q. r9 }' S
{
+ _& d: W% ]) d) j' G5 X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 }' p2 ?1 b7 X1 L0 r
if( !pItemElem )# u+ Z+ f( _: f' S# i; l- S
continue;
- o9 K8 j: H& A4 A& L0 L4 `3 `/ M/ _ I" d if(pItemElem->GetExtra() > 0)
( { ?) y# F3 r& I% j# I( b continue;, c8 W7 t* @0 e# r
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 r) U" q4 V6 F+ w; A- N continue;% U& M8 U# n+ b( O4 _
if( g_pPlayer->IsUsing( pItemElem ) ); _4 a7 Y: y1 y( E- a
continue;
7 i; S5 }) x; C, P8 F; m5 l$ f if( pItemElem->IsUndestructable() == TRUE ): [3 k! H. m8 Z8 k$ a
{
2 _: W2 E5 H, }. N7 b; s g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
H5 @/ g; _5 Y# A2 F3 t# z7 `$ A continue;
* ?1 D) N; t' K5 x }
( Q& S! m9 C0 y7 v! q1 v$ b g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, k* |9 [' R$ ]* m, N1 n5 ]
}7 g* n/ F* [" a0 }* `; }
break;
8 ?( X. c4 D6 G4 g/ y3 {. F }
" t; o& t6 ]% Q7 D$ h case 1:
* Z6 e: Q2 z+ Q0 {+ M5 x {5 {- }; p- C) L3 g) j
//整理背包' {0 L$ c7 J4 i, d' q1 E
//////////////////////////////////////////////////////////////////////////* E# I- D$ ]2 i6 {! t8 h
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
! s# s/ {/ z4 X% h9 V) n) `4 K //////////////////////////////////////////////////////////////////////////
) V( \3 ?' b" k. J! I //////////////////////////////////////////////////////////////////////////# @2 A. a' Z5 j# H8 ]$ s: d
CInventorySort* pInvSort = new CInventorySort;
9 S/ L/ e6 Z- k6 w1 m b vector <sItem> vItem;
5 m3 u& \! t: m+ `$ ^4 z vItem.resize(MAX_INVENTORY);//初始化大小! Z2 D; @: J1 }
//////////////////////////////////////////////////////////////////////////
+ I$ s3 {4 i8 T" p7 ~8 \( j //填充数据
+ C' {9 D+ n, v$ {7 _6 s$ z; r* J for (int i=0;i<MAX_INVENTORY;i++)
( P; R3 U2 I9 h/ y {: z% ~2 [" N+ c
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 j( ?+ i0 a4 `3 g
if (!pItemElem)
' S# C7 U ?( O) l' k {
9 G1 J* s1 Q. R+ s1 x* f% P- g) }. j vItem.dwKind2 = 0xffffffff;* `: K" _5 ]* j+ U" Y/ Y! c
vItem.dwItemId = 0xffffffff; |; v% D; M, ^! B
vItem.nIndex = i;- g: B' }, `" a- {, v
}else {
( h( N1 _# V g: W7 N1 L* y ItemProp* pProp = pItemElem->GetProp();/ R% R% \3 l( R3 z# r: z# y* ~- B
vItem.dwKind2 = pProp->dwItemKind2;+ ?' `, o, E- i' M& r. U
vItem.dwItemId = pItemElem->m_dwItemId;, D0 I: S$ q1 Z: c( w
vItem.nIndex = i;4 Q, T1 n0 E& K2 M# z' U
}- C' P5 D. w, |, {7 H0 B) H
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 a, C0 ?- S B# i; ]" D4 Q }( ^4 W1 x g& p' e4 ?0 _8 I8 `. t
//////////////////////////////////////////////////////////////////////////
^0 C! y/ ~. _0 y M$ X sort(vItem.begin(),vItem.end());//排序* C J7 B3 r5 N% R- W. `$ n, l b
//////////////////////////////////////////////////////////////////////////
& P5 R! d& ]5 b //交换/ f4 _# j8 \2 q: S4 D! U8 h
for (size_t i=0;i<vItem.size();i++)4 B0 w J, v" M
{
4 Z; p: u) [4 [& r/ q5 j. m9 s //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 O4 T" Q% l9 ]( H; z: z6 m pInvSort->Add(vItem.nIndex);! x8 s3 N7 ^# F# R3 A7 R8 k
}1 u3 c7 X8 m! \" P+ `* }! z. s
BYTE nDestPos = 0;
( o: D4 s6 j$ c for (int i=0;i<MAX_INVENTORY;i++)7 }+ `5 V4 h0 e: j* x* T" L
{
' ]' o+ Q+ [ x/ K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# E6 d. x0 j( `/ X( ]( E if (pItemElem)
, X% Q% C& O4 f; U. F {& u7 g% v. f+ d+ T# Z0 ^9 l
if (IsUsingItem(pItemElem))
# Y" J, t0 W8 z- G3 r; T. x {
% n4 K+ W; f `, b7 o //这个位置无法放
: w3 Q5 X& X! T: ~8 A* n, L- `& C nDestPos++;7 P+ _; g( i, K8 ]9 R9 X) f. a5 I
}
; i. u' [1 k3 n* u }& q8 J2 Y G! G+ O1 s" p8 Y, q+ Z
BYTE nSrc = pInvSort->GetItemSrc(i);* R6 Q( i: f% ?( S) j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' ]5 K) A6 Y9 [8 @. O if (pItemElem)2 `; R" J+ X3 {7 G$ R/ ?1 M2 D7 ~
{
1 p: M4 V; |* I9 |! W if (IsUsingItem(pItemElem))5 m; z5 Z' u: O2 m. M6 {* Z1 E5 |
{
& V- R% K& E' w$ P8 {9 Y4 C //这个道具无法移动,跳过9 Q; Y3 @* M' a7 c
continue;
. n* h& J) N# ` \. K1 \ }
D, L* n: B& q7 t }else{
& V% k2 \2 V$ s8 V a$ H3 w //空位置 不用动2 u+ @4 _' o! s, f% \+ [6 d& _2 [0 H
continue;
, H8 w. W& c- Q1 Y J) d& J }
: b0 t3 @# o4 I% H //////////////////////////////////////////////////////////////////////////! C0 }; `& O- q
//开始移动4 r% T! C; P' I4 L1 E9 k5 ], M
if (nSrc == nDestPos)7 F8 e6 \# t9 p# k2 {. Q" t
{ v" Q6 m3 q* { P2 S8 K- B* W& M( ^
//原地不动
( N! m* J5 }- y3 i1 `0 _ nDestPos++;
! g( t0 N" O8 n9 U% m continue;8 @8 w* S& }" q+ |
}+ ^; x/ S5 O \) x+ Y: m
pInvSort->MoveItem(i,nDestPos);
5 K" F- e' s2 P5 E: p* G+ S4 L g_DPlay.SendMoveItem(0,nSrc,nDestPos);! q& Z! r- j3 i
Sleep(5);& j# y0 d2 J/ J$ K
//Error("移动 - %d->%d",nSrc,nDestPos);
: c. H# Z( F! m0 T* d nDestPos++;
& @( L+ v2 h2 b x4 \9 O2 ] }- \/ Y. U- A9 q( G# F6 a
//取第一个元素的信息. R4 W# _; o! l5 [
/*
5 ?8 K9 v6 a: ~* ?; f* p8 ^, A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 b! M) c2 ^( Y: a {
7 r$ z: W* g w: c' x Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- m) b4 |! s6 C6 G& i- g! R0 O3 \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 D* S5 o: V2 h( W }
/ V/ H1 I# C D) p */
4 ^2 V; k' i4 g# G! h2 z) u1 `0 Y //////////////////////////////////////////////////////////////////////////* B/ v* n) f0 q! K6 W5 o* l8 O
break;
% x- d' l- I: X: U" W9 O4 t }1 W7 a+ b( u( ?9 R. c
} 2 D* F+ B$ m% D5 \ U
}2 o2 L4 k9 P. \0 R7 |
m_wndMenu.SetVisible(FALSE);
5 Q# W& F. m( U p; L, L6 z5 e) _" ~7 i1 e- {
--------------------------------------------------------------------------------------------------------; v5 D* o! \# B) ~$ `$ b( \- \
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. t3 z6 Y# B5 `6 Q{/ w4 Y; h% F4 s; F2 C5 v
BaseMouseCursor();+ J* {8 `6 Q* b/ m* m. b" V, @
}) r5 s1 Y) }9 ]3 q2 a5 h# R- C
在其下添加:
5 e; A# Q8 Y+ D- o6 D* nvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 O9 D; P/ h8 T{+ D+ y+ i& v7 h# R' g
m_wndMenu.DeleteAllMenu();; ^. ^4 G) M5 \& T- h, a" `
m_wndMenu.CreateMenu(this);
0 @4 x' q% s' T9 f# Q. j5 ?m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");- u5 }4 M+ ^+ Q q% U
! _; ~! u* z$ r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), x1 w2 c9 ]4 X' V. F- b/ G
{
, H' K4 r- G4 }" ~, K" ?1 S3 Y //P以上级别才可以删除所有道具$ }, I1 E; X9 C
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 g! U7 Y5 q3 A" D" ^( k}7 U+ i i5 A0 n4 ~) W p
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ U6 Z# N8 V9 c2 i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 I$ }% k% u5 U# G$ zm_wndMenu.SetFocus();
/ a* V' u } {* e}
7 C' r2 @) ^. [$ t------------------------------------------------------------------------------------------------------------
& y$ L. d1 s# H# K1 c*************************+ _! a9 r9 w# K: m% P E
WndField.h文件
1 u' A& [2 R/ q5 s1 `1 [*************************5 A4 E6 y5 C- J% L1 u4 ]
搜索:BOOL m_bReport;. |; u- g- A* z. k
其后添加:3 u3 R; S( l. Y. A. F9 Y
CWndMenu m_wndMenu;! `4 f5 T' \# u: ?' w4 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& ?6 P* e! h1 H1 O其后添加:
3 @0 [* A7 j0 o7 g6 @virtual void OnRButtonUp(UINT nFlags, CPoint point);
2 u( X( E0 z& G; U8 k$ u. l! T( C% H' l" m; t, L
/ d2 u7 K- {" W9 l8 Q5 m |
|