|
|
源文件中_Interface文件夹下WndField.cpp文件( g# B8 `3 B2 y) e) f
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 G( j+ j! x9 ~; [" \9 _8 [# r% R
6 D0 e8 y: W1 X- g2 P1 S$ @8 [struct sItem
* p [' l4 |4 V# ]6 J{8 ]6 W Y' S8 k4 r% L5 T
DWORD dwId;& x0 g: h! l* d" `! J0 j" y6 ~
DWORD dwKind2;
) K. m- @5 Z K: y- TDWORD dwItemId;' M D- j. u/ x/ M% G( W. ?# r
BYTE nIndex;, @$ C# s! ~ x* E1 D" {1 ]( T* E
sItem(){
; G# X. S* J. W- S$ @# |& t; p' f dwId = dwKind2 = dwItemId = nIndex = 0;0 p/ @ H" L4 v2 {1 P
}
& c' ~& A( J$ I' d4 E* q, x# Sbool operator < (const sItem p2)
# L! ^, R! X# {) [4 z( ?( |{
2 s* I* q* a/ D; U if (dwKind2 == p2.dwKind2)# I% J9 P8 b W/ g- O
{+ A6 F# {& S2 x# d# x; {
return dwItemId < p2.dwItemId;
3 m5 W2 r8 W3 C }else{
Z$ U6 f% w& r- e6 i, K4 P return dwKind2 < p2.dwKind2;; Y% g* V% Z: U6 [6 W
}
k9 q* m/ s5 `# Z6 r- h" e}
7 p1 l" L3 B, u};) b. b$ S2 R+ e0 M! c+ _' F% `
class CInventorySort: m% k0 s0 L' C6 i# R
{" Z7 F4 |, B! u+ `6 X& B- W+ ~
public:
/ ~+ p- \6 [6 _* DCInventorySort()+ [8 Q' X1 m" b% l
{2 ^! }" ~' T% r, l1 ?/ B
m_dwPos = 0;
( m+ v: n2 l$ |3 |+ s}2 z k5 P" ]# N; U8 y; H
~CInventorySort(){}! Q2 \) N+ @$ C- p5 w, I
private:/ Q% O, d' ? b- A
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' O. g# B3 s5 N2 t$ IDWORD m_dwPos;
& b$ q2 Q# j4 e, H; k# G0 ^2 Mpublic:( n( g0 z$ M' B! E; R; P
void Add(BYTE nIndex)
/ ]% u& x' B$ x( K% g{
2 E0 n! I+ J& N7 J if (m_dwPos >= MAX_INVENTORY)* D& n h3 B% D# k# N
{
2 a# ?1 U. `2 ?6 ?" j/ t( O9 V6 J8 l return;
2 }; S* y% G( u$ N- I3 c }
. U& v) i# S$ K5 T& u- `$ J m_Item[m_dwPos].nIndex = nIndex;
6 G$ k% r0 f, n6 c" `8 R7 V. e m_Item[m_dwPos].dwId = m_dwPos;' `# f' i$ I( q, M5 s
m_dwPos++;. K% W/ |, c* i! a
}6 I7 o* ^; r- x: } S( }
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ x; N# T8 F6 x2 E& H6 O{# P: a$ S' {1 |4 \6 n9 {
for (int i=0;i<MAX_INVENTORY;i++)
( ?. D. |' r, a" C: [ {+ |* C: I1 M4 `( f
if (m_Item.dwId == dwId)
( z$ T. X7 @9 o$ k p {1 j M+ g) _7 K5 W; J; [
return m_Item.nIndex;( T8 {9 ~+ t7 F, u A3 G
}7 V3 ~9 Y7 C! X/ T2 R. f8 G
}
, O# b4 g) _" F; _, X" } return 255;( V! T9 ]/ n1 i0 `& x
}1 U. y( s! F: S& F% f) P% j4 D! U
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置- F9 s' K, `/ e
{
: v/ i" o9 R, _9 R: J BYTE nTmp = 0;
: Z/ x3 y3 i' H$ J" `4 P bool bDest = false,bSrc = false;
. V$ \7 D2 Y/ |( n: M" Y1 W for (int i=0;i<MAX_INVENTORY;i++)
, y# b8 B6 C H3 `" { {$ }& N0 i& f# [/ ]+ x% S
if (dwSrcId == m_Item.dwId)
2 [3 g5 u. W4 h& u$ W6 @% ^ {' X' ]: g+ H2 \; ^1 X
//id相等 则 改变对应的dest和src
# m7 ~6 x0 F# s nTmp = m_Item.nIndex;+ C3 W1 ]8 E3 q- q
m_Item.nIndex = dest;
. n4 N4 h! q! L1 e* O( s }
4 M" d+ C K( Z! ^0 P3 p }9 m z- e) k7 |7 {4 ~+ @2 l& ~* u
//临时数据保存完毕,交换开始6 j) n* e8 k0 d& d) l0 X$ W5 d
for (int i=0;i<MAX_INVENTORY;i++) G. B, e {6 ?: p( r4 B
{
8 H, u( S7 C" Q4 D o2 E( U if (dest == m_Item.nIndex)
6 `+ \" f. V3 U {
6 o" R; ]% W# u1 }$ R //id相等 则 改变对应的dest和src
" l$ I% U* k+ Y- Q5 v m_Item.nIndex = nTmp;
* q Y8 a* @' s" |) Y2 ?" f$ J }
& [- B- t/ K [4 D c* |$ D }
* G* ^8 W( b& y, H# z+ {+ L4 ^}5 M' J+ L7 ?) P. ~
};
& t. ~. o9 L9 O. p-------------------------------------------------------------------------
- S9 u, e% B$ w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& t/ \, m6 Y% E; ?, a7 o3 P' W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 ^& P* U; c: w" }8 y% y紧靠其上添加:0 {5 @) H8 ] C4 L8 o+ `
if( pWndBase == &m_wndMenu )
w- j% g' E/ |9 {* A{
- i2 V& O' Q( y switch( nID )
! n) T2 R) d3 S" r' J {
. b6 e) X3 B$ W% E) { case 2:" D2 Q/ @8 U; w4 e3 q% A
{
6 i& ~/ w4 |- i2 e- U4 f4 X //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 Y! }0 w: T# S7 w$ V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 }6 U. i/ i5 E( n" | }$ ]
{$ g/ S# J" `7 h/ o a3 _
break;
, t, g# y f0 ~) c3 L }
# i7 a% a: V" t7 [! P. T2 p for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
! f+ B6 C: t$ b) g# ~2 r+ e {
$ e" K9 Z8 D8 s) H/ ]' c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 Q" s1 `, e5 {# N
if( !pItemElem )
# S# E+ |7 ^) q5 s% P continue;( H9 c& D, q' O/ Q. x1 s3 v
if(pItemElem->GetExtra() > 0)
( J2 v& b4 P- U! p continue;
; M( P2 ~9 p3 B if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 b) {5 ~, a' Q continue;
2 {6 N- L9 a% t4 T: g# l2 P/ s if( g_pPlayer->IsUsing( pItemElem ) )
& b/ H }" i6 @* f$ B, H continue;. c8 }; D' _9 I
if( pItemElem->IsUndestructable() == TRUE ), W/ M/ {; U0 M' [
{
; }+ L' }2 ^# M4 E+ m$ N g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 N) a: x3 [2 z4 M' {9 F continue;
* E, g& `, M7 b* v, c z1 f! { }
$ v) ~& _) _% d" m g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ V3 o2 w( r @# K, Y0 A& } }) E: E2 Q& K0 o& O
break;
9 S$ O# h, V) S; |1 Y }
* n* c. ?9 @$ L case 1:; Z% V+ V# K- Q
{2 t# A* n1 R9 Z7 H6 g# C% ]" O' L
//整理背包/ P5 j4 w! p- C j1 r
//////////////////////////////////////////////////////////////////////////
8 J* c: O) y- {3 K //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 G5 q, c& I& q# O //////////////////////////////////////////////////////////////////////////
0 b9 m5 i9 ~. c, m- X3 l //////////////////////////////////////////////////////////////////////////
! K' w0 A/ t+ a% S' b CInventorySort* pInvSort = new CInventorySort;
, g$ L. s: }) K vector <sItem> vItem;
v' A$ a0 z) t6 f) ?4 b vItem.resize(MAX_INVENTORY);//初始化大小2 e' \( H E/ u/ m/ i9 `9 ]
//////////////////////////////////////////////////////////////////////////
9 A1 U" `7 a! G3 v7 \ z //填充数据9 N0 S, k' m1 N s/ z B5 Y$ y
for (int i=0;i<MAX_INVENTORY;i++)1 V9 T* T( _1 s$ W9 G2 m9 |5 e% a
{ A+ Q: S/ t* J, K2 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 y# T! q% q8 ^6 e7 {. a1 a if (!pItemElem)# w5 F0 Z) I4 S! w0 a; \/ x
{
) F* u, E/ A$ |1 ] vItem.dwKind2 = 0xffffffff;& ` }7 E9 a$ D7 V2 x
vItem.dwItemId = 0xffffffff;
" j' t; o0 M$ ~4 O( T1 f vItem.nIndex = i;
, P& C1 T; @8 l, d }else {. ~# l" I4 i. B# Z& g: n6 o ~
ItemProp* pProp = pItemElem->GetProp();
) Y8 e, ^+ q! f8 \3 w8 k vItem.dwKind2 = pProp->dwItemKind2;+ H# f: ^- B, \% ^6 a
vItem.dwItemId = pItemElem->m_dwItemId;- P/ j! g. d% P
vItem.nIndex = i;
% V1 R( m- Z# l: F }
7 c+ S$ k l8 c. R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 i2 N0 g1 A2 _5 ^1 V }* K% H3 v$ D/ I2 D: ~
//////////////////////////////////////////////////////////////////////////5 K1 l# v& w& i1 }1 b) I
sort(vItem.begin(),vItem.end());//排序
8 W% Y' z) v- A' D4 S; I- ?1 q //////////////////////////////////////////////////////////////////////////8 X% J( K o# H2 {
//交换
; g, V# H: T# w3 y for (size_t i=0;i<vItem.size();i++)9 v. A* v a$ p
{3 ?5 E* t) U/ M2 S% D
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 a# M+ Y) Y6 D' `, o
pInvSort->Add(vItem.nIndex);& d+ m2 M( d% s- l, M8 m3 U
}8 B+ t8 e4 H$ i; ?3 w
BYTE nDestPos = 0;
( q0 b5 b v6 U$ C6 H3 ` for (int i=0;i<MAX_INVENTORY;i++)
" O) G* B0 B9 ~2 C) P {
0 }* ]* G; P8 J% \1 `* p7 j CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);0 y6 v! P7 Z$ e7 R* r
if (pItemElem)
& j* o; F0 u# T# |. o {
2 ^0 p: b0 ~. q$ J6 H- V9 [ if (IsUsingItem(pItemElem))
" y% \* S7 |& e3 n+ F {
7 t `+ o$ H/ {0 E //这个位置无法放* \3 M: T8 B3 A4 N$ I
nDestPos++;
+ l! K. g2 |6 Q! V$ R+ e2 b o }
' J9 C" w2 S7 {% r* J- C }8 B( \4 x# f! f; d Q$ C
BYTE nSrc = pInvSort->GetItemSrc(i); }( | M( w* f5 K
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
+ n7 I/ ^) [. w! b1 H/ { if (pItemElem)
! Y( S: D. k& d5 K* q4 Z {
: g3 I$ e* u2 @- K if (IsUsingItem(pItemElem))( ^6 a1 x# p5 H4 q- c+ p R" t" n% G
{6 t' a- L( S% @) x, ~# Q
//这个道具无法移动,跳过
% D+ \* G, ]( @1 O continue;
* z6 k( w; _/ D' Y( ] }
5 J7 p. P% x1 A1 `8 [ }else{; M5 x; @/ G! e. v; ^4 X
//空位置 不用动
$ C8 {3 [# l, t: m4 A continue;2 b9 y% R3 \! f1 E
}: `) `! R2 b$ Z" j
//////////////////////////////////////////////////////////////////////////
1 s- Q, u" _, i8 g/ w3 T //开始移动2 E9 t% A, z# z: l
if (nSrc == nDestPos)4 k0 Z6 f# A1 d( y$ m- N- v9 c6 J; q
{
0 l7 [8 }& O- v7 ?3 M; y+ k$ B //原地不动7 d; O- d6 Y4 g- q& H. f: s( W
nDestPos++;
6 \+ ], U5 B2 h continue;
+ ^: }: o0 ~7 r3 h6 ]8 ~" y }
* y+ K) [, e! b! E9 s. g pInvSort->MoveItem(i,nDestPos);
, f5 L( {$ f# l g_DPlay.SendMoveItem(0,nSrc,nDestPos);! F! f' ], }6 e4 m' b* @
Sleep(5);
) s/ K8 Y9 Q' O; Z4 V) M+ k+ ~; X //Error("移动 - %d->%d",nSrc,nDestPos);- e; [9 Y. z! x" R
nDestPos++;2 \; o* W% } E
}
$ O3 w% K& e! f8 \5 k1 ` //取第一个元素的信息7 y; j" ~) K3 _6 R8 o0 r
/** l6 x: f7 N- Y6 }8 `3 `6 y o
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' n/ g* q2 y$ A {
) Z/ U( o: @0 s! z/ u Error("Move - From:%d,To:%d",vItem[0].nIndex,x);8 ~( e1 X* J, V) w8 F I0 d
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ k( @1 m: H) ]2 | }
: d8 D5 O4 d+ j% l9 B */- e2 X3 H2 g, S5 p
//////////////////////////////////////////////////////////////////////////
3 l) s3 K3 g) M: Y& S% V' t% K break;
, O. p/ ~$ K+ `3 h }
1 l0 g; g! N# ~ } 4 l1 N. K: g/ T: C' \; Q) m( \
}
& Z7 _3 g! D0 H* P& V* G' m5 |m_wndMenu.SetVisible(FALSE);" k) O$ F7 a# F& S* y* l4 T
: @4 l+ z4 r( ]1 \' x
--------------------------------------------------------------------------------------------------------
S; e _# k! h! T6 n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)( Z A8 u' l1 R3 z+ @
{
* v( [, _, Q- p$ A% s0 q7 Q/ nBaseMouseCursor();
9 J+ I+ N1 e5 i" V3 n6 \. N}) w. J( j( _' f9 Y# N! b! M
在其下添加:
& I9 v* C9 w( z$ Q5 c6 [( Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 t& e5 l/ Q0 t9 ]" {{4 {: s# G5 L+ Z6 U& \8 I
m_wndMenu.DeleteAllMenu();7 x4 x6 g8 M- ]1 _; v. Z) K \' i
m_wndMenu.CreateMenu(this);
6 d1 U% {0 m& X! Q! zm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- X) E4 u/ M# I, o" I5 O, ]
/ P7 g5 D3 z3 L6 {- B# fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% S3 W6 B' g( P5 q& ?2 k, N- Z ]
{6 m- t! G0 k( [: [8 ~3 `" D
//P以上级别才可以删除所有道具* H0 E$ D T7 u) W$ d
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
5 }+ _- u6 g8 D$ Q' J3 ~}
# H3 o s" C) U: I) hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );! v. e$ Z4 @6 t1 v
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 S/ o, O. {- T4 j4 ~m_wndMenu.SetFocus();
3 Q. N0 b- s7 @9 _0 d X( |}* ^1 |0 P$ Q3 ^$ t# I% J* H) B, G
------------------------------------------------------------------------------------------------------------
) `5 W* Z; d+ P: O9 G*************************. _" s+ {6 U3 `) `. f3 ` Y
WndField.h文件5 G' T* g# J# i! Q1 y
*************************
& A, N! [0 ^5 m% _+ U) \搜索:BOOL m_bReport;
: p" ~1 P: u# r8 g其后添加:* |2 t; S6 b' k2 v! J, b0 s
CWndMenu m_wndMenu;
9 O6 }6 ?. ?- ?: h: x搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 \$ A) E- l q7 y( [0 p其后添加:$ Y1 \; T5 B5 a3 m9 r: V$ ?
virtual void OnRButtonUp(UINT nFlags, CPoint point);
8 t8 m6 M" Q' x& O4 O% f$ z; o0 w% \6 r
+ T8 X: o7 p6 V+ {7 b9 N1 J
|
|