|
|
源文件中_Interface文件夹下WndField.cpp文件/ E- I$ [. R, Q6 u8 |9 c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); {) ?/ }( J: h% a3 `. _; x
9 `5 F9 L, c7 S# S% ^% B, V" N
struct sItem
" J e0 _$ Y8 ?{6 J2 F% \$ B7 }) V' B" |4 {# Q9 j
DWORD dwId;) m; g* v6 M5 W' X3 I+ Y6 s' f
DWORD dwKind2;! V3 W2 z6 I1 b8 q
DWORD dwItemId;
7 |2 X( N' i* g& u; P4 A' }BYTE nIndex;. E ]* ~" m3 c W5 q% F: B2 ~0 y
sItem(){
6 b @, Z8 S5 A2 ? dwId = dwKind2 = dwItemId = nIndex = 0;
! U( G2 t* S$ }, }& f5 N f) V}
1 H* u) q) s% X, y* Nbool operator < (const sItem p2): W& [; R) `! n! A$ F
{# |( M8 O, M& u4 s4 N
if (dwKind2 == p2.dwKind2)
. U- K; s( `* S2 [ {* P3 `/ e2 A- D; u
return dwItemId < p2.dwItemId;; M5 `! P5 |; Z9 `5 e- h* `
}else{% |$ K( X# O% j
return dwKind2 < p2.dwKind2;& |8 w2 V7 @" w9 ]) Z- d$ [4 y' A" }
}
7 \% K, ^0 _- }( T0 n5 F9 F}9 Q1 Y2 c! m& G3 f5 ~7 M
};
( b" j. ?0 v8 d3 _0 j8 Lclass CInventorySort( i7 M# k3 [# ~ f
{$ M7 q, _* f! G- z/ e) K
public:
3 V% X! w( n, }CInventorySort()3 I. ~+ V- Q7 Z2 J* }0 _
{! Q; [( q2 T& W" e4 d3 T' r
m_dwPos = 0;
* q: ~; H/ @ N}
/ A( f' h8 g8 Z9 F~CInventorySort(){}
- \3 D* D& S! Z6 f2 a0 Wprivate:
; S) F. t& X: ?/ P- O8 \9 ZsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( {4 l5 W5 Q1 H- F/ N6 h
DWORD m_dwPos;0 m) _6 d3 N. P6 R& n& Y0 _0 H" {
public:
" _+ ~. v$ E0 v( v, \+ B5 zvoid Add(BYTE nIndex)$ ~: |/ X( r' U- R' {; i% _7 d; I
{$ h- L9 Q: s2 P& I- s: K8 v# p
if (m_dwPos >= MAX_INVENTORY)
* B( D, D: j" }# ^6 L& P% m) q, X6 o {9 H% U- G/ O$ I/ \" G
return;
+ m' _2 {5 g* ~ }2 f! Z; M! o2 Y
m_Item[m_dwPos].nIndex = nIndex;
4 u& d4 D+ E; f0 f. S* ~6 h m_Item[m_dwPos].dwId = m_dwPos;; e+ l; o% Z, z) B* y5 \, A! g: g
m_dwPos++;
6 w+ z* i1 N4 U% s}
5 b# `! B( f' ^4 P$ N7 XBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 N- v7 t, A/ s( l4 `# H5 b4 |
{
3 B T3 b$ K( ~, {) q4 G for (int i=0;i<MAX_INVENTORY;i++)$ f, o: \: \, r$ w x$ T/ w' Z/ h
{2 O, D8 e" M( ]+ V% v( ]
if (m_Item.dwId == dwId)
% D* |% z0 y5 j q8 H {( s7 ~& s9 L% C
return m_Item.nIndex;
3 K" R+ Y! o5 K# g }( l- O. s4 F7 |9 t; Y6 v
}
d, H! z4 G' Z: v1 z0 A8 g return 255;0 F( M: N5 C5 q. m4 O
}
8 c r2 V6 V' Q3 Ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# b& ~, Q# B6 l' Y7 V
{
+ I( C( F. M7 w4 j2 ~ BYTE nTmp = 0;( j I0 A4 t( k& D2 z
bool bDest = false,bSrc = false;
" _1 F) {1 Q) B: H+ b2 M0 W for (int i=0;i<MAX_INVENTORY;i++)
2 _5 T/ t0 ?4 B {
! U4 D( R$ v7 v: j( y/ U: ? if (dwSrcId == m_Item.dwId)5 B1 \, C; }" @9 y7 ]' c: }
{
# B3 _4 A/ i2 g# W2 T //id相等 则 改变对应的dest和src
0 D( Q2 H0 K7 A% ^: H" Y9 ` nTmp = m_Item.nIndex;- T* O' a8 L6 A j( F
m_Item.nIndex = dest;! ~; Q1 m% {. e
}
* q; R. y% R- ~ }8 I. {( h% O0 e2 f. J
//临时数据保存完毕,交换开始
/ B, D y6 V& O! w- k. ` for (int i=0;i<MAX_INVENTORY;i++)
5 N0 x" _. l* G% A# r8 S {
9 @; b+ ~7 n) y+ _8 N f9 I3 n8 r if (dest == m_Item.nIndex) h9 \( I! {5 q( Z' r
{' J6 V2 O' g) Z8 b; O+ x
//id相等 则 改变对应的dest和src
8 e2 }1 w5 ^/ x& a3 \( }$ }+ ^ m_Item.nIndex = nTmp;
( S+ J; Z. M' X1 F* M0 Z) G0 O }% M, y; _( N6 I" ~$ A
}
7 O- v5 B8 O% f: X4 ]7 X. `}- p F. n% K+ S+ _
};; V* M5 [4 B, m) f
-------------------------------------------------------------------------# y/ h2 G( Q9 f2 h9 a0 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- Z# `4 `- H8 G2 o1 r搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 W- U+ L( ^, A. i! W: X, ^2 B紧靠其上添加:; k5 d+ I7 I! l: Q7 r6 e# A" K
if( pWndBase == &m_wndMenu )$ u- s8 W: k; o( P# B) y2 s/ N
{/ ?! V0 W( y4 ~* h
switch( nID )1 {- i: S, E" |5 y/ F$ T
{
8 U5 o0 Q+ o V case 2:
9 V1 _. s0 u) K o5 k* c, D$ m: ] {5 V" D# R( G- ]1 [1 }3 c$ R/ e* F( J
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ n3 k+ k4 g& v$ v8 ^: ?# o9 k if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ Y `; M& ?2 }- t+ [! s/ m; X
{
m+ r& ^" \3 H( A6 n& T6 d1 G* Q7 Q break;
# c0 P. I* N% J/ m8 H8 K( y1 j }
3 f. C' G' p. e for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)5 ?8 P; Q; v1 F2 o2 u* S7 O
{
0 d9 N% l! [1 u8 g- P+ Z( \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" V' ]( E1 ^! g) o9 S" e if( !pItemElem )
H/ c8 T8 c0 }2 {- r; S continue;
4 z: S, x" K* ~. M$ @% d# |6 ] if(pItemElem->GetExtra() > 0)
9 _4 A5 t H: [ X, F+ x7 G continue;
2 K8 a, a1 o, y ^# v) q% l if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 M0 }( y. t; R+ J! K
continue;2 ^5 j8 S& x5 A) f- g4 A5 r; x
if( g_pPlayer->IsUsing( pItemElem ) )! D" D1 F6 ?% v. `
continue;
' q# {% O- o! Y! k# C if( pItemElem->IsUndestructable() == TRUE )6 U& R) i) l3 O+ l
{
; N( r" f( `8 a" _: N3 \2 r g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. b' m% }2 b: H& m* l: Y" s! j continue; s3 S5 D- v; [2 `2 j# x' l
}
: r8 G% S2 G5 u/ R! v1 P* i3 d9 G# ? g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ H( X' q4 E2 g) U( U8 ?
}
: o- w; M- f' l break;" J( b% L$ C) m5 Y# V/ Q
}+ d. d9 k# [' }
case 1:
, t, e. C4 K4 I* y. w3 q% c {7 c4 X" m2 u4 v# p& F: |
//整理背包" r7 `/ r0 l4 D1 _; p) f! y$ I0 m
//////////////////////////////////////////////////////////////////////////; A E/ ?! @/ s$ {
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ s- t2 x1 H$ _1 q/ |6 I1 b+ C //////////////////////////////////////////////////////////////////////////$ g: q- c: z; `1 e% w
//////////////////////////////////////////////////////////////////////////
m1 u$ u& w8 i2 ^6 ~ CInventorySort* pInvSort = new CInventorySort;6 [% Y: h D; n
vector <sItem> vItem;
2 z E; w9 g* v( [' J" _ vItem.resize(MAX_INVENTORY);//初始化大小
- q; g5 r- v) z, I7 x# A& R- ` //////////////////////////////////////////////////////////////////////////* G, o" N5 M# G1 N
//填充数据
4 l U4 T* A: \$ F# R- D6 _ for (int i=0;i<MAX_INVENTORY;i++): R" J: n$ B' D1 P' V
{; k# X/ y: V- Y( t) A; C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ O' m$ c3 h/ V! [% t" N if (!pItemElem)
4 ^; J# g3 N0 ? {' o9 v+ {* q6 e$ B/ u, v2 x
vItem.dwKind2 = 0xffffffff; Y9 X0 ~/ D& N7 Q( v
vItem.dwItemId = 0xffffffff;+ h3 i) x. T% R/ ?( r; J
vItem.nIndex = i;/ w+ ?' {2 W8 }/ [- g) s
}else {
7 H$ j! f1 S `" ^ ItemProp* pProp = pItemElem->GetProp();
% x% p7 x! I- m$ D- P, h2 ? vItem.dwKind2 = pProp->dwItemKind2;+ K/ T! @9 S, |1 p3 K- q
vItem.dwItemId = pItemElem->m_dwItemId;
g) Z, A2 K5 N7 e- R, U+ L+ X8 j D vItem.nIndex = i;
- R P) P/ f( \. R+ T. e8 | }2 O0 y0 \0 J) u2 |) @
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& A7 F$ N5 J3 R3 j3 x% E
}
: R1 ]# `, t0 ]$ o //////////////////////////////////////////////////////////////////////////% i. T& U9 s1 H* g
sort(vItem.begin(),vItem.end());//排序; P) b; w3 x; ?8 d! c; n$ n' b5 R
//////////////////////////////////////////////////////////////////////////
5 Z5 w# {3 {7 Q //交换
' [2 S y7 l4 i( _3 g for (size_t i=0;i<vItem.size();i++)7 R. n3 U5 Y5 E$ _5 s
{
5 s6 B' e) X" W& n4 Z //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- W) q- J i9 T1 E6 f$ k( F
pInvSort->Add(vItem.nIndex);! ^7 |' O2 r/ t, Q( H' H
}5 U8 o3 t# ]# R! m
BYTE nDestPos = 0;
0 j% k" t& `& g0 e3 i1 m+ F7 {, I+ S for (int i=0;i<MAX_INVENTORY;i++)
- P2 R* F8 c1 i+ U. X {
8 F9 d* t# m7 P" C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: r) z: g# ~" R9 v
if (pItemElem): D7 ~8 Z! B8 b
{
v# Q9 Y8 n+ y" Y' r6 E if (IsUsingItem(pItemElem))/ q/ W; [6 v, W4 H( d9 I
{
8 a) i+ u+ I6 U m& L //这个位置无法放) ]/ a8 u2 S z: F, b: i
nDestPos++;
# e \) C% Z4 n1 }) x }
' i ~5 z# {0 {/ b! d: n: a, C }9 R1 L5 s0 a; m! U4 I
BYTE nSrc = pInvSort->GetItemSrc(i);
$ a7 V- K- E' P; \5 q9 g pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# G' D7 `; M. z# |
if (pItemElem)# h. x+ N/ @6 D. p, O3 r
{
+ c5 o! }0 U4 u$ P if (IsUsingItem(pItemElem))
, r) h; ]& _2 f1 P' K5 d4 m {2 F3 n) R" Q# K5 [# o. w; q
//这个道具无法移动,跳过
, m3 f' ]' o" ? continue;5 {8 g; h1 c% J# O0 N# t
}! d4 h1 N/ N5 _& L5 M
}else{5 B/ r4 f, @! U8 N$ p( q" C1 x
//空位置 不用动
) J v$ r4 x' @ continue;
" N/ i6 p- L# p X! v3 \ }
! W- `1 H0 A8 N0 ?: L# B8 w; _ F //////////////////////////////////////////////////////////////////////////) m7 m5 C. ~% r, K2 j2 D; j
//开始移动
i7 L) O5 v2 C5 Z7 e if (nSrc == nDestPos)
: C# U5 |; {2 S0 J$ V6 X" W6 j6 s3 y {
8 e+ M; ^) V" E1 R8 B //原地不动# w2 y1 M) K3 P* V! ~' K5 y
nDestPos++;
; Z4 S, M+ [* a2 H; P* b% Y/ e continue;
& j6 C& y+ p% c' g5 X/ N }+ b( C3 J* e0 v1 [9 U! |- p/ E
pInvSort->MoveItem(i,nDestPos);; _7 {( z4 W% B. r0 o- g' K
g_DPlay.SendMoveItem(0,nSrc,nDestPos); i9 \/ s+ c \3 i K
Sleep(5);
, k# p" Q3 [+ ? //Error("移动 - %d->%d",nSrc,nDestPos);0 K/ m9 g D2 m4 g- y
nDestPos++;; J8 [5 W6 y7 h* v. I/ q
}
7 J2 v) P5 G/ @ o) h% k6 f$ C9 l$ Q //取第一个元素的信息
! o9 v% {9 W8 e8 x; [: p /*
' [" v7 D3 Y d1 G8 [ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ z- D' f( J: ^! K* b
{
E% L. s, x0 w. S Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 i2 W' j" g3 j. q; e g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 a0 H7 I: `0 `5 X
}/ k. Y6 ^; u$ J1 t2 w
*/
+ t* x/ Q' U/ s8 ?6 m2 R //////////////////////////////////////////////////////////////////////////
$ g C# B6 M% v% d/ m break;
, a' }5 [& d" \ E/ y$ e4 k }
b. u5 e* E0 \0 ?9 \ }
: Y' Y. H1 S5 U5 H; c7 s8 h `}
4 R& E# Y1 {- a/ B& N& Cm_wndMenu.SetVisible(FALSE);+ r$ Z0 w3 m H0 M" h8 E+ Z% T
, N" E; W# x, l9 P' L7 I
--------------------------------------------------------------------------------------------------------6 n6 u5 {6 [; n* H) [( f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- V! F" i* a6 x" _% T8 o
{6 n# o7 O$ ]. k6 P4 |( e4 o) [
BaseMouseCursor();
8 x" H) Q: j3 f2 F/ ^' Y5 X}6 E7 M- M s/ f3 ?/ V9 J& c3 j! `
在其下添加:$ |% B/ M0 A# D5 G
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point): r% ]% R/ @ ]/ M- t, v7 \* n# A
{% {- h/ @% I2 Z- o+ N5 X ?" V
m_wndMenu.DeleteAllMenu();
# K7 `# [( t. O* M* G: em_wndMenu.CreateMenu(this);- \ q9 |7 J; s4 U4 N% [, K+ W
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
N# }1 A( M8 O' E/ {" ?
7 ?- D+ I2 b- v# g+ l# Aif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 S) Z1 l) e& b4 ^4 A$ E6 _{- B$ n: K+ s9 {: T7 z! q
//P以上级别才可以删除所有道具
+ C7 m: t& e4 j: Q3 h/ O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* `; c6 E: W0 ~+ r( V
}
2 Y4 v% W: i( m8 D; l6 r9 J4 L' ~$ wm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' k J9 B& q3 z8 Z3 Y, r
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ S6 @( ^& ~# a! I- D
m_wndMenu.SetFocus();
* e6 Q1 a9 }, D: j" L. j}7 N$ U# j2 p, w7 A3 B
------------------------------------------------------------------------------------------------------------$ e1 `5 z3 J) j
*************************! _$ a3 R, X/ \2 ~" D
WndField.h文件
: C/ |! Q4 m$ k s) _, _*************************
5 |6 i' z' x. s- F7 G: m% v搜索:BOOL m_bReport;
# G6 {6 Z0 j" R0 _( v b5 N4 e其后添加:
$ G* ?8 ]* \- |" g2 V" v1 {. p' CCWndMenu m_wndMenu;
; n5 @( J, `3 A3 F+ v" i. Y! i% U6 P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 o, D) n, E, Z% m! L) J- ]
其后添加:
4 E8 T: }, | b/ [! t" p6 [virtual void OnRButtonUp(UINT nFlags, CPoint point);, @! Z! P; r9 X) G' m8 e& {( e
9 B0 P5 E* J0 B0 u9 F' n
9 A6 n/ |7 r: m6 i' e |
|