|
|
源文件中_Interface文件夹下WndField.cpp文件- _( o/ d$ R. S2 _
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( K9 w3 H- E, x6 j! F* s
4 M+ n& Q) \+ k5 _: ^. d
struct sItem8 b3 w) P- k0 H7 A. m# E
{0 [, T4 q+ U, }/ x/ V
DWORD dwId;
4 W" `! }/ `% j XDWORD dwKind2;0 Z: K$ I2 E ~% u
DWORD dwItemId;
3 z; j9 N8 @4 v* U3 a& ?& EBYTE nIndex;+ P. K- O- u, z) m
sItem(){
& ]! G% L4 a/ d$ _) ^( |% Y dwId = dwKind2 = dwItemId = nIndex = 0; m: ] X; @6 K( O
}
; y8 m- C& N& k& k5 U+ Lbool operator < (const sItem p2)
! t, x& ?5 w b{5 [$ u& g' P; ^) O, q7 i
if (dwKind2 == p2.dwKind2)
% M- r$ l' n* b {
# v1 _9 W: O& I; |. `0 U0 n) Y return dwItemId < p2.dwItemId;* f$ n& o1 Y F
}else{2 L5 q% Y6 l8 k. a. o9 J: z" [4 j
return dwKind2 < p2.dwKind2;
' l8 w+ _1 d( J2 K }
4 j3 @ q6 T: |% M) _}
3 i( @% V; U2 C};( X9 a9 P Q7 R- A* p
class CInventorySort
( } _( i0 I0 n; D/ z' A* j{
8 ^8 q' W7 {/ R6 S% Spublic:) `0 G6 T8 I2 W$ p( C ^
CInventorySort()
& A4 w @) K" x! p3 k- p) C{
: N5 _' m: p4 ], r' W- B1 s m_dwPos = 0; }; O- u/ Q: T( s' \4 ~+ U7 o
}" o4 N. e2 b5 L: d8 R5 F4 R* J
~CInventorySort(){}# x& O! g% f% a q( K, L/ j
private:! X3 t/ I+ v! [# T4 l; E0 @6 O
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# p" G# @( T4 r! p2 R! \
DWORD m_dwPos;
' ?1 x' O0 ]0 kpublic:
! Q7 H% p* j, K @( Z) z* D5 [2 dvoid Add(BYTE nIndex)
* x( s2 k& P. {3 e- N{8 \0 ]* T# h) T* ?$ Z
if (m_dwPos >= MAX_INVENTORY). c" `- ?0 G$ d+ J+ r6 l; m
{1 L: }, A+ ~! s2 G% m6 k
return;/ W; y: ^ [* R) S) }
}) L# d) y; y9 I& [
m_Item[m_dwPos].nIndex = nIndex;! ~; G+ q3 |( F
m_Item[m_dwPos].dwId = m_dwPos;
+ m5 I8 ?- b2 Z m_dwPos++;2 u/ ?/ i' N9 _6 q1 W
}5 J9 Z. C5 z% {% ]1 }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: P/ N2 t3 Y& \
{
7 \: o, `5 ^% p7 E for (int i=0;i<MAX_INVENTORY;i++)
: p# S/ y/ u7 O) y, H( f {9 ~# N0 r0 \4 C# U* t+ D$ D6 q2 R7 c
if (m_Item.dwId == dwId)8 F+ H% j. U' n a. ]
{
$ n6 Q% m5 p! w- q return m_Item.nIndex;
+ `* d9 L- }4 B" ?5 x/ x }
% j+ R0 W: n1 U: _; @ }
& v* c. b# P2 B& p; J return 255;
/ ]/ s( x( k7 L( `% ]/ a}
/ c4 u; p6 F9 @4 N& ?; _void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ ^6 Z/ l0 u- ]' @{$ ~" O' c5 O0 d; Q2 A9 c; s
BYTE nTmp = 0;" Q9 p5 H, ]% S; s0 _
bool bDest = false,bSrc = false;1 d! D% W* z& B f
for (int i=0;i<MAX_INVENTORY;i++)
) M7 X( R' n$ Y5 b2 d2 _: e {. Z8 E' v" W3 G. S3 X, ]
if (dwSrcId == m_Item.dwId)% ]% V' W8 k8 R q
{: {! D" A6 A) P4 O8 M; h8 a' z& j
//id相等 则 改变对应的dest和src9 M3 p# u1 |. O8 B7 h
nTmp = m_Item.nIndex;) I& {7 h4 ?% ~
m_Item.nIndex = dest;7 E" Z4 c! v _0 B) O1 A* Q
}
% w& Y/ Y7 N/ i* { }
+ U( b/ S% z7 H2 t2 k# ^8 Q //临时数据保存完毕,交换开始
* F5 Q6 F9 Q0 U. P7 Y2 |, o3 j& E for (int i=0;i<MAX_INVENTORY;i++)
/ Q: T/ q+ \/ A" T1 w {6 x( V/ |3 w. T; d2 G( f, | ]! V
if (dest == m_Item.nIndex)
; R8 e4 v% J+ W( `! P {+ y, z6 S: W5 y) I" {$ b- |
//id相等 则 改变对应的dest和src# f2 D3 u/ S7 U! h( p5 N8 m
m_Item.nIndex = nTmp;, d2 B d$ G+ g2 G
}
" k9 B" e7 \0 u3 i P5 H I3 a: G0 \8 M c }
! ?6 ?' Y; y, p; w}
) Q! h3 A/ t6 z! V k* w};8 H4 ?; P3 M, Q1 y" w
-------------------------------------------------------------------------
" b6 b, C7 `8 J* F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); l1 L5 B' x4 N# [2 i
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& C, y0 G9 \! G) l8 s) w5 O紧靠其上添加:
% y4 Z- i$ q* L O8 n$ sif( pWndBase == &m_wndMenu )2 h; x0 v5 ~' Z5 D
{ U7 z3 F" ~2 n* W, k
switch( nID )6 X8 v# q: f' x5 ?; `0 t. c
{& P& Z! h+ L- ?0 h/ X3 \# d9 O
case 2:! N& E7 ~) l2 M/ f6 M+ E' V7 }
{
, E6 f% d) O/ S8 t //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ L, l& ~ u V8 c! } E/ [9 F if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, l& s! A, g! D W! [( j {! D/ J* d% t; ~, k/ D3 _2 _
break;
" |. s! v- b; {' x8 _: z5 y/ u }! D; f$ o: U2 s- o# I. R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
3 q3 m' y6 Z: G$ d* p Y: p; T {
- E/ W' X6 E! {2 P; f3 T1 o8 k( } CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, d4 Y- S6 W% Z4 |7 e3 b if( !pItemElem )& M; P+ S9 j0 }; e$ [% S
continue;
& u2 S, M; d9 f9 H& y if(pItemElem->GetExtra() > 0)
: L/ ^) T; f( E4 ?! ?$ a& E continue;
4 W9 }$ _- m, x. q) u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: _8 M0 w, X% b W5 M/ q+ V! f% w continue;
8 k/ Q+ p3 h! ` p# F6 | if( g_pPlayer->IsUsing( pItemElem ) )" \: |$ g1 o) z
continue;
) ]$ A) W$ D6 c8 I! ~7 u if( pItemElem->IsUndestructable() == TRUE )
5 ^: l* B1 n4 |' y* r% n {
/ s, Z- P% m& R3 m g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ] v( X0 \3 \0 P- q. S continue;: i$ Y" `" Z, O: l
}
1 t- `3 o1 |# q9 Z# s" g g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);6 D# x: z6 ?: B# K* O+ x; g
}
# E$ a$ G( E. L+ [; ? break;
4 k4 g) [' p, k2 t# x4 o }0 x. T0 A* _5 T$ L; B- t9 ^
case 1:
$ G1 k8 r% i* O# q8 C {- o6 h# C! u" z4 z q: I
//整理背包: H' E1 k' r8 B0 g L6 S, G
//////////////////////////////////////////////////////////////////////////8 F: h# ] Q0 b6 C, r- |- t8 _
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
, ^9 G( Z: |$ Y7 ?* P/ O //////////////////////////////////////////////////////////////////////////
; v; y- g' V, Z, v# C //////////////////////////////////////////////////////////////////////////
; R7 b |3 _' ?' A* H4 i) ^/ d1 ^ CInventorySort* pInvSort = new CInventorySort;' {2 e* M; O C1 j
vector <sItem> vItem;
' ^) L" p }/ V; K; j" n% Y vItem.resize(MAX_INVENTORY);//初始化大小
8 h3 D4 ]- E# T+ k //////////////////////////////////////////////////////////////////////////8 u! p, e7 d! y7 y
//填充数据2 t7 L- l2 h" `2 L. D z
for (int i=0;i<MAX_INVENTORY;i++)( U0 s8 @ T2 k- ^4 d5 y9 a% k
{+ ^: q, @8 [) T& b5 D
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ g: @6 j9 W3 | if (!pItemElem)" U% r5 B) h& z" N3 M2 @; g9 o
{1 I' L; }4 w' E r: e+ o: i
vItem.dwKind2 = 0xffffffff;! c' Y! _- L" i j% J
vItem.dwItemId = 0xffffffff;3 b$ q" p) V, @
vItem.nIndex = i;) U; t& M/ a$ T2 ~/ M
}else {. ^/ m3 Z, ^* |( c
ItemProp* pProp = pItemElem->GetProp();
( k" e; ?5 Z" V, d vItem.dwKind2 = pProp->dwItemKind2;
& Z3 y* |2 K6 x S) N1 ^ vItem.dwItemId = pItemElem->m_dwItemId;
9 Q) E: `+ x# o O0 k! l8 d Q vItem.nIndex = i;0 k$ s0 ?- T8 M9 Q% P8 S! @
}
( m/ \6 A+ t% `% D* e //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# Z' U# L) k: [, V# v9 s/ o
}% W& v+ V) ^7 s: R3 Q* i+ p+ x
/////////////////////////////////////////////////////////////////////////// w! ^# H6 T$ [
sort(vItem.begin(),vItem.end());//排序
, f0 t- H9 M- f. c& Z; g: B) u6 H. \ //////////////////////////////////////////////////////////////////////////
$ a( z& l; l3 z' F' k& i% i //交换
0 Q0 X$ \- L- \ for (size_t i=0;i<vItem.size();i++)
2 ^4 S i" {6 F4 h2 M& Q) L, @0 z {
9 @6 b E, R1 K6 { H! y, A //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);) S* {# @: W1 J
pInvSort->Add(vItem.nIndex);; x! o" P3 c: _5 S4 f. J
}* g5 i8 K6 J/ l; a$ B" s0 l! S
BYTE nDestPos = 0;
( f& n4 V: J" M6 e4 g1 `* ^* Z for (int i=0;i<MAX_INVENTORY;i++)/ M" M# G& A$ Z$ x" n$ W
{
9 [2 E$ d7 g+ J% R" U CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* Q+ o; o) c: A: x, x
if (pItemElem). g$ o7 I+ Y) z$ X% D' t
{& |, ]+ |! p# {
if (IsUsingItem(pItemElem))
4 H# [4 q- \1 ?8 ? {
4 e/ r6 A$ x/ P9 I0 f" D# b8 i //这个位置无法放
2 x* h# k9 ]/ C nDestPos++;9 Q' l0 o4 L e# P5 \* `' ^
} R0 ?- R$ Z6 z5 A& f6 {7 X# R
}
& a& o' r. z- r# K3 k2 F2 V BYTE nSrc = pInvSort->GetItemSrc(i);
; g+ f8 T& A! \ ~; s+ E1 K pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' I. y4 W- O9 |$ R' J4 z5 g if (pItemElem)8 T5 F" D( d9 s- ?
{
8 O( [) ?' S+ `( A4 x if (IsUsingItem(pItemElem))3 k4 M5 U. o9 ~8 D: O
{0 m p1 V* Z' J9 `
//这个道具无法移动,跳过. A' V1 g# g* j* Q
continue;2 h# j2 _; r; [, x* d) T) q
}
- L# ]0 M) F- i8 `" I9 x$ U2 | }else{2 F1 b6 [0 P8 w
//空位置 不用动! v$ F# h. ^2 q+ @* u: x
continue;
0 \! |5 M8 O2 P }
6 v7 H' q+ _. Q2 v- ]" }( F //////////////////////////////////////////////////////////////////////////4 H, _# c: }- ]
//开始移动6 O: B3 e6 i/ {) q- w6 z8 {
if (nSrc == nDestPos)
3 D: K; N u( P, S {
# M6 v9 T- [7 e" Z //原地不动 p1 t5 ~3 u2 m; X; D9 M8 B
nDestPos++;# Q/ ~ `7 O- f
continue;
* W8 r, y( v( d1 G0 | }
) s5 I0 e( x( u5 t) V5 l1 x pInvSort->MoveItem(i,nDestPos);
! t+ o" W( u7 Z g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* R+ d/ b7 `4 u+ u: F Sleep(5);
3 J p0 {# b% l* E5 { //Error("移动 - %d->%d",nSrc,nDestPos);
" {" U8 K9 w9 d( _, T, n nDestPos++;
5 C4 a$ e: s+ ~! ~4 H- X }' A9 {- q. u- B% W! W
//取第一个元素的信息
, W8 R/ n) u$ {+ H0 g& F" y /*: J3 A& K S: y7 M/ r0 i z% Z5 G+ b
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ K6 G4 V; m$ G* e, V! f( b
{, K# ]5 M3 Q: n7 G/ o# U& P* _: r
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
O |3 ~7 s) D g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% [# x5 a: r, I, V6 Q% K
}0 l# f: r+ t) X L" p
*/5 u) V) i, L7 a; O2 W q9 e
//////////////////////////////////////////////////////////////////////////
- F3 |: j" T) ]+ m7 v break;! W5 d H2 U6 L
}& e/ Z! m/ j3 i( W
}
4 Q d2 ? n3 c; B' W! {}
0 F1 K3 `& L/ w1 P' W+ R4 m& Fm_wndMenu.SetVisible(FALSE);1 Y& E. {- W# ^ G4 M8 q
' T. W) l3 Z8 } l; H--------------------------------------------------------------------------------------------------------( p0 A( ?, I; I8 I5 S/ P; }. w
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* j& W& g8 d# T
{
( T/ U" F9 R1 v( D% ]8 H, ]BaseMouseCursor();
% M; W. @2 [6 {6 v1 D}
/ U3 [1 w1 r7 B# f5 ?. m& I- e在其下添加:& T# R" U$ r. [3 P9 i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
$ ]( g1 `& z- l8 L{
! M: H0 A, [5 D9 I3 Q* H* F+ P/ Pm_wndMenu.DeleteAllMenu();0 X1 a$ }" }5 V* Q3 q; y J
m_wndMenu.CreateMenu(this);4 \. Z7 B) R, m( v7 P& K
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 n E. c8 p7 `. G, {* {5 f5 Z6 {
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) T8 {# a2 Q- e, l& q( m, D( s6 ]{4 q" j$ M3 c! w" u4 r/ i
//P以上级别才可以删除所有道具
* o2 q( B6 b3 A$ B4 V7 ]; f m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# }% ]7 T( M0 `
}
' `; T! n4 b# V- v0 g1 u) m: ^m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; g7 e$ ]) G9 R1 O2 U) A, h6 tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );& i, `' ?3 H% g
m_wndMenu.SetFocus();- [) ?: C! P$ a& n' ?: X
}
& p; L. p. t C; o. c------------------------------------------------------------------------------------------------------------+ _% Q& f1 I2 p7 x
*************************
0 x. k% n( |; L3 A- o; L& y# V4 RWndField.h文件& Q2 I* i5 R+ ~5 R' t4 [
*************************: }% e, f3 ?2 } ?1 y
搜索:BOOL m_bReport;
6 a# Q+ ^+ v2 V8 n" ?0 w0 p其后添加:! n/ D& x! W( Y5 p, Z: Q6 u+ X. @
CWndMenu m_wndMenu;
4 b5 t( x4 _; t B5 D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 G8 M& X. f9 [4 I( m; m, A: C其后添加:
& @6 s* E- p5 d8 F. dvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ U' ~; V' F( z( a+ V8 g
+ T8 x, R8 o O1 Q8 h
/ \$ K" \3 {8 q7 S+ q- e9 \7 e |
|