|
|
源文件中_Interface文件夹下WndField.cpp文件: Y6 z; _7 \0 Z1 \
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% B# Y2 P6 _, t7 p: k. J+ \: V0 h0 |1 }# K- `) Y9 q/ ~+ G
struct sItem) Y6 Y1 c4 k/ r# S
{5 N2 A# T# y* N$ t# A- `) O
DWORD dwId;
. s! e; m% p* G' S! Y. QDWORD dwKind2;
- s( t8 B; b& k/ k M! q0 Q" }DWORD dwItemId;. x1 K: G' F, s G! V) q% F4 o
BYTE nIndex;5 }- N9 i. ?8 L0 K" \9 h7 e/ C( j
sItem(){! u. B& X' _( V, n
dwId = dwKind2 = dwItemId = nIndex = 0;. y$ u$ y7 `* ^6 a3 O
}
' b6 l$ w' v# s3 G5 Kbool operator < (const sItem p2)( F3 p9 Z% a( N0 W% G+ P: {7 C
{6 @$ C9 `1 `* w8 r! u+ X9 `/ M
if (dwKind2 == p2.dwKind2): z" x* z8 e3 P& z' A& k1 @1 @
{7 w. ~5 B7 S3 d+ s! x
return dwItemId < p2.dwItemId;
; m8 U. R1 ^, D# }: w: o }else{
, E: v7 R) o. ]" }+ P1 b return dwKind2 < p2.dwKind2;! J* g; Y5 O) V o% V7 n- t( {9 [( ]
}, I- z* ?% X6 |( b) Z' N
}
, \, }' h% F9 m};
5 E) R3 L3 i8 |. _9 Hclass CInventorySort" _) _0 o0 t4 j# ^3 M% a
{
* K3 C, m' Q) w0 `: k; Y- Lpublic:/ V8 i0 R* j {! _" \* y. @) j
CInventorySort()8 W$ b$ E* X( x4 f( @) Z. o
{; U' x. e( k) j
m_dwPos = 0;2 }" n6 L7 L7 p' G) I5 y! q
}
w0 u8 g# ]8 _+ ?/ h~CInventorySort(){}
% d1 [& j# f. _: @private:
. }. M O6 T' z, J3 p. t9 ^5 {sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- N: ?; o8 y$ |
DWORD m_dwPos;
& P9 w0 ?! |" m, l/ [. spublic:# M" G+ U( n7 f8 }- _
void Add(BYTE nIndex)
c" w: @- i& d- Y% ^3 g" z+ `) u{
: v% K5 v# m7 M if (m_dwPos >= MAX_INVENTORY): f9 v% e: o1 g$ @+ K
{" B+ ?. F! b) d8 v/ q0 P
return;" O$ O- \) [9 |+ j$ Z& Y
} S5 G# M& N$ Z
m_Item[m_dwPos].nIndex = nIndex;
, Y9 Z( v# `$ Z( o; y m_Item[m_dwPos].dwId = m_dwPos;6 p7 j7 i5 K, z# @% Q
m_dwPos++;5 b" _) C4 z$ x3 h% W/ g$ V2 e
}! A, |7 }5 q& D- |8 h4 {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列 x5 ?# S+ Z9 g& D
{$ p. F) Y" ]2 `) ^0 E. ~- S6 P
for (int i=0;i<MAX_INVENTORY;i++) L2 X+ i# R e0 T( a
{3 U: l# v3 P# B% ?' s( s
if (m_Item.dwId == dwId)0 G. ^/ e6 S {1 C3 H3 C3 y. y( K
{5 \3 I6 X+ c/ [$ K
return m_Item.nIndex;8 x3 _' G I" |, o5 i
}" N' ~1 g0 e4 R8 O
}
: \4 N, ~$ d0 z7 Q; H return 255;
_% G. d# ^2 U1 w3 Z}
) X# ~* ]' P1 `/ Y' Z0 d' i, {6 nvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ a# E0 U0 G: s{) Q& {3 y2 ]6 f: [
BYTE nTmp = 0;, z7 J$ D2 y7 }1 ~/ L
bool bDest = false,bSrc = false;, c; v" d& l* {; t$ M
for (int i=0;i<MAX_INVENTORY;i++)7 W b& v. O% \8 V. D9 l, a! l
{
4 o, m3 i& K" j$ @! n2 ? if (dwSrcId == m_Item.dwId)
7 _$ Z' B- [! t. ^( d: V {
4 y, ]) F! [. r; k' e+ N //id相等 则 改变对应的dest和src+ S" g: j( B/ D+ U
nTmp = m_Item.nIndex;
7 L) @2 l3 D2 z% S1 { m_Item.nIndex = dest;
6 R) G3 L+ Z$ s) ?1 L. b }' q/ U( l4 F9 }9 A: j9 S- X
}& @/ {) j* L) R0 V& `; {" ^
//临时数据保存完毕,交换开始% d3 E- y ~# S# b. f- Z9 d# v+ X
for (int i=0;i<MAX_INVENTORY;i++)
, j( Z+ F* H6 ] {
3 n! X2 q) z2 N if (dest == m_Item.nIndex)
0 c4 u- r1 k# h( k( z& E {% G, e, l d( g6 X( F& r( |
//id相等 则 改变对应的dest和src
- U+ R; H ]; X$ k m_Item.nIndex = nTmp;+ w5 k+ n$ k9 n- t
}
+ O% G/ g5 m0 b3 K }7 n8 I; }9 ?3 f* j3 H' x$ V" I
}/ U* T; j: |3 g& S- l
};
' ~, U7 N P6 y, h: @( F+ Y-------------------------------------------------------------------------
- K, k8 Y4 j9 A0 y. O' w依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
- Y8 M4 w! F" A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" B1 Y- v! m6 |+ n8 _ s紧靠其上添加:
; m* i. i/ ^# S3 Gif( pWndBase == &m_wndMenu )
& N4 }% i! V8 ~{4 V u8 m7 o* m
switch( nID )9 @( k2 q. [4 D4 n
{ W) D. O# c5 v# y! S
case 2:
/ ?" A; J: q [0 k {
5 c- L* H3 K% G7 l S6 l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);% J+ t% ]$ ~% Z- M- W& Z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& l7 l& M! p: _5 ]2 U) H {
8 I/ D! e9 J+ K% ]1 @4 O break;) @; L: C, g4 F8 s4 Y) I
}
' t! S4 v. q* b$ P$ o \ for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)! Z5 X6 Z* m" z5 ?# ~" V+ j
{, r; s6 z$ G5 v9 l. V3 s
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 n$ Z7 Z! f5 C4 v2 E6 [
if( !pItemElem )
5 d z; `' x8 x! \0 ]4 b continue;. u" \7 b4 [8 u1 k7 C
if(pItemElem->GetExtra() > 0), Q. C0 y- j- s# E4 Y: ?
continue;
( @0 e) _7 `% p3 l2 x if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 _* B( Z1 z' Q9 C# f, W$ C; `
continue;
. c! j, B, A7 D5 j- i. [& C' O if( g_pPlayer->IsUsing( pItemElem ) ) h K& b2 F& h8 k% x- a
continue;/ l2 }" |( X4 |9 c% }9 n( z
if( pItemElem->IsUndestructable() == TRUE )
: U7 K' V. T$ U4 O4 ]( g& W; [6 E {
/ R, i3 N1 s/ L8 p g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) ^: C, Q* Z4 P& O7 V7 s* @ continue;
% T( F9 ^: }4 M( k6 {. I2 n' k& M }! l8 V. a4 Z) Z( u
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# B2 c4 z* @6 M$ M7 ?# V" f
}
; Z3 I4 F, M# n9 q8 D break;7 L: |! G& I: P2 J
}
( t! q) ` z. _( q case 1: M' f: n0 s. ?+ D) z
{
2 w, ~8 {2 @6 y( b5 c2 x7 x/ n //整理背包, Z, B p' o9 W* {- _6 `$ h1 H; K X
//////////////////////////////////////////////////////////////////////////
* e( I/ s9 w9 Q //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( Z ?/ r$ F: M5 j! i5 h/ f9 o/ [$ c( A //////////////////////////////////////////////////////////////////////////
- B6 k$ p5 y5 l& Q& u# A6 Y //////////////////////////////////////////////////////////////////////////: z# l- i' {- [5 ?: Y" v
CInventorySort* pInvSort = new CInventorySort;
# ^: j- w. f; Z+ P) o* P vector <sItem> vItem;& t/ \! C# K$ f3 a& m$ E
vItem.resize(MAX_INVENTORY);//初始化大小
0 f" ^$ r& m4 O6 d* M //////////////////////////////////////////////////////////////////////////3 V9 ~' }' ~' C9 N* K; x7 i' }2 R
//填充数据
0 ], o4 O6 L" P9 u; X for (int i=0;i<MAX_INVENTORY;i++)$ l9 V" c; x5 {+ }7 T' d e; s- h0 |* \
{8 E @! o/ E& M+ U2 j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 ]* p) j% q/ @3 I: o0 L4 f
if (!pItemElem)
% }5 z! u( M3 B# c {
/ u9 e9 G4 p* f- I+ U' t- S vItem.dwKind2 = 0xffffffff;% ]! E: ~& L$ F0 f) T$ N. s3 q* p: t
vItem.dwItemId = 0xffffffff;
9 B- \# B8 L$ R. A( ? vItem.nIndex = i;2 a9 p3 {3 q6 ^ e5 l# O
}else {/ l) o/ t& H0 `- U
ItemProp* pProp = pItemElem->GetProp();% M Z' @0 [" p7 i8 p1 r8 Z
vItem.dwKind2 = pProp->dwItemKind2;% Y3 s& P9 X" n2 m) x) ~1 p
vItem.dwItemId = pItemElem->m_dwItemId;
+ O, b3 X& {1 I4 i2 A( K1 [0 R vItem.nIndex = i;6 P# A: T; b! p
}% o4 g/ L) Q9 p; T
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ v! _# @4 v" X d; ~# f/ ]
}3 @) N$ _; L/ ]5 D9 z/ B, h Y3 a
//////////////////////////////////////////////////////////////////////////
0 u" {7 Y+ U7 T$ G7 \- ?) k sort(vItem.begin(),vItem.end());//排序
$ A `7 T* i& l. W! |6 P //////////////////////////////////////////////////////////////////////////
" X8 _5 j) O1 ?8 N //交换( h& R ]! {$ U2 x
for (size_t i=0;i<vItem.size();i++) u! S3 F- V$ M& _ @' H! X
{
) Z$ b( x% ^. v; e d+ l //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* [/ o- m5 h& P3 g$ w" E' z. [* W
pInvSort->Add(vItem.nIndex);
5 T3 R1 \* I) K: { }
; }' u! L4 m; a# t2 x) b! L BYTE nDestPos = 0;- l+ X+ K- D( E- X3 s, |7 C L
for (int i=0;i<MAX_INVENTORY;i++)
2 {1 p* y6 ~$ W- |1 p& t' s. ^' D {8 B* j' M+ G5 \1 D, F. B* B' `9 q0 A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( r/ I6 o" ~8 Z9 t5 o1 x if (pItemElem)
8 K7 D ~0 S5 a$ U {# @7 K* B$ K( Y0 J
if (IsUsingItem(pItemElem))
& {2 i e- B4 ~1 K) [ {2 N6 w& a# T, I
//这个位置无法放
, T2 p! q1 p" L nDestPos++;
3 D2 C% k8 {- X4 I( N' G* m }/ f4 d( w8 C% z, y9 i% s: |
}
4 ^1 |! s5 D0 A' a8 R6 ^1 r BYTE nSrc = pInvSort->GetItemSrc(i);* U4 C& g- r) L1 P; l" |5 b) V
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
5 N. p# N8 C7 g7 b7 w6 i4 I if (pItemElem)
" k! G% t: k' f0 ?# b {
9 U& a! R& ^) z" { if (IsUsingItem(pItemElem))
4 J& E" D$ c4 J& l- s {
6 {) S; o5 U; b/ s# }& W, d //这个道具无法移动,跳过
( u- e) F% l) \' z' g continue;3 B" k( f6 T5 z/ U4 f3 q
}
7 T% A. [7 g- H/ ^* E+ n }else{
6 p2 @- T" }& H; X; J0 l2 A //空位置 不用动, r! q# A6 G2 X; p+ w, Q* h
continue;% I( f& `% Q1 |5 r1 I8 d% ^
}8 }2 F% \; F* S9 s1 M ~: a
//////////////////////////////////////////////////////////////////////////8 }( E7 a& @: K/ \! A4 ]( `6 ~. g
//开始移动+ y; u2 ~' K; `$ y$ b- P
if (nSrc == nDestPos)
# c" a H% f# C' ]# R; A: U& Y, ` {
- n& p/ D2 b4 X //原地不动+ J$ V% c7 x, ~. _: a9 d
nDestPos++;
: y* q; ~& u* y continue;
% e* P1 Z- q" q' G4 t! f }( u9 S U4 N. u4 F2 W1 \
pInvSort->MoveItem(i,nDestPos);* A( C. ?3 Y( E) _, ?
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! }- \/ V' K* n. u+ u$ G0 l ]' Y
Sleep(5);
* g) @- N8 V7 w# ^, L2 b //Error("移动 - %d->%d",nSrc,nDestPos);
8 \$ u) u( s v9 ~: @) [4 K nDestPos++;2 y' N; z# U7 V: H2 e+ A6 z
}
" R! v! `$ M6 s; I4 L: l0 L" |# I //取第一个元素的信息" ^: H" ^4 P9 h9 R
/*
3 w" }5 v$ J. A7 `% M: A if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 Y: ~% \+ C( P% \. S' p
{
- K( e) {( |" W7 F) ^6 u( I( C Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ s: J. a) ~) x L1 A
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);! L$ P8 G: H3 n" x
}
. `" g9 w: ~& B2 E */, {% d* a& b( N' [1 s
//////////////////////////////////////////////////////////////////////////
4 m. H1 F/ l4 a1 y8 }, q6 N break;1 ^3 F& O- u2 l0 ~0 \! Z
} ]7 Z6 I8 P( `& M4 }. l
} 7 h; y. g4 I2 ^+ {! \4 L
}
l. [0 P9 A: s# Z2 F& |+ e# Qm_wndMenu.SetVisible(FALSE);/ n8 z& j" a! {- z! F% y, p
4 ?2 U7 r1 o* h--------------------------------------------------------------------------------------------------------) D8 |0 w c& V7 S, o$ l8 K c
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 I( J5 s. M5 ^& I* F8 @
{
7 A" n/ {0 H% A |BaseMouseCursor();; S1 |# ^( x( s) W
}
, W u8 z! Y! A# Q在其下添加:4 m& E+ }+ s% Y/ h! ?
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 B w3 d8 F. b, M- u9 A0 r{4 s$ Z! [" ^7 z3 g
m_wndMenu.DeleteAllMenu();! y j$ E _% U. [# p* E {
m_wndMenu.CreateMenu(this);
& N# @2 K( P4 ^% D' m2 r3 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 {/ z+ M1 y: t4 ~5 s
3 y. Z6 q. G7 R7 r/ Mif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 q% J8 D$ d6 j1 h$ @4 _
{3 _; v$ V- J$ o9 f+ J
//P以上级别才可以删除所有道具
- L* J* d' A% f4 [6 L) v. c m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
' ^: b; ^. l9 Y2 U}
" _/ T! p s/ T/ P% z, u5 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 Q2 [8 r, m$ M' _; g5 X: G9 rm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
, \7 q; W0 v( g+ g# P# Um_wndMenu.SetFocus(); s- K! ]2 J P1 O5 S
}& n. d; ^ T! b$ i( ]2 }' ?+ X, f
------------------------------------------------------------------------------------------------------------
+ t" p- Z! t- p9 `. k! R: S+ z*************************
, o9 q$ u7 r- ?7 C8 h$ \' qWndField.h文件, @# P2 Q4 n5 H+ f4 L
*************************
9 l3 v9 q5 L+ c4 n搜索:BOOL m_bReport;5 s8 q& ]! Z1 \ ]8 _8 Z) @
其后添加:
/ j s& b3 D+ fCWndMenu m_wndMenu;
& ~& v; B4 \! W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ A0 u3 S; h' i9 u3 E其后添加:5 X3 z/ W3 Z! m4 o- L9 ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);
9 F7 O9 s# Q/ W; I* `( H
9 D9 L6 p2 m1 Z: ?. w2 |. ?" L% c# R2 m( }9 c$ _9 \
|
|