飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; G: Z+ a( F7 z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 }" V1 r; F! c+ v6 H
# O# D* b* D& Pstruct sItem
! Q9 f9 x- A; {" E, H{
/ N; }- h3 Z% @DWORD dwId;
# J# a; g% }: C6 J0 @. T: oDWORD dwKind2;- A3 o0 T8 G$ Y4 `/ h, p  L! ^+ S  m8 W4 e
DWORD dwItemId;
8 M1 {: g  j  e0 a1 _BYTE nIndex;
) X4 k0 e# m* T: u" csItem(){
  |. G$ h3 e" n0 T  dwId = dwKind2 = dwItemId = nIndex = 0;" [" }5 G! W* i9 r9 B
}" W0 G  H8 o/ ]1 {3 f: w
bool operator < (const sItem p2)
4 s6 t2 f( e/ b0 J{
6 i6 G6 q# }2 g9 W  if (dwKind2 == p2.dwKind2)% v; I' k0 \* b7 y, q
  {
5 \! F; A! C! b0 |) {, _   return dwItemId < p2.dwItemId;5 j* y2 m7 L! x8 ~
  }else{
1 W0 M2 p+ X6 M0 y; S7 r" n* V# `* L   return dwKind2 < p2.dwKind2;) m8 W( F6 m: ~& j4 D) k" I1 B) k. z
  }
) Q7 Y% ~3 H* Y5 }* {8 Q}  G! y# _) S% H8 T0 I
};" n8 b8 Z9 t0 U% `
class CInventorySort+ _& U, Z- E! o  g  A$ D/ I3 P7 w+ M' p
{
7 b. g& V, ]$ h1 c+ d9 @public:2 `; N& A9 l- P+ R% G: [/ S* c
CInventorySort()- j% f4 d$ K, R
{
% B2 C6 k8 {: l" `6 g( x5 a7 [  m_dwPos = 0;
- Q" g! ]* n7 m}
- q# b" r0 W: u~CInventorySort(){}
+ M6 {% U3 W) S6 y4 R; Qprivate:4 ~0 i7 |" z* G( {9 X. ]; Y1 v% y
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) _  o: j' s6 Q* r1 }. \
DWORD m_dwPos;6 Z7 r# f. ~5 h# J- K* k
public:
6 u9 ]) u* F9 E4 S) G6 Uvoid Add(BYTE nIndex)
2 F" Z# Z9 e- L/ p; B- F# r: j{
* y1 v' ?% O- ?  if (m_dwPos >= MAX_INVENTORY)- N! q( @1 b) N3 E: D, u
  {
3 m( X/ x/ F% b) `   return;% P* Y) t! `& s) R' C# \# |
  }) {) j0 {% z; |( V) K, f" I
  m_Item[m_dwPos].nIndex = nIndex;
' q% E) U6 q$ p  m_Item[m_dwPos].dwId = m_dwPos;! |0 n' {( O% n! l; x( B9 M3 o
  m_dwPos++;% P6 I6 Y  e7 c7 Y8 T4 A
}
7 q, d) }! W5 N) @9 t( VBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* Q9 C' X: b' }6 b6 ]{: y3 w' x. G4 y; p! K
  for (int i=0;i<MAX_INVENTORY;i++)* J9 ]; u/ x  S6 I$ h
  {! i- d  r8 u8 _- t  Z- A# Z2 M
   if (m_Item.dwId == dwId)
& A/ U# l; q8 u- b7 R   {
; G( M) f- e1 m! V& _1 Q- g' z    return m_Item.nIndex;* s% N: S: j1 p5 c" `$ L
   }4 U* @3 k/ W$ L9 R# s
  }
$ D0 k+ y1 Q! d( z8 t7 `: n5 U, [  return 255;
# L  Q% L2 S. h}
/ x7 V- P5 W( Mvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置4 d  z: c$ w" A5 S
{
% W. n9 U" M" i, T7 n2 e  BYTE nTmp = 0;: G' }# g9 J7 T' e. h
  bool bDest = false,bSrc = false;8 Z8 R, w% k. [6 B. W4 w
  for (int i=0;i<MAX_INVENTORY;i++)$ f2 ~  \" `- c
  {" ^1 K; R1 K. x! l
   if (dwSrcId == m_Item.dwId)
# [0 P- B! U: ^. }   {
# _0 J6 ]3 O( ^+ J* o! w, W    //id相等 则 改变对应的dest和src
$ F4 `! L5 P+ O: _0 ^, c" M6 i/ z/ E    nTmp = m_Item.nIndex;
' S! c6 }) u: `# e" ^    m_Item.nIndex = dest;- o: i2 i% f2 j% A8 p
   }
1 u! O2 u( k2 ]" D% f  }
; L6 R, o8 n0 i) p+ ?  //临时数据保存完毕,交换开始
$ H( N" Q" }6 Q. I- G9 }  for (int i=0;i<MAX_INVENTORY;i++)
7 j& q4 b% s: L4 p* J2 J  {3 L* D! t& {2 l2 I
   if (dest == m_Item.nIndex)
6 T# q7 x) E5 @9 x8 v- I, I   {' X6 b2 \$ F2 f4 l
    //id相等 则 改变对应的dest和src
/ ?) W1 u* k7 k    m_Item.nIndex = nTmp;
0 f& y  M8 Y6 S2 D1 Y5 V; Y) Z( Z   }
( y! W' g: f1 `" }0 P' v& v  }
& e7 w4 r# X; O! g5 L: v}
% |8 `4 [+ l, z. D3 X7 o};2 K" r3 s1 X/ N* Z
-------------------------------------------------------------------------
' J! o9 a' ]2 [/ h% @2 u依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" i: a2 d2 _1 M' ~3 O
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
* y4 ~* U# H3 w' }. ]! ?& E1 E紧靠其上添加:
6 `6 F* \% G2 S4 {/ X$ ?if( pWndBase == &m_wndMenu )
# q* V: t  Q5 s{- a+ K  N- S; I  Q) d
  switch( nID )
0 _! U4 f( Q  C0 y, k4 ^, t  {' z& l5 n$ a" e3 O* D  {
  case 2:
- W+ |& J$ z$ [( w   {9 v0 B4 Y* w9 x7 Z' |
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);# m  M; Q$ U, E1 P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
4 f! P0 ]& b: G! z    {
$ G* R. j2 ^6 V     break;
" [$ O& d0 d9 {    }3 d. H) M1 X3 J% j: m7 X$ D
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)# `+ A5 t7 j5 ^- s
    {# p5 p7 p) i7 `8 I& W5 B& f) L
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);2 N$ C% d2 r& Y/ ?' i: M, ]
     if( !pItemElem )
$ S: j/ u5 T- t" [$ W* Y7 X$ ?4 S: Z      continue;
3 n/ f# G& ]  z. K8 ]1 }- t     if(pItemElem->GetExtra() > 0)
& |% r3 l& \* z' r! a% i$ `      continue;
4 s& X( Q$ M8 g3 m* t6 ?. i     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) % `. f, d5 b- L" h" @$ o
      continue;
- s- j( [" c7 k$ s: Y- K     if( g_pPlayer->IsUsing( pItemElem ) )% W4 p. z9 v- N# [2 d/ D9 r
      continue;$ ?+ a8 b6 U+ m0 \
     if( pItemElem->IsUndestructable() == TRUE )$ \! r- C/ S& j7 n0 Z" }) e$ M
     {- P" ]3 h6 y. M# D, C( ~5 G, h
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
8 I# Q# @. Y- J+ r! K      continue;
3 d  X# K& [9 ^& A( _3 w2 }" s' G' g& y     }3 N5 [8 S5 t3 E2 [' o
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
  d8 f: P- D% P* Y    }
/ G1 U2 O9 K. w( a2 J    break;; j1 O% x" {& c! d2 ~9 r/ A
   }
4 P: a. t. Y; V0 h8 ~3 x+ l( G  case 1:
/ y- R4 r3 `$ q7 c% A; ^   {, f* |3 a( P4 J1 s5 Z8 a3 v
    //整理背包
3 Z. P+ v# R2 K, F2 F/ v    //////////////////////////////////////////////////////////////////////////
1 g1 J: Q5 o. H8 `! _    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. K  F& B; |/ d    //////////////////////////////////////////////////////////////////////////" X2 J, _$ [! ~$ g
    //////////////////////////////////////////////////////////////////////////
4 V. ]4 N4 ~' P- E    CInventorySort* pInvSort = new CInventorySort;/ t6 ~$ i" ]2 g  R# ~  y* ?. z# g/ Y
    vector <sItem> vItem;) J. W8 {! a6 C
    vItem.resize(MAX_INVENTORY);//初始化大小- M, d/ O( S; A* @& |
     //////////////////////////////////////////////////////////////////////////
0 \9 w& D: M# s     //填充数据
4 u: d0 o3 r- K6 I8 T     for (int i=0;i<MAX_INVENTORY;i++)8 [+ _3 D3 L  E
     {
  e7 q. I- r$ h7 Q- |5 U" G      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& ?  e; r, Z$ w2 x4 t& b* m2 a
      if (!pItemElem)
) s1 ?5 d% f: a, {$ N( @/ p      {3 x# t& ^* J4 w' d* a4 }2 \
       vItem.dwKind2 = 0xffffffff;; R. i, I$ \% c+ p  W) w
       vItem.dwItemId = 0xffffffff;
; C; P5 H3 G( J) O9 e& k* y& N5 U       vItem.nIndex = i;9 \8 v& C7 m  @* A: v- U, v# m
      }else {
( Z" Y9 _# a% ?3 M: @: H+ W       ItemProp* pProp = pItemElem->GetProp();
2 K1 H2 F# p2 W( x       vItem.dwKind2 = pProp->dwItemKind2;# @- z& R, j1 R9 m- b7 k4 v* H* X6 x
       vItem.dwItemId = pItemElem->m_dwItemId;' B; b" x: C' o2 v
       vItem.nIndex = i;% e% i! \0 M1 b7 ]: C! w) C  o, l
      }
& P4 ]7 X3 f: O5 U$ x3 R. L      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
2 }5 i0 q6 A! A     }
' {6 i3 c% M! ~     //////////////////////////////////////////////////////////////////////////! u) L0 _0 W& j$ ^2 I' C5 ]+ E
     sort(vItem.begin(),vItem.end());//排序/ }, H, h& s- T! k* p9 ]
     //////////////////////////////////////////////////////////////////////////
0 l: d% ^; k1 q: E) b- s/ @+ w- p     //交换3 k; q' c" u9 N2 c
     for (size_t i=0;i<vItem.size();i++)
! E' f! W* P' X. k" C8 L  }, g     {) s- v, w; M3 p3 _+ _) ^
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ M: Z  q5 a. i  L
      pInvSort->Add(vItem.nIndex);) _# k$ t9 A4 X  U6 B3 y, G
     }
" m% N/ C% N. L" n3 Y" M, _     BYTE nDestPos = 0;
- p. b2 X9 l( n' B$ F     for (int i=0;i<MAX_INVENTORY;i++)" ^; N4 m, H$ J# Z/ [/ ^
     {
9 _8 X! f9 E# q7 p  U: a* T- B' h+ v      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
9 s6 i$ ^$ M  n      if (pItemElem)
  ]; C2 N, M7 E: m      {
8 }6 @: D/ E4 n: w! P. }) w       if (IsUsingItem(pItemElem))& @4 ~  V3 e. B5 u
       {
' ]% l' V5 r, V        //这个位置无法放- |0 x2 G6 m" i' j) d% X# Y
        nDestPos++;' l, Q# n1 f& b& o" [
       }
' h& q0 @3 v; S* s1 Y) }8 r0 W2 z      }
) V9 P4 Y4 i. T' H6 N. @      BYTE nSrc = pInvSort->GetItemSrc(i);, ~4 Q* ^! I( b- ], ]
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 y5 `# U1 [- P# [$ l0 Z5 T; d      if (pItemElem)7 |- b' q. N$ ^' M0 ]
      {
. v* @- \! C( g7 B5 Q1 Z       if (IsUsingItem(pItemElem)). z5 v: |2 D/ Q8 I( a5 s% e7 ~0 K
       {# \0 O. p  ?- G6 P% H
        //这个道具无法移动,跳过
/ ], R' r( K) C, C* g( b) v. V: Z* N        continue;
( p; ]; ~4 f6 R' P7 ^# U8 Z       }
$ j' B0 a- i- K' y6 @) v9 J. E      }else{/ x/ {3 ^3 R/ O( w( D/ M5 `6 U
       //空位置 不用动
2 C( M! C+ ?, A- l: z% t       continue;6 V/ T( E. r1 W3 G3 |# i
      }
5 y  r. Y  t1 E6 \+ _0 [      //////////////////////////////////////////////////////////////////////////
$ k/ a& H1 n* {0 H6 N* H      //开始移动/ M2 t% F$ {2 ~$ ?0 O, S
      if (nSrc == nDestPos)
5 n$ B% t# a9 T0 A      {+ t9 ^. z; g8 m% p
       //原地不动
" z* Q% x5 G3 `  D       nDestPos++;
/ u- l  _  Y+ T; V2 F       continue;
5 J( z  |) D6 Q& `: `) J6 g      }' Q, t+ h. |) T5 r0 X4 V
      pInvSort->MoveItem(i,nDestPos);
( c+ y4 I2 T% w) K      g_DPlay.SendMoveItem(0,nSrc,nDestPos);( \& A7 Y% u( x6 V  L& i" u1 c8 l& A
      Sleep(5);
1 a0 [2 j9 V8 I; I6 p) a      //Error("移动 - %d->%d",nSrc,nDestPos);
5 g$ m6 l1 J+ c4 \      nDestPos++;$ V4 M( z) s, w
     }
" g$ F: t8 ?# M1 a1 @     //取第一个元素的信息4 h; \5 c9 A6 M. [
     /*8 K* f. s" f+ P( x
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 t  j# ]8 u1 v2 u$ t     {4 W- o3 |* |, B. x: U% ?) t
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
1 i  A1 I% Q0 C3 n3 y4 N$ n      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 u  f3 q' j2 H! s     }# D6 L" c+ j% y5 q8 j1 T
     */
  {6 r9 Q1 L: W# J9 ]    //////////////////////////////////////////////////////////////////////////
& m# n9 l, g  j1 N    break;
2 s! ^* t) Q$ J% B# ~3 S1 \' x3 k   }  b  @" a# `* b% d( r$ H) d- U; s
  } 5 s' j6 P& e; A* X
}
& v7 i* S6 K$ wm_wndMenu.SetVisible(FALSE);
/ c/ \  V6 W5 V
, i) [& X6 M  {4 d4 ^" t$ @( F--------------------------------------------------------------------------------------------------------& z: y. E) F( v
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
/ l9 e" B8 O( i6 T/ t{
, o. Q9 z' ^: f* p2 tBaseMouseCursor();
% b) |) Y; t! b, b}9 }1 n: T2 O+ p9 e& u
在其下添加:
7 R) j( h$ ]2 e: L/ s) _void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)! ^, {* `& T% @/ w( H% s
{
8 B+ ]+ q; }+ em_wndMenu.DeleteAllMenu();5 Z/ F  v1 X  K" {0 Q/ R
m_wndMenu.CreateMenu(this);; @/ x8 F0 n9 N- V6 C$ @
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 j: S  \) Q6 C% {, I* Z, k
: I  S0 k, V) _- Z- C8 |if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
* q( a& M! E8 h, J{
/ |6 }4 D. a1 ~- g) t  //P以上级别才可以删除所有道具
( b" W' v( f7 k3 _7 s$ g  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) l( u* D( O- @; b$ [}' J  A  K' n( R# L  u! a* W9 o
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ q# g5 R! c* sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
+ R# }. l$ N6 g7 u# h# a2 {m_wndMenu.SetFocus();
1 ^' e# A5 c) ]4 @: p3 Q. I}1 [+ z4 g) I4 a# t6 ?: s) [
------------------------------------------------------------------------------------------------------------7 D  S) b3 R6 t7 i
*************************' M# Y) N( b9 x! H/ X, ?+ u
WndField.h文件
3 N% \6 G7 Y5 C* i2 R* s# N*************************! f. K( P2 Q4 _! s
搜索:BOOL m_bReport;  I: c8 f0 _9 [7 s, t
其后添加:
9 o1 B! y6 _' D2 x1 S' {CWndMenu m_wndMenu;
9 O! p7 m+ i& m8 W5 s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);0 z0 ]: b# Y" C
其后添加:% l' R& z1 k- q  `, i; F
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 i& [+ a" g1 z9 u* Z. \
2 I1 |- g0 m1 |& U. X" f
2 V2 H0 O8 `  v+ P$ D

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 13:49 , Processed in 0.078453 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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