|
|
源文件中_Interface文件夹下WndField.cpp文件% c7 O& `8 _3 y$ y+ s
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 W6 k# p# P% r9 i" V) |2 t
! x3 C% ]: M1 j! {* `& Mstruct sItem
: K* W- A- }$ |+ ]- a{
* M a$ U: u. K$ R/ p1 qDWORD dwId;) a, g6 u7 T4 T+ T5 `# V ]7 o. t
DWORD dwKind2;
- h1 o) N+ |4 I( N; f% p" }DWORD dwItemId;% z, {! \5 d3 G6 s1 ]; _ d7 b
BYTE nIndex;2 r% x# c S' \. g
sItem(){" g f4 S6 y+ J8 o1 O7 W/ H- \0 _
dwId = dwKind2 = dwItemId = nIndex = 0;
% T- r9 H, M' h- y}. c3 W0 v, a( P, @4 f: ^$ Y
bool operator < (const sItem p2)
+ _$ }0 `: k/ Z. l/ p W; u{2 L0 L3 F9 }$ K, H, x
if (dwKind2 == p2.dwKind2)+ l! ~3 x3 L* f$ S
{7 D. m) J* X/ u9 p
return dwItemId < p2.dwItemId;5 ~ p) s1 \ C$ X5 z4 P* M
}else{9 @" f1 @/ R9 p1 |
return dwKind2 < p2.dwKind2;5 s% A& Q$ Y0 g. w. h9 ~3 s" f; @
}% }& o1 n# `' @. E
}6 C0 m, n$ _+ D- p3 D
};
! p5 O* ?5 |& ]: h" |class CInventorySort* ~ J+ }8 {: Z5 ~ w
{
5 P6 P$ q. P2 H& L% _/ V/ kpublic:
4 l. n: l8 L6 e5 ^5 JCInventorySort()) ]/ g+ |* ]" s" X% n% C! H% j
{7 k% E h) h/ @. P
m_dwPos = 0;' k( R0 n( I! E8 ^. f! l4 d
}
$ e9 K/ s6 K$ [/ D. c~CInventorySort(){}% [0 e1 }+ e0 A4 [$ c( ~! K
private:
9 `5 M" U# ?2 q' `. @1 jsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息8 [! m6 g0 Z2 z4 A. @3 e
DWORD m_dwPos;% h r+ ~0 }! l4 V
public:4 d! B/ E$ a1 |. |
void Add(BYTE nIndex)
4 H& q. V- x3 b- z! z& f" }' X{
2 i# G1 R+ a5 ~' }; G if (m_dwPos >= MAX_INVENTORY)5 N! p' i1 w! A, x! O
{( w' U0 G7 v7 n& |9 x* q; T8 z2 p2 t
return;
" ^) h7 R, T5 B' g }
. a. |' p6 `0 x% t2 j m_Item[m_dwPos].nIndex = nIndex;
% D) I# m1 D' @- X m_Item[m_dwPos].dwId = m_dwPos;' Q$ ?' D) n1 l3 R/ Y
m_dwPos++;* b1 E+ X2 L- w. V7 D0 T7 i) k
}% Q, u: t6 t4 h+ |6 v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" ^' u7 p w9 e( G j
{
6 ~% B. }& a2 X+ ]- x for (int i=0;i<MAX_INVENTORY;i++)* z0 G' ~8 R% A2 Q4 t: w: O
{5 r, ?* ?0 W9 R/ i+ v
if (m_Item.dwId == dwId)% E0 ]6 Q$ a z; \( Z
{+ r$ Q2 h* Z9 C: \( w8 i1 \) s' m' P
return m_Item.nIndex;
+ w3 e' y% a/ N* q }& q" M/ B1 B2 v" l$ M- L
}8 h" j' |' C# g3 N
return 255;
E9 e' l5 S& M( }' s' R: e}
8 r8 q8 @/ g/ ?: y( ^* cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 Y! y" t% y" g. H9 t' z
{
* {$ y% U% \2 F) V BYTE nTmp = 0;) o& n D/ }: C2 E) i
bool bDest = false,bSrc = false;! k7 D/ u: Z5 R6 Z/ B4 v
for (int i=0;i<MAX_INVENTORY;i++)3 q+ t5 ^3 d; u+ d6 S4 w
{
i* K" Y% x7 B5 l if (dwSrcId == m_Item.dwId)0 g9 b/ N# z- a q
{
% S: P/ g- b" c( T, {1 d( ~ //id相等 则 改变对应的dest和src
* Q1 t2 t1 I! u. c7 P nTmp = m_Item.nIndex;9 h/ F G+ `$ B' M; \7 L5 _, R
m_Item.nIndex = dest;1 G9 ^: o: L% t m
}+ O7 n3 \- U2 Q" h2 T( q! r& r
}
, A. z; D( Z" O& v7 I: R3 Y. H //临时数据保存完毕,交换开始
3 \( h O, I( `: V6 X for (int i=0;i<MAX_INVENTORY;i++)" x. x J- U, \# @9 x- z1 W) J
{8 }# ^( F; P1 u* ]+ n
if (dest == m_Item.nIndex)
7 o; o) H9 u/ r+ ~% d {; _9 R5 {/ |0 j
//id相等 则 改变对应的dest和src
, V5 I* d3 p6 E6 q m_Item.nIndex = nTmp;
/ j3 a- K' G0 U* Y- O$ f }: e: d- }. ~; u6 s, _7 J
}
?6 i: g& s: n( _' \}/ j# y+ g8 X) u6 v
};
7 i( k+ H$ J5 |# }7 n-------------------------------------------------------------------------4 d8 y/ ]6 l( e
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 Q" I0 q' o+ p! v( K3 D! B6 F$ y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 s7 U: L+ l' P( W" V2 q
紧靠其上添加:. B9 B) P" j" p4 l9 t
if( pWndBase == &m_wndMenu )
! ^' _/ }3 I% B8 j{
" }1 D* _7 |, V5 {; o% a0 v switch( nID )
; `6 Q5 I, ~4 W ]" l5 u {
4 _" `, D1 Z) v) d* h" l+ s case 2:
& _& b- E. ]9 i5 s4 w- q {5 m& ^5 i1 ]# K4 Q+ }7 g8 x1 \
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, }: Y5 S e7 b% `; Q if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): [. r: O: y! l* }% u" g3 ]
{& i+ m9 q; W9 r: G9 E4 F
break;
D/ B# j( G8 u2 w: Z6 t }; J6 e* Q6 U n: e2 }
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
" l4 h# w. ?' ~1 K& h! Y {
' r5 y C( V4 k6 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. o4 R9 N* z9 H( ^" w
if( !pItemElem )5 `: `0 W! y% [2 G- C' \
continue;1 e8 z0 V* _' [& r2 `
if(pItemElem->GetExtra() > 0)
. C" V/ p6 q6 [9 @1 s continue; j2 ~. O9 I+ E) S E5 O
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . U( o4 u1 q( A: F5 U
continue;
: T3 c0 o- M0 m: i if( g_pPlayer->IsUsing( pItemElem ) )
0 w! h. r. q* H8 Q3 D continue;
3 u3 R- w! R; B* Q$ i if( pItemElem->IsUndestructable() == TRUE )
% `8 ^$ M) T) k/ L) n1 e3 g. J {
& L/ ?' s6 P) X: {. Z g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( W. C# r2 R3 E1 I7 e, x9 Q continue;
6 D) X$ m) j& ~9 ?: G }- y# F- z& V, a6 X3 [% M0 J, M/ W
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) h7 a1 t5 a" _" @7 F
}" _. s& T* q4 f2 `
break;9 b# ^$ H" a! D- [
}8 H4 q/ [1 I# g2 O( `# S% f) Q
case 1:0 h. F) g q* c2 j2 ^
{4 V$ a. X$ q- S. i. O# d
//整理背包
# Q2 P+ a; |+ n5 x6 `! V# t //////////////////////////////////////////////////////////////////////////
8 O9 x) C: @" m: Q B% i1 `; Q8 e //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); x+ Y0 c4 C* J( g
//////////////////////////////////////////////////////////////////////////
, C# [. F6 u' d8 V* o- q( M //////////////////////////////////////////////////////////////////////////( m: _ d8 r; B E8 w) N
CInventorySort* pInvSort = new CInventorySort;
( l7 c9 I1 g/ {& L vector <sItem> vItem;
( s! Q, p* R5 N& Q4 L vItem.resize(MAX_INVENTORY);//初始化大小
; b! F* r ~0 @& i //////////////////////////////////////////////////////////////////////////
; Y! e& o: c% k //填充数据
8 `' F% `8 {- }% R for (int i=0;i<MAX_INVENTORY;i++)
" o/ Z( n6 x1 F7 b2 M3 i v' C {* C* p0 G' W% k3 c) m3 u! I& I
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 B/ k5 C2 b+ s7 v! w& T7 C0 D4 b& C
if (!pItemElem)
9 `" u' h$ `7 t' M; C {8 g+ @1 e% k1 ?5 \6 Z4 `
vItem.dwKind2 = 0xffffffff;
5 e. U6 v3 u0 I( X; i vItem.dwItemId = 0xffffffff;
1 A, [9 E% I2 ~2 o4 ` f vItem.nIndex = i;6 K' |& ], m4 Y7 E6 V
}else {6 E, X8 d0 Y: v4 q$ H: y. f
ItemProp* pProp = pItemElem->GetProp();
0 L* N, r, d: { vItem.dwKind2 = pProp->dwItemKind2;/ t. F. e, b; U0 K% P9 ~" R
vItem.dwItemId = pItemElem->m_dwItemId;
" p7 J2 P/ j' ]0 F vItem.nIndex = i;0 W' H* d( e- }* ]# Z% ]) N
}
0 x9 m8 G9 t5 r( b! X //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
V# p! \) h: q# H' R Y }
6 D! o3 Z) Y7 \0 g# a& i A5 l/ { //////////////////////////////////////////////////////////////////////////
9 Q4 v6 G% x8 m$ G8 c sort(vItem.begin(),vItem.end());//排序 m& v1 l2 b: n- T0 |5 N) o2 e# l
//////////////////////////////////////////////////////////////////////////
) K% K) p( q, G //交换
4 {3 x& x! y- S) e J& a8 } for (size_t i=0;i<vItem.size();i++)
' O( L; C0 L8 D) E; D {
A, |) Q, G3 d7 u0 J //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 y; M, e4 X. I pInvSort->Add(vItem.nIndex);
- i+ ~: P2 C- l2 Z! J }
% d( ^, x; Y' }! | o1 u* ` BYTE nDestPos = 0;. k3 [/ ]8 [ Q3 U$ @
for (int i=0;i<MAX_INVENTORY;i++)
; A9 R0 y4 y; g3 S+ g) i {
5 F3 p0 h7 m1 U: F) f6 L" U2 K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 o$ \7 R7 b# v! z" W. z if (pItemElem)7 y6 O" u; C* e P) s7 u
{6 D& ^- D$ a: r9 k, R% O' @ [
if (IsUsingItem(pItemElem))
6 y( H! O2 v" m6 |7 N {
6 j9 ~( X' ^( } //这个位置无法放
+ H E# A. a+ W nDestPos++;
! S* R6 ^$ b( }! N }
9 M7 g; F# Q B, w$ [* { } @( l) u G6 R: L
BYTE nSrc = pInvSort->GetItemSrc(i);
5 ]* ~! K$ O. g; i' D. } pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);: [$ f1 j+ _% M( z- |& M- r) |+ Q
if (pItemElem)
8 _, T$ L+ O/ |1 v' d {# }) J4 _; ^5 D6 s- F f3 k9 T" i
if (IsUsingItem(pItemElem))# M) y5 F8 ?( E( `% J4 ^' {
{
+ R/ F+ z0 W1 w, ~ //这个道具无法移动,跳过
" a L/ b8 w6 G- E3 p continue;$ s& }$ X- P- `6 p/ [( ~8 d/ d! o
}. T0 I3 R6 O8 y) [/ u$ A9 m2 c
}else{
5 e# l( a7 a" c' p# Y; }" C$ \ //空位置 不用动
6 {+ @! ~$ j/ _+ O# h8 D6 U continue;
: k+ b% e- p O7 o }1 n, D7 t7 C* f" C* I
//////////////////////////////////////////////////////////////////////////6 F( x4 ?% s# ~! q* _
//开始移动( i0 h" ]4 x% Z9 x. \: I' B
if (nSrc == nDestPos)
0 h$ Q3 B+ p! U) J8 i {
, u2 d5 |' L/ \ //原地不动
) s* j" e; o" P" |5 i- R nDestPos++;
7 p( x$ l1 ?/ J$ N7 N& ?. z. f* Z continue;
& x5 D3 g( O# k }* }! C, |& ]: K4 T
pInvSort->MoveItem(i,nDestPos);
% i1 W* k4 A _0 k0 V+ } g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* r+ N! ?- d% [6 | Sleep(5);# B% U- K( F5 l% y. A
//Error("移动 - %d->%d",nSrc,nDestPos);
* w3 }4 x- {* N6 E& f nDestPos++;+ K# d/ D) R4 W& Q* I8 F+ U }
}
* E1 C2 m/ y" S* s3 o. u' d //取第一个元素的信息
! D9 G$ W, T6 |, A f" _ /*
0 X; h6 F0 P# A4 m$ Q4 X) { if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# g$ C1 a' n8 Z
{
. N$ Q( s( r# S# ~ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ f% [* \ {( y% z* D) ]8 z
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
) Y' ?; {7 h* ~" L- J }
! L6 L; l# j% x, s/ S */: s# p5 S/ }3 ?- @* o
//////////////////////////////////////////////////////////////////////////
/ D1 P0 b0 C% q' C8 D) z0 ?8 ? break;
/ e8 N& x9 q% w0 M }% _" U" i' Y! l, e
} # _1 |& |2 f0 F( K2 v- r) E, l2 w+ `
}
0 k3 ]3 h! T7 K% ^, y8 Jm_wndMenu.SetVisible(FALSE);
0 L, w8 N V* L+ o1 m) B; ^: x; l1 y+ ] f( s5 C8 r' V! s, _
--------------------------------------------------------------------------------------------------------
7 `" w1 l5 m# R搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# L! B& H0 m8 s6 Y b' p8 e{
: y) H5 q5 v, q1 OBaseMouseCursor();
0 h2 S" L' ^# N F6 f3 P a! ^}
' V+ h" o8 T# e* p9 C3 ?( b3 G在其下添加:
; L( N: S3 d1 }! jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& v( z1 R5 y+ M$ s( q{0 J& J P0 l0 g% I* T
m_wndMenu.DeleteAllMenu();
) Q6 Q. l0 q0 |9 d- k# `m_wndMenu.CreateMenu(this);! d3 }) \8 k( z# a. d5 N0 j
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* w/ @4 y3 n; f
: j8 k3 G: r7 `' q& ~$ v' Vif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); g, L0 `1 V% [
{
) z9 J* L+ Q. d0 k8 u S //P以上级别才可以删除所有道具
' E! e2 i. V( _4 c, q# ~+ o m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ H+ e {) _; a; P
}- r7 I9 V/ g: N0 A! a( G/ q, _
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );2 M# o4 M1 s9 v: @2 V
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 R6 K Z! y, ~, zm_wndMenu.SetFocus();
! T u# V: x' ^0 k' o2 J6 `, ~}
" a7 C6 M* {" R/ T. ^9 \8 X------------------------------------------------------------------------------------------------------------
3 K/ I) _5 V( D! ~*************************7 w. X# i, J/ J% y/ [8 ^
WndField.h文件
& V$ q3 l- Q! R# y*************************
' w6 e- c: R1 X' H# K" a搜索:BOOL m_bReport;
; H% ~4 `' D5 p# `; Y6 O8 z( Z" B其后添加:& d% C- M, Y R/ C8 E# E2 ]1 S
CWndMenu m_wndMenu;
) ^" h0 v: { ]+ c* y搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
& r+ ~+ C3 V0 O" y& X5 D) }1 A其后添加:
V! d1 t; `1 q2 @$ B- Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);+ K3 {- }. p9 ]. U- e
3 \! z& d) {' G+ v t K) R
$ M0 I3 d* q- ^& Q& Z |
|