飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
) r4 O- Q- {# `( x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 g2 B& v$ Z8 u9 \, w- V
: H! O- r$ R" _' T
struct sItem% W; |7 R* d$ o9 n! k
{
5 B6 r1 U9 \* p. F3 ]DWORD dwId;  p/ m5 G% T  k0 w$ y
DWORD dwKind2;
' q( j3 ?: X/ ~' V; C1 W- I. ~DWORD dwItemId;
3 i. @' t) |6 i0 L# }BYTE nIndex;" S6 b/ g7 N6 l+ @6 W; l  w
sItem(){
' S" [: U. E) m2 E  dwId = dwKind2 = dwItemId = nIndex = 0;  g; ]/ x, Z& a7 ]
}5 s' n# Z- E1 ~, t$ `! ~
bool operator < (const sItem p2)
. @% L1 O- k/ s# p$ O{
5 G% R( @( K5 M' Z; b  if (dwKind2 == p2.dwKind2)
% f# n7 Q& B7 z$ q, O+ ?  }  {4 g+ U% |# I, l4 A; `3 m8 G
   return dwItemId < p2.dwItemId;# m9 f  g& q- }3 D" s( \* v8 f
  }else{1 x$ @% w' s: \9 H! P! c) @7 y) a
   return dwKind2 < p2.dwKind2;, }; y' v; A3 n2 \! _' x
  }
( t/ Y1 ~7 L6 l# S9 s}6 M& A$ G% \8 N4 A0 S3 J  y1 H3 R3 Y
};
2 M" m# s# i/ v7 o; ^7 wclass CInventorySort
8 r. \. C. k& Q8 u{
5 l; z) Z& G0 S' v* I' wpublic:5 i  v. }' D; t6 ?7 H- q# R6 ]
CInventorySort()* v* f2 W8 [- Q. G# d1 T4 }
{$ u. F. g! L" I) V* C! b& C
  m_dwPos = 0;1 f5 n- x5 V2 w3 K/ U6 z
}
- U0 A, ~1 Z/ y" p  e, u% @. F~CInventorySort(){}* S& y& J1 \" y; R9 D# z6 S* _
private:
0 t& [( e0 n8 G/ rsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
( W/ Q( _* L# W0 f" o4 Y5 G8 }7 BDWORD m_dwPos;
% U/ J9 Y" i% ~, t5 Tpublic:
- S* T& K) c( c+ [" ivoid Add(BYTE nIndex)
, X* m; \6 x- s% X7 c/ _{
& g3 }3 h7 e$ j0 @  if (m_dwPos >= MAX_INVENTORY)
2 B% @1 e0 {, r( X  {8 ]9 X4 Z$ R: S& m, n4 t
   return;
4 I, E$ H* h  H- H" Z9 F  }
  `3 Q- r4 a$ Q& R2 T) E  m_Item[m_dwPos].nIndex = nIndex;
7 r+ Z' u: b3 I  m_Item[m_dwPos].dwId = m_dwPos;
# V* M7 X1 D1 e/ G$ Z  m_dwPos++;! L* U4 u6 J; F  ]2 p7 Q( y& l
}
& `, ~9 P$ P2 f" V1 p0 H# ^1 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 T* b5 p, y, x7 |% t3 V{
: S! v& ^* q# q1 y: V, a' m# ^  for (int i=0;i<MAX_INVENTORY;i++)
3 U7 H- @% z, l  {( s1 _9 ], E5 |! r! ]
   if (m_Item.dwId == dwId)
5 T; A/ B  A5 [2 `& {7 N( i   {) W! S# C/ p# D1 x4 b0 `" N% Y2 P
    return m_Item.nIndex;
. z/ C. h' Y# h6 `   }
# L. Y- q+ v) Z7 l- v  }' ]1 d( H: X  W4 H' l" J9 W* g
  return 255;
* p( u& Q1 q2 v; C2 w. U% R1 {! J}
! U, m, h5 V0 q! `! }# r* Bvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* v1 W2 u" n: Z7 R  B{
8 o. _0 J6 v; L0 }5 P  BYTE nTmp = 0;9 V9 t: |) N9 {2 Q2 \# g
  bool bDest = false,bSrc = false;
/ u( W* q2 H3 X  for (int i=0;i<MAX_INVENTORY;i++)# t2 N4 Q  d0 |, |3 |
  {
# t( n7 H3 M+ J! n* @- H4 {   if (dwSrcId == m_Item.dwId)
: x) _- N( ~) t! Y   {
1 v& u8 e0 B9 ~! g- `. ]& C    //id相等 则 改变对应的dest和src) y7 l( Q* T, G* ?4 u
    nTmp = m_Item.nIndex;
. k( E# X3 N5 f- I. q# j$ \/ E# i    m_Item.nIndex = dest;: i7 Y0 A; t6 V& R5 C2 [2 K
   }
' r4 U  w- P6 Q$ E  }
# _) X4 @1 Z5 g* W' ]  //临时数据保存完毕,交换开始
* P9 j9 ^7 ^; i9 ]- ~; d  ~+ V  for (int i=0;i<MAX_INVENTORY;i++)3 r" N0 m! G4 Z5 U
  {& ^% M4 w( e$ \/ g1 b
   if (dest == m_Item.nIndex)
* r! p8 ]4 w3 o( T8 f4 J   {, D6 L( b2 p- }1 h# g% |. {
    //id相等 则 改变对应的dest和src
: `: t# G  S7 c( [6 D1 v; x    m_Item.nIndex = nTmp;
9 w8 f; V* t- h) V   }
- E9 t/ X8 E# L8 O  }0 \3 j3 Q) k# l* {" `) F7 c
}  J; `2 m0 z8 I- N' i. u& ~
};8 \! P; T( Y% A& Z; J
-------------------------------------------------------------------------
5 f% E3 i! l& H5 ?7 `$ V- n9 k6 E依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 C4 {3 F$ u5 q: k搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- [* H: H; j. V; N( v; @紧靠其上添加:
5 Z& {! I) Q& `5 N6 v+ `if( pWndBase == &m_wndMenu )/ r. V; a+ r8 f$ ^2 j. w
{
7 c/ v$ o" F2 c  switch( nID )8 S+ x8 B/ ~% ]8 e  z, }( b/ S! m- k
  {
( T1 g; `0 n2 H8 l. E& C* E  case 2:9 ~! W7 R+ P" `* z  f$ Q. i! V
   {) o7 N" x- p) D; E
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, U' ^/ T( _4 h5 a1 k    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 ^6 m6 `0 i0 N: D& L, @$ G    {+ \4 U# F6 Y1 a% u4 D: o1 @
     break;6 }! ^' d" S( O8 H3 J( q% m
    }
* g3 u/ |. N3 Y4 _9 z    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
' o7 m2 h$ q" ?2 d! u0 ]    {
. V9 u' J3 S2 D, m2 ]& x     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* n) R$ @6 K0 q1 ~
     if( !pItemElem )/ B8 H3 Y. E. O: m8 k5 l
      continue;/ k* |( p( H& G9 Q! I
     if(pItemElem->GetExtra() > 0)
( U3 Z/ D/ v, o0 U- J  `; A) V      continue;, g7 P. O6 b& s9 |; k
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
0 n/ y; H# B3 a' a7 z      continue;# p* l; B4 h0 m
     if( g_pPlayer->IsUsing( pItemElem ) )3 Y" L; V& ?9 V& H* X% i
      continue;2 J# g) y* L" _1 w
     if( pItemElem->IsUndestructable() == TRUE )
# E& R. u9 ~- J     {$ ~. x. c; L$ Q2 b: p& u. Z( H1 J8 A
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );. _& k- \. s: N4 [9 S0 c; i8 k
      continue;
( h/ ~" K% y+ n     }! ~8 [# h3 ^, H  `7 {7 o
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
7 ?4 n% x( J9 T( L/ R    }
% X9 U  s/ m; W. w- }: h% |    break;
( Y+ G" z( v/ u: q  W  V5 I   }; Y) P6 K: F; _
  case 1:8 }+ W8 M! O. d& f* P& h( x9 L
   {
. h3 `! W9 `: }, [/ z" Z; ?+ V    //整理背包
8 K1 f# o* c3 k: J: G$ M    //////////////////////////////////////////////////////////////////////////
5 h) C: G, h2 S7 T" w1 f    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" u0 I, y& i8 V' B2 r
    //////////////////////////////////////////////////////////////////////////& J  a& {3 [9 h: T" {1 q* p" Q2 _
    //////////////////////////////////////////////////////////////////////////
5 @. w: L+ ^1 X- k    CInventorySort* pInvSort = new CInventorySort;4 O" O' d& @$ d$ r7 w
    vector <sItem> vItem;9 U7 r8 E- z9 ?- Y2 D% E' F
    vItem.resize(MAX_INVENTORY);//初始化大小
2 {/ I+ x) c, z& y. D' m     //////////////////////////////////////////////////////////////////////////
& U8 P9 l- p+ P/ E& C  s     //填充数据  Z# k4 y4 {% |7 }8 _& Z7 M
     for (int i=0;i<MAX_INVENTORY;i++)
" {5 a* y7 e4 T     {; D# x7 U$ D. R$ H7 X9 `% ]0 b5 i
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; K' c$ i0 C+ n( I/ H5 s      if (!pItemElem)8 {& w0 }9 g* `
      {8 {3 f& l8 C3 k
       vItem.dwKind2 = 0xffffffff;
  ~( V! S2 _& o# P  ?       vItem.dwItemId = 0xffffffff;
  W" {. x; U/ Z# ]- b* u3 Y       vItem.nIndex = i;& Z# H( F+ F/ ?0 n4 f4 i. @
      }else {
, I, k. R, G, b1 t& _       ItemProp* pProp = pItemElem->GetProp();% u# {9 M$ d" P- Z6 D( B4 ~+ v9 Z  c
       vItem.dwKind2 = pProp->dwItemKind2;  o6 ~: y6 A5 T6 u" S3 L* s
       vItem.dwItemId = pItemElem->m_dwItemId;
% `  A5 n4 X& D$ V0 b       vItem.nIndex = i;- x4 Z, C8 G9 j3 o0 G7 Q0 L
      }5 I2 C0 B& U: D4 }
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);  r  R$ N' o+ ^- w8 e; p9 P0 k0 R
     }6 g1 b2 B8 W, a. O- D7 U7 L
     //////////////////////////////////////////////////////////////////////////; P) ^( g% a5 \& W* A; K
     sort(vItem.begin(),vItem.end());//排序: @/ t% f; b- y% z# O
     //////////////////////////////////////////////////////////////////////////
, `/ e, o, A, z9 [  L0 I/ Y     //交换( e, e' F) B  i2 w3 F! ]0 t
     for (size_t i=0;i<vItem.size();i++)
& o) W" o  m) S% ?# T     {
" x5 v& J' w1 v* Q0 y4 Z      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* x2 b# d& p' P1 C. g$ X, Z  l8 G
      pInvSort->Add(vItem.nIndex);
3 @* B! Z4 G% @# e# ]     }
" Y/ }) L9 y) F1 v9 ?, J     BYTE nDestPos = 0;
4 ^3 N4 W4 r5 v/ ~: G- l3 u( ^     for (int i=0;i<MAX_INVENTORY;i++)$ A2 k7 o) m1 I
     {5 l7 `0 m( H2 K3 W6 Z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
% k& j5 ~0 A& v' |8 N* K9 i$ z8 w/ e      if (pItemElem)' P' Z+ U4 M0 k( s& k5 L
      {2 _& [' A4 ~& I% i  Y. K
       if (IsUsingItem(pItemElem))
/ \: z0 S/ I. F- ~+ ~7 w+ c; Q       {' t8 }- }: e& Q( n& G- f% a
        //这个位置无法放
3 @4 j% \; i: E' \  y        nDestPos++;
; T) T! M' t) U8 {; t1 M$ f9 \# e       }
7 g. f  ]. E! z( V# E" r5 T      }( [( W, }  A7 h) a
      BYTE nSrc = pInvSort->GetItemSrc(i);; f  ?% ^" F8 _( v* p1 |
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);4 P6 v1 M! r2 v
      if (pItemElem)1 L( s$ D$ H5 v! f% @4 K2 n
      {
: Z# k1 D3 S. z5 m9 @# Q       if (IsUsingItem(pItemElem))
8 t) A( O9 J2 Y) z" D       {
% W% k8 K1 ]  p5 O1 N, d0 C6 t" Q        //这个道具无法移动,跳过  h9 x% D0 x0 w. F
        continue;
! h5 k8 ]# t, [; O1 Y  X       }
; }. j, a& ]) H      }else{
8 _0 w0 s* Q* u3 R3 ]9 i6 t9 ?% M       //空位置 不用动# p% f7 v0 Y) E* L8 {# s
       continue;% k2 }/ O% Z5 C! m# V' N# D  a
      }
( e1 Z9 V% x/ B. a. X' J% o/ R; \! f      //////////////////////////////////////////////////////////////////////////
4 Q* D  z" ]3 h. B) {: u  _      //开始移动
. T1 Q- P" U* T      if (nSrc == nDestPos)( d) K& w4 {' P
      {
% I5 Z  }+ m; x: A8 s       //原地不动, h+ J6 w% J) B7 E0 J
       nDestPos++;
3 e0 e4 l3 e+ G% Z! T       continue;2 [% W7 P; k% i" `$ \$ v) k
      }
2 U: z. K7 b) s      pInvSort->MoveItem(i,nDestPos);5 S5 @4 ~4 Z  u) r9 ]
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);% J7 W8 P! j" b3 l) t# }
      Sleep(5);7 r' W! g% J) q
      //Error("移动 - %d->%d",nSrc,nDestPos);
6 Z! V- X5 m$ b      nDestPos++;$ s: y' }/ f+ S' d! ?
     }9 |- z5 T+ ?2 y
     //取第一个元素的信息
4 ^8 [" _. Y$ p2 u$ J     /*+ j4 v* {& m; Z* L5 B
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
/ X: e8 i7 \* G     {$ w0 [: V3 R6 i4 \6 j- o
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
% Y) i* z+ X) a/ w% R; H$ R      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: v5 K7 ]  K9 Q
     }: {0 F) C. M* c/ e9 I. N3 J: b
     */
' c7 E% u5 H& s" p    /////////////////////////////////////////////////////////////////////////// P. I  j) D. d; y3 m
    break;( @9 I) g* i9 x( P( v. N
   }6 e( o! ^, I" V7 H8 w
  } ! r6 C2 I$ g1 ?7 V2 x
}" a7 ~7 }' a' x0 }* W
m_wndMenu.SetVisible(FALSE);4 j5 {8 F: z9 O# N

0 Q5 B% Z/ w# h, S  M--------------------------------------------------------------------------------------------------------
; t2 e) G# R( X7 Y8 |搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
3 v% S8 o8 ]( A( n8 d+ z: y- {{2 y+ d6 J; H7 l! A* ~7 A. C+ D
BaseMouseCursor();0 c% D' y1 Q, f4 Q
}
- p4 A0 d# M3 s6 d7 L# N在其下添加:
! W! ^) \% R: D& `" Z% u$ gvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
6 I/ B# G* d. ^4 ^# J. s{
) Y0 ^; d. M0 R0 Xm_wndMenu.DeleteAllMenu();
5 i, ^7 ]! w& i4 O! K- c4 r+ ]# Wm_wndMenu.CreateMenu(this);
& H/ h6 E# Z/ C$ H/ d5 \( sm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 l1 j# p. f) e1 W1 V
8 T; X- t" I9 Oif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 s, C* ]" {5 E8 I( S' T" i: f) b{' D( D, i; }- G
  //P以上级别才可以删除所有道具
# y3 i' {3 A& P% n  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- M6 r7 k$ m; C  t}, X, X$ e# U2 a: R& d# n* I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 B5 f) m6 r3 n! i
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
  Y  y2 c3 O( g7 dm_wndMenu.SetFocus();* e6 Y* x$ A! r
}
+ n3 H9 d" {% W* u+ D* t------------------------------------------------------------------------------------------------------------
9 V6 N3 [  j! A*************************; I4 _- H3 R! q0 a8 S, c
WndField.h文件
4 J1 A5 \( p" X: d  S*************************! {. }4 g( S$ R: n
搜索:BOOL m_bReport;" j4 J$ u3 [) e8 D, ?
其后添加:1 [: k7 N6 T: y* s6 h
CWndMenu m_wndMenu;
& n4 ~/ y7 S* F, Y: }! U搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);9 H! o) ~$ T- q; `8 `- B6 Z6 Y
其后添加:6 B- E$ ^$ R$ [' o
virtual void OnRButtonUp(UINT nFlags, CPoint point);/ J# \8 N5 ]( m7 g6 r  A* c
' `. ~; p# |9 T5 N

; i* X: r6 P* p4 y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-13 00:28 , Processed in 0.075182 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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