飞飞世界论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 18881|回复: 0
打印 上一主题 下一主题

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
$ x9 r  f& c' M1 V搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). Q8 G+ _8 @; @+ u
2 r- r- {3 e. D! s! w: s
struct sItem( P- I- S* h1 C) T  Z
{
4 c8 x& d3 V+ d. x+ g4 \DWORD dwId;
) d# V6 |2 V$ Y. v+ t1 kDWORD dwKind2;7 Q  v5 T. I% E' U& o' c' y' z  d% i
DWORD dwItemId;
- l) U1 k6 r4 \5 XBYTE nIndex;5 e* y! I# \  [
sItem(){
# F" w) l  {, `, J" D  dwId = dwKind2 = dwItemId = nIndex = 0;' A3 R4 ~: t# b% w, k6 y3 S
}. T4 T3 K' M% @6 W2 N4 w8 D
bool operator < (const sItem p2)
$ ]7 ^5 b  b4 m$ Z  x, V{
& u* ?+ b# L  v  if (dwKind2 == p2.dwKind2)
2 l) t) @# S! H1 S2 x5 k* x  f5 P. H  {
2 x' u, P  w8 e! g- I   return dwItemId < p2.dwItemId;$ a2 w& k3 J+ C/ U- e5 o- o( q$ H
  }else{2 }3 R0 U- ~9 Q3 Y
   return dwKind2 < p2.dwKind2;
4 R: q* C4 R; ^1 R( s( ]$ w" k  }
9 v# z! M2 T. ^8 |}! w! C, K6 S2 Z
};
, r' Q' x0 o+ v, J! X4 mclass CInventorySort7 K4 i" S8 @- V& J
{
- Y  }9 T; ~- Rpublic:5 Z3 I9 b4 W% I" I7 {; N( K
CInventorySort()2 l0 H0 a9 _9 c$ P6 G" N  S8 l; Y
{
- b7 G8 n* g, W9 x% [. @, }: ^  d5 e  m_dwPos = 0;
  U- o: f- x3 K* @  T, a8 i}# g1 ]7 _3 j! B* S* x- K0 k$ b
~CInventorySort(){}( ~4 L. C, K. g, Z+ D8 d
private:
/ U- ~+ y9 a" F* N9 @sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息2 s- P. s: t  Q8 B* D
DWORD m_dwPos;5 H! u: w  Q& S* }4 [* F
public:
" Q+ a" G# K4 K. |+ Vvoid Add(BYTE nIndex)
# Y' \/ e7 J# y/ |{
% [# [5 B1 \$ U6 k% I2 @8 x  if (m_dwPos >= MAX_INVENTORY)+ G8 x: E5 I: Y
  {
' W4 y' M' O1 A7 c& i   return;6 K1 T% g* k8 V; N6 A# E; l
  }. I+ n; }8 h; q; G4 o9 H
  m_Item[m_dwPos].nIndex = nIndex;8 k- y: U7 I* z- J
  m_Item[m_dwPos].dwId = m_dwPos;* u% t4 i) X; a
  m_dwPos++;; ~$ L) T+ {8 o6 ^2 b% W9 M
}$ x) J9 b* ^5 \' S$ x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
( X5 q. F& z' ]{9 D, g3 L1 [7 _6 _
  for (int i=0;i<MAX_INVENTORY;i++)3 N) O  r: S% B/ T
  {- P1 ]% Q; o% \+ W5 G2 `
   if (m_Item.dwId == dwId)& m5 w' k# c7 ?! C& D5 a
   {) w8 H8 C4 U" T+ u( W1 `! V$ N
    return m_Item.nIndex;  {1 O2 s9 v  {1 |
   }% Y+ j* L& m& O7 ?
  }
4 q9 k, U) }0 a: q+ O" g" R  return 255;
8 ], N- a' f- z5 D+ h- p, u}* H! U. t7 |7 U" P
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
; y# `* w4 \" _, W{+ \! P! H5 |) V/ c. ]7 x' l
  BYTE nTmp = 0;
0 j4 |% g6 w0 a7 {7 b( w' s3 h: O  bool bDest = false,bSrc = false;0 J' j! k7 r- x! o5 Q: ]
  for (int i=0;i<MAX_INVENTORY;i++)+ P1 a4 y$ W- g9 C/ N7 n! t
  {
# H7 z1 _+ s( U9 d2 g   if (dwSrcId == m_Item.dwId)
# @: M8 z. |) D9 _0 ]   {
8 ~/ ]3 L) F3 D; g$ u+ K2 v    //id相等 则 改变对应的dest和src
& i  }. Y' y. K6 k. f    nTmp = m_Item.nIndex;
3 j  V2 {4 x0 ?! S- [+ t7 Z    m_Item.nIndex = dest;
3 K! @9 `) ^% Y, |/ P# ^   }" K0 a8 q' p! A3 X7 i# A
  }
( }. m! s7 R  i  S6 P& D1 |8 [* T  //临时数据保存完毕,交换开始% H! t& h5 v" L0 t6 l5 h: D! S
  for (int i=0;i<MAX_INVENTORY;i++)
7 U& x8 f9 g+ R! Q- H( {  {
6 b: W6 w) E5 ]" B   if (dest == m_Item.nIndex)
9 ~! e& c/ k& l" N   {" U4 \- o8 V- T  Z3 h
    //id相等 则 改变对应的dest和src0 `, H% ]/ ^  e8 q3 F+ P
    m_Item.nIndex = nTmp;0 d& F# C, f+ J
   }8 z' Y1 e* }2 l2 U" n+ P/ ~: f6 N* c
  }( H; D- H9 ?" W! n
}
9 ~+ h4 P$ ~2 f! j+ h) {};) m/ h( C# p) N" B4 \9 K' d/ x
-------------------------------------------------------------------------
3 c# r# C* t* f, L4 `* k依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
$ x8 s. s9 g+ z# a搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);5 G2 b: K! x% l+ a' O
紧靠其上添加:& G0 H6 Y, P+ M7 m0 d
if( pWndBase == &m_wndMenu )8 |6 f/ G% ^% z
{
* a+ E, U5 O6 x$ H4 m  switch( nID )3 y; b* R8 o# R- M
  {8 d6 {% ?, k# g* b% k6 X  a$ Y
  case 2:
- l' c3 w6 Z( g! N: k! G   {
% p$ x% s! k  Y- v& x2 k% a- q. P    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
& l2 U& H) q+ C% A2 A9 X& @1 @    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* y, G& _. q4 K$ ~4 P& F* q    {
) D5 W  u! @/ W$ j, H     break;/ g; G' o3 n( N2 \
    }
/ J8 |& \5 q& l! Z; }' C    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)) |! A% |' @8 \$ V0 @9 \. Z" W
    {
6 Q. w5 J8 X8 Q, w' L) e( b# f     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. Z- w7 p5 K& e  Y* u% ]
     if( !pItemElem )
8 @8 E) j0 \7 a# T" S      continue;: ]. V. [- d8 \; O- Y. ^
     if(pItemElem->GetExtra() > 0)+ `6 ^! _- D  o, i# j4 k
      continue;
+ `9 n6 k8 ~3 A! e$ i, W     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 8 B5 L' d2 h, U( K
      continue;
5 x: ^; ]/ a2 r4 d% A+ L     if( g_pPlayer->IsUsing( pItemElem ) )
# A  \2 w: A0 Y4 b- J' W) O* w+ }      continue;9 e, H* w3 ~9 l3 v! R
     if( pItemElem->IsUndestructable() == TRUE )  l* y4 h8 l0 S* a
     {" F4 x* I2 E# X3 {% e" F4 x9 k
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );0 _3 N0 ?- m0 \
      continue;$ o' V5 _2 y0 ^, l! n
     }7 N" d# _6 w- D$ E! U
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" q( Y7 I; H% T4 _
    }
: u# T1 A3 W) C2 d    break;  C7 }% ^, {' c. m2 a8 {
   }
2 R! {+ h9 s4 o! k$ F  case 1:* \/ t2 p7 \6 ]2 ?; @! e0 R
   {( S& W. y8 j6 V- y9 o, Y+ C
    //整理背包6 ^$ |6 o- S5 G# \0 a" r0 ]& z
    //////////////////////////////////////////////////////////////////////////
, ^- J" b: x( V) Q( b7 Y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 m" M0 W; s2 \9 D) @
    //////////////////////////////////////////////////////////////////////////% k. _; v: M! k. i1 a# \
    //////////////////////////////////////////////////////////////////////////
" k% a: E$ X  t* c' C2 _4 A    CInventorySort* pInvSort = new CInventorySort;' t% u- q' ]" `  q: o
    vector <sItem> vItem;
/ s0 g  h  h- p% b5 O2 b    vItem.resize(MAX_INVENTORY);//初始化大小
, p1 r0 {* d5 J0 V) Z     //////////////////////////////////////////////////////////////////////////
  c6 K0 A0 Y( o. \3 f7 {+ U8 f     //填充数据6 b9 }: N/ q! O" W
     for (int i=0;i<MAX_INVENTORY;i++)
9 n2 o1 {+ y) i( W) a     {2 Q. m* d- r( V  z8 z$ A8 |
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 y" A( A7 N0 K5 b" _; }) H% ]      if (!pItemElem)( x! q! Q  X9 ?4 J
      {" a3 |/ F' {" v$ N+ ~
       vItem.dwKind2 = 0xffffffff;6 D2 y% Q( Y) d; y& P3 ~1 ^  \
       vItem.dwItemId = 0xffffffff;1 [3 o7 f7 f6 a0 q  r
       vItem.nIndex = i;/ A! Y5 _$ o. n% q
      }else {
, ~" c! j& N1 P, p) d4 ]% x       ItemProp* pProp = pItemElem->GetProp();1 H& h8 P9 M) G8 O6 p) f% W0 k
       vItem.dwKind2 = pProp->dwItemKind2;
4 U1 U" m  _! O* ~  D       vItem.dwItemId = pItemElem->m_dwItemId;
7 h5 N4 e6 I/ b& g       vItem.nIndex = i;! ~- p1 ^( P% \
      }
+ u" ~) G( {+ p1 G! R" H/ E/ C      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
$ a3 i% w' s) A$ K     }
# m; d7 M4 k) R- }8 X5 G5 l     //////////////////////////////////////////////////////////////////////////
- R- E$ z  X3 {3 ~, Y     sort(vItem.begin(),vItem.end());//排序0 N) A" H( [7 i, i9 S, d+ K+ z' p9 K
     //////////////////////////////////////////////////////////////////////////
+ A, R* G, E2 |/ W9 ]     //交换
* a% p' ]( B* \3 y; K5 c5 a9 h7 d     for (size_t i=0;i<vItem.size();i++)& q' \' F! ~* K; A
     {
/ N8 t  s- n6 i0 n& s, Y( d      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 g$ B" F2 v" Q; B      pInvSort->Add(vItem.nIndex);
3 e0 [0 ?2 {- x. c' h/ ~4 c     }0 ?: v# G. c+ t1 G2 l% x5 n# H- c
     BYTE nDestPos = 0;4 F6 j* j$ P, l; Z
     for (int i=0;i<MAX_INVENTORY;i++)) b2 D7 w8 ?+ H& C# T, o+ ]# q
     {
4 E- O# J2 W+ i4 R      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
: B" Z8 F( U. S& \! c      if (pItemElem)# S- c* i: q5 P! ~* I# C
      {: l8 H# _# H8 i2 s, C7 U
       if (IsUsingItem(pItemElem))* X" G& D: j9 o' \+ }
       {- m2 k- z' Z  W, s
        //这个位置无法放, Q, S, ^7 Q$ D9 \' z7 f/ b
        nDestPos++;
& |, h+ w& l+ h* ^/ k" y$ k8 P" n       }& w. ^  }+ Z3 |- T9 c
      }4 v! n" P2 N, z; k
      BYTE nSrc = pInvSort->GetItemSrc(i);# b9 D2 D. u6 ?; a9 y5 m
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ G* K: t9 k5 ^9 \( f$ M* m; @  O
      if (pItemElem)
( W4 Q7 _* |! L( r7 `5 N      {9 G/ s0 ?% G: L5 D5 v. n# R. y
       if (IsUsingItem(pItemElem))
5 r4 t% _% C7 Q) G& g. [( Q' C       {) I* z! V- W1 u- l. Q& w" I- Y7 L
        //这个道具无法移动,跳过5 J5 D. }/ v3 Z- D
        continue;  T) y1 B8 Q% I, x- v: a, U& n
       }( `) {; J  \+ N. F! u" O6 U/ B
      }else{( d7 c( @8 r$ s, k5 s
       //空位置 不用动
  j6 [! K1 b- G# Y9 _) h       continue;5 A" r4 _0 i1 I
      }
( F3 ?" E6 y5 t( W: j      //////////////////////////////////////////////////////////////////////////2 O1 R: L( n! V
      //开始移动
" s" g9 D' U# R. G  w; ?- K$ \      if (nSrc == nDestPos)( w5 q8 A9 v: S2 p3 X9 Z
      {
) E) N# K+ J+ Y" v       //原地不动$ I9 B/ V* n0 A+ ?
       nDestPos++;" `' ?0 c, f4 T  @$ @/ x1 q8 M% {9 E5 i
       continue;" C6 C: r5 H9 V+ P4 s
      }% n) b* s  }: H% C! ^
      pInvSort->MoveItem(i,nDestPos);
: `9 n# I0 \) r5 O+ O      g_DPlay.SendMoveItem(0,nSrc,nDestPos);4 F# |+ b: c1 L6 _
      Sleep(5);+ H/ s" ^; P- r8 a4 B- E  X4 ]
      //Error("移动 - %d->%d",nSrc,nDestPos);
3 {: D1 g% L- j: s      nDestPos++;
' k6 v, ~! x2 Q     }* M- C; x8 z! D# w: s4 _# n
     //取第一个元素的信息
2 J4 m: z4 r, \" U0 X# y2 _) ^     /** `8 P9 }3 Z8 c1 k" E
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 i4 `9 t. ]3 I, E/ a5 x1 b
     {
! N) j" m  C9 Q+ z' s8 k' A3 {      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 S* D' A0 p3 H0 U# N      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% e& p8 c' r5 R2 @+ v6 o
     }/ R& {. z4 z( X: n9 U4 }
     */
7 N% {9 U, Z) \* x, p) B    //////////////////////////////////////////////////////////////////////////
1 H1 `/ [$ Y8 U6 \  \    break;& a/ b, o9 F. h4 g' [% R; ~
   }
6 A3 a8 }1 n$ z' u% s  } " ]& c: ~9 J1 ?6 {+ k
}
6 k: a" B. Y6 t1 D% b3 C2 I2 O4 {m_wndMenu.SetVisible(FALSE);
5 _5 ]2 d% Z9 L7 e( [3 m- Z. c
, R! B/ m. E% F. w' M, c+ k- W6 y2 c--------------------------------------------------------------------------------------------------------
! F) A1 c4 r4 V  ^. }/ b# w搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)7 O5 I# J! l' r; g  P, P
{
) F4 a; S4 P9 R7 [5 j; TBaseMouseCursor();* w- v" U( W( c2 X* h
}
: G* m6 B3 B0 Q$ C在其下添加:
4 f7 o  B" L4 n8 ?! Ovoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)' I* `' }* O9 {
{$ @2 E9 v5 ~  e& r+ ]; i* p
m_wndMenu.DeleteAllMenu();
; j9 k/ T" e8 Fm_wndMenu.CreateMenu(this);1 y3 R& _/ @1 M5 b  b
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# l. z* _. H# H# c
! Z" o. R5 I. c* l: K/ t2 Bif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' p+ L# C" C- W  {( w{
+ f: K% b( _1 Y, _% {+ o  //P以上级别才可以删除所有道具
$ R- W; x( |1 A  C4 T' ~3 p  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 I1 P! U9 {" W! p, r
}
  t3 ]" g3 H( b& {m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ y8 G8 n& Y' u1 h" M1 G6 `) ]
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" G5 Q3 I& k  z7 jm_wndMenu.SetFocus();4 ~- ~6 g: t- N8 r( C& k- \7 r
}
% u4 c3 S' j: K7 I------------------------------------------------------------------------------------------------------------: [" F/ B) T% P' I! l! [
*************************8 o; f, m' F3 X) @
WndField.h文件
5 J5 d! y% P) b, `*************************0 ~* A) J3 S  [5 d, b" x/ S. X
搜索:BOOL m_bReport;
9 ~! O8 E8 [; J3 D/ s  m+ W& x5 e& [其后添加:
# B5 _9 K& R, h3 tCWndMenu m_wndMenu;& X9 V) M9 b# s6 {
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);# n& B& u- o$ Y$ J
其后添加:
- R; R4 p2 @$ N! I  nvirtual void OnRButtonUp(UINT nFlags, CPoint point);/ Z% F* Y) `! r0 N

- D5 i6 U. K) F( p7 v0 I
5 I/ ]" x* a1 v/ A( U

相关帖子

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|飞飞世界技术论坛  

GMT+8, 2026-1-9 07:05 , Processed in 0.069438 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表