|
|
源文件中_Interface文件夹下WndField.cpp文件- V: K# k: d; E- t: ~
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& J9 G! ~* B7 E1 b5 S
& C$ }( S4 ~+ H. |; h% }7 c0 P% ^( Y
struct sItem y; Z) t! S) q4 \0 k. O0 v
{
4 ~* R T! y3 c. M+ l6 f6 aDWORD dwId;' t5 c" _+ N4 g
DWORD dwKind2;; `! d& Y% v2 K# q0 L0 v5 o
DWORD dwItemId;1 S5 p0 W) ]+ L" V
BYTE nIndex;
) W. y* }" C: h$ _7 ?, B3 WsItem(){
' Y$ C: R/ Y8 E% C6 z1 I& o dwId = dwKind2 = dwItemId = nIndex = 0;/ X) A8 H# W+ R: L& k
}
) ^* e. v9 ?. ]. f/ i% t% e% R* ^bool operator < (const sItem p2)( @% W- @8 U1 P
{( }5 p2 g9 p5 k1 D. p p
if (dwKind2 == p2.dwKind2)0 \3 X8 i6 V* m5 M6 h: U% B$ K" r
{. l3 p. P* e( |! d, n! j& ?' r! e
return dwItemId < p2.dwItemId;, f3 ?% z% e0 [& ]' R
}else{
6 C4 L' a* y/ u+ G/ A0 w4 ] return dwKind2 < p2.dwKind2;6 M7 F4 w% u8 j- a( E' ~. Q
}
! F$ Z( E( F/ k. I}
# N, S% I, w3 D0 m* U2 _- ]};
' _6 ?5 ?5 b4 |. U3 S) gclass CInventorySort% J' g+ i# N( E# v7 N
{% z- t7 b5 i6 f0 K% @) L
public:' G/ n2 m! k8 C& v3 n1 x. A3 ~
CInventorySort()
: q* K" l2 b8 Y/ l{
! |3 ?) r2 Y0 P: Z# `2 } m_dwPos = 0;
% R$ H/ q8 P: o8 L W7 d: R4 |8 Y2 Q}/ [" _ M! C- @7 B
~CInventorySort(){}) X+ ]# m U' N7 T+ U+ U# O
private:9 _3 ]& V W! |( ^* _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. O P) z9 H- ~
DWORD m_dwPos;. Q2 \% [0 `7 D I
public:
9 m3 c9 y1 [3 Xvoid Add(BYTE nIndex)8 B. ? r; K+ a+ C0 C3 r: _9 J* _
{
4 l! M: G6 u; ~$ X" Q" [4 T! V if (m_dwPos >= MAX_INVENTORY)- l/ S" v, h, {6 r$ b& x
{
* o; R% k4 T/ M7 d9 W; S return;
8 I' U8 E: f$ W* u& k5 Q# a }
' N# W' }6 r/ h. \( |% [- ~- o% h m_Item[m_dwPos].nIndex = nIndex;
- f- T- m7 W0 M m_Item[m_dwPos].dwId = m_dwPos;- y8 a5 E9 y# h$ z
m_dwPos++;& @! a2 I, {- C: F
}
' k9 L+ r0 i8 Y5 d7 L7 fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
! \8 t- `+ Y3 S# l* ~{
$ u6 Q! b( u% j1 \* @1 W for (int i=0;i<MAX_INVENTORY;i++). [ y" a* a# G! K3 i/ F
{
' X; g% \" Z9 O6 ~$ k. Y4 W if (m_Item.dwId == dwId)
% t, m, x4 H. x# z- _: ]3 @ {8 Z5 S) f R, J/ V7 P. ?' n: M( `" n
return m_Item.nIndex;0 O& o& d' [0 C5 _8 E
}
, _1 T2 H4 e0 O2 y }9 {: t2 J- [7 R7 a0 N( F
return 255;
1 w6 ?: s+ v/ i% n# V* j8 P}
6 B5 z5 ~* p) ~ W9 K# Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
( W: R% H- v- i6 W0 G- }{
- c. h9 M } l" U: C; D BYTE nTmp = 0;6 A! m+ y0 |0 v! \( q/ }
bool bDest = false,bSrc = false;3 f$ I$ T; A7 t
for (int i=0;i<MAX_INVENTORY;i++)
7 l( `) {+ {' r$ G h {
7 j2 `( i \ p8 A7 B4 h if (dwSrcId == m_Item.dwId)' N6 q( Q6 y6 e# @8 O$ Z( b
{2 |: e' o9 u* w4 t3 ]: \
//id相等 则 改变对应的dest和src
: E; m: t6 [# [6 V/ Q nTmp = m_Item.nIndex;$ i2 @# q8 c& F$ f3 ?+ Y- g m* ]4 N
m_Item.nIndex = dest;
- r) O- Y$ |- c" U7 S( P }
+ M* T+ [) q7 \ }
5 U9 H! @/ A1 W! O \5 k7 c //临时数据保存完毕,交换开始
% x5 I: M3 s3 Y for (int i=0;i<MAX_INVENTORY;i++)
# x$ A. J; E5 ~9 Q {
2 ]2 ]0 b& w9 t9 I8 d if (dest == m_Item.nIndex)
6 o! a7 h( N/ m' k {# a# t; A$ W$ V" x% C5 g
//id相等 则 改变对应的dest和src
0 k$ e6 W- S( J, w6 T F m_Item.nIndex = nTmp;
9 K% I1 V/ N1 L3 d. T }
( d g) Z( C8 K; _' X) O- { }
6 |& \$ @ h) o8 v: c* A! ]} O% E; j; M! L, {# O/ \$ _; `5 w, p
};
" X/ j1 x) ~1 G-------------------------------------------------------------------------+ ~9 Y: E0 C& Z) T$ E
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, c7 f% q# s3 O1 k e搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 o( q+ V; I: S* i8 O紧靠其上添加:' s! Y) |+ V# R# E) Q" |8 }% j
if( pWndBase == &m_wndMenu )& r+ s) b. l) ~8 n6 ], _
{
; n; f+ m% ]& v D X switch( nID )
+ Q4 Q- @; b2 u7 h. I: ~( z {% s9 M+ L2 _' g1 X
case 2:# R8 S/ h& N; a5 d {
{
1 b% [- J# t9 a3 D4 s2 y4 S //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& N: l$ R' ?! ]( R if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# t. H9 I' T# r M$ h3 g. m {: P1 C, k4 Y* L4 f* q, J7 }
break;
' e, q; h4 J) Z- P }) n1 `) O! A" J, D8 R
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): r$ T" T0 l, C
{4 ?( T. w# k. o4 h$ P9 U, h
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 K: V( i% y# h- Y- M
if( !pItemElem )
D: K) ]4 c% V: _' e continue;
8 z4 c4 y7 K/ X) N! o: Q. c+ c if(pItemElem->GetExtra() > 0)
8 C \8 M6 |1 a5 i4 G continue;% ~0 ]9 p9 d0 H c% x ~2 @' f) M5 Q- F5 j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
6 L7 @' Z) N& V continue;
2 z9 _: f5 W6 @ if( g_pPlayer->IsUsing( pItemElem ) )& T% i* O% s0 L% F! ~8 Y& Q
continue;
) R! G3 M4 ~ f8 q0 P2 r/ r if( pItemElem->IsUndestructable() == TRUE )0 w/ _% V3 W. y5 a9 h5 M8 e
{
- b3 x6 E: h: R. X g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& G% b* f' h1 {& G/ J
continue;
& n( [- `4 ?# i6 y+ B6 @* B9 Y }( ? @, @- C n8 |3 V6 N1 X
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
& C& V; W7 ^% _6 d8 p- N+ i7 S }! t9 V _$ O. O
break;
5 ~" f; |4 n4 x) F- m6 @& P }9 t2 L2 z' `4 F& B9 x
case 1:
( k ~3 k# w5 m6 d {
: q& y% f( O6 R, O //整理背包, w, A) W# ^7 f& ?! r
//////////////////////////////////////////////////////////////////////////+ E, P0 Q' F! E- |5 N
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
" _% J( O: M% x //////////////////////////////////////////////////////////////////////////
1 [) q8 |; Z9 s1 A //////////////////////////////////////////////////////////////////////////
( `3 S; d M8 x Q CInventorySort* pInvSort = new CInventorySort;! b/ b; U; @* R0 t/ o* e! l4 X, a2 `
vector <sItem> vItem;- n8 U4 _9 q) v0 w
vItem.resize(MAX_INVENTORY);//初始化大小3 o# }( ^; {0 X# @ d
//////////////////////////////////////////////////////////////////////////
i1 z* s# @, Q3 \6 | //填充数据& W5 e8 ^/ W' @7 \
for (int i=0;i<MAX_INVENTORY;i++)
% R# W/ W& m. f7 E7 T {
. X$ ? Z3 N% w1 J CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 e0 M3 b# Q! B! N: |2 N9 {1 P
if (!pItemElem)
1 h( e) z: e! S$ m {' m' ?- h- c, E$ h8 V
vItem.dwKind2 = 0xffffffff;; Z/ U: c/ `. T; n
vItem.dwItemId = 0xffffffff; |( s& Y- V3 w: h. [$ K
vItem.nIndex = i;
0 }2 F: o6 V& B/ o# O }else {
% U |5 P1 j6 ^- o s ItemProp* pProp = pItemElem->GetProp();! q2 C6 _; O1 K9 }- R# h+ m
vItem.dwKind2 = pProp->dwItemKind2;
/ j, [ V' ]( x# G9 z9 O$ L6 y0 G# Z* E vItem.dwItemId = pItemElem->m_dwItemId;
" a1 K: B! S- s$ o+ R( A) m, L vItem.nIndex = i;# i) y7 J' N/ [* r+ _5 R
}8 r* H l5 w; g. v/ F6 r- m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* X+ H' g" L% |; w }
4 q, h3 O* z, [" h/ X- \ //////////////////////////////////////////////////////////////////////////
: G, w. Q1 O1 F sort(vItem.begin(),vItem.end());//排序
# L9 }; e9 S4 \ //////////////////////////////////////////////////////////////////////////
- I7 f( r+ z2 E //交换
- H) y& x3 O# ?, H for (size_t i=0;i<vItem.size();i++)6 e3 s$ a4 V) K# V: {$ |
{+ {) d; D: p( E
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
1 A, q" S, K) i pInvSort->Add(vItem.nIndex);
9 d' [! L k( Y s3 M! M) u" G }3 {4 u0 \7 S W3 J7 W
BYTE nDestPos = 0;
' D" s: y! {: g6 D! |3 P1 O0 p, @3 ~ for (int i=0;i<MAX_INVENTORY;i++)
/ w9 o2 }, S9 u s {
# V* j& Q0 B7 ~; k* p CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
6 H' x3 l" e4 p" h) g if (pItemElem)7 t1 ?2 k/ }3 J* p- b% v$ y
{
, [7 C! s, H" {+ d6 H/ V if (IsUsingItem(pItemElem))" }: t4 T' S$ G9 J0 W# S" E2 \
{
0 h& ^/ A, y, k //这个位置无法放) R4 H0 m2 j6 X+ i1 @4 i
nDestPos++;
( ]& \$ c. `" ^ }
- W: U" L* N/ H/ @& z# v# ]! H" {2 ` }
8 _, V N+ G/ \ ^4 e) K- z BYTE nSrc = pInvSort->GetItemSrc(i);* Z1 W8 d" A G- D) S# N/ h, b0 \
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ `) ]" j1 z$ I. W5 S V9 l" h if (pItemElem)7 c( W3 f z4 m& C: |% }! _
{+ L$ c2 a$ S7 h% X3 R. V/ P6 H
if (IsUsingItem(pItemElem))
- C M2 I+ ?0 k9 m6 s( D {( c+ Z. D _# i/ k( I- u% f. h
//这个道具无法移动,跳过- n4 h; ` V8 B! ~; d# K; g
continue;0 r" e# I0 A) r* @( {# k
}
# Y; B/ B; j0 f5 u8 [' j }else{
\9 w- [ y1 I1 L# \ //空位置 不用动' ]! C8 b, F9 v* I" [+ U
continue;! ~2 K, [5 k! `2 \, `5 F
}$ n0 m; I# L' t3 I0 p
//////////////////////////////////////////////////////////////////////////
, q( R, A& ^) l5 M5 R //开始移动
+ B7 n: I( Z6 B# U$ _3 h4 u if (nSrc == nDestPos)
: x+ k {& Q& p {7 ~) W; U7 l5 m
//原地不动
% k, K+ G. N1 }% c# p: b3 W nDestPos++;6 P: e8 W! Z$ @ _6 B$ X0 I4 v. }' M
continue;2 O" b5 v) h3 R) C8 R
}% T, e7 j! g0 X/ n r! s' O1 t Y
pInvSort->MoveItem(i,nDestPos);
- y$ S( ~ Z, f2 i3 F9 U3 ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);# l6 w8 y( t4 Z. C7 n
Sleep(5);+ J7 Y; |! A" v/ m7 T( c
//Error("移动 - %d->%d",nSrc,nDestPos);5 [& W3 t7 x, Z2 J7 ?
nDestPos++;9 v4 c" U& B. F0 O7 G. F) P8 r" F
}2 n: B Y: D8 |, {% E. k6 ]1 c; g
//取第一个元素的信息
% ]/ Z2 R( e. Y+ K6 E9 @" v* V /*
- d4 y0 a6 I$ E3 t v+ v( W if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)2 @0 C9 A$ ]0 Y. ~5 P1 ~' j8 n
{
& q3 U0 O" F- d/ G& l2 o* R+ e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);% o& n+ S+ ~* |0 l
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; D" ^2 L, G( q) f; a }
7 B: \7 ?3 g! `' R% o */
2 I" ~9 g3 S( f/ E! x //////////////////////////////////////////////////////////////////////////7 E/ a, f; \' w! o
break;7 d& Q, x) R& c' @1 M- |
}' h4 E+ |1 p( F* x$ ~$ n/ Y6 }* u g
}
, U3 J& _) b; k, K N- A' I/ e}
5 n9 O+ p7 f) j6 y( w p9 @m_wndMenu.SetVisible(FALSE);
3 m' [* g+ \2 m8 _. u- J& d
4 }, q& t. K- u/ M' ]( F--------------------------------------------------------------------------------------------------------+ H Y6 M6 @; Y4 R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 C3 `4 {8 r" m' {$ V" z{( z% U% N" a1 c; _
BaseMouseCursor();
. Z1 s a" J. b( R) g; a}6 O8 J/ t2 P4 x/ M5 a
在其下添加:7 D. U5 Z) r C: a' A% C4 j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* h4 G, x! Z& L- t5 K1 @7 G: o" b
{
( p5 V, n3 K# t# J$ N, im_wndMenu.DeleteAllMenu();
; i8 r5 Z B$ C3 {3 C4 ym_wndMenu.CreateMenu(this);
$ {4 y1 k; B2 i! Z) p" Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 e# t% X1 I* l$ O' L
, ]! A# N1 a5 w4 A, w3 i/ D; ~if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 P) S1 x: w0 G" U& E
{; G1 Z* m% x% {- K& ]7 |9 J4 J
//P以上级别才可以删除所有道具
b: x0 z5 X$ | I# q. t3 l m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
$ ?& C, Q0 D% D/ K}" d0 f& x$ j# q8 } z% E+ t, g
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );( p8 ~5 o; B7 n) V- b/ i. H+ v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 p9 Z0 |/ D8 L% i
m_wndMenu.SetFocus();
, B6 k9 A- a# Q% Q9 |}% y/ ?# K( ?" [; W
------------------------------------------------------------------------------------------------------------
& A% j- j' D c6 ~*************************
0 w3 p# Z' U5 nWndField.h文件( F; e K1 j2 ` W+ J
*************************- g& }& W% Z2 Z+ a$ k# w$ [
搜索:BOOL m_bReport;
/ Y% Z6 p* z6 L- u& T- H, [% g" n其后添加:! P# H" D7 {6 @4 n) L1 l* }* s" I
CWndMenu m_wndMenu;
/ V P9 e6 w% z* f! C搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
8 H/ v+ Z0 c c/ x其后添加:
$ f7 ~# _: x+ D% cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
9 u" F! J2 @) g: ?
& F" d( s! J5 A: i' m/ F P) [8 D9 S0 W8 o4 N0 z
|
|