|
|
源文件中_Interface文件夹下WndField.cpp文件9 Y2 Q c# }; u( z6 C. ]
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 [7 I) _0 f3 W
: Y( [! W( S* t# Sstruct sItem
* ^6 r& [, M, ?) j/ l$ L) V{' L. I4 I' {" w1 f' s2 b; l
DWORD dwId;
* C6 H$ c% z) kDWORD dwKind2;
7 {" c0 Z$ M$ u0 A+ C" `+ cDWORD dwItemId;
( V& V. u( u* j2 E# k( @0 UBYTE nIndex;1 K( g5 W; z3 v8 l
sItem(){* X( Y/ a. x' L
dwId = dwKind2 = dwItemId = nIndex = 0;$ ?" L+ f. Z1 @3 {
}+ V- Q. {* U0 m/ j+ f' q
bool operator < (const sItem p2)
0 Q' S' ?( y' |$ w: [' d# q8 C' ]7 f% c{
3 Y2 m- H% }$ J3 v% A( B if (dwKind2 == p2.dwKind2)
$ Q2 Z0 ~* b9 Y: V0 \7 I5 \% }$ _ {
: c: E* X# T; r) x return dwItemId < p2.dwItemId;
: z, f$ e% y1 s* u! a1 H' [ }else{
' N! k0 h- v- g1 ?! `6 v, x$ Q* q. n return dwKind2 < p2.dwKind2;$ _! p" h& C4 S6 O) h9 u
}
' r. W5 g, j. `# e+ O/ V% |}
# G& @# f6 v! W) X: J: n: z};
6 |: O3 V9 w1 M# }class CInventorySort7 [ V; m7 U1 D9 Q
{' I: h9 I3 z7 |8 d
public:
& Z) v* E0 }( K; [: TCInventorySort()
+ G6 _0 R2 F: \{! Y" s5 i% V; d' y
m_dwPos = 0;1 {1 K+ z, a0 I. v T
}, {& [. ~! y( m0 W4 w! ]3 |
~CInventorySort(){}, P' Q! @) \" @; @/ w
private:0 i2 V2 Q* {2 {; F. O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- q# A) G5 J% C2 Q S4 D# {6 C
DWORD m_dwPos;
% ^; \3 y, t, J3 K2 ?* Y# P k. qpublic:) f" ~! @! ?/ r, u" Q, S; z
void Add(BYTE nIndex)5 q6 M+ E) V6 E5 E3 a4 r4 i4 b
{5 p9 @! q" L6 _0 X' b
if (m_dwPos >= MAX_INVENTORY)) [4 u/ i) Q8 F, Y+ l
{0 D9 W6 y2 m8 @& i( n
return;, q3 i' X" K, I& h$ A
}
6 W6 \7 k, d" B2 D; V! j0 z m_Item[m_dwPos].nIndex = nIndex;
3 N( |% ]" Z+ r; b) R! Z# C m_Item[m_dwPos].dwId = m_dwPos;
$ u1 O2 T( c* V7 [1 }* k m_dwPos++; Y$ A+ Y" C* O+ R/ x$ T
}
- v9 G' r! _. d8 C* k/ {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
2 t# e# n, \ p{
% n$ R& f& Y- U for (int i=0;i<MAX_INVENTORY;i++)7 ]( e$ G( f7 @2 \# V
{
{! k. i; v9 L if (m_Item.dwId == dwId)/ y( f" _" N! M
{) G: f% o7 x6 b/ i( d% w
return m_Item.nIndex;
; X) g: u7 g% ^+ B6 M2 { }3 Q& ]$ W' W) C5 j4 q) k
}# W; q& q! O# _4 F
return 255; _: M' L! `/ O4 x, n/ e) u
} B* K; s" W9 ~) B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 t8 ?1 o0 ^. M, Y, Z
{/ q! z) q* D* F4 a! H1 o9 y
BYTE nTmp = 0;1 L/ Z5 l5 P$ Z- i9 \ H9 d7 z
bool bDest = false,bSrc = false;1 c5 E' G6 t: m& x$ d6 F
for (int i=0;i<MAX_INVENTORY;i++)8 a5 q7 I+ }) D5 o9 Z
{
& P) o' k. L! u9 \, C: u) t0 a) h if (dwSrcId == m_Item.dwId)
# S8 F! l0 V; H; m6 ]" a" X# \, X {
: u7 B5 z+ }; p9 R$ r5 n //id相等 则 改变对应的dest和src/ M5 Q6 U* ]3 ^1 O. e) L0 ^
nTmp = m_Item.nIndex;* o( ] U9 R3 w! U0 P0 y: Q; j6 p
m_Item.nIndex = dest;
+ z: O9 ]1 E' c ] }$ U% ~# T% ?3 z' V4 }2 D" T
}
0 Q; O) O% }/ j& C8 y7 @ //临时数据保存完毕,交换开始
' u1 k* Z. ~6 w, l for (int i=0;i<MAX_INVENTORY;i++), N" |$ A: _" o+ F( R+ {" ^$ g
{
% B# Z2 g. e9 U4 \5 z, S& A if (dest == m_Item.nIndex)
) t# q" s- ~9 p* q {
6 d6 E+ p9 F! y2 u: s4 R# a: J' W5 Q //id相等 则 改变对应的dest和src
7 G* @3 o$ R$ ^7 b" c: V0 X m_Item.nIndex = nTmp;
! m; N/ v7 ]$ B1 j( Q6 ^ }
0 `3 p. Y5 y/ ?% f }+ J0 s7 b# f5 W. a5 C0 C4 _0 Q7 c
}
5 M- k Y+ w' j};
* f& @6 V# P% ]/ X; r3 T-------------------------------------------------------------------------
! l; q& b2 @8 u$ a依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ Z; U4 v; y1 L3 y* ~) w
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);2 F3 e* k4 T5 F* X
紧靠其上添加:4 @) W0 U; T& t/ E
if( pWndBase == &m_wndMenu ): p2 r7 ^ q Z5 ~ n3 l
{
) d, y6 v# O" C c. L switch( nID ), }6 O* k H5 j) ?3 Q1 O& ]- p
{
J8 X9 G: W- i7 ~5 L case 2:2 T8 d, H, U) w" }+ Y3 l
{
% b. x, i" a+ \- v" _, O. m/ s" n //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 m! l# f% }5 l" G+ Q& v3 u8 H9 V& C if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 z' L% k/ _& k) b {
8 l+ Z% S: V! g. _' [ break;
5 z* h. A# T6 C, J# e }/ ^7 I# k9 Y' K6 G
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! w/ J- R5 Z4 m- G9 x {
) w. L8 t G; l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ H2 j! @! O V0 U if( !pItemElem )& E- f/ o6 f" U! W& [; l y2 H
continue;
H: l$ v3 h/ e/ t3 p6 I& b2 r$ q if(pItemElem->GetExtra() > 0)
8 w9 l( v* e! ^" ?+ S continue;# k" x% ^6 H5 t5 j1 y
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
% [0 i6 q! I% {% U/ s continue;
' Y- U! ~: Z3 G4 l if( g_pPlayer->IsUsing( pItemElem ) )4 w9 K/ O' R0 N+ ^: W! r V
continue; M" L* f! K# O3 a" w! L
if( pItemElem->IsUndestructable() == TRUE )
& z3 [6 l) P+ v" y3 \ {; s8 ~: x8 {( h( R
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );/ m# Y; y1 U# d4 E. J# K9 j
continue;
5 v" g, o: {0 K5 Q% e7 @+ _ }1 P) U* ^ ^# k5 m" m+ G# y, Z
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 `( O& L4 n0 z! }3 c3 i }9 Y0 E1 ?, u& y' @
break;3 z0 T7 E; H" H$ j% B* M' v+ ~& X
}1 m, @- M- r6 h
case 1:$ H4 B% d6 F- y* R z6 ^
{
7 i3 B$ V3 J Y7 ]( v5 W; T //整理背包2 N' d% x8 E/ [4 f$ K1 e+ F, S
//////////////////////////////////////////////////////////////////////////
1 c- z2 h& J; }* X( E //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 C( q Z6 M5 x% i //////////////////////////////////////////////////////////////////////////
8 A+ [4 b0 Z0 J //////////////////////////////////////////////////////////////////////////
: H7 ^2 P1 L- K) n, T% L. y CInventorySort* pInvSort = new CInventorySort;9 y7 t. T& u0 A! R
vector <sItem> vItem;
5 y' x/ Y5 q' I9 o/ N6 U vItem.resize(MAX_INVENTORY);//初始化大小
: \+ s& X" ^9 D0 v- `2 b //////////////////////////////////////////////////////////////////////////
" k4 l# P& p# e- ~: y+ @! ` //填充数据
3 A' ]: Y$ H% M- n) {/ O# D: { for (int i=0;i<MAX_INVENTORY;i++)
; U! w& K& \ G3 d% x {# v; q: ^5 ?$ P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% H+ x% e4 X, _3 Y' T* n8 V
if (!pItemElem)
: Z1 @+ b$ j8 Q5 ~ {
' w: f. q6 c8 F* S% y# |7 B2 R vItem.dwKind2 = 0xffffffff;
; C/ A/ h2 W3 e$ y$ f vItem.dwItemId = 0xffffffff;
0 K2 v3 Z% r k* B$ u vItem.nIndex = i;
9 F& a, A. L& M; a# F1 i }else {
( z8 w% t. l8 j0 J ^8 l ItemProp* pProp = pItemElem->GetProp();
* v8 i' n7 p- t$ ?' n1 M vItem.dwKind2 = pProp->dwItemKind2;
f# f6 p: B3 E vItem.dwItemId = pItemElem->m_dwItemId;
# A2 ~: ?! a* P1 a9 A) G& t$ M vItem.nIndex = i;4 }2 o* w, \9 _5 H7 S9 Q
}5 c0 u7 @1 P- U/ M- ?3 t. m6 h
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ^' j7 R0 m9 O7 j* C6 d8 c }% p1 a- K. ~# \( i$ ?+ {
//////////////////////////////////////////////////////////////////////////
}) l6 y8 L& k$ a sort(vItem.begin(),vItem.end());//排序
3 t- w* U+ p7 M! ^3 P& N //////////////////////////////////////////////////////////////////////////
' Q' ^. j' A$ {. O! S. I1 x //交换) K& M: m) Q8 S! D/ ~1 T2 }5 [
for (size_t i=0;i<vItem.size();i++)
+ P' d) h( z) }' [/ F( X" f+ A {
0 i4 d: i* S" d; z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 ]9 ^- R$ C. |, y; y& ~
pInvSort->Add(vItem.nIndex);
" h: O8 a% d$ [ }! l4 V/ R' B1 c- i( ~2 y- p
BYTE nDestPos = 0;; D% i( a* s3 k3 @# u$ z
for (int i=0;i<MAX_INVENTORY;i++)
) Q/ _0 O. s. E# `$ ]' F {
( N2 Q2 |8 b+ G' y7 u CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
; G. g) f, @/ N/ ~4 ~4 B% X; q if (pItemElem)6 F- ?" e3 ?2 B# f, q
{: m4 D) @" d9 j7 G( C+ Y3 A
if (IsUsingItem(pItemElem))
1 M$ E7 b* ^! F9 b {
3 A# u2 j9 V/ W2 H //这个位置无法放
3 }$ L1 }7 d, P# c1 W) n% D3 T nDestPos++;
2 z* C N% M6 h1 ~( H }
; b; {/ ^2 i& ?5 t4 N: { }; K; p# `0 M7 C, h( E
BYTE nSrc = pInvSort->GetItemSrc(i);5 o+ `+ @" k8 B& N% o2 n8 q- A
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 g/ W* b8 g) E( P$ H" }; v+ c if (pItemElem)' C" ?- g+ p$ _% S
{
) a: h$ Q- o$ K0 s( f) v( { if (IsUsingItem(pItemElem))
4 T8 r9 F" T& w3 H* [8 T/ n {' c$ R' ]% |; p2 P2 @
//这个道具无法移动,跳过
# n" G& Y( S9 l7 d* b; I$ y6 y continue;; T( J) q9 Z7 {8 m
}9 G& ^4 p: m2 N9 B3 c8 P2 o' q
}else{
- h5 S( V7 Q5 T7 _4 H //空位置 不用动
( J( j- p* I% i8 N continue;
* y9 n$ W( S% e- h6 }( y }7 W4 [' _2 z( M2 ]$ ?6 `% T3 e6 {
//////////////////////////////////////////////////////////////////////////
W9 A) [% n) c# B+ g" w j //开始移动2 t! N9 `. [# y7 _. r
if (nSrc == nDestPos)
8 \5 R7 E3 E8 }7 a1 o3 A- B5 a2 o$ E {
: I1 M+ I7 J8 E) [, y //原地不动4 t' N! Q! C5 G4 f
nDestPos++;
9 `; Q. x& g+ y7 s) g. V6 _ continue;( O3 L4 E8 V: J' ^% L' I( e9 Y
}
+ o/ {: m0 I, y% V) {6 x3 g! @ pInvSort->MoveItem(i,nDestPos);
9 H$ k# `- k, m* r& F2 j g_DPlay.SendMoveItem(0,nSrc,nDestPos);
; ~* ^- l" k+ H) S3 O2 y Sleep(5);
, C7 ^9 P9 H# p' U2 X" A; K3 J //Error("移动 - %d->%d",nSrc,nDestPos);$ Z7 C) b: L) B" {
nDestPos++;5 h8 r% Q6 ^2 W8 [6 J) {* H
}; V' u! o6 {! ?! X8 w
//取第一个元素的信息( s* [* Z7 e/ l
/*) A8 p& z. V/ p1 J/ d
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 t( S v. y( ~) G, W0 {: t3 C
{* q) t7 C0 m/ c' W) P T1 S
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' `, e1 D9 c4 I: d2 u7 Y6 E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
w; o- N# g# Q3 l- T4 p% e }" X6 j( G, A5 P; E
*/
+ i) A5 b# S" f5 o7 J6 Y //////////////////////////////////////////////////////////////////////////
4 X: _# ]: a# P' Y2 Z0 d% y" k0 m break;: i( S9 t& j: V/ ^
}+ t8 `8 a6 `- E% ?6 O+ y
} % F- O! Y$ s; [. C
}
7 A0 o. Q6 |- n: Om_wndMenu.SetVisible(FALSE);
9 J4 x4 D- f0 U! q, s
4 N8 Y4 A, H6 a2 t1 w% y2 b/ z& Y2 i$ F--------------------------------------------------------------------------------------------------------# [# h: K/ R& d1 k* h% e8 c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)% w* T6 i$ \# b& H: |+ q) }6 B
{
" p3 u% D: i) U" ~- Q2 c* M" gBaseMouseCursor();) w8 y! b) b2 J* L3 Y: [
}
$ W: E- a h& h7 m0 M在其下添加:/ l) L b; H. Q+ G2 u' y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 o4 U# y7 { ^1 D% A* R; _. s
{5 T# c E6 v; @4 B: T, q1 X) s, p* o
m_wndMenu.DeleteAllMenu();1 V) H/ |: ?. V6 J: S9 T) U L: r$ f
m_wndMenu.CreateMenu(this);
5 h% v; @4 y6 T; w5 bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 `# x# C+ }/ q0 [
O. @: O/ V) P+ Hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
M9 i$ Y; o; p+ ]( I2 H{/ A" l, V5 x) s. C0 h$ v& y
//P以上级别才可以删除所有道具
# m2 \: I+ a* R$ P0 @2 s3 c1 _) G7 V m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 S8 R* S' O+ A. A- s/ m}/ ~; _( N$ q5 v. D
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 m7 _7 u6 E4 g$ R# ~5 t: a6 ^0 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
7 j8 K5 e/ F5 mm_wndMenu.SetFocus();* q+ C9 X) ~3 B: z9 ?/ Z; a! F
}
6 {+ E) L; Q& ~' V8 j------------------------------------------------------------------------------------------------------------+ @: |4 d5 ^$ d! k- {7 s# s" ? I
*************************% w2 O$ U# I b: M& g) n, k
WndField.h文件2 i" u, O# j& |* h
*************************
- V( J$ H, B$ u- G搜索:BOOL m_bReport;
% a! l0 S8 u: i9 U* ^其后添加:
; f P) \5 F/ m, I& pCWndMenu m_wndMenu;4 H. O! L- w" G5 m2 U% _0 X
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 G* P# G1 C" A! x; J+ C9 \
其后添加:5 V, w2 h+ ]. G3 [! a! B
virtual void OnRButtonUp(UINT nFlags, CPoint point);( o7 I9 o( I# Q( z
9 T& @, ?6 o& x4 j2 [& w
2 W. V! m, ^0 W* o+ E3 Z |
|