|
|
源文件中_Interface文件夹下WndField.cpp文件
( @( [, d' Z) @7 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 K) a Y$ P9 X- S/ u3 [& m
# ?; x2 J8 {, J Estruct sItem" i! m( ~1 n5 x# t# D0 x% @& _
{
. n( c5 f4 H- U8 nDWORD dwId;
/ L* |2 O' s& Y$ ?DWORD dwKind2;) i# I: E' _; A$ v/ c8 a$ ~
DWORD dwItemId;
1 D; q6 r* O' OBYTE nIndex;0 x$ h% p5 l( U3 b1 H( t
sItem(){
2 X; S! k8 W0 S- I3 V1 f$ n. \% W1 P dwId = dwKind2 = dwItemId = nIndex = 0;
: B1 W. L" t3 h/ }6 h4 X8 G}. V# A' n% g6 L) r. e; ^
bool operator < (const sItem p2)
4 f% ~, J0 f# M" @; Z8 o+ s" E: d{0 x+ r+ j% N' h+ C
if (dwKind2 == p2.dwKind2)
6 X5 B) q& F5 C2 D9 p6 d2 k* V* M {2 E; M7 G, l( A' h4 c
return dwItemId < p2.dwItemId;
; h8 ]1 p2 N$ A7 | }else{, k+ D( ^% E. |! {2 R
return dwKind2 < p2.dwKind2;
; t3 ^) n1 ?' n5 S* ~* K }
! ^6 S2 a7 \& e6 o' u& X Q% h}7 X P% y, L8 B! W2 f, F
};& j& A# w6 n; M) p' d; }( o- d
class CInventorySort! W3 W9 L* }; ]! T- g/ F7 k
{
# @9 W/ `2 ]: a8 u+ x2 m: Spublic:
* n2 k7 z# V8 ]+ RCInventorySort()" `3 ~$ y8 I& }0 y N2 w* i
{
5 N% l7 I) s5 i m_dwPos = 0;
, b3 G$ n! N7 y9 t}
+ B& @0 v! {! g! ~* Y6 G m~CInventorySort(){}% P4 Q0 A4 Z5 I6 @
private:
# J" M0 n* w; S) l, _. HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# _4 s& K) i6 |3 }
DWORD m_dwPos;
* X( d! d# Q8 C& u7 Epublic:
- O3 }- e0 H1 w8 H9 nvoid Add(BYTE nIndex)
. D6 ^, G( o5 V% D& Z. M{, W4 a& Q! L' X G
if (m_dwPos >= MAX_INVENTORY)7 S! r, ?( k/ \/ U! j
{
, v" T4 I$ a) @: A; X9 U L) T return;( ?2 i" k9 q! x8 y- o
}! \2 r6 ~3 n' k/ V6 W D
m_Item[m_dwPos].nIndex = nIndex;
! @6 o |4 i: w$ \ Y a8 J m_Item[m_dwPos].dwId = m_dwPos;0 u9 A; Q5 {4 J; s$ H( }
m_dwPos++;
6 _( A4 q& u% k& x8 O0 G4 P/ L}
: V# u- U; f' Z7 I9 E2 mBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( o* p. u! \9 i; f5 u! ]{
2 W2 k" u8 S$ d' o2 H k for (int i=0;i<MAX_INVENTORY;i++)
, R% i$ x( m, I {" n+ i% X. J, F
if (m_Item.dwId == dwId)
+ K3 g9 a2 P" ^7 m3 n2 X, Z {1 A/ s5 o1 g2 D: I. a9 Z8 l; f$ h
return m_Item.nIndex;
' V& }# G" O( }$ [" R! ~ }+ r" c J6 o5 r3 w2 [3 d: N# L/ X$ g
}
2 t3 z* n( W" j, N return 255;
0 x2 F% M$ c- k; H+ r}
+ V+ w: j( @* | f) [3 \. L7 Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 r6 N* T& p$ }# k: N; O{8 x2 S, `( F& J/ g9 R4 R
BYTE nTmp = 0;2 q/ g) l6 Y3 d& q" m+ {# ]2 C& `
bool bDest = false,bSrc = false;: @4 ?7 `- H) g/ m5 ]
for (int i=0;i<MAX_INVENTORY;i++)
g3 E. H* D: V$ y0 l n8 f- g7 f {
4 [5 G& M# p% e) l4 e if (dwSrcId == m_Item.dwId)& j0 w- I0 Y; o
{7 m$ ?4 z+ t+ l* W; u E; f
//id相等 则 改变对应的dest和src
- |" m$ Q2 @6 ]0 c nTmp = m_Item.nIndex;* K% w. A3 K- r
m_Item.nIndex = dest;
. O( [3 g! R" `5 ]' e/ Y4 a }$ K) E: L" h7 J7 [$ F
}8 C2 p3 t) a9 H% ?5 i
//临时数据保存完毕,交换开始
7 O0 U/ ~: {" _5 }: N0 Y, ` for (int i=0;i<MAX_INVENTORY;i++)1 B0 ^1 r7 r4 Z, t
{; M) I1 a. u: K# p! r9 c
if (dest == m_Item.nIndex)+ o% M4 G* P% Y. S8 y$ N _$ x
{9 }% Z2 I+ n* ?7 U" s9 Y
//id相等 则 改变对应的dest和src1 F- ?+ _6 ?' q
m_Item.nIndex = nTmp;
2 P8 Y E; y5 z5 _! \& G } A! H+ J8 M8 X0 f
}
! s+ O2 m: y& |/ P$ _9 t% D( X}2 U e( i3 |( A. W3 T1 G
};
* v! i$ o/ b! v* B% s) K- ]-------------------------------------------------------------------------- N% m4 b [. U( T
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )+ w3 \8 X- @ U5 z
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& C" Y# v1 P5 c1 I4 Q
紧靠其上添加:, S$ P- a4 M% i/ u
if( pWndBase == &m_wndMenu )
( @# }/ D: ~1 x% a G/ Z0 h{
8 E/ f1 A7 c7 b1 \! ^1 A switch( nID )
6 Q9 }4 b' D m {
5 S' {9 `, @- t; l4 V) B case 2:* A" ]( @ B Q! w" l7 p
{
% F& U+ c! Y1 `9 ]/ l //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 r! J, O8 ]9 H& P
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
/ p# [3 h# L6 I, ^1 J- A @ {) I. S9 @. S; K S8 _
break;7 ] ?# _" R) s3 \( N: F0 o8 n7 {1 J
}: p1 W0 `- t0 I$ @1 Y( C3 r4 x
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 r% f5 r3 l1 Q# d {
# v* g2 x3 n" a/ K CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' B9 g; J3 P& c& J8 Q4 M if( !pItemElem )
4 I- d6 H1 F: D; I continue;- x+ N% i( C* b# X+ W7 Q
if(pItemElem->GetExtra() > 0)% J2 G1 V1 ]4 y$ Q3 Y5 _
continue;- @; ^9 r6 U% m, K
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 l3 i+ ?; o! d3 @6 @& U- Y, r
continue;
8 G/ I( I- J7 |* A: T8 ~ if( g_pPlayer->IsUsing( pItemElem ) )
3 W0 j+ t# w" s+ P* A s; W continue;9 F" y; a) _" ]# ] A
if( pItemElem->IsUndestructable() == TRUE )+ v: G/ y! K) x" \$ c
{! w0 \- f0 _1 {# z1 {& m. y; b0 M
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* @' ^* _; n, b
continue;( U) f4 Z# N" o: s
}
2 W# o: e& l+ Y g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
) y- |9 z2 v8 u7 S' q* _ }
+ L7 E2 E ]$ F+ \ break;. K: p* W* b. Q1 G& t
}
E* f$ P1 R2 ]3 D+ w case 1:; k* @% v7 `8 N* K! Z% \* r
{$ s5 e5 E U* F/ I/ w
//整理背包 U" {9 `. O" h m9 e
//////////////////////////////////////////////////////////////////////////9 f5 t& K! ~3 J @$ n
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 ?7 y# \# C0 Z3 n //////////////////////////////////////////////////////////////////////////
i/ h. F! I9 A, c; o" K //////////////////////////////////////////////////////////////////////////
% o9 h% j' k, u1 J, N CInventorySort* pInvSort = new CInventorySort;
5 R9 e" S& z4 w1 W1 ^5 j6 H vector <sItem> vItem;. Q4 `2 i" k3 l3 j8 K5 s
vItem.resize(MAX_INVENTORY);//初始化大小: V, v: ~0 }% U
//////////////////////////////////////////////////////////////////////////' y3 F. D6 r0 h5 A/ u) w2 ~% y
//填充数据" Z6 h& a5 G' F. f l; E- v
for (int i=0;i<MAX_INVENTORY;i++)
% T# L, v+ Z& i# [3 @5 g. c {
: B5 y& `/ b) T- |% D, t CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* C2 Q, v% s1 L } if (!pItemElem). l4 H" T! p+ a9 x1 V- T
{
4 X# f4 o7 M" E: ?" K, a B vItem.dwKind2 = 0xffffffff;! _, w; Z; [# k0 Q! U/ k7 i
vItem.dwItemId = 0xffffffff;. j) A! [# g8 Q# I5 d1 H/ O# H
vItem.nIndex = i;% L" n" u. n* j' { C7 f; i$ @
}else {8 j8 {( ]9 ]. U
ItemProp* pProp = pItemElem->GetProp();6 K% g7 ^, B5 U4 h G8 V+ C
vItem.dwKind2 = pProp->dwItemKind2;
8 J3 ?/ q+ O& H7 H/ i7 ~ L- p vItem.dwItemId = pItemElem->m_dwItemId;
) ~" I$ [; h0 Y- G0 U; H, M& K vItem.nIndex = i;
; X# Z* m; Z& D }
# F, R7 B! Z; S! r3 \5 R //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 J% J6 _) x1 ]
}: \, X1 r' e) ?2 }. ^9 O; ` B
//////////////////////////////////////////////////////////////////////////
0 b; y+ Z; R- w4 o sort(vItem.begin(),vItem.end());//排序
5 k, B( m" @! Q //////////////////////////////////////////////////////////////////////////
, V+ z! e" b3 k* U& K* z2 X //交换
* E# V* J |/ z6 @ for (size_t i=0;i<vItem.size();i++)1 F+ r0 I( Y* a x# I" q
{/ a) k; \* ]2 W7 L+ M
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* c w! c5 `( p( k. \. c% X2 w/ { pInvSort->Add(vItem.nIndex);
6 R6 ^1 O# k1 J3 A }
6 _8 X- k! s2 z+ [/ j1 o0 { BYTE nDestPos = 0;+ h) \$ E- R q8 y- [5 u
for (int i=0;i<MAX_INVENTORY;i++)
9 u; _& d! C6 t. n0 H& h. J {* I7 g2 A5 w# c T1 R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* a/ Z' c9 o) s* Z& m+ m if (pItemElem)
% S9 w9 l; U/ f {# J- q8 F. X9 p, o! c4 N4 j8 k
if (IsUsingItem(pItemElem))/ c+ `, b3 I; Z1 c% B
{' g% o/ ?2 X. q0 [+ I, t' h/ t
//这个位置无法放) F3 r4 [; H8 D$ S0 {5 [
nDestPos++;
. B7 I9 s6 S( H0 a9 q! B }4 g2 M3 Q3 L* x% |2 A
}
/ l3 V. ], I# G7 I8 p5 T* w BYTE nSrc = pInvSort->GetItemSrc(i);6 b" w( c4 s& o3 i. |8 v0 Y" j
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# q8 ^0 b6 U# g% O" S* z: t* Q if (pItemElem)
# }$ ?; d. S; J9 [) n {
3 T/ x' Q+ v- R+ C* i4 o if (IsUsingItem(pItemElem))6 x5 E# _) k' G3 T; T J
{7 t* d: R* i1 l1 ^! Q5 T
//这个道具无法移动,跳过
& w5 X1 l9 Z$ T0 o4 m1 J continue;
7 G3 ?) R1 U7 z0 { }
# j1 m) _4 N6 {: R$ z }else{
9 m$ C3 a3 p& W- Z4 U* G' E //空位置 不用动
) _: T( t% B( V+ y ^% \ continue;- M7 X5 P1 A& x, u
}
/ @7 ?. `$ A) ] //////////////////////////////////////////////////////////////////////////
' H6 o) I- Q8 E( z //开始移动6 Q. \- e/ G+ v3 K8 j9 I
if (nSrc == nDestPos)4 z5 a4 L3 o) M4 `
{3 h# z& _2 K9 ]" d
//原地不动; f- z2 o% d: F, X4 x# v( ]
nDestPos++;
7 h8 Y- _' h' s2 ?: {& C! B# b6 r4 e% t continue;
) ?% t2 n( F% O5 s( V' n }0 Q4 Y3 Q3 \: e8 h8 \$ x
pInvSort->MoveItem(i,nDestPos);- _6 D5 T) P# [" O1 r9 e
g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 q4 r- g2 }: k) K4 u% V
Sleep(5);! j& F: W I% Q2 E m& @
//Error("移动 - %d->%d",nSrc,nDestPos);
1 W& q8 t& u7 q [( M3 E- ]- E nDestPos++;
9 t" r8 F1 m. H3 o }
0 a" _6 M1 ]3 T3 C! H7 u2 }: b //取第一个元素的信息
6 g2 ? ]1 F% B" n9 j$ b /*5 A8 {, f6 Y% F+ ]5 S
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 W8 W; t* s i7 F+ R$ I! R {
: n3 u/ B2 |) |" k Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: ?% S {( e% z! z3 ] g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 H) B0 u0 A; `" M
}
9 n$ Y! F( {; f4 Y2 |3 ^ */
9 u' E2 R* Y+ k: y //////////////////////////////////////////////////////////////////////////
* X$ X5 H9 r2 ^' f" e. R break;3 F( \1 i0 V' F3 h2 D
}
( D: U8 g( N* T! r& d6 N& ^( T } 5 C$ ^$ f/ o. s% h8 V; s! v
}; [/ O1 X8 l9 `3 I ?2 x
m_wndMenu.SetVisible(FALSE);
" S" V% r4 k6 Z$ f$ E( @+ G, j- q* M& g4 u
--------------------------------------------------------------------------------------------------------
2 H0 c2 t5 x9 J" f; ?搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; [: i6 u0 ^2 T{# A. Q2 A2 u7 q9 F
BaseMouseCursor();: @: l2 h+ l2 Z, S
}
9 j: s0 ^3 J: l+ Q0 W- {$ I% U在其下添加:
, N0 d" V6 L) K% t$ U# Bvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
s6 L9 b6 ~9 f' S# W{
/ ` P6 C2 H% |7 X5 rm_wndMenu.DeleteAllMenu();
0 V6 l3 \5 L _/ @9 ym_wndMenu.CreateMenu(this);' l0 ]/ ~4 z' Z/ ^7 ?1 @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
' i1 m/ e: ^; R7 b/ ~3 u
1 a& y# d9 Z" b# P' {, R; ]if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( e3 S9 y6 j7 K3 q+ V. _{9 T6 m1 \+ d* _* [' ^3 E4 l
//P以上级别才可以删除所有道具4 C& W6 C7 d& k _ `- Z
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# s8 B! U3 p' c; J
}4 H$ Q) U; r, D9 F- k3 e1 }/ X
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ Y. A- F6 m! {+ `7 L7 N- z# W
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' m2 e9 o9 ]7 _- `- a! ]. r
m_wndMenu.SetFocus();
; O g* O) j, a2 t2 m3 W}% j2 u/ ^! q/ f
------------------------------------------------------------------------------------------------------------- H: x# P% b/ I6 A
*************************- p, ]3 q3 z) c8 M$ b- z
WndField.h文件
% `, r$ ^4 [; {- b4 e*************************
+ w- T) Y, y% d: [, u( Q. U搜索:BOOL m_bReport;- G) P- ^4 m6 J: y* x* o! C- ^9 k
其后添加:, D. j! I8 R9 \1 m2 l
CWndMenu m_wndMenu;) D+ X% ?9 T% T: y7 e d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- A2 o- c2 t: @& P) q0 b; o其后添加:
( t7 X2 A4 h6 Y' C5 Cvirtual void OnRButtonUp(UINT nFlags, CPoint point);
y; C& \. p4 m7 K
& |& j7 w) r+ {9 t% X1 ~& I; X
1 e! j7 X+ K5 B) n |
|