飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
3 Q2 Q1 ?3 L/ F' g/ G$ j0 [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )$ n  x7 {7 Z% ~+ u

' D3 N9 _% D5 ?8 b4 l8 A+ c% Ystruct sItem
+ l* @: f$ x$ r0 P+ C{
/ H0 r3 G) Q) t* k) {/ bDWORD dwId;5 r6 u/ Z3 b7 x. a' ~
DWORD dwKind2;# ?% [1 B, e; S1 M
DWORD dwItemId;, S- W' r7 \$ E4 j  x! d
BYTE nIndex;
4 |' a( M" K3 T- |  OsItem(){; `0 F; f* Q* [0 y# }+ o
  dwId = dwKind2 = dwItemId = nIndex = 0;  I. |8 W$ G$ `! {
}
, Q# }* a6 x$ G- Hbool operator < (const sItem p2)
0 {6 P& z& l4 X{
5 \& r. H2 W: e  if (dwKind2 == p2.dwKind2)" V; [6 W/ R4 p' h; L0 E% g
  {
( s3 v2 O& ^$ H7 Z6 E1 B3 ]   return dwItemId < p2.dwItemId;5 C$ b) y/ b+ S4 R
  }else{. Y3 j" g% J  U! m- J7 J# E
   return dwKind2 < p2.dwKind2;9 K) E. j2 j! L6 R1 W
  }
4 I+ W- c8 l3 C: @}
) L& x8 |' p. _, P};
  B6 s. d1 o# u0 l( Uclass CInventorySort
3 j( ~7 B# H* J4 F* k) s! P{* g- ^9 T! x9 h/ t$ G+ `! P2 t
public:1 @' S) D3 j+ Y: Z; U
CInventorySort()
1 K9 W" L9 y% s{5 N7 W5 G; E  z, \  u1 F$ _) J
  m_dwPos = 0;
0 n9 O* ~0 s% v2 U- b3 b* X8 F}
! _. z0 T  u  C- [; t! D7 a~CInventorySort(){}9 f9 z3 B$ E0 z+ Z
private:5 d$ P7 m. V% ~3 F5 {; F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) e  N6 y+ w1 F0 O7 T
DWORD m_dwPos;
. `% E8 q  A$ P/ d+ {5 [public:
: M1 L8 k+ K; F6 g& L+ uvoid Add(BYTE nIndex)
) U) |$ {- o( p2 {8 t* \5 u{
% C+ U, D7 M& q  if (m_dwPos >= MAX_INVENTORY)
. D6 H; l2 o& R" H* T5 Y  v# L5 f  {9 ~8 Z6 `( Z# n0 l& U/ r$ X
   return;
; v, ]9 z) f0 i# O/ `  }/ T" d! Y+ M' P2 r$ o
  m_Item[m_dwPos].nIndex = nIndex;$ t# O0 M3 J$ a0 X1 H1 W' r5 I
  m_Item[m_dwPos].dwId = m_dwPos;8 i% Y1 n: Y; Y$ f+ ]
  m_dwPos++;# S- S: U& A, I1 i" s& S. Y" f& p
}
) O0 N) p1 K0 WBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列6 b7 W0 Q4 G3 Z
{
* X( c1 ?$ T$ |* v) U6 g  for (int i=0;i<MAX_INVENTORY;i++)
8 g8 [2 _3 k3 o1 W8 v  {
( ]% @3 p6 T" {4 z   if (m_Item.dwId == dwId)0 r  S% w# q9 ~7 L
   {$ v+ Y: P& y7 T2 x2 l
    return m_Item.nIndex;8 C; E) y1 N% x7 n
   }
! I( ?. |' r' T  }
% a" F) S' z0 g' ~9 m( c* C/ L  return 255;
3 E( K9 N6 {0 S0 x}! J8 \& `' F2 S$ c5 @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, b* u- {  ^" l% F{
) V4 d3 u. H2 t" i6 @/ q. x  BYTE nTmp = 0;
  ~! o" y! l: Y5 g  bool bDest = false,bSrc = false;+ g( f( u6 h) L2 c5 |7 g7 H
  for (int i=0;i<MAX_INVENTORY;i++)9 Z1 q# ?4 v* T4 Z7 B/ `3 l* ]9 O4 V
  {
& f+ H& V7 M0 r1 g( \   if (dwSrcId == m_Item.dwId)
0 K% c& a1 l2 j) @2 o* p' I   {0 P- X: f% \5 _- R$ N: {" W
    //id相等 则 改变对应的dest和src( Z3 \, `% [5 P4 N1 e3 H
    nTmp = m_Item.nIndex;$ h# N; z- W/ X" q$ X6 e$ q; j- f  i
    m_Item.nIndex = dest;( q1 E( U* w; \6 I6 H+ z, ~
   }
$ F* x% H( g. b  }4 \/ v2 j4 z$ Y. c
  //临时数据保存完毕,交换开始
3 U. b% q9 k$ v( n/ y  for (int i=0;i<MAX_INVENTORY;i++)  c0 v% w7 F8 o, m% w' ~
  {( N' a# |6 h: \3 E7 F+ f
   if (dest == m_Item.nIndex)
( j0 k# v6 |. F1 x7 ?- N0 Y   {
/ \$ r. c# p4 W' W9 y$ [    //id相等 则 改变对应的dest和src9 Y8 e. O" H2 s. v; h! D& j2 |
    m_Item.nIndex = nTmp;2 o/ s# v9 P6 h
   }+ J* G( V- w( E
  }
: t/ J0 S+ E: l% {5 ~, O}
* a, u" T+ j4 a* F, W};
+ V# u, ^2 k3 v% M' h4 n2 J3 [-------------------------------------------------------------------------
: w$ s2 q' q' Q  G依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* h* k7 _" h# H4 D8 P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( B% t9 w" q4 q
紧靠其上添加:" K+ t6 C, T5 k1 d* h1 W/ T
if( pWndBase == &m_wndMenu )& o1 r2 F" T1 I7 l) Q. s
{' |5 Y) D- I% S$ J) Y1 Z) i0 H
  switch( nID )
: h- F& P( r9 P; f0 l* b3 f1 K  P  {( e: g% }% ^: e9 v/ r1 I# D* T
  case 2:
) ~6 e$ A  M- J8 ^; ]  J   {, }6 C5 |) _7 R  T: {
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; P, R" h$ L/ V# t  i6 @* R    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# a5 a1 b& U0 {8 g; A; Z- h( V' f    {
! `3 J+ r- a* t/ d     break;  W. l- {5 O- M) `6 O. K* M" J
    }% B& P8 Z5 t9 x: W. Y- S9 E
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
5 I/ \0 p1 }9 x- Q" E: F    {
9 K# s+ V) O# d: s     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 h1 `# h( @: u: ~) w8 u     if( !pItemElem ): x6 m+ P5 R8 W, D) b
      continue;
  z: W5 X, q. f, V5 G" d     if(pItemElem->GetExtra() > 0)+ u5 D$ K; n) }
      continue;
' f# c- f8 Z$ a6 x6 `5 v, b8 K; M# V     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ Z5 _% e! D0 c* Z" F) N0 W      continue;  f$ @, K* Z+ K3 y6 q& F: I
     if( g_pPlayer->IsUsing( pItemElem ) )* y1 n! K9 K! s# s) d7 T
      continue;$ n3 o# e; Z5 T- ^  g  Y0 B
     if( pItemElem->IsUndestructable() == TRUE )7 `$ @6 S* P  Z% U6 ?& S
     {6 L/ S& S  c! p4 k9 F: B
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& P- Y; L- v6 p$ w; `
      continue;( m+ y7 u: t+ b% r
     }' r6 z; y1 D9 f$ Z( @( m. U
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
5 X: u" Y8 f6 O  F0 F    }
$ _' o8 ^, y/ T) u% Z) z    break;
, ^5 j7 q5 q, X5 @# K2 |. m7 `   }5 U2 l& W% w- J1 C
  case 1:
0 _% P# m% `' ]6 M5 _8 K   {
, x9 L, W1 v$ o* I- J) s    //整理背包# ]; k8 v# ?) {
    //////////////////////////////////////////////////////////////////////////
& Q' R8 \# L& [& J; }: I: z    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
6 b$ f( M1 L, D' k2 q    //////////////////////////////////////////////////////////////////////////
  N/ z6 U1 O& o. s9 |4 w1 t    //////////////////////////////////////////////////////////////////////////0 B3 i9 k3 c( u
    CInventorySort* pInvSort = new CInventorySort;
  H& W% k6 B  a& |& }% ^9 u- M/ |    vector <sItem> vItem;
- Q7 Q- x& L( f    vItem.resize(MAX_INVENTORY);//初始化大小
0 {) E4 {1 z  q4 h     //////////////////////////////////////////////////////////////////////////
9 c/ j2 H" w+ e/ m     //填充数据* {0 t2 W  \$ N1 K& E# e+ t' a
     for (int i=0;i<MAX_INVENTORY;i++)
5 d, I& n- D2 N+ C# H+ J- v     {
1 y( \. i6 k7 C      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% a& W& Z) d6 f$ l      if (!pItemElem)
# W; u" Y2 r6 f# b+ S1 V      {
% u6 c. s' N. W, \* ~' j* s9 Q' b       vItem.dwKind2 = 0xffffffff;& S# W. j7 t' {  F0 f: q- V# M# A
       vItem.dwItemId = 0xffffffff;
( j8 G9 v4 r% |* \8 M       vItem.nIndex = i;
- O- p5 `5 R, f& R0 Q      }else {
  r# p( p' @- v& L! I4 [       ItemProp* pProp = pItemElem->GetProp();
0 u( f3 S, o! B; V5 F4 D# e       vItem.dwKind2 = pProp->dwItemKind2;, R( c( e- ?  n3 j. A/ n
       vItem.dwItemId = pItemElem->m_dwItemId;
5 M* |$ R/ j* w' L6 ~) V5 n       vItem.nIndex = i;
+ ?- z2 r/ ~7 q: l! D7 c3 ^9 |& u      }% w* g7 q! }) [7 j
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 B3 H6 |" f! r# G  a3 [     }
/ p1 H# p, P2 X% X6 R, ^4 {     //////////////////////////////////////////////////////////////////////////" V, A, g) F! B5 _; L! g
     sort(vItem.begin(),vItem.end());//排序
: `; @0 _; a' w: G     //////////////////////////////////////////////////////////////////////////6 H" F! `3 j, N! s
     //交换# x1 E# N) u% m1 U
     for (size_t i=0;i<vItem.size();i++)2 m, @* V. k# H+ M
     {$ T( I5 J  z' N3 |9 ~
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& q) W9 U. c7 T& W9 D" Z& n! p- P9 @
      pInvSort->Add(vItem.nIndex);0 A4 }( g. \: e, `( G9 m- Y, b
     }: U  V) G0 d* S) P6 p
     BYTE nDestPos = 0;
6 U% `2 B6 A, A, t     for (int i=0;i<MAX_INVENTORY;i++)
; L* y7 ]; k. l* i     {( h* |4 J8 f8 M- R
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
) {$ `! ]* e6 h$ V      if (pItemElem)
4 d$ [2 R9 p7 y) J2 `      {
. ^" {# G/ p2 t: S: E( ]       if (IsUsingItem(pItemElem)); N9 p8 M* `) Z6 ]% A7 X( l7 ?
       {  x0 D; l6 ~" @& [4 j3 ^
        //这个位置无法放+ V1 l0 ]/ }5 B" }# H! v! z
        nDestPos++;
; t0 J) K+ t) o7 n! S! V       }
, z6 K; N) e* a6 K      }4 _- E" [9 I: y  s' w
      BYTE nSrc = pInvSort->GetItemSrc(i);: W/ {# C, y) T7 V# |" _: o
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);1 O9 @' v4 _" x8 ]5 t; Q# a
      if (pItemElem)
( a- a1 |5 s$ A  u+ }      {; h$ [% v9 p7 b- a+ m/ m
       if (IsUsingItem(pItemElem))% P9 _* L/ a& W& J# D
       {
' ]/ g# Y* _9 b% b8 R  Q  @        //这个道具无法移动,跳过
2 m, \, a# A( o8 p3 V0 |, ^        continue;2 H# K! E+ q, s9 D: p$ u
       }
7 |% b8 c/ J0 C7 Y# t      }else{
0 O+ h8 u3 D$ b, X       //空位置 不用动
3 S" F8 v" H% N; y) T+ d# J. {8 c$ `       continue;5 @' J5 g9 b/ N& B1 O! B! M
      }
2 A; ]/ K9 K7 c2 b  j      //////////////////////////////////////////////////////////////////////////7 p+ q0 Y7 g3 _
      //开始移动
0 x% G/ T! ]$ I! B      if (nSrc == nDestPos): X: x- z7 q6 e: P; F4 I4 p
      {7 N" h- \# l- O, d
       //原地不动+ Q( l6 v: Y8 a3 k# Q8 U  u9 }2 L
       nDestPos++;
, _0 Z; t' r" G8 E6 F/ X$ C* h       continue;
% X" M# b$ _. F" u      }
& r6 c5 A) d) T$ A- |& w; R      pInvSort->MoveItem(i,nDestPos);
" s2 c+ x6 t9 i* V6 r      g_DPlay.SendMoveItem(0,nSrc,nDestPos);9 k3 E  a6 c; r
      Sleep(5);
3 s: \' }" ^, D" w      //Error("移动 - %d->%d",nSrc,nDestPos);  c; N9 e( Q2 [/ `) U6 u; n  o
      nDestPos++;, ~/ A- g0 j2 c( E
     }$ R& h6 h% F" f: Y- l
     //取第一个元素的信息( b  M2 H- Q8 Q; [, h
     /*
+ _' \; k1 g8 l( I+ ~. `     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
0 h' A/ R/ B6 H" c$ E     {
6 y' ^( B( @( N% w$ U      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);. K1 w3 q7 @: q- d9 S
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
! e) {5 v6 h2 [     }+ R3 [4 L) B1 B/ `8 g
     */
6 D# z" t$ K6 H* z! U% {. |/ l    //////////////////////////////////////////////////////////////////////////
' @& c1 j( b* _; k; p; ?6 F    break;* N# O2 b- w8 W& }2 s
   }
3 ~3 Q4 a7 Y9 Z9 }, w& D; d  }
5 K' W3 z$ E) I$ {! e* R}4 U! E/ `5 X- R
m_wndMenu.SetVisible(FALSE);
7 A8 U( L# Z9 X7 O9 w$ B' n
- m- [- Y# T( A--------------------------------------------------------------------------------------------------------
4 y6 t9 g5 p* R: n搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
9 ]* r5 q% v. T& F{
' H: h7 i" z! T3 H# L2 P9 KBaseMouseCursor();
" J! \$ T/ f; d  X) ]. }5 d1 e. P7 Z6 ]1 Z}9 N5 H/ x; v1 K+ c6 O7 v
在其下添加:3 `  t' N. w  t/ n, v1 U  w
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)# O' p4 }' p) {  B9 c( f
{
0 x* Y. U8 F8 J; _7 R8 v8 am_wndMenu.DeleteAllMenu();
8 R' Z$ x3 f/ N7 d% k2 rm_wndMenu.CreateMenu(this);: a$ M, n* n4 f" @) ^3 i! ^; _
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& O5 d/ D$ d7 \
/ B! z3 A: o7 A1 K2 T/ _if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))1 O9 \: q9 a& S' W2 \
{
# @, @' m' k- W3 N# y/ n6 g  //P以上级别才可以删除所有道具7 u# j0 d6 n6 ~- S
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: e3 t1 s/ h1 D+ @5 |, E
}8 g1 w; A9 i" p5 i- Q! C
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
+ @6 r9 i$ b, s4 M$ Dm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
5 _( s; R( c% b) g' Z2 [9 qm_wndMenu.SetFocus();& w- I9 V: ~$ ?9 u! \& c2 r, T; I
}+ ?7 |: h+ i# O' m
------------------------------------------------------------------------------------------------------------. u9 I5 G' a; }. L; B
*************************
9 @6 l- j# g6 I( Z) bWndField.h文件0 s3 Y7 m/ O5 ^0 F  @
*************************
1 N% D( n+ h% ~0 w4 v% |7 x+ V搜索:BOOL m_bReport;
3 K" s; w+ [5 k6 \: O, u其后添加:  o$ g# v7 m7 J% f/ M) h
CWndMenu m_wndMenu;7 @2 d0 Z1 t7 m' N& t4 i; ]
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
" e$ k6 M7 r4 T% b其后添加:& A' F6 ^# j# t. q& F0 _7 h, T
virtual void OnRButtonUp(UINT nFlags, CPoint point);- p% k5 o6 ]* k0 L/ N

8 x/ c& M9 h6 R- @* i4 ]- i4 a* i6 n) L; Z- b9 j

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-4 14:20 , Processed in 0.064061 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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