|
|
源文件中_Interface文件夹下WndField.cpp文件! w8 W( W0 E* \' Z8 I
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 s- w7 b5 }6 U3 _! X3 N2 _
7 l: ~2 T+ O Z" f& Y) \( [
struct sItem. W; \+ [0 l6 z e3 T
{
$ r6 y* e; R' a. ADWORD dwId;
# n+ g2 O8 H+ M; c* WDWORD dwKind2;
$ K+ \6 m/ C+ GDWORD dwItemId;7 b! L) z; [ {6 k
BYTE nIndex;. ?/ Z4 R, z, z! R
sItem(){
) T Q$ z4 {& o4 ~$ { dwId = dwKind2 = dwItemId = nIndex = 0;
, R' t$ `" E' X) y5 ?6 ?) |0 M}
! [6 L1 S" A1 A& K9 Zbool operator < (const sItem p2)5 c2 W7 U; \5 }( ~) h5 K; e
{
% | r( i; U, c9 @% ] if (dwKind2 == p2.dwKind2)& W0 j7 _. h7 H& d
{
/ |+ K% X# W; V! z9 z, O6 J return dwItemId < p2.dwItemId;
& C& d8 |# ?+ S: J( C }else{
- P* O. B" L T% F8 y6 Q6 g0 m) W return dwKind2 < p2.dwKind2;
7 k- z2 v0 \: J: M, j: S }, `+ B/ B* {0 X" _3 |
}
$ R8 }0 n, q# l};$ L* Y' d# O" ~* k
class CInventorySort2 i& ?+ f* A% Q7 C$ V: I
{
# {9 u1 P6 d# f4 m7 Qpublic:( L$ ]7 M4 B; m7 V( C1 a- ~, @
CInventorySort()
2 j- [( C" I/ ^2 c3 m{
( l2 y+ o* P ] m_dwPos = 0;2 B( Y$ x' P1 {1 v, w6 X! }3 K- Q
}' A! | Q8 A% \5 v7 s
~CInventorySort(){}
4 } S8 [( i$ V8 t/ Tprivate:: P8 t7 n" B8 g9 U/ y- B
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 x7 I! ~; n+ V7 c4 Z) Y1 {
DWORD m_dwPos;7 z2 D& v L6 n3 M0 ]( C9 p
public:
, \- q+ b" V' |6 E% a( G% { @void Add(BYTE nIndex)! a( _$ ] I" F/ y3 n# P2 _7 B
{
6 ]9 E/ I c/ m if (m_dwPos >= MAX_INVENTORY)- |! z1 w8 q! {3 S& M
{, A6 d. R% b7 ~" t! t* y$ O
return;0 M+ B! M7 [$ P& F7 b
}- [+ r1 X% M; z
m_Item[m_dwPos].nIndex = nIndex; f9 g: m4 d# X2 q5 Y
m_Item[m_dwPos].dwId = m_dwPos;
2 U8 x0 X$ M# A4 g9 V) O( a+ {& G m_dwPos++;
) \- I+ j. S' N1 w l}- u0 @3 D1 u# C, l9 e
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 J+ X. j: t' y, J$ D0 X! i{2 |4 z, V# c$ H* d7 v( U
for (int i=0;i<MAX_INVENTORY;i++)
1 X% g2 u5 W; b5 J4 V! U8 |2 \+ V {' U; \' t& A' S5 w
if (m_Item.dwId == dwId), Q+ o' e0 X# \! z4 ?# ^6 l
{# e' l8 t: I7 y% Y6 u4 r: O
return m_Item.nIndex;- T- \6 m* o0 M; [
}
6 T6 H, w& B) X* B3 d. f }
% P6 _! [( _5 U7 d0 G( T* S& x* s return 255;
( m$ C/ b) f( d4 Q- Z1 K7 H# ^} a/ U& Y% G' e+ C8 k) Q
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置5 ^! j7 c6 `3 Y1 ]
{
- J; n( {- G6 l' p9 n( e" _9 V BYTE nTmp = 0;* ?. H: f0 ~+ g9 s0 b s
bool bDest = false,bSrc = false;7 M- [% x% o( j: X( S! @
for (int i=0;i<MAX_INVENTORY;i++)( {" \1 I7 u; d w7 ]% W
{
5 s6 W$ ^* k- P8 S. H4 @ if (dwSrcId == m_Item.dwId)
) g( }% T7 S! A, A0 b {; m2 A- u4 v) e4 ^, y5 z8 F: t
//id相等 则 改变对应的dest和src
# I' z2 E0 M2 [) W- B0 q u nTmp = m_Item.nIndex;: U+ R. y$ o# a) I( y
m_Item.nIndex = dest;
! w- V9 w, i. I+ n }
& }# n" D& J% l8 O" v+ e2 g }
8 A! ]: s( ~ P: M+ h4 x //临时数据保存完毕,交换开始
2 G) H, a {: `( [: f$ l for (int i=0;i<MAX_INVENTORY;i++)! u+ f, C+ U1 u" _# q
{
2 I& U7 _: p; h& c/ @& Q+ I9 A if (dest == m_Item.nIndex)
4 u: f+ m8 R# y# }9 H6 Z8 ~ {
, E# t2 a# l7 x# V1 M //id相等 则 改变对应的dest和src
5 F C [: \: N m_Item.nIndex = nTmp;
/ H8 Z* _$ F9 N$ }) H }
( s* i4 P# o* {9 z) k; g }6 W' Q% Q; ^) T3 `0 f/ x: X
}
& U ~ E; v; @! K8 S};) A7 k1 ^. [3 i3 q% R( U) Y1 o: f
-------------------------------------------------------------------------9 L# D+ @& N2 T, e% U2 h; h
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ j" C( R/ }1 U3 ]7 @, c. x
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 o) R, V3 ^- z& b( E9 t* X紧靠其上添加:2 v, ]% j3 G: C/ E# T m+ }
if( pWndBase == &m_wndMenu )
- o E$ N' z8 g: r" T: S- ?{) _& X! v+ m: t8 c& S
switch( nID ). c, u: Q: e- B
{9 b5 |7 G& S" p4 Z0 B* ^7 L( M
case 2:% i' m6 S- b! u' u; D! N t
{& _ s5 t# G% C" T) A6 R, d0 z
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ @' S1 ?, B* P- E
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 |/ H# w; K- n1 E* x0 V {
2 r6 e [$ u2 v# \% k3 l. w9 d break;
9 n3 X) w3 W) J3 n: S9 S/ B }( }- y9 Z& ?( D4 s- K9 r
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
l" s% E; c7 B, M, q& W. X8 z. h {
2 p, n5 u$ T+ y. G. m4 w/ R" a CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 b; j1 g5 b) ^( ~8 c5 S if( !pItemElem )
) _( I6 x6 f: {/ j$ @: p( ? continue;% H: H, r9 t- v6 B: R/ D) s
if(pItemElem->GetExtra() > 0)1 `: C- Q. B& Z# `( T' j! M- N
continue;; n: c l* O& k0 z9 ?
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
1 u- V' k% }. s continue;
6 w& e' D6 O0 p if( g_pPlayer->IsUsing( pItemElem ) )
5 F! R% {& i- n! ^: X6 r continue;
7 v/ a+ a& r/ j& ?+ t5 y8 X- Y if( pItemElem->IsUndestructable() == TRUE )6 C. R V4 ^; f+ D& x+ q
{ U# y0 j& ^8 n' F" g1 e( |8 v5 k n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 a( z, T* l/ b' u" ^( n: l continue; Z% e9 P W. ~+ k5 k1 S
}
9 F Y( Q% G; N& ^* K* ^ F, } g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);( ]6 H/ c- L; \5 j3 Y
}
2 R0 f, _" y6 p+ Z* O$ k p break;
/ |- J( ]: \# i }7 d! s5 O& s( A4 s% H6 q
case 1:- ~+ C& Q8 W1 ^0 g1 j
{. \: U3 X d' r
//整理背包- Z8 e) Z9 L' r( V0 i5 c9 d/ \
//////////////////////////////////////////////////////////////////////////
9 ?( D: L1 B) q% O9 d" P4 V2 W //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, i; m5 ~7 Y; X5 b4 s; J t2 Z
//////////////////////////////////////////////////////////////////////////
0 X( h: g" }! Y4 n8 p& f6 w //////////////////////////////////////////////////////////////////////////
8 X+ L r% a/ {- b7 [; h6 O0 X; W CInventorySort* pInvSort = new CInventorySort;
3 e) T" }" m) S! n$ N d. o" b vector <sItem> vItem;( P. L8 I1 `9 E9 C$ c2 x' u- ?
vItem.resize(MAX_INVENTORY);//初始化大小
$ Z% G4 T: @) O4 v& w/ | //////////////////////////////////////////////////////////////////////////
5 l1 Q) B$ v) v6 H: p+ [ //填充数据# G+ s; ^) ?2 N8 m# M- }$ s& {
for (int i=0;i<MAX_INVENTORY;i++)2 x: g( J+ y j' s9 w
{
; ~! I/ |) s; x) r; e. u$ T. H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( @3 t; e2 j" r" _+ M* X# H if (!pItemElem)
9 q# a: N; \5 B2 h {
* e! X$ N0 ]: }& T vItem.dwKind2 = 0xffffffff;& p1 F) R& O. x- [
vItem.dwItemId = 0xffffffff;
5 \' y2 A% B$ l- u vItem.nIndex = i;
( Z3 [) u- _) a3 |( j; \8 ]2 u4 D+ { }else {5 j+ C6 `; D+ |7 ~0 n5 W9 s' K
ItemProp* pProp = pItemElem->GetProp();' ?# b' i' i( n
vItem.dwKind2 = pProp->dwItemKind2;
& i$ d! Z! w$ g L vItem.dwItemId = pItemElem->m_dwItemId;# F4 @3 U# w6 G! B9 }$ y
vItem.nIndex = i;
+ m. X% {7 y$ C) d8 G }( ?" q; K. [- _1 J: |# l0 B5 \5 U
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) b8 ~$ r1 F& P" o9 J }
, I$ R% s( {- n* y# | //////////////////////////////////////////////////////////////////////////
. n) p; `' v* j4 w; ^ B sort(vItem.begin(),vItem.end());//排序
( [: f, G/ {) K3 A% f/ ~ //////////////////////////////////////////////////////////////////////////
; u) j* |* r8 t$ ]- n //交换; e* X+ p$ c' t' J* T/ }- O/ R
for (size_t i=0;i<vItem.size();i++)
$ c1 [ S6 T' |) \; D( w {6 A2 g) d: c6 I' p4 d
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 ~ d: N! W% ]6 w6 m8 C" W pInvSort->Add(vItem.nIndex); W% u; ~$ r$ p; N9 {, ?
}8 C, t# h- d- l- n) d
BYTE nDestPos = 0;
7 [9 c9 u' e' O* p+ h5 J4 i& r for (int i=0;i<MAX_INVENTORY;i++)% ]4 U1 u5 q5 f, a4 ^* I
{' X1 q+ `8 \4 `) k9 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( M9 D; j2 Y! I1 W3 u$ x2 ]8 y# |
if (pItemElem)
7 J) y0 q h; o {
1 C9 W8 F% c+ @0 K6 W7 N if (IsUsingItem(pItemElem))4 |6 i. X8 m/ s
{; C- R5 A) R9 t, P0 f- T
//这个位置无法放* M0 b% H7 y8 i8 R; O
nDestPos++;
4 H+ Z2 c1 @8 M7 l1 p0 I }
. n$ L7 x+ m0 Q; z4 _ }+ F3 k8 [6 L" t5 u$ S0 ~
BYTE nSrc = pInvSort->GetItemSrc(i);
& D* ^ F( _0 Y pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
7 e- L1 w) H& I- A9 n if (pItemElem)
& m9 k# E/ A; P& {4 h {
- R5 \3 S& W) }- E, f7 C if (IsUsingItem(pItemElem))
7 }6 T) |$ Q4 b# F {: j$ @0 ~; t+ t7 u" k) `. D
//这个道具无法移动,跳过
! t' @+ M" `/ ~' ]7 r" @ G continue;
3 p/ _) `& S6 b- h9 ^) L }- Z! R# c, f- p! e
}else{
& \; }" T3 Y4 q //空位置 不用动
`; [" W% T# Q& R: l4 I) E% @ continue;$ u6 z! E4 k) A' e) C; y. c3 r
}
4 E4 v) B) k6 T. `3 {: }1 g //////////////////////////////////////////////////////////////////////////, M# ~9 o: {/ D5 D) _
//开始移动2 F$ T- o7 F7 S1 W0 c7 [0 y. |
if (nSrc == nDestPos)1 k# l9 g% ?, e1 C) o. A
{" i# \/ x, \9 h" e
//原地不动
" S/ {" G/ r; p$ p0 V0 ^ nDestPos++;& z# {9 i0 `4 h. E/ y }% `! E
continue;3 }8 p; {1 ^! x
}8 _- {- p: L" l4 i! |$ l+ K$ A
pInvSort->MoveItem(i,nDestPos);' v9 W4 y2 y0 f: X# P# P# b4 r
g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 l) |8 Z( |3 m# j
Sleep(5);- l1 `- k. n- `9 ~
//Error("移动 - %d->%d",nSrc,nDestPos);
0 c9 V1 |' V5 e0 q5 Z nDestPos++; F, \& g1 l/ |
}' h) G: j$ ~- ?% C& A5 I+ s
//取第一个元素的信息
5 U D+ H5 S' N( D8 G( K /*$ x5 d F5 ?$ F9 K
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
g3 C: t* N( |; A. d! Y4 A u {
5 |) L/ E+ ^8 k: l5 G Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ K, U$ O2 `" m( M1 l- B; A' C g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);/ X9 Z0 e# f5 A% ]7 p7 B8 r& L
}7 M! p& J9 ]5 R; T$ b/ C
*/ _2 }/ V$ E. e& ^' `1 p
//////////////////////////////////////////////////////////////////////////
$ E5 b9 Z9 r+ _( a$ ` break;3 U& l/ C, Q( W) V& ^) R' T
}
& I4 b& o$ @, f/ B }
2 `, C. T# [& Q& W" w& a}0 q# `, Z0 x5 L5 b0 s; r" [% G
m_wndMenu.SetVisible(FALSE);$ u( }% X0 D5 I, S
( Z; f4 E! y4 X3 z* B& `8 l0 [# z! c
--------------------------------------------------------------------------------------------------------. k; v% X2 p! Q9 q' g0 t/ b
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- g H' P |0 o' Z
{% r' Y( a8 q. H, l
BaseMouseCursor();0 m+ Z/ c& r1 n& h8 q
}8 v3 R0 k3 Y7 V
在其下添加:
+ E$ I. C0 r; X. `4 g: h2 | uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 j" C/ b& I& k& a8 ?
{3 d& ~8 Z# t2 d# D% I V
m_wndMenu.DeleteAllMenu();" ~+ d S4 u' K* _
m_wndMenu.CreateMenu(this);
. X& @) e3 J0 ~5 ^* C3 @- l+ Cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 b1 L* h* j+ G, y3 P4 o% V9 ?8 M2 p: z- Y5 H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 o* Q1 Q" a. k/ r8 X0 i; v{
; V, R; a6 O% [3 U2 ^9 u7 S: r //P以上级别才可以删除所有道具 o' K2 @; m' G N
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 j3 |, G1 g4 B8 S0 f# o}0 l& h. v! A1 S/ U' N, a/ e: u
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 Y0 F# g" b; U0 b
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );$ h& N0 Q8 j* l. X# F& U
m_wndMenu.SetFocus();
3 P' K( x+ P. h# R}$ `2 J* p7 c3 T) C+ [7 z
------------------------------------------------------------------------------------------------------------
2 ^/ {; }0 C" M }*************************
3 z4 i; o Y# [# UWndField.h文件
# K* v" h- W0 j9 n* h. n: G# h*************************: ?. |: L C. G
搜索:BOOL m_bReport;
- V6 ^5 B! \( x$ i9 K其后添加:
0 n% D/ W# h& u+ y# `4 U4 ?CWndMenu m_wndMenu;* t! t& O$ X g1 j r1 ^! p
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 |7 z; j' c9 t其后添加:
. Z3 N& v M/ F2 E8 k2 V. Qvirtual void OnRButtonUp(UINT nFlags, CPoint point);
7 z7 Q( l8 ~& s7 J' |2 a3 X% h7 n; }
* L, e- ^, | K) C* j) ~
|
|