飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
; a, }9 \& x1 M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )4 h4 H) m) w% K- A. B# X

2 I, o% e  }% }) ^* Xstruct sItem
' S* V6 ~( \8 u" _( c+ u& H% |) F{1 b+ _. F3 X% W# D& ~0 J7 t6 b
DWORD dwId;! V; y  K! C+ R3 @8 W; R
DWORD dwKind2;  p0 ]3 J2 w" n3 Q; w
DWORD dwItemId;
. k( v5 ~! @. wBYTE nIndex;2 a" j  s2 ?, u  ]
sItem(){
# F+ n  w/ E) u9 ?' q4 U  dwId = dwKind2 = dwItemId = nIndex = 0;8 C- v$ Z7 i2 o) K, k) S; W
}
, a9 L8 }; w3 L: b& j. H, l  V; B. ubool operator < (const sItem p2)
2 E* G! I) C) l{: p6 f& J4 |/ P) e5 f3 ]# S
  if (dwKind2 == p2.dwKind2)8 f# L; Q8 ?9 i5 ?4 p$ x  `
  {
! W5 _% X6 @5 a. {   return dwItemId < p2.dwItemId;
0 X0 u" \; v3 y0 S! _6 t  }else{
; U  |' e$ F. a) I" d7 A. J   return dwKind2 < p2.dwKind2;4 S  Z9 i  w' G/ m* g; {
  }9 Z% b5 t) S, X
}- L- J. Q& x0 H/ \# U3 q$ V
};' D$ v/ s# D$ r4 Q4 M
class CInventorySort
" d4 C2 F- p( S{
: i+ d5 G' z: Zpublic:
- \5 n; f6 h( _! k- ^- jCInventorySort()4 u% h9 X7 p  L+ ?& `/ e
{1 y* `" A. L1 `  g9 a- R
  m_dwPos = 0;, c7 Y; g5 P+ ?( d9 _* Z1 G
}
4 ]" v9 m, \! ^/ [~CInventorySort(){}, Y( h, p* `+ k- R- h% C
private:
7 V5 N6 w8 z* X/ p3 bsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
0 ^9 k  F7 j2 w# {5 E5 gDWORD m_dwPos;
8 U9 A9 N9 R; T. Z' B; Y  `public:
: T4 x9 m% T  Z8 x' m4 z4 x4 N5 O+ Y" {$ Uvoid Add(BYTE nIndex)3 ~  s7 G# R8 b7 Y0 y3 d
{
% X$ J) s1 q8 N4 R$ L  if (m_dwPos >= MAX_INVENTORY)
- o# @! H0 Z2 q! s) q7 {  {
, G8 q# B- s+ L3 k, j6 Q   return;
' _. O5 m0 R5 B7 r/ R7 [; L  }
4 G1 Z' C* Z" E/ z  m_Item[m_dwPos].nIndex = nIndex;
7 k0 j0 q& W  b( ?0 Q  m_Item[m_dwPos].dwId = m_dwPos;
) h/ ]/ `! a, M$ `3 u- `  u6 ?9 t  m_dwPos++;
: y4 `, X1 q% R8 E, x7 b# F4 @}: Q; t, E8 \' q/ \# D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
8 ^6 ~/ _  s. G' g5 `) Q$ B{  t+ I, @/ b5 [- P: M# W% `
  for (int i=0;i<MAX_INVENTORY;i++)! Q( d" q) a) F
  {
/ a  {: t+ I' P   if (m_Item.dwId == dwId)
- ~# T  X( _' V" F' `   {
" m, ]: R- T* L. o! {6 a8 w    return m_Item.nIndex;5 o7 f- o8 P/ T6 e
   }2 i% B4 f8 A+ S! y
  }
& l! \" p& Y7 V. v" Y' Z6 L5 ]' e  return 255;$ F0 b; G/ x  Z2 x
}; q" Z; }. ^* L+ [- i/ ^6 `6 |1 s/ ^
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 ~2 @7 f4 l' z& X$ D/ |
{
( o5 U; j* d& I1 U7 b- z$ h  BYTE nTmp = 0;9 H: O. r$ |  q& [7 e
  bool bDest = false,bSrc = false;
8 j. W( x' g6 K  for (int i=0;i<MAX_INVENTORY;i++)
# }! M. v- Y5 u8 Y  {& Z* H: Z9 h5 u" }3 K$ r% f. S9 u
   if (dwSrcId == m_Item.dwId)
# f2 ^5 h5 c* K# ^/ T9 G" o   {
  S  n' C! k9 G# `    //id相等 则 改变对应的dest和src
& O, l4 c0 i' d2 u' ~    nTmp = m_Item.nIndex;. o  q6 R( {7 }
    m_Item.nIndex = dest;
! K3 a( l8 z8 e5 T# A   }
8 d! g" R2 C4 H& b9 ]  }! G+ s" h: k! h9 `
  //临时数据保存完毕,交换开始: r9 e& z5 d; D4 \4 h
  for (int i=0;i<MAX_INVENTORY;i++)$ J! r5 r+ h# F
  {3 z5 s! n+ q5 S( M% C2 [+ O
   if (dest == m_Item.nIndex)" B6 `3 @- i. A/ U$ g) k4 C
   {( ]$ \8 x2 g% D0 a9 B' ^
    //id相等 则 改变对应的dest和src
1 o: w* D3 u$ x+ r$ G% Z    m_Item.nIndex = nTmp;
2 S% J# t. ]1 _   }
2 d$ o3 A$ ?* v( _5 c: q  }. F2 n& Z3 G9 Y7 {
}) S' f# H3 e. [8 q. G
};( U7 y5 H3 \3 M1 h0 d
-------------------------------------------------------------------------0 W2 `; C3 J$ y% Y: ?) i4 w
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. H5 B, k/ z5 G2 c  E, q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
, \/ C; l9 q% _. I紧靠其上添加:
4 d) R4 X0 d; y7 S5 t" a: V7 Wif( pWndBase == &m_wndMenu )
$ H" m$ H# B$ q* \* x; q{
9 u, T* K/ P% w% p0 b2 O  switch( nID )0 b7 R& C. o2 ]
  {3 G: T0 ^& v& t( `8 G. \5 t
  case 2:6 \4 T2 s3 [- O5 t6 d
   {
, G8 N& F: r' w9 R7 M    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; V& g" [3 ^) M  s8 K    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; [% \+ T. H( |& _    {
( d! ~/ U) g. C; y0 R% f% q3 D     break;
% a+ b6 |; S* N2 P* b- w0 ~4 u    }, [" A  y+ p  j' P! N4 n. m
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
6 g8 ^. X1 o1 l8 j5 J! `    {
( a, i6 f+ F/ O  `3 I6 A     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
- n- b5 ~, H3 k     if( !pItemElem )
1 \: X7 Z- V; g      continue;
3 s" _8 t4 Y7 z+ k     if(pItemElem->GetExtra() > 0)
! l& I% k& q2 ^( o' w      continue;
  o' @' A* d! H. ], Q; ^     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 k( ^) p1 f* G% ?: V7 a4 m2 N      continue;
5 k2 c' \- ~6 b! L7 \2 i* x5 E/ [     if( g_pPlayer->IsUsing( pItemElem ) )  U+ |/ }6 g+ d) g0 \
      continue;! x* G, ]: @' s8 X$ V; n- P/ D
     if( pItemElem->IsUndestructable() == TRUE )
0 `& ?8 ~1 N' e2 I     {; U9 v4 s* E  Q) H* [" b, |
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* `/ y1 A  s! |% G! J* \
      continue;1 O  w2 r3 G& c/ r
     }
3 l0 @8 D8 D# W- \% A& G     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 }! X  i( ?+ C/ H& l    }( X: h& @& B( B! u
    break;# h# h8 e( L! ?
   }
  K$ ^6 O# y3 l  t5 K  case 1:6 D+ m% q& @2 q5 n4 q) U
   {
2 \/ K. U0 D/ P& ?. V. A8 i    //整理背包
) C/ l+ s! _/ C/ p2 V$ W    //////////////////////////////////////////////////////////////////////////
8 L2 S; F# B3 R+ P, `    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );, W6 U% _! K" _
    //////////////////////////////////////////////////////////////////////////
. v- `$ W% w" Z  W  Z1 p5 Y6 F    //////////////////////////////////////////////////////////////////////////1 Z& o# c" c9 X, _  O
    CInventorySort* pInvSort = new CInventorySort;
/ g: A* k* r/ ?$ I" T    vector <sItem> vItem;
4 M3 S( }2 z+ f    vItem.resize(MAX_INVENTORY);//初始化大小
1 y+ b6 {. m6 d' W6 K2 X1 Z     //////////////////////////////////////////////////////////////////////////
5 A7 z5 A- h9 k# N, n2 |: \3 b4 p     //填充数据
( {: `7 W. @1 }* a8 S3 V, |  B     for (int i=0;i<MAX_INVENTORY;i++)8 l, [1 e  }4 @7 x6 B! i' s: M# O
     {
$ F" O- M1 Z. S6 ~% W' f6 k( f" }0 o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
$ {9 ~& w/ V; o" T3 n+ a      if (!pItemElem)
* p4 `8 V% I( Z      {
7 ]/ j( r/ K) K& q2 Y6 W       vItem.dwKind2 = 0xffffffff;( e: [+ b6 d; Q: N& \* P
       vItem.dwItemId = 0xffffffff;9 s" f' x+ J1 S& @
       vItem.nIndex = i;
7 B, F& _* n: Z) q4 K! V! S$ m      }else {8 T  Z; G2 @5 ?, m( `5 Q, ^
       ItemProp* pProp = pItemElem->GetProp();
% o2 Y) a# }; d! v  d+ u3 l" s7 q+ o       vItem.dwKind2 = pProp->dwItemKind2;
9 W9 P/ L! k  _! q/ G- Z       vItem.dwItemId = pItemElem->m_dwItemId;0 Y* U. K% V" @* k1 t+ T# z
       vItem.nIndex = i;  X* B9 }& G- L4 W1 o) @
      }
( m7 k$ r( J: [; Z      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 b2 i# j! u& a6 _5 V" I; z% V     }+ K. L* B8 u. m) i  J5 _7 i# a- `
     //////////////////////////////////////////////////////////////////////////
' T5 d' i* q8 l: H8 r; ]     sort(vItem.begin(),vItem.end());//排序3 l9 e+ x) f7 P2 q) {
     //////////////////////////////////////////////////////////////////////////
! `  y5 T) |3 }5 E, w  l     //交换$ g, }3 Y: `0 ~3 t0 ~" ^5 q
     for (size_t i=0;i<vItem.size();i++)( b0 f  }9 i7 P7 g; G
     {
, p; g/ Y( o; v2 [9 m  e* D0 ~4 ~      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' J" n% E+ K7 w+ s      pInvSort->Add(vItem.nIndex);7 O* L* p( n# }' k3 P8 ~4 j* L& i& b% T
     }0 W7 r% e# g+ }. w& Z
     BYTE nDestPos = 0;. S+ W6 C3 M( j4 N# Y! T) J. O% g& D. D
     for (int i=0;i<MAX_INVENTORY;i++)
! [* ], f' f; J6 ^* j     {
# F( T, A, i/ b* I  X      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( ]0 i- v, ]- {3 J6 }9 b  l( Q
      if (pItemElem)
! P* L0 o8 B1 {      {
/ F+ z8 v. Y8 ~" M6 H( m( m# p       if (IsUsingItem(pItemElem))" ]/ o1 ^5 m1 a) B5 w
       {
. ~9 v3 f% c8 `7 A2 L        //这个位置无法放- U' V: G/ ?! A( J2 w* E; `6 j
        nDestPos++;( x) I- G4 s: t' W3 _1 u
       }( c; f. j  d- V' r
      }
1 f% i: F! t) ?' @: P      BYTE nSrc = pInvSort->GetItemSrc(i);) p4 t: q$ `1 R
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
& U. C% o; {  K. c; H      if (pItemElem)
4 S& n2 h% i, K1 Z& t. `+ Q* R      {4 y2 J3 q- ^4 ~% Z. E6 J
       if (IsUsingItem(pItemElem))% Z$ o4 a! f7 B% {7 U
       {7 q& W- _0 {: w5 r5 p
        //这个道具无法移动,跳过
& I9 a  V; ~( }0 ^* E$ f) Q6 b        continue;
: }% s4 }8 _9 u3 t       }
3 [8 d- O; g  ?      }else{1 K+ @/ |) d5 H7 \% t
       //空位置 不用动. {7 U" x5 u8 E  w
       continue;* T+ N. Z& z6 u# m7 J2 [% n; x8 w
      }: Q2 d0 M% P" Z, N2 |7 k
      //////////////////////////////////////////////////////////////////////////% L/ \0 f5 U+ A3 y- S, z( M1 [$ x
      //开始移动' H) ], V" B4 ~1 u' @
      if (nSrc == nDestPos)
" _0 F8 |2 k  T7 A, m4 O# s      {0 n% r' w; n2 K) O* W6 s
       //原地不动
+ S9 i" v) Q9 @" W       nDestPos++;- K7 o6 B: `# j8 [
       continue;7 ~6 [' Y( w% U5 i7 T) F5 I& o
      }% C/ G! m# I, S+ G" k8 L
      pInvSort->MoveItem(i,nDestPos);* }; k1 Z8 T/ @( u
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
8 Q1 n- N9 C- r2 i% u      Sleep(5);1 i4 T( o& l8 P8 e1 W
      //Error("移动 - %d->%d",nSrc,nDestPos);' V$ W% C' B' |% i
      nDestPos++;; k+ z* X5 K- H, N" g$ F9 b
     }4 t; p! C; \. p( b2 E' B
     //取第一个元素的信息
1 J9 l6 m/ |$ p# ]2 M     /*
; L/ U7 D2 U2 \& g: U: w# `! T     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff), _5 D, G6 Z/ K7 D
     {
) ^/ k" z# M' S6 Y      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);) ?" s+ U* E+ ~5 s- a* O, t
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 A+ w4 K* b* `
     }
1 D' B+ w: _: q0 V     */
6 Y2 Q8 V2 i- D. H+ p    /////////////////////////////////////////////////////////////////////////// Z' T+ N8 z/ [7 n
    break;5 g$ S; `+ a, v' I6 E) ]$ N
   }/ U1 g8 U; [( ?5 @* p
  }
$ N, J# x! Z, l; e}! w' z* S$ w; b3 l  e- x
m_wndMenu.SetVisible(FALSE);5 X, T4 ]; x' U$ s4 V1 J# g

9 p/ M% ?3 F$ ~4 K/ v--------------------------------------------------------------------------------------------------------0 Y  X+ n/ p( ?1 t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 ^% L! d' M0 ?) E- J$ L
{/ `1 ^3 I1 W( m1 o7 Q6 O
BaseMouseCursor();: Y) r6 v4 Q- Z
}
0 ^  y/ l* p. N$ F' [" A. F在其下添加:
1 X6 T6 ]) w' xvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: x+ u9 j) C/ \# K9 ?{
) e& B: \9 Q1 |% v% n' nm_wndMenu.DeleteAllMenu();
$ ^* `7 [0 L$ }. D9 L: C! \' Wm_wndMenu.CreateMenu(this);
. k7 S+ |/ B9 {& d; O  k/ vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# j$ \7 |4 ~" S1 }' P$ [) U$ S0 @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))9 |$ o- c- {8 k
{
- [1 t! `+ }1 k/ z7 Z7 Q/ s) c  //P以上级别才可以删除所有道具
# z6 D. X" ]% s- d  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( x2 L1 K8 }% Q- Y7 X6 L! z1 H
}
4 g4 X! u* C2 V3 l* c# P! u  h7 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) c# p0 \1 y0 B- p& q" z7 v2 r6 mm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );% w* {6 c9 |  g7 ]7 i( i
m_wndMenu.SetFocus();- _" `. j) |* z, l: O7 @& L1 b8 ^/ m
}& u7 ?7 N: _6 g- J8 n
------------------------------------------------------------------------------------------------------------
$ v8 t' o4 @* J1 j. r*************************
  `9 P- w/ b4 L/ p8 V' ^WndField.h文件  ~" @0 v7 b1 P2 c, M
*************************
/ E. V' {3 S) e6 R8 I$ l( k$ X1 A搜索:BOOL m_bReport;
9 h+ e  s8 f7 O3 U+ U" r2 I4 w5 `% w其后添加:' G6 M8 x" L' t3 K9 ?+ F
CWndMenu m_wndMenu;7 K2 y8 ]6 r3 u& F$ K7 C+ _3 D
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 D) P: @+ m1 V. \# o( c7 Z
其后添加:) ^- a& w+ @+ H1 [2 U  P
virtual void OnRButtonUp(UINT nFlags, CPoint point);
0 Y3 ^8 V/ `- d$ m) Z9 k1 K) Z& E* ]6 B. X
8 {) i5 C' h& [/ U, q8 w

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 12:51 , Processed in 0.120344 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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