|
|
源文件中_Interface文件夹下WndField.cpp文件
/ i# h3 ~! ^/ m5 a. n3 U- O! Q搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 J6 I4 U1 E/ S- Z2 J/ A2 y6 w7 ~5 z; x7 ~
( c% e, Q4 W% I. a8 q1 n# Pstruct sItem0 R2 r. ]( J. x7 ?, c: a |
{
5 ?7 u. ]2 L: k4 \2 k) s) pDWORD dwId;
- \, F# t% L: v& e* ~) Z: W: LDWORD dwKind2;2 h% a# g9 Z% j9 ^ M( m9 R7 a' c
DWORD dwItemId;3 [4 X3 }* {! `4 A
BYTE nIndex;
7 e1 ]5 v! ]$ m' PsItem(){. \* I. {& C. C9 S
dwId = dwKind2 = dwItemId = nIndex = 0;
# w: I7 T7 q( s8 X& O; _}
- S" P- a+ I* f- s. @+ fbool operator < (const sItem p2)
. q, d# `$ G$ J{3 F3 h: J! ?" \- D0 ]4 N
if (dwKind2 == p2.dwKind2)) k4 x; `$ l4 ?
{- Q: W* e8 I# l
return dwItemId < p2.dwItemId;
) L% @) X/ e# H6 }0 L' f' W }else{
7 D, V5 ^& V0 j$ v- Z j return dwKind2 < p2.dwKind2;/ [2 z3 Q" J# Z ^2 z/ F
}% g* ]' r& o, b1 s
}
A9 |* B3 L" S! [};9 M% u, s, S( s$ V( }
class CInventorySort
% Z7 |: o4 `) ?: ?2 M! M{6 d4 g. x2 f6 I* _* A s
public:0 m$ P9 i; ?+ e* E5 l( t
CInventorySort() X" Y, a2 ^0 w# j' O% k3 ?
{' @% G Z7 ?" h6 V0 p7 s
m_dwPos = 0;% q* A! {# K5 X! `( N9 F0 C
}
/ L$ q3 t8 h' J4 f) r( |~CInventorySort(){}
3 O: |4 e# o. o7 A' y tprivate:
6 |/ E+ L2 I* k7 E: }; UsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 s7 }) d' C& K# {8 ADWORD m_dwPos;- U7 q) }1 X) [: F4 [
public:
8 W# o. }1 V7 X# d7 l& S! ?; {void Add(BYTE nIndex)
5 F2 f" }2 K5 T8 @{
- }6 `9 x/ `/ @ if (m_dwPos >= MAX_INVENTORY)- j! e: H% \ s
{8 z0 e9 m* W( P* h+ W
return;
: Q% Y* Z. q" W7 r7 x9 s7 G }" f& `2 {( C/ e' A* H
m_Item[m_dwPos].nIndex = nIndex;% U* y7 t( o, k! J% S1 L/ ]* r1 \
m_Item[m_dwPos].dwId = m_dwPos;
4 ^( b0 j' i; _: X' y- g m_dwPos++;8 G+ |: u- ^) Z8 D
}: ^( L$ u1 N2 c7 Z) i. V1 n
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ S- m, d5 Z! m{
, r8 a: Q o f7 v; O for (int i=0;i<MAX_INVENTORY;i++)+ T7 B+ q- t% H$ t. j; v1 I+ \
{+ a, F3 v( Z4 a( l9 n9 |
if (m_Item.dwId == dwId)$ w8 P) R, D0 R4 d+ y+ ]
{
; N3 I$ R: P w" ?$ p+ ] return m_Item.nIndex;. V$ `# V' `9 A! \8 b3 c
}
6 F/ j: P) M1 Y% H: T1 c }0 P. n5 a% M& `
return 255; I* L, X3 i7 V7 z7 i( O4 Y1 T
}
- b' m+ e+ `. ]3 kvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; l! R7 Q& T; E0 s4 }+ X
{
7 @( v8 L: A& g& g* {. I BYTE nTmp = 0;$ t/ U# d* W z1 w0 I8 j
bool bDest = false,bSrc = false;5 l8 G W/ i1 ]. }0 g5 g$ q
for (int i=0;i<MAX_INVENTORY;i++), P/ L" t% b: Q( p- o
{
' U+ ]7 X: p! J) v3 H9 _ if (dwSrcId == m_Item.dwId)' l. \' |6 \* T' `6 y+ i! L; i' S
{
- u8 `1 I: F7 m! Y# s //id相等 则 改变对应的dest和src- Z' [. q Z6 I; G1 r5 A
nTmp = m_Item.nIndex;1 K, i1 j; U( b: A9 z5 Z
m_Item.nIndex = dest;
# g0 x2 m0 o. Q" h& L F0 t! n }
2 F9 i# C% H' p$ J0 z }3 Z( D' \0 q- x: M6 B9 \! i; J
//临时数据保存完毕,交换开始2 A9 G: u$ Z6 `9 }9 t8 i
for (int i=0;i<MAX_INVENTORY;i++)3 K# |+ Z2 o/ l4 k2 V
{
( a% W% {" E9 g3 w& c0 k$ w/ u if (dest == m_Item.nIndex)
6 ~/ U# O2 s, S& N! F {
7 e* x( [+ L9 L7 y7 Y //id相等 则 改变对应的dest和src
5 E5 T0 A& _: o: G+ E9 R9 H m_Item.nIndex = nTmp;
5 f2 ?/ v# @9 ~% A+ u }4 J7 }9 ?0 e) a3 b
}+ @3 Q2 F3 ^1 e8 s* m
}
8 `) |* s6 E, n0 ~};
; f- H, ^% p, F# r! l( E( J$ ?- K3 L3 d2 t0 x-------------------------------------------------------------------------
/ g- m8 L% N$ a! V4 ~5 K依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 J+ Q; Q. M3 u" b2 U/ r; ?5 V$ t* C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
' C2 _4 E; C- V; F紧靠其上添加:
}; W; b! Q ]3 H; p4 p b# N: iif( pWndBase == &m_wndMenu )
6 r4 c* H' I2 B" t1 A# [& `0 l{
% s7 X) i W4 H$ q1 a& V4 I switch( nID )2 X5 ^! U' A0 G9 w
{
: `( ?! V3 m3 d9 x( e' M: N# ^9 I: [# p case 2:
- _" }6 q2 d* z {
_$ ]. Q, ?3 k: J //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
* h- a/ d8 c4 L- h- Q! U* I1 c! f if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% M! S7 }' k* P6 W5 |
{( D0 ]* X, ]( [- J! U( I- |" g9 b7 I
break;
+ `# v3 k# `4 M6 |2 z0 u }4 S, Z2 _7 E3 B
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
( ^ y$ W9 Q# D, n4 K! P {
, V: V% X/ y y( ^ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 M g5 o; d0 U5 H8 p; w7 Y( X if( !pItemElem )$ C; S% a; C$ I
continue;
9 g0 E7 K$ B* Z6 C if(pItemElem->GetExtra() > 0)# h# I; K# h% h8 m
continue;- ~3 d$ E V6 w2 O5 r" ^' `) B( ^ \
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 0 |# d. V- u) X# U
continue;
+ o `) J# h( C$ t* d+ i if( g_pPlayer->IsUsing( pItemElem ) )& K" H, v; y# I
continue;6 e6 p, G9 b) f" h5 J/ X* J: ` s; [
if( pItemElem->IsUndestructable() == TRUE )
( l. P8 f) P) ?0 _) u! \ {
6 Q& F8 C8 `' N% n; x g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 q" R, m) X+ b3 U( ]
continue;
& N8 E- d& y' ^% t) C& x }
/ T5 o' ]1 [& L g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
6 |3 G. }; i4 R: H1 ~* x }
; Y7 p& O4 O3 |* f break;8 ?- i7 x; B6 I/ V
}, q1 l* g( k0 y3 O6 K* x0 q7 e
case 1:( k$ A" f2 z9 O5 v; _6 x- W) |
{
$ P6 r+ ] k. l7 ~# r1 y& V //整理背包! n7 g) F3 ]* i
//////////////////////////////////////////////////////////////////////////& i4 s8 H! n: A8 v" ]
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );& Q$ T" \" \( w/ e! r0 e, S8 A0 r
//////////////////////////////////////////////////////////////////////////6 S, `3 Q4 n2 i
//////////////////////////////////////////////////////////////////////////5 s9 E( S# j6 W3 f1 g! g+ Y
CInventorySort* pInvSort = new CInventorySort;
. w, `# p5 G$ p' m }% j1 v vector <sItem> vItem; f( V- T% e% L+ t) Z* e! w0 Q
vItem.resize(MAX_INVENTORY);//初始化大小
. S% f2 N/ ^, m* _ }$ @ //////////////////////////////////////////////////////////////////////////5 k, A' @; q1 C0 z
//填充数据( F$ m4 ^! Q ]/ N4 s
for (int i=0;i<MAX_INVENTORY;i++)2 z1 q7 R* q$ |% ]1 X3 V1 u
{$ C8 ~* E; D. V+ C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! i, Q0 W+ K, ]. n
if (!pItemElem)( l D# {( r$ z' k) J$ Z J1 e
{
2 p! ]' A! q7 V6 p5 \0 J vItem.dwKind2 = 0xffffffff;
( ^" e) O4 {, H6 r: [1 n$ ] vItem.dwItemId = 0xffffffff;
( P l7 w5 B8 [4 c vItem.nIndex = i;
1 C* D1 p/ V/ d! i }else {
- F6 P p! ?4 J. n/ X4 @ ItemProp* pProp = pItemElem->GetProp();4 U2 M+ y, Z4 ?+ Z
vItem.dwKind2 = pProp->dwItemKind2;( m+ _. V0 l4 H2 Z' D
vItem.dwItemId = pItemElem->m_dwItemId;1 F/ {" p% R1 n) J, k' c
vItem.nIndex = i;
" F0 C4 |/ l' P: g( y/ g) t }
7 R7 T* e# w0 u: @ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# ~) ?* W1 m1 h& o
}
) m" p- k3 \, V: C( F //////////////////////////////////////////////////////////////////////////
; x" }, d& A, |8 G8 M3 v sort(vItem.begin(),vItem.end());//排序+ o6 Y& g4 O& ?6 q& W5 Z
//////////////////////////////////////////////////////////////////////////
2 n( s0 z! k. y4 n( I; C6 O1 N //交换* X4 O9 u* K0 q* c6 g9 Z3 y
for (size_t i=0;i<vItem.size();i++)
1 o9 g6 G' O& O7 U; [6 ]4 b6 _ {
% Y6 Z% d7 O( I* j' S' L //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& B8 I8 Z l# ^3 T U pInvSort->Add(vItem.nIndex);
% Z6 X+ D0 F. D9 C( i }. B! `6 B9 P. Z2 D% U2 L+ i
BYTE nDestPos = 0;
0 |, R; \8 h/ M' w, ? for (int i=0;i<MAX_INVENTORY;i++)( L$ M) r/ F5 {3 |( B
{/ G5 i9 Q6 v* j
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);' v# t' p$ b3 h" h I
if (pItemElem)3 o, c/ S5 P( M6 K% N
{* L4 O! k. Y, {# V
if (IsUsingItem(pItemElem)): O/ H% Y9 n4 ~6 t& l* y
{
( K3 ^+ S0 ?- J3 T' p4 S" b* R+ M //这个位置无法放0 {+ z5 V* {, ?2 E" _6 p' W
nDestPos++;+ Q% T$ \0 N. a* @ f
}3 _- g/ k: Z5 C, e
}
) F- F- j( r* @+ b BYTE nSrc = pInvSort->GetItemSrc(i);
/ g: \$ T- I0 N+ |: o pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);9 j& b5 g0 V) X5 i
if (pItemElem)
, U: P" k; _. ]4 w+ E {5 F, J8 Q* P& @! X: b5 c! Y- q
if (IsUsingItem(pItemElem))
( S; |! o% g1 z% D& D) X {; a! D3 F1 C- h4 D% F/ ]6 o
//这个道具无法移动,跳过; H7 p. \6 J# }$ k6 [6 n/ `
continue;
$ Y) W, s$ x2 s& a, | b8 t! w }
& R+ `! f. g+ y/ d4 m }else{
" Y/ o9 l) P; d. B5 G //空位置 不用动
! \6 @/ h- ^. u$ @/ q continue;4 K/ I; P" ^7 n y
}
$ q* w4 [" P( z1 i3 K% @/ `. q9 w //////////////////////////////////////////////////////////////////////////
3 g! w2 v3 N/ }& k3 j# O# B. q3 ^7 L B //开始移动
+ f8 f' N0 s* P if (nSrc == nDestPos)
# t2 Q5 K# v% _' w {5 A$ i9 X2 o+ C2 E
//原地不动+ {% q& U" h& m& ~
nDestPos++;
+ Y: V- t9 @ X, r% o1 K continue;
# ]0 |+ p5 a* h% b: V* \& e/ N }
3 v- h$ n$ H- U: m- q A pInvSort->MoveItem(i,nDestPos);4 |5 m. w9 F* P& T* n7 u, t i4 d. u4 L
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( _1 |9 M/ e6 l. Q6 v; L3 ]; D7 L+ N Sleep(5);
- Y# v! y! |. \5 o ^ [8 { //Error("移动 - %d->%d",nSrc,nDestPos);
6 g/ r2 M' `, y( I6 a7 y' d8 D nDestPos++;2 o& t% K" V# @# A$ x, i! H
} P$ ]4 c) Y6 h$ n( g6 V9 G
//取第一个元素的信息
' P4 u6 ~/ C1 p' A /*& J2 |' u: u0 N! s+ Z, u' @( a' f
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# U# c4 |/ f) U c$ B* B i+ v4 _ {0 e! V8 N# |& `4 R8 P* ]
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 @! H2 k5 o- W7 |
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: f) f! w+ w Q9 Y0 w4 L
}
+ o, B5 d* y7 n */, c4 c; d" \% G) _' a" H; k
//////////////////////////////////////////////////////////////////////////
( t5 U- ]- D9 G; Y2 S4 l" D break;
4 ?; m+ F; B/ w: D" G }1 G# ?& O1 A5 ]3 h
} 4 z$ h5 }: R* x
}* V0 E G* ~8 b6 F
m_wndMenu.SetVisible(FALSE);
0 e( E/ e7 j0 E
$ i$ c! i3 u- p: p( @+ n--------------------------------------------------------------------------------------------------------: m; z4 |- c+ K/ k, p ^# a4 ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)$ s) D, c* u% F: `4 a2 ^: M
{
" A7 q/ y! t4 z! m* T5 NBaseMouseCursor();9 {: Z! C2 @" J2 t: L$ P' B
}% v" ?0 L6 F6 p2 n. q( L& ~
在其下添加:; r1 N& ]" P& h0 O, h# D
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" L8 H6 y4 q7 V O$ ~4 b8 p$ ~' ^
{
6 d* R' [/ y; |7 I$ {; Pm_wndMenu.DeleteAllMenu();
O w, p! n% j9 Q/ Rm_wndMenu.CreateMenu(this);
0 @1 T! y+ D) A0 im_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
+ t$ B# ?, t* H
, L% j' Y) h: X6 V7 Cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 B1 \* s0 Y5 P
{3 |7 L# G% r. ~( Y7 X& l
//P以上级别才可以删除所有道具
3 J, v; o; Y- O7 E m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, A( [9 @7 @# ~& b7 P) a2 G6 w}) F5 K% |' P- j2 s5 f
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );5 @; ]* n& ?1 _3 x0 J. c; w* }
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 G1 O% c0 Z% k
m_wndMenu.SetFocus();
% m. h: ]& V( q$ q- V}; Z0 h( g9 ^1 [0 W
------------------------------------------------------------------------------------------------------------- C" c. F8 p# V& l ]7 @( e: {
*************************
/ x' |, j [0 e4 h" A" m, Q. hWndField.h文件% q: E8 R$ i' Y8 n1 V0 I
*************************
( `: i+ D( H1 ^$ R7 r搜索:BOOL m_bReport;
4 u6 i$ }2 N/ L2 E8 H |& O其后添加:
* H- U$ k% e+ {) eCWndMenu m_wndMenu;
* l7 e) a' y9 X2 f+ t2 A" [搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
* g1 q9 S* x/ y/ m其后添加:8 r0 m8 r i8 s M6 H
virtual void OnRButtonUp(UINT nFlags, CPoint point);' P- p1 D& }, X
+ Z. |( a6 F9 o5 N5 z- f$ C f! L) O. `: X
|
|