|
源文件中_Interface文件夹下WndField.cpp文件7 \1 A4 F. }, D: |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
y3 s2 f9 u% j7 D- R) c* z4 G2 B* E9 r4 ]" N: p9 R
struct sItem& r1 s" R$ x; N( R8 {7 A
{) B0 R2 g7 G/ g
DWORD dwId;
0 F" z! _6 S, X1 p& s. g- D$ O% VDWORD dwKind2;
: z; u; R2 G' `1 VDWORD dwItemId;
/ v8 [1 m4 x' w: h8 `* ^BYTE nIndex;# a! }3 y1 j; r5 _% ?1 @; l7 E
sItem(){2 k. @( e2 Q' ]. l" {
dwId = dwKind2 = dwItemId = nIndex = 0;( k) g; R6 q/ I& }
}* w K4 B2 h/ l9 C
bool operator < (const sItem p2)
) t) T) W& B2 z; V f( k{7 u- r% ]6 P' q& Z- v$ U& m
if (dwKind2 == p2.dwKind2)
/ g, S% u/ E U4 _9 { {8 T1 x0 w; I, ]$ q; M; i
return dwItemId < p2.dwItemId;
3 q% b/ B# B! o# q3 p }else{5 Q6 q: ?/ u! l3 N$ N( Z
return dwKind2 < p2.dwKind2;
' Y5 `$ x$ Z& H* U( n }
# \5 o4 I! k7 _7 N0 V}5 w. U9 F$ m/ W! I+ |
};, @4 F- z" h: J3 m
class CInventorySort
* H3 A2 b5 K1 S9 ^5 }{
* d% M% u8 y: Cpublic:- S3 F) K5 u( r2 i6 f
CInventorySort()' f3 b/ D ~9 a$ [# I: X W
{& u4 m9 _; }. |" U/ l1 J
m_dwPos = 0;
( i; e! K5 ~4 p8 _% x3 L) J t( C}4 W) ?9 H+ b' C' R5 L& q
~CInventorySort(){}; Z" K; r2 @7 ` l6 z' q. `
private:
* c% z/ F/ j$ |5 }- P7 b- N2 ysItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ w6 ?" |. a, n T1 S/ H& Y: O" mDWORD m_dwPos;% a" u6 ]; G+ |. T' |2 O) T7 m
public:
" E. ?& L, [' I' a' _+ }2 z5 Evoid Add(BYTE nIndex)
9 o- x: H4 d( E9 y{$ s- H* y$ [+ ?/ r; S
if (m_dwPos >= MAX_INVENTORY)* a" N7 W6 `' I+ i$ S
{! r+ F2 N: E# A0 b) a
return;4 b, b! c( H. u8 m
}
( @ ~; @0 d9 J: J' O9 A m_Item[m_dwPos].nIndex = nIndex;( h, X& c: x9 V5 p
m_Item[m_dwPos].dwId = m_dwPos;
* z u" x, J$ F, j" m m_dwPos++;; c# N) m- v) x9 F( i6 y. B2 u
}: W5 m% g. p" Z M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 d1 {$ L5 a: P, h+ G+ _. ^& {{
$ ?' o& H" I4 N$ j# T1 O' q for (int i=0;i<MAX_INVENTORY;i++)
! }1 F8 g' i* u {3 N/ y$ `8 y& B5 R7 A+ e+ X6 t
if (m_Item.dwId == dwId)
6 ~8 v5 [( C2 l3 _+ l3 X6 G6 { {) I. @ _& w! r4 W. T, g3 Y
return m_Item.nIndex;8 N5 O9 W ?7 V8 T6 z
}2 O4 l( i! @2 `7 s, A
}- Q( k& x$ p- n/ T) I a. w# y
return 255;- U- Y" |3 M6 {& u6 q8 L' h
}
0 G( W* s9 Y2 N0 N9 G: \; vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; u! y4 l7 H( Z{, V) z( K7 l' H6 a! ^7 h# U
BYTE nTmp = 0;
! m" o3 T; R c5 K( S" y bool bDest = false,bSrc = false;
& ~ Q2 `8 g% T. t for (int i=0;i<MAX_INVENTORY;i++)
8 W( C" D9 x9 @4 Z3 K4 S {
8 w/ y" \" E) [$ @# m if (dwSrcId == m_Item.dwId)5 \0 l) e. Y+ X; m$ v- B$ b
{; v$ ?2 t9 ~: o# B5 c# V2 m
//id相等 则 改变对应的dest和src( x- I! r1 D$ A) ~( D! l: F! c
nTmp = m_Item.nIndex;* T* e A' m1 E$ J3 p, w7 O
m_Item.nIndex = dest;* i3 i0 S' _( [$ s+ `$ F
}. |% m+ L) P X$ |7 O' p
}( J) F! m0 V, u( I) n$ t+ ?
//临时数据保存完毕,交换开始( Q& Z! O" b4 X
for (int i=0;i<MAX_INVENTORY;i++)% ?# P% Q6 Y& u7 o' B1 ?! h
{! ~$ _( P% r$ @6 V; y/ R8 O
if (dest == m_Item.nIndex)8 [1 x* l1 q0 V. V* z
{& W- t) @' A7 j! R1 @1 f
//id相等 则 改变对应的dest和src
$ v6 \( Y/ q1 L5 d7 B& F m_Item.nIndex = nTmp;$ Y$ W# G- y- C
}7 Z d+ F/ Z, E w
}8 y. Y) n" O0 I+ L) R8 x
} F4 h/ d. \" ^" w& M
};5 ?* Q# }/ t/ ?. }+ ]$ R
-------------------------------------------------------------------------5 Z4 \5 b' s6 P" g# p+ _ L: G
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, w9 ~, Q6 Q$ Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( @; V: p9 [- f9 f0 `# A+ R8 `9 l: b% [
紧靠其上添加:# d& i1 X4 ~9 S2 g. G, T
if( pWndBase == &m_wndMenu ). m% l) v: i: O! m
{
$ U; {: G. B3 q" L switch( nID )
. c! c" R4 f$ w" x7 D7 o {7 s; h ]2 O7 X
case 2:
6 _" y+ X+ ]6 f0 J* V7 F; U6 K B8 W {
$ E9 ^# A; l4 C. M. L+ V5 R //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
0 X+ E0 U5 S, d% k) Z, B if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; A+ U, @3 h* E0 _2 m {
- b/ U; N/ R$ Q& D- J break;
4 X3 ]( l) V$ }) z z7 U% M9 W }
! a) P% \8 e( }" x" V. U3 {1 K for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 P5 f2 Q7 |* n; l {
: D( [5 V* A1 `8 O: Y. E CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. E) M/ c: V: [ M; e
if( !pItemElem ), E! c, I/ M z+ E5 G
continue;6 n }2 B) X1 g s
if(pItemElem->GetExtra() > 0)
3 T( Y* b. I& `/ I, I4 j8 p continue;
, P' x2 X/ l& a) l8 q0 r3 V% p if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 }) m( G$ P5 Q: a! a
continue;
, x. T0 Y, Z7 N4 A if( g_pPlayer->IsUsing( pItemElem ) )
) f% l6 L9 V/ Q5 S, ?8 s continue;
9 X# M. B6 j# |$ ?: m3 P if( pItemElem->IsUndestructable() == TRUE )& z8 E1 `3 b& V
{6 ^5 s" f3 R: U9 G! x
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
% p1 Z" c/ w3 f0 R. `; i* O) ^; O continue;
5 p& K( h" M; s/ g. y }
# q* C: `; h m# N0 J( O7 ?- K g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 C- r1 P9 I3 J7 Y' @( |
}( _* \# f1 o# W, p; B$ K2 L# Q2 P
break;) O) u) g2 F2 o* c% f! ?
}
3 V+ o. l" y J5 A case 1:! U: r9 T x' k8 D- M* \
{
, b. ?" F8 x) M7 M& k //整理背包
! V1 _. f# E/ G& k //////////////////////////////////////////////////////////////////////////
' P- _& H$ }! [2 Q* d( z //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );6 m1 d3 o( j% B. J4 A& m) T
////////////////////////////////////////////////////////////////////////// `) Q) ?( k; w! w, w
//////////////////////////////////////////////////////////////////////////- k" I; K. ]- @* t8 T. P
CInventorySort* pInvSort = new CInventorySort;
7 Z# e) S/ s& l vector <sItem> vItem; F/ A$ h7 J+ a. v- y$ [% G
vItem.resize(MAX_INVENTORY);//初始化大小
|; D! E' r$ j, ~/ I //////////////////////////////////////////////////////////////////////////
2 e$ [* O' m7 h/ J //填充数据$ ~6 [; k- V9 S& O
for (int i=0;i<MAX_INVENTORY;i++)
6 w3 Y2 w ?9 k" ~8 G6 S) T {$ o8 m+ e b7 \( O' L) J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, s5 _* }5 p! ]+ Y, S if (!pItemElem)# |% m" X8 I: j. @
{
9 S7 V$ r* J$ {' n$ U7 o" U; k7 W, ` vItem.dwKind2 = 0xffffffff;
! W6 P0 ]- e% z) o' o4 s vItem.dwItemId = 0xffffffff;) \% i$ [ x) t6 C1 n. }
vItem.nIndex = i;, v( h. i! a' r0 g+ b7 b" V/ O" i
}else {
2 Q, S" n; v$ F0 G( @2 c ItemProp* pProp = pItemElem->GetProp();8 t5 b6 z6 W2 N- [" \
vItem.dwKind2 = pProp->dwItemKind2;' ]% f) N" J- D* W _# ?8 @3 ~5 T
vItem.dwItemId = pItemElem->m_dwItemId;
. X& E& k- ? F }# o. @7 u vItem.nIndex = i;
3 _& q0 R7 t' z; U" K- v }
( @8 X6 w& L9 C //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* e" Y, _( W1 k- c/ U8 n
}4 Y$ O. p0 ]5 p! z" L' L
//////////////////////////////////////////////////////////////////////////1 Z( g# d' R) P& @
sort(vItem.begin(),vItem.end());//排序7 x% G0 y- Y9 b2 K5 `+ m$ P3 M
//////////////////////////////////////////////////////////////////////////
1 v, ?# X0 \! U4 s) x q6 q* j //交换0 l Z8 @) i9 S- w* i/ p
for (size_t i=0;i<vItem.size();i++)1 c* m7 \ l+ @$ k7 [
{7 G% S: E- w, X% e1 ]! G8 i8 ^- U
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ ?' l" P. ?5 S: W pInvSort->Add(vItem.nIndex);, T; ~* C' \3 P2 U
}
7 S1 x6 l% O1 v: o, T" x BYTE nDestPos = 0;
0 D7 P$ o' t5 |1 B0 y for (int i=0;i<MAX_INVENTORY;i++)
* \* e) A% v! j9 x# @% B {2 J( P. }: p; k) y! K
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);" B# k, Y2 H- S# S1 I, a
if (pItemElem)7 G/ {* f4 j, F% L$ |- Z! f8 U
{+ L5 v) {$ N; T
if (IsUsingItem(pItemElem))3 _) w. S5 U5 w. q; `
{( z# s% J. L& |
//这个位置无法放
3 S5 l1 @4 m; o nDestPos++;
' M0 Z' d+ Z! R6 g6 k! ~ }
* C' M, ?; V7 N6 G: ^4 r5 Q7 ~" r }
& ^# \4 ~! H/ R' l: P BYTE nSrc = pInvSort->GetItemSrc(i);3 l& c9 j* H8 q; n5 V# F
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" B) n" l h8 _" b" M
if (pItemElem)& k) T( M0 i4 O) [ J4 A
{
5 a) J/ D" W7 q6 G( G, y if (IsUsingItem(pItemElem))( m8 R& ~4 C* d4 ^0 J8 `4 l8 ]
{2 y' ~# c: Q5 O" ^+ c
//这个道具无法移动,跳过
: c4 Y) @- p. R, _1 J continue;
! ?& X# _2 c, k+ X }
' A6 G1 M ` C! X% T$ ^& X( I }else{
% B. y& g! y: x$ G3 l* y% w! Y //空位置 不用动: n1 T. ?/ x( p8 X: w9 j& C' J
continue;. L+ Q/ ^( H/ i9 ]5 H) V* z7 n
} O* l3 B6 K( V4 {4 \/ {
////////////////////////////////////////////////////////////////////////// w" }" a. K) i% f1 f
//开始移动7 \2 T7 M, \( {6 L& J( O0 q
if (nSrc == nDestPos)# E$ `( b% S7 d5 n
{: P$ Y3 O7 _. [$ P- R
//原地不动
; C% H3 _; b) I3 z. r% q1 b0 Z nDestPos++;4 Z- M7 w9 F! }
continue;! ~; p+ u8 J \/ _6 a
}
" Q+ T" U3 G; n0 { pInvSort->MoveItem(i,nDestPos);
! W' v1 c) V5 t6 T# E4 s) q) V/ U+ h g_DPlay.SendMoveItem(0,nSrc,nDestPos);$ |& ?6 F8 _. N5 i9 F/ C
Sleep(5);
- D% o+ A9 C9 u+ {, S7 v //Error("移动 - %d->%d",nSrc,nDestPos);0 J1 p5 J3 \# W; T8 {% S
nDestPos++;
) v6 }( v, W2 L) W( O0 O$ H }
9 {5 \( G: ]; V$ L4 Y/ l //取第一个元素的信息
) u# @1 ?) [8 B7 d5 G+ I /*
- S. I+ a5 W& w4 } if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ Q& v4 C/ ]0 G8 v3 R2 @ {
9 J5 o! P( b! `3 ]! `# l/ z( e& } Error("Move - From:%d,To:%d",vItem[0].nIndex,x);9 O- w7 g! ]7 z+ c# n9 o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! y9 I4 r( j0 b0 a1 X, {) H4 S8 } }
: A% @8 M: l' f& |; z- Z9 Q4 ? */6 f+ g. p4 ~8 E9 @* ^( ^8 ~
//////////////////////////////////////////////////////////////////////////
+ S3 H; `. D- E1 C I- F- l, ? break;
, e3 I( m0 V% C! k }7 n4 y" J; g% V0 v$ O; Z9 M$ |% n3 ~
}
% w, C+ Y; ?9 S0 Z% N* E$ ?}6 m8 \9 d4 Z& {! D% K
m_wndMenu.SetVisible(FALSE);
# ^7 D: m1 E. \; A0 Z& O
* s$ V2 J) m3 b7 X S7 @5 Q+ `--------------------------------------------------------------------------------------------------------$ u. @& A" ~/ B+ c4 v6 M
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! [" ^0 A% G$ e( G( t$ s: w{% E" Z- Q6 c' x. W0 r3 v7 b: {1 j
BaseMouseCursor();* y6 s d6 h( X" |/ ~4 _
}
( w4 T. P9 ?$ {$ _在其下添加:8 A: H( _' ?" j' ~! N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 E& W4 z b0 z{
$ r: I5 r: B: L+ T; qm_wndMenu.DeleteAllMenu();
' z3 ^1 {: W0 T* x4 k5 F7 W. o/ Mm_wndMenu.CreateMenu(this);$ {1 v3 D5 O+ q% }/ f( m- A
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
6 y' p4 ?% f5 d% h( T* Z/ {1 Q/ x7 j( A& n, h3 h8 A
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 O( v# y" N( I
{
; u$ @5 ~/ ]. s; c q6 A //P以上级别才可以删除所有道具
8 }8 O. @' E- ~2 N2 B/ @( _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 v, A6 N3 _# }) U
}
9 I, e/ c( r2 }! w- G; [m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );' O8 N G" u( p2 z2 h: O+ Z3 Y
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; R5 n) L3 G- A% o" N. m% v, lm_wndMenu.SetFocus();; U% R! D# k; x. E
}! K* _- r4 u. U" L, W
------------------------------------------------------------------------------------------------------------
4 F+ U# n5 w$ E) I% J3 w*************************' ~$ k A0 |( H0 ?/ |2 v$ J" M }. R
WndField.h文件% m" o. o( R) t2 o: a4 @
*************************
5 I8 l% |/ J( z: \, B搜索:BOOL m_bReport;
6 W% ?9 e$ w/ ]& k5 ~其后添加:
" l& K7 P3 k8 d/ @& Y% S- d* oCWndMenu m_wndMenu;
" ^. K7 P; ~8 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! x% n& Y# R g9 g4 B, H( L其后添加:/ a' \: g" r: r& |7 e; t
virtual void OnRButtonUp(UINT nFlags, CPoint point);
$ o' U0 T# k+ [( L; U+ a1 S6 z0 B
9 W& i, U7 z" E. D8 j3 y8 j% |3 H( Y( J# Z' ~- t3 X7 J+ H D
|
|