|
|
源文件中_Interface文件夹下WndField.cpp文件& }. u4 [ q/ Z! a b* k9 c
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
E q" Z! o. B$ L/ Y3 Y
1 L5 d1 |7 F) Z2 [0 b9 Ostruct sItem
5 {$ L. q( _, O1 d) }' K{; B2 E: \ U. S B0 T8 y
DWORD dwId;
4 t& s/ g/ O' Q/ U4 C8 p! PDWORD dwKind2;
% `3 \$ H) l2 ODWORD dwItemId;, V0 q( k" o% A
BYTE nIndex;6 g( e' `. a8 M' N5 b" W* A
sItem(){' @1 D& i* V6 p c
dwId = dwKind2 = dwItemId = nIndex = 0;
4 y9 K- X/ A" ~; o- M4 T5 M2 f) s}
) r0 L/ G% Y- c- h+ f8 P8 J7 Jbool operator < (const sItem p2)% z F" ^1 u( Z, S
{2 K R5 `9 y: w% b5 w S7 O
if (dwKind2 == p2.dwKind2)
`, `1 w- X, {5 I& c {+ y+ \1 L- F$ L& [2 e3 u# w
return dwItemId < p2.dwItemId;/ l3 I5 l, q s' O
}else{
6 W$ F* C8 K0 z: P/ y2 T2 v0 a return dwKind2 < p2.dwKind2;
& R1 M, h, b+ m: [ }
* a8 r3 \( T4 B}$ B+ A! Z* [# _; R o% O( I
};- I8 o! O: \$ V/ t
class CInventorySort
$ X: P$ f( U' T" ?4 I{
2 ]& ~* o0 V8 X! K3 @2 w1 j' Jpublic:( E, I8 G6 g* ?- a, ~ O$ _
CInventorySort()
`* y, w+ H1 b+ w{
/ ]' h8 T- W2 m7 } m_dwPos = 0;
# R. E; ~; |! K+ y}
/ s. w) x4 j8 ]~CInventorySort(){}2 l6 |, C" `, { u
private:! h. V- p' b: ~( ^4 q4 T2 G& c1 m
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
2 K, o0 k" U' ~+ n* [$ i9 qDWORD m_dwPos;
2 i$ c/ ~$ P7 y5 y' |4 ^" S5 Apublic:
% k9 o" i5 |$ p5 Rvoid Add(BYTE nIndex)# D6 m9 K# _. J; J- Y( m
{' X, l$ l5 X: z# ~2 x& j" F1 I
if (m_dwPos >= MAX_INVENTORY)7 R' C4 ?5 v8 P" B5 c3 y8 _
{, ]9 l( j: g, y8 n/ ~
return;8 n' w" \ w$ h* H3 J$ a
}; w+ W0 f3 B& a y
m_Item[m_dwPos].nIndex = nIndex;
: K/ N: u# V0 F( T; ~" T m_Item[m_dwPos].dwId = m_dwPos;
7 q8 v$ M6 u3 m9 a$ d m_dwPos++;
! v4 c: {* d% w# ~}
; L; }; j/ Q9 M! P* T# v4 V+ s+ J( GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! }- g( j$ r' J0 J# U: I
{
1 F) a, q u4 X# d for (int i=0;i<MAX_INVENTORY;i++)% T# R* V# i& Z$ g
{. S4 [( h$ h" O( w# `. ^
if (m_Item.dwId == dwId)
. X9 o9 B9 t( ~' B: i& U; O& i8 i, h {( B) F3 S( _" e1 f( f8 p# X# x
return m_Item.nIndex;! ~. N/ s W/ ?3 v; h
}
; I% L- k8 T) \$ K# R4 P D: S4 L3 m }
8 `, S& S% U% T) m4 G9 a/ I' p8 M return 255;9 U3 a( c# M7 F' U8 V
}
7 B0 U3 H' ~- y" R7 {0 ]1 P" ~void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) y% z0 g/ [ U/ b8 U
{( d& e1 ^4 j- W
BYTE nTmp = 0;
" `0 c8 X1 Q0 J bool bDest = false,bSrc = false;
& Y% t B1 J+ T( ? for (int i=0;i<MAX_INVENTORY;i++)
/ S+ o" {: g1 `+ a' d {* j9 c9 L" }6 d) M z7 l
if (dwSrcId == m_Item.dwId)
# n2 n. b8 ~0 X" g {
; x' e- b7 ?* k" ^! ?) u. g //id相等 则 改变对应的dest和src. v* H' [! z) ]
nTmp = m_Item.nIndex;
0 f4 `$ }+ Q0 z% x% c1 u6 V N m_Item.nIndex = dest;0 Z3 x7 M5 P- m) C3 t, ]
}
. z, u- i2 ^+ t }; S1 J3 K/ |4 ^. F# ^
//临时数据保存完毕,交换开始) @$ c; k# {# {
for (int i=0;i<MAX_INVENTORY;i++)
; F" ^& p2 z# P {
f/ |# F: _% Q2 C if (dest == m_Item.nIndex)
0 Q! A4 r$ j# n G6 q4 ] {
8 j9 I6 Z4 R) [- C/ @ //id相等 则 改变对应的dest和src2 s6 b& Z4 C' _, d9 `! ]1 {% a
m_Item.nIndex = nTmp;
, B% {0 M2 Z- n }
6 b* {1 D# C! C. N0 X$ O }- ^& l+ R; k. U8 K0 }
}( \ ]+ W6 f1 V5 l [
};2 S: A9 i' d7 C5 H( {5 n5 ?. a4 J
-------------------------------------------------------------------------2 N. Q! Z9 V D, r% e0 }5 e2 q
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# I& S8 a. w! M! L9 A* b5 N搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- u8 ?' s6 H% C$ ?+ g! `1 [' |) {紧靠其上添加:
b% y! ?; B" |& o5 g8 aif( pWndBase == &m_wndMenu )
2 F# u Y* P% }+ b, m{
% L: d: L, Y5 L$ y) `; N. z) E switch( nID )
$ z7 O2 k& k5 p/ S$ _ {
: y; Q9 ]! ^ ^ r9 Q' p5 @ case 2:
7 B: O0 G+ [- Q. T {/ e9 V& k. v G. V+ l
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" o8 r! `/ b! f' `
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! h4 S& V+ X+ V s. p. A1 l! h {
8 f; \2 [. z/ @$ W; C break;
* r V% w8 m! V$ \ }) u5 k9 `# A/ D) {4 T
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 M# o3 c8 ]7 D3 a* P {
6 g& d' f' b- p& h CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! S! e" `6 w0 e4 ]
if( !pItemElem )' O2 ]$ v0 r. A% d( W
continue;
, _- q1 o" D' J3 A4 U+ X if(pItemElem->GetExtra() > 0)
8 j5 n4 j" w8 N continue;
* u1 h( r; J7 ]0 D- y* G if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) , k. _% h' C6 B; k1 w8 h
continue;
4 ] a j# W6 `0 l6 f$ c if( g_pPlayer->IsUsing( pItemElem ) )
4 a' s9 O4 B1 {" x$ ^ continue;8 W2 h/ p1 |% v' |, E
if( pItemElem->IsUndestructable() == TRUE )8 ^0 P$ R0 a5 m3 C7 C0 A# @# j3 |
{9 Z4 X0 s* ]6 |5 F a! A& X* f
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );$ w3 B& l3 g: O8 w+ |- G. b
continue;
0 \" N& i2 g4 |( x }8 X _* U0 c" k8 E+ {
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
' b5 g/ E/ z# {- G' J( B: `2 ]7 X* d4 @ }0 P+ l* l4 i1 h7 ^
break;1 q& ^" g) j7 |0 r0 B, g8 B Y
}
, C2 W- m2 J0 u( Z$ u# U case 1:
9 L8 l' o! U# d% ?+ A {' Q' N$ }/ t5 B
//整理背包. S& R8 d+ j |7 j: C& a$ r
//////////////////////////////////////////////////////////////////////////6 t/ @$ y2 U* g- Y( l
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
7 N- D2 f: B2 O: A. G9 b //////////////////////////////////////////////////////////////////////////. C! k4 L2 b+ r4 j" r+ o% n
//////////////////////////////////////////////////////////////////////////# G$ I0 z" }+ h. Q
CInventorySort* pInvSort = new CInventorySort;
" j2 w. T1 r9 G* z" o, z" A vector <sItem> vItem;
1 `1 C0 t$ K( q vItem.resize(MAX_INVENTORY);//初始化大小
$ x, |( n9 g) a //////////////////////////////////////////////////////////////////////////3 n# R0 ^9 J) @2 ?& M+ E
//填充数据; V6 C. d% ~+ h, d3 H9 {
for (int i=0;i<MAX_INVENTORY;i++)
& E2 x% t5 n _6 \9 n {% `. O- C, j* v( Y# b. R: g
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! \3 U7 A+ U9 N
if (!pItemElem)' ?8 w/ U9 b; b$ [- `0 C4 @3 ~ }
{
4 d- y, ^% n2 Q0 j# H vItem.dwKind2 = 0xffffffff;" x3 ~/ h( E2 { R2 J4 P
vItem.dwItemId = 0xffffffff;
: \( Q3 V* `" L. y vItem.nIndex = i;$ `5 E9 c0 T5 X* K5 z0 l
}else {, M% b# E; m+ {! l
ItemProp* pProp = pItemElem->GetProp();$ A/ G; C6 H( I+ `5 q3 U7 X4 p/ y1 F$ @
vItem.dwKind2 = pProp->dwItemKind2;# H- e6 n) o2 m( ~
vItem.dwItemId = pItemElem->m_dwItemId;0 k2 {! Z( j8 C/ j
vItem.nIndex = i;5 ^$ w6 h8 g j% c+ z
}
4 N% `( k6 V+ j1 G! A3 s0 r //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);2 |8 [# n1 t6 d5 p, D- R
}5 C9 `% O. B6 L
//////////////////////////////////////////////////////////////////////////% ~1 ]; P+ M7 ^
sort(vItem.begin(),vItem.end());//排序
5 Q3 T6 E$ o. t% J: X) y //////////////////////////////////////////////////////////////////////////' ^" e g. L$ S( A1 x! G
//交换
0 u9 `: q# ~- N* }( z9 G for (size_t i=0;i<vItem.size();i++)
8 I8 d3 ?9 S$ K {
- ?0 u3 }, a* ~- [3 }6 E3 [9 E //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 [" @) K( c% @( A; h" p/ Q pInvSort->Add(vItem.nIndex);4 e/ E6 [+ O- I7 {8 }0 z4 o8 v
}
g* a2 s9 o% u$ P BYTE nDestPos = 0;
' x, y& |' Q2 K: h* X' ?" n for (int i=0;i<MAX_INVENTORY;i++)
: a, o! k" ~' V" L1 J4 h {9 j( F. A: K5 |. x* I4 Z0 x
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. s6 {) S! q" Z if (pItemElem)
/ B3 L4 Q' X, m# M O" C) m( k {& z4 A( h! I7 Y4 w
if (IsUsingItem(pItemElem)): S( R1 d/ j j$ X$ O
{! ^5 e* Z, z% t# c( d: f0 A. b4 X
//这个位置无法放
; \5 b Q7 R. X; |3 m% L nDestPos++;
& p1 j: d1 n9 B6 F$ i8 x. Z }
( |" e: J% `' }1 j' G }
8 J B" ^$ o. m% {; Q4 }/ u5 b BYTE nSrc = pInvSort->GetItemSrc(i);
. U% O0 Y- m& e5 M7 ? z pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);3 J# L/ H8 {- A& w0 O$ w
if (pItemElem)/ d7 x) H9 G1 b# _7 m( T
{
0 b, v3 F2 Z& Z- K. w S8 Q if (IsUsingItem(pItemElem))
' q& C' P8 J1 f {& H% t+ e7 _1 Q6 b
//这个道具无法移动,跳过( S' i, h5 k5 I. g
continue;' T- f& j% m0 S+ F5 L
}
( ]) x* ?& @) n: U }else{. z( U* B0 t- v6 u, l! @& _
//空位置 不用动
3 ]6 g" x9 Z# R" h' [, V$ p continue;$ T( A+ a( B: W! l
}
: G, g# S% t4 u. K* D6 U- a) z //////////////////////////////////////////////////////////////////////////
( Q$ T7 U& O) [+ l //开始移动
- H! `4 l& U3 y8 t if (nSrc == nDestPos)
9 e) R3 O, g4 w4 I' e& K {6 o3 W5 F- e5 I3 g) ]
//原地不动5 ?8 ~ L6 m6 N$ p+ `6 ?! y. F/ u- \
nDestPos++;
# e3 B& `; [$ Y continue;
2 r) g/ ?& m9 |* T' k, H/ W4 Y6 p }
" z$ ` E7 H9 X pInvSort->MoveItem(i,nDestPos);
. c+ d% e1 z" ^: K% S; H g_DPlay.SendMoveItem(0,nSrc,nDestPos);
, @% w$ t4 u# [% T Sleep(5);
& V1 G Z$ r& ] //Error("移动 - %d->%d",nSrc,nDestPos);
0 i( `) |, T0 B; |/ d' b7 E* ~! ?$ F nDestPos++;7 C& G% o5 U& M3 M" C2 m
}
3 J4 @9 K+ x% a- x& \& ` //取第一个元素的信息: O+ |5 q& ` h! E1 t) d( ?$ I; x
/** I% F2 s/ v; M q+ u
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)& Q3 n3 I- ? L% m4 y- g
{) L/ C9 e/ z- ^. |- I7 d
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
7 }, y7 E; a) u z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' Q# ~3 T' S. \+ v5 H- Y }( u/ p3 r! V' p9 ]
*/6 M# @2 V' _+ l @! S1 z0 X' D
//////////////////////////////////////////////////////////////////////////
p8 O: J% k/ P% M2 P0 ?# L5 R break;
% a! J( [4 d! H/ [ }
9 |, m' W3 D' Q# P: S7 T2 g& E9 I }
1 K# M7 j5 z" v& P}! z/ Q/ k0 W5 \% C( ~
m_wndMenu.SetVisible(FALSE);" U! ]6 D2 I% p! D; J+ G
% Q" F) X! [+ ^+ T* W6 n5 h, ^6 Q
--------------------------------------------------------------------------------------------------------% A/ T) { s' Y( P. x) P
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)1 [% d3 ^) {" x% i& q- y
{+ {- _' O3 l2 @& P
BaseMouseCursor();# z& D0 o* ]- g$ Y
}
; R! s x. n0 u7 E5 C$ T在其下添加:
3 w& R' R1 c9 Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
?. A& G/ V1 p) M6 O# A{2 n$ Z! { F4 y% i
m_wndMenu.DeleteAllMenu();3 Z0 r U9 W7 i m& s2 a, @
m_wndMenu.CreateMenu(this);4 ^6 s! M( D }% X4 R
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");" ^: U2 T( l9 B1 M2 S& N# L
. r7 k/ a, j+ zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( U1 D7 d. D. e0 f( A
{' r3 z8 a5 m0 O5 U* F
//P以上级别才可以删除所有道具
; L' u) u$ \& [* j" ` m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear"); I: r ?* Z7 @
}/ V/ t. a, m6 [$ v
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point ); y, q7 W! P7 Y& F. G' ~3 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );0 U( F! e# V) ?$ N3 p1 S# O
m_wndMenu.SetFocus();
/ R; e+ t) J2 q}2 \* b2 a( Y m8 W4 I, s8 ^( ?
------------------------------------------------------------------------------------------------------------
3 I2 L2 v- b9 W2 j, @: R) B*************************/ Z, i D& @2 K O t
WndField.h文件
* i1 }; ^: j. r*************************! P/ q' y2 H; ?) s# q
搜索:BOOL m_bReport;
X( r' s- \7 H# l$ r$ l/ X其后添加:9 O2 ?8 F; t& ]: {
CWndMenu m_wndMenu;
( N) w% y; j1 R$ B( J3 g& d# s6 A5 V+ j搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 n$ {( G$ t% V q) l4 V' {+ X其后添加:
* ] d8 D8 _6 e8 z1 n* t+ |virtual void OnRButtonUp(UINT nFlags, CPoint point);+ Q0 a7 I: X: Z2 R0 m
& |$ e D4 p' D: r$ L
9 Q! \$ U2 ~1 ?" y! F
|
|