飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
3 s+ x9 I& A3 m: }+ L6 b搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" }1 Y% K  V) C, C# E, T: J
; |% R  O. \. M6 J
struct sItem! `. j: h2 g3 L( B0 t
{
$ ^; S' Q2 \8 o+ F4 E& t+ ?/ jDWORD dwId;" U6 @" `; Q5 [( y2 m
DWORD dwKind2;" l, R6 E1 _& m, C
DWORD dwItemId;
6 p' d! C5 b: x% J& _BYTE nIndex;
3 n; x0 W1 V5 B# X6 d+ ksItem(){
( a* d8 D2 u1 _% N  dwId = dwKind2 = dwItemId = nIndex = 0;( B1 @6 }' P, N& g+ P6 Z
}8 ]3 I' o- F3 r) x. C1 [
bool operator < (const sItem p2)0 }; ^% b* P+ \; v7 o
{- q1 |3 i: Q# e# ]
  if (dwKind2 == p2.dwKind2)
4 x+ P" |" A, N8 B0 W, P  {0 A5 k* G4 N% f1 I6 s" j) d
   return dwItemId < p2.dwItemId;  }9 X' G# f5 r
  }else{
  }9 ~2 m1 V- k9 m+ {! [' O   return dwKind2 < p2.dwKind2;
8 u. Z* R9 P1 G+ R3 a& H' R$ ^  }
3 k" {' E' y, ~}
. Q4 V" i: q2 |* v, y1 m6 O0 V! Z};2 D9 X! N. C& E+ ?: s* J9 G
class CInventorySort
6 }& e# f, a# C6 I: T: P& N{
+ U  h- y# n; E# m$ }public:
  h$ R1 R% q# T5 S7 Y3 ]9 oCInventorySort()
) T3 Z7 a  W- }{
% O9 p( n& `) b/ s  m_dwPos = 0;
! V+ T9 ?/ v: M! K) n" t) t9 M}
$ l4 K: F% w/ A- F- V& J& n( ~2 c~CInventorySort(){}
* _4 {8 d( ]3 zprivate:% l, w4 X. ?! ?6 L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 q) x! z, t+ Q" z
DWORD m_dwPos;
' y4 [" ~& I; g/ gpublic:
  D# A) v3 M! K8 A0 F  _' I; [void Add(BYTE nIndex)
* z8 X; n/ M1 V{7 h& s* z! P6 v7 v) z/ G
  if (m_dwPos >= MAX_INVENTORY)" \' R0 ~- c$ B: K9 w0 x
  {
9 u8 s- N. Q1 C6 P8 w% E# Y   return;
! C0 y# W2 o+ D  }
. w( N; @  Y- ^( u  m_Item[m_dwPos].nIndex = nIndex;4 j- U1 |' u* v- p
  m_Item[m_dwPos].dwId = m_dwPos;
7 n0 w& Z$ s- }5 ?0 v' k$ j+ y. H9 ]  m_dwPos++;
, N& ]$ r1 h, h2 B5 P. C}. O& G! y& w( r
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
9 m  e( }& F& r, Y  `( W+ }0 E{& b9 r5 {/ n: V- N0 E7 ?, k
  for (int i=0;i<MAX_INVENTORY;i++)
, x7 B( @" s9 K( v( j7 K  {
8 ~) a' O, T) k; Q1 j   if (m_Item.dwId == dwId)
* x+ l& j0 q" C; o0 G   {& Q) |- u/ ^9 S8 v. d" Y
    return m_Item.nIndex;
1 ]$ J7 u) A. Z$ ?  _   }0 Z# ^; x4 }  b4 C0 ]" M0 g% C
  }. v( P* }9 R: E9 x0 O
  return 255;
; }3 d# }% z0 W4 s5 U9 ?; T5 S}2 M/ D8 J" ]9 Y9 t# q2 P2 C
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
0 q% @4 r$ K8 b- C" W7 d0 H{2 P: P) q  T# D$ v$ r% r, M
  BYTE nTmp = 0;7 p" a: f! n2 V( H: Q- l/ e* ~
  bool bDest = false,bSrc = false;9 \. T% T1 Q. M- D, w4 E/ e
  for (int i=0;i<MAX_INVENTORY;i++)# n$ X4 L; O+ y9 g% j
  {
2 r$ f# H4 C$ [2 l   if (dwSrcId == m_Item.dwId)
% s& F/ K  _/ U) m/ v! P/ C   {
! p0 S% g- O# b8 B7 ~    //id相等 则 改变对应的dest和src
. P* p3 L9 O0 j. t" l2 x0 h    nTmp = m_Item.nIndex;
. N6 {8 r0 f9 k8 v& [8 ~    m_Item.nIndex = dest;" ]6 }0 ?" C. M& y, Z
   }: u" j  d1 G" p! E' [! y5 Q! V: g" b; g
  }5 {- ^9 }0 j5 Y2 m
  //临时数据保存完毕,交换开始. d8 }. g# }3 u4 n- J
  for (int i=0;i<MAX_INVENTORY;i++)' i) G' z+ C* r( U6 x
  {
7 U9 i, e8 |  ^2 k$ I& V8 T   if (dest == m_Item.nIndex)
; a; z& ]& X, Q; R% t& `   {4 u8 S" _5 V! F& i+ o) B
    //id相等 则 改变对应的dest和src
- b# F/ v7 x; |+ }    m_Item.nIndex = nTmp;1 q! {6 G+ Y; ]
   }. M4 s. l) d9 z' d+ I% e
  }3 A8 ]. Y) j+ d6 I
}
0 d3 N; F' i6 E, v5 J};
6 m% C, N, D( K7 e: Q-------------------------------------------------------------------------
$ A' ]' M' \% x/ g# X依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% G' \$ c6 l3 ^9 q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 h2 \" S6 }1 Y0 q紧靠其上添加:1 P9 U9 W; c. ?" t
if( pWndBase == &m_wndMenu )1 F9 }* z1 G9 M, w- l0 O6 D
{& D7 }  b3 x' l5 \& a
  switch( nID )
; l/ l4 v/ w: i% q! |, l& X4 F* R  {7 t# t& `! @/ \$ V! m
  case 2:
' w0 _3 V5 I$ }% s4 h   {
/ g# c8 X, H6 S% d* ?; ?" N. e# p, C    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);! M% O2 ~* l! a# j0 q. W/ I3 s
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 X' y8 V6 u6 V& p1 t: C( `
    {: x$ l- g) P3 t) j- W$ H& K
     break;" d6 x2 }" R4 v7 j" h
    }8 m: h5 u0 ^: a) Z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)4 x0 Y  F( }; m% ~9 Q) ^
    {, l2 J5 |' a, O  v3 W
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 i9 |+ |8 d7 j
     if( !pItemElem ): x8 _% ]1 L6 F) M' K+ d& Q( B- ~; h
      continue;) u' }- [$ l1 v: E" ?  b6 I
     if(pItemElem->GetExtra() > 0)
! n8 D% g( T# C, y/ M      continue;
* ^$ {0 |- [& H! h) m; ~- l     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % `* ~" E) `) \7 R# s, K
      continue;2 _+ ]1 U) \5 m5 @
     if( g_pPlayer->IsUsing( pItemElem ) )2 e, b9 Y& @* c# K" u9 D
      continue;  ^& Y1 y  i- H8 s; i6 t
     if( pItemElem->IsUndestructable() == TRUE )( I/ U  _: V: N1 a) Z1 t
     {
7 a4 c, c0 h1 A) K) K      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* t& V3 Y2 X+ ^, Z! s- @# W
      continue;; z* X; s. w/ v; y+ z8 \  o& J
     }# i( X/ g# d! b! M( @6 t3 d- @" L
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);+ ~" J2 Y; {" L0 v2 b. o+ E
    }
5 ^, u( w6 `8 b7 D    break;
, t9 @: W5 \& q" V0 s   }
  ^8 T# e, s- h/ O, ]  [" t: \  case 1:
5 a/ h9 y. H" X1 o9 T0 X   {
$ e9 E9 q  f* a/ `% |    //整理背包( t( U1 }1 M( @5 e6 B
    //////////////////////////////////////////////////////////////////////////. G( J4 x0 d0 _) U' G
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );- w  e' w/ p( \* L
    //////////////////////////////////////////////////////////////////////////
- C* C# P, t( v+ U    //////////////////////////////////////////////////////////////////////////- {# _6 d% o3 J6 o2 S; v
    CInventorySort* pInvSort = new CInventorySort;( y: ?; L2 A7 [
    vector <sItem> vItem;
$ s/ X* }: X/ a2 j# C* s. t" d    vItem.resize(MAX_INVENTORY);//初始化大小. A: T8 H% Z, O' s& ~$ g
     //////////////////////////////////////////////////////////////////////////: X5 t* O/ D# i3 t
     //填充数据1 Z* B5 c. x( p4 S7 r! E1 q
     for (int i=0;i<MAX_INVENTORY;i++)
5 R( R% @1 u4 A/ r' R: L     {" c3 _/ y$ o: r3 T- t
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ k! B: r+ O$ U% Q( O" P      if (!pItemElem)
% T* s/ s0 T1 B- p3 Z( e: t      {
7 O; K* u0 ]. i% [! p. v       vItem.dwKind2 = 0xffffffff;- j  r, Y* {& A2 r/ |7 G7 f$ K7 R
       vItem.dwItemId = 0xffffffff;
6 {' t/ q- t' H& x1 k; {" Y       vItem.nIndex = i;, \# X1 G6 i6 h: o8 r& S
      }else {" p" V* f- _! \$ U* ~: I
       ItemProp* pProp = pItemElem->GetProp();
& P7 @8 K: a- C  k+ t       vItem.dwKind2 = pProp->dwItemKind2;) w8 W+ e  i) M% \& M
       vItem.dwItemId = pItemElem->m_dwItemId;, t' G9 ^5 x1 F  p9 s
       vItem.nIndex = i;+ h& o/ s# t1 c0 [; d
      }9 Z: v. b( x7 l% u% ?
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ B9 d* @$ T9 A     }; U- _4 ^; m# J- {9 c
     //////////////////////////////////////////////////////////////////////////
% P" t; Z; [, W5 }$ b" j( V     sort(vItem.begin(),vItem.end());//排序9 `& M9 a1 o3 R* |# M$ `
     //////////////////////////////////////////////////////////////////////////8 J7 K" e, s' l) U8 p* v
     //交换
1 G( T' \- A! E" v9 ]     for (size_t i=0;i<vItem.size();i++)
1 y9 \- ^: ~$ G7 G4 T     {
( B! d! t( D" `! t4 P4 Z: ]      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' u+ V( M* F  n* A  e& I      pInvSort->Add(vItem.nIndex);
7 J' U% G7 W' o6 ~8 ?1 n: C     }: p) A" @* I; O$ {, e; ~
     BYTE nDestPos = 0;8 i! t6 E* j0 s
     for (int i=0;i<MAX_INVENTORY;i++)5 w# C) z! F7 J4 N. k" K
     {
8 r- F( h  y0 q8 Y" J8 |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);1 j* C9 r5 a2 \, U8 A9 ?/ A* p
      if (pItemElem)
2 j! B7 s( {/ I/ z      {4 D* U8 G' l1 F+ b6 D
       if (IsUsingItem(pItemElem))
- r5 Q+ O9 T  T& z% q       {
8 ~& @* ^. G2 b; n        //这个位置无法放5 B2 S9 n3 K! s' {' }
        nDestPos++;! V" ?1 p" `2 }# U, y+ x' x
       }
) P0 F! r# V& L& n, \  O      }
9 q9 u2 |, T7 R9 b      BYTE nSrc = pInvSort->GetItemSrc(i);" S( w1 R, a2 u4 h: c
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
  p$ k4 q  j1 A/ ?2 i      if (pItemElem)' @4 W0 m+ u! o; d2 q
      {. Y6 b- G! k% M5 @9 y* @
       if (IsUsingItem(pItemElem))- M) R7 u8 J: c  Q, Q' h4 u( @6 s
       {
' j: \. D) ]0 z6 Y3 J1 l# F6 {        //这个道具无法移动,跳过* q2 ~* ?; _* ~3 f$ ^% ?/ |
        continue;. M: H0 ?" k0 i- t0 b% |
       }
1 U' M# s& I: _: D; o) O      }else{
" ?2 D* @$ C1 z1 m5 k- G- m       //空位置 不用动7 Y3 H1 }3 }' d' w
       continue;6 g, p/ ?9 ?- M  f2 r
      }
' d% d! J; P+ V5 v      //////////////////////////////////////////////////////////////////////////" y0 i9 {3 f1 ?0 n
      //开始移动9 g3 R* D* ^7 C- T% \; ~
      if (nSrc == nDestPos)$ a4 b' v' t7 d4 A) z* Y" p# K
      {0 Q/ U9 g5 o9 _( j
       //原地不动% k6 o6 G" K  P- {
       nDestPos++;
2 Z' c+ ^' h  k1 D7 a: Z! @7 z       continue;6 k7 x' t% I3 _
      }# ]+ A5 C) d8 z
      pInvSort->MoveItem(i,nDestPos);
, g% ^9 q, G8 `8 X; {1 B6 z      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% ]  Q  j! K3 ]: \2 C& |1 \
      Sleep(5);
. v( V8 Q7 Y! p# O5 o5 v5 x      //Error("移动 - %d->%d",nSrc,nDestPos);
  ?/ A) [& A8 \- l5 p% z' A      nDestPos++;, k! m2 R+ W$ r7 g, O: [
     }1 z# l- p0 h* I
     //取第一个元素的信息
8 q3 v4 K, y2 U# {' ?1 p; M! q* h     /*
, ]6 s# Z1 Z& K: T$ o     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% r' |% w6 a. _$ s7 s6 d     {
; l2 R# Q( Q$ Y0 M2 n      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);5 n, |9 C& o9 e
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);. ?. H  |* J: c! v; u; e  W
     }  q% S8 y( M( \. B& ?
     */# Q8 G# w  x8 D) n
    //////////////////////////////////////////////////////////////////////////
& |' N" l  [1 j' I1 F    break;" V( j2 U, @: N
   }
! X$ W" v6 T( }9 p% W  } 9 h3 W& Z. d' e! G
}
  ?! f' s# @: D* V7 v+ q* Xm_wndMenu.SetVisible(FALSE);
: u+ [( h1 O: y& S; Z% z& T" F- r  u: L+ w4 k$ y7 j
--------------------------------------------------------------------------------------------------------* _$ N) c+ @& H% h& @& |2 r' p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
# k7 O6 d) q5 T- r{
; M1 P. V* L4 u3 DBaseMouseCursor();2 W) i- P7 i1 ^9 J1 A) Q- R( J( B
}* a, t4 k. x( t: v
在其下添加:
5 b: q" S6 O0 }; D  m0 j4 j- vvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
* r2 L2 _# T: \" H' g1 r) _. z{- G; Q& P' z: T5 t$ o* k% l
m_wndMenu.DeleteAllMenu();
, y; Y. q7 f0 m/ t: @m_wndMenu.CreateMenu(this);
) Q, M9 D6 O- i( c% q+ _  _/ o3 qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
1 a+ q. ?, }3 e* I; w4 X0 C) `4 E" x3 u# ?* T
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ |/ N7 ~4 u+ U
{4 O$ ^& f1 N* ]
  //P以上级别才可以删除所有道具
$ k3 `0 l' T2 m. N  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");/ [4 X0 V" e. Z
}
" C8 F5 a7 F- d+ sm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );. k/ ]) ~' b# R/ I  t, O# |4 T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );" o$ |+ \. b0 y0 B8 g' e) U
m_wndMenu.SetFocus();
3 J7 q; _" |' b" W+ D: [}! ~3 Y, }: X' H8 J; \3 S/ n) K
------------------------------------------------------------------------------------------------------------
4 O- R$ [$ @! b) c' o3 |*************************
  M, P* i* ]" @# d4 V( VWndField.h文件
; d' E6 ^% W- i! `*************************
, }# P  z8 k) P. H搜索:BOOL m_bReport;! w: l1 ^% a- s0 i# h8 m- a) D
其后添加:
$ Q0 B: ?# |1 \1 d( WCWndMenu m_wndMenu;9 h2 d2 V/ ~0 h. n& @' A
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: ^+ e2 F" ~( o# u$ q6 `其后添加:
' _, r% `. ]4 K  J" }" vvirtual void OnRButtonUp(UINT nFlags, CPoint point);
: X! M# `# v9 g5 X6 H: v
5 x& r. V+ D; C- P9 a! F. G7 Z& _/ t; s$ y& \

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 05:56 , Processed in 0.059820 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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