|
|
源文件中_Interface文件夹下WndField.cpp文件
9 f4 O+ c) X: I( H搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 _1 b' ~/ l/ g2 I1 u# z6 f
9 x q; ]7 O2 ~: Rstruct sItem7 v Z4 {+ s5 s5 ^* e. X$ d
{, ?! G r. G& S4 b
DWORD dwId;4 S3 Y; d/ u! W0 h0 r* s& o8 y: ]
DWORD dwKind2;' I# }3 ]* q! m- l: ]7 O* E7 ?
DWORD dwItemId;
- u$ u8 z: W3 c6 i7 C. i9 W7 ZBYTE nIndex;
# I3 H2 x* N5 E* o& LsItem(){
4 t, h% _% A: W' C6 g& D5 K dwId = dwKind2 = dwItemId = nIndex = 0;4 B; F7 {) J0 I9 T8 |
} Q! K) d* m+ D. Q
bool operator < (const sItem p2)7 q4 ]: R* C0 k% g5 x/ v% n
{
0 k" K4 m/ I4 {2 Q& j& h- l/ {: t if (dwKind2 == p2.dwKind2)
, S1 s+ c4 _4 z$ } {
& Y$ ^! `) P5 V' }9 Y8 A( S return dwItemId < p2.dwItemId;& H2 n" Q/ }! l$ V
}else{
! l3 K4 s4 e7 }* ~2 _( D1 g4 `7 Y: G return dwKind2 < p2.dwKind2;0 u, {. ]7 c, e5 K4 E# G
}$ I( y1 f; P3 ]( }; i# N
} |9 B0 L4 E4 f0 n) t
};" j- e. v w# r5 i; q
class CInventorySort, x( i; k Q6 u- x$ M' f
{& Z# u X2 | |" R4 X
public:5 \1 V$ Z+ }. x- ^0 f$ j9 }
CInventorySort()6 _: u3 {/ ~& U' \
{0 k/ w: F6 ~' K0 A
m_dwPos = 0;* \4 q3 }+ s4 X/ }6 n8 y( `' {
}
& e/ x" @$ A. g6 Z7 y~CInventorySort(){}$ ]! q& ^5 F* o* Z, m
private:
" h4 y* R' f$ v, IsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" ^, U1 P; L6 ~7 c5 j* ZDWORD m_dwPos;: D& ~( j2 Q* E/ F, ^: I
public:. X: ~7 a% y( m/ {' t
void Add(BYTE nIndex)5 O, _' O- N' m* J5 \3 V% C! _
{! ?: [6 W9 h; b& ~
if (m_dwPos >= MAX_INVENTORY)
! k1 R o _: h U {7 U5 f# k7 r6 U) V( m" H; g2 a9 o. Y
return;5 c _: G+ ^, U5 w3 ^* R( `6 G' W
}) X+ \8 B( o& _. b: D: Q
m_Item[m_dwPos].nIndex = nIndex;
1 g9 t' A/ _9 P; }5 \- I m_Item[m_dwPos].dwId = m_dwPos; o0 _7 r+ p+ g! V3 Q% G
m_dwPos++;; V( y5 Q) P( B7 t( I
}
2 k4 F; U8 w! U' r/ BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; C" s% s- |& v) S1 Q
{! b+ u8 o: `; V' x
for (int i=0;i<MAX_INVENTORY;i++)
2 N" f8 O! V8 ~, |+ \' u7 P. ?# x {
# M; ^+ C( S% G9 D& i, L6 a( Q if (m_Item.dwId == dwId)
5 y) R6 Q) ]: x( ^! E! @5 \: {6 T" b {
$ e) i f c) _: J% M2 ]* D return m_Item.nIndex;7 x7 N: m* ]; ?6 L/ A
}7 G0 M, }! Z5 P1 Y, h6 T
}
5 {( x7 h% v% J% X$ Q- Y" y return 255;: D/ T: T' J) Z. R& X3 B/ T
}' B* B5 F0 D- r* o6 y F
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 R, t$ V6 a2 B2 W{4 r4 N, d$ M( b/ s4 A- n. b6 W
BYTE nTmp = 0;
7 |8 r% g! l' B. C; s bool bDest = false,bSrc = false;: E" ~6 n- o$ J% t' k- s, R
for (int i=0;i<MAX_INVENTORY;i++), o* n3 @, f3 ^
{
; F" {- M0 x5 ~3 k5 o4 G" B if (dwSrcId == m_Item.dwId)
# u6 j3 o o) t* S {
7 p+ A* R+ M) O4 i9 T, I8 M //id相等 则 改变对应的dest和src
: A' C h5 D6 O2 M1 u. h! Z: k nTmp = m_Item.nIndex;
: M7 P% H+ P, u0 y/ w m_Item.nIndex = dest;- K" N7 D' T: L U' h0 G
}+ u7 @" |7 L" U9 u% {! b9 D
}
( j" S" f9 W( W4 v1 @ //临时数据保存完毕,交换开始+ n6 |" e' ]: p; r% F) H$ V
for (int i=0;i<MAX_INVENTORY;i++)
, C6 j/ t3 e4 O) m+ D/ }4 R' d {' |" X* r$ b7 G; g
if (dest == m_Item.nIndex) v) c8 G `0 v0 i) R
{
! [$ M7 D4 x# m- ~ //id相等 则 改变对应的dest和src
, E9 Q1 y5 J8 d0 D4 q" n+ l' O m_Item.nIndex = nTmp;
1 N1 W; q% b5 n/ U |* [ }1 ^7 @; l* t* b) Q5 V3 G& f3 k
}
- g" Q" r! Q8 r+ y/ j& S: O}2 i- m9 X, J7 \2 t. [; c
};3 O1 ]! p" z3 A
-------------------------------------------------------------------------, q2 C* L; i$ ?( E3 p5 P) v9 R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 h8 v( c, l" B7 x/ ?4 e- }搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, B! q4 L/ O# R! B紧靠其上添加:6 w: f, c9 M# R) k1 ^3 O# f' X7 Z" P
if( pWndBase == &m_wndMenu )# Y n* R: t. z. B" S5 d
{& m9 ]7 |+ t" i2 O& e* l5 \3 w
switch( nID )5 w! N/ U- F& f" s
{
' P/ \7 \! C4 ` z& b5 a/ P5 W case 2:8 K: ]1 t( ^' u
{
' X! `' ?8 R) _ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
: {% M; k' M+ V( }; o7 \ if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 V4 m! v& p$ _ {
5 r- A7 w, d9 { break;7 C$ _7 _5 L) h! T+ ?' U
}
! N; A' }, B) z for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: g! |# H2 ~1 y# W% p2 x; } {
6 ~0 d3 [: u- W- @ s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. C& _& \6 u4 A" p4 e7 z
if( !pItemElem )
( j3 R2 g U. r7 q continue;" B2 x7 M8 w% u7 _% K7 A+ \. t) [( ~
if(pItemElem->GetExtra() > 0)! h4 k B& z- h+ V6 N
continue;
1 y; r, X1 H& q6 h. N( E" \2 x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 a$ d5 }7 l D1 N X7 v continue;$ ~1 |. W/ `- ^7 ^6 Q
if( g_pPlayer->IsUsing( pItemElem ) )
: Y( {8 g- T* u5 H continue;
# Y4 G. Z7 S8 [% ]* T) U$ t, b if( pItemElem->IsUndestructable() == TRUE )
. |8 u, e% ]1 D* e# ? {. j% g" Z' a/ d m3 [# T8 O6 L! p% _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ k- r$ `8 w% }) |( w2 J" h+ r3 `8 ~
continue;! r b, P% j- P( q" v
}- o6 f( J8 r9 M N* o% @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
1 F, p: x: y9 G. N( \$ O }
1 Q/ ]2 h. r' g0 |* v7 o break;6 p! [ Y/ Y. ` N. P/ s: j) @' k
}- t* J; z# Q# ?2 S" i
case 1:
- k$ i3 a$ [. b- P$ k# M {
2 Y+ w' `8 G- n2 J: e; G X //整理背包* J; n. b% i3 R2 R2 i# R, a
//////////////////////////////////////////////////////////////////////////
/ n6 M6 K$ s2 i6 F //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
5 m* h2 B! X9 v$ b/ Z |% m //////////////////////////////////////////////////////////////////////////
$ [7 d: S! o1 y) M //////////////////////////////////////////////////////////////////////////0 u' J* \$ q2 A
CInventorySort* pInvSort = new CInventorySort;
4 }- q9 R/ V: i! u6 T, z } vector <sItem> vItem;
/ ?) r: }0 i+ v0 `1 u vItem.resize(MAX_INVENTORY);//初始化大小
( A, p1 @6 N6 K$ g& J //////////////////////////////////////////////////////////////////////////
9 B. u8 e/ }+ E //填充数据
" O6 o5 G# `* k- F for (int i=0;i<MAX_INVENTORY;i++)3 }8 B/ F4 j3 r% L0 B9 X
{, H7 ^( T# N* u) R, W
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ U$ ], _1 `8 h7 H" o2 i
if (!pItemElem)# _! i/ ?2 Y7 B+ ~$ P
{
) e$ e1 _% R6 }8 r vItem.dwKind2 = 0xffffffff;
. I( q2 W& ~9 @ vItem.dwItemId = 0xffffffff;1 G( Z9 i# r$ D- L, o1 E: C
vItem.nIndex = i;
4 T: j {5 E% m }else {' g: Y! N3 x7 j4 R) W, X
ItemProp* pProp = pItemElem->GetProp();
( q# r7 ]! `, |; ]- E h vItem.dwKind2 = pProp->dwItemKind2;
9 h( \$ a4 S0 X, _" @# h vItem.dwItemId = pItemElem->m_dwItemId;
: F, P9 K* @) {1 |: u& X" W vItem.nIndex = i;4 T! H1 y( C/ x) y( V' P
}. j! J# H7 R- K# x- C3 a
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
+ Y' q3 d5 f! Q0 x* s8 d }
" Y4 }8 v; @( d5 K1 ~, H1 N //////////////////////////////////////////////////////////////////////////9 V" }7 s9 k: {1 {, C/ n/ E7 b
sort(vItem.begin(),vItem.end());//排序; l. X* y9 f/ e3 B0 f7 |" w0 Q+ e. m
//////////////////////////////////////////////////////////////////////////
. T2 {) S8 F- B/ B0 q$ H //交换
4 t' G) F& Y8 f1 v" d8 s for (size_t i=0;i<vItem.size();i++)
" ^; Y+ _& L1 n" B2 W- J y( u {
- ^6 C' q2 u9 T( l' R, e2 G //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ W; f' A% P" n+ g3 T
pInvSort->Add(vItem.nIndex);
9 v% d' U& z% O; V }! O4 n2 h V* i" h" H9 ?# {
BYTE nDestPos = 0;
* {; r4 U. g3 e' }/ b for (int i=0;i<MAX_INVENTORY;i++)
- C+ r, r9 B( W, s2 c3 T {4 X, M, w, _0 }! M* d) r
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
/ n1 x& W$ k" l if (pItemElem): d {0 K( w) ^4 k* J: [. V. H% N
{
9 o1 e1 H6 P! C8 o% u: [ if (IsUsingItem(pItemElem))
0 V" t7 o1 I% y0 }5 P' D/ i0 l {$ A' O; n6 G# B# {4 Q7 g* S- ?
//这个位置无法放
$ o- V) ^3 T( O; A nDestPos++;5 q/ X, n/ l b" z7 K4 `
}
" L& @3 Z. C7 l6 ~( @" L. L }
& Q$ Z2 B3 `3 o BYTE nSrc = pInvSort->GetItemSrc(i);
; e3 J* P) N' j% v pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);( F" e+ M1 j6 e% [: {
if (pItemElem): V/ A$ ~# d) t. v9 k
{# E5 T6 z- G$ i
if (IsUsingItem(pItemElem))
9 v5 Z; E/ c0 P. ]* A& b! @; X# x8 m6 P {+ V2 D* S' Y. k3 K
//这个道具无法移动,跳过! s I! s3 G9 T9 q- P, W8 ?+ Y
continue;8 O1 ~: F7 F: W+ V2 d. g
}1 P2 u; i5 {1 V) b
}else{ O( @5 X/ J4 Z0 L- B8 {" ?
//空位置 不用动/ G4 F& b1 f. n" W8 L: M. Q
continue;3 j9 S, C* L4 _4 |0 q! T, k
}( I6 h9 o: @) q( ~8 S
//////////////////////////////////////////////////////////////////////////
" s, @8 m" y5 S" R0 M //开始移动
$ M0 d& z3 m/ s4 D* q2 P8 _; _ if (nSrc == nDestPos)
5 @- Q+ M2 ]9 b. B) v8 g/ P {
9 p0 N; P8 F; K3 y! q/ g& u //原地不动3 d$ T2 o: }8 A' s7 O
nDestPos++;
" @# d7 W" G1 c0 C) ?& i+ l8 S continue;- g2 w- C- I- X% w' ?; o
}7 n8 q2 m9 d: b) a8 F, e
pInvSort->MoveItem(i,nDestPos);( U* @! ^: c! {' o6 K7 g
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* b* L" H0 T) u- j$ p Sleep(5);
( L5 [/ r+ k s4 Z7 r& u //Error("移动 - %d->%d",nSrc,nDestPos);% o5 ]7 w5 R+ @) ^* S
nDestPos++;3 j0 ]6 q3 `7 a f2 ]7 l1 W$ f
}+ a; H- E; h7 b+ V' V) x' E# w
//取第一个元素的信息
( p+ n) M* Z# {* ]' {1 M7 w /*
( [. u2 `& j, N6 m- b if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ t/ @% Z9 S i0 ^
{
# o0 D7 y6 X* X' T5 W Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
) E, a& {* s4 z% J& Z& E g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ D, o y+ i$ j- k4 g& [
}
- [7 j$ d: H% G5 l% T+ ] *// |; A, y7 P. g' a5 k8 O |
//////////////////////////////////////////////////////////////////////////
0 L, f! X l( ` G R$ h break;( n0 R: t1 H- A, w4 X
}
* c2 e5 m* X+ R0 b6 M' H4 P0 M) Y }
6 d$ K; j" `* A7 c* d' u' l}
4 n) J! L0 S, D+ n3 D4 D, {m_wndMenu.SetVisible(FALSE);
! L# s) Y. ?/ h! M# Y- z- S& p2 f7 G( i' {: D0 h
--------------------------------------------------------------------------------------------------------
. M7 i& @% |2 H搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 P: M0 n, @& M# P( i. X: X{- K" z1 f/ N) Y- K9 s D
BaseMouseCursor();
) N" T6 K: D1 I+ h# W+ D+ B$ O}
# H, K- R. n$ G7 j在其下添加:' N. \( K: c u8 n& d
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)/ B; ]6 h9 J$ c0 ` M% t# T
{
; V: s1 |# L3 J' J4 g4 qm_wndMenu.DeleteAllMenu();: L/ h6 s( C# w( Z7 k3 P
m_wndMenu.CreateMenu(this);+ u% Y9 n: `- b" f, J3 s B, g
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) o# x1 Z, \- ?5 E$ L1 E
' X1 G& f' O/ p2 E, z) ?8 e4 lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ h2 j$ O$ O& e* ]1 F{
: H& b7 x+ t: `& l4 d. C( k //P以上级别才可以删除所有道具5 p( p% t2 b) [
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
+ i( W$ G7 J( J- g}+ \- L/ ^5 e; |6 `( c8 m" d# C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, z. C( C4 w! |9 p7 r7 h1 xm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, ^7 M# ~. Z, I. u, bm_wndMenu.SetFocus();
0 x6 {7 C5 A1 r. p}" \8 C% z2 e, \
------------------------------------------------------------------------------------------------------------# A( N$ L4 C3 m9 l- _- _- s8 A# j* ]
*************************; ^2 }3 B! Z9 G9 w$ h+ p
WndField.h文件
4 y! i2 n( ^) x5 b2 R*************************, w2 ]8 d- n% U/ {0 d
搜索:BOOL m_bReport;! z$ Q: d S* a, b: V; j
其后添加:) _% V2 `' K7 q2 }
CWndMenu m_wndMenu;: U7 ^ Q: }' L1 J
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 ^7 a/ o5 n0 f7 Z4 w" [8 L; F3 h其后添加:
* ?/ K I3 _# w3 o2 Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);- a' p# O5 \: p/ ~8 \5 K% i
3 w9 y- ~' `+ f) o* N* R! X, O1 }' H
H: S% X4 {7 C v9 P
|
|