|
|
源文件中_Interface文件夹下WndField.cpp文件
9 I* T8 r5 }% U. [* E搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ Q Z9 u2 \* i0 V, a$ z7 T7 z v; e
' D" S% G* E1 P* z- H) Ustruct sItem" ~' b* e% [9 ]! D& @. ^
{
9 U" w+ D T- `2 n ^1 pDWORD dwId;
' i& y# C/ P9 \ y) x! \0 SDWORD dwKind2;
& P, Z% d+ L6 m5 ?4 ~, qDWORD dwItemId;) ^; @! x b* K8 p' ?: v
BYTE nIndex;- T; `7 u6 o3 |: r: Z
sItem(){" ^- k) y: M6 ^1 l& k, C5 ^
dwId = dwKind2 = dwItemId = nIndex = 0;5 z4 ?! r4 n. _# }- I! M
}
" `8 V& v0 |) A+ j. {bool operator < (const sItem p2)4 ^* t, V$ {4 v; h& V/ C
{' l- o: v# A! ]1 W/ g( t, P; Y
if (dwKind2 == p2.dwKind2)
/ s3 {- J, L6 |( @) g' Z {
t, D' ^. m' O* r3 s" L1 A* l$ B return dwItemId < p2.dwItemId;
4 q6 }0 @8 J5 R$ F) F8 c }else{
! e$ k+ p( N$ A! Q return dwKind2 < p2.dwKind2;! F* h. X1 X) D4 T$ H9 c( C
}4 Z* y: o4 F9 w3 O9 j1 ]- g/ d
}% a5 C# H+ I% M. E8 C
};
" u' x6 G" k i qclass CInventorySort$ A% |) ]. ^$ w" R% I F O
{% q8 S6 W2 U3 Q( V9 L, j
public:
+ F9 E% F% T9 G2 m, RCInventorySort()
3 s4 T5 k2 Q! K" A' b{0 h. u6 v4 o0 f' Q
m_dwPos = 0;& O `/ o* {' b- J. I) C
}
" ^* x6 n/ i1 ^- \- v* I~CInventorySort(){}" u& Q- E) W. ?8 m/ Q" P/ N5 S
private:: Q; w# B" c9 L8 C. b7 S3 |
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ E) n. X q$ H! E7 k4 r' E! w/ |DWORD m_dwPos;
1 [; G0 d7 d! v4 C7 J' j! apublic:; r0 ^4 Q% Z* x. n, i) D
void Add(BYTE nIndex)* j7 E3 |# n9 i/ @1 z- g0 [
{, N) m8 i3 P2 B
if (m_dwPos >= MAX_INVENTORY) |) j; c4 H' P- k! n
{
: Y I8 s3 \2 X" B# A return;
" p6 Q1 I* A) z* V9 k }
! m4 M$ y% K6 M$ e+ p3 @ P m_Item[m_dwPos].nIndex = nIndex;
5 z4 W0 W1 s( e& u8 P# n m_Item[m_dwPos].dwId = m_dwPos;
* K' W) ^/ L$ M9 ]; x" b m_dwPos++;
9 p7 O+ v0 S3 D. A}
" D5 X) ?2 G* IBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列" V6 f! Q' s0 c0 B, o) L1 U
{9 |+ C) B8 r- d$ d0 j7 G) V+ ~" f
for (int i=0;i<MAX_INVENTORY;i++)) V" P+ s# J+ [) I# }% z
{
3 S0 s+ D4 A4 s0 I1 k if (m_Item.dwId == dwId)
9 h/ |# s6 A# @. P {& K4 j0 l) ?) E( }8 {4 G8 Z
return m_Item.nIndex;
0 x2 n5 q @) M( \. D }
L; Q$ m) {/ {. ?: |9 W7 H }! U' e1 f/ S: T5 T; H$ N1 o
return 255;
4 t; c* Q' U7 L7 T}
$ w/ j0 U5 y: a# p$ y" L& e0 Y3 Qvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置0 ?+ z+ k, L+ c5 [- F, B7 X& b$ D
{" W$ L) }" A( V" d x* ^& q
BYTE nTmp = 0;8 q' L' X" @' Z- C) E
bool bDest = false,bSrc = false;; m. k$ u/ i; F1 l# P
for (int i=0;i<MAX_INVENTORY;i++)! x- \8 e6 v9 r$ f) j, H4 U T0 x7 B7 k
{
9 e) J. W( X) U if (dwSrcId == m_Item.dwId)4 [. W9 H! T, ^ R$ _- B5 W
{
, @+ i/ L( I, _9 ]( x //id相等 则 改变对应的dest和src
8 e8 o+ U0 Z' t1 r5 ? nTmp = m_Item.nIndex;
2 x6 m5 c7 o- s! |4 M- g& a* b m_Item.nIndex = dest;
1 b" _1 b: |- O8 M# \ }4 p" T S6 i, T& a' u& F" R
}
], S# T( V- L R //临时数据保存完毕,交换开始
! \7 t3 Z( m8 W& N9 |% ]! T for (int i=0;i<MAX_INVENTORY;i++)' O- i) M" l- c8 T. \1 P
{
# S2 _# @- o! }9 d% @ if (dest == m_Item.nIndex)# ^1 L, n4 X7 N* c3 U
{3 i+ ^5 z* R. }9 O# \; T5 l8 U
//id相等 则 改变对应的dest和src
( x. |. q6 a$ `' J& d/ s% w; _ m_Item.nIndex = nTmp;
6 c9 p. I! {/ y }$ F- E$ d% v* d: x9 L% I5 {3 q
}" Z/ z7 k: r' L8 O* P, v
}
n- {0 w( b0 W6 D7 \7 h2 P};
; L2 ~& l& l: z5 V# G-------------------------------------------------------------------------. f- w$ F2 _, p" |: G& r
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! |" O7 b1 C$ s) j6 R
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 D% R4 l( x# ]5 e% X紧靠其上添加:
7 y! O+ }# _( ~if( pWndBase == &m_wndMenu )
' N& r- Y# F' P0 V5 M \& w{
: ^* `/ d) r$ E; V1 N switch( nID )
. q* W2 G: G: f5 ]8 R- s' B* r {
5 N5 B0 A9 p; s4 Y case 2:
, ~6 ]$ u# p ~. H {
5 @8 z' \5 c" z- g //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! e# a% t8 n7 N$ l4 j if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 ^ j) D8 Q& {! n6 ~0 @1 O
{ ~) f4 L1 A- q# w
break;9 N R( |+ R8 j _
}5 N0 r D0 f4 |6 Y- G) E+ I
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 @4 d, N3 M* ~ {
1 I! ~# j' f" G1 q: B6 o R4 U* s CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: U; {1 A3 ^* ] if( !pItemElem )
( A) z! |" W4 v" q$ N% ] continue;$ L5 P& t( W* r4 X
if(pItemElem->GetExtra() > 0)
1 h! z7 ], D8 M$ z continue;
. r4 S+ K2 Y7 g; s$ v- x& X+ ` if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : {: }) G6 a" t* R% O
continue;
5 ]/ v7 a) Z6 B$ Z! _ if( g_pPlayer->IsUsing( pItemElem ) )( [+ I# X2 K7 F# |8 F9 I7 i/ W
continue;. j- A8 ^$ i! e; @1 }. h5 e
if( pItemElem->IsUndestructable() == TRUE )
# H m( D, l# O; D( e; x {
+ C3 h- }% M; x5 @" y7 W g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' l5 ]& y0 T" q: E3 Y3 r continue;/ V) w" l: x- L b
}
) k+ F* W9 v1 t. ~0 t; O, o g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 ^ K- z5 }3 e6 O
} S8 I4 v2 a6 |& F& \8 I0 s# u
break;- q% ]1 A; {; B3 g. q; P
}+ X q4 k4 I6 e& M4 N
case 1:5 [; }# Y" _2 i+ e
{& T+ H- O* X/ g" q/ d0 M
//整理背包& j1 F* C& U) O( N) L/ T
//////////////////////////////////////////////////////////////////////////
2 d, a2 M3 j( G: D- X //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );! G/ F# P# j0 g+ X) ?: b- g
//////////////////////////////////////////////////////////////////////////; O p, c$ D# P/ w
//////////////////////////////////////////////////////////////////////////
/ s/ C4 L0 L; t1 L CInventorySort* pInvSort = new CInventorySort;
& n9 c6 n" F$ ]% |1 x vector <sItem> vItem;2 r4 ]4 R' l: R
vItem.resize(MAX_INVENTORY);//初始化大小- K% Z7 M# w3 E2 l/ F
//////////////////////////////////////////////////////////////////////////
, ]" v8 N! ?1 p! s) I8 w4 O& | //填充数据) c2 r( {! I# ~
for (int i=0;i<MAX_INVENTORY;i++)* c; g* h- C( e% `! }+ K
{
4 a6 B( a+ T5 E2 ?( R$ z/ ~ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" h" @8 n. z3 C- P: f. B if (!pItemElem)/ ~' Z5 J; n6 F. Y
{
& K2 N! a/ ^0 X4 F9 l vItem.dwKind2 = 0xffffffff;
9 C) z% N* N4 A: r vItem.dwItemId = 0xffffffff; ^3 y; s3 K7 t3 U% @
vItem.nIndex = i;% L- D3 W6 k3 g9 b. Y
}else {; X2 x) H0 g2 N' v7 o
ItemProp* pProp = pItemElem->GetProp();* y4 v! p; Y# K& V5 Y
vItem.dwKind2 = pProp->dwItemKind2;$ y+ N" X# @) V& [, _. ?3 x
vItem.dwItemId = pItemElem->m_dwItemId;
/ S- p) s# y+ ~1 A vItem.nIndex = i;
6 ~) L) z+ K$ I1 F }9 j3 V" m1 Y8 I+ P& [+ \# H8 w
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 T5 k- K5 N4 D3 I+ ]3 Y
}
- U- K- K) \ d7 W. V //////////////////////////////////////////////////////////////////////////
$ w* N3 g% ]" Z! l. u* M sort(vItem.begin(),vItem.end());//排序: a8 a+ X6 P6 D2 E- g( o% ?
//////////////////////////////////////////////////////////////////////////
' o, r6 O+ N0 V9 h9 b0 } //交换
# u5 }* Q$ s5 Z: F) J' u" _2 i, c for (size_t i=0;i<vItem.size();i++): w1 I ` s, B/ O& T
{% U7 h% }: |% z3 X7 Z! r& c% x7 F
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
e) A: a" s" P: _# `1 @& D7 X5 y# U pInvSort->Add(vItem.nIndex);# [) K) C) p) |- v/ _9 J I$ v. E
}- a a/ h4 \9 y- A+ F' b. _
BYTE nDestPos = 0;
6 t) O4 [6 @' A z/ d- y+ Q/ l+ @ for (int i=0;i<MAX_INVENTORY;i++)) j: @* ~( @1 H0 M0 e5 }/ q/ Q5 z
{
) S* W E! o0 F/ a4 a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); {' g0 i+ @; V4 D3 g# O' r( o8 g
if (pItemElem)
' b) F, s9 @, e+ L3 J {" H3 X) w$ }- A* Y
if (IsUsingItem(pItemElem))
5 p5 n8 ]' R% }$ T {
% N2 e; K" |+ w# g. a //这个位置无法放
F+ g( |. ~3 Z+ L& f1 V; r nDestPos++;( v1 B& ^- @" t6 F
}8 n4 M# \# ~0 N9 e* e1 u7 k
}
- ?. ]5 I5 U0 u& J$ ]7 v BYTE nSrc = pInvSort->GetItemSrc(i);4 L0 n& p. h' F7 |. L: W
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
) A: _5 n' Y" c9 y4 Y if (pItemElem). `/ f1 a: o& H x3 ?
{
/ z3 T$ p9 }3 I/ j# X; Y o if (IsUsingItem(pItemElem))
; v7 p, ^# ?1 }' j2 X {
3 j6 r7 i- S; [0 P //这个道具无法移动,跳过
% S9 u1 ^- X9 ?' \ continue;+ c' O+ e, _4 A
}
( F7 N0 E0 r/ u( P }else{( j; _; L( ^4 e% h9 O$ T6 t
//空位置 不用动
; Y5 {1 Z7 |4 h" {, Y1 h continue;
2 z+ y0 E# b. b* P( A }4 x1 K2 _6 l) T% L& T% M
//////////////////////////////////////////////////////////////////////////
7 d" J" ~% M& v7 q //开始移动7 i$ |- |" u z; ]% b+ M
if (nSrc == nDestPos)
3 G% J2 A0 w4 x3 i) ^ {
) J, @/ R- D4 q4 s //原地不动
1 ]6 x: F; `7 g' \) A' ?8 V7 x nDestPos++;& v% V0 o4 y# s) _6 m+ b# W
continue;
8 [, X0 R T! } C }
" w& C2 D$ \5 T2 W, x) L8 ~. p. y pInvSort->MoveItem(i,nDestPos);2 Y1 |& {% Q4 Q" T/ j$ c1 S
g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 H ?9 ^5 X2 e5 V) k* @/ E* I
Sleep(5);% }- ^* E6 N8 ^8 _& Y# C; L$ R
//Error("移动 - %d->%d",nSrc,nDestPos);" Z2 S6 R/ E( [6 R" }3 T( O4 _! _( U
nDestPos++;
2 D9 x# a4 M* C( J+ B2 ]3 _0 T4 B }" c* W* o+ @( {1 j
//取第一个元素的信息
- f9 H1 s) u! P/ M, {8 n& n9 q /*
' V, ^6 P2 J- J5 D if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)( N3 b. m) V3 M
{: E. r" E$ ]# i% |! W3 l3 l3 P
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ p$ F( h2 Q; x1 F0 C" X. o4 G/ L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);$ _2 c! s* P6 T, k
}
4 ]% a! n% |9 o0 G */
# R7 ~# Q7 K9 {7 Y- Y( ?, | //////////////////////////////////////////////////////////////////////////+ \- ?6 y4 x0 r9 A& \' y
break;
- W3 F" I0 t' f, t; z9 S* h }
4 A' w6 h' s7 d. X+ } l: P }
& y. R0 o8 v) x e$ A9 ]& z0 r}
l( n+ k; C6 ^# B/ Rm_wndMenu.SetVisible(FALSE);
: E0 c, T2 O5 |* r& U: I
, d$ T: l( ^: Q. M8 |4 @--------------------------------------------------------------------------------------------------------
2 Y; @- A9 d2 ?1 T: f搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 q; p1 K$ T. q; z! P, A: e{
! l& T& O; D. ?2 PBaseMouseCursor();
: S% C9 G5 n( ]9 t0 D6 f" s}( l% V, f4 H+ t. n
在其下添加:
* S0 I& m: W9 Fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* |1 Y* e, c$ z, p- q: `{6 \: Z& r0 k, u- w: v6 {
m_wndMenu.DeleteAllMenu();
9 f) k* d* F" J$ m t6 I0 d" ]0 ?m_wndMenu.CreateMenu(this);( a2 p u. G: v) W5 x
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");* v* w; s% t* j4 I: S/ f+ i; X
/ t1 K& y5 _: L! P. X. ]5 Lif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ~, w* E: ?- d9 x' ^2 |* n
{
8 D8 N6 X" C2 q8 Y$ {" ^ //P以上级别才可以删除所有道具
" b% Q' Y" o/ |6 n m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); y& a: y5 H' V y
}
+ J2 K' p4 }6 p4 \; w h9 C; Em_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); s3 c' F/ \; {0 o* ^2 [5 o
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );2 ^1 J5 f8 T# W y8 v- O1 ~
m_wndMenu.SetFocus();
2 n% B' [3 F% T9 M O}4 J8 K1 u, N& c; o! K0 d+ H
------------------------------------------------------------------------------------------------------------
% d! H3 x7 _( ^. ?/ X; {( B*************************5 w# S# b2 N+ w+ l0 ^; g/ @% r0 O
WndField.h文件
W5 L( m0 ~8 d9 a. B+ `*************************
1 B s. o0 R! `) F+ v搜索:BOOL m_bReport;: u& `; v* i! [0 \' W
其后添加:+ u3 h; q" f2 y+ E* E$ r! Z$ P
CWndMenu m_wndMenu;
2 F! G, ~2 ]% e/ C' O# S搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. L& S- ~6 Q) ~6 v' G. n
其后添加:3 l4 W( C8 Q+ `0 t9 c5 u
virtual void OnRButtonUp(UINT nFlags, CPoint point);) Z; J* B# y* o# t* ^. s
5 n- ^3 u4 R4 x( u& \. X
$ X" Y+ j# a/ F2 F) u, g4 s1 A9 |
|
|