|
|
源文件中_Interface文件夹下WndField.cpp文件: N# q) \% r/ n. o- B4 N
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )# }5 S" K6 o8 W, J1 }+ w0 F
1 v; E4 y! J5 R) N `struct sItem- {7 t/ W% Y0 l$ c
{
- J/ V, H2 I0 H& q$ o4 [% a# QDWORD dwId;
7 z6 y: k) n4 l' z+ wDWORD dwKind2;0 l" K0 O+ g, B f; D$ }
DWORD dwItemId;
; D2 p# @+ m2 p! r: h; u7 b9 P9 @) oBYTE nIndex;
6 {6 o/ n( s3 P0 ysItem(){
$ g2 F4 \' n8 f& ?9 n6 \ dwId = dwKind2 = dwItemId = nIndex = 0;
W" v3 k2 c$ e; k}* T' m+ y# R3 B, r/ g* R/ o
bool operator < (const sItem p2)* A" f3 t9 m n% \6 p+ b
{4 k8 o8 ~/ H4 G/ v9 J2 r$ P |
if (dwKind2 == p2.dwKind2)
" b) P8 _7 x, E. l {
9 Z5 }2 i& k5 S3 L return dwItemId < p2.dwItemId;8 _& ]* V9 p9 A% m2 {' u
}else{
$ |6 V- p$ h: A0 r$ T, n: Y) o' ? f return dwKind2 < p2.dwKind2;
- ~1 ^% _+ V3 t/ I t& [; z, w }
& J# I7 J/ x* ]/ ?* `0 b% ^}
! \4 @) @2 n2 t# _};1 `! @4 ?" t$ `) o; p
class CInventorySort
3 D$ z1 J1 S, W9 w) c0 S{. o2 z' p8 x) A0 M* |3 G
public:1 h* a6 _( T7 u7 t1 _
CInventorySort(). L& }9 X) `. R2 s# Q
{
+ \& o/ |0 n. k l; s" D' Z% m5 Z m_dwPos = 0;3 k1 Z0 X9 x/ {
}( @* @0 _9 q) u, f
~CInventorySort(){}0 o: k+ L2 ? l
private: W ?# } ^+ X" b
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 U( b u# N) J1 S e" `
DWORD m_dwPos;
( {9 N' R& a2 f6 @! r& B% ipublic:0 I- p; A& i& Y
void Add(BYTE nIndex)# X3 ?3 Q' g9 J& S
{2 B1 P! G$ y2 y& u" B1 u) {. _! Q
if (m_dwPos >= MAX_INVENTORY)% }+ J* T. T& Z) s8 G
{4 K0 H* j# ^7 q2 _5 ^. }
return;# S4 T, @1 A6 O. o' C
}2 F9 C9 I/ J- \( g1 E6 \: n" @
m_Item[m_dwPos].nIndex = nIndex;7 ` ?9 d# e2 n3 h7 m1 |* Y; j
m_Item[m_dwPos].dwId = m_dwPos;
, r" H' x8 @+ Q6 [# K8 ~/ z3 S m_dwPos++;
& p/ A/ R2 {) K6 N}
8 [: ]+ ?' i& X8 Z4 V/ u: u2 VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 }1 E/ v7 E! p1 b+ L! g
{
. M! B, D$ X0 V1 s- F* h for (int i=0;i<MAX_INVENTORY;i++)6 O. m7 r* X& W m
{
; P. Z& E- a. k7 ^5 L" q& y4 c if (m_Item.dwId == dwId)
7 c+ \: P; K! i1 v {
8 D3 e% p& |/ f% m/ a return m_Item.nIndex;7 r" V: s, T8 B8 ]1 f
}
, h) ]- k. ]8 @# u+ d- ~5 i& K }
y+ }8 ?' ]. L2 K G, \ return 255;
6 G; q4 G( j' {2 D: @ M" [- E}+ N) U3 J! v6 u
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( s9 a' d9 q+ g3 v9 o
{
* H- w7 x7 o$ K; R9 u0 r- Y BYTE nTmp = 0;
9 i) u$ o: C) L. J* w2 o; L; ` bool bDest = false,bSrc = false;
5 y, X1 t p b0 q9 Z/ K for (int i=0;i<MAX_INVENTORY;i++)
. J- ~- u, T |0 J {
# v: C6 |4 a1 T" @3 Y6 H, {. b3 E' c. G if (dwSrcId == m_Item.dwId)
) l4 @0 o* f1 f) _$ ]+ @! @ {) T) Y' Y d9 p2 G
//id相等 则 改变对应的dest和src+ X& a: p# G% W3 C6 M
nTmp = m_Item.nIndex;: G" U2 C' F/ `- m
m_Item.nIndex = dest;
# a0 K7 V' Q+ i- n, f }5 ]: h0 Q4 g. {! ^3 `& G# W
}
( s: K7 {4 x) @# L1 r% d //临时数据保存完毕,交换开始
( z5 l* y; |; ?2 Q: ^) a5 n( I for (int i=0;i<MAX_INVENTORY;i++)1 p! P& ^) T, S8 @
{
% P4 ?! Z, O' N+ m7 i* n0 b, l if (dest == m_Item.nIndex)- W0 }" P( N/ ]& r3 y$ Y/ r/ R% s
{8 P" j, F1 o4 r* r7 j
//id相等 则 改变对应的dest和src
X. c- g# j, T. Q m_Item.nIndex = nTmp;9 q$ K1 y+ Q; q& h& [
}2 f1 f. |8 S0 Z* x J
}5 }; y8 N% @3 c; z0 k4 X- N5 }
}
+ F, H; \+ H( R/ A/ c4 u1 g( y5 W};0 K' P' G' E& \- U3 C( Y& H _* {
-------------------------------------------------------------------------
* x0 {: Q% a' ^9 g! k- @依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 { i6 p0 z7 A* e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
w1 y5 Y6 Y) W紧靠其上添加:' e8 c) e7 m( P* Y4 l' C4 m
if( pWndBase == &m_wndMenu )) R9 R" p# F5 d/ p" I8 p; e% b6 H* I
{: u T& R; g V3 J8 ]+ ?
switch( nID )& d) g1 U9 K9 ?1 I
{
" U1 N+ ^* f; i. z9 H+ N case 2:
, I/ A# i _$ m( U {/ q' C% @+ W& U4 ^( s! ~
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);: ^9 P. `" Q- ~. I% Z1 X
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 h: L3 m1 r! ]$ [
{
, h* K0 u) i7 y, x5 v break;
$ w3 L1 T+ u% Z1 M6 | }5 S) U" X6 I9 F6 P }$ R2 Y# K7 w
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ r- q0 f |& s! p7 z
{& D1 |! }, L7 O5 K2 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 Q( H O. p# e+ H3 f: `0 L0 Y% K/ P) I
if( !pItemElem ), w5 i* L4 Z- D* m; F/ Y) t7 G
continue;9 B( } D/ M: y- C, x
if(pItemElem->GetExtra() > 0)
- C" N0 i' H6 q0 S continue;7 o3 H6 c8 I: j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 t- V( n! o+ @0 P: A s# L
continue;, }1 a" ?: C R' K# a! Q
if( g_pPlayer->IsUsing( pItemElem ) )% I) p. M7 Z" K) r, n! D, t
continue;
% b1 E9 r. P8 x$ J: V& o if( pItemElem->IsUndestructable() == TRUE )
) r) a C" W4 G) `$ f4 }8 m2 ~4 B {
' B3 X: v4 g8 p1 `4 g1 i g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( f# _& G: N5 i h
continue;' L& ^' ?% w: W
}
% ]& z1 H3 e8 C; E; q g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 s5 N. M' z1 m" s }
; k, C- |! S" F& c- }& [ break;2 h2 k3 X. z$ `
}8 s1 z% J$ W( \5 q1 t) _* q
case 1:4 P% z4 ?$ P' S* [
{
2 X: C6 S, f0 X. Y6 s, D //整理背包
/ A2 a# X: N/ B //////////////////////////////////////////////////////////////////////////6 m( w5 s+ r4 O) I' L7 ?5 W
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- ~! Y5 e9 [) G5 v
//////////////////////////////////////////////////////////////////////////
/ |' w7 s5 Y. ]! o //////////////////////////////////////////////////////////////////////////$ p4 @5 |1 K0 F6 |
CInventorySort* pInvSort = new CInventorySort;2 u5 j7 N& h' B/ x6 s0 I; ~% @
vector <sItem> vItem;9 \$ }1 R" Y6 t' _5 N. J6 }2 [
vItem.resize(MAX_INVENTORY);//初始化大小5 a: r1 I. Y0 x* W) ?
//////////////////////////////////////////////////////////////////////////
6 Q4 M4 u8 a- Y. z1 E7 q3 D* ` //填充数据8 f5 D& A4 q$ Y
for (int i=0;i<MAX_INVENTORY;i++)' Y6 F2 K& {. z
{' @, c6 F7 j. J: T) g% @
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" l8 L$ B& l# f+ p0 U! V0 _ if (!pItemElem)
1 [- t/ n& }5 h$ O3 a9 ] {
: @. y, \! H- S7 e- Q- n: X! h8 T vItem.dwKind2 = 0xffffffff;9 _* X9 ~6 H6 m9 j6 \: b0 m
vItem.dwItemId = 0xffffffff;
! R9 d0 a$ r4 a+ l0 W1 y& _ vItem.nIndex = i;
5 |! F, ~9 v7 c }else {
- O9 b; t4 w2 n( d* g ItemProp* pProp = pItemElem->GetProp();
2 @7 T; C! S; x. G, O vItem.dwKind2 = pProp->dwItemKind2;8 s: O6 }$ D" e4 P3 X
vItem.dwItemId = pItemElem->m_dwItemId;' d& z7 @2 S' h* ~" r2 S7 r1 v# _" V9 t
vItem.nIndex = i;6 J! e! L8 Z) X6 l/ q0 s% b" s
}# ~# U; _0 ^+ W2 ~; S; P- Z
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 |+ l! G9 X4 ]; M9 r% _ }" T, k+ W; \" Y( ]" P
//////////////////////////////////////////////////////////////////////////6 J3 n. S5 S) H: C9 d4 ?
sort(vItem.begin(),vItem.end());//排序
( m( F/ Z' e! ^. E" M% F) f //////////////////////////////////////////////////////////////////////////
. o: \9 h2 A+ Z* n3 D* `3 g //交换
: `( G8 ^2 {0 i* ~$ A5 C for (size_t i=0;i<vItem.size();i++)5 a$ l# s2 q% U7 K
{
) Z) r0 }+ y. v2 X: U) z% h5 e //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 F* z" c* v5 j
pInvSort->Add(vItem.nIndex);
5 W3 m: U) q7 L6 }, M( Z2 U0 _ }
, y+ H v1 z0 I; ^ BYTE nDestPos = 0;/ _' i+ x7 M9 H# i& ?7 z
for (int i=0;i<MAX_INVENTORY;i++)) Q& t2 N4 m% j
{: I$ ^/ O1 L& ^0 e3 `1 H) N! ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);) w! X* L% C' _+ e/ Y- d9 w
if (pItemElem)
+ s9 F5 Q. k$ b, Q {9 s8 ]2 c' }: o7 s. D0 t8 \# R
if (IsUsingItem(pItemElem))
, s$ d, ~6 L2 Y2 R2 s8 J: D5 ^ {
$ x& k& o- A$ e( e //这个位置无法放
" V, w/ l: {2 e. H5 B; z nDestPos++;
4 [) ^2 n6 h9 @& | }
- [! m/ I/ ?& A: p' C; H; R! S I }; |3 f9 U6 s- v* F' O' h
BYTE nSrc = pInvSort->GetItemSrc(i);
y, X6 |& d0 W7 Q: K8 [ pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ k; W1 l3 E1 i" P/ k
if (pItemElem), D7 R Z% H: ]: n" }0 I7 [
{% e( n- ^$ A- O. ]
if (IsUsingItem(pItemElem))% T3 u3 D; S$ O+ B; q
{& i/ \! A: \, M8 S3 D( n$ d6 l
//这个道具无法移动,跳过
$ w% p: T) O/ D2 Q/ Q. O continue;
- m& F6 G* {( E, H# t; I }# B8 g) j! W& g Q$ O4 q$ Z/ f) w0 y
}else{
; B y, }9 C5 u% i& B //空位置 不用动
) n- ~1 W/ |' X | k6 i/ T continue;
% Q9 W$ F% X; A0 m: k }# K _; z; j3 q! H% q5 c" p; o
//////////////////////////////////////////////////////////////////////////8 G% L9 y% d% D2 R$ j! G3 @
//开始移动
: a* i/ R# S) z5 }9 M2 ?" ~0 _ if (nSrc == nDestPos)
+ }* s, D; C- k! s/ m- h {4 P A D3 D4 u
//原地不动
$ T f r1 _ Y. c2 [ nDestPos++;
7 }& n* n6 Q' o continue;5 A: D- Z. g% S. Y
}. q. s1 {0 G B! O8 @, r# |
pInvSort->MoveItem(i,nDestPos);* k; `8 r! g" ~4 ?: K, l# h8 {( ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 f7 E9 y: I; }0 h" L+ M& P
Sleep(5);
% P- @/ O* Z$ {- I+ Y //Error("移动 - %d->%d",nSrc,nDestPos);
* Q, }" h% ~$ c9 g* }0 N nDestPos++;* q/ h3 ^ h" _* Q- T) u
}
# W& w. D) l" I/ u- l, n, { //取第一个元素的信息
4 j( W( t3 J, G+ R/ S+ _4 a /*( Q" m- ~8 Y6 c3 W. r
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! i8 Z! w& B5 O# }. i {" h2 Q3 b( E' K" t- i! Z: K/ _) S' G3 @
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
" R2 S- |9 O ] K% R5 Y! F g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- p# O r& X4 z& \ }0 G0 g% N( r/ L! U7 [
*/- e# n( I2 Y! m
//////////////////////////////////////////////////////////////////////////
6 L- y! f$ p* g8 l' F break;' Y9 A8 P) V) i! e/ M
} i8 Q: G. ^# L( ?4 q$ j. t0 ~8 I
} ( b% X" i" a% y- ?" L
}
3 W: e) g) U) _9 R9 r+ }m_wndMenu.SetVisible(FALSE);0 @% V1 r D; A* g
. K2 ?& e" l- F; q9 F# M! u
--------------------------------------------------------------------------------------------------------& o2 ?+ Y# l6 H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 a: J3 T+ u6 O; N n+ ?- e/ N1 t
{
' y+ c2 E# y4 T# p1 LBaseMouseCursor();
/ _$ ~$ h2 T3 t: j- _- |! z: h}
7 G$ ]6 Z8 W6 w; R( }0 C8 {+ {% d在其下添加:
5 _! `. y# _" J' L( Evoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 O) l/ G5 l; h
{' R; b7 s, ?* {
m_wndMenu.DeleteAllMenu();
: L" n: o/ I2 {, [2 Z1 n# ]m_wndMenu.CreateMenu(this);) }) |6 B* Z x5 P- Z+ w; E
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
. h; G" W$ M7 ^& b+ Z0 g! f( @4 \
4 `. U2 Y2 x$ O7 dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 e' ~9 N9 {9 O2 f2 U" o) v
{ S) g3 y6 g$ q4 I( C' D
//P以上级别才可以删除所有道具
! H0 o/ T5 {- ]! S, V3 H0 c' G m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 z( I/ S& M& f) v W1 f}; Z4 z, r5 D7 T% W3 Z
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ ~4 Q, U9 y; S2 {
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 D; A" ~! |/ n2 X, B, Z9 y
m_wndMenu.SetFocus();9 g0 i& W; @- T5 m, W; n
}
* ~- t8 u0 `* `2 a. x! P" ` d------------------------------------------------------------------------------------------------------------1 ^- O$ a3 }7 }; }. q M
*************************+ E/ V) d) @7 N h
WndField.h文件- @# Y* P$ r Y# \) w) T2 ]; n
*************************2 S' Q( c k5 \1 W
搜索:BOOL m_bReport;
7 V. j) g1 x- p/ L其后添加:5 f$ I. j7 a2 b. @
CWndMenu m_wndMenu;
2 F- Y# T- o* U; ~) Q' l6 E% r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 J9 L( V ~) A/ U* f! M
其后添加:
9 u4 F- @7 m' ^" x+ v& Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 E" Z: ]2 [7 g- s
8 t3 C8 n6 o w0 _! N. W
6 P" I& s$ e1 b7 I; C6 J+ X% z& z |
|