|
|
源文件中_Interface文件夹下WndField.cpp文件! R) C7 ^9 p# O) P6 M" z/ \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 Q4 u- O; V. X1 \/ `! \/ t+ f: o9 t w# b$ {7 J
struct sItem
F, a4 [3 }6 p! j% i{- W4 c5 E( u7 j4 u } x
DWORD dwId;
% U% |% H- P$ Y- }+ s) vDWORD dwKind2;
- s2 F1 k1 Z" L) u1 F. XDWORD dwItemId;
9 @5 F0 v0 L% A! `& @$ IBYTE nIndex;" d' q: u/ Z4 Z5 I; H: W/ X
sItem(){( C* v$ d' H, g- {" @' I
dwId = dwKind2 = dwItemId = nIndex = 0;) x; x( o" X/ }+ U8 w
}
) e$ j( l3 \: b* j0 wbool operator < (const sItem p2)
) W2 r/ D) y% B- ^6 N{
% _0 L/ W) d) H, u7 t if (dwKind2 == p2.dwKind2)& n# F3 ~7 k2 y: ]- U9 y4 |, ~
{
$ G! n4 E% E1 m) j# S9 ^1 P/ m, Z return dwItemId < p2.dwItemId;
, r8 q7 s- U8 y& s* ]* d }else{
% K6 X5 ?. ]0 W/ V; S7 `9 S' H return dwKind2 < p2.dwKind2;/ `5 k U+ u e
}( \4 Z, K) h$ G( c3 \
}
* F# t( j' v( H: I- M- n' b};, j3 o* |" J U/ w/ h i0 C
class CInventorySort
* [' a3 }* B% |, n9 u# `" q E{
8 |% a, D- n, H1 A0 Kpublic:
8 q* d# I: V, G- H* [) tCInventorySort()# U4 J% _: Y0 K$ b9 Z2 L P
{- V& F" A: A2 y; Z' }
m_dwPos = 0;
/ x# Z. }8 A+ }$ ^* Y}
! s, _" X6 |0 C4 K& D9 o) c& T' U~CInventorySort(){}- m) S5 X- }5 G7 X/ h4 E
private:2 q3 B3 \( R. U
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息9 F* A8 e M, c" f, H" Q
DWORD m_dwPos;8 A9 ^- m1 W# y% T& A3 L
public:
! M5 S* D$ ?7 `/ j7 q& \void Add(BYTE nIndex)6 u( G/ i9 B, h. @' ~* O- J' w% Z; P
{
/ m. `- w6 v$ q if (m_dwPos >= MAX_INVENTORY)
. c. D k6 s" J5 k: Y v- y {+ C0 e4 d$ `. [) K/ v1 q& ^
return;6 o3 |$ o5 {! f, q, F
} u7 y& D( C1 _, H- g, E5 z
m_Item[m_dwPos].nIndex = nIndex;
! W# h2 u' w" a9 l! j4 k7 m m_Item[m_dwPos].dwId = m_dwPos;- u' ^1 Q0 R2 `3 _8 S
m_dwPos++;
) N F. ]7 Z: T8 w) F$ H}3 @/ l0 u& {( m) S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列9 F( v& o, `0 T6 f1 R5 c) }. {
{0 I' z4 V4 f) p' X8 l
for (int i=0;i<MAX_INVENTORY;i++)0 L0 Y' }% F$ L" |5 A* {6 {8 b
{# n! y+ S: r6 y' P6 \4 w( b
if (m_Item.dwId == dwId)% T# b$ K! d; n! B* {
{
9 @6 ]: g* ^* F& J& t O$ H return m_Item.nIndex;6 K) C* `0 S7 M2 E8 s0 U
}* ^& p" |. H' b1 l$ K
}
" y; @! A/ S* B2 T/ A- C! z9 l) I return 255;
5 }) ]/ e) x& M, V$ Y}
B3 c$ ?6 ]' Wvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
) X' [# B) ~: E# |{
. C( h# Z& W( ^4 {8 ~6 f/ { BYTE nTmp = 0;
8 b# d( Z7 H; L4 H bool bDest = false,bSrc = false;0 z+ v o3 h8 A2 J: o
for (int i=0;i<MAX_INVENTORY;i++)
" A6 Q- \" |: P+ ^5 k {
6 d! R% q- u$ O# G. ^$ C if (dwSrcId == m_Item.dwId)1 P/ i1 p3 J4 l0 G. ~5 K. h
{
: |- W+ ^8 I) R" E8 X5 q! k- V) S4 t //id相等 则 改变对应的dest和src/ J1 H7 r* q) A) c
nTmp = m_Item.nIndex;' @, Z/ H$ T' E( E# _3 r: Q
m_Item.nIndex = dest;: {! x1 O0 I$ P8 C
}
& j1 y* e6 M! Y h }
! f0 S- C" H8 R- a/ O+ a //临时数据保存完毕,交换开始
- T3 Z$ k& q9 l7 W- R+ n% W for (int i=0;i<MAX_INVENTORY;i++)
+ U) i' @8 I6 a( F* K# ^ {
\6 M7 w5 l8 [5 E! ^ if (dest == m_Item.nIndex)0 u# {: K3 ?1 G# A! r' P
{
* r# a8 y0 q6 V2 U* Z //id相等 则 改变对应的dest和src
9 O5 B. \0 }: D4 | m_Item.nIndex = nTmp;" t! W% n6 Q6 m4 ]7 c! \/ T
}" i' }6 Y, E$ p5 O4 w8 L7 E
}1 D7 t& `) E# P- `0 V2 K3 b5 X
}0 ]' b5 f& N$ c) I$ w
};
9 u9 ]: m/ t, r4 ]* b% r-------------------------------------------------------------------------
. D5 g! F7 I `( c, Z3 F依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 b9 E# Z/ l+ Y0 G
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" l6 |* q$ n) c7 m* [' ` M1 d
紧靠其上添加:
9 v% Z7 k" @, k' _" ~3 A7 H. ~if( pWndBase == &m_wndMenu )- q; g( \# y5 ]: m
{
1 V l, T( k1 B) R( Z) V3 ^ switch( nID )% y1 K2 X; @9 ^6 a/ T9 k8 p9 x2 Y0 R
{; o& w5 U! [' A$ ?, j
case 2:
& X) J1 ?: r1 }8 I# o( N# ` {
) G! c$ k7 y; S+ e8 ~ g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 g/ Y/ {* J) ]/ i# a5 W& B
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))& {/ a, C6 x. G$ _/ ^3 k
{; H* S# A- H! j. s! {# L2 B
break;
" [9 @) S9 \4 ^; Y, h/ j }
" i r8 s$ D# I: E! J) y for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 k5 G3 x% k9 Q4 |9 x8 h4 K9 A {: Z- _# i$ K7 O& o$ H7 x/ \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 W1 R# o/ M7 J: k
if( !pItemElem )
e: b0 o$ U4 C+ x( U: N, @$ H \ continue;, e o! r" ~3 [# s
if(pItemElem->GetExtra() > 0)1 g' u* e3 ] F
continue;5 i0 o G% F; i6 n) J, p
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 C" {. H, x# G$ Z$ p% A
continue;
2 S0 O6 E; T3 q% P5 s# C if( g_pPlayer->IsUsing( pItemElem ) ): p6 v8 o$ C0 {0 W
continue;
. o8 e3 F8 N* x: _& U$ \ q" b( j if( pItemElem->IsUndestructable() == TRUE )# M$ E2 E5 r- T; ]1 G7 }
{/ v# Z- B; o1 U. B( O4 A+ A
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 V! \- X+ L( c) q- ^3 q" k
continue;- D1 F# E( C1 ^4 L
}
! Y/ W5 I" i) c% X1 d g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" ^2 c8 I4 ?( O* r
}
3 K+ v9 D' m0 Y8 l break;
- r/ R+ ?& e# H! |" t }
7 n; t0 I8 r' U2 I case 1:
2 c1 o" Y% M! Y5 |0 y W U {
- c. S" Z6 W, o& W* e //整理背包
- z0 u7 p+ S# `+ ?$ \ H //////////////////////////////////////////////////////////////////////////
7 J2 z1 ^+ }, z: C+ | //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ F) X. f1 A$ d& i8 y
//////////////////////////////////////////////////////////////////////////" ^: V) U7 t& t, Z$ z2 t- J
//////////////////////////////////////////////////////////////////////////+ o S0 H, y0 t2 w4 k
CInventorySort* pInvSort = new CInventorySort;
7 i0 b8 G9 z, E* g; d" X+ ] vector <sItem> vItem;
5 ?- _, M" m j T" ]) w9 n vItem.resize(MAX_INVENTORY);//初始化大小
) G6 ~/ B2 F- a; C- ]/ e //////////////////////////////////////////////////////////////////////////8 D& o' a9 f0 F, y
//填充数据9 t+ C, f9 a! V: G
for (int i=0;i<MAX_INVENTORY;i++)3 J$ N2 r- e0 y/ B4 N6 n5 J9 V+ v9 t
{
- b: Q* G4 P) f% o- q; X CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
G' v. Z4 H$ ]! _& V if (!pItemElem)
* j9 i, q! j4 E* N7 Q {
, K& Z! y+ o! S' }) g0 N' i vItem.dwKind2 = 0xffffffff;5 i% P# o s% E) P+ N
vItem.dwItemId = 0xffffffff;
! ?. g, \2 D8 Q; R/ N3 I/ n vItem.nIndex = i;
* a& `0 v' D0 f6 z, J; ?# V" | }else {
! |$ _! t" D" I- U4 H ItemProp* pProp = pItemElem->GetProp();( h$ E N: \( u3 j3 p" T
vItem.dwKind2 = pProp->dwItemKind2;
: N3 o0 d% F9 I( w3 k vItem.dwItemId = pItemElem->m_dwItemId;# d9 A, C8 e1 q
vItem.nIndex = i;5 u$ g# e& }3 m w) q
}# X% t0 n O9 q K9 _! M e m
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. Z# U' b( Q. j& K8 B# w s5 ~, r/ ? }
4 a% ]- }6 a! |( e; d /////////////////////////////////////////////////////////////////////////// B9 I X+ A. x
sort(vItem.begin(),vItem.end());//排序
' P0 U7 _2 @1 O- R8 h0 ` //////////////////////////////////////////////////////////////////////////- J8 |3 a3 K; m* q( J: u
//交换
' [2 ~& Q; P. H! b5 V3 ~; N for (size_t i=0;i<vItem.size();i++)
C, [& m( C: h. H {
! s D" X3 O, a8 |3 N //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 t, K' P" H- e% G/ F8 R$ L
pInvSort->Add(vItem.nIndex);- S) I! u3 Z0 z' s" P
}! A$ l |( X8 e& |8 E2 {3 w
BYTE nDestPos = 0;
/ ^0 U' F+ g- R% m: y! {3 Y for (int i=0;i<MAX_INVENTORY;i++)6 h3 [2 H9 F6 r: |+ l# X
{ H; E I$ Z7 S3 y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 \; w/ m% ?$ L! I; B
if (pItemElem)
( J% y# J& q* l: O( b* r1 r {( g% F1 P( h0 v3 y- o4 [
if (IsUsingItem(pItemElem))
2 B: \8 O$ B; W- T- Q1 Y& G {
O2 |$ Q% j' {6 I. N# A& Y //这个位置无法放
% m+ Z5 R8 `0 {: j nDestPos++;
. X; D$ V0 a7 O6 e }
" X, q% n. K% {0 p U- F- n9 { }" Z" c, n5 U+ c' p! B
BYTE nSrc = pInvSort->GetItemSrc(i);' C! j3 Y, O9 D* ^) C
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 F) x: J: L) F" o- J% c5 S
if (pItemElem), p2 G1 Q B4 D; L' N) ]
{+ h5 u! h6 |% `& {$ a3 l
if (IsUsingItem(pItemElem))
# U- c( |4 C& X. X, O {
, m& s$ k& n# n L8 y/ U# H7 x9 N: P5 ] //这个道具无法移动,跳过
+ B( v& o$ t: C: Z continue;
2 f# {+ g1 x1 P9 f/ y3 F8 A }! S2 Y) w6 b" T9 f5 P1 ^
}else{; A' r2 k2 i" z9 W" ~' X5 e3 g4 M) k
//空位置 不用动! v1 z& ]0 s9 f0 j/ r) Q
continue;
z0 [! J9 x$ v" F; l# } }; M% k3 H. h) [2 ~
//////////////////////////////////////////////////////////////////////////5 Q. E! y* [' Z+ I- T- S: H! o
//开始移动
# ^: U5 x; l1 i* T# u) E if (nSrc == nDestPos): K0 d# y" w4 o* H2 t; A/ o
{
1 ]0 ]6 u; x3 }3 { //原地不动
3 u' c1 }. ]3 ]8 q nDestPos++;
- K5 X1 _7 ~( i* n) C continue;
" ^3 u3 M/ c; _- M5 p }" e, ]5 W8 M' Q2 f. _" v: y
pInvSort->MoveItem(i,nDestPos);
" [* G3 \, \% Q( q9 { g_DPlay.SendMoveItem(0,nSrc,nDestPos);# O& `8 m+ M6 V4 Q3 y
Sleep(5);. p) {1 H3 x$ h" V Z( [
//Error("移动 - %d->%d",nSrc,nDestPos);
! d3 f5 d \& n. U2 U nDestPos++;2 v* n! {* |* |" Z0 @& [
}0 ?. H/ R! p* m' b$ r! H
//取第一个元素的信息
" F$ w. m/ X" O: v: T /*, c8 b# A" z% `6 V5 L7 q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( X2 I+ d3 I* W4 T! J+ @! H3 K {
' q; {! r, e6 F1 C2 F6 s# [ Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
9 V; R6 ]1 H. B9 q9 ?2 n g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);( W9 w/ x% K, v- F T8 Z; D2 y# p
}; ?% `* T, u5 g8 B v: R3 z2 Z+ L% \" Z
*/
. {: [# F( Q& E1 F //////////////////////////////////////////////////////////////////////////
. p& k7 S, H$ y' Z9 `" k# F+ U# n. h break;
6 s" U! O! m' s2 q, w- R/ `, W7 R* n2 e } L. e, T$ q+ p
}
+ b! p, L! m3 b8 {1 K2 H+ }; Q- d}
n) B/ K: k3 p9 M$ Sm_wndMenu.SetVisible(FALSE);
& J+ k) e8 q1 I
" S( [7 N) j1 h--------------------------------------------------------------------------------------------------------( Q" E- [4 g- D8 t! |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! D' D& O( U" H4 R) d, K C. D$ W{
2 }7 t7 Z$ o5 L8 x& t- |: eBaseMouseCursor();
# t3 S" m% Y' j3 l2 X% X, C+ X7 n} i, O1 H& C) ?+ |" q# C
在其下添加:
! a3 o4 {, S2 d9 F- Xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); }4 F! P( k. f
{; X! W5 I- b! C, `
m_wndMenu.DeleteAllMenu();$ E% N. J! h( J9 R K5 }
m_wndMenu.CreateMenu(this);! _( H! p3 H# y( C% M
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 v4 {. f6 J/ L( @
( \# h, H* l9 x ~9 ]
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))! o- Z2 @) G# }, x
{% [& [ H: [) p* K
//P以上级别才可以删除所有道具
* L/ S- p% s- W" S m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) z4 b V4 ~' I
}# ^; n# s( `7 z: w3 g. a
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 L# _3 {4 @0 P4 I# A" ?) l: Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ Y' j! p( O7 n6 j0 Q$ pm_wndMenu.SetFocus();
3 s- r0 W9 ?0 G* Q" i- W/ W7 P}
( I! E: X0 V+ t4 J% [* H. D2 M+ u------------------------------------------------------------------------------------------------------------
2 D' P$ h" j) v*************************, z% q& ?( S7 @) |- e
WndField.h文件# Y7 r, _' `7 N4 z9 w4 h
*************************
2 F% R- _; ^, Y$ E; E* D搜索:BOOL m_bReport;
. ?5 M0 ^$ ~0 U. T2 w其后添加:" n; x, ?( ]* Q* G9 R3 H
CWndMenu m_wndMenu;
6 ^5 K0 E/ I1 p! |2 o; B搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ R& N/ |: i* Q- |5 H" n
其后添加:
& F0 @' c+ y) M$ L, |virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 o5 H! x/ }/ j0 f2 u4 [$ T6 M
1 ^. q- Q: O" J! [& H
: V% k' D* n }9 ? |
|