|
|
源文件中_Interface文件夹下WndField.cpp文件
" H0 E4 g, h0 a3 R7 C% L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 V$ P2 B( a7 s( V- F- I! }# H7 D2 x2 j4 t" v( h0 a6 e
struct sItem s8 S5 S9 w% `, C+ D" Z
{
5 {- U0 {/ [0 w6 A4 u6 zDWORD dwId;6 [* H6 @! s% k3 m/ ?, V% |& \( Q
DWORD dwKind2;1 v- D+ F* [( W+ D( N* \1 l6 ]
DWORD dwItemId;
" V- V4 a& F+ A- @4 _BYTE nIndex;
* ^0 `8 q8 ]( l& Z7 NsItem(){
. Q0 S$ h* f; f) i) E dwId = dwKind2 = dwItemId = nIndex = 0;
% q9 x b( w( a. A}
* V% i% n* V2 U; xbool operator < (const sItem p2)) V' p c; f5 e! g
{
+ w2 M' I$ R# v: W: N' X6 K' o3 u! ~ if (dwKind2 == p2.dwKind2)3 L& ~) D' n" W6 d; W9 A1 U4 ~" Q3 ?
{
8 x1 j" L5 U+ i0 f% ~ return dwItemId < p2.dwItemId;8 |" B$ q. B, _/ V, m8 l6 Q& S
}else{
- S1 s& E$ |, z" ~. ^% w' w return dwKind2 < p2.dwKind2;0 V g+ E6 ?0 |) P
}& O3 F) L0 ~, e8 q- f4 Z/ m& Q
}
0 _, \ D( K' f- l};
& _* u1 C3 T5 tclass CInventorySort( V7 q* S$ v H$ Z$ c
{4 ]0 |; v# }" E
public:
2 ~: J, G* \6 h+ ACInventorySort()' d& }2 v% z. ^6 k
{
, }1 D+ R6 E1 J( O m_dwPos = 0;
7 Z9 o- n1 E! \% M}
6 K* m! b% C" b~CInventorySort(){}, |. {* N/ e4 G; o* V* D7 ]
private:1 ~5 L5 _& {, X! w+ ^# d
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息& w+ u: [3 M+ D7 R- U
DWORD m_dwPos;
% J& W( Y. V2 y5 I% X" R/ gpublic:5 c/ i) [; v g/ C- [0 N
void Add(BYTE nIndex)
; [0 u. k. }! t- A8 q' ?{* @0 u4 m3 T3 j' r8 [- R5 q$ q, u" E# [" n
if (m_dwPos >= MAX_INVENTORY)
+ U0 h/ p$ ?6 U" @0 n$ C+ q {
6 u2 H1 E, y8 y4 R% k( ~ return;6 x2 _! [0 o: E; z% }: r; L
}
9 [4 Z/ \/ j! }6 N1 n9 S m_Item[m_dwPos].nIndex = nIndex;
+ f, ?" P; J8 r% b: ~& ? m_Item[m_dwPos].dwId = m_dwPos;! k4 j( x9 r6 c8 b6 o
m_dwPos++;& y7 |3 O8 x! \1 A/ v$ @
}; Y: n- U+ g# j; l2 {/ ~! _% { ~
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 k# h3 P7 C" _+ n: U
{1 f- t; ~8 @0 y3 i" f8 D2 [9 b( E
for (int i=0;i<MAX_INVENTORY;i++)) ]7 l l" y" c0 t; L
{
+ z. x7 F* j+ g8 b# v# q& j if (m_Item.dwId == dwId)
( i0 {$ ^3 z4 c: l/ O' h { k# s+ N. t3 O. W* T' I
return m_Item.nIndex;
) u( |1 O$ P- j. T, u }
- m5 G7 O' p( M: ?. P- h! D) c }! b# {5 P1 f/ r# W: U
return 255;9 D9 h$ |, R3 C9 J
}
: }4 Q' T7 U! nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 a& X! `9 S8 @& |! M$ ]{
6 R. Z0 j1 W6 ]; ~. {; U" {& B. T# d BYTE nTmp = 0;
4 _- i* W% G% t6 l bool bDest = false,bSrc = false;
- a: }& m4 l2 \% | for (int i=0;i<MAX_INVENTORY;i++)
. f+ Q3 ]$ Z ~ o/ V# M& ~/ A1 a! T {
$ O U& |# [! ?3 C; w) M* G8 o if (dwSrcId == m_Item.dwId)+ W3 e7 ^; A" U8 }4 P. j: g- J
{
& a! I3 S" N }0 z0 Z6 Y' \+ M7 Q //id相等 则 改变对应的dest和src
/ f" n2 c+ C1 g! I: _2 A* E1 d# q nTmp = m_Item.nIndex;
4 g2 C) r/ `1 K3 o5 O m_Item.nIndex = dest;
% Z- w* J7 L" k% E# a }
1 {6 T7 I2 X, o, r# ?9 }0 t+ g/ K }
% P2 _4 P( P( I6 p9 Y9 a //临时数据保存完毕,交换开始. j+ G& u$ B. Q& p! u9 h/ W
for (int i=0;i<MAX_INVENTORY;i++)
$ [0 y! l7 w4 n' g; z {
, p% r4 S0 m# M9 w& o q if (dest == m_Item.nIndex)4 |7 H, u' a$ v( t% \1 N6 v
{
! n" W6 X& V% R //id相等 则 改变对应的dest和src
) `7 n9 O: P0 h, `- Z6 w% U% F i% k0 N8 x m_Item.nIndex = nTmp;& \! `1 }5 |& J3 K* [* e
}
% C* x0 E% l# Z2 A9 ^ }' {+ P/ C2 L3 ^ G8 w0 f& D
}( o- M. q9 A; V' n' B
};! o/ G9 @% j% b+ n) s/ _6 H/ q7 [6 B
-------------------------------------------------------------------------- A. x; I) ?% N# P; l: d* G5 v2 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! v5 V1 o3 J5 K% t% z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 q( H3 w$ m6 b- @紧靠其上添加:
8 P8 e$ w! Q7 ~1 e% }7 zif( pWndBase == &m_wndMenu )
# p8 ]. V. A0 @{1 K. j" ^1 |; C' I; s$ f
switch( nID )7 P$ k! {3 V% u+ h
{
: G% u5 x& n4 V1 E0 d case 2:
! i# ]: }9 x5 p$ J3 m* p2 Z {/ l- b* [- a$ D7 N
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ i& P# e) t- h4 ]& x
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
M7 b+ g" \) C8 R: W/ B) n: m5 d8 p {. Y7 K9 S4 s9 y! M/ o
break;
. B; t) y+ g4 }8 k3 U0 e) R* { }
- r8 y: v" a+ n6 j9 Q for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)7 F7 z T$ O2 ~$ g8 D
{
4 l2 j' [: y1 O4 O- E Q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# g5 n" G- j3 c& L if( !pItemElem )
9 X# s& q, u, h; h. q continue;+ Q+ u4 x4 m5 a$ X+ `: T
if(pItemElem->GetExtra() > 0)* e6 S/ ?* s$ d# h$ }, w
continue;0 m" u8 ^( L& B+ c
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) / p. b/ ]& h% O7 k M' \
continue;
0 S9 @0 d! \1 G3 G* Y. T4 i if( g_pPlayer->IsUsing( pItemElem ) )
4 ~) h% W* l, a# G) Z continue;' l$ r" ]7 ?- }% ? Z/ B, @; m
if( pItemElem->IsUndestructable() == TRUE )
; t$ ]/ v/ _8 S+ B8 E! C* o# B {
( I/ x J" Z+ t6 u) u g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 G8 U% F. B8 i
continue;
! v% x( i+ y9 u G9 ]1 _ \ }6 l- O" B4 e$ X. g6 \
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 S5 J' n- r0 U" B8 I4 ~
}2 I6 @) } b" i2 _
break;1 C. |+ S( o. @* w _9 a
}
o" D7 @& x/ M+ T. ? case 1:. C6 v9 H, c% c
{
; z$ b- c( k8 b; O //整理背包* D# f3 }1 l9 T" B1 y& A6 ]
//////////////////////////////////////////////////////////////////////////% @0 o7 _1 M% A% A
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ E* R' o) v$ B- V6 d
//////////////////////////////////////////////////////////////////////////
/ |+ v; c* n- O/ Y0 N //////////////////////////////////////////////////////////////////////////
" Y" A9 Y- r( m/ g: B; a+ _ CInventorySort* pInvSort = new CInventorySort;- {, h& @! s$ X7 ?2 X( p6 T# I
vector <sItem> vItem;
; Q. c: r+ a3 P: s8 G0 G vItem.resize(MAX_INVENTORY);//初始化大小
8 ^& T" q# w7 n5 ]: y" C- Q //////////////////////////////////////////////////////////////////////////
2 j( a) M/ x( c, b9 r9 m( U! F //填充数据
+ B( S: \9 r3 H, J for (int i=0;i<MAX_INVENTORY;i++)
/ }; f4 q3 T/ q7 a6 B {
5 w( ]0 v$ I9 C4 o" ] CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ @& I# p" W' q2 M0 E. |! ], ^
if (!pItemElem)
9 F! S: y) y1 y/ z6 e9 Y: i5 X {
. q/ e- j4 b8 x vItem.dwKind2 = 0xffffffff;* v0 |* {- N5 o8 f% G/ f$ ?
vItem.dwItemId = 0xffffffff;1 o3 O9 X) n1 j, g/ Y. w6 l
vItem.nIndex = i;6 ]4 e$ k8 I% w7 r! n6 Z
}else {$ [/ o4 N9 C, J' H
ItemProp* pProp = pItemElem->GetProp();
4 a: b$ C# i+ W% c n- S8 z vItem.dwKind2 = pProp->dwItemKind2; Y. t7 p- g, `) A ^0 P
vItem.dwItemId = pItemElem->m_dwItemId;% X! ]! `! w% ~# X: O9 {5 Y
vItem.nIndex = i;! |( j- r0 n( g3 @. S
}) U; j8 H- ]0 }0 S. D, [: B% Z; c
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( _# }4 F" X9 E' ~( P! a! X
}
" a. g; O# T& W* P //////////////////////////////////////////////////////////////////////////
5 }2 ]# I) x H! L2 f sort(vItem.begin(),vItem.end());//排序
; k7 X2 `: S# V0 ^ //////////////////////////////////////////////////////////////////////////0 R, E6 `0 d8 a0 l
//交换
: C# C. b: l# t' F1 ]6 L for (size_t i=0;i<vItem.size();i++)
: V1 v, Q0 t0 o/ N {5 V+ c% x+ }7 k5 M, c
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; B D. c* B% v% o
pInvSort->Add(vItem.nIndex);
k$ ?, f$ |( e- e9 u, h }
) X( U8 ]5 k4 j$ ]9 H BYTE nDestPos = 0;
& q8 r1 }2 i7 ~ o4 Z J4 t$ I for (int i=0;i<MAX_INVENTORY;i++)& Y+ K% c7 @ L% e5 z! r
{
' u3 d9 j3 m( l4 m' E. Q+ c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 R% @6 x& i5 @- C% J4 L if (pItemElem)$ d( J# h& }# \% M5 U
{2 E* F) [5 |/ y3 `8 s% z# j' f
if (IsUsingItem(pItemElem))
" I t# h$ W3 J0 W. t {% V+ Z# A! E% a c; G
//这个位置无法放
$ I3 h, f) {* w5 z6 V' a. Y- C# g nDestPos++; u! E% L; i& d% n* A
}+ _: N" o# p1 f8 o' P8 a9 U
}
) P/ M9 g, |# c% p# g. A4 L+ C s BYTE nSrc = pInvSort->GetItemSrc(i);
1 n: Z6 Q: E; M) i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 c# B- Z( g+ |: W8 Y if (pItemElem)
+ s J% C% A2 E0 L9 \ {
8 C6 [0 Y4 o: D) E% Q) V8 n# ` if (IsUsingItem(pItemElem))
# S# O# f, u# H/ o" x' K! o8 e5 N {+ r. |; s9 I) e% ~" s
//这个道具无法移动,跳过
' h+ H2 v% Q2 A. L# R continue;& k! J* x' b8 S2 ?1 Q
}
/ U: u2 I* r0 s }else{
2 O$ R1 k7 ?' X$ P I( r$ q //空位置 不用动9 \& s4 H% `- P% m7 k, w& q( D3 H
continue;
+ y, e7 z* M6 E, I. {3 c/ l }
7 s* c2 u( G) i. i4 @3 [ //////////////////////////////////////////////////////////////////////////
: h" i7 u) b, U' U //开始移动; W3 }: y4 f4 d& T4 w& S6 [0 ~; {
if (nSrc == nDestPos)
) g0 a" h2 y3 _ {
! H$ t; e: G: k6 l+ k5 V l //原地不动: R9 y9 W- ], N. R, m7 X" |
nDestPos++;
f8 p" B) v$ F$ W continue;# h5 `1 a+ x2 H) _8 b2 J
}
. X) ~/ J( r- a8 d0 H pInvSort->MoveItem(i,nDestPos);( V8 F8 D" X" i E
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 {( I( S2 n }9 d2 e8 [' \ Sleep(5);( N0 k3 F% _0 |, j5 E3 N
//Error("移动 - %d->%d",nSrc,nDestPos);! {/ \* b& s+ E8 U3 S u
nDestPos++;
" S1 I. D/ ? ^. E( s' K }2 h- ?# v% {! G* W# u. ~' _" l
//取第一个元素的信息& q( m; v; }, q
/*
9 D& n6 D1 _& R' W$ N6 ^( a if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ {) [5 j. P% b2 \, o2 T3 X {
4 I6 s) s8 j8 S, m# f2 v3 e Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; d1 H0 Y0 D$ X- |2 c g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& E. f6 M# c; K |
}- c4 [) ]+ Y% L0 |# Y; j6 P" t
*/7 h: t* R5 W5 @( I
//////////////////////////////////////////////////////////////////////////
, ^& j3 e6 z5 `% h0 ~ break;: |5 _5 m. ?6 e( }) F, b: s
}
$ Y3 A4 [* f1 R4 V# ] } + A' ~! _2 }: w+ {3 c; I" j
}
) ^$ \: j% x5 bm_wndMenu.SetVisible(FALSE);7 o' l1 Q/ G- |
9 J3 `% z8 I; z: F1 J
--------------------------------------------------------------------------------------------------------& A' J/ d: p6 n4 z) R' J) g4 q% B9 ~
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point). B8 u( I8 I$ A( }
{
+ u& ~' @4 `" O; YBaseMouseCursor();0 K3 z- n/ F4 f& a* S
}
* K8 p/ D8 V& b" b r& N在其下添加:4 z2 }: M7 r2 ^
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# z1 u1 t, a0 h8 K' Z. ~* ~1 ^% s3 P{3 D# F' C3 C2 ~" l4 Z2 m
m_wndMenu.DeleteAllMenu();
$ u! w6 @- z2 O: l5 X. J& H4 c3 Vm_wndMenu.CreateMenu(this);
9 F1 [- `2 f N' `# E6 Z9 {) Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");9 Y N& O2 v& v) S
1 a$ J; g0 n0 k) {7 ~/ H9 t
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, p+ b4 V+ \5 s8 G+ o; u{
$ Q) D2 h7 N$ w# i. m$ a( r$ a //P以上级别才可以删除所有道具
- e3 ?" ]: p; t s m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");) S* O4 L& \- L# U! e. o) V
}1 y y$ b% j/ T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 l. B" p9 k* ?7 y: X" K& K9 X( _% ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );* ]2 c9 H' s5 b" R2 R* D
m_wndMenu.SetFocus();
0 z1 {" W1 \7 [0 S3 a}
0 ~" U7 \. y* }( C ^------------------------------------------------------------------------------------------------------------
5 R0 }, \1 C: P# w* F*************************
# e$ A6 L& ~ U. }+ J" UWndField.h文件7 L# b. E# I& _2 E- x( A5 _
*************************0 G" U4 M: Z8 X& c: g
搜索:BOOL m_bReport;
" z6 l( y+ S: J: j其后添加:0 B+ v5 [" Y; _
CWndMenu m_wndMenu;
3 r$ b1 B1 w7 P' P' ~& v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! P2 k, |6 W# p/ F/ T) L- O+ ~9 R其后添加:! j2 M( @6 \" g9 `8 m! B
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ {( |; G/ t' S$ |
+ G: x6 v' X% J6 D" _
B7 A% F2 K: ^6 Q, k3 A9 A
|
|