飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件* |' V. s$ t- G7 S
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )8 r. ^; H* [! \4 w
* z% B: |/ _* f
struct sItem
# y6 A" |: o- K2 Y1 S6 Y9 W{
/ W# x% a4 l' h* H$ S- FDWORD dwId;
' Z% L# n" C+ g/ L5 x: Y6 JDWORD dwKind2;$ W! H8 r  G: @$ I! U1 K9 ?
DWORD dwItemId;
) z. h/ J. P. D4 J" UBYTE nIndex;
; @8 @; n! M* j1 s1 s  VsItem(){" N; d' Y+ K( Z# k
  dwId = dwKind2 = dwItemId = nIndex = 0;
0 Y" `9 T; ^" \, A}& |9 C1 T! X3 m' d- I1 g5 ]; x  a
bool operator < (const sItem p2). `4 v9 d* ~) e* j/ T  l# W" O
{, ^6 o5 W8 [: A, c: U0 n
  if (dwKind2 == p2.dwKind2)
. J- l2 m  M! u/ B+ v' ]  {
; a. k, U; I( z   return dwItemId < p2.dwItemId;
+ I+ D. x6 c7 [4 d, ^  }else{
2 d1 E# z, j) p5 G& c/ X   return dwKind2 < p2.dwKind2;9 x# x5 |0 X( }# A) ^
  }' x3 o9 }* ^$ ?
}4 m$ R  p, \9 B* e3 d( {
};
. o. x. r& S3 n# i+ w1 gclass CInventorySort- c) \( b+ |0 e: d# z5 u8 I
{* r2 c5 R) C, X# w+ G9 g. A& Y8 v
public:
: W  {- B* M7 ?CInventorySort()
- q- ^+ A- U1 U$ Z5 a- x{
* A) O' H) g' V9 x, j9 `- [  m_dwPos = 0;
' f3 q7 ]+ r5 t}
% ~' u' Y. o* U% m~CInventorySort(){}7 R/ f  L% f4 y4 ], f- X
private:$ U6 U: m% J5 f3 j9 D
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息, F4 K; P+ V; A. k  U' _
DWORD m_dwPos;
1 _2 m: v7 l, Z# h5 H4 Mpublic:
7 `) `( t. ?7 i6 [  i4 r) qvoid Add(BYTE nIndex)7 }' @1 |. U" ]3 ?  q
{& L/ a  [0 V, q! V
  if (m_dwPos >= MAX_INVENTORY)
; s3 K& X+ Q  e3 T  {0 a  j2 f( V+ |
   return;
& @' x  Y" u6 N7 @  }4 O- R" R; R/ v( K
  m_Item[m_dwPos].nIndex = nIndex;5 |1 s4 ~5 s3 Y5 g: h* Y
  m_Item[m_dwPos].dwId = m_dwPos;3 ~0 u) f! }8 m% p: l1 K
  m_dwPos++;5 U) q5 }& G* e) g$ _: i3 }# v4 Y
}7 S# b: s- g; o9 ~4 E2 D$ _$ O) o
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  Z# J* ]9 N" q3 w/ Y{
3 e# u& g( d( Q% g  for (int i=0;i<MAX_INVENTORY;i++)
, q3 w, b8 T& O- B2 e, f9 C; e8 \' N1 Z  {1 r; v. o( I" g4 L6 G1 F
   if (m_Item.dwId == dwId)
* |" H0 S3 O- T  J7 U/ [# n   {
& K8 R9 O2 g. b1 `  D    return m_Item.nIndex;
( W6 U7 Q+ H3 }9 t/ p/ K   }- l6 y5 o- B& u! s5 R4 e8 m
  }
4 U# I! ~( g4 b) W5 C  return 255;
/ [2 Z" N4 q* r0 N5 f; Z7 v3 l+ E}
* V) V4 m: K6 A2 j" Q* yvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ b/ W( Y: V2 [% z2 ~{; m/ l3 ^; W; ^) R8 {% z
  BYTE nTmp = 0;; {3 D7 c- h3 b  _" K' C
  bool bDest = false,bSrc = false;
( Y* K4 T0 k& ]& c# o. P  for (int i=0;i<MAX_INVENTORY;i++)
( p# u0 |, y. l4 R2 z  {: U/ s7 l* `, X2 [
   if (dwSrcId == m_Item.dwId)
  U/ X/ w- m# v. R0 t3 U   {9 W% W* Y& J  \0 K6 Z7 s
    //id相等 则 改变对应的dest和src: R  i0 X; j( i  e1 {
    nTmp = m_Item.nIndex;
- c, B, _! v' L    m_Item.nIndex = dest;
7 o2 ?, Y. p5 ~: b0 L% \   }
0 F7 D6 A# n$ |) y) s6 U) g. P  }7 s& Y7 b) K9 q) X% I. M# N
  //临时数据保存完毕,交换开始+ l+ b0 v' t7 J. _8 t  p# M
  for (int i=0;i<MAX_INVENTORY;i++)
6 v7 B' C5 J  v& A  {
! ]  c' w% b  v2 n   if (dest == m_Item.nIndex)
, Y2 |7 P3 x, r' J8 N8 v   {! w6 e. v/ W( Y; l& z  |
    //id相等 则 改变对应的dest和src
2 d  |" l; I/ x    m_Item.nIndex = nTmp;# ?: k6 M" ~$ a8 a" A1 S- a& t
   }
. p5 U! l. K0 Y8 b  }
$ b! P- H' a( J4 m7 K}
# w( A  F' f2 P' Q( W1 Y};% D" F3 i3 l/ C, u7 F, @
-------------------------------------------------------------------------. ?+ K- q+ D  l- I% G6 Y; \! S. X+ R
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* t- d5 n: I; f- c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 m6 [8 Y& U5 u
紧靠其上添加:
/ d1 M3 `8 P) Hif( pWndBase == &m_wndMenu )
- ~2 s" F$ {; o{
% t7 o; N( O; L# ]  switch( nID )! G! I9 r1 R4 W1 s( O
  {
% @" J/ `, F  O+ E. I2 R  case 2:8 Y: H8 Q# ~$ S% T
   {9 `! i1 r8 M3 U6 I; n- J+ Q
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);2 j! p, w3 R- q, d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' s0 [0 v: B& \' v, x6 D
    {+ [. p: m; M. `
     break;$ C% `0 P$ e5 @9 G5 K. l2 X/ \
    }9 _% H8 M2 e6 b2 `" ?
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
, @* U( ?" ]$ `3 S- W. m( k    {
6 ?8 n) P# h+ m# U$ R  c4 _  B     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 \( x  T+ E& C- H0 q( W     if( !pItemElem )# U" x6 h( [2 {5 O
      continue;0 s5 e6 p  x* L$ X
     if(pItemElem->GetExtra() > 0)/ V# V, S% Z- S3 f
      continue;
  I; {& W  y) v$ I- M, ?3 V     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
' T! a6 q& f7 R+ z& _, o. A      continue;
7 H7 K* C3 h( ^4 a     if( g_pPlayer->IsUsing( pItemElem ) )' C! O+ Y, \* x5 W# Z& M! j
      continue;# I" S0 T, X/ f: @% X
     if( pItemElem->IsUndestructable() == TRUE )
! ^4 |5 S1 I" n$ _- F1 E; _1 O. @     {
1 N) K/ r8 w( k$ V1 L( g+ x6 X      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 ]& m' ]# t, t& Z% f
      continue;* w( b9 Z' D* z) ]: R  E8 E2 s
     }
. ~" h( L; |- K4 c: `0 e! c) T* ~. w     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* @7 y0 {: r2 c2 |( _7 ]8 p    }
5 G$ q  ]1 o/ f! M6 f! ~- F    break;
9 t2 }2 B' \- B: m9 z   }3 o5 W; ?/ G. i6 Z' ]: g3 p
  case 1:
8 Y+ N- E( \, F4 O8 R9 G) W) ~   {% E. D: j+ q7 o4 o+ v
    //整理背包% {2 w: a( z4 l" P' @6 G7 H
    //////////////////////////////////////////////////////////////////////////
3 V- {2 D7 G& U" y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( W3 U* e% S( f    //////////////////////////////////////////////////////////////////////////& H9 p  _- e* `9 o, w7 p
    //////////////////////////////////////////////////////////////////////////
+ s/ F& d; w. E" u/ s  b    CInventorySort* pInvSort = new CInventorySort;
6 k$ D- l5 j. _    vector <sItem> vItem;$ B" C0 F9 x" J7 L# M4 H
    vItem.resize(MAX_INVENTORY);//初始化大小3 k2 l7 x. X) E6 ~- I
     //////////////////////////////////////////////////////////////////////////1 o& a3 B  \' d1 M$ X; ?
     //填充数据8 X& B( C' A$ Y
     for (int i=0;i<MAX_INVENTORY;i++)
% r/ j2 B6 J  j; B+ \     {8 w: z/ I; r/ G$ E
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* r1 J$ g7 I' T6 e! ~' Y      if (!pItemElem)
: V5 c$ h  F3 [8 g1 _; n      {
9 D+ b% v1 Q& K3 g) v$ y" v. C       vItem.dwKind2 = 0xffffffff;: y# J* t# X+ j9 v4 o9 a6 `
       vItem.dwItemId = 0xffffffff;( P* F6 R) S8 K( i
       vItem.nIndex = i;/ t3 t0 {, e' M& [  e
      }else {9 H4 f% h; A+ R8 Q! x5 }
       ItemProp* pProp = pItemElem->GetProp();
% w2 H( B8 e% Z. n$ s# A       vItem.dwKind2 = pProp->dwItemKind2;
" k# U* w/ _( d! E       vItem.dwItemId = pItemElem->m_dwItemId;  {. l# J$ D# p. S" A3 R
       vItem.nIndex = i;# j1 r. a! O; W% L
      }( o/ ~) N3 q) ~' ?; {9 T5 }
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
& u( h  o& d) t9 W: T9 m     }4 D6 {+ j+ L) [5 t# ^. d
     //////////////////////////////////////////////////////////////////////////2 ?* a2 y! r0 V! v8 V$ j6 m
     sort(vItem.begin(),vItem.end());//排序
9 b. [2 Z: }  Q6 i# }8 s0 ?0 w     //////////////////////////////////////////////////////////////////////////
+ n7 k6 F. x# K$ q# H5 A     //交换" E3 a1 ^' p# \/ e5 B' v" K1 t
     for (size_t i=0;i<vItem.size();i++)
2 I5 C4 S( ~/ S* z) X! ~# D7 V     {
2 v! d& Z9 Y3 w' _% Q2 z: T      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, w+ ?$ k. x0 l( H; w( j* P      pInvSort->Add(vItem.nIndex);0 f0 }' X$ p* k, J  F
     }3 m. e9 h, D' n
     BYTE nDestPos = 0;$ f3 A+ B& l: T' f/ T
     for (int i=0;i<MAX_INVENTORY;i++), A2 S' ?9 ^- f/ I
     {' }% ~7 b9 ~* i3 T. r5 H& _1 q- n
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
, U  h9 X+ B3 A) _0 v      if (pItemElem)
  p1 w& O4 y( U0 K# y      {. q7 s' r- A* f/ Q+ I2 Z; d3 `+ n( e
       if (IsUsingItem(pItemElem))
3 F/ l( @7 C+ y" w2 k3 v       {; d" C& g7 Q! S, Q5 x) Z
        //这个位置无法放9 _- x& k! j6 M3 G8 C% D
        nDestPos++;
  b" O9 k* |: s( x9 B       }
& M: C2 O1 P! I3 l  B* h      }
6 U3 S7 V) @, t. r      BYTE nSrc = pInvSort->GetItemSrc(i);
  a5 o+ x/ Z6 X" w      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, b5 N" F& A4 f3 ?      if (pItemElem)
. @0 q- @! z4 Y/ A2 u% a      {$ q8 a  h( T; M3 O6 B) ^- d
       if (IsUsingItem(pItemElem))6 X( m  b8 f' g7 L
       {
3 K' [. A/ d* F3 I0 d/ ~        //这个道具无法移动,跳过" H7 h1 y3 o, `/ l: X
        continue;8 q* L. M8 \% M  y" j
       }
% e  \5 _0 K* y      }else{
) `$ g# r& w! v. T       //空位置 不用动; q8 i* L6 h6 }$ u# i
       continue;0 Q. I) A0 V0 w! O
      }) j" z7 J; |% \. K
      //////////////////////////////////////////////////////////////////////////
: {/ f5 x4 k7 e9 o6 N      //开始移动" }4 _3 Z0 [( q# D3 E
      if (nSrc == nDestPos)
$ V& G: d" E: j6 Y" r6 y2 M2 k      {; c" f1 |! d; s8 _2 l5 g1 \# r% t
       //原地不动$ P) Y" k5 X6 M; u3 ]& ~% q
       nDestPos++;
; i. K6 O$ J6 l: f( V! R! `       continue;
0 ]+ s$ U9 u' [, b& M8 M      }5 k- T/ \9 c5 R7 y# o
      pInvSort->MoveItem(i,nDestPos);: k1 w) _, @- \4 t- Z# U/ w
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" J: w) P7 [2 s$ `3 p- J      Sleep(5);& n  T" R' c7 M6 s
      //Error("移动 - %d->%d",nSrc,nDestPos);- h9 `' h$ n$ N3 b+ Q
      nDestPos++;
$ e. W9 t# A; {$ I     }
8 y3 T  o$ T- Z1 w     //取第一个元素的信息. @$ }, k: Y" s) |2 v
     /*
- @3 c9 ]% b: P4 B+ w; R     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 W5 T; E' E$ h6 S: u) [     {0 D- ]! O) _) M& F! z* {8 t6 Z2 B- P- q
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
$ `6 H* t4 b! j      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);: f8 m2 F, z' n" \, X; u- u+ E+ Z
     }2 k8 e: b" m9 _+ b
     */
! `- l( C* J# n* X5 Y$ T    //////////////////////////////////////////////////////////////////////////
" n7 M+ Z1 O  M% _, U, k    break;' @' f5 M! ^- r, J" r& m
   }
+ ^" z' x3 j$ |- q3 ~+ _% J  } 0 M; S% |% ^7 I3 R2 s) X
}3 j8 s! h" o1 N2 E
m_wndMenu.SetVisible(FALSE);
0 \6 p. W5 w" L  w5 ?# @+ n, L4 @( `' a
--------------------------------------------------------------------------------------------------------
4 `9 u- P* c: W搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)8 c( ~+ |- D+ L, \& X/ b
{
8 g- K" ]4 L+ z* j" z8 |BaseMouseCursor();: G* a3 N' C+ h) N
}3 H+ d" l0 @& w2 N' E" o  V3 ?
在其下添加:
  [5 Y3 T; G! }7 N- Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& _( r7 G8 x4 X4 X9 G' X2 F3 N4 R{) Z0 N' l0 S! }
m_wndMenu.DeleteAllMenu();; b* H: y4 c. u; p+ A% |
m_wndMenu.CreateMenu(this);( y) P/ B: R0 y/ G4 y( U9 D/ k5 {5 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
# k6 T3 I. O9 Z. r8 T# I, T% _  P) K& @$ T4 s' @
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
  t/ U( v. d+ Y2 u, g{
9 c# b# v! |3 N1 _$ T/ H  //P以上级别才可以删除所有道具; j2 J) T8 A' M# i- p# M: q
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
- ^" k3 c& u) t* v0 A}
6 f$ J' D2 E7 v) k/ }1 D* r; nm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
  G5 w0 g. x( X4 B! H& zm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# A! U" [& E1 f8 x) _2 l. r4 Vm_wndMenu.SetFocus();
$ S0 v' p: m4 k% ^$ G5 W" Q: N}
, Q5 ^0 @: n5 L$ a8 S------------------------------------------------------------------------------------------------------------+ J; E& Q( T# x4 u0 m3 P
*************************( N/ C4 o( }3 y+ r+ S
WndField.h文件
+ k, Q0 ~2 V/ g, u*************************% G* g6 \7 X! s& V. V! ]* Q/ F
搜索:BOOL m_bReport;
+ m! r0 {2 \8 ]. v7 j% t4 p其后添加:
" p* m% n3 n: u. XCWndMenu m_wndMenu;  I- y; g8 ~& P  @3 ^
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
) ?$ I  Q9 M0 k8 O) v4 B其后添加:
9 k6 ?3 _9 S2 J) n" s# a/ n% Xvirtual void OnRButtonUp(UINT nFlags, CPoint point);8 A; y- y7 e: E! T* [9 {' G& ?

( J* M2 [+ t' s1 ?( ~! h9 D! G3 \$ d7 h  H5 G' B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-10 08:05 , Processed in 0.077253 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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