飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 |0 u, w1 b1 @& [搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 V- P! u+ k7 `+ q& c( ?
* j7 _' l% h( L0 i/ m+ Fstruct sItem# C1 n. N8 }1 Y+ O
{
) \# D' h  G6 H$ G; A3 p. ADWORD dwId;; ]. {3 y. j' L7 z# k
DWORD dwKind2;
0 t3 ~4 u$ ]8 n, EDWORD dwItemId;; k( D7 P6 i8 e2 v0 F
BYTE nIndex;% N) O7 y$ V2 I# k8 V6 S
sItem(){9 Q, w- T5 ^0 o  g" o
  dwId = dwKind2 = dwItemId = nIndex = 0;
) {8 Y8 ?* b; {5 x/ T$ s# e" Q}, w( q- [$ [9 B- f( P. u) V
bool operator < (const sItem p2): o* ^0 E+ P0 B" v# C9 s
{* ^' f; L$ t% B0 g, C+ m
  if (dwKind2 == p2.dwKind2)
# p3 h/ B1 D2 }7 b% [  {
5 q$ z1 C- c: ?9 P   return dwItemId < p2.dwItemId;: Z7 O! k( X6 X3 \1 i. }* @! k9 W4 ]- E
  }else{* G8 Y' v$ U/ t
   return dwKind2 < p2.dwKind2;
; Y! n3 ?8 e8 l5 e, z& R  }
. l7 l- C; x# j+ C( d7 g6 w}# m/ ?0 g, U4 q
};
9 Z( x/ {- n, D: |- C. o( H! O3 Y' Rclass CInventorySort* W' b# G( c# ]6 X9 Z
{5 P8 k* F& i* J3 l
public:
; ?' n) F6 K, V6 M) _CInventorySort()
5 a2 i- B* a( w6 H& O& b{9 Y% e6 V8 Q& [7 Z( h
  m_dwPos = 0;1 b" z2 R/ Q( B& [. r$ Y
}9 I. g7 y% c5 s" V$ W
~CInventorySort(){}  c4 C% N8 x( K2 O$ Q# b
private:
2 R1 m$ g% [( b; o+ D; P7 WsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息. K5 H' ~0 C" J) P' j" V- h+ O! I2 o
DWORD m_dwPos;
. B& ^+ c7 o: ?- T4 o/ Bpublic:1 t$ i1 M' O. r+ [5 F/ J
void Add(BYTE nIndex)
) f0 I( s. e& P) ^! M{
6 |1 W* y( F6 t+ N8 c7 K  if (m_dwPos >= MAX_INVENTORY)
: G# t5 d$ g/ q+ ~1 r  {
. X/ m! V3 F) e- J   return;$ S1 ~! F0 a0 d
  }
; K5 F; O2 ]/ c- _  m_Item[m_dwPos].nIndex = nIndex;# L, C' A) S. b0 q
  m_Item[m_dwPos].dwId = m_dwPos;. i: j; r4 e6 J; I: ~) v0 d- G: T
  m_dwPos++;" G* j9 @1 ]+ A: Y
}
9 A8 S+ d% u9 d- X8 x- L: ~BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 B  D- s4 ~2 L% h7 P8 I{
5 V& j5 @/ D8 |+ R4 }0 ?$ D  for (int i=0;i<MAX_INVENTORY;i++)
0 s8 _  t, X' B7 J6 j  {
1 q1 ~& |* j4 |! D2 p+ T  E. K  B   if (m_Item.dwId == dwId). X* z* m4 l/ G& w) v
   {, X' M2 L8 S8 n4 i+ C. `( v
    return m_Item.nIndex;
) b& O$ J( F" R9 s   }( S' u+ K' g; m3 G$ X/ Y, {
  }+ L' G4 l( _- f- L! n2 U
  return 255;5 ]5 t$ M6 [' v: V
}
' W+ f3 w8 S' v+ X( }& {5 v" R+ uvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
  A+ @8 T: G. ^& t& Q9 i% ~  s{; z0 v" l6 X! d" u& n) X
  BYTE nTmp = 0;1 U7 f/ b; l, u" C
  bool bDest = false,bSrc = false;
& x9 z7 [9 Q5 j2 D5 }% i  for (int i=0;i<MAX_INVENTORY;i++)2 f# E& @% x3 M/ S( t, x7 E$ S: [
  {: m0 P: a0 H" ?, a: K& s' u* T. a# z
   if (dwSrcId == m_Item.dwId)* \  q/ W$ h& ^5 e8 i3 |
   {' e  x& b  U: q* k& I
    //id相等 则 改变对应的dest和src! g. i5 }8 q7 c* n, z
    nTmp = m_Item.nIndex;3 B& K, }) s1 c' P9 [( O
    m_Item.nIndex = dest;
9 s, g' B/ R  {% ~; B   }
5 G* W9 Q3 u1 K0 K2 E+ X' O! K6 y  }
& u, U$ T7 A8 q  //临时数据保存完毕,交换开始! K& K" s2 V8 X5 a- d0 w
  for (int i=0;i<MAX_INVENTORY;i++)
" P- D( a2 g2 S2 K% k$ M  {" M) u+ g) p3 C( T) I1 z0 e
   if (dest == m_Item.nIndex); t: g$ c. b: ?- E, s% l3 c
   {
1 g; Q' x* m# X- g0 e    //id相等 则 改变对应的dest和src
# `6 e3 R. @- O" B3 Y$ Y# B    m_Item.nIndex = nTmp;
- s* C* L; {* ]0 A7 U: f. `1 y8 @8 L   }
/ M3 n; k2 T; {! W6 W% [  }
1 K7 @. {7 h: u5 w}
1 R1 Y9 m; G- \' o7 z};
+ V  }) r' k7 ?. ^-------------------------------------------------------------------------
1 D1 n9 m  t; v依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
) _; Z/ P/ {' k4 L5 W搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- ^/ e) [$ o# f, G7 w紧靠其上添加:
$ D5 J3 d& Z# P0 o1 Wif( pWndBase == &m_wndMenu )
) v7 z8 K6 {3 F{
- R! w7 ?  _0 d% M2 E; a* u  switch( nID )
6 \  Q. S4 J2 M; E2 P$ A  {
0 Q, N' ?) z/ c- s- ?  case 2:
4 g2 d' \% j9 e  O   {/ n$ |- p/ H" T: h( g  F1 P
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
8 w5 u6 T8 H, [- E1 b2 E    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 ]/ v5 y" a; O2 L0 X  Z    {
, T# U. i! V0 e  t* c     break;
7 o; h" j: ~' D  j6 Q' Q    }' Q8 a, u( A2 \0 i4 Z' Y
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 q$ z) T/ n  N( c/ m* ^" O    {8 W. g' U' M. f. d$ A! C
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* k* n* B$ m& c" g
     if( !pItemElem ). e4 _3 @) Y+ c8 _* H
      continue;6 l+ W  M/ H! R, Z6 Z8 R
     if(pItemElem->GetExtra() > 0)
2 a% f3 k2 M  D+ q6 s9 W      continue;1 M7 ^6 l/ i9 G8 _  {: r
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
4 i% q- i9 B& e      continue;
* I( O* P' t9 ^4 Y! t" o  T( ?     if( g_pPlayer->IsUsing( pItemElem ) )
6 W0 [1 z' u4 ?' B- I      continue;
$ [" i" H9 ?) a6 k     if( pItemElem->IsUndestructable() == TRUE )0 _! I) ?0 v3 B4 v) H1 ^
     {- J, E4 e9 B7 w3 ^
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
; x- U. S: m1 a/ F+ @      continue;' C1 v) k& m) F
     }, ]" ]+ @5 O3 e5 d% z
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);" N$ e! C0 y; I( S2 T0 L/ _
    }
% w0 @7 F- M. |: H  _    break;
: L1 N8 H% ~+ q) r% [' P$ l   }
4 `0 r/ }7 d& i! B3 {" k& h  case 1:7 B# }& `/ N- q6 H( a7 Z0 b
   {
, h) ^9 o8 q/ q  q    //整理背包
% z  e) W. t% D; l; w- C/ p7 R5 t* G    //////////////////////////////////////////////////////////////////////////+ Z" t# |- Y) q- ?3 e& V
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
' v$ R9 L( t; @* x7 W- n' ?    //////////////////////////////////////////////////////////////////////////  t1 j$ p2 L* F3 A- k) t- Y2 @
    //////////////////////////////////////////////////////////////////////////5 {: _  y+ G8 S, P$ B7 @
    CInventorySort* pInvSort = new CInventorySort;  P+ ^, H2 E! x: G0 e7 [/ B
    vector <sItem> vItem;
2 Z! `6 D' }% x6 l2 G9 d    vItem.resize(MAX_INVENTORY);//初始化大小
& b) o- A1 z/ z  P. t     //////////////////////////////////////////////////////////////////////////5 y( A5 M9 n5 b; c" Z: D- h" x
     //填充数据
% c) v; B* a: U/ C9 L     for (int i=0;i<MAX_INVENTORY;i++)
" g& N/ Y& k  H7 ^     {0 |, ~6 d6 R4 v  y0 k
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 s, \* L& G) |5 c      if (!pItemElem)/ u; u) e1 ]+ g' @5 E* [
      {
) d# @2 d4 i  [1 F$ o       vItem.dwKind2 = 0xffffffff;
& W' D+ L' |1 ^  b2 K  {4 x       vItem.dwItemId = 0xffffffff;+ e0 r2 P2 z* H% c- p* W
       vItem.nIndex = i;" I4 g' B) D  o  }0 _7 F! q
      }else {0 \8 ^4 J- ^3 ]" z" p2 U6 N2 g$ e5 M
       ItemProp* pProp = pItemElem->GetProp();
. n' V) G" G4 O; X4 S' `       vItem.dwKind2 = pProp->dwItemKind2;
  }, z! w) N5 j' U2 |5 O0 y       vItem.dwItemId = pItemElem->m_dwItemId;' u1 T, Y- ?* E' W. F, S
       vItem.nIndex = i;( @7 A: x) G" b0 a  G
      }2 {( x: N, w; B) |9 \
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 \' ]5 q" B! B0 A4 {$ Y2 I     }
* s7 h# B) J& t+ p4 v9 M     //////////////////////////////////////////////////////////////////////////% Q; i7 ?- Y  X! X/ S/ U
     sort(vItem.begin(),vItem.end());//排序5 z* \* O/ B# `
     //////////////////////////////////////////////////////////////////////////- d; l8 r/ Q/ v. ]4 R/ _; J
     //交换) o8 c$ G$ D  G* ]( V' @4 @
     for (size_t i=0;i<vItem.size();i++)) w/ s) |5 F3 @
     {# m, j+ D# a3 U- `& {: d
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
0 T6 M+ w! i( {: A8 Y- O      pInvSort->Add(vItem.nIndex);; q4 v+ l, x7 G8 i2 q9 {/ f
     }  o! r" f0 C& C% v  K
     BYTE nDestPos = 0;
0 S5 f" B) q9 v% k& p     for (int i=0;i<MAX_INVENTORY;i++)
2 O3 [% H9 H2 m% N     {
% f" J& K4 `. o, k  G      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
  @" a4 }: o. ~! D# @& O      if (pItemElem)( x4 @9 `+ ^) ?, e' ~$ T  I6 }0 x
      {' z$ ?. M5 G2 l
       if (IsUsingItem(pItemElem))' c' G, t2 w5 V. _  [8 b) ?
       {
$ ?3 P( t3 v6 ?! C9 L2 V9 i5 j" Q% N        //这个位置无法放
- k2 I8 s& L& D) e2 h        nDestPos++;
: ^" P# M. |7 t/ |) H       }
9 W! j" P/ v/ Q# x& u& z. A      }2 O$ \. T8 f- x: J  g2 u! C' V
      BYTE nSrc = pInvSort->GetItemSrc(i);% b1 L; N# D* R% c+ z% j
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);7 f  r3 z# T( m( Y( u" r4 B
      if (pItemElem)$ M$ O+ y$ O5 j* [+ b
      {
1 K6 {' `+ f. S& }9 }       if (IsUsingItem(pItemElem))
2 _. E, Z) ^' _$ ~       {
7 l; k  X3 U" Q$ P7 U. Z        //这个道具无法移动,跳过! }* R3 g" |3 M  Q1 I$ m, f
        continue;
  y3 P$ e/ k9 r1 H       }% \+ `: \$ `$ L5 Z0 r# l  A
      }else{/ O( Q2 p9 S& ?- s  S9 W8 r, P
       //空位置 不用动
- H7 u: [+ q$ y+ M3 x2 U( ~8 ], `       continue;2 G( V, @3 [0 f- z& s- [
      }
5 e# @+ q4 B" S/ e      //////////////////////////////////////////////////////////////////////////( D4 R7 U: u8 x* _. I2 D/ \
      //开始移动
: t  Q% k2 r" X  F5 O& P      if (nSrc == nDestPos)
; [' r6 G, k& E0 O/ D5 J# Z      {
) I9 _* g" O  g4 ~% B- V" f: g       //原地不动
$ R  I8 Y* x. m+ c       nDestPos++;
* H7 T1 U3 i% ~6 a! j0 V       continue;
* R4 h- [# ]6 e. g      }+ O! s) v) ]! T5 u
      pInvSort->MoveItem(i,nDestPos);
6 O+ K$ r& l) s- \. o  p      g_DPlay.SendMoveItem(0,nSrc,nDestPos);3 @7 n4 f" }) [- u, c: M
      Sleep(5);, _* t* g$ [$ m( }; v
      //Error("移动 - %d->%d",nSrc,nDestPos);$ X, }: C. x# k% |
      nDestPos++;% I  G' y0 b3 ]. g  P$ f: a: S
     }4 \% N" {5 I' I& f
     //取第一个元素的信息: [( q( q$ T" D& @# `' T
     /*1 b, B" L( A1 I
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 b  e! u9 B  o1 l: \9 `     {
1 r( P+ Y+ x6 X0 }$ v, }2 r% A      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 o8 b* T/ ^/ j9 \2 X9 v      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 k7 }  O' i0 Z5 y' @
     }5 P) x! B3 h4 M& F' y
     */
8 @) E3 a6 F) ~! v% ?    //////////////////////////////////////////////////////////////////////////' t$ `( H1 J  a( L, D9 H$ t
    break;
. Q  r* c- d5 y   }
5 q; t7 s) q0 C/ r  } 0 [& M4 |  t. Y& F' k
}
& ~7 |( E+ m  F4 n% Im_wndMenu.SetVisible(FALSE);
( H* }4 j$ ^3 X5 X9 {+ G! h7 b' u- e+ p
--------------------------------------------------------------------------------------------------------
. A3 @& p$ T+ @$ |/ N! e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): V8 o) d7 [7 O
{
- E/ i5 K) X5 I, H6 DBaseMouseCursor();
! `4 b, m$ M4 p}
6 T& M& h" u% r5 k2 u$ D在其下添加:
; i1 i" x4 H& pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
% a3 g2 p  p/ K{# z' O- `  W( }3 f
m_wndMenu.DeleteAllMenu();2 Q: I, w" T  q5 s
m_wndMenu.CreateMenu(this);
1 g6 ~( q5 c9 i% i& }# rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");7 b: l0 [6 u+ ~: I
! c  n$ B! V' \' c, u5 l6 V
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
) A" P+ H" Q! e. C{
, Y0 v, C  c  M: {2 Q) C1 f3 `3 p8 Y0 c6 {  //P以上级别才可以删除所有道具
9 O# ]2 D/ T9 N! V9 C  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
/ d& ]  E( N- D2 b5 `}
8 F* X' j4 s! r' p. B; I+ pm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 h6 X0 [* b. }% F
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
2 z$ V$ v; M4 lm_wndMenu.SetFocus();
" G/ d- j9 u2 r& L7 n4 o}7 Z% k8 J  u, @/ I5 g9 Y
------------------------------------------------------------------------------------------------------------4 d+ F9 k2 U, ]2 C& L' A/ H. ]
*************************
# G3 A3 d& f0 XWndField.h文件1 C& H# g% W& ?1 c; b; l3 ~! n
*************************
, r. I1 D+ y) Z& D& }* `! _) _: k搜索:BOOL m_bReport;
9 K( _1 _& D1 e5 F- P( W# k其后添加:3 p- d7 g7 j; S+ [& Q2 P! {- X! H
CWndMenu m_wndMenu;
8 }4 w8 o/ z9 r搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
( I, E- H3 f; {0 A+ _, f' m+ q" m/ o其后添加:2 S4 ?6 `2 }- L" B
virtual void OnRButtonUp(UINT nFlags, CPoint point);
- s- O0 Y! {8 ]' O# |$ D. Y8 S+ Q- I+ ?6 B2 J

& K8 m6 H" l$ ~/ j; l3 W

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-18 09:52 , Processed in 0.129341 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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