飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
$ g6 O+ p0 H+ i7 z- R& L搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ G% R3 ]0 M  G4 v+ I% a6 M" u- m' V* q, H  ?5 O
struct sItem7 j8 a3 p( R( c8 @" N: E; K7 ?6 z
{
; \6 D- n2 ]/ pDWORD dwId;& m% ^  D$ Y& z1 a* {% ?4 Z
DWORD dwKind2;& Y. D; w& y6 ]" L% D6 y7 e
DWORD dwItemId;
! ?+ x# A. p# p- `) }BYTE nIndex;
1 z6 u4 ^0 i, V# JsItem(){$ D# }$ Y+ y8 D- M6 o
  dwId = dwKind2 = dwItemId = nIndex = 0;$ ~: ], l1 U2 I* Y$ D: P) |% u
}
, i$ L2 B0 u: y7 e( F) D' }bool operator < (const sItem p2)
/ a+ N6 E  P$ h+ i5 P' F{
; h; u& R9 ]7 l9 N  if (dwKind2 == p2.dwKind2)1 l4 Z# `% N; o. ^5 y9 [8 I
  {% j0 w7 Z' f1 ^) c+ h2 b; }+ T2 }
   return dwItemId < p2.dwItemId;' V* d- M3 Q" G$ D
  }else{
3 v( @. X4 U1 L8 p   return dwKind2 < p2.dwKind2;# r, l% N) m- x/ B3 e
  }
* {7 Q9 {$ `* Q5 T+ C}# u) r( m; s7 T8 d/ S2 F% l) l
};+ C* t, a; O- `1 \9 u; Q1 L
class CInventorySort
" V1 G0 ?2 Z! J# |) u" [% a$ w{2 B' g7 L4 I; T5 |0 M3 d8 }8 C
public:; T  e4 U! G0 T# V
CInventorySort()1 M6 V& E$ l7 p. M6 |$ A
{+ c& V( P: ?( a; b
  m_dwPos = 0;
: U% f- l7 r1 W: I/ W}
/ K( z. J- ~/ W3 {6 G2 w2 a8 I" _" `~CInventorySort(){}" O  Y5 X6 y$ Z: e2 U+ s% }
private:
% [1 N0 m! J9 g7 asItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* a/ E  @# p" C) D
DWORD m_dwPos;: w# f  A- \$ M$ \) N
public:
4 z, U+ Y  J! i2 fvoid Add(BYTE nIndex)
, Y2 K1 Y/ F2 }2 a# T{3 {4 A  |: \2 `$ v
  if (m_dwPos >= MAX_INVENTORY)
2 w1 o% c0 z' a3 v  {
  Q" i7 Y# \$ R% T   return;3 a; g0 Q1 B; X1 ?1 R0 W" U
  }+ q# H- U- K$ `2 ^' h1 [
  m_Item[m_dwPos].nIndex = nIndex;$ p" M8 ?! V8 ]) y( R
  m_Item[m_dwPos].dwId = m_dwPos;) c1 a# V' |# P# b; E- P6 Z
  m_dwPos++;
; V( d( Q! }7 u5 r1 z8 [}
: T9 c+ \8 E+ ?: u& l+ p, Y: ZBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列  t7 o/ o' Q0 {9 A
{( ~) p6 P6 Q9 o8 |0 W
  for (int i=0;i<MAX_INVENTORY;i++)
8 `1 t/ O) H2 T1 s" ?1 ?3 R4 X  {
! }+ W7 ?, g) j  @  m+ K1 j( k   if (m_Item.dwId == dwId)- {4 Y7 Q) v: G  U- Y! g
   {
4 a  }% |  Q/ Q; m+ a$ V8 l    return m_Item.nIndex;9 n+ ], B9 U2 \7 E1 f& A/ ]9 x
   }
1 h& o3 k! H4 g  y  }
  f2 [+ J2 w5 F& C7 n  return 255;
0 s9 w. E. Z3 h6 e}/ R7 W* |: m; a2 U3 {1 Z7 d1 {
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! v$ ]5 T5 w, }{
, r* Y3 K. @1 y) y6 W. g! s  BYTE nTmp = 0;
+ [/ t% O7 \* y/ l$ v6 k& ?$ W  bool bDest = false,bSrc = false;
! ~3 W8 b% w$ J  m0 F" a+ q  for (int i=0;i<MAX_INVENTORY;i++)6 W' ?* }+ K' I& {; q% Y
  {- C) K& r0 l$ L6 u: d
   if (dwSrcId == m_Item.dwId)
# f% n7 W3 v6 {7 h* t   {
( v7 H& R- N$ b1 @$ c( m    //id相等 则 改变对应的dest和src
: p3 x7 q# D2 ^' w' g" A2 V+ B    nTmp = m_Item.nIndex;
5 ^+ m4 T; K5 }1 C" l$ ]3 g    m_Item.nIndex = dest;+ |' R! T  t; u9 N# y2 L: p
   }& y5 Z6 _- V7 x1 x
  }
1 W. |& j7 U2 l4 M& M+ B  //临时数据保存完毕,交换开始
8 f: c+ A: c8 Y4 J9 w; G  for (int i=0;i<MAX_INVENTORY;i++)
! \3 c7 m1 j' A: S  {
! t1 S4 I* l4 j* j( H   if (dest == m_Item.nIndex)
& y& M* @8 D5 T9 @; L   {
: w2 v4 H6 k/ \) ?7 Y    //id相等 则 改变对应的dest和src
% `" d; A7 [5 e* Y9 v    m_Item.nIndex = nTmp;
' S& F, o* n& h9 y' p4 N) A: ?   }
6 H6 T) p7 {* x" o  }4 K% E# W' @6 T' e' E
}
% w+ X5 X- i1 l6 m4 X};5 \, v: B- q. c
-------------------------------------------------------------------------  q- K9 f' P9 t5 {; J
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* U" ~0 \$ O1 C搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 \# @+ s$ o& R0 [/ ]# K紧靠其上添加:
3 G; N; ^* I0 B! Yif( pWndBase == &m_wndMenu )
% }1 a6 V' Z- O4 o- i& Z6 L{4 y6 [" p2 c* |* L# B
  switch( nID )
& }* ~, i, G7 L; }8 ~  {
$ h" X$ i2 }4 Y  case 2:! T9 q! q8 ~$ n' ?5 l% Q5 f
   {
, O1 A3 d+ F, q1 ~    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 U$ |8 i5 K( W& s' y    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
3 A$ b  K0 E; k3 K% j% P" T0 j    {6 e1 k) t7 H" F2 Q
     break;% o7 Z: g: ?7 `; U0 j+ U7 I( B
    }8 N- X$ p8 ]6 e$ Y& N
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
7 {; g4 k5 w, H" r    {
+ H, Y$ q' q, e* G. C% q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; i  Y6 s. \/ i3 }     if( !pItemElem )
! T) X3 I* u* ?2 ?, G/ \2 Z      continue;  `2 e* \) d2 g+ E1 o9 ?) g
     if(pItemElem->GetExtra() > 0)
) T8 ~/ T( O% N7 z      continue;
& a: U* t/ g% R  ^& }: q2 r     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 b! K. S& x; \% T( U$ w      continue;5 b" x  ?( w3 w* o6 L
     if( g_pPlayer->IsUsing( pItemElem ) )
! Q% o- i3 r* f      continue;; I, X9 Z6 l, v
     if( pItemElem->IsUndestructable() == TRUE )
9 ]* r5 _9 }7 e1 L/ J- \     {4 b, @. g- E* `4 l( x
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );: \3 D" ~9 X$ n1 `) \0 K" R3 u  V
      continue;( ~2 ?# U( T4 _- D# S# l  \
     }
4 }9 h8 C' ?& R  p% c. \' z5 G) z     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
( h5 r  F  b( o6 w8 _) r3 ^; c3 G    }0 g3 Z! C5 L5 p2 U+ {) W
    break;
; M' ~+ v) ]9 ?6 G5 k* L   }. a5 {1 b. B  o5 @" J
  case 1:
0 \) c$ D1 k+ R" _" C# S   {; p3 x3 w7 s' v0 k# M( I
    //整理背包
% [8 o" R5 j) y5 M- |    //////////////////////////////////////////////////////////////////////////9 @; {6 u# ^! p6 i, h+ S
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; ~8 n, _1 ^% G, \    //////////////////////////////////////////////////////////////////////////2 _$ M: k. c8 ^6 ~: Q
    //////////////////////////////////////////////////////////////////////////
& K2 O6 U- ?+ V$ b8 l7 F    CInventorySort* pInvSort = new CInventorySort;5 n- Y' f) U5 E! j
    vector <sItem> vItem;9 s/ H6 a0 D/ C; w  M5 N+ I) P) x
    vItem.resize(MAX_INVENTORY);//初始化大小) j: @" z. A; l, @. J
     //////////////////////////////////////////////////////////////////////////+ p/ ?9 g- a! c+ V, {0 D
     //填充数据1 e6 j8 K& q% R
     for (int i=0;i<MAX_INVENTORY;i++)
' b: k% V" k- K+ X# ^. q     {
' f$ g" R$ K* ^0 V; p% Q% u& _      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 x9 j4 e+ q/ t2 t& t
      if (!pItemElem); A# f$ s/ Y4 Y* e" j: m3 A. o
      {7 G7 \  K! F4 s/ d/ b% [
       vItem.dwKind2 = 0xffffffff;
/ Z+ r/ X$ N, ^2 E# v7 y* ~( \2 L* n       vItem.dwItemId = 0xffffffff;
. Q" C' f5 A' l/ J7 E) t- m       vItem.nIndex = i;
8 u- \8 \1 x# H" s. l      }else {
- S$ M3 [" Q1 N4 H, O/ z5 B& T' E       ItemProp* pProp = pItemElem->GetProp();
5 D- d' P' N8 ~       vItem.dwKind2 = pProp->dwItemKind2;
8 n2 Y3 s; p* w: E% P2 D& _2 e       vItem.dwItemId = pItemElem->m_dwItemId;
) s% o9 y. y; C% b       vItem.nIndex = i;
& n- u* ?) _- Q9 A% x# m5 c      }
" P& K. Y% {2 @% m. U5 u      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);, s+ P- V  ?& q
     }
% ]5 i9 l( I! B8 M9 C     //////////////////////////////////////////////////////////////////////////
3 ]( M- t* E  r- O     sort(vItem.begin(),vItem.end());//排序; [: q+ h$ P! w# N9 A" c0 B: b2 \- x
     /////////////////////////////////////////////////////////////////////////// {8 F% l- s+ d( N
     //交换
  o' D2 a$ L- n4 x0 D     for (size_t i=0;i<vItem.size();i++)
! P( h# _' U, ^" e' J4 Y* ^7 _- L     {
, f# v* x% t) d$ Y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: N9 F1 x2 V. e) ~0 H* i      pInvSort->Add(vItem.nIndex);
+ H) u6 X* L. Q4 V     }2 E, G& K, r6 n. Y. n$ i8 f0 f
     BYTE nDestPos = 0;5 v9 x; S( q- v8 {1 R6 K5 v
     for (int i=0;i<MAX_INVENTORY;i++)
( {, J" T+ B: W     {& s4 Y! k1 p+ l, z* s
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);& V; i+ T# l5 _% z, g6 C
      if (pItemElem)
' ^: a3 T+ j* d) I& W6 |      {" K& N! H. V" _! Q  H
       if (IsUsingItem(pItemElem))7 U' [* E' ^$ o
       {
9 v7 ?4 @& G! S6 @: X1 I+ l        //这个位置无法放
7 M# v7 E" ^; \* c        nDestPos++;
# Q# w/ e- o! O5 {" D; @8 W       }& x. e: Y8 I: `( h' u+ i# E2 k9 ~
      }7 [; F; Q, H% J, g" ~
      BYTE nSrc = pInvSort->GetItemSrc(i);  i2 V* ~* c& U! _
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
3 f$ |, P/ B& o( G      if (pItemElem)$ w8 a4 Z+ Y3 X% S& l  S- b
      {- o- N. Y+ Y. ~0 Q" z8 }
       if (IsUsingItem(pItemElem))
% P! x0 P: F% {6 T  |) o1 k       {
  }5 ?3 A) R- V        //这个道具无法移动,跳过
$ g4 `' G; L8 l* G$ |. O5 Z& U        continue;* U; L' E; t) E1 w* C6 F
       }9 J9 {4 g3 V  F  Z2 j' \6 ^- x
      }else{: P% Y2 M, S) \5 ~* a+ [, M- c9 G
       //空位置 不用动
( Y' I+ U. E7 C3 ]2 W       continue;
" g2 _, L3 E7 t8 B7 C      }
$ c" r! d+ W- I+ o      //////////////////////////////////////////////////////////////////////////+ ?" A- C1 \2 X) I8 {: C
      //开始移动
7 w  }& V& r: S1 p      if (nSrc == nDestPos)' H! P: @% L3 R& r* \$ h2 ^7 T8 S
      {& l; d0 q/ i6 r) p) m. f  c
       //原地不动; U. t2 q+ C4 x
       nDestPos++;
3 Y% i% x2 _. @7 H; v: q       continue;" B0 p1 _' L8 {
      }
' i- K5 b) E( }) P$ y5 U- }5 ^      pInvSort->MoveItem(i,nDestPos);4 e0 |0 W4 J# P0 l2 y1 |, C# I
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
! b5 s9 P) W. G2 G7 q      Sleep(5);) D7 P- L8 B; _  f+ F
      //Error("移动 - %d->%d",nSrc,nDestPos);
! l! ?3 P* r8 U7 ^      nDestPos++;; r) s7 D' t' n4 }) o, a
     }
; r1 T# m# ]' W% n! F) q0 t     //取第一个元素的信息  c' X2 v4 E5 o  [$ r( M$ z
     /*
+ p9 l" z1 ~! I$ Q$ V- m% M     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& @" Z  L& _7 ^8 S     {
! W5 L- k1 v" n3 o      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 E* R7 Z. ]( k      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
2 ~4 i5 Z5 K% x: \5 I     }
& T! w) L2 H. L4 x5 z     */* G# r: |' i5 m3 v' [
    //////////////////////////////////////////////////////////////////////////
: z7 P' p$ M8 E2 o* d    break;9 M& X; K: l5 ^
   }
3 X6 D8 {+ W* R7 N+ \  }
. w' y9 {: p) {}
7 s+ W+ Z& I  w! @3 d9 Lm_wndMenu.SetVisible(FALSE);, s, l2 w. c; m- S' h
7 d3 ?$ T! B4 m6 u  H3 Z: y: \
--------------------------------------------------------------------------------------------------------* g2 J8 I/ O2 Q& l+ J. p
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 Y$ C- b+ ?! B1 ?0 d0 b% T0 E
{, N3 h$ }6 _# y7 Z8 O% N
BaseMouseCursor();, {$ c1 X$ B0 z6 @# S
}" I, e1 u" i6 p0 ?/ W' ?& z
在其下添加:
1 T9 G3 N% E/ U0 d" z3 ~void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)" i, L" U. K0 p% |& A+ u7 A
{
3 l+ n; N, b+ R" p, r2 ]' h7 Tm_wndMenu.DeleteAllMenu();
0 ?, N$ A4 R( J1 V$ }+ [m_wndMenu.CreateMenu(this);
3 v9 Q8 m; I* s3 [) vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");1 s* {" W, O2 i8 y5 r9 e
/ S$ d6 N1 ~: L
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
" {7 R. m$ M2 V# x* H# I{
( a9 v8 h* @5 W; X, M  //P以上级别才可以删除所有道具1 y0 w( W- V. D) I
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");2 ]7 w1 p4 j5 J4 H; {4 n! G% L" y0 T
}
3 O8 I0 F7 L3 f2 u1 f* b9 W- f0 a2 }- Bm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* T+ B- K( D+ g% ]7 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
0 @2 G; @3 i7 W4 Sm_wndMenu.SetFocus();
! k. }( H! j8 T( {9 T: ?4 y}
$ x% I# n: R* i------------------------------------------------------------------------------------------------------------
$ x8 {; G! F5 _; c4 A" i# L% L*************************' a6 u, o6 ]5 i' @" _) w" |
WndField.h文件- T3 ^6 F. @  V/ V* a% ]; _7 V# P4 K0 b
*************************' Q" q. P& i" X% v! c/ T
搜索:BOOL m_bReport;
3 @; `$ _, P& q其后添加:1 m( J# u/ T2 Q$ y
CWndMenu m_wndMenu;& T9 Y2 o! n/ X9 l. j( d$ s
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: M- S* M' U0 |3 L' F
其后添加:' \5 p" _& U0 H+ _- q1 e
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 s' m- p, y$ c7 m
5 f5 g) j, J7 A4 U+ ^, u* D
1 M) W/ j: W+ j* C" y# |3 [

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 20:35 , Processed in 0.065921 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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