|
|
源文件中_Interface文件夹下WndField.cpp文件4 J& M- @; h3 Z% l
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )9 e `9 ~2 ?3 S3 ~4 j
3 P- P) C! z1 J J
struct sItem$ _. Z% E2 e9 f$ o) A( d. D' w _
{
7 m3 Q- H3 U4 h' t- aDWORD dwId;
3 o5 L1 D% K7 WDWORD dwKind2;
7 i1 H( C) m, c1 a* H; B8 bDWORD dwItemId;7 U( e! P$ m5 o6 c. } L" v, b$ Z
BYTE nIndex;" I7 i" Y# {6 |3 M# O
sItem(){
: Y2 B5 p3 Z* y5 p dwId = dwKind2 = dwItemId = nIndex = 0;
/ H0 L* W' L" ]# S}
7 @! j; T: B5 P+ |, {bool operator < (const sItem p2)' R8 G. Y* r) U' Q( T; L5 r
{
% S7 {/ H" k4 _8 T+ g# R3 o if (dwKind2 == p2.dwKind2)
# D6 k! ~0 D( j' d+ L {4 n# q! ?7 ~$ l4 f' Q8 y) L" e! X" U
return dwItemId < p2.dwItemId;
7 p* O5 t1 y! H2 K( g; J+ B }else{
8 A, c3 ^, `2 G/ |$ X return dwKind2 < p2.dwKind2;0 R4 a0 n: n' z- d7 |1 V
}- E, A' U: O) J$ I. X7 `0 a& Y1 u
}% e2 U% }- F6 m; t- ?, T
};5 @. |- [5 L) J4 }! d, ]
class CInventorySort
5 T% B" I. F+ \$ W% W2 Q. E{
* p+ l3 y8 m) h4 Lpublic:2 Z7 W8 H* k0 l
CInventorySort()
( v: C! f0 W# m. _{, A" M6 u6 q' @; p3 J3 s5 ?8 N1 G
m_dwPos = 0;
0 j( t+ r+ O% b: P6 |1 T; a b2 b}
7 \' ?6 T1 ?) I" `2 S~CInventorySort(){}
3 K3 k2 Y; d0 J( l% x8 e, ?private:
- D; o( o( b: [$ ?, _sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
, t1 S' ?$ d0 ODWORD m_dwPos;
6 I, t! p7 h& m: Dpublic:5 e7 i2 p. _* p" b4 a
void Add(BYTE nIndex)
" ^$ ^6 {, R1 S. A! e5 g{
, P/ P4 g. r8 y0 {$ \3 h if (m_dwPos >= MAX_INVENTORY)! e, C1 U5 e* V2 C
{
: u/ d/ d$ a9 r; l, w i" e return;& ] P) Z# F9 F$ d7 A& b
}8 U/ i+ H1 T# r) ?4 W9 B
m_Item[m_dwPos].nIndex = nIndex;
% o5 i4 k. j4 n m_Item[m_dwPos].dwId = m_dwPos;, U! p& ]1 H" E) y3 z( v8 P, J2 M
m_dwPos++;
: R, O$ r% U6 x! U6 b7 B8 b: m}
3 E# j! Q: g% sBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
% q7 f5 w. F( f4 j{
/ @4 P: B1 m0 ?3 s for (int i=0;i<MAX_INVENTORY;i++), V, @1 |% W- @- g
{
" \8 R1 q, {; P( H z. J) Q4 V if (m_Item.dwId == dwId)9 C3 O8 b( X( v- x0 g F" \
{
9 i; e5 p% O6 h9 S% v" u1 P return m_Item.nIndex;
) p7 `+ }; u$ D E* C0 r8 o }
) u% J( {3 v! [( l" L# V6 B }
$ M; }0 n( y1 L. ^% ]2 _ return 255;2 `0 F, q6 ~8 b3 X) T. i, Q
}
, ^: E4 r; G2 {, Vvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置! B" | g; k: g# X) r4 R3 ?) |
{
/ j: f+ f7 M* H! `& J! `0 r BYTE nTmp = 0;3 ^( K0 N8 W" S1 I, L" X. F
bool bDest = false,bSrc = false;1 |# Y) N2 t" J" {( N1 F
for (int i=0;i<MAX_INVENTORY;i++)
8 D* x+ v) O* j% Q) Q6 G {
0 I/ C# }) ^! j- m if (dwSrcId == m_Item.dwId)
/ H6 e% |4 M" K, f4 ` {
' b/ Q' r) |: T( O, ^; ] //id相等 则 改变对应的dest和src# ]3 K/ K7 C" I: q
nTmp = m_Item.nIndex;
+ L' S( ]- `! l a- X- g! y2 c m_Item.nIndex = dest;
5 i ? K }# I' \+ l4 f }* A2 h `3 E* a3 u) W& C8 b8 K, A2 X
}
- W' ]+ k- i# @0 ?# a" U# t6 s7 b //临时数据保存完毕,交换开始
) d/ S, W& r3 S5 G0 M for (int i=0;i<MAX_INVENTORY;i++)" k+ j5 P4 z5 c' X
{
3 f" P, C' S1 G8 U4 ~ if (dest == m_Item.nIndex)
) o0 s8 t; U- ]9 N1 h( g* n( I {2 _& E, |0 q8 p2 X+ Z
//id相等 则 改变对应的dest和src+ W j, W# E) C0 @
m_Item.nIndex = nTmp;3 n' [0 H6 k: j9 h2 s
}) A! ^( ?) @5 l' G1 @! ^% P
}
' @8 b" {* O W0 c5 e}) q: Y9 M& y) G0 g1 t) D% n0 x3 o
};" ]5 p7 v+ A8 Y2 J3 D
-------------------------------------------------------------------------8 d c( F3 N6 z4 L8 F, X
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 W' p8 `0 n1 I' B6 x0 p
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: q; A& v3 t. a紧靠其上添加:; K( ^& g8 b3 I/ y8 B% W) B
if( pWndBase == &m_wndMenu )
e, w+ b0 X% y: n* s{
$ r) I Z e. i: k( f+ Q. P2 j/ r8 o switch( nID ). y" K( ~* @& n% D; s
{4 n) B: t5 T! R5 C
case 2:% h" Q& a- F/ z( K+ G
{& ]! h$ G- \6 A" e+ Z/ G
//g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);0 N% f, a7 K' s" t1 B; y+ E7 |
if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& y/ j- p! e7 C3 z {
: [3 [9 b4 \- C4 ?0 b break;. R$ B. A( S& M" N- z L! |+ T/ J
}$ L7 M) t* g; w L1 ?1 i0 n
for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 Q% B+ H6 H( y& p
{. _) w- n: W* A' Z0 e
CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. P8 e6 m& M: p, ~
if( !pItemElem )
# T$ a B& O) j: |3 m& _* F2 |) s3 Y continue;
a6 h- l D& A1 u if(pItemElem->GetExtra() > 0)
7 D3 m1 e6 ]5 Z" s5 ^ continue;' h4 _/ d+ s) `
if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
+ K# `' k8 n" W. K continue;( j/ p8 P+ G. l5 o0 d
if( g_pPlayer->IsUsing( pItemElem ) )/ s$ d4 j( ^8 U7 w5 m9 p2 v
continue;
0 Z4 \! z! q7 r! m if( pItemElem->IsUndestructable() == TRUE )5 w7 }* ^ [# c' Y$ b* v
{
! C7 W" L% y9 W" A! b9 a9 s' t g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );8 E9 h1 s D- J& L/ a1 c
continue;& P6 _- o+ }+ y! M: ~* B0 h5 H3 G
}
" w1 X! E3 y& [& f9 T g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* w7 {8 `) Q5 b0 Q+ G, i1 u/ }+ u }8 G, i& V* F: n
break;6 u& K) |, i* z d; P7 u2 h
}
/ T6 R' A, S8 S1 e" X case 1: D+ u/ A! w1 Z& E
{, o+ m- P+ a: M( A8 [! [" ?
//整理背包
0 Z' j- }2 h J& s. n7 C) [+ I //////////////////////////////////////////////////////////////////////////
8 v# E4 \/ k7 }' F6 l0 Y h' o //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );/ L! C! P! z7 N6 x# z# {# w3 x, t
//////////////////////////////////////////////////////////////////////////
4 j3 a' H3 z5 j4 B* [# ~ G4 w //////////////////////////////////////////////////////////////////////////
3 ~; r! n/ ~+ Y: d CInventorySort* pInvSort = new CInventorySort;, j& f, p, p6 F" s! Y4 s# _
vector <sItem> vItem;
" t7 n) o4 s1 z9 m6 H. O3 B K vItem.resize(MAX_INVENTORY);//初始化大小
+ b- M2 z$ {* P' w //////////////////////////////////////////////////////////////////////////9 {, f( K/ |5 ^, P- \% n. d$ J
//填充数据& h- b9 e- Y# N6 b5 h
for (int i=0;i<MAX_INVENTORY;i++)
! W; G* _) j! e+ u2 v6 F {
f# k- k" \$ L CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 t+ v7 x ~9 E! b6 [/ M$ ?1 | if (!pItemElem)
, h; F" I) |+ m* Q7 Y- o+ y {4 l- j' v0 {1 v) l% j+ E
vItem.dwKind2 = 0xffffffff;8 ~* b$ C9 z- @8 t& f% Z- l5 J% @
vItem.dwItemId = 0xffffffff;4 d9 M+ Q5 d. n; H& K( O1 M
vItem.nIndex = i;
' X" @1 L, x4 h3 j; E }else {
% p# ?, c+ p" `; r6 h$ Y1 p ItemProp* pProp = pItemElem->GetProp();5 i/ `% Q) v6 p+ J$ s: ]4 e
vItem.dwKind2 = pProp->dwItemKind2;
6 f. M* a( P1 F2 Z vItem.dwItemId = pItemElem->m_dwItemId;8 I, s1 n) u0 J i; a
vItem.nIndex = i;: m- X; |' R8 T) H2 P6 {4 G7 l& \ X
}5 G O( A8 ?1 n9 p
//Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; R# N- p `; Y6 E2 T }
2 x6 A" B$ b6 K; R //////////////////////////////////////////////////////////////////////////+ P6 e! C3 n! V8 M9 V1 [
sort(vItem.begin(),vItem.end());//排序8 @4 A6 d' @8 U0 e4 `
//////////////////////////////////////////////////////////////////////////
% c( E- F* K3 d: u( t" y8 ~ q //交换
. ^% S0 L+ Q- }1 C4 G+ o$ r% S for (size_t i=0;i<vItem.size();i++)* B4 ~9 z- [9 m+ [
{0 T/ M" I$ y, x
//Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" T6 B/ N* C3 A5 U9 ?# P- X g# ~- e/ A
pInvSort->Add(vItem.nIndex);
# I# w9 Z1 B3 c6 n% I4 {1 A3 O }
) G; m' T* j U/ I& M BYTE nDestPos = 0;4 u% A2 q! Q [- |* t
for (int i=0;i<MAX_INVENTORY;i++) X# ?; Q3 `: D
{
' d# [- E3 F& h4 r" I% [ CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);9 `# h) I" G3 c- d
if (pItemElem)
. M# H( s1 T6 D1 `5 Y7 B% P2 M5 Q# e {* e+ I# y5 ^* s8 m
if (IsUsingItem(pItemElem))
$ {- }' D9 d3 k8 }4 u- o9 V {5 k( m% i" {5 s' _
//这个位置无法放
9 q. \# c$ S1 D m nDestPos++;
8 r4 }0 p) j, L3 {+ d }- F+ u1 v A- l2 Q
}
4 M/ w0 H1 V. Q- N3 n BYTE nSrc = pInvSort->GetItemSrc(i);
~, _; U9 L/ q. i pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);/ f8 F4 R/ E2 Q% E3 U
if (pItemElem)
% C7 [/ j e* [& W; }% |4 c {
" O# k$ O: s- u' l7 r" C if (IsUsingItem(pItemElem))
: P2 M) c4 Z& a {
' x+ B( D' `% v' K0 _' {* M //这个道具无法移动,跳过
* [% N$ `& D/ J continue;
1 x( b3 w& o* _# n! N$ p }
" q7 S/ w H3 y7 Z2 e* [5 F }else{
' P8 W& s; l$ k' D //空位置 不用动
, ~9 K7 b# L2 u+ {3 E4 y continue;
7 r& y7 a1 H* e! |& s, |2 f }0 I+ S, @1 F0 ~$ r3 c5 B
//////////////////////////////////////////////////////////////////////////7 R3 _: H3 F/ z e$ L& m8 m
//开始移动
4 h& q5 {% w3 p4 U2 a! G if (nSrc == nDestPos)% k/ L6 `: M+ K$ v: a
{1 l0 n9 D$ }6 I" \# G/ F
//原地不动' X0 J2 n \! o( Z
nDestPos++;
! R* h! J( t# r continue;
, l* h! V5 @/ z3 H" P }5 \# f: X" @% E. u( z
pInvSort->MoveItem(i,nDestPos);( [" f/ L, Y, O* n6 w
g_DPlay.SendMoveItem(0,nSrc,nDestPos);' Z7 C2 B8 Y6 W5 b
Sleep(5);
' v i& _" G" J; b //Error("移动 - %d->%d",nSrc,nDestPos);
7 v1 Y. d( Y: @+ q8 q# o* ~ nDestPos++;
) M3 A# E0 {' o9 J( U1 ^' |9 V3 j" E }% l! |8 o- A0 W6 t* {: z: m- B
//取第一个元素的信息
2 T0 ^: Z! e. l' s7 M /*
7 b! V# V1 V5 I if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)' O! R0 M' r/ H$ }
{
- U; o) y: X3 r: i& v Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 U ]' X& n( x0 j0 Q/ B g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x); g* z* v! s) E* k
}- Q3 ^+ S$ J. ?
*/
J z9 J+ I5 B1 D! v //////////////////////////////////////////////////////////////////////////
1 V- x2 L O) @' s O. s& T7 ] break;& k' ?: P; q Z2 l
}) H% Q2 j, S+ C1 e5 C
} 8 v! |% T z, m
}- g: Z+ ^9 r6 g: h1 ~! A1 Y1 P
m_wndMenu.SetVisible(FALSE);
8 e+ G, }& n* z. L, y, \4 t8 L8 |* I3 L1 r: a8 Q
--------------------------------------------------------------------------------------------------------
# o0 K! E9 K, S+ X. `搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)0 Z$ _3 s; b9 z1 K
{* _ a4 y% z0 }5 c, g
BaseMouseCursor();/ E! V, j& I+ h/ G' ~' |( A
}" [! o5 @1 m* ]; O" \
在其下添加:
0 q0 [) N7 Y1 ?void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
4 B* O2 i- i3 f{
1 ^8 C/ y* ^; x4 `- A) ?m_wndMenu.DeleteAllMenu();1 \# ?+ G" r0 H
m_wndMenu.CreateMenu(this);1 b3 S8 Z8 v( D+ Q+ W* F* A. v& A/ O! Z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
! ]% w6 b$ S) y9 D1 q/ [4 T( b2 L
- F. @8 u; P7 R6 X# W; b+ jif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% |2 `, h7 Q$ Y- {3 t. q# ?; b
{- }, z) k! b: I$ j( Y5 o
//P以上级别才可以删除所有道具
1 k$ C2 O/ i7 O m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; {2 d5 }' Y$ q. z$ L: z# R}
2 H' X/ z/ E5 M" `$ B$ D' Um_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );1 _$ `. [& V# p( a/ X, Q& a& h( ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
K4 ^6 ^8 E- O) Um_wndMenu.SetFocus();
: G' J/ g+ R4 W* D; Z}
# l9 C4 }! k N; ], a6 q------------------------------------------------------------------------------------------------------------: ^$ t% ]. Q4 Z: |
*************************
" N6 u* D% z5 h# zWndField.h文件
. [ M7 C% N. ?# t0 L6 ?*************************
. G8 }% u- v# n6 q5 J) n/ D搜索:BOOL m_bReport;* H; J+ x* `& {$ j3 m
其后添加:
3 E1 ]4 `, z8 Y5 A+ Q' PCWndMenu m_wndMenu;
! x# D7 R% x3 S: A搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
2 r1 y, K1 r7 [% T x) J6 q G% A其后添加:
+ [; ]" |- s. D2 pvirtual void OnRButtonUp(UINT nFlags, CPoint point);) a3 w) U+ k! t* K( C
3 m5 G0 E$ f* y! j
! x' D! b9 s8 ?5 E0 t2 s
|
|