|
|
源文件中_Interface文件夹下WndField.cpp文件
% z& N& l5 k G: l搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )- i% \' G- s. L3 r, w! r" Y, l
8 w% I- V0 O8 q4 } ~
struct sItem/ S) t! X% [3 R: D
{
M2 I5 C. k( s& jDWORD dwId;, B+ A# S+ Y" c' ] e+ i
DWORD dwKind2;
4 U# _/ v2 }* f }$ m3 O+ k+ WDWORD dwItemId;- V+ }4 S- t \& l) I Y
BYTE nIndex;6 p$ ]6 b' `, @- G p% a9 y, ^
sItem(){
1 ?- R" N" F9 M* w9 Q% d5 e8 o3 G dwId = dwKind2 = dwItemId = nIndex = 0;
& X7 n- n Z* a9 p- o3 t}( z* }* P; X& O( n _
bool operator < (const sItem p2)4 ^; m. k I! _# h/ M
{5 [* b* D, t4 Y! D
if (dwKind2 == p2.dwKind2)4 u, u, J4 L3 o
{
+ l6 f, g2 s# D4 N! E return dwItemId < p2.dwItemId;
4 R7 Y) x* `. b- b }else{$ r- o8 w$ Q7 `
return dwKind2 < p2.dwKind2;
3 I/ K9 G; B! {. O" Q; x: P }% I0 g$ y) x- V
}
9 A" G/ w0 L5 o};
8 m, S+ N9 S+ Z" L8 r/ k: ~( qclass CInventorySort
& A. @6 W, N: z. c% S{
! W; y" n$ g. l zpublic:
8 z2 ?$ i- ]/ G( L# G( O$ ]CInventorySort()
" F) x5 S# x6 V' A{. y3 P$ _" D3 \- k# A: O
m_dwPos = 0;) h. {! m# Q/ S' t" Y% p: H
}, t. w. z. E5 |1 f5 e& o# f5 W- d% B
~CInventorySort(){}
% ~; V* D6 s: Q/ {" d& t3 `3 kprivate:9 T8 @8 k% {7 s1 ~( M8 q: f% u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 }7 H/ D7 {# {
DWORD m_dwPos;+ w- t6 b* j& j8 }5 Z: h
public:0 M/ R2 S& t: ^- K
void Add(BYTE nIndex)
/ v% X( J/ ~! R7 ?2 ~& {{
- |/ y9 o9 q x: H$ t* M- g if (m_dwPos >= MAX_INVENTORY)
8 d; X0 L9 r+ l" _0 I- L {# S& H' e, ]8 {$ b5 i. O" P
return;
1 X8 F& ^, v4 @3 E* Y3 g. f }
2 \! s) Q9 ]" ^ m_Item[m_dwPos].nIndex = nIndex;, A% u# ?# E7 c
m_Item[m_dwPos].dwId = m_dwPos;
7 w0 i5 i, W* _3 z L; W+ O! F8 _+ ? m_dwPos++;* Y, }3 n' e* c8 O
}; c2 S1 v4 }* T x' o: W3 o* G' R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ ?& j, a7 `% {, T' H{) _/ I! C/ S9 g5 `- }9 \2 E+ z' d' X
for (int i=0;i<MAX_INVENTORY;i++) T0 s }, S' _: z/ R* J( S- O
{7 c8 e9 b+ w% p$ e% R$ F' @% E
if (m_Item.dwId == dwId)
3 ?$ a; C% m; c* ^3 j: S& I9 S {
W( t+ N3 J( { return m_Item.nIndex;
! X, o+ v. V9 ?8 h; U }* W* c/ x' H1 @
}8 O+ M9 _* d/ V
return 255;6 F- s& U6 v1 F9 w) X* |- `
}. R" ?4 Y7 V" x& `9 ]( N1 B
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置# n, a+ x' J1 |
{
3 Z4 s8 `: Z m9 B- X BYTE nTmp = 0;
% H8 ]2 {3 `$ e) r$ ] bool bDest = false,bSrc = false; s y; W2 j9 W) Z- u8 J
for (int i=0;i<MAX_INVENTORY;i++)
& [" M+ [! g. Q4 ~ {# I0 S" J; ^7 T( w9 @
if (dwSrcId == m_Item.dwId)
6 R8 F. z2 Q3 U {7 |* f2 t. B2 X
//id相等 则 改变对应的dest和src: u% p0 W3 v% p" E, i5 p
nTmp = m_Item.nIndex;3 r" [( X2 O' \8 w4 i- ^
m_Item.nIndex = dest;
0 W( \$ j+ C2 n. h# Q. }* | }& { C! a% ~7 ~# I! K. k1 f
}
# s; |: _4 H& D, t6 \ //临时数据保存完毕,交换开始 a0 ~8 a1 C: Z
for (int i=0;i<MAX_INVENTORY;i++)
. y( C0 V2 v; x2 w' q {
5 d! M2 w7 T: N4 k3 o, c& Z if (dest == m_Item.nIndex)5 g6 p# D* `& J- w9 T
{
9 R' u/ R4 ]( @9 h% s2 m G //id相等 则 改变对应的dest和src- [4 E5 E0 D" [
m_Item.nIndex = nTmp;
/ a3 q6 b8 }1 A }6 C6 k( b) `( e& O4 D
}
5 ~$ T9 q6 J9 d5 c, Y5 V}5 B2 c$ h( u, v0 D
};
& R! a8 ?; ^/ X6 M: n$ F: Y-------------------------------------------------------------------------
- Q" `$ B9 R* h+ N' }, y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! z* [! V4 B. L" H& ?) v3 D0 Y$ D
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
; s. j+ R! q6 n% O v紧靠其上添加:
+ ~, w# v6 F" n# J( m+ J( Sif( pWndBase == &m_wndMenu )1 s% G1 W" U; B6 g. N# f
{+ J. B9 e% M! G( @( `
switch( nID )
j: o2 E) m, u {
: T2 T' k! b# D" o2 M3 T case 2:
7 X4 n" m8 Z3 ?# c+ U {
^) e8 k% f7 I$ \ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 z `0 Q" X$ V: S1 f1 [$ Y3 C
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 U0 r8 [' a& M" E" F* {" ~ {9 u9 `* J, o7 e. f3 Y% b1 x8 I: `8 B
break;
% E- i9 ~: v, ^0 o3 f0 e! `. L }
N& |* R4 |, b2 O for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 j$ w/ a# M/ J8 F2 x {
4 x8 B L. @, M! K" K# s A* h' t0 | CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ S! |2 [% x+ I( h7 J& Q7 t# o& | if( !pItemElem )" m# @( c3 ^6 X ^9 M6 b
continue;
% h' A. `* W) V9 G Q if(pItemElem->GetExtra() > 0)- P1 b8 n0 v1 P
continue;: y+ j" @5 E% z* A: p7 ~
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
8 y" p h. x% O continue;
4 }' D# ^% ]* J if( g_pPlayer->IsUsing( pItemElem ) )
: ~8 D( r2 @" k. x: m: Z continue;$ {! E9 x& N% H' f2 w. L+ R8 f
if( pItemElem->IsUndestructable() == TRUE )
" V$ N8 c& ^# z& H {
" {6 m# ]8 m/ V, ]; _& e g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 e- r" y- A* G0 c/ J% a continue;
2 O- `9 u/ [( M; f& r9 u* M' I1 q }
1 ^* N3 {2 w$ P; ?/ N4 X g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
! t6 j2 k" W0 {; ^ }. G- w% a3 c6 E- Y& Q w+ Z0 X' ~ ^
break;
, W6 h/ C' ~ j7 H9 f }
+ ?6 b; F' K9 o- t% V9 [ case 1:
7 _. S9 B$ Y+ m9 V2 J+ Y" e {1 t B0 K) p1 o% _; u0 R
//整理背包* H# x. t0 M" _
//////////////////////////////////////////////////////////////////////////
7 j x& I- d. G. @ //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 s- F& K, V( P) s //////////////////////////////////////////////////////////////////////////3 e& |: R* _& V; C! C. r
//////////////////////////////////////////////////////////////////////////# P" b' w! V2 n0 Z) j0 n5 R
CInventorySort* pInvSort = new CInventorySort;
# W7 E; l; i3 u3 B9 k vector <sItem> vItem;: ~$ z- d2 |+ T0 N
vItem.resize(MAX_INVENTORY);//初始化大小" x( m5 w- y" u" Y7 p. ~
//////////////////////////////////////////////////////////////////////////
+ F) M9 E2 M! i/ H/ E, `0 L //填充数据
& V- V6 W6 j) Q- P" I$ R. J# Q for (int i=0;i<MAX_INVENTORY;i++)' L& `9 O7 j3 b
{
3 W8 o6 J) d8 _( ]; I l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 S; o: B: t- c* H* c if (!pItemElem)) ^1 d2 H. d2 g' i- \6 A, a
{8 V7 Q ~" S3 `% Y( W
vItem.dwKind2 = 0xffffffff;- t" _% I9 ?8 ]7 H- m0 F" E
vItem.dwItemId = 0xffffffff;
8 l% S2 l* u: A+ g vItem.nIndex = i;. D7 w( k. R" {
}else {# p% ]- k2 k% h/ s! I- {2 T
ItemProp* pProp = pItemElem->GetProp();
1 b, X, m3 ]' q! s vItem.dwKind2 = pProp->dwItemKind2;
3 @ n; g* K* W6 K vItem.dwItemId = pItemElem->m_dwItemId;
' c4 h/ a0 I: G) P6 ? vItem.nIndex = i;
3 x! H+ A# n: o& n% t9 g6 H }
5 E& _( ]8 r+ v# N! O6 J A6 ^ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 W' h1 _- n+ h0 t3 i }/ b, h% K% g6 ~. m' {
//////////////////////////////////////////////////////////////////////////
/ V. M: ?6 w2 L: e" ] sort(vItem.begin(),vItem.end());//排序
$ l p/ y3 N, L8 c- M" j //////////////////////////////////////////////////////////////////////////$ _, Y, |5 B8 h# p( j/ b
//交换/ N. N, A; Q, Q ~$ `6 t o. e0 L
for (size_t i=0;i<vItem.size();i++)" L% o3 x$ K+ A" A8 Y
{1 ]0 {$ Y6 h" H* _4 X, Z
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ I0 D. C% Z$ l1 N# ^. k
pInvSort->Add(vItem.nIndex);6 R8 |) L# _7 }1 p
}( G* [ e& b* D8 [9 ~' R
BYTE nDestPos = 0;. [: T9 M% ?4 ]' b2 U5 z* t7 Q
for (int i=0;i<MAX_INVENTORY;i++)& ~" n( v0 _8 i* Z
{
; l0 z8 a% c7 a4 t3 @& Q) }! q CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) u) A( i/ k& y" \ if (pItemElem)
. u; h7 M2 L. w% |. w* q: c {3 Z8 z% ]- h7 B6 s$ M
if (IsUsingItem(pItemElem))
. ^3 R4 N4 W9 U {
) u0 A1 X: T2 w# T5 i //这个位置无法放
4 @) `- Y) ^# m+ K/ f2 V; A7 m nDestPos++;
5 ~5 E8 P5 y( K9 `$ d }( |' S4 N4 [( U. L8 G* l
}2 ?+ S/ R3 J3 @. h) A d I1 e0 y n
BYTE nSrc = pInvSort->GetItemSrc(i);+ n3 W9 [* v4 Q. @% _. L! c
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);, g0 M9 v1 P& J4 `6 j7 {2 V
if (pItemElem)! O; e% l7 x) o* T/ W2 }% C
{
. |- G) A: ^" a if (IsUsingItem(pItemElem))
+ ?4 n* L$ j' j1 W/ _ {
1 C* b j/ {' U; B$ w9 V //这个道具无法移动,跳过7 b$ t- I4 x3 t( X
continue;% L, p' w+ M9 z) x$ I
}4 i8 t5 G/ x( T% u$ I6 \
}else{
/ X! j1 v7 `" n F0 { //空位置 不用动1 {# Z8 o, c+ _: ^' _% E) |
continue;
1 X3 H7 v. U" Q }& ?3 K: H( F- c& y$ j- r
//////////////////////////////////////////////////////////////////////////
# N6 S% E3 D4 i# }: S/ U: o, P D //开始移动& b; K$ u3 D- k
if (nSrc == nDestPos)% u. Z. d) J' ~4 D' n1 q
{
) _: J# D" B+ w7 j //原地不动) Q# N1 }7 Z/ e
nDestPos++;# ^6 p, s- f/ U H; A0 r8 p
continue;
8 y% Q5 k4 o" ?! ` }
4 L2 M* z; x$ m0 s9 N# \8 T; s pInvSort->MoveItem(i,nDestPos);; z4 ?* h5 `$ T* D4 p: [
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* t& M$ @1 [4 G: ~" p0 N/ G8 ~ Sleep(5); u+ |5 x7 u7 U1 x9 f6 P h
//Error("移动 - %d->%d",nSrc,nDestPos);
% O! |1 S/ |+ L6 D+ S nDestPos++;
( W( g- F) [' {$ Y v }- V+ g" a; A% b1 b; i9 ~
//取第一个元素的信息& C9 n5 D2 G3 E+ ~
/*
* w/ r, K2 I Y) | if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' I0 D2 C7 r4 R% m6 ~
{
3 \9 D! l p& |2 |/ w' W Error("Move - From:%d,To:%d",vItem[0].nIndex,x); A7 o a# |- S8 y4 D0 F
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);6 X/ z1 q1 a3 \" j/ k
}
% Y6 l! p' s, ?8 o */5 W& d+ }2 O+ P" M# J
//////////////////////////////////////////////////////////////////////////
; m0 F: @! f. Z# w! A break;: J7 T: f1 p+ S$ j& L' W8 I
}
; }! B" o) \% F# N) z } 1 a3 M, E% p& v- `9 b7 F
}
! x( @) o# O* H8 H8 {) j1 Zm_wndMenu.SetVisible(FALSE);
# Y* T$ s# I; ~# U- N
6 i2 K% F- L- L" h--------------------------------------------------------------------------------------------------------! l( s5 L4 |% S) [. \7 K# f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); l2 G' \; e6 l8 v V
{
( v- [- g, W( G; K& a: HBaseMouseCursor();4 a1 m' L& m# M' C8 S6 N s
}9 P3 G4 U6 N& }* J. x
在其下添加:8 G* h6 k j* F/ S2 i
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)* \" F1 I S8 o7 M
{
" L) E7 o) x* J4 C1 i3 gm_wndMenu.DeleteAllMenu();* I$ t1 B# y8 p) q1 D7 }
m_wndMenu.CreateMenu(this);
8 [2 Z R8 [8 a! Fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# X# W. T& a( l) Y9 r2 ?( o9 N* r, S- H0 C, w$ Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 B# y' l% b9 n/ d4 S: w& |
{
5 ?6 m$ T* i3 [) A! R% l G //P以上级别才可以删除所有道具& J1 G+ w/ E( M& G6 c& p a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; B3 _ ?) B# ~}
% Z- q# n# S6 P1 q; n) `# Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; [" [/ V1 W, t4 [- N' m' ~7 `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 b" E) l; P; s6 f1 K) X( Xm_wndMenu.SetFocus();
E9 ~, ^# o5 `$ P, N. n$ y$ x}
( ]( e3 w1 p) l5 f$ T' I7 u------------------------------------------------------------------------------------------------------------
) \' Y1 @$ a8 {$ Z) ^/ _*************************
* w! H4 H+ `5 NWndField.h文件
6 ~: A. \4 a: ^& {* y" `*************************
# W4 A$ `/ P8 B! E b9 J搜索:BOOL m_bReport;: l) v6 N0 ^5 l! K. f3 m
其后添加:
* B5 C' ^, {" H/ cCWndMenu m_wndMenu;
% j. F' z2 {6 p2 X8 G" N1 n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' B5 H0 n+ }8 g7 ]
其后添加:# _8 L" C6 ^6 _9 g
virtual void OnRButtonUp(UINT nFlags, CPoint point);! U0 R( P4 c) u) Z8 e2 I2 F
+ G5 `! X) G) O) C5 y/ E; a' t- v- t t- L( m* ?
|
|