|
|
源文件中_Interface文件夹下WndField.cpp文件
2 y w1 f4 r e7 ` F5 d T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ a8 e& |) N/ {$ t1 j; c
- f7 a$ v7 Q% ?struct sItem
, {7 K4 ` a" @- A5 k9 b{
/ s3 P$ b. F6 F1 S @- ?# s9 e( F; ~DWORD dwId;9 D: a3 a* M+ E0 x% N9 p7 h: n4 U* i4 M
DWORD dwKind2;
1 Q% h0 M) A+ K$ `DWORD dwItemId;( [" x+ Q7 x1 j6 \; Z& Z, B
BYTE nIndex;2 D8 A# ^* I0 J0 N
sItem(){. v4 `& a$ s0 Y" s1 d5 E; i0 x( p
dwId = dwKind2 = dwItemId = nIndex = 0;
j0 R+ H0 T" q1 F+ P) D! U}
! J1 E( ]+ I) c- z" }bool operator < (const sItem p2)
. o+ E' S0 s1 z% b; `2 _2 I3 z{
9 P. I- m1 T# l( G if (dwKind2 == p2.dwKind2)
; c t, S7 a# }) [) y {
# g: J8 k3 x; h+ k$ H' r return dwItemId < p2.dwItemId;
+ w# R; g* I) c( L8 J' M- Y' q }else{
0 i R/ I. @- \% S+ S# P+ W return dwKind2 < p2.dwKind2;
# _8 w8 J& [& w8 i2 M }/ s2 w4 w( N: I: y+ y7 i( Z
}
4 c$ q3 I, |0 `9 T};0 b' D1 N5 i# v" J
class CInventorySort# G4 x" \: B" G3 J- ^
{
3 X: x% a# W2 P( Y; I" Opublic:# X% i W- R. n' k
CInventorySort()
$ l/ W* q1 h' F( c) ~3 m{
5 f h% H0 h2 ?( j7 V m_dwPos = 0;: u/ a, Q8 E) D7 [" b
}: N! e* R$ C& a5 c
~CInventorySort(){}
7 y& b/ r6 Y* Dprivate:+ h# n; _+ O" k( v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: {$ [9 ~! N5 E. c
DWORD m_dwPos;" d) G9 ~/ p$ t x- A: u R) A) G
public:
7 ]2 j! [2 m6 \+ Y7 l8 a* Z4 evoid Add(BYTE nIndex)
# W4 A& E" R; v; w2 f; O- r{) a- M: i: O/ L( I
if (m_dwPos >= MAX_INVENTORY)
- {5 Q5 l# S6 r; P! @( {: y {
a1 S5 ?- m1 |* M# B" U J, u1 L return;' ^1 U5 M; }: d, z& w& C+ u! i
}
7 ~ S E) _4 Z: k m_Item[m_dwPos].nIndex = nIndex;
) T t" D" |4 | m_Item[m_dwPos].dwId = m_dwPos;
' N& o' z9 x! P. V m_dwPos++;7 l& k+ ]- h& R7 a1 D
}
# ]. n1 |' ]+ @: eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 o6 _, i h: ?0 v G' Z{% v& r9 `! c# \) l
for (int i=0;i<MAX_INVENTORY;i++)
7 x$ T# R4 r$ H4 B {. n; g7 [% M, o9 u1 G! Q
if (m_Item.dwId == dwId)
7 |* w) c \/ ~6 m {
& S. b$ V! [% p return m_Item.nIndex;
2 B& G1 i4 K" s3 q" d& P3 S }
- X5 d1 A( ^3 t7 f9 z# r }
' J' F) W2 L1 F" C f/ F/ C8 K. H return 255;0 E( W& s) P' v* c- X
}
3 S) V) v1 M) n: j5 N& ?; Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, _) i+ |5 t9 p* k
{* M. R0 U2 v( V9 C2 s
BYTE nTmp = 0;, c |8 Q& X2 k# K1 }- ]
bool bDest = false,bSrc = false;! E" C8 r" C- A% `7 P) M/ f
for (int i=0;i<MAX_INVENTORY;i++)( }) ^% w$ ~* s+ m) p+ e
{
: d, c0 g! k! C* y5 O! z! U5 e& { if (dwSrcId == m_Item.dwId)% T6 P% y# b- p1 \0 h/ X/ B+ l
{
8 ~0 v" u6 ~6 y //id相等 则 改变对应的dest和src
2 J* B4 R2 ^7 P% _ nTmp = m_Item.nIndex;
9 L; H) O5 _+ a+ q5 B m_Item.nIndex = dest;' _; N& G9 s: z0 S7 r
}9 A0 [& q1 g+ l' o0 W' {3 c
}
: k/ ?5 H) S* b" X8 B' f //临时数据保存完毕,交换开始/ z5 J% ?! W5 }' s: |
for (int i=0;i<MAX_INVENTORY;i++)1 ~$ V @7 M9 [, [( M/ b4 L( ]
{
1 W! i7 X: W- H9 { if (dest == m_Item.nIndex)
6 m6 f. o: U1 |/ S {, q6 o' z1 a( u0 T
//id相等 则 改变对应的dest和src0 H) |5 F- H+ o; M* a
m_Item.nIndex = nTmp;. S: p( d) X, {+ H* W: P+ {) m
}
! ]* @6 `$ Q0 d }0 s8 O, q/ @% S0 s* q
}7 `' r+ N+ t D9 H( ~
};
9 u# Y1 R" _" ~' J' O) E& S9 u7 I-------------------------------------------------------------------------
# s2 \; ]& ]5 x% z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: U6 J0 c6 y; W( m O2 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% Y& f7 U% m6 I7 m$ \$ z/ Z3 l1 {紧靠其上添加:
: @$ i: r+ h% `6 Hif( pWndBase == &m_wndMenu )
2 Z* ^" k+ ?' W3 a5 S{
, l! y/ e' K/ N, O& |* W switch( nID )
( J6 x" t6 U- v {
! c1 `7 _7 ~/ L7 C! q6 [5 C, w/ N case 2:- Y7 U" w9 Y# w1 t& K; m
{
' q' r4 j' H$ `* e8 [6 U$ s* U //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, |2 I! e n1 b& r if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- x- N1 |2 j; W9 r( m7 A0 i- N a {" a& z+ N$ m5 }, {( {0 {9 S* ^
break;. J( N* `" ?3 ^2 L
}- X ^* e# D0 c* l. @, i# y' J
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* v# P/ A9 b4 r2 X7 x# R4 j
{
7 ^7 x, w" [4 F r8 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- w2 W7 a- i' U% Q$ x
if( !pItemElem ). K' |5 Y- x$ C& e7 t0 Z5 B
continue;
3 l% L/ k4 @3 Q3 z1 E W/ ^* e0 _ if(pItemElem->GetExtra() > 0)
9 h3 r. x- X) I. u/ ` continue;
/ A y& ?- l/ o3 N! X4 d' M if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : p8 {5 i0 p$ u7 h
continue;
, R5 ^9 K3 N, J' R8 ]: C if( g_pPlayer->IsUsing( pItemElem ) )* O: G, h9 ^ V/ K' s1 X, C/ a+ O, w
continue;
! q; O- o1 y# ^3 e/ ]- h1 u/ ^ v if( pItemElem->IsUndestructable() == TRUE )7 E b! t7 d# c
{ o. X: O4 G3 j! v4 q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 x7 A; w, j5 i+ n+ x# N! j
continue;/ Y8 t( D& V( ^0 q7 [0 b
}
6 H1 @3 k3 {, l) W g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) {4 ?$ \( G" Y( a5 l4 o
}1 s4 s- p4 f8 ]2 U2 L
break;2 g. ?8 K q) B, z
}1 B! m, ?2 Y8 x6 |
case 1:
' n' Q4 p4 d7 x- x {
+ v. b6 z( D, Q0 s //整理背包, C! r$ N$ D y U+ T. N
//////////////////////////////////////////////////////////////////////////) e" u5 J0 Z2 `+ w* ]' ?7 C0 g
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. ?8 O" Z x6 a9 n* O //////////////////////////////////////////////////////////////////////////
/ v; @, f2 d" c$ Z$ _ //////////////////////////////////////////////////////////////////////////5 F' u, J5 ]2 S! I1 l% n- y
CInventorySort* pInvSort = new CInventorySort;
3 r1 F, Z0 X) i H" c" _4 [3 d vector <sItem> vItem;! w- S* n) N! B. g6 D& l# H
vItem.resize(MAX_INVENTORY);//初始化大小
. p: ~' t6 [. x' I2 ?, L //////////////////////////////////////////////////////////////////////////
# I" Q1 x2 T5 C/ K$ Q //填充数据$ l% q' l, M( h7 b! `, u- k" q
for (int i=0;i<MAX_INVENTORY;i++)
- s' g/ l/ a/ ~ {
1 c. i7 d* X p+ T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, f6 V: F* e2 d- K' g$ k3 Y9 J: X7 x if (!pItemElem)
5 y( o+ K/ n; K: T1 Q" c. J' o3 m7 o {
3 [1 o6 D' F- O! j$ S3 m6 b) |# b vItem.dwKind2 = 0xffffffff;5 W+ v8 i2 D8 Q2 S
vItem.dwItemId = 0xffffffff;- Z% P' o! d4 ]" E v
vItem.nIndex = i;) Q* c: b8 ^& [2 ^2 `; S* h6 I6 W
}else {) X, }% T7 s9 \. c4 [* d
ItemProp* pProp = pItemElem->GetProp();6 M# k2 R) @/ t! p8 R
vItem.dwKind2 = pProp->dwItemKind2;9 Y, X9 N/ d6 l2 g) O2 A
vItem.dwItemId = pItemElem->m_dwItemId;
, b0 Z! Y. M* u5 v vItem.nIndex = i;3 t/ z% E4 y7 {: Z
}
4 s2 F) N( v) o4 ~' V //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" i) {7 P5 o1 g$ e
}
6 }+ E" L. ^+ H4 o# ]2 g* G //////////////////////////////////////////////////////////////////////////
+ T7 H: j2 S2 D* c sort(vItem.begin(),vItem.end());//排序1 k$ o2 u( s4 b
//////////////////////////////////////////////////////////////////////////) i. U0 ?: W% N
//交换
; i2 u5 ^( j0 p6 m$ R! k for (size_t i=0;i<vItem.size();i++)
% G1 P; m: J0 x! I3 z {
: L$ b+ G% y( j. |; E; z* n$ k& R //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( B2 @4 F; ]/ e$ P2 D5 E
pInvSort->Add(vItem.nIndex);- J/ H& c$ I9 ^! X' d
}
% C% c0 p" R9 j: |8 U, z9 ? BYTE nDestPos = 0;
( ^; ]8 r! |5 L6 I for (int i=0;i<MAX_INVENTORY;i++)
* Q& ~- U% B& {% k% I {/ f& [/ ^, Y/ `/ C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, w1 i$ |/ f1 g# _3 W( K" {
if (pItemElem)( e! s9 V* g+ I/ y/ O
{
# r& u2 {1 v& \7 L if (IsUsingItem(pItemElem)) u( s) f" m1 i- |; p
{& l1 B( y+ r2 H- b8 W% j: B& n3 H
//这个位置无法放" ], ~1 z2 u6 q% d A. H4 o7 d
nDestPos++;
9 t @$ ~8 o6 m }
( O3 T4 F+ h/ J. p c }
; o: i z: U$ } T BYTE nSrc = pInvSort->GetItemSrc(i);
6 s: [+ u7 u& o0 x9 d pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
p$ m. B% V& i. l& D if (pItemElem)
& g4 k1 ~2 j# L {
* L! `. v: ^1 V if (IsUsingItem(pItemElem))
/ W% l% t' W1 \+ O2 @ {
# Z) {: Y% c5 }# P- [2 \5 X6 g, Y //这个道具无法移动,跳过& P" `! e& _& z
continue;
/ n5 C' l f( i }
5 T& H/ g% A* c! W) `' O D }else{/ ^9 r- V( H3 R, x- M
//空位置 不用动, U& O/ m/ ^6 a6 e! c6 ?
continue;
; l% D- |( g8 f4 X3 ? P" c+ f7 w }0 K+ O# l* K) @9 Y( v
//////////////////////////////////////////////////////////////////////////" P& Q/ r/ l9 Q. M
//开始移动
z; i( ]+ q x/ e if (nSrc == nDestPos)% r+ |/ z! ?' I/ B
{1 j# o, ~, D2 s/ j W0 t
//原地不动+ T5 S$ l3 _$ p- |
nDestPos++;
6 Z5 G' C6 \* T) O' J: Q8 u | continue;' V& h" X8 S4 U s. f8 J8 j# c& \
}6 N) ]* K. c/ x+ T* ]$ f# ?
pInvSort->MoveItem(i,nDestPos);- {( ^% i1 {' j+ }) {# Z
g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ Z& N0 m# g! K8 V# R% A7 t Sleep(5);
6 X4 R0 m+ ]% w2 Q" ?. o4 E$ @6 d //Error("移动 - %d->%d",nSrc,nDestPos);
( v8 {3 s3 I0 O, J' h: N y4 o5 F! u* ` nDestPos++;
" v- a8 Z9 R, \9 N; P U* e }) e7 ]: X6 X; H, g4 h
//取第一个元素的信息, K, q# [" w: m) q
/** g9 `+ P" M; Q- y
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ ]$ E4 w' }2 t+ }! c8 T
{, O- \9 G4 Z# @- _% M
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 t0 @: B. [2 w5 d g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* n2 n9 w. p# M4 [ V
}: _' P* f. s+ g# e$ \: E: i% {
*/* ~9 A4 W% r$ r7 K# y4 T
//////////////////////////////////////////////////////////////////////////
: l* r! q6 C; o( u/ V- R! s8 J# { break;
8 O" j% R7 H/ k. W) f, S }
: ? x2 M0 ]7 f% n* }: y6 r } # A4 F& u5 X+ z3 i4 g) m6 ]
}
1 C2 ?5 L! Y( ?" ^" @' Um_wndMenu.SetVisible(FALSE);
4 K. H- K( h: U& k h4 e! s5 c8 q; X1 t. a: v$ V% c
--------------------------------------------------------------------------------------------------------
, j4 B7 D7 [0 s7 A* ^4 g) S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 s" f k: Z3 w0 E4 f
{) s$ q9 E1 q2 B5 U
BaseMouseCursor();! }" S6 n I- H4 f. s+ G' B' `
}
3 r3 O+ o0 Y# |在其下添加:( h- w4 D0 l0 O: s% o9 h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 @5 U$ s6 g: @8 ?4 ]4 g8 ^2 c: b
{3 q, F$ l& u% q4 K# X1 h3 e" t: O
m_wndMenu.DeleteAllMenu();
1 X5 f8 }+ o8 K' o5 Bm_wndMenu.CreateMenu(this);5 U" [& Z5 v" J- k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& h. {0 s7 l- K/ N$ W9 i. \: s1 i- \# J2 x$ b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 y: F7 w# n! D
{7 u$ K3 A+ x- q3 U7 u n6 c& g
//P以上级别才可以删除所有道具: P% k C; e4 s. W9 S
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 T) n- p& [: g6 T4 C. G1 }
}
6 ]2 L7 Z. X+ A4 X V+ t3 fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( M; p" G* F! d' H! M6 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: H" E# x, T- {+ W% e; r. [8 O% {& \6 d
m_wndMenu.SetFocus();
& H" }& [" T, g1 }5 |. j}4 u' t* E' _9 Q7 o, x J8 o' l
------------------------------------------------------------------------------------------------------------
4 K$ }3 A4 v3 _. `+ \*************************. A- g) B, b' D) E; _7 `
WndField.h文件* Q, W n2 G# j) G' r
*************************
* T& O; [$ x: ~* X9 V搜索:BOOL m_bReport;0 o# t5 U# E, B
其后添加:
8 ~' H- T/ A5 S# V0 `+ y) fCWndMenu m_wndMenu;
9 N z7 ^, T" E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 O" t2 i* L: B
其后添加:' B) P: `: b" q& N1 I1 {" K& D
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 S0 ^, W! Z1 ~" i
/ z( l7 O/ O5 [* k. \4 k( E E2 ~
v8 a# f, C* G+ J |
|