|
|
源文件中_Interface文件夹下WndField.cpp文件. l: z' x2 l: A9 V C& A* K
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ S% E- Y: s# t! y$ s/ n$ M* @2 W
- z C [; l: @+ U* c2 g( [struct sItem2 I0 l! ?% |: W! X6 @
{9 ^8 s9 k$ \& g& X# `" V
DWORD dwId;8 V" a8 ?" ]0 X1 S' b
DWORD dwKind2;- I0 }4 ~# m# u, p
DWORD dwItemId;
8 b$ }4 O9 f" t: |# p# _# OBYTE nIndex;
7 t% {, J0 k2 BsItem(){
4 }- ?1 o0 r1 N1 [) ? dwId = dwKind2 = dwItemId = nIndex = 0;
6 Y. h9 x9 Q. o" i7 z}
1 W* r/ T" A& P3 U* q' n4 ybool operator < (const sItem p2)9 s3 V. o: A) N6 {3 [3 M
{
" t1 T0 r" J4 \: @) N' i- m6 x# d if (dwKind2 == p2.dwKind2)4 I3 I1 o# ]( O) S% R: x
{/ x+ e4 R+ j$ a8 _0 ?, h/ T
return dwItemId < p2.dwItemId;: N, @2 q: V- q7 T& p8 i6 U( d
}else{
A, O" {$ e. h% U return dwKind2 < p2.dwKind2;8 ^* Q9 j/ z8 s U
}( E- N) @$ m1 `! D
}
4 u5 Z# {9 l* f% E};
: Q [* q9 m; fclass CInventorySort6 T0 y% f6 Y0 M% b' v
{
9 ~5 }- B4 ^' d) Spublic:* ^% Y5 b# B* b' Z2 Q$ ?
CInventorySort()6 x# u" W8 ^* \% `. a7 ?
{
/ J3 ~8 |; o3 U m_dwPos = 0;
/ I/ \, s, @2 }% R, r}) c: C- n! b9 Z I! `
~CInventorySort(){}
, H1 h( c, ^8 R( {' Rprivate:
3 C! \! h. t+ T$ _ S9 w% f" TsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. B: B. v& ^) s& M* e$ s5 n, w- XDWORD m_dwPos;5 c* \( H" V+ W
public:! E: A0 F: d3 X0 i6 V
void Add(BYTE nIndex); M4 }& \7 Y$ w$ B! D
{
: V7 O! M% B. m# a" k if (m_dwPos >= MAX_INVENTORY): Z. K: J, c0 r
{
+ U+ b1 e, R! H; W return;* W- Y5 \& e& Q9 b3 U
} ^) |- x5 [4 ]" l+ |; ] K
m_Item[m_dwPos].nIndex = nIndex;9 M8 h# R( \8 A6 o3 d; o1 r$ T3 R
m_Item[m_dwPos].dwId = m_dwPos;
. p) T. \2 ?0 J: C m_dwPos++;
* m- c2 U$ `/ H& E0 h0 K8 V; ~}
$ X; I9 f8 m1 R0 W5 iBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% n% ]# a1 c' X1 K{
: S) w, }6 u8 G- M5 O1 T3 A for (int i=0;i<MAX_INVENTORY;i++)
$ G! b: Q9 [1 Z$ q {
! Z0 V% ~' l! e, Z, g2 e: X" h0 U if (m_Item.dwId == dwId)( {) G: c8 o( c: H4 o
{
, X. s4 j! e8 U return m_Item.nIndex;: [; V+ r8 n. e. `( E6 ^ L$ ^, a, k
}9 G e/ \& R m/ m3 f! X7 n. m
}1 } g8 E# Z$ k. i, I4 F
return 255;
& H3 a4 y, o( _ I: v; X( C' X}! C8 y6 K0 z) G9 l2 ?# f u: Y
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 r, m0 \% u) J" k
{9 G& \& A F& W0 b6 ^
BYTE nTmp = 0;
5 _! ~& h5 l# v7 w' @7 h$ G bool bDest = false,bSrc = false;
4 A: h) a6 O4 |5 m# R/ r, N/ Q S for (int i=0;i<MAX_INVENTORY;i++)3 X+ w: ]" g* y! _" f0 ~
{6 A+ V* j9 A+ ]- U7 G8 p6 |2 ?1 e5 F
if (dwSrcId == m_Item.dwId)
" l% R; w, s! Z {
% e/ E! I. ]5 B4 q7 K4 }( K) r //id相等 则 改变对应的dest和src& Y) W& y8 a3 p R# g0 Y( T
nTmp = m_Item.nIndex;; @$ `5 M6 I! X! s5 V* p7 @& l( Y
m_Item.nIndex = dest;2 i1 @0 \% ?$ T! T9 u0 e' |* i& Q0 o
}
9 Z4 t' R; b2 d8 p }9 n- a t* z. ?/ P3 o
//临时数据保存完毕,交换开始
0 @! g. E C* J" f7 U4 p for (int i=0;i<MAX_INVENTORY;i++)( Y: I7 `( w3 a: R: J0 c2 `
{
. r% k1 a+ _1 M% D) L# E if (dest == m_Item.nIndex)4 k3 |; l( ?2 y
{, _5 R ^/ B6 @4 P, e. v
//id相等 则 改变对应的dest和src
! _* M# X) u/ b p3 F m_Item.nIndex = nTmp;
% e& E t) [* G- S! S+ ~3 B# @" ] }# K; |0 z, d4 R" v0 |# x
}
7 B# U/ t" a8 S}
m) i9 _0 ~: n1 `- _+ Y2 D4 C8 S6 U2 W};+ v2 j% C" g. w" W3 V
-------------------------------------------------------------------------' ]8 J2 z _2 C# X" i# A
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), T* A; ~ ], i6 n2 E% E% a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);0 ^2 z- c* j: v/ J* u8 G$ Y
紧靠其上添加:: T( x1 D; [% h: |# \6 l3 F9 b6 g* G: O
if( pWndBase == &m_wndMenu )) G, U; d5 F, Q& s8 s
{
$ E* [( I$ y/ F8 b3 w" h switch( nID ). h6 B# Y3 S V9 f$ \4 |
{
5 z+ @& u' b6 } case 2:7 s; t4 ~& t0 G3 `& \
{* t, Q3 p: q. L7 `* h* {" d; j
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. K' L6 [4 A- y# h( l4 O8 p+ P7 e( z
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ I6 q) T7 b9 _( e
{
7 [# b' ~* e* \+ W! M1 y break; u: ~. s4 o7 H; I: V
}
- {9 `0 b( }! |" V for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# s, V" G* b. F+ q$ _& E
{8 _5 ?% m4 h9 h+ f5 ^4 u, G# R" h$ R
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);/ K, H' K( G+ I4 E
if( !pItemElem )
6 j7 v# l8 _* C- P! ~( h2 K' m6 c continue;
" y# K7 b6 m. j+ r& n- q' x! i if(pItemElem->GetExtra() > 0)( K3 N* I) T- R
continue;
& [) g: B) f8 S if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
5 F& k" _9 l" |, o8 p z8 { continue;
9 _' I. o0 I6 \# H; q2 y if( g_pPlayer->IsUsing( pItemElem ) )- r. V/ b0 k: t Y" i
continue;
& e. n) n0 R a; @ if( pItemElem->IsUndestructable() == TRUE )
- O) Q2 ^( [; \8 H1 q- Q9 ^% e4 P9 s {" F4 O$ g# ]8 C/ n
g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );+ J0 M) i9 K# v# o; I4 a: @- f
continue;6 M5 {# p. e! Y2 F# E3 {8 I0 R2 F
}7 o) E! B9 p2 N, x* B
g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);- p2 L$ f* o5 q* j7 A4 O! H
}8 Z9 X! }) _# D' D+ [3 W" O
break;7 U8 Z5 b3 O4 T! s
}
! I9 I; _% A3 z# p5 `' l case 1:
+ V/ K; W K3 \! @4 O& p6 | { X7 x4 V3 v/ e3 x& E8 N, s
//整理背包8 V7 T# S7 ~3 b. j
////////////////////////////////////////////////////////////////////////// Z! U: G9 R- _% X$ h+ n M
//g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 c4 y {3 A1 `; D' `2 ]+ |0 Q* d
//////////////////////////////////////////////////////////////////////////
1 k( Z k8 Q) D) `! n$ w3 | //////////////////////////////////////////////////////////////////////////! @ O, c+ g. O1 V
CInventorySort* pInvSort = new CInventorySort;
* z& z4 M) C% [+ S1 s# A vector <sItem> vItem;
. v/ J' ]# y5 E- a& d vItem.resize(MAX_INVENTORY);//初始化大小+ N# w- t1 M4 k9 o2 Z
//////////////////////////////////////////////////////////////////////////4 R2 F! }9 y& T4 s9 u4 Y6 [
//填充数据
0 V( y0 g3 {$ q; k: {8 r for (int i=0;i<MAX_INVENTORY;i++)
+ _ I9 Q1 D1 {8 s# s& \- L {6 e$ ^: t+ i: ?
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 T: m! R4 u/ l" h: A if (!pItemElem)
) c& y. |9 t y% |" j( K7 y {
9 v3 K& J, O% V3 |8 E8 P) z6 T vItem.dwKind2 = 0xffffffff;
" ~# |2 H6 O3 ?/ l' ~0 B# j vItem.dwItemId = 0xffffffff;6 o1 o* {4 L4 V' D
vItem.nIndex = i;
/ k" L0 v+ C$ l) j# f) C& F }else {
+ i' J* u1 n5 Z* B0 e ItemProp* pProp = pItemElem->GetProp();
! G( G& f1 r9 c0 G vItem.dwKind2 = pProp->dwItemKind2;
; H4 [ K3 G5 ~/ o5 y6 n v# n vItem.dwItemId = pItemElem->m_dwItemId;
" v5 P3 p. P$ w- M- K G. B vItem.nIndex = i;
/ i5 C- f- m# x }, B; u! M% R' a/ E- K
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- E0 P, j r- H4 f. M! j }, B5 F! S" O8 q3 ]
//////////////////////////////////////////////////////////////////////////
- @0 N) q% C7 H3 c sort(vItem.begin(),vItem.end());//排序
j8 U W7 ^2 I% h //////////////////////////////////////////////////////////////////////////& b) B ?9 |! ?1 a) W! j
//交换
3 i. Q0 r' p& w+ u r0 N* M& B for (size_t i=0;i<vItem.size();i++)% g+ n% M9 K- z3 _1 Q
{ u, W6 Y7 P3 V1 G% j
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% y! a5 E/ @, Z+ Z: s7 h
pInvSort->Add(vItem.nIndex);' ]) K9 F& a, G. P( D
}2 E* g& ?" [ r9 ~$ ]
BYTE nDestPos = 0;- v- G2 V( D( U9 w; c4 C7 m
for (int i=0;i<MAX_INVENTORY;i++)) m2 H) \! R( L
{3 |; ]3 U7 {, v/ E* e, H- t2 \
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);- s7 V+ m# M8 N! i( T- W3 Y1 P( F
if (pItemElem)
# a! x' c" ~# E {% h$ d% [$ d$ @; _, L! `( b
if (IsUsingItem(pItemElem))& t, C. z. E' _% r8 f" L" c' s& Z; X
{
# s( [- w7 h& V) R& o) _ //这个位置无法放
- _4 J, t& [2 ^ nDestPos++;/ I( r# k1 ?5 f3 N7 u
}
, ~7 j) A2 Y3 Q }
; q) h) k. a* w& u1 {5 Z& s BYTE nSrc = pInvSort->GetItemSrc(i);" _( F$ l+ Q, N+ f( s5 ]- ] n
pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% d+ D; l; r# y" d, {
if (pItemElem)
1 s' l# a7 H0 C6 L- A6 j {
B5 P# k3 r& @# ~1 T, i if (IsUsingItem(pItemElem))
' ^: f- h( m& F" l- W {
- h2 [1 R% p4 w. N8 W9 s' ~$ b' _ //这个道具无法移动,跳过4 t0 `9 I) m4 R+ a
continue;
/ ^* o M" f% z5 } }
2 r; O: F; v) `( o! K9 { }else{
/ K1 W# i2 A, b& v' L //空位置 不用动
' K- ?! n1 U8 a' P! V continue;
5 u3 j/ |- c& V- r8 I: v }4 V! H6 H! K8 G
//////////////////////////////////////////////////////////////////////////5 M8 F, _9 c% H3 j' ]- I% e" H
//开始移动 o" e% l+ _2 a- T& y: O0 w
if (nSrc == nDestPos)
% R7 l6 M$ r' `5 a {
6 q4 r. e% r/ t& w& z1 [$ Z/ a //原地不动
5 D- Y. H4 e2 R. o5 W- |2 \ nDestPos++;
6 |. v& d# ]5 S; I1 V continue;4 l- _) o0 P' ~2 l) h
}
3 g" }7 |1 s; h4 m pInvSort->MoveItem(i,nDestPos);
! @4 B9 U, w2 v0 ^ g_DPlay.SendMoveItem(0,nSrc,nDestPos);, w! B" R. L7 |6 z( I
Sleep(5);! A0 R* O# ~! @/ N) ~1 u5 @2 n
//Error("移动 - %d->%d",nSrc,nDestPos);/ f; d' u' F; L% ^
nDestPos++;( I8 h* C$ u( m* U8 R5 S, g
}
9 ]4 T; v2 a4 K& n; p" z6 d: [" Z //取第一个元素的信息- }& E& r0 \2 N" P z
/* f- O3 X! S" c0 e+ q
if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* T$ R3 O2 f4 U& _ J# k. R4 B5 J3 G {; l4 R+ _) k. l ~
Error("Move - From:%d,To:%d",vItem[0].nIndex,x);! M0 k4 ?" ~( @. i
g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
- q) M9 K7 [% y1 W" b }
* Y& J) I" I' L/ y */
% K5 ]' P% c7 Z5 j6 U //////////////////////////////////////////////////////////////////////////# G6 n* y8 N# v; i
break;1 Q; r: h- R9 _1 D( ~; {
}
- E) ^, H3 [. ? V }
$ O8 u; l& v2 p0 r}4 U* {) N0 |' m/ P
m_wndMenu.SetVisible(FALSE);2 V5 o, r- [8 n; d& j
! s8 `7 i9 U$ S! C, O
--------------------------------------------------------------------------------------------------------* A; z, S# ]/ l; h8 ?
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. g- {. T# K, i9 U! Y7 m{( B- U8 m9 C0 A3 i/ ^3 B0 k
BaseMouseCursor();
) w, K' P) q( B}
8 I$ y7 C1 `( f- y* q在其下添加:2 g* `' D/ r4 a( c+ U
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& I0 B" j4 i' W$ n! k- |
{4 s. w( y: O4 f% R4 N5 r
m_wndMenu.DeleteAllMenu();
6 s& @- ^* d% ?2 B& o+ `5 Rm_wndMenu.CreateMenu(this);1 l+ V5 G3 R! l; b6 l: J
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
9 K) f9 h; i1 n
: @( h* B9 j6 H# l, t6 U( tif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ q' D! A' {( z5 \
{
" Z2 h: y0 u0 M& K+ M- }$ S* z3 X' B //P以上级别才可以删除所有道具/ s! D5 L9 \* L* ]% I+ o% Q: G
m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
, `0 w8 H9 r# C}5 t0 `5 Y( \. r' j8 V* M
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ v y; J% g. q$ h# g5 }; Im_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
1 J' A: J, {9 w% f# Y; I3 M- Qm_wndMenu.SetFocus();* r- R, ^/ _* x0 L6 o6 e5 }
}
1 a. z g9 a8 E------------------------------------------------------------------------------------------------------------% g7 c i h- R
*************************
, [9 U' A$ A4 l- P& O. K: TWndField.h文件
3 g0 w3 i7 a% j" d*************************
2 s) {/ t2 }+ y. d搜索:BOOL m_bReport;
# [8 y# }" w: B! _$ D其后添加:- K& G ^% D) w
CWndMenu m_wndMenu;
% A5 B7 v2 l0 o! ^& v搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);" N7 h" E- \( F5 z8 {9 _8 A# `
其后添加:+ n! m/ c% i P, v
virtual void OnRButtonUp(UINT nFlags, CPoint point);8 W/ U2 ]* o( P3 f" l! O; x: S0 @$ e
+ T+ @4 ?* x+ P- f9 _* z7 |0 N, i4 ^1 l8 v8 [6 U! {
|
|