|
|
源文件中_Interface文件夹下WndField.cpp文件, ^: y _" y* P! v& }2 T' O
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 c7 H6 q6 u2 E9 x6 D0 H
, q {5 C$ t3 ?, e
struct sItem* i8 p! {: R" c0 n
{
& d0 s9 Y. f: D% J8 aDWORD dwId;3 l G: H5 Q A: y
DWORD dwKind2;
3 ]4 r2 Q6 D) n2 ADWORD dwItemId;
9 @, n- I& M9 A. S; q# UBYTE nIndex;4 |' \4 _5 V8 W+ \6 k3 N, g5 d& R
sItem(){4 H3 {! T+ ~# ^+ u [- ]
dwId = dwKind2 = dwItemId = nIndex = 0;
7 C: M" h& h% M4 g( ]0 _}+ v. @6 ^- _# z: ^6 k
bool operator < (const sItem p2)
; f; |. E- S2 `+ D2 u{
0 w9 H; p, t# g+ j if (dwKind2 == p2.dwKind2)8 a( B7 |+ i/ ]: j( e9 D
{
2 T6 \; G/ q5 C! u) l return dwItemId < p2.dwItemId;) |. j: D R* l) O+ N0 U
}else{9 P- t# F, O( @) Q. J2 }
return dwKind2 < p2.dwKind2;
1 x, S, \8 Y1 o/ a }
# ?7 M% ^, f& S, ~% L$ J+ T}( l6 G7 f5 q1 {' M/ n
};: r5 X- D) h0 F# r2 o, m
class CInventorySort J B; T# v- s" l7 A( [
{
5 s4 c% Q' b9 p6 ~# {+ o$ Qpublic:
: z3 Z8 [, i' {& z0 lCInventorySort()- v$ g; h/ d$ I) Q9 w$ n, r) K+ g; K
{
; s: h+ O4 m1 z* Y! \ m_dwPos = 0;
1 u9 ]+ m2 U6 D1 g& t$ B}. |* L# v0 { f* U/ o
~CInventorySort(){}' d' d; \ F1 B
private:
3 G& M& l' y g7 ^5 HsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) S" O# `$ }1 x- I; p0 R( Z' p. |
DWORD m_dwPos;
' q- K& a B, h* m4 `: g( ipublic:
% _+ Z2 F+ X2 G3 ~: q$ [void Add(BYTE nIndex)
* V" Y) r1 L) I1 ~5 R{/ U2 |0 c4 V. m5 u7 f2 U
if (m_dwPos >= MAX_INVENTORY); F4 n- Q) O$ Q6 i( t2 b, |
{% [- b" M( U. ^8 Q
return;
Y; e4 J0 G! B: Y; ?8 a4 F }' Z( V8 @* e+ E& o8 d
m_Item[m_dwPos].nIndex = nIndex;
2 q/ W2 e# j) d0 ^) M! W8 I0 Q m_Item[m_dwPos].dwId = m_dwPos;
9 }! A1 G( U* N) Y& F) T0 c m_dwPos++;
! S, S, V+ w i: |; D}4 H- h# s# b! J3 o9 ?; a2 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 Y* v6 g, p' d1 a
{ s3 }2 `5 g2 \2 L8 U
for (int i=0;i<MAX_INVENTORY;i++)5 c7 J! l/ k/ r
{9 H1 m+ M) r9 M
if (m_Item.dwId == dwId)7 M+ N6 H7 s7 }
{
' f+ C0 D) t) N; g7 r0 H" E return m_Item.nIndex;
3 ?& t( k, T3 n& | }8 r- m4 n) M* E, V" q: C
}
6 s m# s+ F2 J' o" j return 255;
, x% _2 y! q- x3 ~# M6 j}
6 b+ n, i3 v' H, k- W$ Fvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: |1 s+ g s! O! C1 d4 X{. H. ~4 }5 L& u( _8 H; v
BYTE nTmp = 0;
& ^2 |: y4 E! G bool bDest = false,bSrc = false;
, X8 `4 h3 P3 o: m9 x2 f% p for (int i=0;i<MAX_INVENTORY;i++)! c Z C+ }4 T
{
" ~. f5 J9 `$ D9 @ X4 y$ {0 | if (dwSrcId == m_Item.dwId)
4 [1 i& t8 Z0 c1 F% e# X( K {3 G& @) x! @; C- \% G/ T, [
//id相等 则 改变对应的dest和src. ^7 q' U5 R- k" h( e# Y. S
nTmp = m_Item.nIndex;
4 i* |% C$ B# x) t m_Item.nIndex = dest;
! O6 V# H; [. A1 ~) ~ }
" C0 A! S# a" U& I& `( h( ^ }
' z1 @4 U; a% i8 P+ F/ ^# ^8 J# D //临时数据保存完毕,交换开始# g4 f% `9 p" u( X3 b: L
for (int i=0;i<MAX_INVENTORY;i++)
( x4 S, n6 N5 C4 h: D7 i, }+ a {
7 t+ g) N" u- ^7 ?8 B$ {$ c if (dest == m_Item.nIndex)
( q& I! e4 S. Y. H5 q8 q/ E N. C {1 I2 Q& J8 h4 o& _6 f; w
//id相等 则 改变对应的dest和src: a. G' d* Q9 S2 v% w
m_Item.nIndex = nTmp;
" G# j" J; G+ c) g1 ~& J# Z }- H+ |8 p6 w( U' m6 m. d- N
}
5 |2 J4 ]; V9 y+ u; S# E9 Q& K! @}
4 W, a, f& f& [* Y0 T2 u0 Q};$ R, M$ [* D5 ^9 ~5 P; I9 E! ~
-------------------------------------------------------------------------* v# A/ X& E( b: k1 ^
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 C @" K4 i; V# f
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
5 Y% W% N* u! |' \9 x0 v$ O. X! @紧靠其上添加:
* M9 H8 [' E% ^; Y. ^if( pWndBase == &m_wndMenu )
$ b8 ?4 }& G# { o( B7 _- l{- y* p- o7 e& F5 F8 f N4 a
switch( nID )! m6 q0 K% r+ Q+ u) @# F) C9 ~8 {
{
# }" j5 \ z; V9 l case 2:
" F2 y; S5 K; P9 g9 P1 q {
& l. q$ J2 r" [& L0 k //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);, K6 [( g# r6 ]' \& S) X+ _
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 ] R2 E( i7 u" b
{! z) `8 C/ ?3 h) d- w {
break;
4 U) n }9 t* B9 w) @/ f, a- e* L }
( i \9 X' B, A% O) d! e# { for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++) _: z$ U, A7 _( i) T p
{
( ]1 b7 C# |, H CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% f# D/ B3 t3 g# J# x6 F0 F
if( !pItemElem )
8 v4 n, v( c3 D: v# A continue;2 m+ e& U0 k& ]+ G( J$ o
if(pItemElem->GetExtra() > 0)* g: L( l$ f& t" g9 h
continue;6 S- _- @$ e! P, B8 A6 R
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
3 ^7 M' M- e/ q9 A, \* Q4 S7 P/ j( F# C/ z continue;
, o. w0 V/ }# E if( g_pPlayer->IsUsing( pItemElem ) )
; s( J1 w# p' z3 V3 R* u* ?" p5 l! ~ continue;* C) _9 ?3 c& Y* w. r0 {
if( pItemElem->IsUndestructable() == TRUE )
9 n0 Y2 ~9 Y' C- k& ^& \ {4 _/ `& r8 h" {. `
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: w; \1 ]6 s; u# ^
continue;
( x$ f2 ~( }5 Y- V; k" ]+ z# Q: h }
& B# \0 W3 t3 g0 I g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);9 V5 r) u6 q( w8 h
}' w( |, K7 E0 o/ y( b& R
break;6 j+ F4 I* L# t4 F& J$ g! J
}
/ A6 A1 L. S) V j8 k& ^' C case 1:
. T8 \2 u) m+ i3 q1 g6 J {' i. u3 I4 _. v" b7 @6 a8 V8 L
//整理背包$ z# s P: U; v+ q! y7 z
//////////////////////////////////////////////////////////////////////////$ q4 q6 a: P% w* T! D
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. W1 b( R' k6 u2 j( m4 s+ v
//////////////////////////////////////////////////////////////////////////+ `1 O6 ~- X* ?, \
//////////////////////////////////////////////////////////////////////////8 f$ v2 P8 u) G; B* H
CInventorySort* pInvSort = new CInventorySort;1 Q2 w7 b2 D* p# w
vector <sItem> vItem;
' V# U! {* I4 A/ y vItem.resize(MAX_INVENTORY);//初始化大小' c2 S' E: @5 _0 }1 n
//////////////////////////////////////////////////////////////////////////
- u) d8 q/ a; m+ J% e5 Y! Z //填充数据
9 Z9 E) |: g, g% S# P for (int i=0;i<MAX_INVENTORY;i++) }( J! @/ [! m& F* H+ h
{% p Q* h4 M( z: Y, A3 C/ G
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
3 W4 L) C d0 K* e' e if (!pItemElem)
1 J& K& Y' p2 X6 } {
1 R" C- ~" q* H4 k4 C9 ^ vItem.dwKind2 = 0xffffffff;
3 B \3 Y' c4 m2 f) ^6 t vItem.dwItemId = 0xffffffff;
+ a" Y1 {" J# K vItem.nIndex = i;5 M% G7 @. ?8 W0 C
}else {
8 o* s* _, R8 i$ x$ ?- F/ ^ ItemProp* pProp = pItemElem->GetProp();/ ]7 \8 q B6 c& r
vItem.dwKind2 = pProp->dwItemKind2;
5 F& ^' G4 Y4 j0 _: M- l, b6 G vItem.dwItemId = pItemElem->m_dwItemId;$ a$ n7 k2 ]' M" h7 I3 v
vItem.nIndex = i;
& `# k! N" X8 E H$ y }) @; h% t6 Q8 v& E* i. D
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: }4 ~; r2 q* A2 i; v4 ? }
5 U9 _! O0 M% G4 g7 j [# e' Z w //////////////////////////////////////////////////////////////////////////* m! g" ^# N, T/ G, J$ ]: }
sort(vItem.begin(),vItem.end());//排序- _2 A: `: Z: e' P9 ^
//////////////////////////////////////////////////////////////////////////8 V: |8 G5 B# v5 @
//交换
! t0 r7 @6 \1 B- w1 B- d for (size_t i=0;i<vItem.size();i++)
# ? {& h3 d* E+ I+ |. j3 r( k6 | {
8 u5 X1 _) p+ e! x- Q/ i //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 C8 E% v! K9 f& B# q# |7 m% _, S pInvSort->Add(vItem.nIndex);
1 a5 l/ p! h. G$ N7 x }! {7 M; @1 _% I/ o
BYTE nDestPos = 0;+ B3 @* u. V* T0 L7 v
for (int i=0;i<MAX_INVENTORY;i++)
% L6 e. ?% a$ D3 r# o6 w {" r6 e. O! L0 w2 b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ {# d/ k' D4 a5 c+ X6 O$ ` f
if (pItemElem)
* e' @1 \1 M; D- }/ P9 ]" A O {& D% E, x% L+ v& w: d& X' c
if (IsUsingItem(pItemElem))
1 [* {3 c. W+ a/ d* p {
3 y. l! x4 C3 m/ S; l. s2 y //这个位置无法放
2 `* f9 s1 I# ~0 H: I0 H I u nDestPos++;
2 {# {% g. @. l }6 |, F' s2 b/ s9 c" {8 C1 v# W8 U
}
3 c& x4 D0 U+ E4 w8 i' W/ [2 F BYTE nSrc = pInvSort->GetItemSrc(i);% F3 }! f) T Q9 `
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
! Q) c) d$ a/ }7 B% C if (pItemElem)
3 n6 l2 q/ ~: c/ k$ @2 N7 \ {6 J5 |$ K& M2 l! h- v
if (IsUsingItem(pItemElem))% ?2 N7 `4 K# B' w9 [
{
) E, y, I5 P2 h4 r, x. v //这个道具无法移动,跳过
8 ^/ r4 w% C. P+ S& S5 l* D continue;. {5 @) b; V% V2 R! ^
}
, ^ G2 j8 ~: J. j/ k* m/ L }else{' t+ D' f# @ n& e
//空位置 不用动
3 O6 U+ q# f' M4 q ] continue;
" z3 `$ K7 H2 V/ O% ? B) F/ f } b* q9 T8 v/ L, _$ Z$ c: D( @
//////////////////////////////////////////////////////////////////////////
( L# a" w0 H7 J) W0 e& ~" H% c //开始移动# D1 H3 Z3 o! g# c. P0 ~4 O
if (nSrc == nDestPos)
8 I$ ^, ]4 _" o/ u& \ {: O" E8 I g. {- A9 N6 J
//原地不动
" V& {" l4 _& L `! M) e& Z nDestPos++;
# B# s: Y9 j7 t; q! X continue;
" C U1 q% E* [9 E7 R3 W$ u& z }
2 b) u/ ^5 w& l* F0 C+ `, l& M* b pInvSort->MoveItem(i,nDestPos);2 @4 ~( M5 Q; W4 M4 n
g_DPlay.SendMoveItem(0,nSrc,nDestPos);! }3 l) A7 [* Z" X$ B' |
Sleep(5);
5 u0 l( N# [% ]0 }3 c7 g6 d //Error("移动 - %d->%d",nSrc,nDestPos);
/ a$ {- U. F5 J7 J' G m nDestPos++;
, I' | f2 Q2 ]4 Y9 J/ L6 C$ H }& g7 _% \. d2 b U! o4 o# y
//取第一个元素的信息; h+ j' o3 P6 E3 }3 o8 T: V
/*
3 c/ @, |4 ~# Y# `; i if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 x2 w" D/ h) ^: ~9 h5 l
{% {) Z. _0 [# t9 s
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. R# U9 c, V- Y/ _: g/ x. P7 _
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
; o3 \9 d) X. j6 I }
9 C2 p$ {0 M5 ~; L6 Z */% E$ h5 D, K/ E; M) L# g
//////////////////////////////////////////////////////////////////////////6 V' }. q, E2 ~+ H( M& a
break;1 @; `9 }3 E. i$ a/ y9 ?+ Z
} x, x) J7 x1 L. L' u" A4 }
}
; e1 V9 U# ?2 d6 g( Q; A}
/ f* X' o% Q/ ]m_wndMenu.SetVisible(FALSE);
6 I" c$ c# B" Z% T3 }2 Q
# H( \( T) K Q& j) ?--------------------------------------------------------------------------------------------------------$ M% d R _: V7 A; Q8 g
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# l, O) F$ V7 M8 Y: U ~{! q" Q& I3 B* P
BaseMouseCursor();
9 B) z. E7 I2 |5 E5 q& } ?4 A}( T8 ]2 \1 o7 L5 K3 S4 y6 j& _
在其下添加:7 l6 T" A1 s7 I" u$ u; X
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)1 C; ]" l. ?0 i2 W- k
{2 y3 y# y- ]5 B
m_wndMenu.DeleteAllMenu();
# e$ V- u( @! z, u! Mm_wndMenu.CreateMenu(this);
* t- F% A5 K" G1 f" J& Hm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
- n& u1 n& b! H* N
* l3 C, b% L9 ?5 kif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 y0 g$ X1 w! s' l& s) O) D% u$ C% J{; C# g2 E. Q3 C( l! m+ y
//P以上级别才可以删除所有道具3 _" L" Y" L6 e# b
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
2 @- s; y6 R9 U; a' H _}- y9 a8 q- p. O$ b
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
7 Q! _2 w7 f1 p, k' O, B) Lm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- T. {7 o- v' P% p
m_wndMenu.SetFocus();( ^3 G ^$ J7 K- _% {
}/ c, g8 u' _, H% j9 O( F2 f
------------------------------------------------------------------------------------------------------------9 R& h! D4 c- V1 k4 O
************************* `$ o, z) U3 |
WndField.h文件
+ L) O- ^' _$ y) ?* ]6 g, F5 t*************************
; i) m* b3 P y6 t搜索:BOOL m_bReport;
; {; Z7 _7 u$ j2 j其后添加:
! {+ |$ N' B" z# {3 fCWndMenu m_wndMenu;
' k) Q. ^5 V; T2 P5 d搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" l: s4 v: U: u1 S- |
其后添加:0 P0 ?* h/ I9 m* a! `( x
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- j- l1 V; E7 `- b0 V8 f9 u% e9 p F, ?" i
: v) }+ Z% W/ [: Y. d2 ?& O+ o |
|