|
|
源文件中_Interface文件夹下WndField.cpp文件7 E! d+ A. Y+ ^% _5 E! s& ]- z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% i! B# Z' M# C3 W1 N- a/ B- o: X# G8 v' n! X
struct sItem+ ^' Q! |% K+ J' Q" \
{
5 D* O3 R% c7 ^& o( yDWORD dwId;$ P1 V" Z& M# M7 B: e
DWORD dwKind2;' Z2 L# g' G: r
DWORD dwItemId;3 ]: e- Q/ {; E# o9 K; }3 [2 p
BYTE nIndex;% B6 i, ^& S4 o8 V# R# m4 w
sItem(){
- y. J: ?0 j; N/ ^5 k dwId = dwKind2 = dwItemId = nIndex = 0;3 m9 s- q) O% n/ r m8 E @3 W
}
- S8 U1 N# x- Y$ O, X& \4 bbool operator < (const sItem p2)
. S7 U! G0 s- T' B8 v{ P4 O s2 O# u% U% o# s: V) L
if (dwKind2 == p2.dwKind2)
) @6 y( e, B: z# y2 y {
5 T6 ~/ p: v9 U% e( q0 f, D return dwItemId < p2.dwItemId;
- o, y5 N1 H( X }else{: p% |$ t8 ]) l0 t! G/ V3 d
return dwKind2 < p2.dwKind2;: U+ B; x* f* R- T( }& w) \' r
}0 ?* i! x% u' I! G7 e; N% |
}/ m% V% r+ `: |) C D
};3 T) Y4 p: f0 U- F- ?
class CInventorySort
1 G, ~8 X# U2 Y; g0 f; {{
# t0 [% D( i) x8 ipublic:
) G( l4 {/ c9 B* HCInventorySort()/ z i6 x( r+ i, o7 l: u& L9 O$ o! x
{' O+ c# P+ d. ]5 { ^8 S( x# }
m_dwPos = 0;' C4 R8 D# i d8 I6 @; `; o0 {
}. ]4 v* Z# p4 g
~CInventorySort(){}
9 O% f: u, S6 s: F l- g- l+ Uprivate:
5 l+ i) q7 R2 `7 U. @2 I/ n' } OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 Z" I5 d$ l3 C5 c9 R
DWORD m_dwPos;" ^, s. B- S# z9 \: j
public:$ B, R# N( y6 J- `5 ?
void Add(BYTE nIndex)
8 @9 q4 M+ `! c* ?, g{
# g" f4 n0 ~9 \$ R+ _6 d if (m_dwPos >= MAX_INVENTORY)
. r3 p( p3 x) \( ] {
" S) O6 P& D) i; Q return;
: N, T7 `0 d* I7 f2 V }( Z9 G* X: q$ { N. g# c ?
m_Item[m_dwPos].nIndex = nIndex;
& n( K' @( |9 s0 [* J0 E, V6 R m_Item[m_dwPos].dwId = m_dwPos;2 M7 k4 b7 {( K6 C" |7 o0 f" Z
m_dwPos++;% t) v1 F9 `1 p+ R& T. w! [
}
. g+ T1 O3 W) @$ \3 d" C" WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列: s4 [6 _7 o# z3 c( ]: I9 V$ [
{& ?% H, M& P! `0 `( h2 r" h
for (int i=0;i<MAX_INVENTORY;i++)
0 D, }* ` |, u4 G- w% J$ n- a3 ?: E {
6 {; \# m+ h, X7 L/ a6 M if (m_Item.dwId == dwId)& w9 `& k% A" b" j# t- T
{% G" Q4 ` U, t' z
return m_Item.nIndex;! f3 \% k8 a* b& }
}- y' ]; y7 ]& Y' R$ B
}( b I2 R& W2 x- I4 u/ n
return 255;3 v* A! P+ R) o! F8 b d( ] s
}
) _/ _ U4 i. T, G" M- S3 yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( f: \9 a) _7 p, ~) _! a( z) o' s- T
{
# n8 w' a$ z' @# u+ h5 y& a BYTE nTmp = 0;$ w4 L0 P/ [# z8 _5 T
bool bDest = false,bSrc = false;1 A- ?8 R% O+ [ z4 P: u
for (int i=0;i<MAX_INVENTORY;i++)
/ o% [$ c' m/ S0 R5 Y. J' `3 i { W4 J- H: v3 u# D: s' H
if (dwSrcId == m_Item.dwId)
/ z K: `! ^( n# O+ _# l {0 g l. N! M5 [/ J9 b8 z
//id相等 则 改变对应的dest和src
+ @. s/ D! n0 W; d6 ]) Y nTmp = m_Item.nIndex;
- T% C7 C) Y2 E/ B8 q m_Item.nIndex = dest;
1 A' z5 G$ \) R7 l, r }
3 A/ V: T3 H( Q) E6 ]( ~8 D) ^ }
2 \% c b' D+ d# k+ s! B/ y- l //临时数据保存完毕,交换开始
2 M7 F7 k: P" Y* ? for (int i=0;i<MAX_INVENTORY;i++)
- H9 q1 O% j2 x% Q$ u4 {+ ] {( r. j3 z. S# B3 X, J6 J7 E
if (dest == m_Item.nIndex)) H' f6 z& t* x6 d q) U
{
5 [2 v, ~5 j( T# A5 v- O //id相等 则 改变对应的dest和src
5 Y8 G# v" ?8 w m_Item.nIndex = nTmp;5 W( E* t" b8 b ^, {
}# Y( @: K: @1 u# H, ?
}; j& q s3 X+ z: G9 M
}
5 ^8 I/ y4 W, ?5 O. ?) r};
+ l- P0 B+ |7 z, P2 H5 D. U-------------------------------------------------------------------------
9 D4 _1 C S( j- x$ ~依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 z0 E& o: [, N( j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 ? P; G2 Y( e2 } d w9 d紧靠其上添加:
9 q) Y, i8 X9 ^: m4 R/ Gif( pWndBase == &m_wndMenu )
0 _0 {4 h2 k- D, f{& m% r5 @* }# P; d5 \8 i/ t3 R
switch( nID )+ x5 t f7 m" T0 f2 T" W
{ |, V& S+ m/ N; ?9 w J8 u
case 2:
( e" [: w+ v3 I* q { z5 q# P& a9 d- {) ^1 E
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
" {" N- v, q' t% H; I8 ?6 y if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% g/ R% Q; w! H
{* u: V6 I9 i' l
break;1 ~5 q0 O; A0 ]0 @ K
}/ ]2 W: G; D$ o& Z) T- A6 g/ U
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): F9 g, O; n2 `9 |
{
- D% L$ | P/ s5 R! a; w CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% L6 J/ y# s: L R( F4 Y3 b if( !pItemElem )" X$ q0 q/ Z$ C% Q$ J
continue;4 m, j. S1 P( d1 Y, E1 z/ k
if(pItemElem->GetExtra() > 0)
& ?) ?* \6 L1 _$ n# Q continue;
3 N) v/ h; T* w4 C; J+ _ if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) " w7 i3 ], l+ H0 d5 z! _4 i
continue;) e$ Q+ Z8 f- P! w) q' D$ B( S* A1 o
if( g_pPlayer->IsUsing( pItemElem ) )
! f( V" n, V% c' ?0 ^2 J0 n continue;. w& ~* R8 z% ^ X3 Z7 E2 K0 ]: z
if( pItemElem->IsUndestructable() == TRUE )
, E8 Z9 t9 @$ z. X3 ]/ b1 ^ {
. q; C. L4 f) o5 p4 T0 `# D% v T, [: I g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) ); I3 D9 f6 X# ]+ x! M) _8 I7 A
continue;1 f/ t: b& Z4 B: E
}9 R2 w; f5 v! w; E" U" [
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);4 Q* s& }% y: F
}. |9 U: Z+ i$ U* Z* ?1 x& o( E
break;
2 B6 i; R( q& S+ q9 G }
; [6 }5 a5 K" L+ N2 V7 r0 x case 1:
! t3 W8 v0 Q& i4 h( t" x8 s3 j {
8 X7 o% T, L' @5 B. ?9 B7 t3 | //整理背包9 _3 s, U. b( X! c/ k
//////////////////////////////////////////////////////////////////////////1 C6 W W' B" _8 [
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
) \( V8 w& v% m& _4 E //////////////////////////////////////////////////////////////////////////. s$ m9 S% A2 I
//////////////////////////////////////////////////////////////////////////
1 ~' N8 ~/ _2 ?& D k CInventorySort* pInvSort = new CInventorySort;
8 F. Q- L9 a+ q& E& I0 I7 E% m vector <sItem> vItem;
! j2 U2 ~& Z! \+ O, @. d* J% S vItem.resize(MAX_INVENTORY);//初始化大小9 |) }( j/ ^3 o- [
//////////////////////////////////////////////////////////////////////////4 i8 t5 _" S' L% j e- e/ B
//填充数据
! @4 q1 b* u" w0 a; ^* `: x for (int i=0;i<MAX_INVENTORY;i++)
; h9 K+ l) r4 e5 t' V( R( H {
1 ~, t( ?% @# S: F CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* z! j5 f% d9 L( Q( ]5 E if (!pItemElem)/ b. w/ s7 S, k
{1 G) \0 n v9 s2 d+ W& Z
vItem.dwKind2 = 0xffffffff;
% @- f; j# g3 z2 r* Q- {2 O) E vItem.dwItemId = 0xffffffff;! Z! N3 ~7 y' G8 S0 N: a4 ^+ f
vItem.nIndex = i;
* U2 E4 b- P' z+ K5 B5 f }else { [% Z2 `' x0 t6 n6 U0 Q1 @" }
ItemProp* pProp = pItemElem->GetProp();
1 M' x" K. S7 r vItem.dwKind2 = pProp->dwItemKind2;
3 `: k- U- W4 M1 M vItem.dwItemId = pItemElem->m_dwItemId;
" W ]& X i5 ]9 A, L7 i vItem.nIndex = i;3 Q& s5 K8 _+ T; u" U) {
}
9 I3 u5 q) u! @& r: M //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);9 u0 o7 S: z4 ?: v3 Z
}
' s' e1 T: g1 o) A5 O //////////////////////////////////////////////////////////////////////////6 G) y$ W% I G) d2 c6 w; p; w& [
sort(vItem.begin(),vItem.end());//排序
# L5 I3 \& y- e4 L" n1 x. I0 | //////////////////////////////////////////////////////////////////////////' {1 j; B& A" L$ s
//交换' {4 n S" e4 a6 D7 k
for (size_t i=0;i<vItem.size();i++)
- g, B5 B/ v0 Z8 U- M, A/ ~1 d {4 |7 V8 W" z- V. K$ _+ K. C
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- ^8 A7 {2 k4 \
pInvSort->Add(vItem.nIndex);5 W( t2 z/ @" i* h/ R( S8 U
}8 c! S% m5 F x/ S2 c9 ?( x
BYTE nDestPos = 0;" x) M2 i5 p. H
for (int i=0;i<MAX_INVENTORY;i++)/ m, m3 v& r6 E' n5 G; w- q7 g
{
C! l# L' F; n4 {4 B8 ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
4 s# U4 r+ M" U( C/ u) [( o. O! T g if (pItemElem). g4 n% ~; |- {, P) i
{ o- S* n# Z' S+ @0 _. y# R
if (IsUsingItem(pItemElem))
7 {% m6 ~2 S7 _+ l* s, M% v7 A' Q- l {* Y8 ]/ `5 M# v/ O
//这个位置无法放) M5 ^% r5 i7 g
nDestPos++;
0 P& z: Y/ R4 { }- Y) x, k, z0 m7 ^! L: Y
}
t. c; d. s- Q# \. L BYTE nSrc = pInvSort->GetItemSrc(i);
- K( t/ R" O2 p/ K5 l. h pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ H$ A* [5 S) q4 ~
if (pItemElem)5 {. m3 t% _$ l/ r
{- p0 t1 G0 {7 J/ N
if (IsUsingItem(pItemElem))
1 P: P, a$ S) b {1 r$ O% |! ^0 Y! {, p5 B: R
//这个道具无法移动,跳过
3 g' _6 n: s9 {) r' I" R continue;. n. @ u: K# A. q! \2 J' Y! r$ F
}
$ R+ s5 z& y) ^$ E) [+ n9 K4 Z8 X }else{* ]. B, T n, |, |! B
//空位置 不用动
+ [1 F' Z6 I5 f/ m$ I continue;
, H) r% W( q k# T1 u `0 J9 G. o }
; U* j' ?# K* J. G0 K3 P //////////////////////////////////////////////////////////////////////////1 m7 n9 O0 V" G1 R
//开始移动
$ c# X' D" w. R% o I if (nSrc == nDestPos)
# U' t: E# K, O# a8 N% U: W$ R( G {
2 o9 Z4 ?$ R ]1 |" j- B- |' V0 s% Z //原地不动
' Q# I- X8 f* Q `3 ^' l E6 w nDestPos++;" e* j! F! ?# Y, `. T7 t
continue;
1 F, g3 w2 W5 A4 C* a8 G }/ V- r3 K) u3 E+ v3 U; W% ]; f; @
pInvSort->MoveItem(i,nDestPos);
( m3 R4 N+ c1 D6 u g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 N( a$ \: N7 o Sleep(5);
3 r" w, u' B- [8 S9 v //Error("移动 - %d->%d",nSrc,nDestPos);
; [( y3 e. C6 E+ i/ ] nDestPos++;! `* q! |1 O5 k- }% a
}
* j" m8 g0 X9 R; c //取第一个元素的信息
8 S0 q) T0 \9 }& @( F4 U /*
% |, R- G: D. Y' A6 E if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)5 ^9 r4 ~* [3 ] K
{
' r9 W! F7 w8 C+ e% { Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ b7 f! Q5 Z! ~$ C: L3 i1 G6 @# `
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);0 z$ r2 z: J; X8 A" g4 _& B
}
! C+ a+ A& }1 i W2 g5 a, J */! a5 z: R O' {* i2 A
//////////////////////////////////////////////////////////////////////////
9 J1 b, @& ]& W break;
/ w5 D1 T" x" C! J }% S1 f! d# I* J- G7 G
} $ C7 u+ B N5 L& x& `
}/ Y* _. i. u" G) c! l9 m/ U3 i5 g
m_wndMenu.SetVisible(FALSE);) J+ @6 h1 L& O7 b% {3 Q
! W/ n# e2 A$ z& ?9 r" e, u
--------------------------------------------------------------------------------------------------------7 X# ^1 r: G% ]$ Q; u R
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 z5 m0 ]: {( A5 W7 V3 D{
( \4 A$ X# j) B* g- ~BaseMouseCursor();& `' i- E2 R/ q
} T' v/ b6 p8 V2 Q/ j
在其下添加:
8 d6 C- Q4 l4 M; e7 p; {) uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 x) ~* }4 v3 \0 v# C{
2 A. T+ y" C/ z9 U" E& z8 ?5 `. Pm_wndMenu.DeleteAllMenu();
6 q4 r0 `5 i2 a: l+ U# Z) Jm_wndMenu.CreateMenu(this);
1 u8 S9 Z! l( @- z2 R4 j. ~m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ y- n2 l2 ^# @6 n8 |
8 J) O" [( J% y' u. gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 m4 |$ ^( b* ^
{
1 X- b8 N3 H+ f+ M2 G1 g s$ } //P以上级别才可以删除所有道具
( t5 Y7 R) r( I9 c3 } m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ f" s4 u2 j. ~) H& `! c5 q( C; k
}0 J V6 ]! m6 ?/ D' a. k) G
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: f( h) k; ?0 D" O9 ~4 S
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" e; |2 D2 a* J, k; A0 n6 o2 N: R
m_wndMenu.SetFocus();, R2 r. ?6 l y8 S; f+ ?+ }& h
}" P' \: ^& {- ]8 V2 v4 C( h" R
------------------------------------------------------------------------------------------------------------2 {& i! w+ c' ?* e' [
*************************
- _8 D8 e. {& |' ?7 _( bWndField.h文件
( _/ f9 X8 f! M7 j* e! H& Z! T*************************% P4 [8 ~: _5 P2 J# \, @; Z0 Z
搜索:BOOL m_bReport;& T6 h3 b$ a: V3 B. j; F3 E* G- B
其后添加:
; g) j- z$ k" a O5 LCWndMenu m_wndMenu;
2 Z$ a2 C& @7 \2 m搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);( L8 X& T% M0 v5 g! P
其后添加:' ?% N( S, G9 J" n; m+ q2 V" w
virtual void OnRButtonUp(UINT nFlags, CPoint point);
m5 @5 E. i' e V8 F2 I
" c* s5 k4 n g; m
- h/ l# c- R `8 _$ @3 E |
|