|
|
源文件中_Interface文件夹下WndField.cpp文件* c( L# C$ F# w" ]9 Q' a
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% V2 W& s9 T$ {( x- \
# L" S' F' A. _2 n. U. e
struct sItem& f5 f i+ G$ n- |7 ^/ q/ K
{ M8 a7 Q6 K$ X, L4 ]6 L( p
DWORD dwId;# j9 [1 {7 r% g: s1 B- v; n8 {2 H' F
DWORD dwKind2;; Z6 o, g+ H+ Y5 w0 W h8 Y
DWORD dwItemId;
& {7 [0 }: }: E8 w5 KBYTE nIndex;
) ]3 r% O; y! v6 YsItem(){
7 z9 x' R) q( Z; A& R dwId = dwKind2 = dwItemId = nIndex = 0;
$ t; M# V" ~/ ^& [}
6 v; \$ k5 r0 u1 S @8 A+ a6 ?* bbool operator < (const sItem p2)! c1 g! k: ~' ^$ X8 R. w2 ]
{
* G; g$ f8 A5 q. T0 U3 T if (dwKind2 == p2.dwKind2)+ |1 w" h7 z: [5 z" D" V( V
{) }- K" H$ `- w6 O0 L D# ]7 v
return dwItemId < p2.dwItemId;( ^# U: [% R1 r
}else{9 T( I2 ]4 V( K; G4 ^ G/ |* J9 O* E
return dwKind2 < p2.dwKind2;
' `2 s+ q2 H( ~ }3 y( l- K0 A, T4 L
}
+ L' m2 Q, I0 A" T$ ~+ T};
2 z( E8 i; d' H5 o: w6 b9 eclass CInventorySort
) E" i( n& T1 N2 l; B6 @+ Y{
0 H4 Z, ~ W& a0 I* G. \: P3 j; Tpublic:
+ r% h! k; F5 f8 G: L% lCInventorySort()
C4 P4 P. o2 h& M{" ^1 v" r j- M m: a. H
m_dwPos = 0;. ~" p5 q) |/ P% H- u+ \$ _' f/ e
}
9 n/ M/ j' s$ b+ w" s1 Q~CInventorySort(){}
4 ]/ Z& h5 f: L' p7 b. Bprivate:
' s( K7 E4 r) r) o. T+ E% RsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
; O A6 `0 X3 K" H% ADWORD m_dwPos;) c* j) K/ a& b5 H6 k
public:
9 \7 P) t; D6 V& y2 }void Add(BYTE nIndex)- l( w+ u6 c# u& J5 t# q! N9 N
{
4 W% m, r1 N5 z& {4 l if (m_dwPos >= MAX_INVENTORY)
+ }0 c, W% Y- y& h$ ] {: w9 O7 ~7 ~- `5 [$ x5 c7 W6 f
return;
" L$ ?" Y: V$ C v8 d4 Z: f }
% F6 \. z" `7 x( y5 W6 v m_Item[m_dwPos].nIndex = nIndex;3 R5 A! q2 ]- ?4 [' F7 ^* @
m_Item[m_dwPos].dwId = m_dwPos;
2 }' T/ j: a) e; \$ B7 a# L' u m_dwPos++;
7 x; R2 u; ]$ A" ?}/ ]# e: j$ v0 S" M+ C0 m e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 R9 F! e2 B3 w
{
' e- ?# D8 r. q0 b9 n: }7 q for (int i=0;i<MAX_INVENTORY;i++)3 O6 Z/ r- Q A3 r
{* P3 N" g ?) _$ e* T% L, z
if (m_Item.dwId == dwId)
( E Z7 ~. t; C' |, o {8 `. x6 O8 y; v y: Y
return m_Item.nIndex;- A; X" Z- V8 C H8 n( k
}( g9 t* O2 X) g% c. ^
}
$ W; c; g2 }! n$ g2 K( C( i return 255;+ i m2 j' K! m3 v; d) W
}
2 i( S$ M5 y8 y! i( E0 R" I/ }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ E x1 p: z8 p k; d{
6 a* B- O9 C- N* G) V BYTE nTmp = 0;* U1 |- C4 z ^- r
bool bDest = false,bSrc = false;
" D1 H) E* n# j9 j for (int i=0;i<MAX_INVENTORY;i++)
& }- a, m3 g* ^* h0 T {
! O; y( L Z6 ?- R4 B7 R" o0 z if (dwSrcId == m_Item.dwId)
$ c3 I: X! m0 ~8 a+ p- ] {
9 f. s* z2 g) U* Q; t ] //id相等 则 改变对应的dest和src
& o: _1 G/ ]1 u \ nTmp = m_Item.nIndex;$ x; Q$ d! P/ B
m_Item.nIndex = dest;
( C7 x) B0 O. s }4 Q5 v% h. { G* U* Z; i6 I/ K6 ]$ B" B' L
}
6 \ l% F& q* r6 }0 B8 p, M //临时数据保存完毕,交换开始2 m0 u w% @' R1 |# ]$ ]
for (int i=0;i<MAX_INVENTORY;i++)3 a Z3 h# c6 k+ {( c% ~% w
{# x9 B7 g' e: }; U0 D
if (dest == m_Item.nIndex)
o. F1 I# u% Y* h, m" u8 Q6 J3 L$ U {. y7 g0 Y+ P7 ]" `5 d: p
//id相等 则 改变对应的dest和src
" o! z9 J* B+ a m_Item.nIndex = nTmp;
/ R$ g4 r8 R& J$ F4 T4 p* ? }: B! A2 B( Y1 g! v3 @
}, D( P5 E& e$ m4 f& K# V
}
4 x6 a3 R5 P( q( z e6 Y};
+ G3 S1 S/ [' U-------------------------------------------------------------------------1 V& C2 M) h. F3 }& v2 \5 ~/ C$ X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# n9 }/ u2 W( g7 [/ K0 K) O* V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) r& c$ Z3 S" w0 g( {, M紧靠其上添加:* R6 A/ ~+ y7 _" }2 T8 B: b
if( pWndBase == &m_wndMenu )
9 k5 o8 Z, Y) @! w{: k5 \& @4 H; X9 ]6 q ~; z
switch( nID )1 a6 a }6 n/ H
{3 z/ [" j$ m7 ?+ H! J. |
case 2:
) u) i- `/ D7 D {
1 {% J) j9 I7 n- k0 O, V //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 o+ t* r0 o2 n! M% I if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& t9 v8 c: Q0 d0 h/ ^7 Q8 N! P
{
5 s/ z. A7 y* P5 ]) d7 Q/ f5 U break;8 F3 O& N% r8 g! c/ i4 I# ]$ z0 l
}
4 L0 q/ L3 q$ |! \8 G/ M! z5 ~; } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! I/ b- O& c0 g7 F8 ]* A ^
{
; ^9 F% F3 U/ g. g4 B CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* _5 q3 D% G6 z6 s9 e g9 M* B& @# R
if( !pItemElem )4 J8 W5 \ d+ @+ P% q
continue;% e4 s; r/ G5 s' n5 b, C, A$ D& g
if(pItemElem->GetExtra() > 0)
! G0 S# o8 L7 m8 R7 M continue;3 G) j9 p1 u: S6 U3 j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
) l2 `9 @! v0 U/ k* j+ ?( m V continue;4 m4 g; m$ r* \3 W: h/ z- |
if( g_pPlayer->IsUsing( pItemElem ) )
3 O1 V7 _$ w& Q continue;- b5 X _( ]" L8 U& U
if( pItemElem->IsUndestructable() == TRUE )
& t- n* O8 ?/ { {& Y. t5 P e. S4 Q! Y
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );7 ^2 K' j; P1 A( n
continue;1 s: G! P6 \) Y+ A" [) D9 u
}" g$ C5 G! t6 B$ }4 B* F) G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" I0 s1 o7 D# Y }
7 B6 e1 W) b2 ^' Q1 e% z break;8 Z7 H; j6 h/ }$ o5 i z
}* T. ?: B6 H- [7 e& c6 K1 ?
case 1:
7 d/ `( E' H7 P" k {/ L8 Q e0 u- X; m
//整理背包
4 n! i9 c/ k% E8 q# k2 j( O //////////////////////////////////////////////////////////////////////////
9 R5 G3 Y+ i, F* N& P //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 S. q! v {5 y //////////////////////////////////////////////////////////////////////////
5 v) Z6 s7 A, p: g3 t( I //////////////////////////////////////////////////////////////////////////, X# }. t6 N1 I# W
CInventorySort* pInvSort = new CInventorySort;3 Z8 t5 R% C3 T
vector <sItem> vItem;+ X$ d/ v. j) V' y0 w3 H
vItem.resize(MAX_INVENTORY);//初始化大小& p* ^# g7 E y
//////////////////////////////////////////////////////////////////////////
9 w; L5 Q9 r1 t& B //填充数据
! v% P1 _" ^ x$ M5 N for (int i=0;i<MAX_INVENTORY;i++)" Q! e, K2 @/ Q d: b$ a5 `
{
$ q- Y. Y7 v) I ~/ j6 ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 E7 L( O' z* k" T, Q7 a3 N: o* @7 u
if (!pItemElem). I$ I& {/ c2 `/ Q# _7 r) q
{
8 n; k" | B2 V' N( e1 @" V) R- e vItem.dwKind2 = 0xffffffff;! _0 i; S, O* a7 g" y% T) ]8 b
vItem.dwItemId = 0xffffffff;9 A, ]0 N# K0 }) T# K
vItem.nIndex = i;
) e3 G4 d* I9 C6 a7 s }else {
, { k) s5 x0 k ItemProp* pProp = pItemElem->GetProp();) B, ~1 x- h1 [
vItem.dwKind2 = pProp->dwItemKind2;+ a1 y4 r1 h) B. G
vItem.dwItemId = pItemElem->m_dwItemId;- ~: M0 {8 V# P" G$ Q7 O
vItem.nIndex = i;
5 O# e* Z7 c% C: Y8 G1 X% E% b }
! ^- K( y8 J1 k! y& J; s2 m //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);! l" x: N& \$ J- `. [/ J
}
6 ?; s, s8 e+ O1 p ////////////////////////////////////////////////////////////////////////// d6 {, ]) o1 y& `& T% h
sort(vItem.begin(),vItem.end());//排序
* v' d$ P, L9 T) g, R+ x. A //////////////////////////////////////////////////////////////////////////6 g5 _ r+ g" P
//交换1 n P) o: b! d# c& L% D/ q0 K
for (size_t i=0;i<vItem.size();i++)
3 J/ E; u8 c* j& _& F7 ], ^$ f. x {5 G8 ^" N- F& I( W) P p
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& x. R3 J9 L7 x6 g pInvSort->Add(vItem.nIndex);
( Z7 B1 ]+ S6 ^5 L2 b6 o }6 d# n+ f, V7 B; F. s' R9 z, V
BYTE nDestPos = 0;
! s/ }/ ?- t s# N3 U for (int i=0;i<MAX_INVENTORY;i++)" F6 w3 e, {: U8 Q" b' d y
{& l, n& @0 [6 I) P
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 U$ `/ |& T, z b if (pItemElem)
; z9 R. _' T+ g- S) Q, k {
$ S0 n) {6 T3 {. }) |3 L9 [' ~% i if (IsUsingItem(pItemElem))2 j8 B. `# F+ v9 X0 c, b; T& [! U% f
{, `% \% j) N) f8 E3 m; r
//这个位置无法放: f& Y9 W4 n( A1 r
nDestPos++;
5 z1 c' ?: v! W0 k$ b6 ^& S }, d. X) c S) S
}5 N u0 Q9 e! s7 f
BYTE nSrc = pInvSort->GetItemSrc(i);- O+ B1 p3 h2 q2 y
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 `. x- i: h" y, `8 V* V$ R& d( U, b
if (pItemElem)
; J5 D& c" Z: U& J3 ?- L& B {% E2 k/ U4 K" e9 w) M6 m! u
if (IsUsingItem(pItemElem)) Z& ?, W/ R9 N+ P+ l- S
{
0 l( m! g1 R2 C //这个道具无法移动,跳过
/ v" R2 x, a' _1 h/ {* f+ t0 e continue;
4 R, X. U$ o3 q# D }
' h+ b4 S# I. U: N6 ~% |6 }" S }else{* l8 s+ G! e0 T( X& Y
//空位置 不用动, x2 |* [/ P' c; I1 }4 k& n
continue;+ Z- O$ x5 C' k" j+ o
}8 I" t$ P# n9 v% H. W! U. W
//////////////////////////////////////////////////////////////////////////- ]% F; n4 x! s, w$ o9 S
//开始移动
) \" s3 M. e' E+ O3 \ L if (nSrc == nDestPos)& k( ~( B" _+ ~, |: C$ X
{+ B) o! L* b h6 |9 p
//原地不动5 v- { C5 c2 _/ ^6 G" K
nDestPos++;
4 Y: ?1 o/ Z! x; u4 l/ ?' R d4 y continue;
& A5 Q2 f3 ^1 Z- O5 D b }
U$ N/ u- @* W u/ r, |. k pInvSort->MoveItem(i,nDestPos);
7 j" W! W& I" a) E5 k% c" d7 d _ g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# K, M8 b( ]6 S: I Sleep(5);. G" G# |/ m6 R M% w
//Error("移动 - %d->%d",nSrc,nDestPos);
: t: J) N0 @& C5 {3 N9 S nDestPos++;
. g! T& g9 K7 U/ |* | }
0 Z+ P3 p; H! p% G0 o" @+ h //取第一个元素的信息% S: W( h9 ? T
/*2 k8 A: k+ o! }
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)- ], U; [. X4 Q
{1 x% \# Q, q! X' m% f0 O# O( I
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ I3 x: Y; @# z3 L9 x g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
9 m( x# q9 B( H# d8 W' }% r }
0 [; ^. t6 g9 r2 J6 f$ N */0 d* T: }" z+ W( j6 E$ d* D, y1 X
//////////////////////////////////////////////////////////////////////////2 v& d( R# Q, v3 L$ k
break;
, z0 j+ ~7 b, I/ [- J9 @ }6 y) V* e) p5 e+ }
}
# B1 p# l# _1 |" b! ]}
- ^$ N6 R: g8 e* w/ h% [$ X* L1 @m_wndMenu.SetVisible(FALSE);+ E9 E. a& u' Y W& w
. B: E, j5 u- x" a2 `2 q--------------------------------------------------------------------------------------------------------
% }1 C, M% ]2 m) B6 L# p! K9 A1 u搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& ^3 X$ c5 j' D7 }; r0 _{8 ?% J( l. W4 C ]9 ]$ s
BaseMouseCursor();- Y8 I. _3 W' n. [+ J8 @
}
3 T5 B! B2 D' L' Q) y- P, X在其下添加:) Q# H) |% f! t* v! F
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ r2 `, m' m1 y) L; ?1 T
{) k# s0 O u) ]' ~1 _) n
m_wndMenu.DeleteAllMenu();
& }6 S' \* x" R8 h5 ]m_wndMenu.CreateMenu(this);
9 y% f, n1 L/ A( {m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 W3 b1 g7 U# R' |& y, p3 {
. r( C2 t; q8 Jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- b$ R& S8 F" E% l% A* i$ _{
8 H; @! O4 i+ ]3 F/ K! z, i9 q //P以上级别才可以删除所有道具
7 l/ ^/ H! U3 R m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ B! S1 b5 o& e# U# K3 _}
3 m/ t6 c2 j* A. V6 }* Y$ X# @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: z+ w5 h5 }; Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 B' B! k. H+ W* @- mm_wndMenu.SetFocus();4 z% s q: ]+ R& \% N
}" P7 U9 V8 t6 z8 d9 q0 J/ E
------------------------------------------------------------------------------------------------------------" l2 s P/ Q) b7 Y
*************************( w: L5 s7 p8 z1 H7 g0 ~! U1 ^
WndField.h文件9 q# g2 a, E' _- V% Q" f: ^) B
*************************
! u- |) b1 m$ F+ J2 s( S @: h9 j搜索:BOOL m_bReport;, `" T8 o& | d
其后添加:
, J3 M( \9 V& z, R9 e& ~' YCWndMenu m_wndMenu;
9 R4 b7 b6 |# X. x* C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);% I6 `9 t5 y& m
其后添加:3 [% q {4 {/ h6 b, U$ S3 B
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 [9 v, Z2 Y; S0 Y6 C% k
# d1 p- n8 Q4 I3 R) K
: l: Q7 g0 E! }0 q5 |5 W+ p |
|