|
|
源文件中_Interface文件夹下WndField.cpp文件, N/ ^7 k8 ^* e/ x. v+ V& R3 d# L
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! k! k' h: V$ i
+ _4 V$ I; I% X, Tstruct sItem% P, D3 v* I0 F9 N, m6 h: W9 N
{& U8 B5 t) j) x: B+ r8 S. \0 G
DWORD dwId;" L# f, G! V5 g- @: O
DWORD dwKind2; C9 L) b% S, G8 P) k
DWORD dwItemId;
2 K; |! w) f$ l& FBYTE nIndex;$ z$ k1 b) ^, j2 e! u2 p
sItem(){
: K# v/ k, y1 t0 g# W dwId = dwKind2 = dwItemId = nIndex = 0;
, Q: H) A: u- z- r0 _}- d8 F D. v0 s' A [
bool operator < (const sItem p2)8 Y i1 `% ?, Q4 g$ L9 i
{
8 p7 L0 L5 n$ k& ~+ M if (dwKind2 == p2.dwKind2)
, T8 ]1 M( m4 V {
* n6 v3 g+ B$ i. n return dwItemId < p2.dwItemId;
% O; n, m* T, z1 v: G) t: @0 p }else{
7 x9 k7 z: x% e4 A8 {# ^0 d# K return dwKind2 < p2.dwKind2;
; `" e Q$ S$ X+ k+ A' ?! E }
' r$ Z/ X! Q& M( M/ K* u}
% T/ m' U6 _+ ?9 G* m. N$ p: T};
" T0 W1 U- b# c2 g _( Jclass CInventorySort K& }( ?& Z7 B' p& O
{/ V9 d1 [8 {& F2 j
public:
0 o* L0 i: F' v0 ~$ X! WCInventorySort()
( i+ |; a; u/ R8 {0 V5 y5 m{
; F( F4 F; |) U m_dwPos = 0;
3 r" E" Q- V9 x v6 |}( C& r. L5 |! o( Z4 {. Z
~CInventorySort(){}
+ h& G4 f* ]8 {6 y5 Kprivate:8 g# t1 W9 B. b* _4 I
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息; r8 y5 c4 B0 c$ S4 Z ~
DWORD m_dwPos;. [3 ]$ v) a8 l7 p; T) k5 l
public:
( M Y. S' ?1 Y7 fvoid Add(BYTE nIndex)
2 o9 \0 i4 v" h3 q3 X* r c{
$ `2 o4 r2 k0 W! E1 E if (m_dwPos >= MAX_INVENTORY)3 u! ?& T" l+ @' |
{ x9 ]& l9 z+ {
return;; C/ B( B9 F# u: x! z
}. x: X7 q8 p% p* E4 U. |, r5 q2 N0 G
m_Item[m_dwPos].nIndex = nIndex;% n9 ~7 H- T; G0 s2 t) S
m_Item[m_dwPos].dwId = m_dwPos;0 {: N. ^1 n+ \. s+ Q( @: B4 P+ W0 b
m_dwPos++;* c8 D4 A/ P. A o, R3 C2 f
}1 ?9 c, N5 H. x8 `& P \* W0 W# x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 w5 U; K% N: z$ B{
) H+ _! M3 D- x1 [( g7 @9 P for (int i=0;i<MAX_INVENTORY;i++)& t3 D6 E3 S8 q: S" V; d$ c
{3 A2 \8 ]. A# t* s! Q: p
if (m_Item.dwId == dwId)
* M. v" F: \- R$ o {: D+ C, d3 a" @8 t
return m_Item.nIndex;6 v( R/ H- I+ @! x* C: L" i$ ]
}
- b. q2 n* t) T# W% s1 Q& j+ i }! i' M. |, A0 Y% O2 l" @4 m3 k2 g) R
return 255;
: A- P8 D( P7 Y' [}' O7 X0 \) A G2 X& a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置/ P$ o4 ^$ V$ d) y# Z0 K5 p1 N" y9 q
{
# |2 p3 L( f" u& t) E BYTE nTmp = 0;
( z9 @4 u$ S* n2 G bool bDest = false,bSrc = false;
8 x6 O5 w3 o% e# G% C; Q" [) t for (int i=0;i<MAX_INVENTORY;i++)' y$ _! P/ ]* v# ~! U/ L9 U
{
; P+ `4 R9 b: m3 F- n if (dwSrcId == m_Item.dwId)$ c1 ~) S! a' j1 z9 L1 D" z
{: O9 A- r' P6 {. }) x
//id相等 则 改变对应的dest和src, c1 x5 \ g0 c0 X0 t( @
nTmp = m_Item.nIndex;! B# i I0 z. K+ r8 k" y- N: X
m_Item.nIndex = dest;
; \: k8 Z3 K4 }$ c }' t: o5 ` H- p' {7 Q+ r2 d
}2 _' \7 |5 z3 P8 b+ L6 x8 c
//临时数据保存完毕,交换开始2 P _9 X3 b0 d' ~' r6 r
for (int i=0;i<MAX_INVENTORY;i++)
0 h" L/ k5 ]1 S; O4 Q$ e {$ P' t" a: u8 X: ?7 y, i1 G' V
if (dest == m_Item.nIndex)
5 B1 O( c( U8 l! X% N! z {+ V, z8 Z- `- @9 J { \8 M# a
//id相等 则 改变对应的dest和src+ I+ A( W `- Q9 n
m_Item.nIndex = nTmp;
& Y3 c6 I" `. | }; u9 A5 z, {( ^7 a, _
}7 p9 i, }) L* {; N; m) Q
}+ @, W& ~0 }0 k+ d/ A$ {/ s r
};
1 x3 [; j/ q/ E1 y- }+ H; l-------------------------------------------------------------------------
s% M% |/ A3 h3 [: t* M依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
7 B$ A5 \& ]4 q5 l7 Z搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
1 V0 ^* S' e' k, `3 y3 u8 X紧靠其上添加:4 Z' I& B0 P& B$ D3 l. U$ j
if( pWndBase == &m_wndMenu )
N' D" z( m* |; ^{2 E; H. Q# i4 u0 W0 `8 @/ |$ h1 H7 Q
switch( nID )+ p6 w8 C) d8 z. r' u
{
- p" W( Y& k4 i, O' o$ Y% |* } case 2:" \# p) \- J4 a" j0 {
{$ K |0 l) l5 p$ ~1 G( o
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
% E* ?% w( y' L9 s% J- h8 J if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))8 l3 r3 W" Z( I; C2 j' N8 |- U
{
8 ?7 R% t7 O1 _8 K& \, F3 H' C break;
5 I- ?; m& d# H. Y% s }
: H% G" x% x5 @+ h0 } for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
) }8 ~7 R2 V( b" G {/ ?$ C& C n5 `
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 p1 f+ s4 y5 v
if( !pItemElem ). t2 L: ~9 r# A
continue;
% G/ ]4 t/ k. }1 u. ^ if(pItemElem->GetExtra() > 0)
% h9 p2 Z3 T; y) X2 w continue;( ?* J5 Q8 \4 e$ V; Q1 e7 z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 Q T8 u2 C; c0 h3 t$ g, j$ B continue;1 _* W3 z% A% c) M; E7 `" [
if( g_pPlayer->IsUsing( pItemElem ) )1 }" Y! C! l6 I4 x. B4 z
continue;9 a; o; {" E$ X9 |) p1 `
if( pItemElem->IsUndestructable() == TRUE ); E2 ~, \+ }! q/ H2 X) U- X
{& y3 P8 ^# \; y3 R& j/ m
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );2 B$ m6 I4 {. B
continue;
- f: ?/ B1 b. T8 h. w" N }
) w; a' m/ L6 {, s( I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);3 T. g- ?/ E( {; _7 D0 ~
}+ l7 l! Y& ]8 t' a4 B
break;
+ n& d! \4 e: }5 x- |5 t% o }9 B) j; a5 V) N9 P6 O! V7 _& z P P
case 1:8 ~, M/ {0 O; `) z' V" P. b
{( [ b" T* k+ h8 x1 ^& n+ i
//整理背包, t# n) l4 F) `, u+ e. v m/ P
//////////////////////////////////////////////////////////////////////////0 T( J0 k C9 p& W4 B M* e- l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 _, t$ d6 k W, D7 \' \
//////////////////////////////////////////////////////////////////////////
" v# ^, u: u d+ l9 U //////////////////////////////////////////////////////////////////////////
5 X3 v5 f, X& n, y5 _+ }$ J CInventorySort* pInvSort = new CInventorySort; |9 W% ]8 |* X+ K
vector <sItem> vItem;3 L% g* X. ^/ `8 i1 c: K9 M$ Y/ U
vItem.resize(MAX_INVENTORY);//初始化大小
2 k' C3 t4 t8 n, c //////////////////////////////////////////////////////////////////////////! |/ v0 Y, Y1 o" a
//填充数据7 m- ~. Y+ Q% g, q6 f$ H
for (int i=0;i<MAX_INVENTORY;i++)
9 t& |, E8 V" ~+ V' r1 z$ z {& S, e m8 [) z6 X' h3 ]
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
& p! f, c( V' l0 r- D! U5 |5 x if (!pItemElem)
' ^7 ~8 ]7 m. a2 o# U {
, P/ x- I% @9 @% ^ B vItem.dwKind2 = 0xffffffff;
7 J* F* k3 I/ m7 l& I5 t+ c9 v) B+ m vItem.dwItemId = 0xffffffff;+ M4 T- j( u j) S& Z3 t* x6 k
vItem.nIndex = i;
+ M/ Q5 F# ~9 b3 G& O0 L" z7 d }else {/ G- S+ c2 q0 L
ItemProp* pProp = pItemElem->GetProp();
9 @0 v) C {- e$ a3 t/ x! w! @ vItem.dwKind2 = pProp->dwItemKind2;0 l8 y: r' `; ^
vItem.dwItemId = pItemElem->m_dwItemId;
/ e, a* ?& D: _. q vItem.nIndex = i;* U0 j+ x; }4 U6 g4 }% ~9 {3 r6 O* U
}: l$ U \4 c: t
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 c7 c7 ~) K" R; g. S5 i
}
+ S4 u( Q @# k4 ?0 ?, ?7 O //////////////////////////////////////////////////////////////////////////$ {$ W) z8 m9 h! _
sort(vItem.begin(),vItem.end());//排序
2 i& D7 Z" J, j/ T: @: P //////////////////////////////////////////////////////////////////////////
5 Z; J% X8 a, A) ?9 ]2 y' W' B //交换0 r& D% {* j/ l. s/ b
for (size_t i=0;i<vItem.size();i++)
& T1 x7 k' a, @6 I, R& L' {7 D {
y, H% f# b% Q9 \ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
# V' s+ c V) E pInvSort->Add(vItem.nIndex);! ]; C, \0 @+ _1 |3 F! \
}
" a5 d4 _3 I4 b8 { BYTE nDestPos = 0; ^! g6 w+ f) y1 \
for (int i=0;i<MAX_INVENTORY;i++)
?9 T; o, q, Y' X( H' d {
: a/ I* p& _3 w: r( y" Y CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& }- n$ K* N! _6 ^0 m: w
if (pItemElem)
2 D: @) l: ^) q9 B7 c {
6 f/ a9 c, O4 Z( C% J* t5 O if (IsUsingItem(pItemElem))- ~5 y% V. {/ n' N k
{
. R/ v4 d, _; u7 p4 x, I- K) A //这个位置无法放
, `& |1 }7 d4 M nDestPos++;
. D# N* E$ U! N# x7 ?+ o$ B }3 y2 M2 f4 M* r. e( w) ?
}
8 }1 }& O ?& K( C/ \, m! z BYTE nSrc = pInvSort->GetItemSrc(i);2 m* }( t5 i. a* s) M1 @4 [
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ y: U8 o4 P; g7 G" a2 }& {
if (pItemElem)
3 Y$ w, s! Y: k; r( v/ I. N {
! f- y# J- b( T" b; g if (IsUsingItem(pItemElem))9 |* L* ?& t7 C6 C/ O* C! f
{
0 H5 `2 M1 Y$ B, ^% z5 f //这个道具无法移动,跳过
5 e9 O$ z2 |/ X; f @$ z r& W continue;! h0 g r3 p2 o5 e* H' m
}/ L5 J r6 N z& K$ K
}else{# `2 k3 q# _* [! c/ A4 X
//空位置 不用动
6 B1 u( _( Y7 y, Z continue; F6 l" z; k+ ]: p3 T0 `2 j
}
# S6 @- {' B- W+ m& G //////////////////////////////////////////////////////////////////////////) t6 y- D) F1 h) d, l9 O; \
//开始移动6 v9 _$ u' {8 M; }# r# o) D1 ^
if (nSrc == nDestPos)
) c+ y5 U7 [, @. G1 ?8 X! w2 w {, L( F8 Y8 }! F4 U+ b& I* N
//原地不动# h+ C8 I* E5 Z2 E* ~3 S+ G' O
nDestPos++;
0 o+ l3 Z: S$ w: R continue;
# X6 R5 y* i3 W$ A }
0 P X4 |+ |4 ^4 Q/ d$ \ pInvSort->MoveItem(i,nDestPos);6 M9 x% f/ M) v
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) Y# @; @% W, m; e" Q Sleep(5);3 W% t* j `4 @- ]: ^
//Error("移动 - %d->%d",nSrc,nDestPos);
1 i3 B) |* |$ y) |6 X nDestPos++;; P& b$ s+ O( v2 p1 Q0 G
}
! k9 x" _* k4 `5 G6 c //取第一个元素的信息
$ U2 x9 v+ j5 z2 i3 L /*1 e. ^1 o% M, i2 W& p0 H* l) d: ~ l
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
+ F# R" _& t$ T {1 @/ C: } c( u7 T8 [3 S# z6 w, t
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);/ o. O5 h, e5 r" G* t' ^7 K
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);8 `7 {) B1 N: Q* B) C7 a7 |
}
) r4 {# }: C+ w4 `6 u# A */
, \, g" z$ q% n //////////////////////////////////////////////////////////////////////////
' ?$ Q9 }! H _# X# c" X7 x! P* f break;; U% V G( o' c% w8 q0 Y
}
( I5 t4 P5 n. U! F1 n C" h } : t4 V4 V! I4 Y4 p0 {
}% T& k! \: a% s
m_wndMenu.SetVisible(FALSE);: e5 t( b( E6 {0 l6 `4 {0 b
; g/ E# g) r% J--------------------------------------------------------------------------------------------------------* k G( M0 w( g5 {$ M) S7 g
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
- F) D8 u5 M- Y* N8 a{/ o, S5 n, z* p- f
BaseMouseCursor();
; B# I8 F* ~' ?: J}
- g- L; p( s+ f$ J0 S在其下添加:
' z# h0 V6 i2 ?+ p& F1 @void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
" ^' r# I# G, j{
4 T1 Y/ }: x% b: t/ _ c1 Fm_wndMenu.DeleteAllMenu();
( e; k6 K' I7 n/ J3 C# K/ q5 zm_wndMenu.CreateMenu(this);2 ~* Q" T/ L9 ]1 |: [) t" M+ D/ f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! U V I/ B$ O, F. V& Z. z, `6 V! M
% i, _1 }; }9 ?/ d/ Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! j& w. v& D0 E% a8 @$ W{4 z: s* |8 t9 }) l3 n% k
//P以上级别才可以删除所有道具* e/ l& U. |# l1 g$ U& E- r0 T
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");$ t w$ W$ k/ M5 _$ D
}
$ H0 a2 Q7 a: k" J: Tm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( H# x% E. u8 am_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" @/ O! I7 ^2 zm_wndMenu.SetFocus();
! j" q, \ ?( C6 z7 ^0 K}
* W; w' [3 e' u( X9 i------------------------------------------------------------------------------------------------------------
3 T9 q4 o+ Z" M7 }*************************& \/ h; _4 j& q+ O
WndField.h文件
! M# E4 C) f. V$ w6 F*************************
3 o# y0 X% l. |9 W1 t1 u搜索:BOOL m_bReport;
% b% z, \2 g0 v/ s; R& r其后添加:4 Y! ?$ T# H/ @* ^/ o
CWndMenu m_wndMenu;
; p [* Q) a! N. K2 v3 e8 c5 V4 U) d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
A% i" y2 p! _' @其后添加:
+ h0 }2 a' f% E* @virtual void OnRButtonUp(UINT nFlags, CPoint point);( f! @& P" @+ D' A6 |/ B
- O6 X* J* o6 g" z; z3 u4 B( h5 q: ^
( h: Y* R% g- v( h g9 Q! s: r
|
|