|
|
源文件中_Interface文件夹下WndField.cpp文件) u- T, ~3 @! r. D, N3 X
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
5 u5 }" F, T) Y/ `# a: ^
! X) T: G% q! [) T5 [& Z3 [0 D- ystruct sItem
4 Z9 L2 Q4 V0 z* H& S{
& O( Y9 Z1 a7 P8 hDWORD dwId;/ Z8 A) S# H x/ F, S
DWORD dwKind2;
, U m5 w( r7 yDWORD dwItemId;
0 v% b" w. e- t/ [" j1 r) kBYTE nIndex;
9 T/ c' S9 K9 v2 ?sItem(){
/ ^ R+ ]) f! u/ L) ^ dwId = dwKind2 = dwItemId = nIndex = 0;
5 u X, T( \% Q0 w" [' |8 o& V# V}
$ x q7 z. ~! d" R9 m: \bool operator < (const sItem p2); s- t& A! x8 j8 V* d8 { H
{; _( L$ o/ [9 S# Q
if (dwKind2 == p2.dwKind2)
: a3 H* d& C+ G- c" U, @ {, B( ~1 a" t' |2 i- ?( M- c9 _
return dwItemId < p2.dwItemId;
2 I& f$ U7 h$ S4 X1 \6 t! @ }else{
" E) L- Z' a0 y" @9 }0 M1 {/ o return dwKind2 < p2.dwKind2;
, z& ~3 L. K4 w4 q+ O) V' b7 w }9 S6 h" l6 r- d, P" |# U
}3 k. p6 [' p& ]" a- g
};7 [! v9 K1 f5 w' {! l
class CInventorySort
t2 d* d. k4 N9 m) U3 ^{
0 s9 P+ P, k. j% O+ i- v( D9 hpublic:6 ?; \! U# q0 c
CInventorySort()
' L" V9 U/ L9 Q' D' ]3 U& V$ m{
' y( m O3 i$ Q: V: m9 h m_dwPos = 0;( \. [% b6 A6 k ^2 Y) p4 b
}
0 s* }$ Y, k; ~1 ?2 M~CInventorySort(){}
3 y3 [- i" E2 G( z* ~1 C( _& @3 |private:
- r3 _$ l, A7 r/ r1 @sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
g5 s3 v1 |5 {" H3 {DWORD m_dwPos;
* F4 W B2 d! q/ B% Q/ [public:
- w/ Q# k! Y/ L1 l" M# C; gvoid Add(BYTE nIndex)
. d( E. g. S# [& ~( L1 U+ T{) j# g" B( E) [2 R9 r, x: U
if (m_dwPos >= MAX_INVENTORY)
0 @8 z, P: j5 Y* F5 ~ {3 v3 f5 J* ?0 E* v0 [8 x
return;9 [! ^$ Z) g" V8 X, _
}
, P1 k" l* ?, T6 q- B- w% ^ m_Item[m_dwPos].nIndex = nIndex;( N8 J: I! V8 p; N3 U/ L
m_Item[m_dwPos].dwId = m_dwPos;
. \7 ]2 d3 e) C9 u b& E9 `- F2 t m_dwPos++; T# }. m7 X* M) t4 t$ }
}' z, n" v! U9 S# |. j
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 f& q" |2 T# t{: X5 t1 I+ M' q7 \9 X9 `7 h
for (int i=0;i<MAX_INVENTORY;i++)
" e- b8 t% p h1 x- S# M {
3 n* D/ Y% p2 E if (m_Item.dwId == dwId)/ H, h3 Y$ _( g& m
{
$ W& E- k5 n1 h+ g& r return m_Item.nIndex;& d1 `. `6 k! q% l3 M
}9 p# f$ K1 X7 z1 T7 [! q1 e( e
}) g! l# H) z7 L& @6 C+ I L
return 255;: Q' a. U! B3 D! V5 e" J* s
}# f0 V1 S$ O% f4 ]; D, X
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
' ~+ e! D* J$ k- R# U; O{" I4 d3 _5 P6 h" L
BYTE nTmp = 0;
1 @+ o% g9 a- z2 A. ` bool bDest = false,bSrc = false;# l. `5 l" n% ~8 p! j
for (int i=0;i<MAX_INVENTORY;i++)
) P. K6 c* q( c- h! t+ V/ }4 ]5 _ {
% c. H5 s. g7 \ J if (dwSrcId == m_Item.dwId)( @( @9 A+ U* J
{8 k8 Y; I8 m! u2 Q" @
//id相等 则 改变对应的dest和src5 j5 _) P- V" {
nTmp = m_Item.nIndex;
* `9 |9 @% L: |) b! T! R+ X+ p m_Item.nIndex = dest;. Z8 ^4 \7 ]0 _' C8 c) ]5 I
}
. C# U, ^( O$ u. ?' c }
; S( e( k6 z! I5 `! ~8 `+ [! F //临时数据保存完毕,交换开始
9 j# d6 |; l) @: S for (int i=0;i<MAX_INVENTORY;i++)
) i5 C1 b0 e3 H1 V& E/ V. H {5 [, w5 ]6 D) u+ J5 T, D
if (dest == m_Item.nIndex)
) z! s6 a* b: P/ G, o3 i {
5 u7 f% e4 ]# u) ]( E$ V //id相等 则 改变对应的dest和src
# D2 Y. F9 a& R* o* V m_Item.nIndex = nTmp;* p; L# J. j J9 g. T) Y2 d. V
}
# d7 ]2 y7 W; y+ \: w }
% w* m1 x' C0 y# _( K+ K6 [, @}
$ U C7 j# t- ? M' J' j! Y) P};5 J, s8 A8 k6 j2 w
-------------------------------------------------------------------------
6 u: u. O) M% k4 M3 f. u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 h. N. K3 d9 b6 o g S
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' ]4 |8 q6 L4 z* w紧靠其上添加:7 @% P' h# l- v0 s% B/ [
if( pWndBase == &m_wndMenu ) E/ l/ d8 o; z5 x6 j- E# h
{- S% z6 A* m: d9 V {0 M
switch( nID )
( D5 |2 w# L4 U& o {8 V5 T* U9 i6 m( B( G
case 2:( O" A& q' B* a$ w2 r# R4 ^
{8 c- E1 W6 r* o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);' L% Y) R! p3 N4 k
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 O' z/ u. Q$ {4 F, K
{
* T# a2 I) P" r2 P& f ?& Z break;
3 k$ Y1 E4 X) Q& L Y( _' G }4 y" J' ~. m) w$ X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ v! k9 q7 I/ o- B) y {
/ V' r9 h' H- }% ~1 ~0 n: p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ Z d9 w$ i8 f if( !pItemElem ), z1 h, F% e! {2 O: C! P
continue;2 }: V+ ?1 ?6 n4 [
if(pItemElem->GetExtra() > 0)8 S1 S% O; `, W( t
continue;
! z+ I% G% ~( n8 \ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 n8 o( v3 \5 T! e/ f5 f# z continue;" D9 Z/ {$ V; f9 _
if( g_pPlayer->IsUsing( pItemElem ) )! W7 c" `- a/ @6 K5 J3 D6 t
continue;
5 d: q& j& U G4 X$ E% }7 v$ o+ L. |# g7 P if( pItemElem->IsUndestructable() == TRUE )7 C: a. F( L7 L4 e4 a
{+ u/ [, C; V7 A! o
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
o' f3 A& L. F% W continue;
$ m0 N, Z. m& m- D2 Y }% P6 U, X4 q# R$ C, \- G
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 Q. M! m- V: t) B$ H5 u }
$ ?/ K" j8 @6 |2 u) ]$ O# D break;/ ^8 ~3 `9 v% F/ |2 z5 b% v# V1 X) t1 K
}
9 d% H% {% D7 w. g1 O1 K4 p case 1:
1 R* @3 F5 W+ x. p" P! j2 A {
3 ]& u* p& x+ c& ?7 I" Z //整理背包
4 M# C1 k# m' e2 ^ /////////////////////////////////////////////////////////////////////////// N- z7 A8 n' M; E) U1 f
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; }' u" G( v; s f' T //////////////////////////////////////////////////////////////////////////# |3 M0 k0 y B- ]- ?
//////////////////////////////////////////////////////////////////////////
0 u4 x' x! g& F. d, e CInventorySort* pInvSort = new CInventorySort;2 O- f& x" \! P$ K- C- X: B, m
vector <sItem> vItem;
8 f# g4 \8 Y* [7 q$ m& W vItem.resize(MAX_INVENTORY);//初始化大小
% z ^+ Q- x$ a2 _' o6 S //////////////////////////////////////////////////////////////////////////
; P! [3 v8 g! Y' B r% `5 }9 H" _6 d //填充数据 c, Y+ I+ {. Y6 t
for (int i=0;i<MAX_INVENTORY;i++)5 I4 k0 f6 e9 e7 q- v6 c
{8 r! w' Y5 N8 c" T
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ D3 V4 g( T' V- ~
if (!pItemElem)
$ q0 h7 Q" \- L( f {
# E @: ]# X; t' y1 L( Z P) p f vItem.dwKind2 = 0xffffffff;
/ | Z4 R) I v3 x- U: {+ R vItem.dwItemId = 0xffffffff;
( w( S3 @& @( ?( Y# @; C9 W* T5 w vItem.nIndex = i;
* v) q* _6 g. O y; q) V$ z }else {1 \% Y: c+ ]. w: E0 U! ]
ItemProp* pProp = pItemElem->GetProp();3 ]8 q* q1 s- i6 {
vItem.dwKind2 = pProp->dwItemKind2;
' y- r9 O) W/ d1 p( G vItem.dwItemId = pItemElem->m_dwItemId;
$ |( @- g0 c2 X- n$ J vItem.nIndex = i;' W7 {. L3 J7 w* D
}2 g6 M$ m: x' `" [3 J: x! u
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 v( X" J& d9 g- z
}4 ~( U; v" p) A
//////////////////////////////////////////////////////////////////////////
* s' e( o$ O2 F9 v5 v2 F sort(vItem.begin(),vItem.end());//排序7 E ?& }; L* x" }
//////////////////////////////////////////////////////////////////////////2 W- ^* z' f: H& J! ?3 D* q+ i
//交换! C& N" E/ ^3 m. e
for (size_t i=0;i<vItem.size();i++)
) p2 J" Z- D/ M9 b5 G {
' Q+ R9 L" x4 H$ |0 W //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 e/ Z; v P7 Y6 A/ } pInvSort->Add(vItem.nIndex);, B- h/ K1 F8 d' x- G8 ~
}
% S# _9 W! H K! p2 s, T BYTE nDestPos = 0;
1 {- c o- a2 |2 H for (int i=0;i<MAX_INVENTORY;i++)7 D" c; [" c% E) d' L
{
# R! A, X( P5 T8 y1 N! b CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
Q3 _( l% ]8 r% y' ?) Q8 T: L if (pItemElem)
3 q4 k1 g4 o; \, i0 p. _, X `+ U {& I4 J, _* J; h: q! L
if (IsUsingItem(pItemElem))
# A5 _; t( w" j# T+ Z {
. B8 |$ _3 L2 D% ]% E! D //这个位置无法放
, J/ H* i" N, v# n' Z" Y' W nDestPos++;
- |$ W. w; j1 A R5 I& R* B6 f }
l* L. b6 L7 m: P- W$ l ~ }
! g3 f P2 s; D: N r$ n. ^7 O BYTE nSrc = pInvSort->GetItemSrc(i);
/ [9 A& k' ?) U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ m5 z/ Z- R0 A: Z if (pItemElem)
, H+ }) J4 m4 Z+ m/ C% d9 j* f {
& p* Z0 g* y9 T- d- O if (IsUsingItem(pItemElem))
1 g' P3 A& I! R {
! \: Q$ ~: t4 D' L8 q: W0 n+ E% k //这个道具无法移动,跳过
' W0 ^' W+ {2 W$ w5 k5 I9 |& w continue;
$ D( z4 M6 Z8 w5 |' @* w }. M, E, ~# z7 h" X4 E) L9 g( P
}else{& _$ S) F6 ` @& M$ t
//空位置 不用动
6 u' U& W. V8 [: f continue;$ j) I" e+ v* J; a0 c
}- B5 ?; | a% v
//////////////////////////////////////////////////////////////////////////
* C/ T; a7 Q. V) O3 Z. i, o //开始移动4 E. N1 k* M3 {* F; k" G
if (nSrc == nDestPos)' j: Q- H" ]9 a( |
{
7 P0 H- N; F% {2 k9 g* ?" n //原地不动
" J0 L* q, x9 H( F2 | nDestPos++;" Y: g5 i& u# E" p& J0 d8 q" h
continue;
2 s# ^$ P' x5 {/ k }
* e' P2 {9 Q2 n6 j F pInvSort->MoveItem(i,nDestPos);
: J; H8 [1 S/ k8 ~% W& c3 B) U g_DPlay.SendMoveItem(0,nSrc,nDestPos);' p& `# `; R: [% D
Sleep(5);
: y$ Z8 C. c5 J5 b //Error("移动 - %d->%d",nSrc,nDestPos);
6 t) O* b/ Q5 u+ H nDestPos++;
5 d7 M5 [% n- }9 `' a4 G+ d( v6 S- x1 `1 N }
}' w; K& n9 f3 h0 ^4 I+ d //取第一个元素的信息' {1 `) d* B- ?/ y& |
/*. Q5 x6 S# B# ]2 ^, z1 q, q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)4 g* o X5 H2 F5 ]- ?
{
/ H1 r) \: @! I9 ^+ g5 k5 e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% @, \+ }7 c F4 W% G$ {4 p$ y/ S. t g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 ~' P% a& R( F5 ?% T
}
! |5 z# P7 a1 j1 W/ z) J2 T */
1 s' d9 }1 ~$ |( _( e //////////////////////////////////////////////////////////////////////////
8 r0 l, a% h/ a& A2 n$ U) N break;
7 z% V( F6 ^% d& @; v, _ }
: U. M1 }4 L0 l. t9 v9 i } # S6 | }2 {; R& [
}
c% x: F. m- P! Qm_wndMenu.SetVisible(FALSE);( E6 F" O9 ~- D- g' ?
- {& x. M3 V# G6 T--------------------------------------------------------------------------------------------------------
4 s+ b/ G; A& W* x, H+ z1 G搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. L, |4 r; `% B& F1 {{0 r1 l# \1 n; J% J' s1 M. p
BaseMouseCursor();7 a* w, d8 Z2 _9 b* t, ~7 n
}6 e0 E; V% k+ w0 x& b% G
在其下添加:( P1 N1 u5 E* G1 l
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point) T7 Y! j# }, x+ D! z/ v. g8 U3 D
{
+ A8 }1 N8 V" h' rm_wndMenu.DeleteAllMenu();
/ V/ r) y5 G8 w) r' B) vm_wndMenu.CreateMenu(this);
% B5 q: ^ J; k. [m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% _6 l- ^& Z* n; D
( g# N9 B4 s2 r0 N9 o, C, v/ dif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): ~4 j; U5 h+ ] |, E) U
{
$ E" z: k' p1 x3 T: N //P以上级别才可以删除所有道具
$ h) T, A6 @) y7 F* C* N) K( Q m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");" Y; C; | _) m7 c$ d! K
}
6 U5 o, N- k0 {6 o; o# C" @m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );& D. D! e- z* y" T. E, w! w+ ~+ F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. v* c# a+ X8 l8 a M
m_wndMenu.SetFocus();
" F# ]# A; y4 e& M m g}" m/ y) }* I& m, G0 i( q
------------------------------------------------------------------------------------------------------------7 A! G5 Z6 N+ H! {' B: W6 K
*************************) m$ G& ^% s# m" ^3 C5 b$ ?
WndField.h文件( h* m9 ?* U, w* j K1 G! L
*************************
" f3 t( I# f& y5 o搜索:BOOL m_bReport;! `# o s( ] Q `
其后添加:
0 i/ k; f k6 X) G! E7 Z# m) ACWndMenu m_wndMenu;+ [9 e i: g3 Y" h
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
# K( R3 i* ~6 X8 D9 a; t其后添加:
+ n; J3 Q w) {; J1 Q, u. C3 W- Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);9 @0 z& s0 b* f' ~/ \; ?! [
+ Y+ `6 Z% a$ w' J4 t: B% M7 k# x6 ?! V& d" G
|
|