|
|
源文件中_Interface文件夹下WndField.cpp文件6 D, t% o- @6 P, o6 |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* o+ b$ J2 g, p. I
2 ?' i( g! o4 ^" T9 v, Ustruct sItem
$ V' {- Z3 g6 i4 L9 S{% V3 C; R" r4 X+ S* [% C
DWORD dwId;3 N. a% @: i; n, {. S
DWORD dwKind2;- G2 f# @8 F% H8 N# S* N' N
DWORD dwItemId;! V! n1 V/ q4 X$ o+ g3 g1 X
BYTE nIndex;. D1 I8 x5 l) K1 J% F
sItem(){+ Q- U+ T! w( z5 t! ?% C: m
dwId = dwKind2 = dwItemId = nIndex = 0;; b4 H: Z/ g8 k. \
}
: {8 Z* U' R* X3 P: h5 G" o: j# pbool operator < (const sItem p2)
& z7 G. i9 y! f8 k' v3 N5 I{
0 T% G& W% G& N if (dwKind2 == p2.dwKind2)
% n" R5 s& L( D0 O$ H {, M% J' }% N& `7 E0 J0 Y
return dwItemId < p2.dwItemId;0 d0 H/ p! l! w; j* V6 H
}else{
8 W3 c' e' a6 z" Y8 y+ I: H" E return dwKind2 < p2.dwKind2;; b# J# _/ w( q9 Y7 T
}
" u" ]& C$ Z+ ]3 ]' q6 s% ]3 n# p}2 r% h T0 w! o4 N( p/ z
};2 [8 b* D# ?: M; g2 e; l/ z4 Q: A
class CInventorySort
+ ^6 f0 q! d% _{1 @) `( f# b% C. m$ K' j- k7 V
public:
( g1 O7 o6 k$ q1 L1 {5 F* oCInventorySort()
7 d5 i4 U* `! f6 `' f% I{
" g; M+ z! c! Q$ g2 @ m_dwPos = 0;
* a+ _7 o# _; ]" I& N}
5 }1 K7 e' n( D" i8 f8 C1 l~CInventorySort(){}4 A8 a% y k4 _' X/ B0 ~, ]- `
private:
/ f9 ~6 b& M+ X) i; A+ z }1 zsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 }3 u* b7 w0 y6 B) ?
DWORD m_dwPos;
; g! E% q9 d% _, c0 dpublic:
1 y" [0 p6 N4 L2 e: G' u3 a D' D( ovoid Add(BYTE nIndex)' m, V1 U( `0 b+ ] }
{
8 g+ O g8 o5 S: K) ^ ? if (m_dwPos >= MAX_INVENTORY)1 _9 G" c+ \ d! Z( Y
{) Y3 `3 g5 S6 c* E
return;
' r# M( P9 O; v: x% p }& e5 H8 {8 p, H- K
m_Item[m_dwPos].nIndex = nIndex;
" P# J f- @9 `4 X m_Item[m_dwPos].dwId = m_dwPos;1 d& Z' _+ |5 C5 B$ _1 X4 y3 c
m_dwPos++;
7 F. A2 D5 ?$ _/ Q( V}1 j: G5 g/ ^* X4 d+ y. B# e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ R: l2 J1 y2 S7 m- z; X2 ?1 i+ U{/ H" L: c; ~$ q
for (int i=0;i<MAX_INVENTORY;i++)
# _9 K& c6 \2 l) U @# i {
: A+ Z; L# M: B* H" p4 \0 ~8 @ if (m_Item.dwId == dwId)
0 V1 n3 o) J W1 f" V {" [2 N I: C" }; D/ O0 H+ e: n
return m_Item.nIndex;
7 e6 S8 ~4 e: q& B }
$ X0 {7 ]; C2 g5 K }
9 ^" l/ x3 J- M, L! K$ \ return 255;" W1 h: n8 {" M
}
' i1 {# o; P$ |0 w& `2 O7 t8 R! Tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' ?/ f& o# \$ H) F; z6 i{
% v+ s7 e8 ^" r) { BYTE nTmp = 0;- ]3 k. B& }9 ]2 `0 d
bool bDest = false,bSrc = false;
' [6 f9 q. X4 X) V3 U4 W. \. c1 _ K for (int i=0;i<MAX_INVENTORY;i++)4 k- y0 Q j" M9 b, [
{
6 A, N G* Y# q if (dwSrcId == m_Item.dwId)! R2 f f n0 i: X4 w+ P- ~
{
0 ?# ~- L1 C9 ]5 d* w //id相等 则 改变对应的dest和src
( p% [7 a/ K$ s' _& D- f4 { nTmp = m_Item.nIndex;
5 c2 g" w: `. E* ? m_Item.nIndex = dest;5 N! G1 i6 k) v$ N1 e' j( W6 f* q
}/ y' u; A( m* O5 n/ X4 X/ e
}' ]$ @; ~1 e& g# L! U* ~# u
//临时数据保存完毕,交换开始( z* \- b* J9 U; c1 X+ b" j
for (int i=0;i<MAX_INVENTORY;i++)3 I+ \: U& `3 w, n
{8 n9 J7 U6 k$ v' U) a% \* f8 j! ?
if (dest == m_Item.nIndex)6 b3 @' p+ c3 |" f: r4 o
{4 }- C( {0 w& {9 H. }
//id相等 则 改变对应的dest和src3 a" [- o$ l c) A
m_Item.nIndex = nTmp;1 e6 \# |- v* X- ~. @" J7 x
}
9 M: R4 o# f9 N }
, N* m/ w+ U! G1 U8 K& w' t}
- \6 ]1 P7 J* j3 O6 g; R};8 y6 g- s9 G* N$ v4 S' A
-------------------------------------------------------------------------
; H: ~, r7 l- @- ~& K% D L/ h依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 c* r% ?5 X; F2 R& Z; G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) E" X# _6 i( @ @4 }4 O: L. O
紧靠其上添加:
% O2 m: q8 @- H- jif( pWndBase == &m_wndMenu )
0 s# T9 _% d9 E( R* [& C. O. H _{
3 B% @* N% f1 q1 D switch( nID )5 A! u; |" K v, ]
{/ O& F1 M. } ^: `6 K: q8 n' p. T
case 2:
( m1 _ w( ?: m! J. _ H {7 e/ b& ]0 Y9 I7 j+ H/ y
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 Y# K0 J& v6 V7 Z4 R( d% v/ T- X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; \" f3 y- I9 y" I9 C {' t0 {# g8 t; @/ H# Q
break;
( S5 n% g5 e6 Z# b' y }3 N3 `! C' g; d% r5 [1 m
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( Q) ^3 D k$ g9 S) ] {
' N) _* m4 L/ j9 M CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);# F" r) `0 r+ Q7 u- n
if( !pItemElem )
& {1 e! `7 a+ ]% ^: G* a h8 `7 a continue;
) W7 U( ]* Z& N* \8 l9 m8 x if(pItemElem->GetExtra() > 0)1 X P# t, _! T# s4 n
continue;% ?2 X. r1 h" r6 G3 m% s
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
2 a" P2 f; J; ^ continue;
# r7 |. {+ J+ e if( g_pPlayer->IsUsing( pItemElem ) )
6 x4 J; q4 d3 ` R! L: F. K continue;
3 B4 X3 Q, W. D; \9 n if( pItemElem->IsUndestructable() == TRUE ) T9 }: g3 f3 `
{
9 N& h- m/ @1 c- _% ^- A9 u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) @$ h/ e7 w( G0 z
continue;
0 L: M+ A' Z9 b$ J, Z4 H3 D3 b }
1 v9 N- n7 F [. e' N) ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum); P, P; ^" f4 m* }
}0 O. I2 L9 \ M. l2 ]
break;
0 r, I5 r0 ]* ]3 D; S F& S9 x6 U }
% }, W9 ~* P, b- l- J; H, w case 1:2 H1 i1 a( s3 V0 L
{8 k9 \6 Z; _: n! c3 @0 m" g7 U
//整理背包' w3 B2 D& d! r7 |) A2 ]$ D
//////////////////////////////////////////////////////////////////////////' h7 e% S+ z/ K+ ]+ o. @
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );: C, c2 _2 `2 o" N
//////////////////////////////////////////////////////////////////////////4 S* j% j6 {/ h2 E
//////////////////////////////////////////////////////////////////////////; b$ ?, h: f9 |# |1 C0 E
CInventorySort* pInvSort = new CInventorySort;
Z l* N$ c6 l$ m4 @ vector <sItem> vItem;5 W# K" _$ o' g9 O! Z1 a3 s2 u( d
vItem.resize(MAX_INVENTORY);//初始化大小2 M7 A8 ~7 e' B5 y9 J" W
//////////////////////////////////////////////////////////////////////////
; s& F% v) F/ ?3 z6 d //填充数据# k l) _1 D6 i
for (int i=0;i<MAX_INVENTORY;i++)5 j, f% t2 A: I
{
* C* ~3 C4 S3 ]2 a; C: M8 T$ n CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
S/ t' A$ V* j- @6 O$ {5 ?7 I6 Y c9 t if (!pItemElem)8 h9 o. q0 X9 Z2 ~9 R
{9 S7 q' [" |1 B8 y, ^7 |
vItem.dwKind2 = 0xffffffff;& v+ C4 ^- v; J1 |. b( Y
vItem.dwItemId = 0xffffffff;
$ O" t/ l- k; A1 g- c vItem.nIndex = i;+ _+ v j1 B( e$ E6 d9 D: B
}else {5 c" k$ F" ~5 a/ x' n+ i9 n6 @
ItemProp* pProp = pItemElem->GetProp();, X7 L+ v+ A1 C n
vItem.dwKind2 = pProp->dwItemKind2;
+ w8 ?3 n! l" S! D5 m0 t* I vItem.dwItemId = pItemElem->m_dwItemId;
/ I& D# k# j% M! G9 Q- w vItem.nIndex = i;
& ?! k; D. E& R }
! `" j' f1 G0 @+ ?5 v //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 z: T3 l1 Q/ V" V- S" w6 a" M( r. W* B6 { }
" I$ M! W7 ^! \8 l# x; q //////////////////////////////////////////////////////////////////////////
5 A0 j8 N8 D$ A2 |1 @9 I8 h! a sort(vItem.begin(),vItem.end());//排序
( }& H2 V# y* s' q% y. Y7 y //////////////////////////////////////////////////////////////////////////
: w( ]# i/ ?0 i, v& H0 c1 }0 o //交换
- ~( L) D/ N6 J for (size_t i=0;i<vItem.size();i++)' {: x, }& v0 w
{
$ n( s# U8 L) X+ l+ h. L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' S) X# U( P% m0 ?6 k2 o9 n
pInvSort->Add(vItem.nIndex);
( x7 V( R. a1 L6 E }
& `$ a R- e* R1 Q" b$ N BYTE nDestPos = 0;
# R1 }7 }/ c. t0 J' x3 f* F for (int i=0;i<MAX_INVENTORY;i++)
8 S; ?8 j7 Q: c( m& X% j {
9 ~2 k0 W7 A, A" h$ k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' F8 O1 H: b7 t" q' T if (pItemElem)
/ i0 T7 }0 M- }2 f- i2 @' |5 T {
/ m; X$ O/ ^* F3 Z7 D5 L4 b& J if (IsUsingItem(pItemElem)): a/ A- e( _7 h8 h; z, G9 W
{, P/ g0 D) m1 O) n
//这个位置无法放
" E" Q: Z, W3 G- b1 l1 d nDestPos++;
3 m* B3 O/ n( W0 T w! V. g. _ }
. T, `9 Q" P' {- W0 h/ @! E }
( }. {; O U! @4 F2 R: @8 M BYTE nSrc = pInvSort->GetItemSrc(i);( C# Y. v7 y% R* n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" z: Q& p* `! i+ c0 @
if (pItemElem)
) z% d7 I1 V* f {: N6 o. {) M* ?: Q$ `
if (IsUsingItem(pItemElem))3 G# M+ ~9 V. E; A# I7 T# I
{, ]" }7 ?% D9 P. v; s r; `
//这个道具无法移动,跳过6 S: s; s+ b# I4 x2 { }+ v
continue;- }0 O% U6 d L( U/ @
}
. k' k6 n! X" c9 G4 M) f }else{
5 g" l8 q' n b! d. k. X //空位置 不用动
2 l+ ~* {! n, W6 C; q4 Z& r* Z continue;
/ P& n* F9 i4 e1 l }
t; |) R% W% P& {1 J2 [) c$ s //////////////////////////////////////////////////////////////////////////
, ^9 A W: {4 l* C; m4 S7 H //开始移动7 n0 i+ ?1 s$ C$ k( V9 L
if (nSrc == nDestPos)- Z. Y' u3 x4 U* V$ B" l+ O# B
{: R+ C0 K$ i' J
//原地不动6 B7 c* m0 s5 Q8 h1 }$ K1 e! K
nDestPos++;
, T9 t' }) g1 x$ B continue;0 a; q1 {* z G. P
}$ H" g& Q* O# m( u& P
pInvSort->MoveItem(i,nDestPos);
6 ]& s6 d* F$ e- Q3 X b( W g_DPlay.SendMoveItem(0,nSrc,nDestPos);
3 n- k* @3 z- M2 _; J Sleep(5);7 d8 f; q8 `! Z& o5 R# N; D
//Error("移动 - %d->%d",nSrc,nDestPos);- ?3 i8 F) _8 B2 ]
nDestPos++;
7 D5 h/ M/ m5 F* m/ W3 _7 I }
) h4 |1 V ]7 r //取第一个元素的信息
% t) _7 }8 ~/ N$ W3 I /*6 w0 L3 Y2 D ~8 l/ z7 q! f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ L/ ^8 w3 Q' w {3 @! ~7 O- X: }, o
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! i+ |& g7 n1 l6 h! n6 g l b
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! l- `& b7 x! g+ o1 C! W2 H }
' C6 Q) w% K8 a, a4 |+ q9 Q */
* o2 O6 \! A2 ?7 [$ ]. f //////////////////////////////////////////////////////////////////////////* \2 N0 Y. X% N" e
break;
8 }8 \+ S$ O& T3 u& z: M! @/ _ }
! ?5 i$ C% }; F3 y* Y) @1 z }
; n- \8 x' w; O} J6 d% ?: T) k% R; J$ x
m_wndMenu.SetVisible(FALSE);/ U) u! Z1 K( s0 I# b! c
( e) K4 B, E5 p& P1 i+ S
--------------------------------------------------------------------------------------------------------$ q1 `: m; J- z v" B" z( `: M, P3 _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
* x- f3 a1 H4 R& P; P Z{$ q% \2 N- T# I; m+ [* }
BaseMouseCursor();
1 H+ ]0 ?) `' |+ t}
8 n( G6 i! F/ E; K" B在其下添加:
/ T/ h5 U H3 F( [, [. N$ \void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)3 Z& c/ } M/ j c& d) d% y
{
i# U f/ L1 e+ n$ M. q f4 {m_wndMenu.DeleteAllMenu();
p& v) n; L; ^1 }m_wndMenu.CreateMenu(this);$ m$ E: D- ~- k2 c1 B, p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, y: G }+ d: k7 K! d# i- R0 K2 M& ?8 V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 e2 P/ U1 o" R; R+ B{
1 u3 d7 B6 x4 t: P //P以上级别才可以删除所有道具
+ h* n: P- M) q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 E8 C# W \0 m" C+ v}
5 @: L+ I- o1 F( i" {# D' P6 o( C6 \& gm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
$ \" c+ e9 u7 z1 B1 G3 g# Z3 dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
% X5 [0 W% h7 um_wndMenu.SetFocus();; i4 T6 K: `2 ]4 H/ Z P: N
}
/ [# ?5 o/ F6 k. @0 ^% l; N8 m3 E------------------------------------------------------------------------------------------------------------2 V5 m% |: q2 d+ B$ s5 M0 C. W5 ~
*************************
2 G- ^, V* t& f( E8 ?WndField.h文件 M G& C0 q9 ? K
*************************& F9 n0 V5 Z/ F L# X8 d4 ~
搜索:BOOL m_bReport;
9 S( s( x- E6 v# a( Y( {' g其后添加:! B: \' L8 N5 ?2 L: u/ X, ^6 ~
CWndMenu m_wndMenu;
1 B! D, w/ s: e' e+ Z2 P: |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* S8 Y- h- A5 J0 W4 y; L* W- t \其后添加:
5 P. m& u8 w3 \# V5 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);
1 C5 p6 ~; H* d9 M$ O
5 G# j7 I4 ?( ~# b" ?1 f
2 `1 T5 t$ g% A G6 F; h |
|