飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( U& j6 I$ m6 |0 O* J& \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' [$ _. `+ H( ^: Y+ y; v, [( T! }* v% t" F( B

& D! _4 u: Z8 f4 Istruct sItem
* M" {  X# b, g{
* Y3 z, f2 P) b' [8 y! O( r4 rDWORD dwId;3 m  H3 t7 I7 P. }6 l- x3 b
DWORD dwKind2;: I8 [" U) F; k$ T5 ]/ @, J
DWORD dwItemId;
9 l7 `: }$ `; P) E" nBYTE nIndex;
* D: o! |! C1 t  _sItem(){  K# f" R9 N$ C2 S1 }
  dwId = dwKind2 = dwItemId = nIndex = 0;
( G, w! x, B8 L8 r}9 u3 P' u2 r3 t3 @4 N
bool operator < (const sItem p2)/ d- t0 y7 s) N2 p0 Z2 x4 H
{& z4 o9 d4 `4 j  d1 G
  if (dwKind2 == p2.dwKind2)
) w4 k) T% j; r9 u  {
# f/ b5 |5 Y4 a   return dwItemId < p2.dwItemId;
6 W' {& p3 e' w1 N1 U9 E  }else{
+ m4 L; b( S9 Q2 f: J+ V( X   return dwKind2 < p2.dwKind2;* J, t% G1 n6 d- A
  }8 M$ D# Z! B% x
}; a/ ^$ e5 v: M& @% x$ K
};
! L/ w5 B, W# r/ Y' w, C2 Y8 y* iclass CInventorySort
, D' [- N- W4 G1 m' m' x" k: k{
7 j/ W1 S1 e& v& jpublic:
8 c% D' C2 v9 k6 w! T. v; C/ ?CInventorySort()
$ D" C5 i0 \; \  @4 g" V! U0 x{
5 G" N% g$ a, }: @0 v, O; Z  m_dwPos = 0;
/ t: ^1 R- T/ M; ^& l/ t  |3 T}0 H0 G  O4 ^( V; r) B
~CInventorySort(){}, Y& Y8 n- }# W, o/ D$ ?( h+ H) z
private:
0 }  f$ J2 ^9 osItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
6 _7 i$ ~, J# }6 a" h; sDWORD m_dwPos;4 R* N: V# c  f
public:. C! ]# g+ v3 O
void Add(BYTE nIndex)
5 G- j! i' D( R' ^{2 q4 \  ^  f8 M: p9 }
  if (m_dwPos >= MAX_INVENTORY)
$ L4 T4 w: t/ x. n2 Z3 G' `" a: N  {1 n" [6 W: K: t: H1 {3 J" @% U0 p( P
   return;7 {5 d3 N4 r) R/ [. j9 }6 v! S7 ~9 x
  }
+ g* o  k. A4 e! d2 F' J  m_Item[m_dwPos].nIndex = nIndex;
, ]* I$ d3 f* e) R  m_Item[m_dwPos].dwId = m_dwPos;
) [8 a+ l) q! j2 f$ p- x  m_dwPos++;) T& c* s8 ?+ i! b
}
8 ?2 n- u" q2 D+ O$ ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* d8 D7 o2 j  Z6 b" B) \5 {{% `7 ?7 R: r& Z! @
  for (int i=0;i<MAX_INVENTORY;i++)
; `8 W$ h+ \5 p7 ]8 i% n  {
) `1 k. t* f: Z4 X   if (m_Item.dwId == dwId)( s1 F6 ]' h" h3 A" R+ P
   {* n1 T# u; r8 m
    return m_Item.nIndex;# t6 ]4 B# ^" }& Q% r1 r/ X7 f3 Z
   }
0 L" [7 L! e4 t6 I% U# w4 G  }
* A& W9 I2 w! p- G- P9 d  return 255;
  _4 \, N- O8 g% f+ M}
( S6 f3 w; N( [7 c/ ^8 g5 rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& D+ d8 |9 z8 b- `
{5 T3 r* n* a$ L- ]* T1 k/ ]
  BYTE nTmp = 0;
( s7 r9 `3 e! c0 c5 i6 u  bool bDest = false,bSrc = false;, m* C. W/ s, z/ H* C* S
  for (int i=0;i<MAX_INVENTORY;i++)" s# j5 m5 K$ q. p$ G: _4 R
  {; y: q5 _+ G3 I3 ]6 m) J
   if (dwSrcId == m_Item.dwId)
) Y' X) r" A& U; e) t! T* y   {
# y/ P' o! J5 r4 i1 @- S* H6 K) a- q    //id相等 则 改变对应的dest和src
# w( M0 D& a4 U5 {    nTmp = m_Item.nIndex;, T3 O! h' L8 X4 [, k0 W7 I! Y' t
    m_Item.nIndex = dest;
+ j: Y/ n8 k4 o# H8 _   }6 u, F+ i2 c0 S9 a7 W  _
  }
- f/ e- W/ U  n: u  //临时数据保存完毕,交换开始
& v( R0 C0 u7 Z  T4 k- \  for (int i=0;i<MAX_INVENTORY;i++)
2 v5 l" Z& v8 N' W1 u1 y. z  {& k3 ^( m8 V* _* l3 @: v
   if (dest == m_Item.nIndex)* c, N' d5 ^  r% |* A# b% Y/ `4 n4 n
   {
+ R$ @6 u2 k/ K+ g% q/ S  Q3 A    //id相等 则 改变对应的dest和src) S9 k/ e! y$ I' b: _
    m_Item.nIndex = nTmp;
* G3 C! v& L! n3 R" h   }3 `' h+ t& M6 w9 M0 g4 a1 \4 g
  }
) P; ~; H' Q* `3 B) W}
5 `3 a! D6 U% P0 Y( D8 m};( Q8 s: @! @- m6 v. G0 d" ~# f9 e4 i" n
-------------------------------------------------------------------------
% ^7 G, k; U! J: O依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )7 I, m5 b, Q8 h3 n0 H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& @3 F, ]/ w: V
紧靠其上添加:. ^) m0 ^# w* _1 V2 f$ W- O9 X
if( pWndBase == &m_wndMenu )
8 v3 A, n+ `% w; c; v& n{
* n( N- j8 _# Y! d  switch( nID )
8 _5 T2 [7 j6 X+ T& T' t  {
' c, e3 a9 H/ h0 j4 R  case 2:
6 ?) ?- n9 r' u5 `   {' n5 L4 ]# `; Q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
; @% U( P, f: s  y/ e    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 W4 h& }5 j* p/ H- r7 b1 z    {
. \5 i6 g4 S7 f, o8 ]6 Z     break;) E7 @7 M' q$ [. R: X
    }; x9 O3 g5 B9 E, b, V1 l! s
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
- l0 ^' e4 |  n. a. D$ P6 H    {+ t+ q  q2 f- g' A% B4 T
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);) [" u2 j6 a% F# o6 F+ ^
     if( !pItemElem )0 r- r! Z& q; P. B
      continue;
4 F4 f. n: g/ a* j9 [     if(pItemElem->GetExtra() > 0)
$ Y) Q1 \' z2 f9 D# d      continue;# l/ Q4 p- a1 D2 E9 H; E! U
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  E. ~3 L( B( }      continue;4 Q. E# ]- U6 ]) C- J
     if( g_pPlayer->IsUsing( pItemElem ) )0 v! k4 ^6 z6 K$ @1 G% J
      continue;
9 y" m- Q+ b* M& G% i( G     if( pItemElem->IsUndestructable() == TRUE )
( W/ }/ @3 N. C1 ?! ^+ W( b, x     {
- B' D( @/ F9 l8 T" k      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );! l0 n. Q! C0 j  }3 e! Y+ T8 R: R* h
      continue;: u# q+ }- v! f: P
     }- X5 C" }6 Q& U
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& v, ~0 ?0 ~$ ?! t! R0 G' d
    }
* S$ K4 `! @6 `, |! x4 ]7 S    break;
/ ]% L1 v, x+ f5 M6 L0 A   }
* s1 b( F5 L8 }  J' D  case 1:
6 E- M& ~. k7 {$ u   {! S& w" w7 L% o0 Q- \- A# l6 p
    //整理背包
9 O- e5 j! S6 N- ?    //////////////////////////////////////////////////////////////////////////. L1 s' R$ A7 o
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 Y$ x4 F; Q" }& n# ~! w3 X5 X0 H) J    //////////////////////////////////////////////////////////////////////////; t  w& r4 M( J, _; c+ e/ V7 Z" k
    //////////////////////////////////////////////////////////////////////////
( U/ B, U# E: L9 ?, K. V! C" y" X; D    CInventorySort* pInvSort = new CInventorySort;4 O& h( y  Z; J3 g
    vector <sItem> vItem;
& P: F4 M  W* l" _" d    vItem.resize(MAX_INVENTORY);//初始化大小
: o8 W% b, u9 m/ r2 b0 o6 f     //////////////////////////////////////////////////////////////////////////
. B, \+ H: U# e- g     //填充数据# L- _( r9 ^6 z5 s: P& u
     for (int i=0;i<MAX_INVENTORY;i++)
2 M+ L7 }  h( U6 I/ Y& R$ V     {
- |+ k' J9 o2 ?3 p: R. t- \" [      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, |4 W0 o3 ~# g7 f      if (!pItemElem)
7 e6 S8 ]2 d5 w) j: X: \      {# u" a+ k. }" {' k  ~9 C5 [
       vItem.dwKind2 = 0xffffffff;) g( k: ]2 o& Q& g$ |' i
       vItem.dwItemId = 0xffffffff;3 `) w1 y, t: E: w4 J; g
       vItem.nIndex = i;
8 i) x' _4 F; R! B& a8 B8 ?      }else {
% j( W; y! W, A& J* ^) P       ItemProp* pProp = pItemElem->GetProp();
7 w; J% Z$ W1 E1 w( D1 g$ {& a       vItem.dwKind2 = pProp->dwItemKind2;8 s4 D! ]# k5 z: D" l
       vItem.dwItemId = pItemElem->m_dwItemId;. p7 D) {6 K' [+ p
       vItem.nIndex = i;- c  b- n- _3 T, ~5 C7 P
      }6 U. `- W  x4 g7 }8 P
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 H9 T! O. _; L( i6 b; A8 v     }! B& a. X4 k' e2 T/ l
     //////////////////////////////////////////////////////////////////////////
6 M% I) @0 ^& C# h" C1 u     sort(vItem.begin(),vItem.end());//排序
& a1 t: _* Y( s2 t     //////////////////////////////////////////////////////////////////////////
1 _# E4 U' W; r6 Z     //交换
5 P4 V7 _, L2 h/ G     for (size_t i=0;i<vItem.size();i++)4 q, I) w; ^& [# E* n2 m6 V
     {- @0 P( h/ p$ |, l5 \5 @3 l
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ \' r. j; M" w% ^, a1 t0 u9 E. \
      pInvSort->Add(vItem.nIndex);
2 d% [, b" O  V; G$ F) `1 P     }& K: r5 @" H# |3 L" m9 D  k
     BYTE nDestPos = 0;' A' o2 _# B- {/ F
     for (int i=0;i<MAX_INVENTORY;i++)# n3 e' |' Q+ p6 L" I2 @, u
     {
4 C: r% A* m2 b) [      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
& I* s+ M: b! C4 p7 U$ A- d% v9 y      if (pItemElem)
; U- }- J0 P/ {% {) j# Y1 x      {9 z1 _4 b0 B1 P1 z/ E- i
       if (IsUsingItem(pItemElem))
( H$ H0 [  ]& P/ H       {
* c, d% R. v, }- x        //这个位置无法放
# c1 |1 z: l) D        nDestPos++;
  {, R! |4 ^( H       }% ?; T+ U- H6 ^! [' ~* e, \0 t
      }
# [& }5 o; d8 Z0 z  ~# G( K3 v      BYTE nSrc = pInvSort->GetItemSrc(i);
- v) z* K# F( ^& ^' }( q3 |  l      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);" D; _) h5 E3 R6 t3 I1 [6 K
      if (pItemElem)- Y% T/ O4 X2 o$ M3 {$ X  }' x5 N9 l
      {: D$ A" n/ _# a' n1 {
       if (IsUsingItem(pItemElem))
8 z3 `. Y! E  r( w: J       {
) F! c, d0 ~8 |) g% v$ _        //这个道具无法移动,跳过2 U6 P5 s# s9 q% N+ N) m  i6 I
        continue;' u$ Q+ _/ u, X% m4 P" s
       }
" Y: {, ]+ \! N# q1 W" p5 ?& b      }else{; v; n! \) c, U" F( ?2 H
       //空位置 不用动
! h2 }; W! Z, \, y( l; K7 q       continue;
* P/ W! u/ D( }7 p      }
: k4 K! @& h4 b/ Y; s: a: }      //////////////////////////////////////////////////////////////////////////
% K& H) f* K2 ?( g. r3 t) H9 R      //开始移动$ l2 j5 V  C5 E# y, B( D
      if (nSrc == nDestPos)  L5 p- O7 ?, A3 T6 Y! \7 r! w$ k
      {
) r7 p2 x/ g& n1 p3 w1 N" T; L, l       //原地不动
1 ~9 A  A8 a5 T       nDestPos++;
, H! c0 W/ Y, o, y' E! @# L3 ~       continue;
/ r# [( S8 A- H% L3 I" a0 b2 u      }7 x3 ^8 V$ g1 q+ o
      pInvSort->MoveItem(i,nDestPos);& d1 v  S3 D8 a& Y- ^. B
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);: j) d  V# P8 E3 s: U
      Sleep(5);
. n3 E8 X! V2 _& b. n      //Error("移动 - %d->%d",nSrc,nDestPos);% U$ b' s0 q. g
      nDestPos++;
- t/ C1 I. _; X' U4 L2 ?( H     }* _. Y) [& D3 ^' E' O
     //取第一个元素的信息5 d5 c/ D  V8 ~7 ]& m6 U
     /*9 j" p3 T1 j  v
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
! F. [) q  d5 F0 E! w     {( K- W2 f/ B) M9 j0 ?+ l% l
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: Z& o( u) C; C% O  |
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
$ z% U. j% Z- @$ g" k     }
. D) {* W* L, i0 [3 h     */, A- ~3 Y7 q0 Q9 V* U3 r" q
    //////////////////////////////////////////////////////////////////////////1 Z4 L" P3 |; E8 U
    break;
1 u8 `9 S& {5 u8 w7 D* I7 S   }& g, [3 g) e$ `- u2 [
  } * w; n, @, e) I
}: Z# r5 s4 K: Y0 g0 T- [
m_wndMenu.SetVisible(FALSE);
8 G' g7 K5 @/ j( b- L  h6 x: V  {6 ]) O( y2 [
--------------------------------------------------------------------------------------------------------; b8 N3 h6 C( k: s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, v* e* Q1 {7 X8 U5 [( ?- [{5 q" G+ S7 o% K) n4 V" V) W
BaseMouseCursor();) n- F0 E" Q- r+ c9 o3 ?$ @
}
3 R( r& [. A% n% q3 X4 ~: x+ d在其下添加:
: j) M! R( I3 B4 Wvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) s1 X7 B4 P( p" r2 r
{
( H1 S. }- i9 r* h8 B8 u+ ym_wndMenu.DeleteAllMenu();# m6 }" b& @! u4 S+ ^. B
m_wndMenu.CreateMenu(this);
" L2 O  g+ A. D0 e' B; n6 y& n6 \m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");6 e& p! }! v8 u  _. w

* V' l1 d/ I' k3 j4 Gif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 p- g! _$ m, A" E0 m{
" j6 K5 C" s+ Q0 h  j) @: n  //P以上级别才可以删除所有道具( Y2 ^' D1 h) f0 [& o
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");6 P; k4 O% H" Y
}
- a0 U' {* \8 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ c0 t+ M8 }, l5 Q: L" ~
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
& m  ]2 i) H  e0 S, ~8 ]m_wndMenu.SetFocus();
8 g9 g( h' T1 ]7 [5 Y$ S, u}7 X; f/ f) R- |9 m: N  Z8 u
------------------------------------------------------------------------------------------------------------
: s( N4 g! D7 V0 Q% m*************************; d- V/ h, e  y7 F6 K1 T
WndField.h文件
+ u' V; `3 k, `6 U/ q( P+ }*************************
8 n( b: n- h; v5 c* I' L搜索:BOOL m_bReport;
8 d) a; ^2 p! s" F6 w2 N# j其后添加:
, `9 u2 Y/ p- c9 {# c9 cCWndMenu m_wndMenu;
9 B1 @8 l9 w( n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. W- ?& M0 ^3 L" h2 X' j
其后添加:
) ~8 \  A! \- V" y7 ]7 C: svirtual void OnRButtonUp(UINT nFlags, CPoint point);, [# @: X3 e& H# K* j4 I% E

/ K+ n% L, Q! l2 z4 O& b! P% v! G. ?8 W

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 22:03 , Processed in 0.066881 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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