|
|
源文件中_Interface文件夹下WndField.cpp文件! F. Q' C& t2 H. [+ Q& c$ y
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
" u) _$ @# T) N
6 g; `3 D, i+ p- nstruct sItem0 v3 S3 b( e! q3 D( U+ E
{
G& S" ]- l1 V5 vDWORD dwId;1 E4 P8 [, H/ Y- |" B$ w% J
DWORD dwKind2;# d& b G8 _* H
DWORD dwItemId;
& a3 @6 J" c# ZBYTE nIndex;
3 j, f% M V0 Y+ F) G" v* |, Y9 csItem(){
2 m" z; s* \5 Z* u1 h% o) C3 H dwId = dwKind2 = dwItemId = nIndex = 0;) G# X3 O8 g% a4 w# F0 `# p
}
6 F; }/ ]" B5 I o* ?4 Vbool operator < (const sItem p2)% [! v" t# A4 |1 ]% ?/ e
{
+ M5 n: D: x/ j0 _ if (dwKind2 == p2.dwKind2)2 b2 d3 K5 N/ E+ M
{. \7 r+ _( p9 h) Q4 {: g
return dwItemId < p2.dwItemId;
# _8 H1 t4 Z5 L2 j# h }else{
9 X) Z6 ?" j! S! s4 W" D) k' A1 k return dwKind2 < p2.dwKind2;
) ?4 n) J/ w3 U3 h/ o }, ~, e. W7 ]! u7 {& [$ p
}; v) E3 _7 E8 _& L
};8 Z! r C" i, C
class CInventorySort
; T, ?+ v2 _0 j3 }% @{
. g( T' h" y* spublic:
) N" A5 p7 [4 W0 C, ~CInventorySort()
+ T/ P4 X. I0 D% `5 \{
- t0 l1 F8 S% A9 R* q1 [) h3 D m_dwPos = 0;
1 @. l" |) B' y8 y}
- {$ D! J, i9 i, i4 ^~CInventorySort(){}' L2 Y* U& \9 Z; A8 U/ Q, l
private:; T p7 Z* A0 a8 L" L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息6 Z3 Q/ N3 J8 n% w& P* ]" q
DWORD m_dwPos;
7 `3 s8 ~% m0 j5 c2 D' O2 \public:$ I/ A9 ~' r o: u* m
void Add(BYTE nIndex)
) u; {( E I, G{
1 C+ N1 ^0 j3 f9 @6 N) e if (m_dwPos >= MAX_INVENTORY)
% T! L7 `/ @; k% C$ b7 g {- _' y0 t% i+ ` N3 u2 Q7 U9 d
return;
/ m4 W1 ^4 \: K) `- F, B- b* h }
$ f, E0 r. Y* [2 B) l+ W0 w/ P. P( d/ Q m_Item[m_dwPos].nIndex = nIndex;
" L$ s8 ^/ Z5 A% u3 H m_Item[m_dwPos].dwId = m_dwPos;+ V- F, C/ R' V. k& {, p
m_dwPos++;
8 m6 y2 C7 G0 f4 p2 ~}
# S+ f& X/ t1 H3 z8 d5 z9 TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 ~) O5 K* j1 w& P8 v/ t* i! k
{) p" L- [7 w: Z7 s8 s* Y
for (int i=0;i<MAX_INVENTORY;i++)0 D% a, r. N; b# m
{
& B/ {( ]0 s" ?: o7 t if (m_Item.dwId == dwId)( _& t* n* k% o- s4 |: L
{
3 S; i! E; Q- Q: A& r$ ~+ V return m_Item.nIndex;3 n0 g% M$ H# p
}) D. V* U# z$ d: K
}
" H- Z: \. ~8 a) f& D. d! U return 255;$ b9 f1 m; D3 W, Y9 c4 [
}' t; f+ E" }6 x" w
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
7 w6 S# O# G, |+ x l{
3 j, P8 \- z# b, H6 x7 V/ i1 v BYTE nTmp = 0;5 E+ `) a7 R+ C
bool bDest = false,bSrc = false;* ] E# u& L1 a
for (int i=0;i<MAX_INVENTORY;i++)
: g8 m' Y& Q7 i3 F {" t- N! Q! x V/ \7 C
if (dwSrcId == m_Item.dwId). m! Z" P3 C9 M6 W" \2 E
{
4 K2 N, b" [. q, h2 P //id相等 则 改变对应的dest和src
* M- K% J, L5 ] nTmp = m_Item.nIndex;; Z4 V( [; f0 _; R/ L" m
m_Item.nIndex = dest;* A' e: L/ Z- X# M( G$ ?( P a, i. W* Y
}
8 s* Z' n$ c8 V" } }
H# H1 ^, H1 j) p0 H6 _/ c9 n //临时数据保存完毕,交换开始$ v1 C5 k3 q- \3 H* C1 s d: O
for (int i=0;i<MAX_INVENTORY;i++)
8 h3 _" v+ \) \2 @) s5 W {8 I# f* Z( l3 r5 f& [0 Q
if (dest == m_Item.nIndex)
8 j7 r$ g8 I: g% `- G {
/ n- i9 B) k# q! N2 o7 c //id相等 则 改变对应的dest和src' w9 Z6 A" {. j$ S. Y' X
m_Item.nIndex = nTmp;* h% ]* a$ i4 l1 M; i
}' \; W2 q% b$ W) Z
}3 q, f- }& g0 T' W' `$ Z
}
* M* E. c' f& W};
* v4 p3 n0 k6 F2 v7 Z6 {( t-------------------------------------------------------------------------
2 D* H/ l! X. ~ i" E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 \! q/ z6 q. l) V2 r8 K9 @搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);: G" p% q3 d+ @! Z
紧靠其上添加:9 j8 U# D* S9 J/ z7 v3 @
if( pWndBase == &m_wndMenu )7 L+ w% E0 P9 _* l0 U
{
/ H( v( d0 t, l$ z" l6 c switch( nID )
2 I. _) h0 ^ E {
$ l. W% W$ m- e e# ?6 ~ case 2:) E/ w1 |7 e; h
{
0 S* A0 D- w- k, e //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);) q5 F+ q) p% ~) u6 e5 }" D
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 I8 V3 N% P: q' v+ x5 k {
3 s$ z r8 D& o7 y/ u) f4 y5 I break;1 @ s: g$ e" @% g' M
}: j7 ]& E# F5 A- ~; _4 X
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
9 R+ M. J% Y' k3 R {) t5 y5 H" H8 k3 |9 B! V7 @8 l
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);5 w T0 |5 m' Q g. f5 X
if( !pItemElem )& x/ A; z; J: f [8 k$ ]7 F: H2 L
continue;. X- j# D' B9 k2 Z
if(pItemElem->GetExtra() > 0)
( S: A- Q/ {) Y, Q4 A continue;
0 ?9 U9 r1 g7 j& f$ y4 @# I if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" f6 q. X! B) M0 A7 b' n1 E( l continue;
- q1 p# ^- t9 L6 C% P if( g_pPlayer->IsUsing( pItemElem ) )7 X& R6 j# b" Q, P+ a7 R9 q' B: k
continue;7 ~3 P c3 Q6 K7 ]& q! {4 X
if( pItemElem->IsUndestructable() == TRUE )
8 _$ ]4 U1 I. Q2 H* `6 l$ U8 V {: v) H8 \7 u Q
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
9 e1 y5 J6 w4 |1 F i: {# U continue;
0 W- L/ y2 `) Z" Y }
4 M" P& V" c2 s g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ F. i2 I" g+ H6 O7 D( } }
8 Z9 A, x: j1 z0 \9 s7 |- { break;
* e- C; x) o/ v0 |6 s! K C }5 m* w: g3 e9 U1 [" N# Y
case 1: [* [4 [/ z u2 H0 j& E5 _
{9 A' z7 [; }$ k8 d! x% K ]: N
//整理背包5 E, O8 g4 w6 u$ _. l1 }! R- T. P
//////////////////////////////////////////////////////////////////////////3 f' p0 {9 d& C' L
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 k1 W$ Y' j- r3 I+ Q, J3 Y //////////////////////////////////////////////////////////////////////////
$ y& _, e4 h9 y //////////////////////////////////////////////////////////////////////////
+ Y7 U: ^: q# F+ b) I4 w) q2 F# f CInventorySort* pInvSort = new CInventorySort;7 `, |2 m' L2 a2 ^4 h1 p/ f# l, }
vector <sItem> vItem;
( z) u& H# ^( ? vItem.resize(MAX_INVENTORY);//初始化大小
! `" p2 B; }, g/ G8 g //////////////////////////////////////////////////////////////////////////# ~! H- x8 d$ w9 N" n5 f
//填充数据
* X7 Z! l, ~; a& b for (int i=0;i<MAX_INVENTORY;i++)$ [7 U3 y( g; x. ^# Z/ S
{2 [0 Z( W! f2 \1 t
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
/ o% u+ |& R6 G! z! r1 n if (!pItemElem)
7 j" ]# }' d! A& Q) c! U( E. R {
) i7 ?' H* z/ Z. x: `( s/ V. d/ C vItem.dwKind2 = 0xffffffff;: Z/ ?- n) i R# y
vItem.dwItemId = 0xffffffff;# d' g+ |: Q. a. h% Y) x
vItem.nIndex = i;
+ y6 f- Q0 B- W3 Z/ f6 p* @ }else {7 Y. Q# L& n7 R( w8 M7 A! u$ O
ItemProp* pProp = pItemElem->GetProp();
% E' e" K N' F4 m' T/ t vItem.dwKind2 = pProp->dwItemKind2;
# O! d$ { R9 @- B, A vItem.dwItemId = pItemElem->m_dwItemId;; B- I1 N4 i3 |" Z
vItem.nIndex = i;
& [; y" x G& ^! w- I. [0 V }. e0 R2 f9 @5 V* Q# [
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);; a7 y% @$ c1 T
}
) ]( e5 N! H) [% p6 } //////////////////////////////////////////////////////////////////////////: [& B' z4 ]1 x6 T, H, U+ G6 s
sort(vItem.begin(),vItem.end());//排序
" U/ O3 ^" H% b Q, t //////////////////////////////////////////////////////////////////////////5 U5 {2 d3 R9 z9 H
//交换
$ T8 |" z& f# o* n k3 w) \ for (size_t i=0;i<vItem.size();i++)7 V( ?7 Y: f7 e$ I: L/ F0 f
{
8 A$ N7 G9 f3 O. X& _8 c //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* u" ^, T; d9 n) T
pInvSort->Add(vItem.nIndex);
9 a2 n: @' v: v& f1 q* e M7 L+ H }# p7 j a; n ]' v1 ~% r
BYTE nDestPos = 0;
* l# V( [3 x$ z( n3 B9 i: K for (int i=0;i<MAX_INVENTORY;i++)' }3 k6 `. T% ~8 X9 N( a& B
{7 }/ s$ d3 _# a" D7 Q
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
8 [2 O9 {; l2 p7 ]1 L- |5 B if (pItemElem)
, A9 g% o3 u. q2 V2 X) R# W! o {& J- A4 ?. \% d
if (IsUsingItem(pItemElem))
8 ?. k, Z4 Y+ ^* g2 a( ?2 j r: y {
2 l; ?8 C! T+ g' w1 V! \" c/ _ //这个位置无法放# f. I& c! s& R q6 A# c$ p. L5 s2 ?
nDestPos++;
! v* |% L6 q0 q3 j) ~) P) O, |+ W }% k4 _, A, ~1 O! K1 y
}, I% v2 b: \( S, m" C
BYTE nSrc = pInvSort->GetItemSrc(i);
; g6 i$ G z2 K; g4 s6 `1 E$ k pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- y1 l& T8 v& T) n6 x1 r k% F9 u
if (pItemElem)
- {9 _/ Z: B( P4 C* S {% E" o {4 V( ?9 a# T5 _0 F6 R5 m; b
if (IsUsingItem(pItemElem))
4 s6 I% z- \) P# O$ G. H7 m% u {' A% d9 f; l9 i! W9 i2 Z! T. U j
//这个道具无法移动,跳过
+ Y5 }& g* r9 S8 y; P continue;
# Q2 F, N4 Q m8 c' e2 U }
~5 q/ |4 B" { p8 h( ` }else{
9 y* B# Y* a* m8 L& T! E //空位置 不用动" B: Y8 L; F, w8 F
continue;! o0 x) d7 }' H2 a* t3 I
}
1 y7 }! N1 z. K" } //////////////////////////////////////////////////////////////////////////' L! I: v0 j$ q! ]4 P
//开始移动/ r- K/ d2 \ }" z
if (nSrc == nDestPos)
6 G! k6 G9 a8 V4 ^5 D/ Q {
' c% U3 V, t3 D //原地不动1 `% |9 \" v5 u' T
nDestPos++;$ _' W! t* n0 F \: D, V- X
continue;, R6 G5 L0 V: ?" ^4 Q, Q0 \3 P
}
$ u& D* V( ~- }% u/ i3 i pInvSort->MoveItem(i,nDestPos);
5 I @2 @+ o" D, ` g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& l5 |/ F, f, z! R: J Sleep(5);
- f" v D( ^$ u' ^ L2 N //Error("移动 - %d->%d",nSrc,nDestPos);1 J% R; ^/ r9 U5 H9 @
nDestPos++;
. u- s) Z8 a; P/ A0 r0 {6 ? }3 K( w4 b2 E% B: E8 p# T4 i$ q
//取第一个元素的信息
1 p$ ?: w) i1 Z5 A- G* h1 C /*$ l- a. d6 i1 T; F
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
# {+ g: ]' _: L* Y/ M, w {
9 A' X" R [; O7 R! A Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
' h8 _) h+ @4 V8 j8 b* z g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' n$ W1 W; t7 G5 P7 `8 E" r }
8 b# N( T" [3 O. x */
7 s, a0 z$ B$ ~ //////////////////////////////////////////////////////////////////////////8 [# d; E/ e6 Z) ^* u' w& R
break;4 z( i% K1 [9 w/ c, Z4 \( E
}* V' M& B) z1 ~9 J
}
7 v) w; F( l: ~8 ~3 V6 l# z}% E* J1 Q- o" S* H$ J
m_wndMenu.SetVisible(FALSE);
1 I6 s" z: v2 D& E# F! C# z4 Q% A3 ] L
--------------------------------------------------------------------------------------------------------8 E. `- V( C+ @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
% B/ ]( d! y# i{! z% v" Q9 r1 B# Q
BaseMouseCursor();
6 j3 v/ _; Z' n4 u+ R. F}
2 Y: O. ]/ v0 D+ A; P7 p在其下添加:$ c v* z" x; V L9 J5 B; s
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: m0 C) ~7 i. G{
7 l2 z% [1 ^9 e/ b6 y' i+ r" @m_wndMenu.DeleteAllMenu();
7 o6 o" S" `, ^! J+ z9 Lm_wndMenu.CreateMenu(this);8 W% @$ \0 C' V0 Q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");) y' \3 c m4 d) w+ ]8 h
' s; p- H+ f; N7 o& ?& v
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ ]3 c7 V5 N2 y7 m' V) o
{
4 I5 o* `5 M) u3 q( o0 Z3 j //P以上级别才可以删除所有道具
$ q. c+ R% ?2 {+ [) H2 d! Y m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( ~* V c+ ]4 A7 s- c}
9 v5 Z1 z; ?* h0 Pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 w' J+ r" `# H
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 }4 c5 x5 j t4 h$ B# I' S2 Fm_wndMenu.SetFocus();
6 c6 G- L5 y0 |( y" L}
& y5 M6 Y5 {; c* D( X6 n/ ^7 d------------------------------------------------------------------------------------------------------------! Z. k z* j2 h- d: }" ~1 S
*************************0 D, F$ i2 r" B$ K! q' m/ R
WndField.h文件% M- e. {& u$ }
*************************
7 a. l- ]$ E1 S- ]" V搜索:BOOL m_bReport;, N" _; q& P e( P# K" X
其后添加:
" N/ P2 p+ X7 Q/ ?. CCWndMenu m_wndMenu;; T- J/ c2 F5 ~9 F0 A4 q {1 }
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& n9 N% {. {+ h p8 [7 `) x
其后添加:
9 Y5 h6 r: m1 e# v O; Dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
! `( r2 n% W% ?+ M2 Y5 K) o! l: M! `! e8 y( s ?2 R0 h9 \% k
+ P4 v$ E. S. u9 h* Z. H# |5 |7 G
|
|