|
|
源文件中_Interface文件夹下WndField.cpp文件
2 x) D+ |" a4 U2 x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
& d& d, a! r6 Q9 v0 n/ i3 q5 x/ w7 s4 D1 h8 D4 n6 m1 R& K
struct sItem
: x* m6 R# K8 q k' Y+ }{7 D! {' M- _; B3 K" a1 k3 [" ~
DWORD dwId;! m* d5 w, j# U& V+ q
DWORD dwKind2;
/ n# r3 a0 c, }# o) PDWORD dwItemId;
# `! E% {; `* q E) `9 E+ V8 ?BYTE nIndex;
" @1 J# R' l* y0 YsItem(){9 O8 y6 p- m& T3 A
dwId = dwKind2 = dwItemId = nIndex = 0;3 a& J& ?) ?# `! Q" ]% c
}$ @4 V: H1 O B& {9 ?4 f
bool operator < (const sItem p2)
# Q* N0 W4 p+ _ Y3 ]{" u& E# ~; l* y6 l4 g
if (dwKind2 == p2.dwKind2)0 b9 O S' x8 T3 v* t3 w
{
/ T" T2 e R B8 W4 `2 s return dwItemId < p2.dwItemId;
4 t. r& b2 c( a4 K) ^ }else{2 }+ C% ^0 ]. Y% F5 J0 e
return dwKind2 < p2.dwKind2;
; b( ^9 f+ l. @8 r }
0 c: `7 v {9 c1 G' V; Y}
' z' p/ n4 w+ t9 N! T, E/ ^2 C: p- u};
* U0 ^% v- N7 m* @$ t, ?; Fclass CInventorySort! X. |! P: M' ]: b, [) o
{
8 L5 P; ~' u3 U5 y) Ipublic:
5 p+ o. Y9 X7 }$ {7 ^" {CInventorySort()
K6 \; G: V E6 {! h+ |3 L' ~; ^{
7 O+ o0 @0 V( W3 y1 a, t8 S m_dwPos = 0;3 E0 r4 C$ G$ e. U
}. }1 M7 W$ i V
~CInventorySort(){}4 j" [, I5 L7 S8 d- _ U6 _
private:
2 A5 z- c1 D i$ OsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 D# D" K" O, U! KDWORD m_dwPos;
. A; ^& {) U/ ?) Ypublic:
{$ | v9 |, d& Gvoid Add(BYTE nIndex). d2 k9 i% d1 L8 P
{
+ x, o, l7 K/ i1 ]6 D: c if (m_dwPos >= MAX_INVENTORY)
( A& Z2 O" M( b' g {0 F, O5 E$ q! z
return;
! J8 J1 ?! `( _( f: M }! E! Y5 V0 D, i0 Q
m_Item[m_dwPos].nIndex = nIndex;
4 I3 _3 D7 b/ y/ r m_Item[m_dwPos].dwId = m_dwPos;& u4 _* P1 [; r; v+ ?2 E
m_dwPos++;
; D5 Y3 g3 @6 J+ p. S- n" ?}% j1 O9 I2 j8 Z3 L+ E/ {
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. q! I3 ?) o- ]6 N{
% h& ]' h8 A7 C$ u9 N3 J, p for (int i=0;i<MAX_INVENTORY;i++)8 C, _! }0 o! [- z
{
- l( W- Z+ j7 m: [* I4 m if (m_Item.dwId == dwId)5 f% F" ?$ k; C$ U0 m% d( v, P1 c2 M
{6 K/ k! m1 m) @) |3 T
return m_Item.nIndex;' L$ F, H0 x0 b! w& I }) _! a
}
. M. x0 s% [, y# _ }- P5 y2 d2 Q; [: O- t5 y$ _
return 255;! m" Q% L. B* J, ^
}
4 s8 c, G3 f% Z/ o+ ivoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 U8 s, x: g" }% j) s" ?( v9 n
{4 F% U- _4 a9 [
BYTE nTmp = 0;4 q; G/ n8 G" [+ G) Q6 M
bool bDest = false,bSrc = false;$ }, d* |/ J7 v6 m
for (int i=0;i<MAX_INVENTORY;i++)0 C- F4 I# T9 I% x+ J
{
0 j) ]0 e3 i) x3 S) \/ g6 K if (dwSrcId == m_Item.dwId)
7 U( I: r0 ~( ?! V- K. T6 h. x {
- R$ N; p i% U3 ~ //id相等 则 改变对应的dest和src
% C2 p5 M0 K" [4 O% Q1 d nTmp = m_Item.nIndex;; E% p, B! U8 N' P: F& M9 H
m_Item.nIndex = dest;, W% B( ~: F1 S3 f7 X6 E( o0 E
}
9 x+ G, n3 J% G0 q$ z7 S, e1 q }
7 @3 C- ~, M k U0 W3 f6 m //临时数据保存完毕,交换开始
: v! g' ~$ w. k for (int i=0;i<MAX_INVENTORY;i++)$ v4 v7 \- x2 K R" W q
{! `8 ?- a% v' i& S, q; z
if (dest == m_Item.nIndex)2 W! X% A" U& j9 Q, s, @3 ]+ i0 U
{+ l% G# q# w1 e
//id相等 则 改变对应的dest和src0 e" b1 O9 a$ u9 {. Q
m_Item.nIndex = nTmp;
' d, n' a) o% g# U- J% n- i+ k }
' j2 }% W& u- u# c }
. X9 M @) p% ]" C}
4 o7 [9 s" b+ R4 a& s9 n9 g. }};
; ^4 T/ f- `/ h/ s( g" I9 a------------------------------------------------------------------------- E o" o1 W+ m: R6 F6 p
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. s+ L! R, {5 l3 ]2 D% ~0 O搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
/ D+ X$ H8 _, E8 B' V+ e紧靠其上添加:+ i6 ^. z2 i( t3 [
if( pWndBase == &m_wndMenu )
9 ]; q$ m1 ?/ t' j* R& W{0 I) K7 R! `0 M, A
switch( nID )
9 Y; S/ K7 f; |0 j {
$ u' i f. u* r( `% ~5 A case 2:2 Y: _% {/ d6 W! x9 ^" z
{
, Q1 u' Z& A7 L //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 A G. z2 Z* [
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) E, _0 @3 n4 p J2 E1 n {% l' n1 T. d0 ^6 n. M' ?" x' \6 g
break;, g, T& W. _" a. C+ e8 j8 e4 Y
} g7 q3 a; t3 V7 C: x. h
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 K5 c% o7 X& a% S. I/ @
{. G: K7 _/ K( Y4 X
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);! F" u6 X5 Y6 ]3 z* F# l/ g5 c7 p
if( !pItemElem )
) W7 M% H/ I6 u& A1 n8 I. J7 v: C continue;
9 [2 M6 @) @$ G% l! l4 K5 b P if(pItemElem->GetExtra() > 0)
# G# U$ E& f7 Q3 D6 I( N7 [ continue;6 ^2 R% C$ s1 _ x1 z/ H* j
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 I* h9 d S8 [* v3 u+ I' ~0 m
continue;
% z5 y0 ]4 L& d( s! E3 A if( g_pPlayer->IsUsing( pItemElem ) )+ C/ V' k0 F- y' r( v( t
continue;
3 ?* _. |6 a6 x+ J if( pItemElem->IsUndestructable() == TRUE )
3 G5 g7 S% ]% d* } {3 c7 P& i5 Q( ~% e
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: _- Q% D3 P% V' _: ~$ C6 G
continue;
; R, L8 F$ M6 i$ p }
) s0 Y/ M( b: N1 Z g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( y' p/ c( h1 y# {& N+ F& r* h }
; l, d( \( r5 \2 A; p8 I break;7 X: ]) j! K1 f/ m) Y1 x1 x+ t) }
}* a' ]$ |. W' v6 x$ R
case 1:
: ^) x; R/ v4 D {5 i' @8 Z0 t: S( H$ y5 }
//整理背包
( Q6 W: y8 E, S* H! v //////////////////////////////////////////////////////////////////////////
8 v! c" N- z+ }* o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );8 l/ s* _- Q' z. q3 Z" A
/////////////////////////////////////////////////////////////////////////// ?6 t& h+ u3 ]! S' J+ R/ y
//////////////////////////////////////////////////////////////////////////
" T' d$ o. g0 K- C/ ` Y* Z CInventorySort* pInvSort = new CInventorySort;
9 `2 t& `7 j) }8 m vector <sItem> vItem;
9 e$ ~; G ~, E7 F% V' H vItem.resize(MAX_INVENTORY);//初始化大小3 K$ R6 @: t" ]+ P, g7 G- k8 ?
//////////////////////////////////////////////////////////////////////////8 q8 p( I5 q7 U4 }9 X
//填充数据
+ |. [8 n6 \$ a* M1 \# V- | for (int i=0;i<MAX_INVENTORY;i++)) F8 }/ I- w J# _4 @' V! j
{- [7 ^+ X l. O, i% r8 C
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& |! o) ?8 O" B" _
if (!pItemElem)
6 f% O+ h* C0 o3 F" K K7 L {
$ m2 W( c0 l2 V$ s! j, U2 } vItem.dwKind2 = 0xffffffff;
9 s7 n" r" ^0 D% E. C- f3 X vItem.dwItemId = 0xffffffff;% w' `, J7 B# V9 j8 ~, E7 r4 d
vItem.nIndex = i;
) l, d# Q/ U0 J# z }else {. Z- H2 d5 L5 T7 t
ItemProp* pProp = pItemElem->GetProp();( K1 j. k/ q/ @+ c& l# a2 v
vItem.dwKind2 = pProp->dwItemKind2;$ r; ?' i d' E" a- |9 j% D% L
vItem.dwItemId = pItemElem->m_dwItemId;
; i1 T8 a" a8 {& \6 b vItem.nIndex = i;
* g- B. n% k; C7 |& L, G* Z+ h }4 m1 I, D# a |5 z* V
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ^% ?0 e6 O9 o% B" f7 L5 r }
c j9 L$ M$ I1 y7 Z; }8 P& I# i$ j$ E //////////////////////////////////////////////////////////////////////////4 [" u1 @- ^% V0 O2 Z$ ^2 R- L
sort(vItem.begin(),vItem.end());//排序( C% w2 ^( W2 \0 {6 l: ?* j! q6 c
//////////////////////////////////////////////////////////////////////////9 i6 P! A y8 e7 D/ v! h' b" x
//交换
* i: A" a+ @+ i0 u+ i! a for (size_t i=0;i<vItem.size();i++)% `: m9 \1 T4 ?: C
{
* n' ~9 w2 T) l3 w6 Z/ w" N9 c- ^ //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 T7 }6 x9 a! G
pInvSort->Add(vItem.nIndex);
. f& \4 Y/ B: [0 N7 s. S( ^ }' `" ~& l# N9 |- F" o
BYTE nDestPos = 0;8 m+ t" l; B/ R4 V, ?9 m
for (int i=0;i<MAX_INVENTORY;i++)+ H& ]3 l0 s( }3 `+ } J
{4 u7 w" z9 {* S8 J
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
2 i8 u9 \- ?! V0 G2 Q if (pItemElem)
5 \) b. \9 P3 U y% a {
& o! G) E y: N# z6 b if (IsUsingItem(pItemElem))5 h2 e6 i$ i3 C7 Q: B& I- w; I& T
{) p! \# O6 m1 t, Y
//这个位置无法放
U1 l2 ?. [+ i! j; {; D$ R nDestPos++;
; K7 C: j0 T4 X! M1 s }
8 b) {9 a% I2 U }
$ F" ?/ f8 x) z' ?9 b0 n$ j BYTE nSrc = pInvSort->GetItemSrc(i);6 O4 \/ S; u" d) u, U
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' K) K( H0 l0 E) T% p! k
if (pItemElem)
4 p( q" r) y& }0 R8 ~8 L1 k+ F {
. a+ G$ V, v4 ]$ [ if (IsUsingItem(pItemElem)). q8 R& j$ |% i6 D0 J( X
{
. u n& l# r! m! L2 j; I* o1 q //这个道具无法移动,跳过
) T8 M& s; W Y; _6 L V: G continue;- n+ j5 ]2 M* h0 K$ |
}
. c. e$ u$ b+ o- L }else{+ E7 Z& n# V1 j7 i' z& n2 Q
//空位置 不用动
+ u8 G3 [9 K5 G0 A$ y: ]9 G5 S continue;
7 \5 Q* t3 t6 w/ F }3 [% U2 w$ g4 i8 ]6 L
//////////////////////////////////////////////////////////////////////////5 d" ^: k2 }$ i. i6 @
//开始移动! w, Q7 \, ^. j/ L8 O
if (nSrc == nDestPos)) i1 Q' `5 y- Z2 I3 l' l
{( w; _4 V' b/ J; V
//原地不动
4 V/ t6 x" q# E2 l# f nDestPos++;, X2 A, W: k3 `. ?6 K6 K
continue;: Y/ x+ @' n+ g' L4 Q4 j$ L
}
8 x2 [' S4 e0 M5 e2 J9 q- V* V pInvSort->MoveItem(i,nDestPos);
n7 g# v! V8 M) N% R1 t2 I! N g_DPlay.SendMoveItem(0,nSrc,nDestPos);
9 b; D2 q7 c& @) @$ n( ? Sleep(5);8 ?* f; n: I; c7 Q) n0 N
//Error("移动 - %d->%d",nSrc,nDestPos);& j& h) _4 T E) u E" {
nDestPos++;8 M- R1 R- h) j8 ?" d5 F* Z$ P
}# V) J `% ? u; h
//取第一个元素的信息
# r* A! [9 \- n& Y+ [ /*
V0 V6 q4 _* F: `5 z- C' V. R if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff) F0 ?7 J0 }7 v+ w& h! _+ |- C
{
, z s% u# m$ e# o5 \, i7 O0 p Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
+ Q! }4 j) j& q; n$ Q g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( k. T% j* [& b }
6 z' e5 `2 G8 }! o0 {/ m# ~ */
9 g# t0 B" f; f //////////////////////////////////////////////////////////////////////////
" o0 W( [0 E* O" n break;- d+ E) y0 E, P) e/ M0 B
}7 w5 z7 ^2 |% T4 i! S
}
( T" J8 F' U0 }. b' O' w; P" \}: J0 f0 S6 ?) R
m_wndMenu.SetVisible(FALSE);8 c+ ]- J: L @# C- Q. N) |
% I! n3 W" l, p4 K7 w- v0 b
--------------------------------------------------------------------------------------------------------% g$ z& Q" {: L0 H$ a) k
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
2 ^# P! @' n( `$ y0 t! O{ [4 p! \4 n6 P- M# X3 T
BaseMouseCursor();; x2 x T9 {# A% ~3 z
}
, a' L+ _$ f- T. m) ]# l5 C/ m在其下添加:& X" _# Y+ S8 H* F5 a9 `' y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ X; v7 \- N/ O) p' @6 b5 H, ]) G
{3 `$ s: E# ?- b& w7 Q, V
m_wndMenu.DeleteAllMenu();
' k' s6 v7 \$ A( g3 r# Um_wndMenu.CreateMenu(this);% X+ f2 O! `) Z9 X. |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 g, ]8 C$ b. O/ L ~; A
# S+ b0 _" [9 oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ o4 x/ e, Y; F. Y2 K
{1 d* ?" d% X) a4 N+ w/ ~
//P以上级别才可以删除所有道具$ h$ |6 O& c* a0 L
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
9 I& ~" q/ ~* m# H+ s% r}
; W/ O2 W& z" N$ O: B6 |( Om_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );3 K& `2 v& A1 ~, D, Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );7 s9 g- Z) z' h
m_wndMenu.SetFocus();6 _ n" Y ~* N# ?8 T
}, f5 p* G+ W5 l: t+ @# D
------------------------------------------------------------------------------------------------------------
2 ]1 v. ~. z6 V) K*************************2 f; v+ H; l7 x/ O0 I( n' C
WndField.h文件7 D9 ~% I: |' _$ U
*************************8 { K3 \* Z- X
搜索:BOOL m_bReport;) ]- U$ s& P: I$ Q+ t8 w
其后添加:
C+ s7 p0 m5 e6 cCWndMenu m_wndMenu;
+ y6 }2 }# w% z1 M$ H搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
4 t4 |( f6 q( s' C( H6 j. t/ W) l9 R其后添加:
3 r5 I! L4 x$ Y3 E& i5 Bvirtual void OnRButtonUp(UINT nFlags, CPoint point);* R( _4 S8 Z" x# k4 o: v# ?% B
! }9 k2 p- [9 ?8 l
% g' n% e/ x6 v3 ?2 O' O( g |
|