|
|
源文件中_Interface文件夹下WndField.cpp文件+ \. M% J' ] L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! V$ ?# T# | {
- |1 b3 y6 ~2 v) y9 ystruct sItem
$ z2 r, [' u) a* n$ O/ g% _" m{2 ?! A j2 e* U5 c8 \! P1 S
DWORD dwId;
( W8 d; c* l8 A: E6 \# JDWORD dwKind2;
b8 ?" R) y7 A1 G7 Y5 a/ pDWORD dwItemId;
. f8 ^& l s' { u5 jBYTE nIndex;
+ q# v5 d' e8 o! F: ?9 T1 f: AsItem(){
9 U- k6 g$ Z: h" H. x9 v8 d dwId = dwKind2 = dwItemId = nIndex = 0;2 h: \$ c$ x: p3 e/ T, o6 n4 v
}
: Q! t1 A' o' z/ s1 h# hbool operator < (const sItem p2)2 n) |9 k+ p$ o( q( ^8 f/ y
{3 {; K: d% d$ X; T' F& ]
if (dwKind2 == p2.dwKind2)
3 h( d- I! k9 G4 N# e* k3 \9 O {
. s2 a% \2 ?2 ]. z" w9 ^9 V7 \/ L0 l return dwItemId < p2.dwItemId;! r" c% }8 [" g }/ p! E
}else{7 h3 o' p: m$ A) ]# }1 ^
return dwKind2 < p2.dwKind2;' d9 ]8 H1 N* }/ z0 e. m! V6 w
}% ~- `, m/ W! r0 C, S9 i; c
}
+ a) A6 h+ Y! O7 _' @3 r5 i};) c- b' l3 u% b6 g z0 d
class CInventorySort6 h2 L6 \# q* n3 o4 E
{ X$ r( Q3 z( Q% P. b
public:
j. G* R B) N- e$ f1 }CInventorySort()/ h3 X; S0 a! x: `2 L5 F
{
/ H. J1 f1 Z! y/ h m_dwPos = 0;
& N4 @2 v( W. I* L2 m& \, ]0 [}
9 Z- i: c& [0 \& }, m~CInventorySort(){}; f+ s3 b# c, ?% W2 H; Q( e
private:# m/ h$ d* }9 Q3 T- i% ^8 R% R9 V
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: Z( p. d7 V5 Z3 r; S% O. JDWORD m_dwPos;4 `2 @8 @2 \7 g! a) @- _8 f
public:
: Y7 V# O0 F/ b- F! Q. U! Fvoid Add(BYTE nIndex)
. @% _1 z: }5 @# ?' ?" D9 ^{ p; C' C8 p) M6 O
if (m_dwPos >= MAX_INVENTORY)3 Y g7 l5 B2 ~4 H0 A. M9 v
{
. X3 S) S; t) v$ r return;: a+ Q9 Y4 K7 i9 j* t
}
4 f5 o8 e) v W2 ~6 c m_Item[m_dwPos].nIndex = nIndex;1 {) U( A( @) V8 \
m_Item[m_dwPos].dwId = m_dwPos;
, b# d3 [7 I0 z m_dwPos++;
$ m \" x$ A! s+ `}. g9 w S+ x: Z9 ]+ U0 L
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
# B( F1 X0 q- r) N8 W{& p9 V; f \+ N9 q2 n
for (int i=0;i<MAX_INVENTORY;i++)
6 q# L" Y, X" ?& [ {5 T$ \- X' X7 d( l' I8 b
if (m_Item.dwId == dwId)
/ N: }8 W* @5 H5 ]" A5 @8 i {
1 z5 c: i! y3 b& e7 H. O return m_Item.nIndex;
4 b. D9 u: a. u U8 O }5 i1 n! D5 H9 D8 ^( A/ M, W3 o
}
/ `: e7 i* Y0 k. P0 L0 o/ B return 255;
7 I$ G& r5 _. p+ x/ t: s! {/ {}
7 W# J+ u9 r8 `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 {+ k! I: U, |8 h{7 E* I, D: e* P" Y6 s/ y
BYTE nTmp = 0;
6 e1 ^% k3 O0 b bool bDest = false,bSrc = false;
% D, M; M3 H7 V5 X9 }( q2 y- t+ Z; a for (int i=0;i<MAX_INVENTORY;i++)3 @! B3 G- {# {6 X
{
' p1 L2 R, B8 B/ K ` if (dwSrcId == m_Item.dwId)
) l" ?: p; t$ @7 c {
4 |+ c' F! p8 M1 t- _. d/ p //id相等 则 改变对应的dest和src, w5 G) d2 D1 y
nTmp = m_Item.nIndex;' z. D9 z+ k3 B7 v; U
m_Item.nIndex = dest;
1 U( V) ?3 d0 w- T5 ] }
. [0 H" h' J6 R' p& K3 s* | }
A: ?+ `2 b% K1 {8 g) z4 b/ j/ Y //临时数据保存完毕,交换开始
: k+ o# b# [8 x" g# l+ W/ o- A for (int i=0;i<MAX_INVENTORY;i++)
5 n5 I0 o5 Z2 L2 W0 b: q {9 y7 c/ u! v8 Z( ]! d; z
if (dest == m_Item.nIndex); f9 Z! k6 o2 B" v" x
{# B* m. z3 u' o* Z6 Y( F B9 E, }
//id相等 则 改变对应的dest和src
S. p5 [- t6 `; a; ^ m_Item.nIndex = nTmp;& I1 f3 J+ v( _1 V( u5 z. q
}9 b2 w7 {9 X3 l3 ^% c' J: o4 h5 B
}+ L% F" E5 Q# {/ v
}
- ?' D5 R: @8 r1 k1 y};
2 @: \( u" J* W) ]! \& O3 [! O- N-------------------------------------------------------------------------, J6 z9 E+ G8 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 N9 O& b6 t% X" T2 K& L7 {. ^" Q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
) O+ H. p8 ~6 z5 ?/ F/ t紧靠其上添加:
. v0 F* ?# n& Eif( pWndBase == &m_wndMenu )/ A4 o* b2 \1 t" m
{
* K Y: O; Q# Y+ F( ^ switch( nID )
; g6 _& z, Z* w# @& o {
6 Y7 I9 q4 i/ S, Y case 2:
0 C- N: A/ n: J' v {
( w! ~: e" H: r+ X8 q //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ G4 o8 L* V8 V! Z. n2 V if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 Z# ]5 D8 o" j( @+ L
{& ^8 m4 K+ [; m6 i# a
break;! l/ P1 G0 h, O& p5 V- ~- E
}) l3 e5 k) |) q# o4 ?0 ^& [5 A
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% h; |) n. t; Z$ r
{
% B# ~( q: Q. N" L% `- h& z6 c CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 J3 `- F/ @) e% j, a/ G if( !pItemElem )
( W: t4 Y" a' q! ]& \" l) _( A continue;: P/ G* ]0 p- m# Y* K+ Z& r$ r$ R
if(pItemElem->GetExtra() > 0)7 n% y9 @9 M7 t: O7 d6 A9 |0 n
continue;2 M. t* z! V" U
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: t Z- I6 e+ j2 N; d continue;
. d/ b' H w, h* _ if( g_pPlayer->IsUsing( pItemElem ) )9 Y7 v8 W, t5 H9 a: v
continue;! p5 l5 E$ @6 U4 I6 i, _
if( pItemElem->IsUndestructable() == TRUE )
, A! B4 T8 r( \7 o9 F% O+ R$ T {
, }0 ]$ g% [9 P# L9 a: x, ^% P g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );; @1 L: ~" S% n8 a
continue;' S. P" d7 m. j. X; F" U6 Y
}, C. z/ C9 z8 `7 |7 O$ @
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);$ I5 S6 S4 N5 N1 Z2 _
}( U$ B2 {% }3 a. S) V6 e
break;8 X9 l, D& G6 G& W1 D" A
} e, c1 |& x5 g9 Q! V7 w
case 1:
" A' o7 H7 h1 G3 I* X {0 ]8 k# ]* ^0 Q3 X' L) z* |
//整理背包1 c# J2 F& z+ O+ c B2 l% d
//////////////////////////////////////////////////////////////////////////7 n7 C) M" H' T) G1 e. Q1 @7 I
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ V7 Z: B& y. U1 ` //////////////////////////////////////////////////////////////////////////2 w6 M/ u/ U3 \: p3 ~% w
//////////////////////////////////////////////////////////////////////////# V9 A2 c0 T: J' s- f- P. j
CInventorySort* pInvSort = new CInventorySort;! S" T* K+ m7 l ^; w$ k
vector <sItem> vItem;# |/ x9 J( i L) I( o* w
vItem.resize(MAX_INVENTORY);//初始化大小6 c) L/ w7 R, z" s
//////////////////////////////////////////////////////////////////////////: h" ~+ H! }+ |5 W, R; x0 E: [
//填充数据
0 F2 T5 [8 h( Z for (int i=0;i<MAX_INVENTORY;i++)
4 b, {' U% _# G" R' ? {6 ]. g) j' E E
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 s9 q# b0 d7 C# |
if (!pItemElem) a8 z1 A6 p. d5 g
{
: h* ~+ C# [9 ? o: w vItem.dwKind2 = 0xffffffff;! W- X8 ?; T+ z9 g0 F3 _3 Z0 n- \
vItem.dwItemId = 0xffffffff;, \. Y) ?0 J' J6 f
vItem.nIndex = i;
2 s4 g1 H. U# j; f! U$ C7 i& f }else {
7 z& q, w* d# Q' ]. `- O ItemProp* pProp = pItemElem->GetProp();* m9 [+ z8 ]- }# V% i7 j
vItem.dwKind2 = pProp->dwItemKind2;1 i% O# s7 ~& @3 P6 c# e
vItem.dwItemId = pItemElem->m_dwItemId;5 `7 i. @2 O& O- z3 h8 \
vItem.nIndex = i;& n" Q: P0 a$ e! _( j
}3 v8 ^3 z& ]( H* G0 N1 ?
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 {3 n/ _7 F' x$ ]' b; E }9 m0 `, w/ l7 o2 t6 C# L9 }
//////////////////////////////////////////////////////////////////////////
$ ]5 u- ?$ p8 j2 D sort(vItem.begin(),vItem.end());//排序
5 ?5 Q; j7 W% ?. T5 ` n //////////////////////////////////////////////////////////////////////////9 Y+ [+ h# T3 r5 F* r4 T5 E7 g8 A
//交换
: n' x8 R" @1 ~3 O4 ?- ] for (size_t i=0;i<vItem.size();i++)
* O, Z! j9 e( h" w {
. K" V* H }5 O" P6 s. O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ?$ U5 I( E L3 ] pInvSort->Add(vItem.nIndex);% T, M. n7 m! Z
}# s4 _; U6 _# W; k* S$ [3 B
BYTE nDestPos = 0;6 r0 l+ s- [& b3 ~
for (int i=0;i<MAX_INVENTORY;i++)
* b; `. z% d2 t8 Y; U2 G {
( h7 ^# s9 B) I. l CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
7 K m+ q7 C O8 M; b3 [ if (pItemElem)+ Y; c1 {8 ?7 i
{
8 U& E4 ?4 S4 Y- ^3 b if (IsUsingItem(pItemElem))7 F5 T1 i. \, `% x
{, y: V x" \& p: r6 i
//这个位置无法放
3 Q5 I- D) |6 V: ~4 @( N nDestPos++;5 j7 Q& |; Y M+ x' S- r6 _
}# a% R; u/ E5 Z% |2 B4 J" c P
}+ X. W6 H( d8 m# Z3 B0 ~
BYTE nSrc = pInvSort->GetItemSrc(i);
- h7 | s" y, U8 p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* V. z% o, H. s3 z* P7 F7 D if (pItemElem); b; `9 ?$ W0 U5 P# g. |
{2 A0 C( s1 f& ]! M# G
if (IsUsingItem(pItemElem))5 _* P4 Y* O8 z7 S0 _) `
{
5 g) C6 Y, r+ _, b) U //这个道具无法移动,跳过; M+ @% m* q1 \+ t% [
continue;- T5 p9 u2 n! @; `0 g
}
8 n7 G: W6 b w5 u4 e- o }else{
( _+ R* _3 I+ L5 D* @; g/ v //空位置 不用动. w" Q: u* ?: t) O
continue;( Y I6 w1 o* \" b# n
}
1 R7 T/ h f2 I% B2 U: u' ^1 x/ G3 s //////////////////////////////////////////////////////////////////////////
$ k; T, l7 m( K8 Q$ ` //开始移动8 G6 r3 Y p6 T6 y# P" E
if (nSrc == nDestPos)- {9 U* N5 O2 O. E9 X
{
$ e* M) D& N l% R0 \+ a! c- e" u) M //原地不动2 s S- d5 Q/ u+ b& Q0 e* Y: q& a
nDestPos++;1 s1 l" f) @$ W* ?* _- Q
continue;% M. d; Q. p# t: n3 j* h
}& |0 W9 Z8 x/ n! O! ~
pInvSort->MoveItem(i,nDestPos);4 h' U/ r7 q# A. x+ X' r$ U
g_DPlay.SendMoveItem(0,nSrc,nDestPos);" Y2 U1 \2 Z' C+ U: M; z
Sleep(5);: Z% F' ?* H2 Q% }7 v9 m% R
//Error("移动 - %d->%d",nSrc,nDestPos);
8 I& Q+ x& w; p1 |9 @4 | nDestPos++;
( c0 {7 g% ^- S; c: t O7 r5 O } y, F6 }/ V% c/ y
//取第一个元素的信息
. u) w4 k) @; _: M9 r( p3 T2 ] /*# c* a6 y- p1 c# Q; j
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
4 v& B) h0 d4 ?* R9 H3 U {
4 m _0 z! I/ ~2 ]! u4 U6 { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. f# g# P5 {+ M4 p( s g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ r2 o/ K# M1 x; ^ }
8 z" M3 @; \2 U* e7 \ */
. M; D7 i, B2 k //////////////////////////////////////////////////////////////////////////
3 i5 j$ Y1 `+ Q& d break;# A0 T) Q5 s% B5 {
}; }+ F0 v3 P B- ?
}
5 C( E/ K: g9 R2 d% U' q. ]" u}3 K3 U7 R( h! `' A2 ]1 X! w
m_wndMenu.SetVisible(FALSE);
! P9 N7 I4 V2 x- i+ o
9 r- c/ S* y) Q6 H--------------------------------------------------------------------------------------------------------
( @8 Z' e) C7 o搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 Y9 G2 `$ w" r2 o4 G8 |* a{
$ s6 \7 ~' a1 {( b' |) \4 _8 TBaseMouseCursor();
1 M/ ]0 h3 E3 H. u* r}4 A# ]- W/ O9 j0 h7 W4 d2 I
在其下添加:
- {* G5 x) p, O* gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) J0 s8 _5 w/ q1 W: ?
{
' P" p+ n! G1 c( r1 U; Im_wndMenu.DeleteAllMenu();
+ i+ B2 _1 p( j! a: um_wndMenu.CreateMenu(this);, b$ F7 \2 }4 j7 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. ^. t4 ?4 v- U" h' I* F* y4 z
3 W4 A5 l+ {$ e- ]/ uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))4 T& h$ _% f9 `- d3 p3 {
{
6 T6 G8 G! F1 w( _' l //P以上级别才可以删除所有道具2 Z4 |$ ]& j' W! [2 y. W y
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ h& d* ~/ r7 @' ~
}
# y9 e; q4 B1 M; E: `m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, A, [, l& E: ^2 H; V Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 ~" H- l5 y1 u: a' ]( w
m_wndMenu.SetFocus();# I, h6 J; X3 u" O
}0 ^# p& z- t. Z) o h. }- z* X% `
------------------------------------------------------------------------------------------------------------$ e/ D9 ^: N' ~" o$ N
*************************
k7 P4 F8 E- dWndField.h文件( T* u! v1 w7 y* I. F
*************************
. r$ x6 h# V; s* L搜索:BOOL m_bReport;. P; Y) q* j Q: h* ]3 {0 O
其后添加:
2 }2 V! E5 @8 ZCWndMenu m_wndMenu;2 @9 [2 A3 C3 R- v
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 Z0 }! `" }0 v& f3 T
其后添加:
0 V2 J- j; d. G1 S; zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
& U3 d3 z5 ?0 _: L# F0 A. R# a. G( U) f* w' r2 x* e" ^5 w
1 C( l; S2 s N+ r! W# F |
|