|
|
源文件中_Interface文件夹下WndField.cpp文件/ `. N) d2 i# X% T$ b& }
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 H8 G, @5 `" j
3 a; w# T0 h) G! l2 y3 V( U( D+ q. i9 jstruct sItem1 C, |3 W' R4 I' a+ @, z
{ F/ b* A; c1 `& J9 ^" C
DWORD dwId;6 W6 R6 B* e% t( w9 N' j
DWORD dwKind2;
( z+ S, h; m/ |3 P% X2 mDWORD dwItemId;9 N3 P* i+ K6 `/ k* t
BYTE nIndex;
5 N* b! j3 C' x$ Z6 k+ w& wsItem(){* L6 m. P" Z) l* o( x
dwId = dwKind2 = dwItemId = nIndex = 0;) e+ u; e: K1 R2 K+ X& P
}5 t: p* n$ t/ {$ K
bool operator < (const sItem p2)
9 B- A( j' i9 z. |$ b6 x{$ k" J+ k2 j. B* k# z5 ~
if (dwKind2 == p2.dwKind2)
; [4 u- m2 `" p4 i, { {
' f- k7 _* X1 v! v6 k return dwItemId < p2.dwItemId;! b2 E3 N" p3 f1 H& `9 R8 a) `
}else{% t# ^$ |2 n- }; e' c" _# V
return dwKind2 < p2.dwKind2;4 w) T* N6 x5 P4 n: C& U
}
% p, l. v! C. o. t- M L: ~; U}
/ c! R; F3 @4 q6 Z" z( `/ l5 c. b/ }};1 D0 g6 [) S) S0 X
class CInventorySort" Q; I7 ~' a A5 Y0 n* W7 D9 z; G
{* H. w2 R5 {' j2 S4 a! Z
public:
0 U6 T; J; P* L- E* qCInventorySort()
" x# a' g& i/ H( e- s3 M{
7 C% z1 @ S0 j% k3 T m_dwPos = 0;& I* v! O6 G* f) [$ \1 d
}
8 t. i+ K; y. v~CInventorySort(){}% L: p& t& K* E0 J5 z `
private:
' D& Y& B5 u* a8 lsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息% c; M( ?0 p8 s$ t
DWORD m_dwPos;
, V; a: B. W9 bpublic:
: a9 i0 ~( ]! }4 v7 M& }9 k% T& Zvoid Add(BYTE nIndex)
8 \9 [& v+ E* q6 G+ s. O{
3 o2 Y, Z6 h! C if (m_dwPos >= MAX_INVENTORY)
. ]7 j" N y! W0 ?1 b" w {+ l( }+ E+ k& x( E
return;
1 Y: @5 Q; A& Q4 }5 K }
( @" ]8 L* Y0 H m_Item[m_dwPos].nIndex = nIndex;
2 V7 m2 N# Z" n$ s# N" Q m_Item[m_dwPos].dwId = m_dwPos;$ y z" U5 i; T. N! |& s
m_dwPos++;$ t D, w/ O+ K
}
' X7 g9 f# u- H9 n- u/ e. BBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 F! p h, W, H( c
{
* E* w9 c5 }. Q% n0 L& Z; G for (int i=0;i<MAX_INVENTORY;i++)
* N$ {2 w8 L# v+ \2 h {
( c. A9 A a! F3 q% Y/ |$ |# C7 b: D if (m_Item.dwId == dwId), ~: _( M) o, G# h) k* v& f. }
{
0 I* O& @$ I' X* u+ | return m_Item.nIndex;6 j1 ]: x3 l) e0 \+ f9 d
}# ~3 Y8 l q) A0 ^7 q# Q* O
}* m% Q: {1 T+ D1 l4 C
return 255;! R$ r' f! _- X# |& o y4 d8 ?
}
5 P4 Z; S# P x! f8 I% Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; k& F/ C1 A- q: s5 I- }2 W
{1 M+ n" D( T4 Y" U1 ^
BYTE nTmp = 0;
: W) D1 V5 w, ~; p R' F3 s bool bDest = false,bSrc = false;5 j2 p3 D. l! X
for (int i=0;i<MAX_INVENTORY;i++)
/ |; @$ T L! T- I7 E {* W( l" Z3 \' f2 _+ ?0 I2 ^8 A
if (dwSrcId == m_Item.dwId)
- Y% j7 Z3 A% |8 { {) {5 G7 J5 u v4 Q% g3 P
//id相等 则 改变对应的dest和src
p4 o8 n2 i1 H nTmp = m_Item.nIndex;
6 D8 m# I4 x5 M* e: G, d9 w m_Item.nIndex = dest;
# ]' H* V! o1 Q/ g$ U }
8 f8 {& S0 p8 `' Z }8 ?6 P/ z: ~% G8 l' ^
//临时数据保存完毕,交换开始& X c/ P1 k8 `4 ^
for (int i=0;i<MAX_INVENTORY;i++)
`0 D- q m4 r3 Q8 ^ {# W/ z1 C5 K, C, a8 R
if (dest == m_Item.nIndex)
v& a" c( T% I7 q& c4 g6 Y) e {) j! B% E' `9 O. O
//id相等 则 改变对应的dest和src
* G) A# m1 B0 Y1 L m_Item.nIndex = nTmp;
- G# g9 Y/ V$ E9 L; Y* i }6 Z% d% u; H7 _& K- v
}
0 {1 b% Q7 J' t: U}
3 Y4 w) L5 p5 D};
( [: i: A& Z5 q% X. o8 Q-------------------------------------------------------------------------) y4 k* ^( U/ d2 }1 C3 @, }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 U) F! ~* R8 o% b
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
! m' j/ L5 j1 T4 \( H7 k2 [' V) a" u$ n紧靠其上添加:
, y$ \' S1 J; i* v2 e" k- Xif( pWndBase == &m_wndMenu )/ l' I( h9 T( u! R
{
. S: q/ E k8 P% N) Z% @% s6 H6 G switch( nID )/ R2 c# V" {: d [' H) \. K" `
{
) h0 ^! ^, s0 h9 W* @ case 2:0 ~+ t4 x. w5 l" s2 Q2 _5 A. P
{: w5 q/ r1 ~9 C7 w8 |+ G6 i" M# X6 i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
4 D2 z* K. t9 G% m if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 J9 K6 w T) H, X1 E x
{9 {8 p% R- Q, ^5 ]* A7 Z$ j
break;
: S! T! a4 T( B6 W4 z. B } c3 h7 E8 \+ O3 e! f
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)( h" z4 j2 ^0 x( U2 K
{- v' Y3 r4 x4 I; }1 D3 }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' @6 M. X( z4 E. f$ U if( !pItemElem ): K o0 Z; G# L8 _$ H$ P
continue;
( ?- N5 F/ B2 W8 b if(pItemElem->GetExtra() > 0), u s' T9 X$ z1 I' h/ b
continue;* ]- e1 l8 u. G3 B
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) $ ^" }- ^9 ]0 Z1 N3 C1 w
continue;7 I3 I* k4 f8 }+ p5 _9 T" B: C
if( g_pPlayer->IsUsing( pItemElem ) ): W3 a2 P- h* `% @2 N5 U; G. h
continue;/ ^* c3 y" S, G4 S. F1 v5 R U- ?3 {
if( pItemElem->IsUndestructable() == TRUE )
~% S/ n! }+ d; |( s: u {
2 x6 d. z: Y3 c. ~3 _- |! v: M j g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) z5 {+ g* V+ ?1 u* F1 ] continue;
7 m( G, G8 ]! b }
$ ]" O! N+ q& o# G: Z5 p5 i/ h g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);2 l! q! P4 X I/ |
}
( B: E/ h* I; h& ^; {. e break;
# k' N. O w8 _' N }
2 j* F4 {# p$ |8 H case 1:5 v9 E b* U: S2 w _/ ]& \
{
3 J5 @. y- p, X- J$ `9 W3 A8 k8 n/ W //整理背包
/ x, X- ^7 {& _- G0 _3 l' q* c //////////////////////////////////////////////////////////////////////////
& F8 V {9 e9 q8 l //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
D$ a1 U% I* R! h3 N9 d- N+ O. z. S //////////////////////////////////////////////////////////////////////////( k0 N; q! Y0 P- y* w; Z& `
//////////////////////////////////////////////////////////////////////////
# s' \6 R8 i4 d% H% p, o& d CInventorySort* pInvSort = new CInventorySort;
% `4 S1 P, R# z- \: u, B9 ^ vector <sItem> vItem;
9 Y$ I# K, k) W5 [# k vItem.resize(MAX_INVENTORY);//初始化大小
! X8 y! a- e' a+ p //////////////////////////////////////////////////////////////////////////
3 I0 i& l/ B1 q k& u //填充数据3 w* e3 S; w0 H8 b6 P: x# D
for (int i=0;i<MAX_INVENTORY;i++)) i$ W" P6 N1 a1 @) E
{
- P2 Q8 k: a: }0 |8 d8 w& }* k CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( n. y2 } W2 i
if (!pItemElem)
8 I0 x, K0 A- O, N9 } {
! p/ ^- z' n, P ]( O a. D vItem.dwKind2 = 0xffffffff;6 ]; C" M% N# ]; _
vItem.dwItemId = 0xffffffff;& w1 z! o+ A, v( M( u
vItem.nIndex = i;
6 [8 w/ h5 u( s }else {* a9 v& U: Z* [
ItemProp* pProp = pItemElem->GetProp();/ @- N& ~2 j) Z- E
vItem.dwKind2 = pProp->dwItemKind2;
$ g B! H5 \! d i/ r2 r1 ` vItem.dwItemId = pItemElem->m_dwItemId;
$ E8 y& I# h9 |% U4 e vItem.nIndex = i;
3 I3 B8 U/ i5 d; z" Q' a: k* A }
- F' T/ m/ K8 m //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- i4 ^4 F3 D6 v3 s }& y1 u% {9 v0 i( J
//////////////////////////////////////////////////////////////////////////
s7 g9 N# c. k5 H sort(vItem.begin(),vItem.end());//排序
2 f [1 X" I' Z //////////////////////////////////////////////////////////////////////////% z. h/ i3 M/ ?6 ~ n0 T! ?: [
//交换" \* {! t, W o
for (size_t i=0;i<vItem.size();i++)9 Q9 n% ^ s2 O) f. \. b5 h; ^
{
; s' D9 G/ {+ h) d- B' e. K0 q7 o% @ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 l+ i& r- J) s6 C4 a U pInvSort->Add(vItem.nIndex);
: d/ _) Y8 I$ D }; O% d- t+ S( t6 m- {
BYTE nDestPos = 0;6 h: b" |0 r9 r5 e; [
for (int i=0;i<MAX_INVENTORY;i++)/ \! i: ~- Z+ Y6 Q: V
{1 W1 [( b2 `. n- o* E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 e1 N/ P% K) Y! ?# Y/ b if (pItemElem)) A" ?4 L. n [, o% b' W5 u
{: T2 q( W9 ]2 j1 h; @
if (IsUsingItem(pItemElem))3 i, r3 p$ l, r7 r9 H9 z
{
4 ~+ d7 @9 z2 X6 u( G/ c //这个位置无法放6 p& F' ?$ i& f( I' E! p8 A2 a' c
nDestPos++;
" q& {+ e2 X: v9 n( N }
; I. y o6 i5 l% R; c9 J4 @ }
1 \0 S# ?8 ^! Q* P. a BYTE nSrc = pInvSort->GetItemSrc(i);1 b! L! v9 J V' b6 u1 j) h. X, `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);5 J) K$ s) S& X
if (pItemElem)/ k! b- s* ]1 z/ w4 h
{
8 Z% ^) V+ U, m _ if (IsUsingItem(pItemElem))
) d0 m/ Y1 z" y! \ {
, C% T5 N) u. a' {4 D" ?+ J2 A //这个道具无法移动,跳过$ b( z: T# T. `
continue;
. ]- u! m1 H" v [6 h }
5 i1 C5 Y$ X& S# N/ e$ i }else{ {% F9 z4 n$ U% b/ s+ l
//空位置 不用动# ~! l" b7 ^" D$ k
continue;
1 L( {7 B6 w+ X, i, _4 E3 j: p1 }1 [# G }; K) w# {; Z/ A* l3 ~$ F
//////////////////////////////////////////////////////////////////////////
# y( }3 T/ F& _6 K, r //开始移动: T. Q1 g3 h" E8 |3 X
if (nSrc == nDestPos)
" Z: R8 z+ X6 S& [* G: \- A- s# V {: |; K% W4 c& X! p
//原地不动
) C$ Q- [8 k/ y2 P( r1 R/ f nDestPos++; ]5 [- ]( I; y9 m$ m
continue;
( r1 u. t" L$ ]0 i }9 W1 r( |( K/ Q$ N4 P' E
pInvSort->MoveItem(i,nDestPos);* K0 L4 R$ I* w3 T. g: ^# Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);. m& a+ |; q; m
Sleep(5);
7 P' D+ O" \ J4 w k //Error("移动 - %d->%d",nSrc,nDestPos);. Z3 G! P1 t: y2 U2 P( c, v6 W
nDestPos++;
& X) x, U1 z" v# T# t }8 T) A. Y& t" A2 v) X
//取第一个元素的信息, f, P/ k' g' L9 X5 @/ v% X
/*% b5 k: ?3 T2 ^( @) w
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. E4 a6 B& G. u# c4 [2 F {
% p$ [7 ^8 a3 q" ]; i2 T% E/ L Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ B; B5 }* C' @8 s! \6 l7 ]
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
% l) {. F% A6 R7 J2 f9 { }% k ?! q3 U! ~9 K
*/
8 b% P" n" T' {0 w, R7 i. c ////////////////////////////////////////////////////////////////////////// p+ x$ a5 c' n5 I4 J
break;
1 b' m8 O% o7 b8 i$ o }7 C+ i v6 Y1 s* c
}
7 Y* D' {& W% {5 `+ c" k}
0 ^- l2 S) T" N1 q; N( v" F6 I/ Qm_wndMenu.SetVisible(FALSE);2 t E# w: K8 p9 o( Z# ]6 L
( G7 F1 J6 ?' B+ M6 o
--------------------------------------------------------------------------------------------------------6 X% c2 \" k, M2 h& t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( u% z1 {! x. {" ?
{$ P- [. Y7 G( W( n* J( H
BaseMouseCursor();
) p2 P, b0 g7 m1 ~}
1 X" `( O! _) I6 l" J @在其下添加:
& Y$ ~3 K8 s+ Z6 p3 vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 T( Q, ~9 f+ l: L5 M
{
$ |6 n9 w9 o; Dm_wndMenu.DeleteAllMenu();
3 T; U% k$ s! U. Um_wndMenu.CreateMenu(this);5 w+ K0 D# f; r3 A' l1 K/ E8 r$ ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 u, Q$ i% U# K4 }2 T& Z+ ]4 Q" {5 K, X% \4 a# T8 o- _4 R# ?$ [/ m0 Y
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& z5 c" x* B0 C{3 c* g9 f% J* Z& ^' r
//P以上级别才可以删除所有道具& P1 g: \1 V1 W& o. a
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ \8 X% M4 z% Y
}4 }! n: b) c' E/ W
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );) J3 M+ R) q$ ~0 y) M) ^9 I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );; I1 W: U- U, s9 m! x3 \7 a: T6 e
m_wndMenu.SetFocus();; T B1 B' Q9 h" Q. q) c7 e7 ?
}( g5 x3 `/ D+ Y7 {9 D
------------------------------------------------------------------------------------------------------------% y8 t+ A r' t- u% M
*************************) B- H, K% p" u% D0 I
WndField.h文件( \% \4 [3 w# d5 T- `0 M4 H
*************************& B9 J# n* T3 j' i1 }. s: |% f
搜索:BOOL m_bReport;
+ ?* [; J! \ o1 y3 |2 W其后添加:
* p( K# `5 n) B% E2 o8 hCWndMenu m_wndMenu;
/ z2 X% S0 J6 p" r$ H5 P2 L搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
! C- O$ v/ V+ v+ Q其后添加:
! w7 j! [# |8 N/ v1 {4 {9 I& zvirtual void OnRButtonUp(UINT nFlags, CPoint point);! O& Q# b; G" I1 g7 x" }! z
" n; q* @2 Y( I6 C! T6 ~8 r( C8 g/ V8 k: `6 \
|
|