|
|
源文件中_Interface文件夹下WndField.cpp文件( t+ N3 O7 H4 p8 ^9 S3 t0 F
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 N9 `4 B+ I" @4 d. P5 w8 ]5 K3 h4 ?7 W* L" z/ P3 ? ]
struct sItem
; t$ C/ s: `* ]9 m{
7 c, I2 j' b1 r% A" e0 EDWORD dwId;
2 I: H4 s, E$ LDWORD dwKind2;
+ `6 @- t. v' `4 S9 }- XDWORD dwItemId;
; L: l+ ~4 f) B3 iBYTE nIndex;, N) M/ R7 D; T8 p: U) Q
sItem(){
8 D; k5 B" \/ o' S& v dwId = dwKind2 = dwItemId = nIndex = 0;
/ G; Z0 ]# M2 [0 n% y; W- e. f}" s _( L- k. n; ?
bool operator < (const sItem p2)% z! J* u3 K4 ^% ~# t
{ H* ^/ v4 c0 b- C T+ R
if (dwKind2 == p2.dwKind2)) _5 t, l, o0 c9 H$ Z
{
3 T5 U) X2 ^5 a* b/ k return dwItemId < p2.dwItemId;/ \* i" i v, m( m
}else{/ Y4 f5 E! u# ^( [# J0 C
return dwKind2 < p2.dwKind2;1 k' n9 D: N4 R5 \% K
}- |* M3 H$ q) O8 d9 o$ y% m7 ]6 h1 h
}
5 ?$ A* ^ ~) J};
5 s! u5 X+ q9 }) nclass CInventorySort
" V, I7 r0 U) `' U x{
; r( ]& j' a# `8 r+ T6 `- r; dpublic:- g8 x- N& j+ e
CInventorySort()8 b) F: B6 Z. o# |" b6 A* Q
{
: K$ H* s& ~7 M- y% ?) y9 V m_dwPos = 0;5 O- k/ ?- h6 p4 ?5 ~9 C
}
3 n, A# r3 a) A) E0 F' Z' p4 g c~CInventorySort(){}0 l& i$ H" O7 e
private:0 B# V0 n- Y6 t7 I* G# O% n
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
5 z2 m8 y# u/ ]" EDWORD m_dwPos;! ~2 _7 @2 z6 B: g0 s* P/ x
public:
6 ]0 F$ e! b; R& a# N3 D) n/ wvoid Add(BYTE nIndex)
2 J* e4 f, o2 {/ O7 }. F{) _+ r w) C4 b4 y/ h" B: P
if (m_dwPos >= MAX_INVENTORY)
! m8 ^: m9 ?0 X, R2 h% T {9 e. n& _/ v- h2 c7 @$ K
return;
- X- H; c4 T7 Q5 Z }
4 [$ t4 O0 C9 P m_Item[m_dwPos].nIndex = nIndex;
. ~5 S0 R+ r/ [! B/ y# R m_Item[m_dwPos].dwId = m_dwPos;
+ H, d) y4 w+ Z2 M% Z m_dwPos++;
& J. |7 n6 E; r" a}
3 H2 B' I* p) y+ FBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列4 u u U( D" q9 n' y* I0 f
{8 W0 g# M6 w; L/ a
for (int i=0;i<MAX_INVENTORY;i++); r7 W' M M! G: ?- G* ~
{ r) y2 r7 k6 |3 Z# E3 M
if (m_Item.dwId == dwId)# f* ?) _! ^& a3 y+ s3 {
{- ^4 d- p. t$ ]5 C
return m_Item.nIndex;# v0 x0 |) F* s' ~, }" u7 m
}
& c6 h7 l# c1 K$ F( [. c+ b' U: y }
. W- O/ [6 y; V) X return 255;
+ p! o: U. y/ |5 i: j! u}
2 ]- o5 r5 C; n) \void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) n/ { z. t; u0 S
{6 A9 O! B* M* \
BYTE nTmp = 0;
. U+ s5 N, u5 h) J* @ bool bDest = false,bSrc = false;7 v; g; D( W8 y* f+ i i
for (int i=0;i<MAX_INVENTORY;i++)/ M7 Y: G7 _ L" C( _! c
{
A- J; g/ }# @6 W7 Q+ `- W if (dwSrcId == m_Item.dwId)6 p3 I/ K# K. C e4 }5 i7 a) B
{# N0 C7 u$ |* q3 k' q" W) H# I& N
//id相等 则 改变对应的dest和src9 _3 x% s F9 l, T7 a4 m6 r
nTmp = m_Item.nIndex;
) ?+ `# j# D+ |( g7 v( |3 K m_Item.nIndex = dest;
. _" Q! \( x. `7 J6 J) y }
. S; ^8 ]* p: n$ L# n$ h+ V7 T5 F }" Z: _$ `+ u& a# T$ G H7 E1 g1 B
//临时数据保存完毕,交换开始7 i% J! H4 v: K2 M/ {% u
for (int i=0;i<MAX_INVENTORY;i++), k) {4 U1 z* z- O2 V7 x4 h' ^, B8 h" R
{1 n* B: u, `% l$ }( y
if (dest == m_Item.nIndex)
9 C9 O9 |& l$ a" u* x7 l$ y, j, G {
& V# J5 l2 j+ \0 }+ [3 A* ^ //id相等 则 改变对应的dest和src3 q. P# Q+ @8 u, ]7 O
m_Item.nIndex = nTmp;
r6 }* m) D+ b! q' ^ }
2 d0 k4 I) j2 a }
0 k* R# s) h1 H}
3 O& C& U) V5 e7 O7 c};6 ], X- ? l* c8 p' F" ^
-------------------------------------------------------------------------2 i) p( n. s9 f( N* W4 P
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ O5 m$ e; c9 Z( v7 I0 j搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 X3 N- R. V7 a4 L2 X1 O紧靠其上添加:
% G* y% N) G$ }4 S2 Gif( pWndBase == &m_wndMenu )
^' o# i7 I" x3 _' }+ v+ o. t{
3 W4 [8 E" u! V u& J+ z6 O0 A switch( nID )# [6 x0 J( l1 W0 l0 E/ H k) M
{
r; C0 G. c$ Y, h+ E- ?$ J case 2:+ d% l4 ?( f* F5 E
{
6 @, j* y( \& Z //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);+ o1 C$ m* v0 o8 E$ q
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 @3 l3 ^( h1 y' Z- \* H5 I {4 v ~3 |/ B& n7 [; ?/ c# I; K
break;+ g R" d, B, L1 \" p
}" e u; A; Q6 g
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 }8 T& m) G N7 p {: A6 d$ q! ]8 W4 f0 K- s1 s! [
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
' O" M, |* M/ E- G x3 B if( !pItemElem )9 P/ \; \$ H, Y _' k
continue;) I; i: m0 [) _9 m5 A( v# ]! Z
if(pItemElem->GetExtra() > 0)
: M* p& Y: C: @( o continue;6 T4 E( ]1 W4 ]# f5 E9 H+ B- J% r' N+ Z
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) + A) r7 q. s X; N
continue;# m( ^( H1 s: U1 x. A# J6 w
if( g_pPlayer->IsUsing( pItemElem ) )
, I* h5 f% x, ]7 P* [' F/ T continue;
3 R% V+ j: o! j4 o1 B6 Z# _. P if( pItemElem->IsUndestructable() == TRUE )2 U- |; w3 h* u- a3 J
{+ P- ^4 ]# d0 g
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 ~# h: f0 e0 L4 }7 F5 `
continue;0 M5 n" V" J# b6 d# V" E
} P. X4 X, n3 q3 R8 `; l3 G6 x
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! B8 ]$ U. U* Y; n1 g- N
} h7 j- S; F! M1 F# J% {
break;
. G( Y2 Q1 F3 N @( K4 j4 N# N }- E( t& A! ^5 c4 @* a+ b8 I
case 1:+ U; o' s# x$ f' r; \& s5 t) i$ A
{3 [7 [! F' z' j1 S/ D1 i
//整理背包
7 D# Y/ x* z3 `; t& i //////////////////////////////////////////////////////////////////////////) `8 S8 a) w/ |. M! \1 ]9 @# T
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
+ D2 Z0 f0 o$ x, n+ r( Q5 S" Q2 Q /////////////////////////////////////////////////////////////////////////// M4 w$ x d' o4 _, Q
//////////////////////////////////////////////////////////////////////////
6 b& _! T0 i" _) u- K CInventorySort* pInvSort = new CInventorySort;- z8 L0 H j7 a4 e! ]! k
vector <sItem> vItem;! s" a* Q* b# J8 Q' |. [. h- y
vItem.resize(MAX_INVENTORY);//初始化大小/ D3 s/ L5 t$ n7 N+ R
//////////////////////////////////////////////////////////////////////////
" e5 d! k* B5 R0 v- _ //填充数据
& [! {3 H! g+ W# H8 h for (int i=0;i<MAX_INVENTORY;i++)
2 w& G$ I) ?! H+ g5 S4 ] {9 X9 e5 }1 Y, c7 Z3 @! _- n% w
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& b$ m+ d6 Y1 `9 l; E! J
if (!pItemElem)) r: f4 l& c1 X& Q9 g4 g
{$ F& q; U7 Q- f& f J' y
vItem.dwKind2 = 0xffffffff;/ a# `5 Y1 W$ Z0 x! N$ L
vItem.dwItemId = 0xffffffff;
O$ o G8 K- O& t9 o# f& q/ w vItem.nIndex = i;
7 m$ m+ M/ _' s! w W( M }else {
# m8 E& V& g$ C' q ItemProp* pProp = pItemElem->GetProp();
. h0 L+ [, p" O8 T! N' R vItem.dwKind2 = pProp->dwItemKind2;$ y9 U2 o( L: W* H8 Z) W. V
vItem.dwItemId = pItemElem->m_dwItemId;
3 ^( o/ ~4 ~3 @! K ] vItem.nIndex = i;
2 R0 S: N+ X& k) d6 x9 |1 Z }
" J! d9 i1 P/ Y4 j5 \ //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# A' k9 d) h4 k6 e! A/ B
}
5 k# B! o+ p* {% `) @; l& i- ^2 { //////////////////////////////////////////////////////////////////////////' L* \ w$ M) R
sort(vItem.begin(),vItem.end());//排序% h& l/ c$ Z8 Z H1 ~: t
/////////////////////////////////////////////////////////////////////////// m; x" T1 A& ~+ L, h% n
//交换 l. c4 @; z" Z$ a% R; Y7 j
for (size_t i=0;i<vItem.size();i++) w. F+ T: Y8 l/ h$ m. D
{
; g/ ]" j' B; P7 j& {6 R1 U# O( W, [ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" B1 G! D, l4 ^5 Q# r" o7 h% Q pInvSort->Add(vItem.nIndex);
2 M$ s: _3 a* O, p- e7 p8 T }
6 B4 w j, L, g& `8 n/ S- { BYTE nDestPos = 0;" F% O9 y9 Y/ S8 v0 d
for (int i=0;i<MAX_INVENTORY;i++). n( E2 S% R0 v$ j1 R
{! ]% l* u% r9 X- I% S" A
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos); V- F0 W1 t) @4 z+ q8 h8 G
if (pItemElem)
" P# P: Y/ N6 g {; ~/ G5 Z9 F( g# @+ m4 J8 ^
if (IsUsingItem(pItemElem))( Q. G# U& h5 h8 J t
{
5 S) S, n; B& j2 c3 @ //这个位置无法放; |. \8 R) c3 |1 ^* ?
nDestPos++;1 |9 |$ p- _' b( X# a. x6 ^- A
}
3 X! b. Q% i7 {! M2 _9 i/ P }( y( p) A% }7 Q7 r! ]1 ]6 U
BYTE nSrc = pInvSort->GetItemSrc(i);/ y3 T9 S! l- z5 J; J s& B% E
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
0 s0 ]+ D* A" R5 ?6 V* y N/ u if (pItemElem)
, S7 o8 a- C5 y/ l$ z! f* n {5 c# W! W' ?3 E5 h% Z
if (IsUsingItem(pItemElem))
M6 r8 c8 L) L* @' @' s {9 W/ s7 ?6 {6 t5 t
//这个道具无法移动,跳过
2 A* B/ \5 ]+ z& B6 ? r5 j continue;
5 t0 b6 m( ^! M5 j }* I3 ?* w' R% C0 I9 @
}else{
( o& \+ y, v: q+ k& O //空位置 不用动' i8 @% t. p! J, R
continue;; _0 ]- `' w: L6 s
}
4 Z3 _5 V8 v4 ]- r$ F( p( z //////////////////////////////////////////////////////////////////////////& [2 R. k* k- U! Q Q
//开始移动. @) z& k( ?: U: n' v( |
if (nSrc == nDestPos)
6 M8 l R U" L; |7 S) Q {
/ x/ b9 a" U; ]! _+ D+ } //原地不动
% C$ y- Z0 O+ Y. f nDestPos++;
3 D& \7 A" f4 S/ f9 d$ H continue;
3 E) b& [4 R, v& Q/ R% _+ Z+ T/ m) ]- o. x }' @4 C( J* j: K8 X4 L
pInvSort->MoveItem(i,nDestPos);
+ y- j6 E5 h6 r. N1 d" y7 X g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# X% e. \/ b6 D0 K" q Sleep(5);
: f2 l8 Z' [, J4 l5 [1 t# F //Error("移动 - %d->%d",nSrc,nDestPos);
8 n& T" ~2 u- J. h5 D. r/ { nDestPos++;
3 j, s& Z* b0 m$ b" t7 X$ o }2 b1 f0 X. j1 ?6 S& ^$ g
//取第一个元素的信息
8 K$ ^: X; D6 F) q" [, W% r B# M /*
3 L1 q' _# {# b: K- J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff). F2 [, Q* n, y2 D
{
j6 ?3 W" ^, R2 N: s. a) b. G9 g Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ m/ {6 |) a3 L3 q/ C ?" o g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
. q& c! y4 x. G }
9 y& _' T! j+ y% n */
+ w" a- n, |4 u9 y0 z //////////////////////////////////////////////////////////////////////////5 q! k' d. w8 x0 r* e
break;3 x f4 m5 O. e$ z8 D& L
}
9 w5 n; c \ @3 t) w% H6 l } 0 P, z: k- E$ e+ o& h& J- U
}, |2 b s- ]" ?7 E$ j! Y
m_wndMenu.SetVisible(FALSE);% H- d$ x2 _# P# u, u) u5 {- n0 t: e) q
z, X+ G& A# A
--------------------------------------------------------------------------------------------------------! ]3 K8 G# O1 B! L1 P; @5 ^ t B
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 `$ v* X; \+ l6 m
{2 h8 D) ]8 f ?; k
BaseMouseCursor();; P* U7 x) P& A# p
}1 q' ?4 m& _5 N8 w: L
在其下添加:( F. N3 X2 r( m+ B* b
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 Q" G8 W; p5 A' C" B
{
3 q0 I3 D3 K n @; C0 W6 n& j) mm_wndMenu.DeleteAllMenu();
0 H5 b% X9 }# P' Gm_wndMenu.CreateMenu(this);* R0 }6 D) P+ y% t( T+ ^
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 T, O7 y Z' v3 j
' i/ A* t# C3 n' o/ ^$ `, w) l3 K7 H- F) Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
, x2 E, E3 T; U2 Z{
/ S* }6 v0 R; r1 E% l //P以上级别才可以删除所有道具: n0 s7 ^4 n6 k5 g7 z0 G, r
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 h% E& Y# Z$ [9 e8 X" K2 ?
}
# M# x' t7 ^7 O2 N& q; X/ Xm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 E2 ~6 J7 B8 Q$ @% q _
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. B8 Z+ W( t3 T
m_wndMenu.SetFocus();/ y1 b8 @* n; G8 a5 o& I" u
} G) B a9 x7 ]! k/ p
------------------------------------------------------------------------------------------------------------, X0 n% n+ Q+ L: b+ x" z' [: ?( [. f
*************************
9 `; `. r, W% w, p/ F7 b- cWndField.h文件
6 i0 F4 @8 c* X3 l9 G& }*************************
! x& g8 A; a; |. E" o# _8 ]搜索:BOOL m_bReport;4 k* g* Z) S# W4 g
其后添加:
" L8 I3 r% v+ y* m+ D: n& QCWndMenu m_wndMenu;& c* u& R6 U" V8 Z
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);2 @) F' `% J5 }5 B3 \
其后添加:/ q1 K' f" p2 l) o+ w+ i3 a B
virtual void OnRButtonUp(UINT nFlags, CPoint point);) f6 ]' {4 P7 U: C) ~) p! O3 K
6 a, {0 a2 [* G
5 q6 p* l' ~- C1 N
|
|