|
|
源文件中_Interface文件夹下WndField.cpp文件; O6 f5 H$ F+ q+ S5 o" |
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* W; i$ d# Z. U* R7 F& h
* M' a/ F2 o/ K {% e, nstruct sItem
$ `' [6 ^$ ?0 m( b- R2 J* A! y: N{6 g" x; s+ R1 Z! R. Q2 x8 h
DWORD dwId;1 O" R9 j# q& @, B( e
DWORD dwKind2;- Y \5 ^# h' j3 I. S+ v, p
DWORD dwItemId;5 E1 e; F) s3 B$ k# t" ~! c$ x
BYTE nIndex;
: [) @- Y A) g4 D N" NsItem(){& u. P3 g* _8 l. s
dwId = dwKind2 = dwItemId = nIndex = 0;/ a7 ^7 a1 B, r
}( \0 G* K: a/ E1 w( @
bool operator < (const sItem p2); H' q/ c' E$ F8 ^' h
{
8 r4 J" X8 b0 ~! Y if (dwKind2 == p2.dwKind2)+ _9 i8 r& d* O" P" ~: w
{' T, V+ C1 y9 _4 S3 Y- ^5 U2 _6 Z
return dwItemId < p2.dwItemId;
/ O* c, t) v& [# c. x+ h9 b }else{
4 h \3 Y1 Y) J. I# o" W/ x return dwKind2 < p2.dwKind2;2 r- n, y9 Y _
}
. W U4 b/ z j}7 P* |. S9 x) F' Y9 D/ p
};
- L& L3 ]1 b* x, ^4 X, m% K1 {class CInventorySort
0 e( s0 W9 q- Y( ]2 w! _# O{
# e4 k9 x9 x- h/ O, vpublic:
9 K8 c5 M: V; j) _CInventorySort()
; z! } Z. s3 l: S( B+ u, L{
3 x' U( a- s$ W8 A+ \8 C, |* Q9 H- | m_dwPos = 0;- c+ X' g7 m' v0 ~
}
" k# k4 u$ j2 g6 n) `" H' |~CInventorySort(){}) T. n% B$ d* ~
private:
2 ?9 c/ [2 g: QsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* [2 D: ` A% M8 B. ^. C6 I6 G! d
DWORD m_dwPos;1 m6 l! U2 Z5 q( ~
public:; Y; F' R) P" I N7 K! Z0 q C
void Add(BYTE nIndex)9 G+ ?/ O# h) o8 D4 r& x9 A5 H
{3 ^- A6 n5 K% c
if (m_dwPos >= MAX_INVENTORY)
: {9 |* j. S, i' w r) v {
7 F, A ~' G5 y, l return;1 U& R$ p# M8 B
}
, g6 z! @; F0 K2 Y2 c) Q, t" }/ X m_Item[m_dwPos].nIndex = nIndex;5 {* ~. J0 `) E# H
m_Item[m_dwPos].dwId = m_dwPos;
1 Z/ z* R! s4 g3 ^ m_dwPos++;
, c! E; ^7 S9 R. x0 K5 O d}# E5 `: p3 Y a) }) f. M" y) T: V+ ]
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: B3 ^1 y7 Z& H( V: j: L{
$ A5 W3 g5 C1 g/ j7 ]5 E for (int i=0;i<MAX_INVENTORY;i++): A y5 n4 N! W5 x: ^% a1 Z
{5 R& |4 D6 x; A7 h \( k
if (m_Item.dwId == dwId); ^( S2 n: N2 \7 {) Q f2 }
{9 _/ g( p% z+ ^. F* j
return m_Item.nIndex;9 c: q; M6 t. [0 f* {/ g9 P
}4 p# u9 B# r& B% u: n/ ^
}) r8 |; H+ Y2 S
return 255;$ Q1 D# g4 ^2 E$ w; C1 g8 @
}; h' S) h1 H5 c! e+ b# d5 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 a1 f7 H$ E$ d* `* H8 E1 P8 e2 a{; d1 d/ e4 g; w# {/ G
BYTE nTmp = 0;
* ^6 a2 ?/ C$ i$ H5 v& G m bool bDest = false,bSrc = false;
# u6 }& U% Y1 e4 s) R* H- ?% B for (int i=0;i<MAX_INVENTORY;i++)
# o) D, f* g7 B1 |& H+ ]: F9 e$ [ {9 u' c! V% r6 w6 {/ r
if (dwSrcId == m_Item.dwId), b$ G7 n" O1 g2 T2 v1 I$ n5 [
{
$ Q2 O+ l/ t$ [* m. g. v //id相等 则 改变对应的dest和src
4 ^# n' W$ W, [$ V nTmp = m_Item.nIndex;, W% }9 u% B1 `) W, S) [* R( J
m_Item.nIndex = dest;6 j% Q' |; F) R; W' T2 ^2 O9 `
}
# x' D% G l2 K7 w" A/ e$ ~ }
1 q, T8 L( T# o6 ?/ ~) n2 K //临时数据保存完毕,交换开始
6 p6 [; R2 a. ^ for (int i=0;i<MAX_INVENTORY;i++)3 a0 Z7 Y b, c7 d9 g
{
. J. @* F. }' s$ B: U9 ^& E/ p1 Y- i if (dest == m_Item.nIndex)6 m1 r* Q5 D( `: W& X* B d1 P
{' d3 J% |# R7 g5 Q
//id相等 则 改变对应的dest和src
! @4 X, q4 e4 U% W: d5 V" F8 G m_Item.nIndex = nTmp;
( ]6 O$ h4 C( F- q# m" H }
2 m. F+ a9 N7 s }
% R7 r! F: N, v9 r! l$ C, c! Z}! C6 ~# C' c0 x/ O& A, Y
};8 r& H; I7 S+ [, k" _/ {
-------------------------------------------------------------------------) `3 w, b; K& J% E& ]: R+ t
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& e. y& e2 P0 Y1 t& Z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 S% K3 _! u7 U5 t8 N紧靠其上添加:
- I/ o9 q& p0 G9 U$ v- B2 `if( pWndBase == &m_wndMenu )
1 E) f; M4 H/ h# e( i{% r" u- h/ r j. j' Q
switch( nID )
, J+ g2 K& g3 X7 \ {
, e3 I, m8 m8 N' b9 S4 m2 w& K case 2:
0 }9 G1 `1 C" S# p {& |" y. [" m* z9 @4 Y, N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; O. u- i/ t7 C1 c7 t9 _ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! W- ^+ n3 d* z W {; L) X: x% q2 N4 k9 u( u* o* i7 G
break;
$ v' H% I4 O' }! V$ p# x' M }
9 l8 C' s2 e$ t9 E for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 t: x( A, \" O8 L9 I5 K
{ K3 R& m: _$ V" B# m
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);+ Y/ i/ L h1 v& [
if( !pItemElem )
: i6 s2 _* P8 m; W continue;
0 d- Z- _: n* R8 Y* m8 P if(pItemElem->GetExtra() > 0)! C7 {) P: R& J m+ t
continue;
/ i @" g6 m( L- @8 O/ ^ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 6 S% C) Y, K2 c* U
continue;
5 j2 K6 ?& p- T$ [- |: a if( g_pPlayer->IsUsing( pItemElem ) )0 o: ~# o+ U9 [
continue;
9 D2 g# _- I3 { if( pItemElem->IsUndestructable() == TRUE )
% N2 w- b. L. o9 ~! q {( k! g( [$ K' z3 o9 ^9 d
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ w6 }! |4 M2 j$ L' Q8 B, ?' W
continue;2 N" Q/ f) p3 i! f: z
}
8 p o& Y% A6 z8 H4 h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ k! k3 F1 h7 G7 x* x! _" N% h0 V- ]
}
- t) _: _- h. W& a" L9 P break;& I6 v' p5 Y! d+ a% P
} Y) I2 [: g8 T3 A# N: E# a/ t
case 1:+ o% ]3 P# E. I
{
' y/ C3 n% ]- R //整理背包
6 e$ H; G1 B4 [, g" ^) X //////////////////////////////////////////////////////////////////////////3 B; G5 K7 N2 Q- t; ]# ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 J; F" m! ^" B9 g, o
//////////////////////////////////////////////////////////////////////////0 R! W) l' |4 u8 y8 S+ v# G
//////////////////////////////////////////////////////////////////////////
- u" y. c% Q9 c& N# _* } CInventorySort* pInvSort = new CInventorySort;8 E3 b# J1 f7 P9 @( I T
vector <sItem> vItem;4 a/ u5 d3 A6 V7 J z. @2 j* W
vItem.resize(MAX_INVENTORY);//初始化大小
" u% r; j; G1 ]9 P) z( ^/ l /////////////////////////////////////////////////////////////////////////// v$ U5 G7 D; o+ q: n( N* Z/ ^
//填充数据: h3 p ~3 Z/ D7 Z8 a
for (int i=0;i<MAX_INVENTORY;i++)
& c! E* _! d* X3 u/ \/ p {
3 c8 d) n& w$ R) m5 _ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 s) F$ c# n1 p' {
if (!pItemElem)
: C6 R4 _/ |' o! C' z- f4 ^4 m. c {
9 B: s" c* H! |! V vItem.dwKind2 = 0xffffffff;
1 _- c7 y" L6 B2 t( D8 T vItem.dwItemId = 0xffffffff;( w- \# R7 p' z; k9 e
vItem.nIndex = i;* T' e' w$ e1 q h/ l
}else {" C) _% q- B& e: P- h q! H4 O
ItemProp* pProp = pItemElem->GetProp();
9 o" Z' k1 G( c+ f$ ? vItem.dwKind2 = pProp->dwItemKind2;
$ \7 R. n5 l, a1 W) B* J3 P vItem.dwItemId = pItemElem->m_dwItemId;( [# I( Z) |- S7 i& a
vItem.nIndex = i;
, t" X. Q) z: ?" K3 g! n' X$ `, r }
2 v% e N, o# H& {' h //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ {+ t7 c- T1 m! S$ d6 t/ F }
. D8 u7 v0 m& t x- B3 M7 X //////////////////////////////////////////////////////////////////////////
# i1 A( W+ r6 y5 B sort(vItem.begin(),vItem.end());//排序
: |( B: N* y! ~ //////////////////////////////////////////////////////////////////////////
) t! |- E/ O M* i1 A //交换
, e$ S) D# N9 N: y" y5 U8 F5 J) T# B T for (size_t i=0;i<vItem.size();i++)
. ^5 |$ A, D0 V1 C {7 Y! Z3 y' p8 K: r* y8 Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' S+ y4 ~, ~7 `' e' t pInvSort->Add(vItem.nIndex);$ X) ^" `" O r: o! U) q1 u
}1 V) o1 X1 c0 h1 X: s5 Z# i, K) W
BYTE nDestPos = 0;
% G/ I6 C3 {( k2 ]7 Z) k- f" O for (int i=0;i<MAX_INVENTORY;i++)
% n( W7 T7 P/ ~" \6 R8 ]4 C9 w: R {
; t8 ^' ?" {) f& Z; q }0 ^; F( x CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);6 j2 p# e1 _' I/ d
if (pItemElem)! c E: m+ e, `. }
{
6 ~, G8 u5 R9 K6 X, ~( K if (IsUsingItem(pItemElem))
! u6 S4 Y( p- Y {0 W6 ~5 |1 p+ G+ s3 I, e
//这个位置无法放% O$ N) y9 [7 ^" I
nDestPos++;
; H3 B% P; `. @) ]$ ? }
0 M: ?% S, N4 O }7 W/ b: o; _# d8 e
BYTE nSrc = pInvSort->GetItemSrc(i);* w& X) w! r& t ~6 t
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, C" L1 i6 u" @4 q. H7 J# J
if (pItemElem)
6 k/ {8 u: q' m# B4 d3 ]; p {
# q/ \& c. W% N# R: ~8 C if (IsUsingItem(pItemElem))% x% A% W5 i y- Q7 J! K- T- W
{
7 |2 J; |( _ o* J //这个道具无法移动,跳过
: G8 i; F' v y2 S y+ T continue;
1 ]) e, v3 s2 A' P' u4 D) Q2 [ }
2 R( W+ o) G( { }else{7 ]+ l3 @) q4 y/ j
//空位置 不用动
1 z, N/ Y8 l+ }+ Z8 K" y continue;
" {, \% }) @8 r; U2 r8 r8 _ }
; P8 Y% H8 N# U //////////////////////////////////////////////////////////////////////////( z( P+ D/ Y. C& O
//开始移动% }# J' A5 d) \3 Q! c% I5 q! _2 }( _
if (nSrc == nDestPos)
5 a+ [4 k% w' \- L5 a {
4 b. R& n7 v) v# e //原地不动1 H& @) F/ T, t- C" {0 k
nDestPos++;
! ^; I/ d1 W2 Q5 c% ^, R/ T continue;
$ F) |8 G; g4 v( H, l6 M }
- X6 `. \$ e' [2 r; X6 Y# w7 S pInvSort->MoveItem(i,nDestPos);
7 _1 ]# E: L( u, g3 h& ] g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* E* A9 B( O8 C6 d/ N8 T' _ Sleep(5);
, q; `: j8 I. {' {! t //Error("移动 - %d->%d",nSrc,nDestPos);
! S: @' ^7 i( n. F" n nDestPos++;
1 v5 q% Z7 l2 ?# x9 X; m& a+ L; o8 ~ }
$ ?; e* f* z b' h //取第一个元素的信息
" l! N3 S5 {! v: W: s /*% K: U% r; a. G$ R$ I
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' w3 m; W- ^+ y# P {
5 [* r! i. Q) Y: c Error("Move - From:%d,To:%d",vItem[0].nIndex,x);6 G( i* Z3 F" ]3 o
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, a( o( F2 O( q+ M$ I/ {
}( Y) T$ s0 [% ]0 W
*/
9 v1 E" p) b) {% c3 V: k //////////////////////////////////////////////////////////////////////////0 U) Q% x) f# S: A* C9 S
break;
; [1 {4 d' T1 u$ ]+ C" _2 |+ R }
6 `+ ` V9 }( I. T5 G }
' X. v. J& p- m) O+ e: x, p! o}
* {; {; M/ H9 N$ em_wndMenu.SetVisible(FALSE);
5 y; t0 H# Q9 l# X2 d3 N+ F
: _$ \: F! z% `--------------------------------------------------------------------------------------------------------5 ~' A* o. C* _! @0 g
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. P# g; @' R+ |1 L7 v. \! [{
" A) U% M: O$ b2 `5 lBaseMouseCursor();5 f* P0 @0 W; O. L% N- E
}
7 U* E3 e2 a& F" k X在其下添加:
4 {! L0 L8 Z+ x: A" e! `void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 Q. V7 B, g5 n" t7 R- D
{
* ]+ Q' |* r- v# Am_wndMenu.DeleteAllMenu();
$ Z3 R) {3 [, [ um_wndMenu.CreateMenu(this);6 U6 m5 C0 b$ x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
% e: h: Z, n, L* @$ z, o
* Y: B, b- q% [7 H" ]" Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); ?! l. }$ ~7 V2 u( ^. q! \/ f
{9 A4 S6 x6 i/ B) w5 E4 d
//P以上级别才可以删除所有道具
) @/ @; {/ O4 t/ P' b/ k m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& J3 Y, ]2 z' o- v; N7 v
}7 r/ |. l1 r& U$ T$ n
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( c2 ~) c4 j: l( \& Q, Um_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 u; k! r( g( q/ H
m_wndMenu.SetFocus();: |' J3 X& {, I2 G
}
$ o. \; s& m e! i------------------------------------------------------------------------------------------------------------# o$ k( D$ D2 J# m3 J% v9 K
*************************/ E$ N/ S* z3 [ p2 q) ]
WndField.h文件6 Q( U5 f3 Q1 j2 X. e/ ?
*************************
7 v1 J: d/ M5 H# ^/ t搜索:BOOL m_bReport;% d& G4 ]$ o* i. P+ U7 I. s8 r
其后添加:
. b! p0 o" p3 y4 _) n0 FCWndMenu m_wndMenu;! O' p) t* z1 r. J! B1 K
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( `7 K9 s7 s {- [0 E
其后添加:
1 _* F) B, w2 J& L9 a+ U& evirtual void OnRButtonUp(UINT nFlags, CPoint point);6 C/ E# T: \. i" A7 ^) y! @
- k% b) ]4 g* _1 l/ V$ J# |
1 ~2 _! ~1 X1 l7 i+ B; ~0 K0 c |
|