|
|
源文件中_Interface文件夹下WndField.cpp文件$ @- {$ I0 t$ e3 j: z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ) {: g+ A) z0 ?4 Q- {
: _0 a/ I/ v9 v1 U" Wstruct sItem$ l4 d; f! E, e% t
{
* h9 {2 G2 ?- U2 F" R1 vDWORD dwId;
7 S1 S# N/ G& P0 ~: t- ODWORD dwKind2;8 F! y) z* ~7 U& C% d
DWORD dwItemId;3 D' p$ j& j& N( c0 I2 s9 I4 I4 c
BYTE nIndex;" X& t5 a4 q c2 @
sItem(){
: j; I1 @# [! e) g( ^ dwId = dwKind2 = dwItemId = nIndex = 0;, R. @; d4 {# b
}
0 c8 E- Q8 ~8 P. D6 n" `) rbool operator < (const sItem p2): L8 N3 C# W" x0 c4 E
{
' q- s0 `: q; A% q) E. h if (dwKind2 == p2.dwKind2)
( ]$ `% H& @& }4 {1 j5 b5 h2 u2 O {. C1 k# ` g1 M$ d, p
return dwItemId < p2.dwItemId;$ ]! H J8 M+ [- O J
}else{
7 ^ H& s/ c: C5 ?% H% w return dwKind2 < p2.dwKind2;9 d: N$ A/ x% u7 M+ R
}! h7 @0 d. p! g' \
}) i$ e1 r/ s% ?/ z) s) i
};
; o4 v0 W* f' I2 Gclass CInventorySort* h4 y& R4 e4 O, \
{
4 @9 N# K2 d1 T* v7 w1 E' ipublic:& U c2 W. C) H8 x4 q4 Q1 G- y
CInventorySort()
; O0 \9 M+ P% {- z) |' P{, M: I# F$ l, d, R$ k$ Q
m_dwPos = 0;
: T. O% t, w2 _* n+ m}
2 h; V) b: ~$ D/ ~~CInventorySort(){}1 ~, l C9 y F2 ?5 E" m& L
private:
% G8 i( k& m6 I% c, s+ LsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 t& T: v4 _$ ~6 `1 @, `. a5 x
DWORD m_dwPos;
5 |7 }; o$ F: [- X2 ]! O0 R9 y ]+ spublic:
. l7 b( w1 m) u; W9 Lvoid Add(BYTE nIndex)
& f8 C9 I2 O* |& g$ z8 t. k{
! q# H/ ^8 O7 S3 _: t) _ if (m_dwPos >= MAX_INVENTORY). w+ x* t$ X! h8 g8 R
{
; ^, w4 ]" c5 p& D' z _ return;
9 t K* q% |( T* c2 r }
0 F# V( }& n& C) Y, F% c8 G8 f m_Item[m_dwPos].nIndex = nIndex;" X8 |: N1 L3 G9 {- i* ~$ B
m_Item[m_dwPos].dwId = m_dwPos;
# u3 A* W+ y; j0 f4 I m_dwPos++;
- Y$ z$ t" N7 r9 F# `}1 _' k8 d% X- }4 x4 b
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; A% {8 ~6 p {
{
2 \3 \7 x1 {" E. j for (int i=0;i<MAX_INVENTORY;i++)
4 N0 K9 L' [0 w: E* H9 X {7 w, V- l8 }6 F- C7 b0 Y
if (m_Item.dwId == dwId)
# F- c$ x) s" C- p+ ], B7 i {/ o* j- H, y4 N& C& W' _. B* f- i
return m_Item.nIndex;, R& B8 k4 t, n( @2 V
}
! ~2 Z- d) a3 B7 ^" V* V1 F }
% p' Y' h: @' H0 g" T u return 255;
% W; q/ B6 d3 [}+ ]! s, ^; s/ X, T3 q4 T
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置; t. S; O0 t9 `" m
{
4 d' n1 N T" |) c BYTE nTmp = 0;
. `+ K/ Y! l; H4 t bool bDest = false,bSrc = false; B! q" T: \' V) q8 L- G m( |" K
for (int i=0;i<MAX_INVENTORY;i++)) X" ^" S+ I$ E E* V; g/ Z/ _( `) A
{
1 k! r* r9 b9 G# J0 q1 N6 N if (dwSrcId == m_Item.dwId)
! {& i3 |$ l/ I/ K1 }. R {
, ~3 V6 h- q! y6 b% z, \' _ //id相等 则 改变对应的dest和src
- ] c# l+ V$ k5 g+ N% S' L$ ? m nTmp = m_Item.nIndex;9 |( S, a- ^/ E$ H4 z, A1 J
m_Item.nIndex = dest;2 @) a* }8 e$ A7 t5 q$ a' l* F
}. F9 W- @" g6 T& [, E
}) s6 ^3 ~, d8 _% t% c- }% Q
//临时数据保存完毕,交换开始
. j( ?6 u* N% k0 T% H for (int i=0;i<MAX_INVENTORY;i++)2 D% z6 r6 j( }% c6 w/ `) x
{
1 B8 K% F. f4 C# f( @- R if (dest == m_Item.nIndex)
5 O1 e6 T3 ^- B# Q6 T# f& k' l5 q {
/ V/ o5 t. p7 f //id相等 则 改变对应的dest和src
8 \' j: P" ^# G& l. ? m_Item.nIndex = nTmp;
, H( c$ n+ l' p& Z" J* n }
9 s0 h- {% H( z" k% ?, U @ E }
& Y7 U, R7 L( J+ w Z5 Q, l ?}
8 _& ]: r* R: O1 H' \+ W, @' {" t};, \5 \% C( W9 `- s8 g
-------------------------------------------------------------------------$ U5 I5 t- @6 M
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ); z5 }" j7 d# M& @9 O+ N2 x& t
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);8 A$ Q! j! a& g6 O5 A
紧靠其上添加:
! w' y* u4 v" q$ \if( pWndBase == &m_wndMenu )
! b5 X. s. N% o2 [# J4 H4 m{4 Z3 N9 A2 T& ~3 E- C( f
switch( nID )
, T; d4 S* S5 E0 L8 z* B; X {
" f! e9 B5 u, {7 x4 } case 2:8 M' m p9 G9 r$ L. R
{ @( ~5 X- T7 t& {: Z' w# m# ]* Z( O
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 ^, U& R0 B* G y5 } if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* K s) Y& s) k7 ~0 u
{
0 j! ~% F9 Y% S$ c! w4 J break;
& ^' g6 @( @; N }
3 R3 N5 c( D. l, o7 R3 |) ~6 C5 w for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 r1 Y0 F6 f2 G0 \2 n) s {
7 R+ D5 e4 R; F! r! z CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);3 U0 t {$ I/ o+ I
if( !pItemElem )
+ P, }, u; H0 M% m8 @# T5 Z0 @ continue;
+ f, s5 ?4 `8 l) s if(pItemElem->GetExtra() > 0)! {3 {/ z$ _$ O6 m# \. l d) u4 K& }+ B
continue;4 I+ i1 i/ r' Z" i; z' I( Z$ P" F
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ; Q" n. b7 b M$ W1 k7 v
continue;9 I: x0 y6 L/ @$ u
if( g_pPlayer->IsUsing( pItemElem ) )
5 ^. ?: G# V% A) ? continue;
8 @2 z6 {/ w+ M* r6 f& n4 x2 _* Y if( pItemElem->IsUndestructable() == TRUE )
8 N5 }+ |6 S; z& j& V {
7 ^9 U/ w( D+ }# L g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );# y" X/ q5 T: M
continue;6 h. d7 S R8 B/ }% g3 S. F8 k, F
}
% w. Z4 m$ L. a9 t0 k& l& { g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# y' w+ g0 X( m4 M }
' R6 X' o3 `" `& @ break;2 r; [# v: G- r* H
}5 ?+ i/ `0 b( e: |
case 1:5 W' I, s, M9 R8 d5 I8 u3 m* Z
{1 s2 J- M$ n L& F: E
//整理背包
3 A& T* V, Y1 J //////////////////////////////////////////////////////////////////////////& Y( v( }. c* d# s8 e
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% s% R/ \5 |8 D. K. m `; O } //////////////////////////////////////////////////////////////////////////; p3 A5 T8 n! a6 H. z# e
//////////////////////////////////////////////////////////////////////////
# W3 u# ~6 c" e+ F; c4 y* b+ Y0 n, Z CInventorySort* pInvSort = new CInventorySort;
2 u. H$ H: _: L& E vector <sItem> vItem;
! A: G- v* m2 \8 N4 N vItem.resize(MAX_INVENTORY);//初始化大小
, j4 g! O$ S5 `2 Z6 a //////////////////////////////////////////////////////////////////////////
& N/ D$ Q; o. M: J( ^9 t //填充数据; K+ y2 s1 x1 w, h- Q. Q+ a! d6 U3 i# ^
for (int i=0;i<MAX_INVENTORY;i++): |) G4 a# L/ W0 Q" _% k
{: }" N0 {5 K) b
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
8 J1 o( K3 z' A4 ?4 r if (!pItemElem)
5 n4 e' \3 ]+ e0 k6 z$ S) k) J {8 U- m6 ^( g) m8 Q; k4 [% w" \
vItem.dwKind2 = 0xffffffff;$ b$ T c# R0 L+ t% Z7 y+ e
vItem.dwItemId = 0xffffffff;
. |) @4 b: W6 b6 r6 p" f+ m vItem.nIndex = i;
8 r3 D% }( w0 L$ s2 o2 T' Y }else {
. O- S* ^7 O" k5 Q* O3 g ItemProp* pProp = pItemElem->GetProp();
- M$ U4 ^; g- s, J* p vItem.dwKind2 = pProp->dwItemKind2;% h+ Q4 _( X. h5 i! M
vItem.dwItemId = pItemElem->m_dwItemId;( r' K, O" O5 y" p
vItem.nIndex = i; _! l* k$ [; t
}
+ n' d' t, k; j' w //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);6 @* R3 f+ ~$ q. U
}3 k0 D" x+ u; ]: T7 ?( e- J
//////////////////////////////////////////////////////////////////////////; w$ T2 u, K) q" S
sort(vItem.begin(),vItem.end());//排序
5 L! J& @2 z, S. y3 X //////////////////////////////////////////////////////////////////////////3 F( l6 g! V8 U% e0 B
//交换
2 Y. Z5 q- |6 s2 z5 V9 b for (size_t i=0;i<vItem.size();i++). |: H: @0 ^& `" H: E! R
{
5 e; S) p( X8 ]4 n //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 m- r' S4 x5 p( f4 g pInvSort->Add(vItem.nIndex);
3 ]5 v, ]) t5 P }& ]' s9 J) }1 p( Q7 G
BYTE nDestPos = 0;, u( ]2 a* l) v+ A0 O
for (int i=0;i<MAX_INVENTORY;i++)$ ~4 ~; H# m: W+ j6 z1 }- {
{, K& A4 r* l8 x( |! k
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( j& n! U% u4 e/ m5 B+ u
if (pItemElem)
! @: k* B3 `9 N) [: d1 p" R {
3 ?' S9 l2 W- S" B9 l7 h8 X1 a if (IsUsingItem(pItemElem))
, Z, u; h2 h; Z f5 A7 h {* R8 N3 b* Q3 h7 C
//这个位置无法放
+ `1 h! D- ^6 d! I9 A nDestPos++;: W& d ]! }5 c) Q
}/ \) }6 v1 } t) B* g% H O
}
1 M$ R- e( b, A. m/ N# V BYTE nSrc = pInvSort->GetItemSrc(i);! m8 k* i6 G5 k9 n3 Y6 p4 v- F4 f
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 ^# `3 }# N) O+ B if (pItemElem)
! r' Y2 X' f9 s- X3 _1 h, M {; X2 M H6 r$ d$ Q/ @4 X& G
if (IsUsingItem(pItemElem))
( D3 G; l( J7 W {- c; \2 { r6 M9 S% N P
//这个道具无法移动,跳过4 k* [$ m h6 I" i' u
continue;. s; P! t- O- \5 Z' m6 u0 |
}9 K+ m9 x" f& n7 t+ @3 R
}else{
5 s7 E& }5 n4 _5 P r //空位置 不用动& ~1 X: L& A# G
continue;5 B: u' _4 x: X4 O$ [6 P( V
}4 j0 G% v7 M' c2 x) |
//////////////////////////////////////////////////////////////////////////
# O) n4 y8 Y8 N //开始移动
3 u4 t- E( `* G* L: g if (nSrc == nDestPos)
+ B2 D6 {7 O1 b1 \ {1 W! q- y, b9 C
//原地不动% r6 F4 c! Q9 n+ ~& ^; @# R
nDestPos++;) d5 l8 J4 p2 Q1 e( s5 }
continue;( _$ Z, W' J) v) L, ~7 g' L7 ^/ L4 c
}
8 x! |! s6 W( r6 e pInvSort->MoveItem(i,nDestPos);
" V. O6 z# h# y- A g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 _2 p3 |* D! o6 z Sleep(5);0 n- t( z: a; k* T/ i9 e
//Error("移动 - %d->%d",nSrc,nDestPos);* I; s$ C/ _! h2 y( U* G1 U) Z8 M* b
nDestPos++;* l4 k6 R1 E: N" g
}
( i1 A0 T( E+ m' w- f5 X$ w //取第一个元素的信息' i$ A O6 l3 l4 p
/*
& H+ a# a3 T6 e; G5 w. w$ J if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) o. m1 P& L3 {, D* Z6 M/ h1 u- T
{
; x7 w" o7 k4 v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) a$ G" e0 m( L/ W& h! B8 F1 ]; W. {
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);1 B3 [% f; F/ t8 L1 C7 [
} j- l" ?* u* Y6 E: ~- g
*/ v* x$ l& H" N3 ^! y) j9 M( z. Y
//////////////////////////////////////////////////////////////////////////7 ]% {) W3 b4 }8 V2 ^
break;
# Q, c. G: D" C# X" U3 ^ }. Q- E& S/ ?/ ~) \. X! T
} 0 [6 F A' [5 N+ n# V* T9 {5 o5 X
}' R. `) o% v' v* ~
m_wndMenu.SetVisible(FALSE);& i/ B6 A* D+ h. g+ ^: Y) W) J* X
! l3 O& f( f6 o3 y8 |--------------------------------------------------------------------------------------------------------
1 R" W+ U0 J8 T7 W y- K# D2 m- Z# d搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
! M6 X/ x5 B/ U% ?' Q. o{
9 v/ _; a% h4 C; c. ?BaseMouseCursor();
: q* E3 ^' P0 e" x Q, `" U}
$ n' Z( M( r$ ^1 k在其下添加:
7 y! x6 d5 u Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ `. m; W* J6 D. z{+ @8 _4 X: J+ c
m_wndMenu.DeleteAllMenu();
# J/ T+ F! y# |# o5 I7 Sm_wndMenu.CreateMenu(this);% i/ H1 d, `7 }; I
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ N+ c9 Y6 ?5 p
/ P0 R" E4 x |
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): w& h; v9 t0 l' P' \; A' z
{
, f2 L2 T3 n' F //P以上级别才可以删除所有道具
* [( V0 G) w, l; E7 ~+ v m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* l( B: d& v1 g2 ?6 m- V
}
& b8 p9 c* m d6 w: Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 h9 C) i$ P2 J' B: J+ g4 D
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );# r/ V E! t7 K
m_wndMenu.SetFocus();8 ^! _& e; |4 ?2 R- n% z
}3 ^. B3 [/ T. z/ u+ K- {
------------------------------------------------------------------------------------------------------------4 @! r. j: {1 C0 K4 B: w+ G
*************************- G4 Q. B) i4 m' V# N* {( w
WndField.h文件& V1 j B; V$ t: a) h7 u& V
*************************
9 j' X; @* a7 s5 Q* B搜索:BOOL m_bReport;
2 ~& _% A2 F* A2 ~其后添加:
* K( a: Y, h& _ E, C. WCWndMenu m_wndMenu;
' a ]; }* f% r2 o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);8 Q8 J+ q4 P* i
其后添加:
3 M. X! N! N9 [# a2 [. gvirtual void OnRButtonUp(UINT nFlags, CPoint point);2 u; `% z9 p& y+ S. y
_2 X, W' t) Q2 k2 a1 P2 i; w9 ?- k: y/ e' q3 y5 I# ?; t
|
|