|
|
源文件中_Interface文件夹下WndField.cpp文件+ H$ _7 S$ c6 Y8 k& o4 e) R
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: f/ _8 }7 k- U( K
! z7 m/ t4 K5 H# A7 ]struct sItem1 i: K5 b3 o/ g) t* N( K
{ D, e v I) [0 `7 @
DWORD dwId;
# {" Z9 R' i p) z& t/ rDWORD dwKind2;: d- @ a3 y4 z3 y" S
DWORD dwItemId;
! V0 k4 P9 E4 h( e. [/ T4 UBYTE nIndex;
1 r" z& j* J1 i9 XsItem(){. w3 c# \3 ?) f) l( n
dwId = dwKind2 = dwItemId = nIndex = 0;
' e' n9 ]! b- a! ~! ?}
* `4 z" U a9 G+ k; V( g' _. tbool operator < (const sItem p2)
+ V; k4 j1 L6 {; _{6 H8 }9 Y3 }6 H O2 f9 }) `
if (dwKind2 == p2.dwKind2)
, \' F% C! M) F7 R4 U. ? {
6 ~9 ], G* E! a& d- ~ return dwItemId < p2.dwItemId;7 d& R5 ` W5 U1 F/ b+ G* c8 o
}else{( y' l1 }' X6 d4 r: |9 S( L% f. u
return dwKind2 < p2.dwKind2;/ e7 c' p! G7 P1 ?8 h: t5 C
}9 B( | k3 l7 B0 V) L' G
}9 o- o# @8 z0 J$ ^( e9 ~
};
; Z. T) @6 Q7 U; {6 @& iclass CInventorySort6 J9 r( `7 ^' M4 U7 X
{" J4 r1 V, d2 `3 F
public:, s. x- J& E& Y P! s6 A2 Q
CInventorySort()5 `! Z6 G- f1 @* M2 ^; c
{
/ z5 s1 Q" F+ x' N# @ m_dwPos = 0;
+ @# f3 G% U$ n4 q, A+ q$ G}
- V9 w- G( X' C' M2 W+ w~CInventorySort(){}
1 ^- M, T2 d& ~( Dprivate:5 l- n% D- s( P4 N* V& H2 \% G
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 j0 S1 u# W. N. G9 H, X
DWORD m_dwPos;
5 }+ Z; m+ Y3 x- l1 Jpublic:3 H Y8 V6 V+ q5 C: O+ ^0 _# b
void Add(BYTE nIndex)
/ C* d, N j4 |# ~9 j) {{7 P+ C9 e+ q3 S: x b2 E4 N `
if (m_dwPos >= MAX_INVENTORY)
4 y# v# X2 V# d# m+ s8 V, W, Y {
) L3 M8 Y A5 a5 ~ return;
& j1 Y9 J# ? W- A# r5 B }
9 x, @# C/ s' s5 R6 a9 P m_Item[m_dwPos].nIndex = nIndex;
- ~/ V0 Q0 ? [! w6 S8 L9 M7 u m_Item[m_dwPos].dwId = m_dwPos;0 E2 u/ K6 T2 p) |$ v3 {
m_dwPos++;
6 L6 q; y+ a0 D, s}
; Q- {8 m1 K# P0 a% C2 Z% JBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 @* K. x3 z2 [1 g0 [" K
{
6 j- O* U5 m& e5 S9 g3 u$ M for (int i=0;i<MAX_INVENTORY;i++)( O5 t7 n! ~7 W$ `9 L
{! N( b2 o' K" A6 S
if (m_Item.dwId == dwId)% u j$ r$ B) U& _
{: |: D/ N! d0 _
return m_Item.nIndex;
/ r7 h4 Y2 Q* d" O+ h/ j* ?4 N$ p, ] }
) h6 h( H( ^! E7 [. H" _ }
; M+ S8 N5 L# ^2 l' T# ]$ H return 255;7 D( X# m- s# r: V* j v# d$ x. V9 H# \
}
: a7 m7 Z/ y) z, D1 p( c; a4 o1 zvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置1 s" K, |, x: M) r6 K7 C5 q
{
; P# I; P5 p- L6 \3 V6 o5 V7 N( R, g BYTE nTmp = 0;) u+ |1 L0 D4 K6 @4 P% L7 O" w
bool bDest = false,bSrc = false;
! i; {2 y4 N% h! e for (int i=0;i<MAX_INVENTORY;i++)4 L/ C0 M3 J9 ?* V# r' K( V4 y8 d
{
( D/ ]& @, o6 j/ w if (dwSrcId == m_Item.dwId)
( A' Q" `- y4 k' ~ {
+ v! Q& Q$ w9 ~6 j5 O6 F8 m; N //id相等 则 改变对应的dest和src' V- E! t5 d9 U/ q! {
nTmp = m_Item.nIndex;
( `: R7 m( D& @" \3 ~% I m_Item.nIndex = dest;
8 D4 D, ^# E f( Q6 \% W1 ~ }$ f# [+ C3 J' _4 y0 E
}; G! y# F3 F2 O2 l9 w4 G$ P$ s
//临时数据保存完毕,交换开始- h5 N& [! j5 C3 S& I
for (int i=0;i<MAX_INVENTORY;i++)
( L6 S" a6 i" B+ U {
. k& Z- t5 q t* F3 ]% S' Q9 K! f( k if (dest == m_Item.nIndex)
9 V8 v/ P! r; h$ H: K4 o* B: f1 n {
- y% H- M4 d- R$ g6 Y //id相等 则 改变对应的dest和src
7 N; j& o2 k/ F5 s& o) K: W m_Item.nIndex = nTmp;
1 P1 f. T. _# V3 K2 q% o: t }
/ t7 l6 w5 m. a, o. i" R }
, x( |0 H w- T} Q- b! {8 k% E! D, ~
};' M, I( J3 I! l0 J
-------------------------------------------------------------------------
: b. n U0 C0 a/ l F2 f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 T: Z. _; _9 e" Z8 Y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);1 o( J8 {. i- g) r
紧靠其上添加:
4 U) B. v% p5 Q7 }if( pWndBase == &m_wndMenu )
. D9 A' \2 f; }/ M{4 @' U0 ?- _1 s9 R* i
switch( nID ) h O9 \5 |; z p) E
{) L& }0 T; i# }: t2 Q# f% M
case 2:
" S( {5 F2 a2 h( s. M0 [ {& d' W3 \) P$ |) H6 }5 x4 X1 p
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);4 r2 T; S ~% B; A; \
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% C( o, O) ~9 r7 J! c
{
: O/ R& ?5 f$ H break;
+ w- Y/ g& ]4 \ }( w: S% o+ K- M( i' H
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( g8 u2 n9 Y) N: m
{
7 s- `( M. z7 q) w. C CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 x/ q J: B6 W) f
if( !pItemElem )5 x. Z; C4 g" ?8 k% B! z$ H& C+ _( F7 E
continue;4 u: k0 S& i+ w0 ^6 x0 p
if(pItemElem->GetExtra() > 0)
" L. `6 g9 W n) Y* | continue;
! j- }/ f2 J( A1 B" x1 s3 s, R if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 d, f& e6 p3 N+ U! X: J$ K& R
continue;
1 O! n+ P0 Y g/ @4 C7 M1 u if( g_pPlayer->IsUsing( pItemElem ) )
; c/ p y, Z' s3 S# C continue;
8 e3 j4 Z j7 {. ]. s) S) \$ @ if( pItemElem->IsUndestructable() == TRUE )
; l& F$ R0 G& W5 Q+ h8 X b {
/ H; w3 O& j& l: V/ R" k5 P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* B2 F7 C& B6 Z9 ~7 u) ^ continue;
2 l' n+ G0 D' v+ i5 q# X8 y }
6 q* G; A: K! b( u0 [) x g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 e2 P; j; b8 v; L- o) i3 X } d" O( l. G9 t* v) _, K# r Y
break;9 L7 j2 f8 n! r% ?! A
}2 S- ^& s- l3 r$ s( ?
case 1:: X0 V) j; ]$ }; N
{. G% n( j* n5 c; s( T* ~* d
//整理背包
3 q$ x; T- V& E7 P# b' G //////////////////////////////////////////////////////////////////////////
# f% D! C6 `+ Y- ` //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% c- D/ W: ^8 x) n+ H# O$ x4 c //////////////////////////////////////////////////////////////////////////
8 B4 h3 b0 ~. a* a //////////////////////////////////////////////////////////////////////////
7 B$ E" \- t8 [& j5 @" l CInventorySort* pInvSort = new CInventorySort;
8 I: @( \) V2 A$ T vector <sItem> vItem;$ @" ^' N8 M& s2 H W
vItem.resize(MAX_INVENTORY);//初始化大小
. S( N k5 a: ?0 c9 c0 B6 c& |$ a //////////////////////////////////////////////////////////////////////////- W0 `0 D4 b3 u- M" t5 L1 Z
//填充数据
9 S8 _3 K* r& [ for (int i=0;i<MAX_INVENTORY;i++)
; v/ g! k# Q& |; c {
$ |# D2 Z8 U! | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 ` P6 e3 `. ^1 y( s. U
if (!pItemElem)2 d( O; u4 X1 Y8 o3 {* C
{
) a6 P8 h v" x+ w7 D; T. r vItem.dwKind2 = 0xffffffff;3 [8 \0 u3 L2 M/ U1 _
vItem.dwItemId = 0xffffffff;; g/ ^. m1 R5 u( a9 Q: K& u
vItem.nIndex = i;
, S" S% G! X' r2 R1 u9 z1 u' [ }else { R+ i! x0 F* [8 P/ ~1 G M8 {
ItemProp* pProp = pItemElem->GetProp();
; \$ w% y- v0 h2 Z vItem.dwKind2 = pProp->dwItemKind2;
1 q$ S4 T) K* Q) J vItem.dwItemId = pItemElem->m_dwItemId;
5 X0 F. U) r z" C2 h7 Y9 @ vItem.nIndex = i;
f" T/ K- Y# A7 ~1 _& t1 Y0 W }
7 N6 S6 M+ |3 @+ I //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) j" U! R* _+ D1 n0 n6 D; E
}
% p9 d- y/ D( I; P _ //////////////////////////////////////////////////////////////////////////
( K& Q. Q( n/ |$ c1 D4 q3 r sort(vItem.begin(),vItem.end());//排序0 g- T$ @- R! s: L7 ]% u8 `
//////////////////////////////////////////////////////////////////////////
* x( q# c: w; y1 k) ]$ w( W5 s. b //交换/ R9 T' [1 D( X) N0 l# a2 n
for (size_t i=0;i<vItem.size();i++)0 ~. C4 k! z! z, k( N
{. u" t$ n) p2 H$ m2 P
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 v0 j8 O* W8 `0 D3 _ pInvSort->Add(vItem.nIndex);
! r. M% A# m+ U4 v4 C! T" A) b* R }
1 w" [2 Z! G8 G; A* j" d BYTE nDestPos = 0;1 u( n( o P* N1 Y
for (int i=0;i<MAX_INVENTORY;i++)% j- o, h+ R- n3 b# i- @. k
{& @. N C* q1 Y ]8 G n/ V# O
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' l( M" f# _; Z L: I% `. k if (pItemElem)' o. G! j' R+ h b1 }
{$ q5 S* a2 x- ^1 E6 \8 D6 N' ] y( h
if (IsUsingItem(pItemElem))
8 d$ ]8 g3 [1 b& h- n {
0 K1 Y" y: J6 h+ n4 \0 V% U //这个位置无法放1 S1 @# w* g. r5 s" E
nDestPos++;
8 _3 X @, k& Q) l7 t }3 X7 v8 n( e. ~) z
}( Z/ G& G( C5 u4 r; {( q$ v- R9 v
BYTE nSrc = pInvSort->GetItemSrc(i);
/ w4 i. {8 h' N2 y" p2 R& b( U2 t pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 d. D$ e8 b9 I( k if (pItemElem)
" ~% m6 d$ B2 v! k9 m( h {
4 S; W6 L2 t. A if (IsUsingItem(pItemElem))
, M; e) u- \: r/ D, Y! k' u {
8 ]! K2 B# W8 M9 W" E8 f //这个道具无法移动,跳过$ k0 J6 Z' d, g: O% G) K$ a( {5 I) e
continue;
/ M& Z- B, |* o: N( V8 J }
, S# S# F1 y k" Q6 A }else{
1 ?0 P* M' o0 j //空位置 不用动
% y) H5 n4 k. @3 J- D' ? continue;; @7 D) W4 c9 ]6 r, O
}
0 j! u( V0 \" M9 @! W //////////////////////////////////////////////////////////////////////////
8 o0 k3 p" ]* L1 k: ]% { //开始移动/ }4 n' f6 u7 v
if (nSrc == nDestPos)
, j% X; H, I0 j7 k, ] {
3 r" C+ a; Q" d/ o0 Y5 ^! K2 |! D# u //原地不动
- }" G* D, l" I; Q5 ~( h nDestPos++;* C p* [: @& u3 z3 Z& v
continue;' h+ R5 y! {; ~! i
}
6 t5 v& E3 ^; i/ X( ^ pInvSort->MoveItem(i,nDestPos);( h% M3 n6 n: h% Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 o! x7 P8 D) I9 C# H Sleep(5);* _' X! z5 r/ Z3 Q+ U7 K
//Error("移动 - %d->%d",nSrc,nDestPos);
/ m7 R5 G u( t2 {# E& C nDestPos++;+ S+ o/ I0 k; p5 j7 X$ C0 ^( U6 w& g
}
; n$ n) n7 a& X' \9 [" d //取第一个元素的信息8 r6 r4 I& m/ |
/*
9 S S: {' X R3 W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# M9 {- g( C3 {" j9 `& ?" a {
# v" N$ s6 s1 F% c2 [. W% d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);, B* l0 F' R! Q/ Q2 P
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 J |1 T; P) q( [: h' v
}. w5 Q' y; n, \: e, G
*/. Q1 `9 p' A, d$ m; p4 I5 D2 H! j
//////////////////////////////////////////////////////////////////////////+ l. Q8 m% B8 S# z+ B7 D) ? Q
break;
6 ]* m! }4 b% c m0 h }
/ T/ ^' w, u- G& N7 c9 D }
% y; @ V+ D% P) m' K}1 g" {. E' u! z9 ^0 \
m_wndMenu.SetVisible(FALSE);2 D7 c8 {# p9 C% c9 E
8 s/ V' p# C# U
--------------------------------------------------------------------------------------------------------. J2 C# m3 x$ G3 a- M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
0 [! _0 Z/ p! d* q/ z{
% b8 _, _% ~, U' oBaseMouseCursor();" m+ I: Z" m* B/ r- N
}
( w& T1 F, }5 x W; J- O6 m8 L在其下添加:
# p. |. R# s8 p0 c" R5 cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
; e+ j/ I! S4 g, w5 }9 c{+ {4 J$ p- _, M5 r% A; J- P8 ]
m_wndMenu.DeleteAllMenu();+ r: e, \/ ?) s3 d7 w3 P& p* a
m_wndMenu.CreateMenu(this);
: t3 d% z* S- ^6 S Z& u( a- Mm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& L9 ^! U* w* H% [
; G1 I& u9 Y9 [. I0 w0 ~' Dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ {2 p& {3 x$ Y9 K9 _, X* N{
, ?# N/ [$ K( x. X2 F H //P以上级别才可以删除所有道具- j! U. e$ L8 l/ v
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; V& Z3 ]: J: E+ m$ Y}# j+ o% R9 X1 U6 I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! s% ]. \( _% v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );6 i% K6 d% l0 G. O9 d* h) ^) W5 t
m_wndMenu.SetFocus();
2 A6 q; a. v& U" m! [0 q$ P}- J4 n. {% |5 A* Y
------------------------------------------------------------------------------------------------------------3 @, Q4 R! k7 p/ T8 i; d$ d% ~
*************************
- k6 n4 `: b! Y p: QWndField.h文件5 ^" j: R* Z$ }. _! }
*************************: i& Y* y h* \% u" k0 R# h8 L
搜索:BOOL m_bReport;
; S* u$ ^2 W# a! H其后添加:$ U0 w9 S' |$ @5 B6 B- G2 }
CWndMenu m_wndMenu;
3 F- t6 m* j0 i搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
6 |. `4 k) B! F1 \其后添加:6 h( F. G' g6 S4 j$ o( a0 {- \
virtual void OnRButtonUp(UINT nFlags, CPoint point);
4 V# U; S7 f1 J
0 O% X! m) {. b" F& t- ^ H: V6 `' e9 ~0 d. S
|
|