|
源文件中_Interface文件夹下WndField.cpp文件. z k& S+ L9 w" t* p- m
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 N0 N ]: l4 ^$ x3 A& q" C) |# c8 Y1 B) s& b: w% [
struct sItem) q. \6 A% q5 w( c3 i/ Q' Z6 n
{ D) J i: i% F6 Q( F1 m
DWORD dwId;
& B% M! }6 b) L* wDWORD dwKind2;! L4 @6 U. `8 Y; K1 j% |
DWORD dwItemId;
d% A$ k$ i; G9 u' ^: A& VBYTE nIndex;4 l9 l3 x+ O- n: ^
sItem(){
6 P* O0 v; l- T' ~: D& ^. z: ?% V dwId = dwKind2 = dwItemId = nIndex = 0;3 @6 u2 x% H/ c5 T/ A0 _0 Z
}
& V9 @, B% h: f0 W& L* b6 a O a! }bool operator < (const sItem p2)
V, p% V" F# |/ Z9 P, {{! M4 p; c9 p% U7 I9 q5 X
if (dwKind2 == p2.dwKind2)5 Y+ Z1 u) P, o7 i; J" C
{& s3 B, ^( v' I) ]
return dwItemId < p2.dwItemId;
, b0 d4 c, e/ A# N }else{7 H! ]: j+ q( k% e# x. \
return dwKind2 < p2.dwKind2;! X& ]3 h9 D" W- V: w0 i& Z" \
}6 i) K% n$ Z( P) A+ ]! B5 c4 Q
}. I: V" [, t# a; i# Z7 w
};
, Z/ c/ F; P& Zclass CInventorySort( [4 T) U5 A+ s3 i0 d
{/ V5 |, L2 `* v
public:- K7 l( N' d1 ?& i
CInventorySort()% Y$ A! z5 f6 P4 |# u0 E
{
! W, [, h/ s/ J5 v( g& c! e7 M m_dwPos = 0;
0 E; h$ P* L f% s4 r6 ^0 S) H1 A9 ?6 P}
1 o$ d$ b) T) d8 F6 D~CInventorySort(){}. c! y( E' b# c" R' H9 N9 w
private:& X7 |/ ]# }3 r9 [( p8 M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( @6 }4 `. {& @9 @4 E/ E, w# V" Z
DWORD m_dwPos;
+ a$ c/ g$ ?/ Z4 q9 k; ypublic:
* l2 T# l1 i. b% b3 D- @+ _void Add(BYTE nIndex)" ]. x' C% Z1 v" e6 v" V4 `, J: Z" {: W
{
, K% @6 Y; o, I3 s% k9 w if (m_dwPos >= MAX_INVENTORY)% i* G( l' ~1 |3 K: @5 d
{
+ m1 m$ s+ L$ Z/ R- O+ e return;
8 W& D8 G p5 K6 a- N$ R2 h }
) @. V K* d% }) a m_Item[m_dwPos].nIndex = nIndex;2 N% v) }0 |8 b& n+ Y: f
m_Item[m_dwPos].dwId = m_dwPos;/ _0 o8 D' ^: \' t' ~5 @6 j
m_dwPos++;! n4 k4 o6 N" P
}
) {1 T f' L$ A+ r% d& ^BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
: N3 H" P: O1 ]9 F, G2 n7 V7 U! Q$ I{0 H0 D0 x5 R; W" O& A% Y# d% _
for (int i=0;i<MAX_INVENTORY;i++)
/ V, y) J1 g8 J8 \+ J3 Z5 m: `9 c {
" ]+ O+ Q/ j4 _+ H0 o' o4 Y if (m_Item.dwId == dwId)9 k& h; v | Z! I3 O) K# r
{7 o- I! i* O ]" _6 R
return m_Item.nIndex;: e; Q3 W3 }" G4 G( y1 l
}4 V- x; P' ?4 M' `4 {
}& ^8 k+ y) _' [
return 255;
$ ^* O6 n7 R' ~/ g7 v}
# l! c" l8 A- {, k7 O% z8 dvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ Q' R& N, ~" {: r. h) ?{
y4 Q" e" `/ F) i1 D BYTE nTmp = 0;
0 j9 V1 _7 c8 D( Z5 p- B# I bool bDest = false,bSrc = false;- @7 q+ n- K) n0 y" a0 x- W; k
for (int i=0;i<MAX_INVENTORY;i++)
! D$ G# s: H2 t% R( Y0 h% O b" i2 l {3 {9 l; r i$ S
if (dwSrcId == m_Item.dwId)
, `+ @. O9 f |7 f {
4 G* m. l! j, G$ @ //id相等 则 改变对应的dest和src! h; @. F* s' j7 x. W) U1 t
nTmp = m_Item.nIndex;
' Y+ w0 ^4 `. N2 c; `" Z* V- N5 Y m_Item.nIndex = dest;; }. O! A! d2 f$ n5 ?
}$ M6 R7 X$ e5 Q/ w
}
! a$ E1 V% {' i //临时数据保存完毕,交换开始
0 X Q; a8 |' F" A9 o6 v for (int i=0;i<MAX_INVENTORY;i++)* e; s% T! ~4 S/ j o. o
{
# F) W. v2 D! L if (dest == m_Item.nIndex)
4 b: e+ o# o3 B- j w9 Y; ]4 M {
( D; C, X: p3 s' c2 \# o9 m //id相等 则 改变对应的dest和src+ C& k% s1 w" |, b
m_Item.nIndex = nTmp;
6 r) H$ N3 B S2 g3 z, _! V }
3 i! b8 @" N* C/ `; b }3 H- B; U: m5 M* ~; Z7 B% D
}- T9 i d5 k( q) u+ {
};+ d9 U2 ]% T* K. g1 k v
-------------------------------------------------------------------------, A, x V/ D# h+ v# a
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 d; t1 v: N. x1 B搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 ?6 ]% q+ M( o1 O: M3 l" S6 n紧靠其上添加:
8 {: U I( F: y4 w- a. lif( pWndBase == &m_wndMenu )+ M% ` s5 I. [ u. T; y5 D: x
{
- Y. K- v& V: ?. X/ C% w switch( nID )4 q. S* t; { ?( y! N
{0 w8 t" L' k% L- Y) F$ @! n9 R9 }
case 2:
! q9 h. p" G/ P {
4 s( C* k( t0 a' c //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 o4 e+ I* s6 Z: C: b
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)). ~2 A2 C2 p) U% o; q( \6 h) [; o! h
{
. R# M5 z/ e, \( Z+ f break;
& G" h) e2 i( e' c ], E }
" n8 B6 d# C {" w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" m3 r5 q2 I) y) m; ]) R" d7 ]
{
$ g! ^' p6 V1 K; ?% m7 i CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! \# z/ F: \$ G) K8 }6 [4 O
if( !pItemElem )
+ w0 p! x6 G6 B; _" P continue;
' c$ e+ A( ?8 D; z8 u( U, z if(pItemElem->GetExtra() > 0)
$ _+ w4 P5 O6 k# n5 y8 h9 D continue;8 T' n$ H! d# E- ?! J
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! K) v/ g" \2 Z% {( b' D continue;3 `5 W7 t5 j% F; P* f
if( g_pPlayer->IsUsing( pItemElem ) )# R/ s( h! g" j' W) ]* P
continue;! ] Y+ a4 Y5 s U- B: g
if( pItemElem->IsUndestructable() == TRUE )
3 ]: Q# N" w( q" V; L9 g {
' o w* e8 b7 ?' D, { o* U g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 }; [" |9 M# j& A2 @$ M7 ^; e continue;
C% k8 [7 }; [: g' d' t }
# |+ V" V, U4 @) H: K0 B g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' j Q8 `2 q+ H9 J% k }
4 k& U5 _! l, M break;: z# }. g/ a3 H9 k1 M$ N
}
, [1 [/ O+ ^) z) K9 H& b case 1:; F/ n7 _0 I+ Z9 N( J, |" `
{. k: M' V. r- E$ Y& _
//整理背包
2 }2 I9 T; Z. ?9 G, [% N //////////////////////////////////////////////////////////////////////////
3 y& ^0 P9 C. ?# e' M _3 { //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 h" X- I% t4 k) M" Y7 s //////////////////////////////////////////////////////////////////////////6 d p+ S; W, G4 k6 u
//////////////////////////////////////////////////////////////////////////
1 j2 H* W* X" z CInventorySort* pInvSort = new CInventorySort;' j# O8 K( {' g2 S+ K/ Z8 W
vector <sItem> vItem;
^- ]2 o7 G2 P } vItem.resize(MAX_INVENTORY);//初始化大小
* b& v! E+ d# i6 l //////////////////////////////////////////////////////////////////////////2 L9 p0 y& N% f' S# a5 {0 E
//填充数据; E9 }6 X+ l x8 p
for (int i=0;i<MAX_INVENTORY;i++)
/ O: ~# h5 o7 l7 Y" C6 e2 S {
_7 L* g# D1 Q- I CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! p8 \+ N$ Z5 ]/ v if (!pItemElem), C6 J) @- R! H9 [4 J/ c2 m
{
9 U n3 w9 s. y- {' D vItem.dwKind2 = 0xffffffff;
8 i9 s6 J- k$ K$ c/ \5 Y0 B0 ^! L vItem.dwItemId = 0xffffffff;- n9 L2 {( v8 }# P: G9 Q. P
vItem.nIndex = i;3 ]1 ~8 w3 Y o% ^, e
}else {
0 H) v7 m9 e# A ItemProp* pProp = pItemElem->GetProp();) l: u& J' _2 t8 E/ S
vItem.dwKind2 = pProp->dwItemKind2;
X3 d1 o0 L. P6 m vItem.dwItemId = pItemElem->m_dwItemId;
* Y; x) o- _. B# I: T8 _ vItem.nIndex = i;2 l9 c2 z X. l# S) k1 \$ G1 H
}# ]1 W( E$ @. v- f5 h0 ^" D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# ^/ @7 [9 Y- l( p, }; u
}
/ ^9 Y8 a7 R/ n$ h% G //////////////////////////////////////////////////////////////////////////; q/ g; O. i V# O, U: V
sort(vItem.begin(),vItem.end());//排序3 s% r. \$ G. }$ g" ^
//////////////////////////////////////////////////////////////////////////
( y7 j, l$ ]# R" H) j+ Y //交换9 Y) F& d1 F5 u2 @0 {2 j
for (size_t i=0;i<vItem.size();i++)/ Z, L; o3 h4 P; M3 O; f
{
8 \4 ~% i( I* L- O //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 Z. T1 e1 p) d" A9 e8 i pInvSort->Add(vItem.nIndex);
+ Z" E. X8 ]8 l }3 T8 Z& j7 y) @* X! g* o9 w2 h
BYTE nDestPos = 0;3 D) o# Y$ ~5 Y8 X8 \% D7 U; v
for (int i=0;i<MAX_INVENTORY;i++)& Z l# w; r* P, S& [
{- L* r9 S1 x( x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
0 P* [2 m0 ?6 n9 ~9 m- G5 l if (pItemElem): H4 E- E# a9 K+ w" T
{
* h5 l6 }/ R# Y& x J3 J' i9 Z if (IsUsingItem(pItemElem))
% Y6 Q2 B/ R" W/ q {
, N( [2 A b: j# r6 |" a/ K! i; q //这个位置无法放
- P7 U$ \. J* s, _. l3 }$ ` nDestPos++;
* u2 Q/ g7 T8 G+ ]8 W ? }$ x8 k' H- m! G- W6 t
}) x( `! b/ X8 M
BYTE nSrc = pInvSort->GetItemSrc(i);+ W- r7 V! G! F4 T
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% ?$ E, d+ e g! N" ~3 Z" ?6 c
if (pItemElem)' ?0 C2 L) g V z) d/ y, r' N) x
{
" R+ W! [9 u+ {/ T) m4 [8 L if (IsUsingItem(pItemElem))6 P$ V, ~$ R4 Z0 i' {; M
{- E+ ?/ N. F. d; ]" k4 _
//这个道具无法移动,跳过" T# r! C* ~' Z" x
continue;
: e0 z& W) ]( N4 f& p- O }
" B! R5 b: u5 z" ?( \& y6 E# I }else{& X% I, u/ t) G. H/ M3 J7 Z- {6 q% ~
//空位置 不用动7 l- J8 I9 ]2 N
continue;
1 K( x) D% ?) ` }
3 }/ K$ \) G* a: k$ v, W9 f; l' K //////////////////////////////////////////////////////////////////////////
1 V5 E! ?; ^( f& V //开始移动* {6 }% `; I; z
if (nSrc == nDestPos)
3 X$ g7 q& A- ]4 E+ h {
6 L) z8 \# N% ~& D0 [ //原地不动
, X' Z% c$ W. |' J9 i, r ^ nDestPos++;
" `' y- J0 i: p0 K$ V continue;6 y$ z" z7 i/ e, z$ a
}
3 @ T( O1 }2 q* Q0 g' ^3 K pInvSort->MoveItem(i,nDestPos);8 T' p1 k4 M! C
g_DPlay.SendMoveItem(0,nSrc,nDestPos);5 H. }8 W2 y; m
Sleep(5);
) i1 j) h6 @" p0 m3 `/ V //Error("移动 - %d->%d",nSrc,nDestPos);
' \8 j# r$ D8 u' E nDestPos++;
; D5 U8 e" N! u }1 }2 c5 T/ l& R8 u8 i
//取第一个元素的信息, g9 l* A) z! ~5 c1 u" u* W
/*
( o8 |0 ` _: s0 w/ h& F if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; T& v/ H* D5 s! ` _; o, X {
7 f' e4 i$ {8 H0 S, @/ B Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 s% E9 Q3 @0 ^. x
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; i3 O; Z, K. ^+ _ }$ R) w7 h- M" _ O0 |6 m8 P
*/& h+ f' E4 K2 X; s7 k. }
//////////////////////////////////////////////////////////////////////////3 A; R! q$ f; Y) X& \
break;
2 g0 J8 v! t& v! I }
\% x w# d( `8 B( B } / g5 D! G* {7 E( M' p! }! Z: R
}
; l# I- k- ]2 j8 a% B( J# Bm_wndMenu.SetVisible(FALSE);* _! d# T, W$ n& e
, L V2 Q6 S: N/ u
--------------------------------------------------------------------------------------------------------
" C) f4 [& X o( u% q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ e7 X) X ^1 h- H% ?{$ v) g0 F' G0 o: ?' s
BaseMouseCursor();
; _6 x/ ]( J) z/ N}" P1 f2 S. g4 d2 T- S: q: ~
在其下添加:. \# D9 e& G' j& I7 H5 ~8 ^
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ p4 a% U# k% g6 j* b{/ ^/ |- ?; g# v% J$ y( j) x
m_wndMenu.DeleteAllMenu();
4 ?4 m8 {( z6 `; B( a" bm_wndMenu.CreateMenu(this);" a; n: Y$ P9 P7 d$ ~! L
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");& e2 D! H0 x3 |( J$ G; @+ Y
* a2 o$ B6 k6 f7 s8 @if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) y O4 ?$ A/ o5 ]) c1 r7 v. w! ^
{
0 ]! s" _8 _0 [) ]' f. o //P以上级别才可以删除所有道具
2 ~6 ]2 q1 o; E! i: l" V3 ` P m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 ?9 t, V: O6 T& L}
$ {9 i4 s: {# ^5 w5 Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 E9 J+ t4 g1 Z. h' nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );, r! K; c/ Z; x/ W( \
m_wndMenu.SetFocus();: B3 I L3 j7 i( W p/ L
}
6 E( |; O4 O& t8 X& c* P------------------------------------------------------------------------------------------------------------1 r. z& q6 b& L( J7 v1 y
*************************& n' J+ r+ d+ L: {: |% {; `, u
WndField.h文件; w/ _) o& s# F4 `/ z' d
*************************8 y2 y3 ?5 B0 n" U8 \0 a) ]
搜索:BOOL m_bReport;
6 ]* N5 A3 G5 {4 w' R其后添加:
! {- e# O( U( Y- j" _CWndMenu m_wndMenu;
X" C' e( }; [% t4 n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ t, x, I/ h* `% y其后添加:) E& O& W+ z& t" a
virtual void OnRButtonUp(UINT nFlags, CPoint point);' e* y& C) u% d
, @% d v* O* J* H" N2 O0 d7 D3 K
5 T3 \% {3 W) i5 n& F |
|