|
|
源文件中_Interface文件夹下WndField.cpp文件
1 ^# L: h1 E5 T0 t搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* f$ `' v% ~. T
3 N2 m$ Z) g" X7 R \
struct sItem
+ E+ L' f' M0 H3 l9 o0 P: h% X{" P8 X; Y7 C6 E9 ^7 t/ D
DWORD dwId;
1 o2 H. ^7 o$ }+ jDWORD dwKind2;
' \% p0 ~5 B( vDWORD dwItemId;: w4 ?; _' D2 k3 v h
BYTE nIndex;5 z$ Q8 S: r, M4 t1 _) \
sItem(){
0 j( w0 E) w- o" ? dwId = dwKind2 = dwItemId = nIndex = 0;' s* C( p( w0 `" R
}
! j/ ^) ~: G; {; j& l! ^# Lbool operator < (const sItem p2)
0 x2 M3 n( Z# T: Q8 B, b) ?{
4 e) t( N) d0 ]/ Y) Y if (dwKind2 == p2.dwKind2)
& _; L/ b- _- t {; b4 ~8 T+ C! a4 D
return dwItemId < p2.dwItemId;, {4 i/ c' O# b" J% h
}else{
% T9 K/ j9 s" h0 `5 R return dwKind2 < p2.dwKind2;/ |4 |3 M8 p7 O( r# Q% ?
}+ h1 ]! b/ A, D
}
! [: ~& N; e& D4 Q, `0 r: l};: i4 [2 E) @: S% L" ?3 |
class CInventorySort
& h' J* ?0 z( ~5 @% j3 N6 I/ ]{0 ~! g1 I3 R' L% c. U' A
public:
: V% |5 o* q3 E5 z7 O6 I* {CInventorySort()
" ?' p4 M3 @' s, g9 e{7 R- x9 L2 N" @3 C& q
m_dwPos = 0;
/ r) e4 p/ b7 c% P3 @2 b1 j) f* I$ T. t}) L! K4 z, ^; K7 L+ b1 K# a8 d$ M8 }1 r
~CInventorySort(){}
- H. M% F6 W- j. M& @) `private:1 W+ _6 ]. o" L/ d' d+ ^; d% v" M
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息 w/ Z$ L% }7 z- l% E0 k! B/ |# {0 i
DWORD m_dwPos;
# G& ]" w: F1 ?9 |5 w6 N- t! vpublic:
3 t. I; m0 U; F5 f" |void Add(BYTE nIndex)
( V2 \* d! E7 t1 v{, z% Z% } J# F+ m: Y( M
if (m_dwPos >= MAX_INVENTORY)
' X5 @, }% |; r. p1 X. [$ Y {
/ K3 f6 E- Z* ?$ y return;
) H: o, x2 W) V2 G1 M4 @. q7 b }
4 W( C1 ^$ j0 f m_Item[m_dwPos].nIndex = nIndex;0 w5 X4 X! ~8 H0 M6 X' l5 x' K6 }. S: k
m_Item[m_dwPos].dwId = m_dwPos;; O+ ]( {. x/ ^, s1 k* y) H
m_dwPos++;' t! x; h: J9 W' `
}! s; |& n, B3 C& d( \/ f! v* ]6 M' `. v
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
6 D+ m) a2 Q$ i$ x% E/ J- r% P$ Z{
" r% C$ m. ~8 C& s for (int i=0;i<MAX_INVENTORY;i++)
Z$ i" V6 r y. H {
5 d0 Z0 u. }" c+ F if (m_Item.dwId == dwId)# d: U& L$ s: O+ u' h( V j1 V
{
: d w: C" y+ s: R% h% f return m_Item.nIndex;
, F9 [. z( U, {# s }
/ V7 v' u: F+ x( V4 ? }8 V9 {0 K s8 t
return 255;# O& I: V* s; H; h; Q
}
1 S' }" Z. v' L$ I( h$ gvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
4 G+ {% U4 C- u2 G{2 u/ Q- b3 {9 D0 F
BYTE nTmp = 0;2 Q! {7 a' y! x: n9 z
bool bDest = false,bSrc = false;
) n1 v- z7 o9 v% I1 d for (int i=0;i<MAX_INVENTORY;i++) [3 |( V$ D' n( v+ k/ v E+ U
{
2 j8 }9 a: C) s8 v! z# ] if (dwSrcId == m_Item.dwId)
# ]. V: R0 a0 a3 U/ z {
. S6 V0 j# |5 q) K2 a9 k5 P; n //id相等 则 改变对应的dest和src& g, v; `% f# L8 \9 F' @
nTmp = m_Item.nIndex;
3 ^7 A) \- v5 _, E) H m_Item.nIndex = dest;9 {/ E: r' l9 t2 S
}
2 d9 b4 t6 a0 a+ ` }
; f, e4 d. N/ s# f( U //临时数据保存完毕,交换开始
% ^) L' Q+ ~# ?. k8 V8 T for (int i=0;i<MAX_INVENTORY;i++)
, @4 ]7 Q9 h- A$ i* l& C" q {/ @0 M# g' r0 n5 S
if (dest == m_Item.nIndex)4 b! U$ }* g7 X; h
{, n2 G: k2 y/ ~
//id相等 则 改变对应的dest和src
; U* O! ^3 A6 I+ ^3 y. L m_Item.nIndex = nTmp;
) f. M1 b: w* [; B) Q' m& m4 N }. _! f( i+ T/ d
}
X2 [% j3 n/ `8 g1 k+ j$ y}
; x9 t; @7 j& t0 n, n};: {# M$ j+ I) N' V& [
-------------------------------------------------------------------------, b% S& ^& }) q% N1 W4 ]
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* T9 o* [( F3 N0 o# t9 D/ n搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);/ J$ y, V% u4 x4 Q) w
紧靠其上添加:
2 K4 E' @- }6 d3 w5 fif( pWndBase == &m_wndMenu )
" B- {1 }8 d. o |7 q/ Q6 p& X3 K{
& h, h% x+ y# _- @- h+ v switch( nID )
8 `% w1 P% B- Y' {9 B) |' i7 H {
; \; O9 }3 n+ h( [8 g% Z5 M case 2:
3 `" c8 h' H; l) }! I6 z {
& S0 C8 k: {2 z: ]& B7 x4 ^ //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, A3 n5 r; U4 [/ ^4 t6 {4 t if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 r' k6 S! ]1 y( N, q1 z! i
{6 U5 F. `" i4 G |- f
break;
" K/ _. S$ u; t3 r- J6 v" c }+ i: M; l) _9 B8 v1 d9 c/ f9 U9 O
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# d* G J% J- ^( w# i/ G
{2 E4 s& N" x1 Q1 Z8 Y
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 Z/ x) w+ D) L
if( !pItemElem )
( e4 O5 w3 H7 W5 p9 r$ Y) ` f continue;" U& G# J# X. W" M# M3 T5 D
if(pItemElem->GetExtra() > 0)7 R% c% B5 e% } w5 x
continue; I- s$ E4 Z# Q5 z, o
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & `- w/ F( |# r& r5 |" r$ J7 B2 S" o5 h
continue;; ]) |: G5 w; p; P, c
if( g_pPlayer->IsUsing( pItemElem ) )
8 e6 ~# k/ ]; m& J3 \8 z continue;
) t8 J* L! y, }6 Q, @1 k4 s+ v if( pItemElem->IsUndestructable() == TRUE )9 Q! m1 \: A' j4 t5 z f0 }1 A g
{, x( e& y' ?- y. b& u) R2 _
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
, D$ a+ @9 l( z continue;' M; w) t7 R+ W) }, T6 S
}
. t) l& I9 v( P g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" t/ @0 n# V1 U4 R
}4 k& Y5 M* ^5 U, c; V; V! j) ^
break;
8 h/ H! u0 N$ g( l0 _4 A! b6 b }
* z9 K. A2 s4 U9 R5 c/ O2 J m case 1:
' h, x5 f" k; m9 h' n( P; K4 P# B {
, S0 T+ Q. B1 L) [) F //整理背包
% o. c2 f+ T- d5 N; n( _& b //////////////////////////////////////////////////////////////////////////# ]& A6 E9 t" O+ q
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 Q, h1 J6 V' b0 r$ p5 K, ] //////////////////////////////////////////////////////////////////////////
1 u) q1 |$ e0 b8 w* _' z //////////////////////////////////////////////////////////////////////////6 F, t" b2 O4 y
CInventorySort* pInvSort = new CInventorySort;6 D; k5 q# y, c# u
vector <sItem> vItem;
7 F# T; u' `1 Q% Y vItem.resize(MAX_INVENTORY);//初始化大小
+ s8 i4 F9 g* N //////////////////////////////////////////////////////////////////////////& R; E# B! q% u8 F4 [. p9 H6 Z
//填充数据
' K% f+ R) C1 o/ E) V8 m for (int i=0;i<MAX_INVENTORY;i++)
, Z, Q* H* U- e- z# C( }! y0 \ {
* u6 [' V, g) I, {* c1 ^ ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- x; Y9 W0 _2 P8 T7 v
if (!pItemElem)
* ]) h8 s; e& w, s# `' f/ F {
* H- U7 v! p* {/ A/ F6 q vItem.dwKind2 = 0xffffffff; ]; u6 D0 z/ _
vItem.dwItemId = 0xffffffff;" c$ X, q+ x' P
vItem.nIndex = i;
7 K: ^5 U& q8 F, C2 U! [* P }else {
! s3 T" o( G# }# C2 R6 s ItemProp* pProp = pItemElem->GetProp();
3 o/ u; q' Z! n1 ]+ S" {; o vItem.dwKind2 = pProp->dwItemKind2;
5 H0 c. S3 |1 V! L6 \& r6 V vItem.dwItemId = pItemElem->m_dwItemId;$ q% {0 F- R) d5 _9 l$ V
vItem.nIndex = i;
; i; X( h, Y8 \; [! j% G$ I$ U# o: {8 H }. p4 @6 U: y$ e" t! b& L, j
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 ^; `9 y5 x4 k6 B }8 z3 z* f v: }' Q, s7 v6 W, V$ H4 M
//////////////////////////////////////////////////////////////////////////
2 v" x8 y' e; h6 y sort(vItem.begin(),vItem.end());//排序
1 E7 d5 K$ w* u+ i //////////////////////////////////////////////////////////////////////////
! }- m; d* O; G3 p1 g //交换
k; ~& O: m; c% l3 e/ z% O2 M for (size_t i=0;i<vItem.size();i++)& Q0 w' ~; t' {+ ~
{/ M" _ l; j9 h6 o
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);7 k+ k1 Q' a1 y( D
pInvSort->Add(vItem.nIndex);% d0 ~0 L& U3 G1 E; A" ]# ^1 B
}
& s4 a7 `' R& d+ _3 a; ` BYTE nDestPos = 0;9 d, |% B9 Z$ o, L
for (int i=0;i<MAX_INVENTORY;i++)
9 X/ e7 r" Y1 b+ @ v8 w4 z& E! a {, Y5 o- p' x# s, |* ?5 Y( ^
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 ?1 I3 a6 B8 t if (pItemElem)
0 Y% L6 N" R# Q {
8 c. K: B' y. Z& I) e( n if (IsUsingItem(pItemElem))
) ?) H! c0 V0 f( E7 b {
K& Q9 A/ T3 P# h/ B5 f //这个位置无法放
. U3 }0 Z8 d% [% i nDestPos++;. r1 Y, |3 @# ]& j
}
7 _- j, n; f+ M5 |" }. S ? }
$ R7 h' b- N4 H2 z: f BYTE nSrc = pInvSort->GetItemSrc(i);
* y, K+ @3 u- z l3 a6 F pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( L, l/ I Z$ N' g- A. i if (pItemElem)" s6 J; c7 h$ C
{
7 H# w$ E1 q1 C, w if (IsUsingItem(pItemElem))# e8 l, D( b9 _/ J3 L4 P
{- Z+ A1 q& z! w. [' R( V& D
//这个道具无法移动,跳过
0 T6 H, f1 V( o# i% {9 k continue;
. y# \3 t6 G# q# W }
( ]3 z* {+ c [5 r' }5 c2 f }else{
( b+ B6 A; g! G" |" B6 M( q# S' z& x //空位置 不用动
: s! o. y3 o% g5 A G7 N( O0 |) s9 ? continue;
5 Z/ c# f& j7 n }
. T& v) {* C# G2 m+ s //////////////////////////////////////////////////////////////////////////
9 J0 |, P5 S. S7 F, E //开始移动
( d- _9 b5 a" F) S i if (nSrc == nDestPos)# Q/ x- i. y' Q4 D
{
2 k% ]2 o# f; o- c7 S //原地不动
9 q7 k2 o, W; x' i {, K% K nDestPos++;
1 n5 e& i c6 g0 M continue;
6 t0 V: M6 y* O }7 u" Z$ C/ o3 Q; [, C
pInvSort->MoveItem(i,nDestPos);
1 B& J( A! @- H( C( z g_DPlay.SendMoveItem(0,nSrc,nDestPos);+ P' A! F; D! s0 L, m5 }
Sleep(5);
Y. l; M4 |; A8 t: I, ^0 ^ //Error("移动 - %d->%d",nSrc,nDestPos);* T$ ?8 @8 a$ b7 r0 x& u' D: R
nDestPos++;
) X6 e% E4 v) [' R4 R( \ }- N' G' s9 u+ A& E8 T) o1 |
//取第一个元素的信息
4 y' o9 L9 T& l4 q( N6 o; S! \ /*
6 k0 F0 i- |. [% A( V5 Z% M if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& u7 {. Q7 m: T' e# q {
! E7 i9 P; y! s/ G- \5 V) d Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
, a' q# k9 A' T4 \ g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
7 M8 q, @! w7 p. ^7 |. i }: r8 ^+ g5 [8 F6 y
*/
+ r0 I2 C. g3 e# _ //////////////////////////////////////////////////////////////////////////2 _( T9 g% }7 @" t7 s9 P4 r5 _
break;) f: A9 s% T( ^6 S" N8 Y1 [8 r
}
7 N3 v' O0 m/ c } 7 g/ e, f$ t# X2 v9 U% X4 i
}7 u) J& q! z) b7 C( p4 p
m_wndMenu.SetVisible(FALSE);
8 H* b8 S- l" Y$ ]. V/ ^' z9 A8 D: ~( v1 W8 o5 X+ S
--------------------------------------------------------------------------------------------------------+ Y4 r' M2 D8 `* Q2 F# M9 ^- _
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
' N, l* z4 o, q' I4 q9 A( t/ e{
- A& a# m. x4 Y; ~/ U+ k" KBaseMouseCursor();9 z: M$ Z( T& y' ^; d$ @3 D& z
}
7 O" b- P1 g+ |" a c在其下添加:: y6 R' M! i$ R. t0 j
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! t5 u0 k/ ?& L2 T0 M
{
% S x, a! E3 O/ G, Hm_wndMenu.DeleteAllMenu();
0 ]3 ?, |3 I, S9 am_wndMenu.CreateMenu(this);) {) Y/ c# Z3 e: W4 `
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
: O0 W6 g0 X! t# y' J. e) o: D5 j9 q) U5 N
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 n3 q0 _0 j; t* v0 Q
{
~. ?2 u) N4 \+ r$ _ //P以上级别才可以删除所有道具
6 D9 |$ p' J5 c/ ~ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- _" ^% e3 b" T3 c. t! h
}
0 j& C4 k; D5 A# Jm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: ^5 b: ]2 s nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 y" C7 x( {! f) H( z7 V6 @8 N
m_wndMenu.SetFocus();" N/ ]3 F/ _6 G
}/ b0 s1 M( z1 E. G4 T @4 q% l
------------------------------------------------------------------------------------------------------------
( j# |, Q! J& ] s*************************( z0 F# J9 J8 m. a6 r
WndField.h文件5 U$ t v& t8 m6 A9 X) L
*************************
. ]" f( {! D+ T* j) h搜索:BOOL m_bReport;4 y/ D m; a8 @! P" W) ~$ W
其后添加:) v, R4 I0 J. J J5 L0 V7 o- u4 Z3 ]
CWndMenu m_wndMenu;) Z- F# a6 u( x* O9 B7 Y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
+ J( N9 d! I+ p% @( ~9 n其后添加:8 H8 T9 }" j" u; X5 g4 e
virtual void OnRButtonUp(UINT nFlags, CPoint point);
. w8 Y3 \$ S8 [3 y7 Z* d" T; g& T* ~* Q3 e( }' `- ~
) @" A: {( m: t* T( R
|
|