飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1068

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1068
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 l4 |! _& ?+ {0 \4 ?搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" y, t0 @7 w6 I4 S! {- J
* b+ N- T$ K) K; w
struct sItem
& g5 |2 I$ j# G$ R  [0 [6 {{" f+ [5 k/ \/ t6 X# t, t, z- ?! q# }
DWORD dwId;2 O. K: F% G/ K- g- Z
DWORD dwKind2;
) d: _2 k# [5 ]( L+ m1 I, dDWORD dwItemId;8 Z3 f: A2 W1 E& w, T
BYTE nIndex;
6 v( X' W+ o+ K+ }5 L3 t. g: RsItem(){9 S, ~7 v) w) o$ }0 _- a
  dwId = dwKind2 = dwItemId = nIndex = 0;
6 o, k0 r5 k; F: x/ @* f3 _! v}
. L. a9 Y, _) M- \bool operator < (const sItem p2)
1 d) J: {5 X8 h+ D5 K{
2 u. B" ?  H. ~- Z9 V5 D4 p2 I  if (dwKind2 == p2.dwKind2)
& W7 w2 _  w  j+ x2 Q  {
- i% c! g% y/ R3 t2 p2 L- @5 k   return dwItemId < p2.dwItemId;( {% t1 h* C( I) x
  }else{
1 [+ G# ?2 _5 L' ^; L   return dwKind2 < p2.dwKind2;
6 L& t9 P) z( u7 Q& {* K  }0 s" Z" e& L4 s3 s
}) j0 \$ P" k- Y6 @
};
4 W6 n; X' `$ D9 \* K1 W" Z  S7 e3 Fclass CInventorySort
4 r* r9 T; X9 g; y" C1 n{1 ~0 W1 q. F. e, ~; p' [3 w
public:( Q' ?3 X# X0 ?  t7 t
CInventorySort()
2 F8 }: a6 \2 i% }* [1 M' X{
6 @( ]$ M% S5 o8 C5 T" W  m_dwPos = 0;% k4 |, C. }% E3 Z
}& ]$ l4 Q8 b! m+ g9 X* N
~CInventorySort(){}
" Z/ M. G2 {* Zprivate:+ R  Z  @2 a7 U# s/ R
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息# f& l- H9 x! X8 u& ~  c
DWORD m_dwPos;
) u5 h0 I& y2 cpublic:& `7 z5 z0 e* s! t' [2 x+ Q
void Add(BYTE nIndex)0 |6 @/ r; v# y" v: n7 v
{
8 U, H6 Z/ K8 K: Y) c, e  if (m_dwPos >= MAX_INVENTORY)
4 w. ~# E" {# q! D! u: S  {; f7 g8 V# G) G& o
   return;$ p2 a- m2 a, @4 {) v! c
  }4 v# M1 x+ P$ i2 B3 c  G& |1 R% D5 z
  m_Item[m_dwPos].nIndex = nIndex;0 P2 E% A5 Q6 {3 t
  m_Item[m_dwPos].dwId = m_dwPos;
# S' j( j& E& n9 n  m_dwPos++;
8 V( k" f# U8 I2 r5 k}# V9 L8 @2 ^$ q- u
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
+ S1 _& F; ~/ ^{
/ ?3 u5 \( n2 {3 _3 W) v  for (int i=0;i<MAX_INVENTORY;i++)
' B. P/ K4 G0 n8 [; ^# U/ c4 Y5 D  {: [9 {  c1 t' C! D$ v  k
   if (m_Item.dwId == dwId)5 |& ~; I, x1 f* `2 x  B7 V* u
   {/ M' H9 K# ~2 Z3 N  ^& U
    return m_Item.nIndex;
5 O0 e: g' o7 @7 K1 i   }
0 F& R) ?, m! Y- A  }$ t. o: W+ Z% t+ M$ C, W
  return 255;
+ p9 a) K" E0 Z& f}
# \- y+ z, q6 tvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置' h% I( F- u& }3 C7 U  P9 v
{5 J9 \! N  ]4 m  x1 f1 o7 ]# _/ K
  BYTE nTmp = 0;/ J! O0 W" g  F  i+ A, n, p) q
  bool bDest = false,bSrc = false;" |8 l* \, z" ]# X
  for (int i=0;i<MAX_INVENTORY;i++)) @0 s$ N8 C  @% s6 g$ b
  {; x2 O( C5 K2 _1 t+ E
   if (dwSrcId == m_Item.dwId)- G& k% v7 v, F" G7 m
   {
5 |9 n7 Q3 C4 O: y    //id相等 则 改变对应的dest和src
* u& o% x7 w* d2 @* \1 b3 W    nTmp = m_Item.nIndex;7 P4 j! ~: Y1 M0 C4 j
    m_Item.nIndex = dest;
1 |) a* Z) m, A0 A' j! ]* v" l   }# `: g) _# L, D
  }
( m. g( {% x) g# A, g+ p$ z  //临时数据保存完毕,交换开始$ I' e6 Z. ~) c( p, Y* G
  for (int i=0;i<MAX_INVENTORY;i++)
# @8 U/ o- }) L  {
6 q) j4 L; l# c   if (dest == m_Item.nIndex)
1 G5 w8 |* b5 i5 \   {
6 c, Y' l/ t+ M9 O    //id相等 则 改变对应的dest和src& e6 N1 J# v6 O& D* R3 q
    m_Item.nIndex = nTmp;* x  H9 i6 J% y$ [4 |8 O( c+ N: r
   }: `) p. i9 j, |. c/ D
  }
& u1 L. ^/ u' [( a/ f! \}
# p+ Y' }' d( W" K1 s# M};5 a: i, |) i) N2 ~/ Z% G& x3 ]
-------------------------------------------------------------------------
* t: {1 r2 Y+ h( }依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. d+ F4 b: g9 V( c搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);! E: s7 t* s: I0 G$ y: A1 |
紧靠其上添加:  `4 _" h$ O" U1 r& N6 K4 e6 H
if( pWndBase == &m_wndMenu )
5 s, J: J) g* [{' t5 D) U& Y, _. Q/ i% M' _
  switch( nID )
+ ~0 V0 h5 B& ]+ E( U  {
4 L8 v* L1 Q  D3 C. M  case 2:" R- D4 t! g- ]0 d0 [
   {
; l2 O" i2 }) x- v" o    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
- v. j/ K# Q8 f; Q9 E/ v    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); H( k  O3 i! q& u* S
    {# g- i: E/ j# ?- Q% y: g
     break;* N; z! Z# V% d! R& N5 L7 v
    }7 u7 T" a0 L( }& Y* s
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
1 E  L! x  f0 f9 u& `6 }    {# u5 {7 M5 W. g& u$ w0 a0 `- t
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
4 t5 n" q7 |" U1 t5 G+ Z     if( !pItemElem )
) a7 Q" U) T2 f/ d1 U3 X+ ^8 @& M9 J      continue;
6 c6 E. p' n+ H& S, I     if(pItemElem->GetExtra() > 0)
( d+ ~; @, n1 x( ^      continue;
0 Q2 x8 ]" @9 f: o: b; y     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
. l8 ]- c$ f2 d9 w      continue;
5 l, T3 S* q2 i     if( g_pPlayer->IsUsing( pItemElem ) )
/ n0 L3 f) x# B- E3 h; b      continue;+ q: E, x' M; s- F, }1 D( E
     if( pItemElem->IsUndestructable() == TRUE )/ q$ M' G3 \! q
     {
, o3 i4 |4 S& J- c0 F7 W& D4 N3 A      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );& d3 T4 Y+ p2 x
      continue;( g9 t" i9 Q+ A9 N( d: b
     }
1 i/ {' v2 C- q5 [/ H5 v* G     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& G1 v( [! B# P: u" T4 G' v9 c+ t
    }4 m; p  @3 D! i7 }/ G3 x+ {
    break;7 U1 B. v7 {, U
   }( L* p) i* Y) a) }
  case 1:
' i2 G3 d! I) j8 `1 A  A% S   {
: Z; t* Z7 k4 m; f' s    //整理背包. j' s1 f% X1 }- z
    //////////////////////////////////////////////////////////////////////////
( U. `) P3 h0 R" @8 f( G9 D    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
# D) O4 w  s3 Z# o, q    //////////////////////////////////////////////////////////////////////////
- p9 C: D3 h0 `. b    //////////////////////////////////////////////////////////////////////////# P* p- U$ f. q' o* [
    CInventorySort* pInvSort = new CInventorySort;( q! Y* K  `3 [, D6 P1 ~
    vector <sItem> vItem;
/ ~4 y5 p4 n1 }; U    vItem.resize(MAX_INVENTORY);//初始化大小1 Q- y" @* f) f
     //////////////////////////////////////////////////////////////////////////1 _- t* `" D; Q/ Z1 k, Z
     //填充数据
3 ^+ d5 u& \* g" F     for (int i=0;i<MAX_INVENTORY;i++)
% j2 @- E/ m$ U- n$ Q7 ^/ A     {9 E3 z( n, m# x0 }. R  T5 i
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! R- R  O1 v( ~, L& `      if (!pItemElem)
% T9 X( D1 }) F      {
% Q( o& y6 `  w! w- \0 ~; `       vItem.dwKind2 = 0xffffffff;1 G+ X% Y% W) v( d
       vItem.dwItemId = 0xffffffff;
4 z5 U8 Z9 L, [  `! ?/ Q* z       vItem.nIndex = i;, L4 _3 e& K1 E+ I: f0 ~/ h% R
      }else {: ~3 F5 L2 r, |4 x) E
       ItemProp* pProp = pItemElem->GetProp();# y+ Z  Z5 ]& v
       vItem.dwKind2 = pProp->dwItemKind2;; q4 t6 u9 Z9 o1 z
       vItem.dwItemId = pItemElem->m_dwItemId;
8 g1 P0 m9 D: G/ z5 w       vItem.nIndex = i;8 P# H3 Z  L6 b0 x
      }
/ @% }& Q; h6 R6 N      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 |. Z4 m( ]: f; A  g
     }/ A; y& S1 ?& T' b
     //////////////////////////////////////////////////////////////////////////
& r0 ?, M7 a$ L* }+ h+ ^+ b, ^     sort(vItem.begin(),vItem.end());//排序
8 i% C" @! ~7 w% S; i     //////////////////////////////////////////////////////////////////////////
0 ~) t' |( l6 g6 F     //交换
  |7 ^7 _1 B  n/ o     for (size_t i=0;i<vItem.size();i++)
5 X5 h. N& _+ v     {
' p3 z1 r1 e7 E      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 H- a/ }" _/ x9 u2 B, N# z      pInvSort->Add(vItem.nIndex);  U- K& D3 N) a0 F0 {1 S8 _
     }4 I. f. }8 u) \. |3 a
     BYTE nDestPos = 0;0 e, ]: v( W  u
     for (int i=0;i<MAX_INVENTORY;i++)
. x1 b% a( y3 K: h' Q( z     {+ t, N) q& z6 n: p" Z  Z8 |6 I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- S9 G" e+ e. _      if (pItemElem)3 W( q; b. z( z  O7 a
      {
0 I! q" s( e+ P. E0 g       if (IsUsingItem(pItemElem))# k( d' i6 V9 H9 J- F
       {) w7 I9 f) I6 I' O/ c
        //这个位置无法放7 z' Y  j/ {2 F( N
        nDestPos++;# h: H4 ^) m3 N6 U( V
       }5 F- G0 q# k& n- s9 u  [
      }4 I- {$ m! Q& t# f
      BYTE nSrc = pInvSort->GetItemSrc(i);; s+ z8 `+ Y( T' P0 p
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
% |( p3 L2 b# v/ n: x) [      if (pItemElem)
; x8 e& L% S* ^) s$ ~' S      {4 Z0 h+ U8 a7 F: Q5 c5 x
       if (IsUsingItem(pItemElem))0 k9 \; F5 |* k. e4 X: Y: {2 b% m. R
       {, V, x/ O( q* d- Y6 ~4 k
        //这个道具无法移动,跳过2 i. S! Z+ }% j. R0 V% N, i
        continue;
' U- `* ^3 s- {* l; z* R       }
& Z) O) X  F/ T0 k. y0 b  N2 N, l      }else{
9 L! L' {2 C' _  _4 R       //空位置 不用动' _( Z# k1 J3 G/ l" j
       continue;
3 }: g3 R4 Y/ X4 Z9 X& i) R      }- [. x5 x. v' f  j
      //////////////////////////////////////////////////////////////////////////5 i) C5 M# f5 H; \
      //开始移动
2 y  p% g9 ]* z; y5 k: H+ h  S  F      if (nSrc == nDestPos)
8 x: w# c' @& y( c$ N5 Z      {* a% g& _" J& u4 C2 D
       //原地不动
5 s/ k; v8 `  f$ X8 s       nDestPos++;
# E' z) U3 S, [, x% d5 v       continue;
% V5 a8 ^# [4 }# o, ^      }
" w. ]( Y, g% H0 Q      pInvSort->MoveItem(i,nDestPos);& o2 }0 N+ j* P5 v
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);1 j0 [" U, C# }" g" T, W* ?
      Sleep(5);- S# H5 ]; {& M" K, G+ P0 A& W
      //Error("移动 - %d->%d",nSrc,nDestPos);
  r: B, c+ c1 Z9 H( ~  D$ G: @      nDestPos++;
: Z& h  x3 P: m* ^, L     }
% D: `7 u7 e: R: j0 w. r     //取第一个元素的信息
7 z7 t( k8 O1 k4 R+ w$ y     /*
6 _: @4 B" q$ b3 S5 s     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
' t7 l, C- N( \2 t4 w     {
+ c+ W  l0 S0 h! _$ g6 a2 c      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: i1 c; S& H* d; x* V- \. b      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);+ n! t% V; y3 @6 t$ m
     }& u4 _+ t+ _7 l/ j1 X4 T
     */
9 S1 A6 p9 ]9 t' J2 \; N7 B' f( G- g    //////////////////////////////////////////////////////////////////////////* R# n2 v- x2 p8 e  Q* N
    break;: M6 t+ f1 S' l% H* d; r3 w
   }' W0 e* G; m4 S4 g9 W0 t
  }
& ~7 J8 z1 y" @5 R' l}5 W1 |4 s; Z0 L$ z
m_wndMenu.SetVisible(FALSE);
5 u/ Z/ a7 H4 y7 u
+ p. r( P5 _/ J5 _2 y--------------------------------------------------------------------------------------------------------
5 {) W% w0 K0 M* K8 E% V- l+ q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)& p$ `! l# D8 G: z
{
/ e2 M/ b% |4 N3 t0 X9 K6 iBaseMouseCursor();- ~$ _) K/ x8 ]% }, X' {; V0 F
}
* g4 R. n+ X$ B) L0 ]$ n在其下添加:) k. m4 N. E2 f2 j# m" `4 B
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
0 h/ e" K- \$ N) g- _6 {" b{
3 W* L% i' ^, Em_wndMenu.DeleteAllMenu();0 S! F4 j+ L: C( b0 A. ?4 ?* `
m_wndMenu.CreateMenu(this);2 f3 Y3 t8 T% A1 c, k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 q) O9 T! m4 r6 O* M* J. a) P" G' g3 z  ?! S4 d7 C
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))2 R0 p7 K7 J8 q8 i5 V2 J( X# z
{
+ ^/ j) o9 N( H8 f) b9 t0 O1 J  //P以上级别才可以删除所有道具
( M+ o, v( j6 P$ o. ?0 I  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
1 I" C6 n3 E1 x- J" n* s}% j  v5 A* S1 B+ c% M" @# ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );: i5 L- {/ l# I, I
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
: Z3 v/ a1 F+ x4 l* h# Cm_wndMenu.SetFocus();4 G/ v' N6 a4 _/ e6 N" T. u
}3 n! [; a2 h3 t3 [
------------------------------------------------------------------------------------------------------------
5 e+ ~' C7 s8 P1 R1 H" f5 K/ t1 ^*************************6 Y3 j) z% J! k  }, V
WndField.h文件
7 |; r5 d+ C3 V" l+ ?& Y6 [*************************! x9 I3 E6 ^. T7 L* e2 T' n3 S! n
搜索:BOOL m_bReport;" I* m: {/ ]* L: S0 f' q) D# z# {
其后添加:1 z6 L! p' ?! v  W1 s% \+ O* Q
CWndMenu m_wndMenu;0 q. _" ]2 E  W4 s6 h, b- Q! H
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ j( O' b1 u, S2 l7 {# K2 y/ T- ]
其后添加:
1 e# ^+ O- T& x+ {  d2 F% \1 avirtual void OnRButtonUp(UINT nFlags, CPoint point);" A$ J' n, }0 v7 G7 J

, Y% Z5 J5 _4 B- }- T' Z$ r4 }# C7 {( k# ?! m

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-28 09:20 , Processed in 0.062022 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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