飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
& W# X6 J  r# G7 ^4 N搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 p; e% k  ^" b/ w" T% U1 O* v- t( _
struct sItem/ _$ I! @( q/ m: U) ^3 B
{; p6 J# Z+ h/ o" v6 m
DWORD dwId;
6 b2 W- O& r7 `DWORD dwKind2;
5 g) ~9 N2 @3 R' VDWORD dwItemId;& J/ j" k) U  W3 O% t2 G; h
BYTE nIndex;
/ R3 S( k1 J* a# u1 ~. e  F" msItem(){
# F! C1 M1 a* \5 k+ J$ C  dwId = dwKind2 = dwItemId = nIndex = 0;4 l7 Y' C; V, ~/ }  T% S
}
8 K6 b1 M: w* Xbool operator < (const sItem p2)
. D" ~" v' B: e3 v! Z{% \8 v# P4 ^6 r! {
  if (dwKind2 == p2.dwKind2)
  g* [/ ]+ K: Z1 c: I4 Y0 J  {
" S1 S2 S. z$ {7 A9 x+ E* e3 W- h   return dwItemId < p2.dwItemId;# d7 k% G, N7 w, P, K
  }else{% m+ \9 _$ ]: r4 A" u9 m
   return dwKind2 < p2.dwKind2;
6 b. U" C  |1 Y' N% |( o  }, }& [) K+ }( x7 U- \$ ^0 R, z- L
}. E3 W  X& G$ a5 f. v
};( [2 H2 t2 S9 z' F6 g9 e- S5 q
class CInventorySort
) ]8 A6 ?+ P, O2 `* W* c+ H- g' N{
5 `( h5 _1 r5 `" c; G( P2 k1 G1 Dpublic:
2 F/ b8 \5 ^) J/ W' CCInventorySort()  ]9 L% r* A* F
{% z9 E/ f* Q$ |: B- ~
  m_dwPos = 0;
4 F3 `" Z2 e) j7 l( Z% J  F- b}
' W) `! y: a$ C; b" x~CInventorySort(){}
6 B* Z( H+ \0 \9 B1 \private:
4 z& I/ H6 Q# `! SsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息! c8 O6 G9 C$ H3 ~
DWORD m_dwPos;
2 }4 ?6 {# Z* \, Zpublic:
% o+ {1 v( k& b7 Z( Dvoid Add(BYTE nIndex)) s1 X% G/ k& L1 D3 b3 p5 j
{/ A1 Z% B# ]/ K( `# l
  if (m_dwPos >= MAX_INVENTORY). q; n- y8 D' R& S
  {
6 U! e( t) I& n4 Z   return;
6 s& }  E/ ~2 N: P, K: S  }
( v9 n0 N! _8 g  m_Item[m_dwPos].nIndex = nIndex;6 A) [! L/ w  v! N3 t  d5 e2 r
  m_Item[m_dwPos].dwId = m_dwPos;% o) `, k! [7 |( z. v
  m_dwPos++;) ~. c/ ]: R( s" b! v' o
}! W9 }1 _6 }$ {% D& ^7 u. Z2 h
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
. a3 V+ A9 X2 u( q{
, u3 l1 c9 T. D3 K3 i( @' ?  for (int i=0;i<MAX_INVENTORY;i++)
9 @! E, w9 _/ ]  {
4 R$ t  o; y8 u( P8 i   if (m_Item.dwId == dwId)
4 w* z& N/ g$ x   {
, L! w# Z! ]' c$ d. X8 E    return m_Item.nIndex;
2 d& X+ K+ P0 k* h7 z4 e   }
5 R% _1 X- F2 ~1 m" G  }+ l2 z0 \1 \( K6 y# t- n$ }9 ]" @' n
  return 255;
0 {2 N4 C' W' M# b& s}8 F9 l! {: n0 K
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 q# U3 I& z, K
{6 P& A; i& T$ c- N( }
  BYTE nTmp = 0;
* z: t8 @) [  M' g2 s6 Z  bool bDest = false,bSrc = false;0 x! _! V# {  v8 V
  for (int i=0;i<MAX_INVENTORY;i++)8 d9 z- _: k9 h# {% D
  {1 k7 T) X7 \7 e1 v, ^
   if (dwSrcId == m_Item.dwId)1 v6 l7 C4 ^- N7 g# y! i' M
   {
! q! _  C4 M1 x" y    //id相等 则 改变对应的dest和src
6 o; A2 J9 ?* z: q* [    nTmp = m_Item.nIndex;
8 G3 B; P* K6 t' }2 t3 I1 M. l    m_Item.nIndex = dest;
" c3 h) }9 @  o2 T! j   }0 R$ U$ {3 ]% Q
  }+ |& v5 T. z1 o, G* e( M
  //临时数据保存完毕,交换开始
% j, w8 Z% @3 E! W% H% ^  for (int i=0;i<MAX_INVENTORY;i++)
: u( p3 {+ ]& V2 v- m1 o1 m  {% p9 W9 A) C! V" i. F
   if (dest == m_Item.nIndex)
; j: j* @0 u; O3 [! ?   {# Q, y5 L) P7 e* A; e$ P' o1 z% C" y
    //id相等 则 改变对应的dest和src- M7 M, ~' m3 T! S+ B
    m_Item.nIndex = nTmp;
* n* e# s) P  e( l" s# a   }
& g5 |- y( m6 f7 b  }
. l( v0 Q! Z0 Y' A$ A' _* V}$ \+ G6 c5 @9 D" M
};% [: i  Q( }! y( X3 Z1 x# `5 S$ r* F
-------------------------------------------------------------------------* q0 S5 t2 B6 A9 g1 I7 M) y
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 e& H) m0 o+ x2 b% {. i! x搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
& y* l. h. F5 ~9 o4 ^7 |+ D& c紧靠其上添加:
0 P# N; R0 b- ?! P* \1 _& `6 |* l: [8 bif( pWndBase == &m_wndMenu )
8 j! z8 ~' R: l6 s4 Y9 l{! [- `# p6 H* e& ?; v) Q# \
  switch( nID )
: @6 G; _6 `  T# a" A  {
. F$ i* f) j4 J8 ~) J  M" d0 T9 F7 Z5 \  case 2:" ^, Y1 F  C( w* l& U" E4 [
   {
: f4 t3 m  N4 J  ~9 A' d+ c. B1 O* Q9 @    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ |" [3 |& Z% }    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- V8 s/ f8 l) r5 P    {7 f/ @. B' @( G& \( q$ S9 e
     break;  |% }' x) c' |2 J3 C
    }
4 u# M" s2 Q6 J% Q2 ?! D    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
& X/ \7 X1 r' L2 |    {
/ v" {+ Z& n7 w' I1 T0 D& j     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; j- K; o* a5 k0 v, j+ Q: j     if( !pItemElem )2 [+ x' M5 r* b  t& \& m: B' j- a) D
      continue;
" K- ~2 G: a' Z! b* p; S8 U     if(pItemElem->GetExtra() > 0)
) a# F9 D; h2 W! t0 d! d7 o2 n      continue;* e7 O- {6 g# s2 @0 J! K
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
7 k( G; c9 t3 S/ M9 h      continue;( l& }% R! J3 F/ x/ Y! |
     if( g_pPlayer->IsUsing( pItemElem ) )! H) u# m  ?7 R9 q
      continue;
, S6 z2 D# Y. w' @8 j     if( pItemElem->IsUndestructable() == TRUE )1 O4 n( n( w0 r! ~+ I
     {! N6 Z) G  g  l; N
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% P1 p2 I( v  e) W
      continue;& ]/ [* c6 y# |/ g
     }+ u9 [* l) T- G) h' ?- s, O% f
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
0 b# q  p0 i, I/ }" Y) y    }
' r  f6 p, u- Z2 E1 x4 [) I    break;
: k& Q7 N+ R1 K% s   }
" i4 ?+ D0 {8 i) r' `5 p  case 1:
; q% U0 U" E9 V   {) j$ E" L: p( Y/ f1 L
    //整理背包; p" c' m7 R2 v6 J  r
    //////////////////////////////////////////////////////////////////////////
1 Q& f/ j3 d* B    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
1 _8 [  e- q1 i! w( L7 G2 [! i, f- g    //////////////////////////////////////////////////////////////////////////
2 q- i  `4 K. b6 i+ r5 B    //////////////////////////////////////////////////////////////////////////
( U1 _8 ]. Q' `. y/ G! J6 |    CInventorySort* pInvSort = new CInventorySort;
6 R6 u5 a% r) }: I: s    vector <sItem> vItem;! E6 y8 Y  {5 N% g) z
    vItem.resize(MAX_INVENTORY);//初始化大小. D( ]0 @8 G. e" q
     //////////////////////////////////////////////////////////////////////////
6 }$ o' p7 d5 b- L5 [+ |     //填充数据
# k2 r  g- J+ ^. I# y$ S     for (int i=0;i<MAX_INVENTORY;i++)1 q3 @! [, q0 T7 s0 {8 ?
     {
8 B9 [( K- v  |  F) K) g      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);% |- U( v( _! M/ y1 u1 g
      if (!pItemElem)
" f9 ~% P% x. o$ o' V. ^      {6 l1 H/ F1 w) {5 u# h" A4 |
       vItem.dwKind2 = 0xffffffff;
- T& V+ N9 M" D1 I( `       vItem.dwItemId = 0xffffffff;* k$ c# R9 y1 v9 I
       vItem.nIndex = i;
+ D& l, G( I  V& [      }else {) M0 b* d: {6 D+ Q. U
       ItemProp* pProp = pItemElem->GetProp();
/ O$ G  T9 O$ X' I       vItem.dwKind2 = pProp->dwItemKind2;4 \& j1 Y2 j' _- h( \3 a/ G
       vItem.dwItemId = pItemElem->m_dwItemId;
. g8 ]! d  r0 |8 t% D0 S       vItem.nIndex = i;4 Z/ f: a  B/ ?
      }8 o2 N  n: v: [' k0 l/ _) N, H
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);5 E  T9 G* V9 _4 F( b! e( F. e2 J# r
     }
3 M+ l; `; E- n6 i! q' x' F7 R. s     //////////////////////////////////////////////////////////////////////////
0 Z6 V9 F; f! [3 u9 d) T4 @     sort(vItem.begin(),vItem.end());//排序9 a- Y) ~7 t' d5 s) a2 P/ D  G% \
     //////////////////////////////////////////////////////////////////////////2 k" |  M% d9 Z2 _9 ?$ M* s' r
     //交换8 W1 a2 k: |+ P8 ]9 O. G
     for (size_t i=0;i<vItem.size();i++)) J* C' Z; f$ ~2 I- y
     {
) z' I  U" M  \( Y" l      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& l$ `/ I. f) s5 b' H
      pInvSort->Add(vItem.nIndex);
' \" g" j" Y: c3 o, s4 g8 X     }
' h% B4 n; W) f1 ]( Z; _     BYTE nDestPos = 0;
4 o5 g' O# r) }/ V( V: \" a" ?8 C     for (int i=0;i<MAX_INVENTORY;i++)5 R( }5 z; K9 ]1 d% f
     {
+ r9 S. Z$ K" k* E$ a7 p6 t      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' N+ E% J+ s. Y5 ]8 P      if (pItemElem)6 S# Z7 I! `- Z6 j$ h: q
      {/ a, x$ ?: v' y; S
       if (IsUsingItem(pItemElem))
& x7 M( `. c' C% ~       {# S: H* ^6 B0 G9 F  `1 S
        //这个位置无法放
4 s& F  {& \2 W) H; o' b        nDestPos++;6 f& u3 g- h* l: j0 H
       }
8 h1 D# p6 E" i      }
; S6 z! d1 P' e2 O& v      BYTE nSrc = pInvSort->GetItemSrc(i);
) [3 p3 c# U7 m0 [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# G% \) K& m( N7 [
      if (pItemElem)
* c3 w* k! _2 _      {9 f" [1 J4 I7 L+ ~
       if (IsUsingItem(pItemElem))
) a# G2 o: Y5 Y$ [- U       {
1 z1 e& {, E$ D+ `2 [        //这个道具无法移动,跳过  L! {7 c& k# k7 A8 }+ m
        continue;
' F! V" f6 n5 i       }" i* S* l& K2 h
      }else{' u" J% \# s- G) j
       //空位置 不用动
* ]% J6 L4 e/ K, F$ l       continue;) U% o* f& E/ }0 i+ e
      }
) q9 F3 O7 P8 t+ X  I0 S      //////////////////////////////////////////////////////////////////////////
' Y' l( I7 t% y      //开始移动
+ x  ^- s8 o- }. M$ E      if (nSrc == nDestPos)
: `/ }, ?# ]( V& L: P  s      {
! A0 f8 i+ A8 ~       //原地不动
, L7 p9 m( l+ y' e, G' e$ e- e2 l# O       nDestPos++;5 \8 G. v6 f0 h" D7 V$ h! l: V
       continue;7 P% W1 l8 q; U: w8 N& a$ H# y' S9 E
      }/ ?8 Z0 V4 i) v* t+ T
      pInvSort->MoveItem(i,nDestPos);: H" m! a, V. {: A
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
7 q% _7 `, W6 m- O9 T      Sleep(5);( S2 B' R* k. I) B- z1 ~% x
      //Error("移动 - %d->%d",nSrc,nDestPos);
5 i2 M4 }# O* H$ ^8 Y      nDestPos++;
( N; C2 q# X4 g" D, i% \     }7 g5 P" f/ {8 O3 o) z0 L% Z
     //取第一个元素的信息
0 z: w# ]$ e3 q: m' l     /*
. B) r  P/ |6 c. y; j: ^     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
; h" ?8 g8 ~" n' b2 m) [; r$ q$ x     {5 U* O# \/ j! S+ V) q" r7 _  S
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& J0 u) D8 x! {! b
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ m4 x4 e: C8 e4 Q& d4 z     }
) c: G7 T0 V3 S8 u: \6 @. h     */! d( B1 A- `6 G8 Z- x8 j" n
    //////////////////////////////////////////////////////////////////////////& d1 O  K+ [! {3 u* l
    break;9 @2 j; b1 E+ K. J9 Y+ c( z9 U
   }7 ]4 @! x3 s; W8 _: {7 V9 r
  } ! Y/ J, O0 E" X" O5 d; `; u
}+ b  N" U5 l& @( y* f7 f" ~" g
m_wndMenu.SetVisible(FALSE);  m( M9 D+ Z2 p1 G8 ]

% P8 J7 [7 ^; A* p. ~4 D2 ]0 n--------------------------------------------------------------------------------------------------------  V6 V0 ^9 o/ ^# @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)* u# y: m- j+ I5 O5 X& D1 t$ H
{
3 C) y* i8 @1 p: }* Q) f9 nBaseMouseCursor();' U: V. z8 N+ k- Q5 b" K
}
9 d& F% `- x5 z在其下添加:
+ H  ]6 P5 o" w+ F5 E  G3 jvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) y0 H# N. D* P. n0 J2 [1 O
{# ]( ?3 g% `( {! F
m_wndMenu.DeleteAllMenu();
# I  ]% f* A- U% z0 X: Lm_wndMenu.CreateMenu(this);
) Z7 ]* w$ f6 k. J1 d4 j) _m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 J" Q9 o1 Z. M/ |! P( C- k1 |

: \& g8 y/ {2 K, a: p1 P1 Fif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' ~0 h: K6 x* x3 F{' l& I( H6 @+ A5 x* [
  //P以上级别才可以删除所有道具
1 @; O- [1 q; _" b5 X# R  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");0 p! {+ ~* V9 Z9 e
}# D2 o0 s5 R7 x6 r
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );8 c1 \& ^; F- Z) T0 x
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );' \4 W1 p3 B8 k# E
m_wndMenu.SetFocus();/ q- C  \# k+ m/ {$ \9 d5 v
}" d7 ?% n; I( \$ k
------------------------------------------------------------------------------------------------------------
/ Q9 I! y3 I$ {*************************
4 a3 t* H5 ~( O5 OWndField.h文件
  ?: D  @; O% o*************************
5 `3 q2 C" M% |* N5 G* e  ^3 o5 B搜索:BOOL m_bReport;( ?/ Q2 _6 `7 Z7 h# p" T" X
其后添加:
3 O1 O; N4 n2 d2 a) i& \( rCWndMenu m_wndMenu;5 z! |/ y6 ]: f# k. E) c
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 B! R  p% e4 Z* h* a
其后添加:, D/ N" C$ d% a) o
virtual void OnRButtonUp(UINT nFlags, CPoint point);4 [- z! a/ t  j" s4 P2 i
& A! @4 g( `* `( Z! l

+ E1 e' S: y6 C: l

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-23 03:14 , Processed in 0.063217 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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