|
|
源文件中_Interface文件夹下WndField.cpp文件& P0 \, \# R. h/ j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ ?/ F. W7 a. l% I. n' N- R
' q: Z. P, _6 T% @, L* [; _: Mstruct sItem
% ~. Y* D0 S+ P# E- ^{
; R0 H+ O. p R! |$ r4 S tDWORD dwId;& o [& D, X9 ^" @ f6 T* \
DWORD dwKind2;
0 K& {2 n: ~- ]DWORD dwItemId;
0 J' _: T, ~" O+ ^+ \% _" o1 eBYTE nIndex;
2 p+ F: b& m* ^sItem(){
7 _: q, |. M: J( g dwId = dwKind2 = dwItemId = nIndex = 0;* F9 E' R4 [# B. u
}
' J* S2 @& F c( Kbool operator < (const sItem p2)
) s# ^$ M I2 d& P/ x/ g4 u" q{$ c) I' y8 b! \- K
if (dwKind2 == p2.dwKind2)$ L' o3 |4 b1 v
{2 ?. T4 ~. X( ^% w1 i" t1 V3 j
return dwItemId < p2.dwItemId;
9 I9 C. k* ?0 c5 F, l, f. D }else{
% l& |( Q. a. ]2 a/ G: g& z3 ], K* D return dwKind2 < p2.dwKind2;+ u& ]% c% u9 t% n3 t) q0 E
}! U. b A2 X# |
}
6 l" O# O5 e. g+ S O9 s};, C2 _7 q4 f4 ^8 r
class CInventorySort1 ~) u0 I9 C, e. {. ]
{
3 N" N1 }3 }% |; D2 S( Npublic:- l- T5 {& n. m- t5 E1 n& A
CInventorySort()& \ I! B7 c0 k" w: K0 l
{
6 n* N9 j5 f0 g0 a, F7 O m_dwPos = 0;5 K( Z# _$ U) h1 T5 U. O- h4 m2 P
}
7 |+ u9 Z2 V/ e& u+ x+ Z& m~CInventorySort(){}
" Q) q( J$ u" J, L, Wprivate:6 z5 L- Y8 u. R8 z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
1 Q6 b' C: T4 I% x; y1 xDWORD m_dwPos;3 ^& \$ Y9 X/ D. J' D
public:
: \/ q4 Q$ s& y# E" Avoid Add(BYTE nIndex)) ^# T; @( Q7 o" ]5 K
{3 a @# J* B" E* W2 C3 f- S, B
if (m_dwPos >= MAX_INVENTORY)
# V1 {# A4 X! ?0 h9 K& E {: H0 V; ^& w' N# ~* O
return;+ H- u2 C8 U s$ O" K% K
}( {8 m5 d4 R1 N8 M- h* J# A% d
m_Item[m_dwPos].nIndex = nIndex;
2 A5 e I& f% R' D$ I; H" { m_Item[m_dwPos].dwId = m_dwPos;
* z6 x2 @# l7 T/ x m_dwPos++;
% J7 j2 I" g- h3 o/ ?}/ \; u: X6 g0 P! P( X" \ @
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
) ~- [5 r! A( B{+ g# C# i! |7 }2 A
for (int i=0;i<MAX_INVENTORY;i++)( j4 a% g: ]7 H& \: p9 X2 E
{
) X/ {, z2 K8 z8 Y if (m_Item.dwId == dwId)% t6 D6 Q, o5 ]( V8 _9 L4 \8 _8 f
{
/ Z) O: d0 Q# s1 C9 h4 c1 N return m_Item.nIndex;( r; e% L' P5 f; \
}/ N) s: I8 y) }$ I7 q9 J
}
. \, B8 m8 ?. s) Z) s6 z return 255;$ V/ A( M' w) P I' G
}, {8 j5 W+ b3 ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置$ H- ]) _$ Z% E4 s; Q
{% g0 w9 |8 z3 V" P( i1 b2 Y( P* f
BYTE nTmp = 0;
4 h+ W. O' ]) K2 j! G6 G$ z bool bDest = false,bSrc = false;
" r6 M0 s& C6 L, o! R for (int i=0;i<MAX_INVENTORY;i++)
7 ~: B( V5 q2 Q. |6 \ {4 \0 n& [8 P" w3 R# C9 n
if (dwSrcId == m_Item.dwId)+ j6 L7 M9 W9 a. {
{
# X' [' E8 X7 u2 o2 t //id相等 则 改变对应的dest和src
# K4 e+ I% U3 M# @' `" E% o- x1 x nTmp = m_Item.nIndex;
! p/ A: V* `1 F m_Item.nIndex = dest;# k7 I1 X$ u6 ]4 [! D
}/ W/ ]* Q& J( @5 ]
}/ `- X- g/ ?% @2 ^9 \# t
//临时数据保存完毕,交换开始
- r9 R' r4 Y3 N+ Z3 R* C for (int i=0;i<MAX_INVENTORY;i++)7 l; L3 A. p" N j: ~4 ?: M
{
T4 [) }" t# O$ Z if (dest == m_Item.nIndex)" h, D( _/ X9 M, Z3 p
{
; J; f% N6 S7 k, k7 s: U2 q$ W //id相等 则 改变对应的dest和src D, y7 c* T4 r1 u# n# k( q
m_Item.nIndex = nTmp;
. V1 Q8 ]: @# F# z3 [ }" k% L; R" E# `$ f# _) i
}+ q0 n/ W9 P7 I$ l
}9 t5 U- [! L* J4 O, ~
};, D* O1 k8 A- S4 ~# g$ `6 T
-------------------------------------------------------------------------0 E/ T1 b+ `, [9 S, I+ j. @; O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ ? M9 E$ x& R3 m% Y2 W9 w搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* R m3 h L, s
紧靠其上添加:
3 L: b4 }0 v( o0 z9 p9 w/ |if( pWndBase == &m_wndMenu )
( l# T3 ?) R7 a, v: s{
- T4 I# n/ Q. }# u; u- w/ G1 M switch( nID )/ z1 O' r" J1 `/ A4 ?
{3 R) z! E! b _2 d
case 2:
1 i% J6 i, p& f% K3 Q/ G {& U# c; b, [- n+ F3 [3 i
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);( o; H% X7 l9 h3 o7 r' Y; J1 i
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)), T" T9 I4 \$ I7 c, t
{
: P5 m$ b5 X8 e5 ^8 I- k3 S break;
, |& F, a* [: m, h& O3 @ }2 q- I0 g+ [6 M& W
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)0 X" h( E0 \6 z2 W; @4 `
{2 D) j+ T" H: W( G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
9 H" c$ H$ |+ l' K% X) A if( !pItemElem )& H% f7 o: h+ [( ?
continue;. y/ k5 N- V1 {& d n0 p
if(pItemElem->GetExtra() > 0)
4 y6 L' {7 j" R4 [8 z z9 U continue;
; }* c4 t$ r, d: U% V! y if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
; o: n# d. h) d2 r5 _ continue;
: J: X* v$ G2 Q8 j5 y6 _$ K" Q if( g_pPlayer->IsUsing( pItemElem ) )5 F/ [0 B: U- B8 o: G
continue; s. h/ p/ n5 N3 f- ?
if( pItemElem->IsUndestructable() == TRUE )* G7 w' }: I0 U1 U1 \9 s5 k
{
3 X2 u, a7 D1 r; E8 h, L/ {# v8 ? g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" }3 t) @/ J. a5 ^! m
continue;( T* Y! _. |) f6 c
}3 N: [- ^* H3 s+ D$ u; F5 d
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);0 _) n+ d- s+ T
}0 o7 R$ a. J0 E
break;% D+ T$ l, _, X/ P2 m, s
}1 f, C `. V2 [
case 1:
3 f: }1 l" k( D0 t1 \ {8 c) v: F5 L, X, z
//整理背包* u$ u! H. Q0 ^
//////////////////////////////////////////////////////////////////////////
' e% h1 ?9 T# _" B$ [# l% T //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) ); H( K P7 M) @* D. |
//////////////////////////////////////////////////////////////////////////
3 y# M B; c0 ?: Z4 | //////////////////////////////////////////////////////////////////////////9 a. ]0 s. |5 h0 z8 a+ b
CInventorySort* pInvSort = new CInventorySort;4 x4 w+ r7 ?6 o; X# A+ ~5 m$ d
vector <sItem> vItem;
4 l" g3 i6 l* }( X& B vItem.resize(MAX_INVENTORY);//初始化大小
2 c) p0 W4 v, v, L- {4 Q" O //////////////////////////////////////////////////////////////////////////5 f/ p( d' j$ ^9 ?9 s
//填充数据6 I$ U) w4 F2 q# n
for (int i=0;i<MAX_INVENTORY;i++)
! x! J% u5 l, Q {
. a- p6 D6 \# \5 V3 w; W' N CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) V) r9 N7 z/ s" @! U
if (!pItemElem)
1 x. N' A, a) w. U$ q5 E: S4 [ {
6 H8 d8 y ^4 M vItem.dwKind2 = 0xffffffff;
& \" e R7 J* j! _, Q: a vItem.dwItemId = 0xffffffff;% p+ k! f! ], n* \1 p# a
vItem.nIndex = i;& |6 h, y, f2 W2 ?* S
}else {( J3 ^6 W; @7 Y* D' L4 o4 O, u
ItemProp* pProp = pItemElem->GetProp();+ S+ V- |3 u7 ]( O
vItem.dwKind2 = pProp->dwItemKind2;
0 b, L7 _# V3 S% g/ N3 o _ h vItem.dwItemId = pItemElem->m_dwItemId;& f) c1 ?/ t4 \: C7 |, }: n9 s
vItem.nIndex = i;6 O5 g& u8 ]) D4 D; \ Q
}2 Q: l- o$ { U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ b0 v, U3 {$ ]. ~' A5 {
}/ W$ w6 C8 X& A+ O9 I$ J
//////////////////////////////////////////////////////////////////////////
$ _& x' W* A1 ~5 U1 X+ z! @ sort(vItem.begin(),vItem.end());//排序6 G. a3 Q; h$ F }+ _
//////////////////////////////////////////////////////////////////////////
: o6 U% ~" b2 k //交换6 R$ C2 Y) W Z: s- @! I: p
for (size_t i=0;i<vItem.size();i++)
# \6 f( p) i/ H" v6 |( x- x5 ^+ e {
! I0 C! D9 o9 w# [# k7 O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" Y6 K1 u$ U2 ^" Q4 g+ R' F! v+ o. F
pInvSort->Add(vItem.nIndex);
D" K9 f# H* e% F+ B }) I# V1 @' R- w
BYTE nDestPos = 0;
n7 A0 v x. x+ J. R7 m; E for (int i=0;i<MAX_INVENTORY;i++)3 [, o, ]$ L) o1 z
{
! u: I3 T$ C) T L+ a1 v! w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; T* s& U6 `5 X# `; h
if (pItemElem)
5 S) R3 e- ^7 } p# Z+ j {& ^: K2 Q k. C3 `; W9 ~
if (IsUsingItem(pItemElem))
3 H- J) H6 [) u/ b {
7 v. r: X- y" n: N( _: m //这个位置无法放
7 R; y; r" N1 t* @# I' }" k$ j- s nDestPos++;
- w" w! S' J+ P' [. d }
4 y. r0 O* p4 C `6 W }
; r4 \7 y6 ]3 x n2 c7 o' t BYTE nSrc = pInvSort->GetItemSrc(i);
. L& ]6 g: g0 N& a pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- n" |1 G8 h7 U% g! V, L if (pItemElem)( G6 J1 Q( y5 g: y
{3 }) [8 Q9 m7 S- r
if (IsUsingItem(pItemElem))
( i, D3 s0 c. } {
+ S5 T- s8 w7 h; y //这个道具无法移动,跳过
; K* I- P( e; B8 J continue;( t( k+ v! b3 p
}
7 c! [! R$ V5 a/ q }else{: U& S2 Y, X* Q
//空位置 不用动
; V1 C O- a. k( ?; w; B' \/ o continue;
' {. Q- B! K4 ]) p) x {: H& ] }" r5 x. |$ x$ ~- v) A
//////////////////////////////////////////////////////////////////////////
/ V9 p9 `' N) z( s8 G- {0 \ //开始移动) q* R& c# ?- |8 w6 W- t/ R
if (nSrc == nDestPos)+ f3 {4 _4 I" _ H+ ?
{
$ L8 ^4 G/ u8 e7 _2 n1 [% h; \- n //原地不动4 X6 ?: ]# G2 s/ p* |" L
nDestPos++;
" T' x" t1 N% e( o" J8 m continue;
( g; g1 ]4 k/ T }; U1 E9 k% M# K
pInvSort->MoveItem(i,nDestPos);/ K5 y( s, u7 ^# ^
g_DPlay.SendMoveItem(0,nSrc,nDestPos);0 t9 p$ L& R: a7 u
Sleep(5);& [9 p) k' j' Z9 s
//Error("移动 - %d->%d",nSrc,nDestPos);$ R/ \9 Q& t0 {
nDestPos++;
* D' U7 H3 O0 V }7 |7 m, R' l8 T* Z
//取第一个元素的信息9 V6 _( i# X9 \
/*% M$ {' R2 F: [ d$ d' v
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)1 Z2 Q& g" P: g( ?
{
- T9 f1 M' |* u0 v1 Q Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ ^! }/ N1 ?2 I& a$ p g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
8 q6 u5 k$ D9 ~" e! h4 o8 ` }( }; N4 l# g: I+ j, X9 P |' S. t0 z
*/! M+ e9 n. M9 ?/ e6 m
//////////////////////////////////////////////////////////////////////////
# A9 G( i' D9 j5 f9 w; n break;
1 l. @/ ?& S, b) Y. G* f }
' f L% L6 Y( K5 _! D }
& ^2 K7 n* z* W, ~9 A}
3 `; I, D* O! L. Lm_wndMenu.SetVisible(FALSE);
: [* B) V/ o/ V" x' v& k2 r0 _
$ {5 V5 l0 r, J! p! h0 p--------------------------------------------------------------------------------------------------------
1 q- S, t7 N3 `9 b* H6 N, D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 ~% \6 M9 k$ p. R$ X+ Z2 b{
: A/ X% V6 ?$ \3 S. I8 c; k. RBaseMouseCursor();
4 A1 {+ w- A" Y' m: |}+ U8 u" u" c6 f- c) n
在其下添加:
! m1 q4 u1 n4 O7 Q, wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)$ X/ z' P: Z2 Y, d! Y
{
: q7 r' l% U) w+ U. I% |6 c4 E% p4 fm_wndMenu.DeleteAllMenu();
3 J% W# J0 I0 Bm_wndMenu.CreateMenu(this);4 H0 C* @ R" y4 P4 Z0 w
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
; ]0 E C4 K! ]
' Z6 P Z3 i2 X% \* |' Zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( ^/ T2 z$ B: j+ }& g$ n" r
{/ _" g4 L( O# |; e
//P以上级别才可以删除所有道具1 c$ Q2 e, M# ?! D/ T( k
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% u3 n$ ~# O! p$ b, F0 S}
& K3 ]. ~9 V8 Q7 d- C9 o; I( mm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# ^9 M! \5 I* ^1 ^) e8 j1 b2 P5 v0 ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) H1 u5 s9 w& H/ h- }# G! B
m_wndMenu.SetFocus();$ v) x' E: j" K- d
}* w: T; c' l# ^! @2 F! d" z3 W; g
------------------------------------------------------------------------------------------------------------
) n# b& Q4 s: S' C6 {1 O*************************
) Q! b: B( v7 I8 A p6 VWndField.h文件
9 h+ w1 N8 M* f7 W*************************
( ?8 j. L* b) S搜索:BOOL m_bReport;
5 y, H l' q# Z8 H1 a- K4 T; U其后添加:* E2 y' j: y& K. H, P' }
CWndMenu m_wndMenu;
4 ?' @3 `5 f) R# w" D搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 E. a% o( a# N x其后添加:2 n+ m" j0 `* H8 h% w& B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- B$ ~) S- z6 u" P# @$ p! S9 q7 d/ w5 w% N l4 O* |
0 U$ d; a& |1 A ^8 T' b
|
|