|
|
源文件中_Interface文件夹下WndField.cpp文件
0 B5 y! v3 o3 u" a搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). {' A" o U( G7 v
2 v7 I" E: P' Y" M0 i
struct sItem
2 Z9 E6 Y) g* g# q{2 c- @0 g, ?6 E
DWORD dwId;1 Q) X+ ^2 N+ Q8 h. V1 Q$ [
DWORD dwKind2;" K6 `, Y+ |0 d7 T7 m& x
DWORD dwItemId;
3 p$ a/ ^- _2 A$ a" dBYTE nIndex;# W9 x5 X! E+ B) C
sItem(){
# I, d2 \+ F0 f; x Q dwId = dwKind2 = dwItemId = nIndex = 0;
6 ?! E- X/ }4 j1 R}
( ^. a6 D5 s2 W2 h) }bool operator < (const sItem p2)+ z9 a, W5 T. f% s
{
" i p/ Y$ f3 `3 Q if (dwKind2 == p2.dwKind2)
+ p9 h+ q! E# `( K+ l7 m3 V" _1 P {
4 L' Q. m+ E, U' t! y return dwItemId < p2.dwItemId;
. Q0 a# w9 S& |: U& h* E }else{' D- o. s% Y$ ]- @2 Q" Q/ X
return dwKind2 < p2.dwKind2;
1 F# n0 R% n& v% i4 G }
* |/ b6 G5 {+ m5 s4 l+ b}+ ]) @. o, | B, g7 {
};, k% I) L1 S i
class CInventorySort* c5 _5 R1 E7 ]# P' d0 Q; k
{! q$ ?- T8 m% i! N. U" V
public:* S) T2 ?1 M) l2 D' ~2 d* ~
CInventorySort()
4 U: j7 e8 y7 I( O* Z{
9 E. I$ p* B8 @5 r6 S5 P m_dwPos = 0;
7 \8 U* @+ q' I* J" o" c}1 I, u! K; t5 { u" E" x2 \
~CInventorySort(){}% L1 D/ `" W# P
private:' v0 _1 j1 f! y1 ~& a
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
a* F& k: Z& F1 @' ODWORD m_dwPos;
* ^. ?; v& A) u6 H5 o) Qpublic:
9 D* [* T) ^3 }5 d' c: R ^void Add(BYTE nIndex)
" `: S- z3 R) v( n: w/ [{
/ n0 N2 Q* `2 B- `+ \, b& f5 C if (m_dwPos >= MAX_INVENTORY)# J+ a ~, B) @. j0 P2 k# E
{& r5 S) [: X( N6 P5 [3 K
return;
, V+ [# b: ]6 y+ O- t7 ]6 M6 r }' l3 o( W' N. }$ F/ z
m_Item[m_dwPos].nIndex = nIndex;7 A; C3 S. x2 i( S- T
m_Item[m_dwPos].dwId = m_dwPos;
( b) K8 }" U+ q1 k+ t1 q7 p6 x m_dwPos++;4 K# c5 ~% u: f! _1 k
}
" z5 e/ L Q4 U* z5 yBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ U+ Y$ y- z% ^8 `- q f) d{+ \& Y5 v7 f/ A9 e0 x/ ~' O, E& P
for (int i=0;i<MAX_INVENTORY;i++); f6 K" {: [ c: S
{- v! r% n4 b! j2 q/ H( V9 t. o
if (m_Item.dwId == dwId), A: g( A( d, B( t q" C
{
) C Q. [+ k1 v" p, B/ h/ U return m_Item.nIndex;
6 x% h" Y% F# i) k' v; H }
) y* ]" o. d/ c4 p/ B% i' j }
! ` {% u9 t6 A s) @% l) G return 255;
_; E6 C5 @* |# U. D/ U1 E}
' c& b3 r% `) l% }% lvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置2 B2 ~9 S- {% `+ J6 c/ j
{' A+ w( E% y/ {
BYTE nTmp = 0;
6 Z% y7 Y) o+ D4 ^+ ]% x( z6 n bool bDest = false,bSrc = false;+ x+ G9 x: t w- H L( u
for (int i=0;i<MAX_INVENTORY;i++)
7 a3 B8 K) z7 w1 S0 B {! l. ^: c/ U' M2 t: \
if (dwSrcId == m_Item.dwId)
( Z8 G7 T, R8 y7 V" J9 L {
/ v0 d9 I2 B+ C0 }1 I' g& n( f //id相等 则 改变对应的dest和src1 F! R- V: M/ y( |
nTmp = m_Item.nIndex;
/ s7 A& j( e% J/ B m_Item.nIndex = dest;% b& R& t6 T. ~% |( J
}4 Z ? x! E* M1 P+ v, B: Q2 x
}
; C" p0 H4 @- t( b! a6 q6 b //临时数据保存完毕,交换开始' F J8 m% w8 L9 x
for (int i=0;i<MAX_INVENTORY;i++)
6 |/ z+ t# {5 F3 Y9 P5 k0 V) g {
4 Z( _4 i3 w9 h3 f if (dest == m_Item.nIndex)
% [/ E% X7 W8 @& F6 C' g; N# N {" r- `7 D. Q o! Y2 l+ n. m6 Z8 _. ~
//id相等 则 改变对应的dest和src
' V& S" }2 `& a& P( | m_Item.nIndex = nTmp;- N/ Z" R; e8 E6 d/ _; l9 S3 N. T2 l
}- u% @, P( D! Z) X2 Q+ Q7 e6 f
}- l2 l2 }% J0 Q# l$ g
}
( U6 M$ ?8 n) Y2 W# M/ U2 m' N. z};
. _" q" O& q1 `1 V( D-------------------------------------------------------------------------( h/ e/ P2 ~9 B3 r* c" K3 u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" |- Z, V4 I0 j! C3 u9 e
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ o. E( g3 w' K* z( C! _1 U
紧靠其上添加:( t+ I1 E6 C: c# n$ [1 y
if( pWndBase == &m_wndMenu )
9 ^' z8 z" D7 v. n' o{6 l8 {) |+ ~3 Z k' q' O
switch( nID )7 X2 x, @. ]7 V+ `
{
9 X+ H$ N" }! A6 B case 2:
3 k* v2 |: q3 r; b {
, m+ L" q7 T! D: r- e0 s //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);8 x2 i( o& f& F$ q# n" G+ V: [1 R
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- u) A- ]- p$ B0 D9 Q
{! H6 i) K7 H" `0 ^0 N# f) N. J
break;
6 P8 C( ^$ f8 Z }
) p/ B8 O2 a* K" }' F& j for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" C6 O# e4 @$ w& e0 [1 _* M, b
{
( g3 w/ f1 C* u0 ^: ~2 F$ ? CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 X( m, Q) X: j6 e! e1 o: k, p1 y
if( !pItemElem )
: R% L1 K$ r7 \) f1 D: B continue;
+ g* h2 W3 r7 j7 T0 k- v1 U( ^ if(pItemElem->GetExtra() > 0)1 Y4 b& [3 m1 b: q1 H( R# G
continue;
/ r0 [, \! U h4 m* ]$ W if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) d! P i, \* u' F) S# D! Z' E
continue;5 c; X- C6 [. _' t! r
if( g_pPlayer->IsUsing( pItemElem ) ). d x! ~) C$ t" i6 W7 s/ o
continue;
' L. M1 d% L8 m$ z0 w0 E0 X; o if( pItemElem->IsUndestructable() == TRUE )
) [- W7 F+ {* l4 y% E* ?! `* d- N2 Z) w {3 L% d- p% V$ J7 [4 K
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
* v) j, e* ~ Y4 j& z continue;
, @& H% u9 s' f5 J2 Z# i }
& P0 N: [; Y4 N- @5 ~6 v5 Y9 H, j g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);# \, M+ z Y" i) U, {' v
}
6 a; b( `' U# Q* C9 A0 c break;
' j6 w8 G. L, r: N; L5 z( n, K }
6 ]2 L% q' n* M; p+ ^0 R' A case 1:. s5 A8 R& ^, x# {
{
0 M: d2 H1 Q; k! V$ O //整理背包
F, G0 h+ \0 A; V+ N! A/ R //////////////////////////////////////////////////////////////////////////& p! i1 F* G$ R! J' w
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" E* }' y; l7 j# U$ S, V
//////////////////////////////////////////////////////////////////////////$ n" M2 M+ B. z* y8 c$ ^. L9 ~1 R" Q
//////////////////////////////////////////////////////////////////////////
6 i( o3 d% _3 [1 c9 _ CInventorySort* pInvSort = new CInventorySort;
5 E, I% k- V$ \# | G vector <sItem> vItem;+ M0 y. q& H5 K5 n5 e; q
vItem.resize(MAX_INVENTORY);//初始化大小
. {8 }- g9 w) {9 w //////////////////////////////////////////////////////////////////////////1 M' I2 S( h3 |: m# Q
//填充数据0 D+ o( @ X; j1 O# N# J
for (int i=0;i<MAX_INVENTORY;i++)
" Y3 y4 V/ L, X {
' P1 g* s* r( f+ z8 j9 }4 \ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 r7 U6 {* @4 W* [5 T if (!pItemElem)6 Z/ Y4 q( D# x6 q6 j, V5 u
{$ }) F: F! V R5 T8 t8 z
vItem.dwKind2 = 0xffffffff;% d# O5 S, h- D2 N- N! e; [
vItem.dwItemId = 0xffffffff;7 O1 g% A: m7 p' a8 e o& H! L K
vItem.nIndex = i;
; R0 t; T8 U" N& s! f( t }else {
4 Y( {" m& O ?$ v" w; X' v4 G ItemProp* pProp = pItemElem->GetProp();9 X x, s% _. I; R- V8 S
vItem.dwKind2 = pProp->dwItemKind2;
: ^; {. d3 X) E& i vItem.dwItemId = pItemElem->m_dwItemId;6 _6 `1 ?) E4 P8 q8 |4 l- V
vItem.nIndex = i;; l/ d# I) p5 G- q& |4 I: i
}# Y! I! T. R v7 q$ r- B5 l6 p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 J# G. g' Q: M) q& a. c% i
}
4 B7 i$ u% A3 a/ c- k //////////////////////////////////////////////////////////////////////////5 I/ `" S& s0 f6 F: ?
sort(vItem.begin(),vItem.end());//排序0 F7 T/ O. x+ x* x9 f) g9 z# u' f) u. c
//////////////////////////////////////////////////////////////////////////
. T3 } Y! x9 x3 Q: s! s$ N. f //交换
0 Y) N) m( K5 s- ~2 Z for (size_t i=0;i<vItem.size();i++)/ G! n/ a! @9 Y( P
{ I1 o3 }8 H& F) [
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, J; y9 S7 ^6 l* ? pInvSort->Add(vItem.nIndex);" [5 `( S; \9 q# o4 z" a7 d
}
4 q) M+ K6 V# K' { BYTE nDestPos = 0;! D# k* N9 U. C3 U/ W
for (int i=0;i<MAX_INVENTORY;i++)
. q2 i4 b! i3 [ Y; B$ L% B# { {
/ F' g; J( D; H$ _" a9 T CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);; a& @1 |6 ?! s2 T$ c2 ]
if (pItemElem)
! v0 M( v3 {( v {
! a$ d ~8 O( d. p if (IsUsingItem(pItemElem))
+ Y4 B& K! K% Z0 A {: g8 Z1 l; q7 J# F% I4 t7 H
//这个位置无法放: i( u4 z" P- I2 R
nDestPos++;
; y; _% l- o1 V6 k: K& _ }2 }" ^7 G( _$ r3 D" v1 \
}2 o4 @; \) j2 Q: x4 p/ [1 ^" M- ]
BYTE nSrc = pInvSort->GetItemSrc(i);
9 m$ e& _7 E2 X- V% g1 {2 p pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% T, n4 ^) x) d3 G+ x
if (pItemElem)4 U# a1 }% e3 M, t- W' R1 ]
{/ ?+ Y$ E+ |- J! r5 x- [
if (IsUsingItem(pItemElem))
8 m0 z& v, `( u$ y6 A9 C6 v {
" `' G7 p& T3 [0 D0 u/ ^ //这个道具无法移动,跳过( N& o' I% L* v; x
continue;
/ u9 X. W4 u) ?, R* d }- y( g" s+ b3 y2 R* _
}else{
4 k8 { L% L- B, D1 G //空位置 不用动. ~/ l1 ^8 i6 I6 v1 j; e/ N' A
continue;' H4 M8 J+ ]3 }/ ?. D+ d! ~9 B- V- m
}
: Q/ h7 d( g- q7 D" p2 I h, { //////////////////////////////////////////////////////////////////////////
+ Y7 {$ b$ @1 I( e //开始移动
# { N8 ?! m+ l+ H! e if (nSrc == nDestPos)
% G- A Q1 ]5 e9 U {
2 }8 w0 i6 a/ h) w8 E0 K //原地不动4 v$ |0 \! E- E
nDestPos++;" U* B6 C4 J& [. S* ^- C+ K; F
continue;
4 r6 y$ H# m6 X% d$ p }3 P9 p3 v Y5 i7 m, E" k w4 I# Z. H
pInvSort->MoveItem(i,nDestPos);
" V7 u; V4 u3 M) R X- m g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# l2 p2 v, q, j# q Sleep(5);
! h) ` ~" t! N6 A //Error("移动 - %d->%d",nSrc,nDestPos);
# j1 _( V5 W& H0 s3 t% l$ ?+ | nDestPos++;
6 l% M, w }. I$ Z }' q, }3 c3 z" U7 _$ L( F5 K) Q
//取第一个元素的信息
4 q6 B! P! G: ^( a! N. e: j, X /*
' r; l% }9 ?( ?1 Y( ^ if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# t% B, X9 F5 Y6 v) O4 b4 L
{$ j0 ?; I4 [& ^9 d& F% R
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 h. p9 j" J4 Q. u* V3 @9 `) I, h# X
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 ?+ ]' ?+ ?7 P3 a; |8 I) _
}9 F- @3 T7 `9 R$ ?+ b* \/ r0 b0 v9 G
*/3 i' h3 y4 J: o' ]
//////////////////////////////////////////////////////////////////////////; v, p* X( n$ @$ T l
break;
: T9 n) x! B% N$ C* y }' r* z1 u+ L0 j
}
* c2 t7 [. I" ~+ {1 k/ i) p+ T}
$ z8 F n. {; U+ Vm_wndMenu.SetVisible(FALSE);
9 O1 v1 @$ u' ` g7 ?- _* `. ?" }- T& W. E
--------------------------------------------------------------------------------------------------------/ ]: s, \% H4 O5 i
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& Q) ~: X% {$ m/ `! U8 c& l{5 w: ^2 T1 Y7 F) ~
BaseMouseCursor();0 @$ H0 e" S$ x0 M- i+ }3 [
}; u) y. C. l D) F6 O; N- Y8 u% |
在其下添加:
8 @8 K+ o, q: m: ^; F9 ]void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 w0 P$ `2 G2 r6 @
{# u: K# m1 O4 H; F, X
m_wndMenu.DeleteAllMenu();
2 b" t! l& N* hm_wndMenu.CreateMenu(this);5 L5 c: e9 q/ f
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");2 x" n0 x' N. Z. r+ M" q, K2 X
( Q# }# u" f. p, {. xif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 `5 ]$ [3 I- F9 ~
{
% ^: B$ f1 D8 P' T2 f+ k1 \ //P以上级别才可以删除所有道具
9 `! [7 P+ k. [: k& s, H" ^9 n8 O1 _ m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
! H z3 a! a# u- \, t/ ]. M}4 r3 U2 }- p# K) W9 O3 |
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
, ]; ? T3 k$ I: v1 X7 om_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- D+ f; m, B9 @- a2 F& i l
m_wndMenu.SetFocus();; w) ?. k. B! \+ `
}5 K2 Z+ H# c: L# D# \+ |4 a. K
------------------------------------------------------------------------------------------------------------& E% ^$ x% a0 ^$ w6 I; t% {7 B
*************************" e) y( d- K7 q9 |8 N; a
WndField.h文件7 }; t! ^3 l6 ^" c' f# D
*************************- G" C5 G' N/ z5 }; E
搜索:BOOL m_bReport;
) D3 Y D+ s& h; k' R, m+ A其后添加:
0 A3 m% J$ L1 _; B) ~& ~CWndMenu m_wndMenu;
. O7 P; ~1 y2 S3 g- u$ R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
/ S! o: h8 W! D' T& O1 H, f! h其后添加:, o. A/ X$ W0 g/ [: i ]/ x
virtual void OnRButtonUp(UINT nFlags, CPoint point);
6 n* ?" \7 ?5 q- S) f4 P8 h) d: I' Q7 Z+ a
/ [5 O) _+ [8 C& N, S
|
|