|
|
源文件中_Interface文件夹下WndField.cpp文件# V) E: W+ F- i! `, Z3 Y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), Y a, U* i# v# {' Q0 J/ K
5 z, p7 ?, U& G& h+ }& r/ s- c$ dstruct sItem
: A) Y. V6 p4 k( i$ w{
$ N" E# t+ t( P" x0 h: bDWORD dwId;
+ n9 m5 t( r9 G; v/ T% yDWORD dwKind2;
: A: Z4 o3 t4 f7 mDWORD dwItemId;, F; Q3 ~! S2 G# L1 v5 b
BYTE nIndex;: C1 q1 F: ~7 W( h9 v8 p( b
sItem(){
6 R, ]0 n1 N0 d# I+ B P dwId = dwKind2 = dwItemId = nIndex = 0;
% L% j& \$ Y) @, @}1 n6 I `0 X8 w5 M6 z: d+ _+ K- v
bool operator < (const sItem p2)1 Y/ @$ I4 Y$ D9 I7 U
{. m* i5 e* j$ D( B2 b
if (dwKind2 == p2.dwKind2)+ l) L0 N. `) d; W2 ^
{& V. R+ m2 b1 F$ {; _ f
return dwItemId < p2.dwItemId;3 g2 a w, P" B" [' p
}else{: ^ g7 B. ~8 e, y5 o
return dwKind2 < p2.dwKind2;
9 X9 q; N% K* _$ a }
# w- b+ U0 r$ @) n: i1 L' h- A! v" R}
. x; k m6 q! ?- z};
. y% o1 C$ w( d) [, X/ W' Sclass CInventorySort
# w) z2 m3 U6 F3 W& o% D/ z{
4 \8 h, Y5 F! epublic:& p9 u3 [; F/ Q! `3 h0 Q! D
CInventorySort(). f0 i3 E2 S, l* |' p0 J5 A/ y% R9 g
{+ ]! R2 {8 v+ V- s& R5 x; L6 I
m_dwPos = 0;) v* ]& \: f' O+ u. i
}
) @0 ?5 c" C, N1 h* ^, I~CInventorySort(){}
+ Y9 Z, d& W, tprivate:5 J# q5 Z) W- t
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 `) k4 z! q5 L" EDWORD m_dwPos;3 W& R; m% `7 B; ^- p* i7 B/ R' d
public:) f0 Z' q/ H" w6 ]" k0 ~
void Add(BYTE nIndex)
/ u7 Z$ i1 K- a; C7 ~{- D4 \8 b: j ?+ J h3 k4 s7 }
if (m_dwPos >= MAX_INVENTORY); c! q1 R! f9 y, s8 n) ~
{# t1 Z" Z/ T$ e% Q# ~ ?" u
return;1 V% `) C% w7 C4 O4 s
}) S7 v" G n, |) O1 w
m_Item[m_dwPos].nIndex = nIndex;7 W/ z) g! u3 @. O, R
m_Item[m_dwPos].dwId = m_dwPos;% V% i G& l: U& K
m_dwPos++;2 w9 F* n5 }4 {# k3 n) |( E. s7 I P
}
, D g. u8 @5 SBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列/ N ]" B; G" P9 }; B) d& p2 y/ S
{
, [7 N& G' u5 O7 }- @" V/ d for (int i=0;i<MAX_INVENTORY;i++)7 y, e; g' U* U0 F
{
. _4 D* S, h" d! T+ n if (m_Item.dwId == dwId)
9 T9 Q2 E1 @ S: h' S+ z0 U {# ~& h# z3 i2 T: m' G5 Z- u* o; @
return m_Item.nIndex;
, w, o; A' i( [) t }
2 x9 w7 b, h1 H1 H* d8 o }
! |7 M) B7 W. e7 Z return 255;
) {5 Y2 x6 Z4 f+ X7 m# |}
3 A/ E0 @: O# {void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
2 U/ H" e% A1 s3 `: S* z' j{6 f. y o' q5 D7 v
BYTE nTmp = 0;" C, A$ h$ T% H# V- Q
bool bDest = false,bSrc = false;0 K! d' K4 h! U' ?
for (int i=0;i<MAX_INVENTORY;i++)
5 O0 w1 [) I. P1 k {
a: o5 w9 f. i2 {# K, m W if (dwSrcId == m_Item.dwId)
; F" @4 L3 e! `: \' S- d3 F( R {' @4 r, k2 W$ }/ _4 S5 \9 W) `& a
//id相等 则 改变对应的dest和src
$ Q1 T$ ?8 j, F3 k; i% r- J nTmp = m_Item.nIndex;
) \( `( d7 }7 z7 w m_Item.nIndex = dest;- E/ u; [- u0 s: Z' U
}
1 j' U1 b0 R K( `$ \7 q }, q5 V6 P: D8 @% P# @) m
//临时数据保存完毕,交换开始
8 ~5 Q/ J( ]8 n for (int i=0;i<MAX_INVENTORY;i++)
? r% g; [$ f% c! v- v {
5 S: U7 U& V7 m% u! ^$ R if (dest == m_Item.nIndex)2 h+ t) N$ J5 n9 E! b
{
) C/ L/ V' r- ? //id相等 则 改变对应的dest和src+ i# k: B4 w( `, Y/ ^: i9 g
m_Item.nIndex = nTmp;, r. I E9 ]; G
}# S8 q ]. _# g% w: u7 }8 L
}
" |5 c2 C& I4 K1 _- b% N}
! w! o l/ c& [0 R& l};# E/ z" I( g9 c$ `: g
-------------------------------------------------------------------------
4 \' D# P S# D. K5 Y依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )( K7 A2 Y- j$ B% ~) w# j5 u
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);; j8 s2 f* C* W3 v5 G
紧靠其上添加:
( ~$ V: O# d1 O3 n9 o+ zif( pWndBase == &m_wndMenu )
& A8 e7 a* R0 T) Q' l( x{' [ `! \+ d: i: [/ U
switch( nID ). H% x- a; w: k
{% m* @7 @- u, M& ^9 p
case 2:
* c' f1 I- N3 d V0 q {
$ x, Y' g. z, I //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; k9 i7 a2 P5 b4 i! g5 F
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 m% n6 J! k7 w7 a }& |( H& W {
1 N9 f, g+ H% C* o break;
, a5 [ l' Z; L- E! v& R }
2 ~ n. n+ q: q/ c N( j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 N+ F% ~* z3 w* H) E/ n, A {- y& l* h. j& H! K; }
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 O* ^& I$ k8 h) W4 Z1 @ if( !pItemElem )6 d% `. E# v6 B/ R" f, N {' g
continue;
& k& I/ N5 s3 e8 r9 m if(pItemElem->GetExtra() > 0)8 `5 {4 R+ |5 [% r5 E9 T
continue;
% N; w6 K ?3 b9 u if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 2 D5 F& Q3 F4 j% p3 _9 f) v+ T
continue;
: R' z+ ~9 x2 I9 M0 ]! [$ @ if( g_pPlayer->IsUsing( pItemElem ) )
/ t' z1 W, g/ T4 y( F continue;2 |' i- |* {1 R* s
if( pItemElem->IsUndestructable() == TRUE )
) @9 G) R% @+ n! I8 T0 Z( J% T {
/ A% E) E( n" k1 ` g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" Z, U5 h2 ]" ^
continue;) U- q8 C- ~3 a" V. K/ o
}
2 J2 c7 g; l1 v) x2 l g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);, ?, {. Z# S3 o. U
}5 k$ y: G+ C0 z) ]5 A* e0 I
break;
1 I* z0 k5 g7 d8 ?* s* q }
' ^) V# s5 C, }. t( d1 G4 |2 y3 N case 1:+ ~: j% O$ s: n' b
{% N$ |( f% N1 x7 t) e0 T: s9 Q0 `7 q
//整理背包
8 ~, z5 P* F( A" ?6 z3 C, y) ~: h1 { //////////////////////////////////////////////////////////////////////////
7 H: s$ q; _& y8 M: g3 |& w! _- j //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );( V, L" |# z/ c0 i7 |
//////////////////////////////////////////////////////////////////////////
' G I% S0 \+ M+ G7 L+ l //////////////////////////////////////////////////////////////////////////
) w% B5 y0 [! g4 ^0 J6 x H CInventorySort* pInvSort = new CInventorySort;
# m, [) N/ l% b% h" { vector <sItem> vItem;. @- m$ p$ R5 T* K1 v6 S" ]
vItem.resize(MAX_INVENTORY);//初始化大小3 Z3 _7 O+ T' m' {' Q
//////////////////////////////////////////////////////////////////////////
' C, b5 K G0 u6 j% ` t //填充数据
: Y( C; o$ H% e; f for (int i=0;i<MAX_INVENTORY;i++)
. C) b: w# W7 C {1 y' e) Y Q9 T/ d6 L
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 f/ r* c* K8 g/ I+ I( e5 J$ Q2 V if (!pItemElem)
( w; Q y$ I3 j0 {2 a5 T! G/ ?; K% s {" D$ [$ W; k: J/ l0 r4 w- _/ I
vItem.dwKind2 = 0xffffffff;' [6 n. a# W. p5 z' d
vItem.dwItemId = 0xffffffff;
/ J2 Y$ b7 S" Z0 j vItem.nIndex = i;
( _+ _. N8 c5 @3 n: C5 t" E2 a" r# x# B }else {/ N$ i' I% N6 @& s
ItemProp* pProp = pItemElem->GetProp();9 @ j8 v3 S6 r* p0 O4 N# e
vItem.dwKind2 = pProp->dwItemKind2;7 c, t6 _+ A$ b# s
vItem.dwItemId = pItemElem->m_dwItemId;
: a/ ?7 F9 | R3 N6 s" f vItem.nIndex = i;
" x! L$ B7 M: l! V0 @) N# h }
: `/ e( N9 F! ~+ @: U& z //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' j* q6 M5 K1 m- ^2 I$ K, h
}/ |5 D2 c3 t! x5 U
//////////////////////////////////////////////////////////////////////////9 a9 k4 }) _) i0 A5 o( {
sort(vItem.begin(),vItem.end());//排序. N: V0 \% K5 R& ]; F2 M
//////////////////////////////////////////////////////////////////////////
4 Q: k1 y# p N. Z6 |! Z; U1 K //交换
& W6 e1 }3 L+ X) k7 p for (size_t i=0;i<vItem.size();i++) W% s# ?- `9 I/ n/ H0 j
{9 R5 g" g; C I6 V3 M; w* O' r
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 R* X. I& r5 z! z) D+ h1 [
pInvSort->Add(vItem.nIndex);
4 ]" {5 x5 Y$ ]; D }
+ q: {( b# d0 \2 L; E BYTE nDestPos = 0;
; q+ |: F- Q' C* w for (int i=0;i<MAX_INVENTORY;i++)- Z% J7 r: I4 ~0 g M
{& n3 V3 o/ n. p- ?% G( A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: [7 x# Q. f( @9 k if (pItemElem)7 p' Q3 D4 S" m$ S; U/ f/ G) s8 I
{: K6 a1 ]( R& k g5 s' \/ a
if (IsUsingItem(pItemElem)): H8 A+ e% x% a
{1 p. q6 A# L+ j2 F
//这个位置无法放 \; c* T5 E2 }5 A/ E/ G: [
nDestPos++;( X% i& t9 o: P7 m5 A
}
) \3 Z& z: s* o7 E3 h8 R }! ]: Z1 ~3 U( [ w( G" D
BYTE nSrc = pInvSort->GetItemSrc(i);
! s( T, {# w! i+ U pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' `3 Z1 v3 p/ b# r* i
if (pItemElem)
1 Q M1 _7 b) d {8 r' \7 \( Z$ K& x! N0 H3 s3 s- w
if (IsUsingItem(pItemElem))
! A- t8 q, Y: ]" v% y7 H. H+ Y/ i {. O0 n6 ~, O- T1 H R' K) _
//这个道具无法移动,跳过' W9 _3 V5 F1 @; D6 ]* z
continue;
& ^, T9 ]1 `' ]1 D }) l y" i) b' s5 y9 ~$ [) H
}else{, C5 v% B' k) p' R+ o8 C
//空位置 不用动) \" I9 d; D5 l3 v
continue;
: d4 f9 f; x4 i) A# J& n }
6 R' s$ k! E7 S* H$ K9 c( `/ A9 N3 } //////////////////////////////////////////////////////////////////////////
2 B6 `4 s3 R- B* @% n# D( m" ^ //开始移动9 |! d& ~, j. v! I) ?; W f: ~
if (nSrc == nDestPos)
5 T0 }* Q n- v7 X {8 Y5 L1 ~* S _4 T' l
//原地不动/ y1 }6 ^" i( f; ]1 Q. l9 U9 L1 X- @
nDestPos++;
. L' A2 ?: m( a0 i h# ~! k continue;
1 @2 d3 o8 q6 x2 i$ I. i }* k0 {7 y7 q% a7 @+ M" u
pInvSort->MoveItem(i,nDestPos);, G& F1 ~- m# l- T" X3 S$ ~* ~
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
. h$ |# \4 [0 ~ Sleep(5);
$ c/ V9 [6 H9 ?. b4 o //Error("移动 - %d->%d",nSrc,nDestPos);# s4 ]2 \' K8 D" A3 H
nDestPos++;
+ q" c6 g+ t. A7 c# k2 O }; [6 p% g& w$ Y9 {! j
//取第一个元素的信息% d! j, A* o) m( E
/*2 ^6 N* m2 [ S% k2 t4 s/ n
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 O4 Z4 f: Y" D" N6 R/ S {1 s$ i8 `- m- u7 d: R# Q4 E
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 Y) D) m1 S7 `3 [- L g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);3 ?/ @! ^" s. o% w7 h
}
: _1 t+ C* h T1 J- l */$ b# _3 x' ^ c2 c* g1 g- C
/////////////////////////////////////////////////////////////////////////// L8 ]. {% k2 p2 n. b/ U
break;
* [! K2 f7 U7 j- U }, p8 g% G/ { s$ F5 d. E |7 N3 l
} 7 L% O }4 I G* V
}
4 v' G5 P7 O8 Y4 b! x: E& @m_wndMenu.SetVisible(FALSE);2 j1 p4 O- F1 e. Q- Z: i% [
. R/ k9 X+ |; R5 o* L" D
--------------------------------------------------------------------------------------------------------
+ K5 Q& q6 K; _& a# L# m搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* G* [$ ^& L/ e* ~4 R+ ]# P% j5 d" Z
{
9 r7 s* }( H2 ]& E- uBaseMouseCursor();
1 X$ s% G4 y% B- c5 O* E6 @}# g1 r8 ?$ n3 h' z' m: U
在其下添加:
9 B8 a8 k6 d! H& A( q' G) Gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point); u9 Q6 o! s2 d) }
{
. F) Y+ g9 a5 ^m_wndMenu.DeleteAllMenu();1 A, b: ~+ A- w, P6 M
m_wndMenu.CreateMenu(this);
" k7 e$ i- C0 b2 Km_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");. A0 A- G5 y3 \ M# o) ]2 B; z
/ f# r; G! {/ P( Z wif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- v9 s4 J2 L" `/ e, N1 h+ r) p- {{ L# K. f5 l8 b1 f) Z
//P以上级别才可以删除所有道具
9 ?4 } E P+ B* c3 g m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); O( d! r0 B8 E9 Q) _5 f
}$ a/ @, N/ O5 M' _$ U3 L' u! O
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
0 s4 g3 n0 K3 W, tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 F8 w$ ~( S# j8 C% K
m_wndMenu.SetFocus();/ H0 Q1 P0 Z6 [2 o Y" W" g6 w( }2 g; c
}
! D% \" _# A% q5 R6 T Q; |------------------------------------------------------------------------------------------------------------
) H+ G& F, Y0 n0 C) `5 I) G, H*************************4 s- c. h) z- X) a- j! T+ G
WndField.h文件/ a$ P( n. s$ J
*************************, Z& }( d3 ` {5 s4 w
搜索:BOOL m_bReport;: a- x( k3 y: ^% a
其后添加:
5 z V6 e6 @- x$ w( K6 E& B3 U4 QCWndMenu m_wndMenu;8 _$ W! {" w7 k! |
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) p `9 X. Z9 c5 w9 u% c2 K其后添加:
' ?# o' |1 w% ^virtual void OnRButtonUp(UINT nFlags, CPoint point);
; p% R$ t2 ^1 y' I* }
A b# Q( M: j0 Y S% Z( j0 V2 N9 Y7 A+ E" c' g5 x) n
|
|