飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件/ Y7 e4 u2 c. G, z) P2 y. j
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% M3 m: i5 j1 i& z/ a2 J' w; G: F' c/ U) b" c/ J5 y
struct sItem" `# V# a% t3 P( S+ i6 u; `. @
{9 e2 ]& a: |0 V$ G
DWORD dwId;
/ o0 O! f+ k! C0 FDWORD dwKind2;
7 N  f! x! E' C: }0 |4 oDWORD dwItemId;. d, s# N; `4 S) X* I4 k
BYTE nIndex;
7 h6 u) w! D7 H$ R/ YsItem(){& h1 d$ Z2 W+ V7 J
  dwId = dwKind2 = dwItemId = nIndex = 0;- `! G* C9 I9 @2 q5 _: K8 Z
}/ @" W, ?. Q) O7 h
bool operator < (const sItem p2)2 J! X- m. v5 W! Q* @' l- M7 b: v
{
# g1 E- o8 r1 Q  if (dwKind2 == p2.dwKind2)
; S$ {0 v1 n( g1 S1 z4 ~1 _$ X  {9 Z% U" i% h1 h. c7 N
   return dwItemId < p2.dwItemId;( R+ e+ X5 F1 y  ]: ]8 y: ?
  }else{; s# S: ]+ j/ e% O8 T; g
   return dwKind2 < p2.dwKind2;
3 B. m3 T/ H) q  }# N2 I+ q+ k, M3 _; N: J4 b
}( i5 g5 {2 w% q! D1 l
};' u: Z3 G$ M& E" _
class CInventorySort1 V% k- l& d! r! X. {6 F( _, ]
{) C/ @; ]1 c% K2 T! Q
public:' w7 `8 ~4 T& H- h+ U: F! b* j
CInventorySort()
3 d- S/ M, ?/ P$ s" g6 h( ?# d{+ [2 u" o& n4 M) O+ F
  m_dwPos = 0;
# o' |7 I2 V: i# X1 W  e}
$ t. ?& g, T+ V# F8 Z~CInventorySort(){}% F; W8 r( v" q. }
private:6 P$ I& q: X7 h% i( K7 X6 c, a' K0 i
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息7 L/ _8 B# b4 C" b/ b5 s  z
DWORD m_dwPos;
5 n  j* u5 O# B1 M! zpublic:
6 m  k3 \% D1 t5 k' ~3 f  h2 H# ?1 wvoid Add(BYTE nIndex)
+ ^" Q  p( ~$ L7 ]{
. }: @1 {! o& w2 L! U7 a* R  if (m_dwPos >= MAX_INVENTORY)" v9 ?) s+ @* Y+ ~, E# x
  {- o7 o' L( V1 h( \) }2 K4 w
   return;0 w+ a- t! V+ U! G, V% j( p
  }
9 }; E% |/ I: f- ]  m_Item[m_dwPos].nIndex = nIndex;2 s+ ~2 ^! \. ^
  m_Item[m_dwPos].dwId = m_dwPos;( r* H: s( R' ]  t3 g2 k) u
  m_dwPos++;
0 [  N. A/ o2 P6 J2 z}* x3 Z; t8 p6 |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
* ?+ N3 _* C& Z8 L8 @- @* H% Z/ q{8 }6 P- m) }# q2 T2 V& t
  for (int i=0;i<MAX_INVENTORY;i++)+ q1 J' Y4 K* m3 f" ]3 W
  {
- ?% [2 ^: G/ P) L   if (m_Item.dwId == dwId)
/ t. m0 r3 J/ e# k3 ]# t   {) F% s) x" j) k: K" z1 o: n0 D- k6 l
    return m_Item.nIndex;
+ W7 p$ T6 G; f0 b. H  G4 }   }
* `$ T- n. Y8 S: V  }9 b0 n5 M8 x$ d7 b& k- s0 f
  return 255;
6 N; p% B; a0 d0 @0 o$ g+ H& B}
9 J/ \+ a: D! O- `% K! ~+ s( N0 Ovoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& N3 v8 P2 e# _( }- Z/ C) _
{- Y, |2 u: m6 r* L- O
  BYTE nTmp = 0;
' A: a! n+ s8 V6 F  L, [  bool bDest = false,bSrc = false;
, z0 s- h& Z/ m0 E1 n6 g/ @  for (int i=0;i<MAX_INVENTORY;i++)
  L! p* E+ y: I2 ?( q' Z7 t  {4 J7 b$ t# [3 R1 X7 b
   if (dwSrcId == m_Item.dwId)# C1 C" }( M9 Z2 [
   {1 k$ j1 F5 `# T
    //id相等 则 改变对应的dest和src+ A/ ]" X6 w, v
    nTmp = m_Item.nIndex;
' [9 t, O) O7 O" O% n    m_Item.nIndex = dest;
. A  S, u; u2 x# F& F   }1 V3 @$ l4 s  {9 _. q
  }
2 B8 c" F8 L4 s% W) e  //临时数据保存完毕,交换开始) f% l9 j9 E/ |* J
  for (int i=0;i<MAX_INVENTORY;i++)% Z  _6 }' B! O" G9 E  j
  {/ P4 X  F  v6 p
   if (dest == m_Item.nIndex)& D- t& e3 t7 v6 |/ p# |$ c+ l. v
   {
/ R& @: J. L5 ^: k* y3 c0 O" F    //id相等 则 改变对应的dest和src
" o! Q8 \1 p' C* {    m_Item.nIndex = nTmp;
! f0 e6 m" o- ]' I. w, `* D9 B   }
: ]& W: N; N( I3 c  Y  }
( k; ]$ Q2 w, l/ M( O& V# v}2 a# N* H2 [7 ^! J
};
6 T% @2 ]5 \6 K8 c, Q-------------------------------------------------------------------------: R2 M- A$ w% b/ f6 H
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )3 s5 P. }4 ]8 q/ ]# B/ C  \
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. u9 s: i! S# f# y# ]5 \紧靠其上添加:
" o: I; ^& k' F1 o) T# T3 d% {if( pWndBase == &m_wndMenu )
* V0 [" G! e# }7 D' q& M{+ B/ E0 {# k: L$ d
  switch( nID )
% n1 N  ~" m4 \8 h7 W  {
$ C; U& `& {+ O6 J; b  case 2:
: x  `1 e$ [4 M% `7 V! Z- f   {$ `. }+ e- o6 v( Q! n
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
. k) C  o/ S: c9 J) X" p& l0 z" s    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))5 i1 ~3 e* n/ ^) T( Y3 z
    {3 M' ?! I$ t/ {& u& N
     break;7 [# [2 @% \2 u8 B
    }
7 M( W3 o7 a9 Z" g( R- w8 c: j    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" s  ^9 u6 c9 ]2 o7 K  h2 \
    {+ \) ^1 U- u* D5 S& a
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 E3 r5 e6 {% R& y' [4 d8 K6 ]     if( !pItemElem )
$ _- |* F# @9 s. A7 D      continue;
2 M- i% J9 g7 Y2 R     if(pItemElem->GetExtra() > 0)
8 P8 q( S9 ~/ u& H! R      continue;- T6 t& t. z/ L' \7 V
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & R4 A! D" q' V* Z9 ^
      continue;9 D# k8 U( K5 g3 v
     if( g_pPlayer->IsUsing( pItemElem ) )2 x& c, D; b0 N# t: h$ q  ?" z: n( s
      continue;
* ~6 Y2 Z( O9 X; e6 P: O     if( pItemElem->IsUndestructable() == TRUE )5 A; R6 p  [- j: F1 p" P* y
     {
8 p# \) A; D# Z6 C8 ]5 d- B4 _      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
0 b6 M* I- j" ?/ I# d; [7 N      continue;
' R( J8 E$ O# m     }2 C, c3 O/ e  d' d
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) J, ?* E. i4 |
    }6 O) T2 R- d+ N
    break;
# S  U: A; }. r. u   }
6 t3 T9 ?5 @$ l) M  case 1:
, @* G& i4 Z; e* N  b1 k   {
: M. w0 P) _$ M- T$ ~5 w0 X    //整理背包
: \& L! H" P6 H    //////////////////////////////////////////////////////////////////////////) H  q/ U6 Q& i, i% g3 ^; I
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );$ g! \3 k( v; M# D' u1 q
    //////////////////////////////////////////////////////////////////////////, E& r; f$ p- {7 N" \8 Z& r
    //////////////////////////////////////////////////////////////////////////
* }; n4 X4 z: X+ R9 t: P    CInventorySort* pInvSort = new CInventorySort;
3 x$ E7 [7 ~& n5 O* F    vector <sItem> vItem;! Q* q  ]# K% J
    vItem.resize(MAX_INVENTORY);//初始化大小
1 g$ D8 R3 W" w4 o     //////////////////////////////////////////////////////////////////////////
: @3 B6 m- X7 ]' [5 z     //填充数据. a- @4 f  d& X- W' d9 C8 J
     for (int i=0;i<MAX_INVENTORY;i++)
3 ~& i# A* O2 R- [     {/ U; B" ?( B9 _- [; T! |5 e
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
. c  Z& @6 c7 v/ L! d, O. R/ @      if (!pItemElem)# g' X: w3 s$ Y( Z
      {
, d& R: p: @5 k" _! @- T. [; |       vItem.dwKind2 = 0xffffffff;
& ~7 {9 Y& T0 W& m* R0 u       vItem.dwItemId = 0xffffffff;
9 q% Z) B% \! t" t* [; e% p2 @; `       vItem.nIndex = i;% K$ W" ]5 g. H
      }else {4 z% N9 H) y5 T# n0 J0 K! c
       ItemProp* pProp = pItemElem->GetProp();
" O  R$ A+ _) u" Z) M" A       vItem.dwKind2 = pProp->dwItemKind2;
6 [: |1 i7 y- P5 T+ n       vItem.dwItemId = pItemElem->m_dwItemId;' m$ N9 n9 ?4 T# X% z( A7 v
       vItem.nIndex = i;8 y4 T) `7 @6 }/ {- b
      }- _6 A6 t$ N" ^- n- x# O; [5 Z) G1 Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);3 [; g( x. g4 [1 S4 O. f4 s4 a$ K
     }
- c) Z0 |4 V  @  [: y& ?) S% p5 G     /////////////////////////////////////////////////////////////////////////// q/ f* f) C* i* v; f; Q
     sort(vItem.begin(),vItem.end());//排序
6 q; F9 }8 P! b, Z     //////////////////////////////////////////////////////////////////////////! B1 _+ e! j# ]! P0 p/ ~" a5 }8 ]
     //交换
7 `9 t1 e9 X! x* o5 i* I! ]     for (size_t i=0;i<vItem.size();i++)  U, U% \- t. p# |1 S, m, Z/ C( E
     {
) z1 M, i3 ?) A3 v      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 w7 _" s8 V# y$ _4 O  {" Q
      pInvSort->Add(vItem.nIndex);
% i3 U7 b+ w! `/ @  N     }! g3 w" Q" d5 b+ a6 z6 r; R% p
     BYTE nDestPos = 0;* F$ P  S  c* t  h1 P6 S/ `& t
     for (int i=0;i<MAX_INVENTORY;i++)" Y& s; z/ P: E: u; h
     {
% E! F9 [' Z% F$ F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ @8 @/ ]- m! Q' ~: e% b
      if (pItemElem)
/ S9 f8 C9 h; o8 E/ Q0 k, \      {
, Y: r+ `" p3 Q4 u" i       if (IsUsingItem(pItemElem))9 L2 D! }. Q0 q( W& p
       {
/ p+ e: [9 p/ k! h. Q        //这个位置无法放
- y$ Q! r* _9 }' j        nDestPos++;
. x$ X" D  s8 q0 G/ J! e) ]7 \. W       }
2 H( r( f6 K$ L( b$ }9 g% y      }
; j# F' Y3 p/ a  r      BYTE nSrc = pInvSort->GetItemSrc(i);
- f( ~4 X3 U/ @5 e& K# W. R5 I" s      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);! y1 j3 G+ L. E/ V5 U7 c
      if (pItemElem)
% K6 J% ?3 _% c" n      {6 q! U# h- P5 h2 U& s( N
       if (IsUsingItem(pItemElem))
6 ?0 r/ r1 L) ^% N* H1 M$ t' E6 _( s! @       {
$ q1 x# @6 u) L4 _  D        //这个道具无法移动,跳过) ]; ?* |. W8 S- s1 q
        continue;
  K- y% t/ @5 Y$ m: e       }+ ~, t+ F8 ?8 i$ Z$ c, V' G0 _* w
      }else{. t/ f/ ]3 L+ D
       //空位置 不用动
: d5 O1 u1 R- L5 y1 G- J) P       continue;
* n: e# y4 @! N2 Y' i" C      }8 k. |; A  f  ?/ S
      //////////////////////////////////////////////////////////////////////////' z; J  U" D7 Z, t6 I! D
      //开始移动0 n3 a: M8 }+ W9 L7 Z" i
      if (nSrc == nDestPos). r& E: b7 o' G
      {' M; a) K4 \, s: B" i
       //原地不动
9 o  T5 c* I# }* n3 a  _* \: ~% w       nDestPos++;, C! d; R! {) t$ {
       continue;
6 q) i7 n  R9 C* ^( ^, {      }. `8 C& R, b/ ^: a$ J4 P
      pInvSort->MoveItem(i,nDestPos);; n1 p0 |! e0 Z; o( B# X
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);, J) F( M: ^+ |& T5 A$ {
      Sleep(5);
" s. g$ G* y# Z" x* |# O      //Error("移动 - %d->%d",nSrc,nDestPos);, ?6 x! @9 l$ J; |1 ^0 @; D- G  j
      nDestPos++;
+ p: D: P% N  @  S     }3 s8 r& K  \! ]% |5 [9 s
     //取第一个元素的信息* U; P. D7 L. J+ O
     /*
) o" M8 f, X, E6 t5 V2 H) X: m     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! ~7 p2 Z5 |) q  a* \* M
     {
6 ~9 a$ p! X) M5 B      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
5 @7 Y( {! T; J- ?      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& P% V; Z5 F( Y* u8 ^1 L/ g
     }
7 Q/ m2 ~: Z; @3 Z8 W5 D0 ?0 ^     */
1 g4 R3 [( b$ a  a) v* ?    //////////////////////////////////////////////////////////////////////////
& V) n* c& K9 y7 N% x, c    break;, @: ?+ }! _9 R  T. ?$ ?/ `; V$ T" h
   }
) \9 Q( B0 A/ r' U* p5 _' a  } ( k! Y$ @- \+ V" M' \3 E
}
9 ]5 a: _5 \* D3 l$ x+ n  T9 v% H. Rm_wndMenu.SetVisible(FALSE);
8 \$ L  o+ [$ @; l0 B9 Q/ o$ z) }! d8 Z& _6 g; C/ m
--------------------------------------------------------------------------------------------------------
% W% Z( W1 W9 V! B& w  t7 s搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
. A# r, L" L0 U/ u{
  U- t" p  @; V8 c+ h* Z2 [5 q  vBaseMouseCursor();' z$ B8 m' p- `. e/ N
}) j' g: U9 E5 ^
在其下添加:2 z! C) p8 R" m& G* q7 W7 L, V3 N
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
9 T4 E* }6 p# u& S: l{/ L( c7 p; g! L: Q3 |& o$ ~
m_wndMenu.DeleteAllMenu();
& s3 E& f6 g4 B: P& Qm_wndMenu.CreateMenu(this);; j* s+ v& l0 S, p
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ y5 Z- w7 @' {' O; ^' x! C3 d/ P8 f1 _' Y3 }3 |: n+ b$ R
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 f, B* z3 [- I* i3 p& s; r" J{! j7 D' {$ e5 q5 ^, ?
  //P以上级别才可以删除所有道具
0 z; [8 y8 k; ?  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
7 q- O0 _7 i6 y. i}
* p/ q3 f1 [, {$ I! v: e/ s& Y4 vm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 N0 A+ s( o! n3 D+ u4 Hm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );8 B7 f) z( x  i  s
m_wndMenu.SetFocus();
* ~4 I/ q9 {+ U1 Q! I}) }, T* T3 l$ D4 r: R+ J' r9 l
------------------------------------------------------------------------------------------------------------$ Q0 J& c* v6 C
*************************' j4 n* I$ S6 b- W) y7 L
WndField.h文件  F1 r3 X4 T' X  M7 G! D5 s. o, s/ F& n: e
*************************
: n$ P2 B  h0 e/ e- ], u4 }9 y搜索:BOOL m_bReport;
' ]" O2 ?; m* X其后添加:9 q3 U$ F6 q3 a6 l8 Z* B9 `2 I
CWndMenu m_wndMenu;
( w# S: c+ J% C' n2 b) _2 M搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: M8 q) p5 _! }8 w3 A9 w+ t$ d
其后添加:9 c% \* \8 R+ u& b$ X
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 {4 h7 |- z- T/ g  x( C
. _# T( }6 e! O" ~8 m
) d3 k7 _$ e6 p9 @2 ^  L

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 19:50 , Processed in 0.066128 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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