飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 x9 C. S" Q2 Z0 Y" T$ M8 U; H. z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! n3 D' c( {$ e+ P, h! h! Y9 f5 T* F  Q
struct sItem, s# D1 x) L& A# C; b
{
6 o4 y& X1 |9 J! }DWORD dwId;- Y% F5 s( R9 y* D: u( ]
DWORD dwKind2;' P9 w0 {+ h- G9 U9 `% ^# I
DWORD dwItemId;
' N6 ^' f) Z6 Y. g) Y$ TBYTE nIndex;
! ~2 M" i, y% p6 v9 G& |sItem(){
0 X; _/ X4 D( u+ ?8 u1 y  dwId = dwKind2 = dwItemId = nIndex = 0;: m6 L, k$ S: |* Y. D+ m
}  }9 E: G' n' @
bool operator < (const sItem p2)0 [3 k9 u) V2 F+ B' h
{
7 x; ^. `6 ~) A8 ^- N' B  if (dwKind2 == p2.dwKind2)6 O  J' [& |* e! {0 C6 T: L# J
  {
! W! A5 L" O8 V" W' \  Q- f5 x   return dwItemId < p2.dwItemId;
( `  W# F- O1 e  h+ V  }else{( K/ o- |5 @' v% [  n* d
   return dwKind2 < p2.dwKind2;
) P4 J9 m, [1 \9 _7 K" }, F$ }  }, I9 f; x' |( Y1 Y/ ~( W- R
}
3 q; D/ Y, t1 C  |8 A" ]};
7 t5 f/ M+ \8 r" t+ s4 Oclass CInventorySort. L" m) {3 }1 o  b& s& u3 S
{
) a" h6 Y1 X/ y0 g) y( tpublic:
+ g3 b6 Q, [1 E# aCInventorySort()
4 y6 D8 v; D+ e4 j{' a5 R: l8 F" h" {4 b# [1 f
  m_dwPos = 0;
0 x; y2 P5 u% X- m, J) F}2 T# ~2 Y% M  }2 s
~CInventorySort(){}4 j$ v6 [, |1 g) r0 z1 b# g
private:- r' S  H8 S- h1 M/ q
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
: a$ m; g/ y, ]) ]1 j* W8 A( J' m. VDWORD m_dwPos;1 i1 Q% r5 r2 e! }  G  P& K* `( S
public:' t9 h8 I+ H; U
void Add(BYTE nIndex)
& @- w) O1 E8 u. @{
6 l/ U0 T$ h. l' \9 N6 a3 _  if (m_dwPos >= MAX_INVENTORY)& d. w9 q' k5 ^$ ^! D9 F
  {5 w8 F: Q) q7 J3 Z& h( c1 N
   return;
  W6 x# x# ~8 A+ n: x  }
& P; Q# B  ?, d% X# L8 c% k1 S( z  m_Item[m_dwPos].nIndex = nIndex;
2 U7 Y5 O9 k7 S% O7 Q  m_Item[m_dwPos].dwId = m_dwPos;
2 j$ I. w+ C% B' G  m_dwPos++;9 ], i- W7 p" S! P) U, f
}  e( @0 m) P6 F1 H3 R
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列5 ?) N# P& b) ?
{% b8 e( C$ _. V! H& L6 c, C; l
  for (int i=0;i<MAX_INVENTORY;i++)' Q7 y5 a1 J7 s" Q" e8 Q2 K
  {# `4 B, |- H4 h1 S4 w
   if (m_Item.dwId == dwId)5 J6 D  u8 X& F2 n6 g  ?
   {
9 Q$ ?* ?9 u+ [- k% g    return m_Item.nIndex;
  g+ Q) r" S/ o4 [  l   }
6 X- S) @2 d- t7 B& O& Q  }% m  I" S8 d- X; c( {+ f3 g% F1 a. V0 W
  return 255;. M9 z$ P3 |& b+ ?+ E
}8 A2 u# T) Q5 Q! V0 E
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
: o5 G* I  r! ^{7 T1 P9 |6 K# m
  BYTE nTmp = 0;
8 U# {  V: ~- X% B1 j9 d8 \; v  bool bDest = false,bSrc = false;$ Q0 H* a. Q$ |# g5 }7 F+ q
  for (int i=0;i<MAX_INVENTORY;i++)
6 @& c# m: A+ }* {  z4 Y4 z  {/ T" I: s5 }8 \- F% b
   if (dwSrcId == m_Item.dwId): h- o- y4 s, ^# G. b( j" w
   {7 [4 V* c# B( A: N  T6 |6 L* o. J
    //id相等 则 改变对应的dest和src
7 [& _% h) _4 p7 c3 k4 A; ?, f# l    nTmp = m_Item.nIndex;- T, c, m; s; t2 m
    m_Item.nIndex = dest;
$ G0 B6 V+ H& ~: t" J   }1 H0 ?) y! L8 y. S( w
  }
* l  \6 T+ ?' v7 i. g/ d  //临时数据保存完毕,交换开始
9 K% K+ k. q* |1 u+ K0 V- K7 c% F  for (int i=0;i<MAX_INVENTORY;i++)
  W1 w& K/ X: M/ ]1 X; P5 N  {
; P7 S0 y5 q" v& P6 h   if (dest == m_Item.nIndex)! c4 i1 i6 f8 ]+ Y  x! i# y
   {
! |! K1 z' i3 @3 P  |0 d    //id相等 则 改变对应的dest和src: T0 H7 X& n3 Q* s9 g
    m_Item.nIndex = nTmp;. a" A% |* z+ S! D# s
   }
! Y0 M; k) t7 J- t& @( Y' O9 X0 z  }, i/ G3 ~( C, e' W
}( M/ t3 `% M( h
};3 v- a1 q  V# x' J9 p% i5 ^
-------------------------------------------------------------------------
, M0 p# e( K) [( ?依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
% D& ~7 p" M5 i搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
  T  M6 N' Z/ J- k, Q紧靠其上添加:
0 y% s7 B7 h7 `+ d1 {if( pWndBase == &m_wndMenu )5 X$ Q7 _5 p" E1 T
{
4 N1 B* P1 a8 @$ h3 ?* V# `/ S  switch( nID ); d* ]; \7 a6 M7 t+ z( e' g6 m
  {
  G# U- p9 D% a+ U) L- u  case 2:
3 t8 Y) O7 U; G9 e( z2 u3 {   {
! N7 b/ n/ b" s  g. f5 l6 B8 ~    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);3 U6 D" C/ N" i
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
' G1 u& F8 v: f; T2 |% M    {
# Z2 Q1 d8 a  i/ x  Y1 |" r/ ^     break;
0 ?5 i; l: \5 X4 _; C, N( B    }& u% ~3 D/ q1 T, |5 i4 R" ?
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); |( f9 l9 K6 w+ f$ x- ~3 l
    {# X- _7 h0 o0 M) n- Q# v
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) W1 C8 d  d4 j0 ?) E: o     if( !pItemElem )
$ ?! z+ T! z) ~8 n, y, c, ~, O* U      continue;
' g& b5 @; p8 {9 W' V     if(pItemElem->GetExtra() > 0)
6 @9 [% \5 d6 F& ]2 i& A/ z) P      continue;! L9 v' S$ K" P! _% I
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  w4 K$ X* W8 ~      continue;7 _1 Y- o5 C0 h2 ?! \" y0 e7 H6 r; w
     if( g_pPlayer->IsUsing( pItemElem ) )! l" Q6 M0 w; Z2 f9 |: e, H
      continue;
8 |) C8 R/ L# R     if( pItemElem->IsUndestructable() == TRUE )
& B* L. `3 ]8 B4 ]     {7 y, _: Z9 Q* c$ s
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
1 _+ C& D0 X  [1 B0 I      continue;
: n1 g/ y/ g7 e4 M' h     }& D: `8 D' h" ]- n, m
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 ?# R4 R( ^4 f+ |: |/ O8 ?& y3 U+ Y1 Y    }0 ^* S! z1 [% k5 z' {
    break;
/ m" c6 S7 |3 v) R* r" {$ `   }
. W9 L1 A" N$ T0 y  case 1:
" E9 o1 D1 G9 X# Y$ M4 H+ w   {# x# {: ~. G4 ?2 K/ G
    //整理背包
/ @& T, ?+ c" d$ J* T, j    //////////////////////////////////////////////////////////////////////////
7 M$ V" u$ J) Q9 O    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 a* [  E6 |! J9 x    //////////////////////////////////////////////////////////////////////////: P( |% v% ?$ D: ]2 t( A0 E
    //////////////////////////////////////////////////////////////////////////
5 b, }- D: h' Q9 H/ Z/ Q    CInventorySort* pInvSort = new CInventorySort;3 U2 O3 E, D2 ]* w4 ^
    vector <sItem> vItem;5 d0 H5 o- N3 J) G. j
    vItem.resize(MAX_INVENTORY);//初始化大小. O, S; o/ B- M# F) E% I# K4 x
     //////////////////////////////////////////////////////////////////////////
- ?8 f2 p5 M8 {" G, |     //填充数据
) c4 v9 \& O, [  H     for (int i=0;i<MAX_INVENTORY;i++)
+ |) P# U7 ]& G" V& l% T     {. O9 X( Y- Y- u) a
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);4 z) S) {3 W  N, _1 \; z
      if (!pItemElem)1 q* k. v: s* g. w0 \: L
      {2 Q* @' P5 ]* k. A; N( x9 y  C4 A
       vItem.dwKind2 = 0xffffffff;
. ]4 r# _& r! }$ y3 o! S       vItem.dwItemId = 0xffffffff;
7 b6 d* S3 E8 M. Q6 f1 ^       vItem.nIndex = i;
2 U. _; ]+ T4 D% g7 t( m      }else {! J& }( g  \- h$ i! j! T
       ItemProp* pProp = pItemElem->GetProp();" e3 [9 c& u! G% ]
       vItem.dwKind2 = pProp->dwItemKind2;8 l' H6 m+ S( }. s5 F, r2 n
       vItem.dwItemId = pItemElem->m_dwItemId;
$ s& ^6 ]) G' ^- X+ V  r: p       vItem.nIndex = i;: h: ~$ X: S' w9 \' A, `
      }
4 P! @8 ~9 j- f6 e6 z( [: o      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 `4 a* E6 Q1 O0 O- v: Y& c
     }
: x; S/ ]: U" j. r, L     //////////////////////////////////////////////////////////////////////////
8 `3 F3 G; f, p0 y1 y' q2 m     sort(vItem.begin(),vItem.end());//排序4 A8 c, L, N5 ^1 y/ ^
     //////////////////////////////////////////////////////////////////////////$ ?+ N6 c9 \4 a
     //交换
! K. _* r$ r. `9 Y     for (size_t i=0;i<vItem.size();i++)
$ u) w/ l- a! W4 I7 `     {2 R$ O+ p: V  Y1 o: ]! i/ g
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);8 N6 A6 s0 V% E! [7 K
      pInvSort->Add(vItem.nIndex);9 K+ x% X) j( y5 w4 N
     }
. e- G' A. f0 n     BYTE nDestPos = 0;4 ~- j) [9 A) U0 V
     for (int i=0;i<MAX_INVENTORY;i++)
" E" O4 _( r$ M5 K/ K+ Q$ M; E" t     {
( t- n! s' E4 C% P& |" P% g9 `      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);# D8 Z# Q5 E' k% I6 B- W9 O2 C9 X
      if (pItemElem)4 d! ?: i* `8 T$ a
      {
! g+ f9 Y+ I( {       if (IsUsingItem(pItemElem))& e7 L) d; g" q% o2 t
       {0 ~' G' l2 i5 g
        //这个位置无法放
$ ?% p0 o0 u0 n, C0 W% V        nDestPos++;
, T# C9 X/ t/ o0 c' F: Z) \% O       }: {4 V2 z: b  H) z& D5 l/ Z' k2 p
      }
: A. T6 `4 F- _) K, d  K& @      BYTE nSrc = pInvSort->GetItemSrc(i);! ]& B: ]$ @+ g/ z" h# [: ?
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- e' n5 p; k3 W  C" e) d$ {2 a
      if (pItemElem)
4 r1 q! D8 I& m2 t      {
1 }# w1 k) _8 x) h2 q7 {6 @       if (IsUsingItem(pItemElem))
; [& I% e- A* |       {
4 T. T; k! n/ M3 Y' I$ E        //这个道具无法移动,跳过& H9 U! |4 x+ b$ Z. _9 N% s
        continue;) }/ ?! H. r. C; q3 o7 l( J& L
       }
4 J+ [3 B$ N: T$ C& D4 X      }else{
) M) e% G/ t' ]. l# s& T: {7 P# V       //空位置 不用动
2 R2 q& x1 k9 S. o       continue;
* g2 `9 X! Y& i      }
! J4 A8 g, R# g- N* s      //////////////////////////////////////////////////////////////////////////, _  n' L" {7 c
      //开始移动9 _9 L: b2 o% v1 Q$ @8 E' _' i
      if (nSrc == nDestPos)
0 z% I9 _% T: Y( ~. Z2 ~) ?: z      {7 g: ?$ h7 Z* o. i" }- o0 t
       //原地不动4 a* o+ z+ n. k: O/ f; M% k
       nDestPos++;' q) N3 O; g: F! D, I4 @6 |+ f
       continue;
6 E$ M  G% J; A: x' U: B      }
- ?* s* j, L& x. w2 e9 k      pInvSort->MoveItem(i,nDestPos);4 J. r5 w9 i- Q( Q
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
2 i5 t7 ]$ u" T6 P4 h+ C      Sleep(5);
4 i" G2 D' z0 F' L: J/ A9 x      //Error("移动 - %d->%d",nSrc,nDestPos);
% Z7 |! {9 }/ W      nDestPos++;) V' l& Z. ^# K& X6 a
     }
$ v  H$ r. W. F     //取第一个元素的信息
+ h  `" K( m: {& m% ~- I4 i" i, K9 i     /*5 p8 _% d* P; {: o9 |
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
3 F9 A2 c5 l7 C! A" \2 t0 ?     {
8 t+ ]! n' _/ k1 A& |- j2 E4 W      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);$ \* p5 s5 y7 ~
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);2 ]7 ]9 Q4 {# d) F" g
     }' V& `; f' o# E/ y1 e
     */
  o# y6 s; K% W    //////////////////////////////////////////////////////////////////////////
. `3 m/ R  e* Y! X& a. _  |    break;
9 B, e: i8 u8 b. i$ T3 Q" L   }6 o( N% L3 h0 j( Z& x/ z; w$ r9 K
  }
6 Y& Y; b2 d# R- `" P2 F}
* @; Z6 q; z" _1 w% am_wndMenu.SetVisible(FALSE);
4 E9 s8 u; F+ q& {3 ?$ W
# a# Z- M& e  @" ]/ v' z* n/ C--------------------------------------------------------------------------------------------------------  T) e1 r, T8 g( j% @
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 O- B# H$ ~2 ~: Z& J{
2 V  Z% [9 M$ n2 m1 O/ NBaseMouseCursor();. r+ c' d) t: F' l& m# k) K9 V
}
' D: L! S! Z0 e8 J. @* e在其下添加:
3 S+ y7 L8 M- k8 x) Y5 a2 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
! y; \3 b7 U) i1 }{
3 {2 @) q# N6 A7 Q* {) Om_wndMenu.DeleteAllMenu();
9 t- \0 O# r5 V3 s$ D5 }" nm_wndMenu.CreateMenu(this);
1 k8 D- ~% U6 ^+ h5 Qm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");( c9 X0 R6 d6 T; r2 L

6 r$ m+ m5 a, s. `( ]8 Uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
2 D  A; [9 o0 Q. J/ S{
* N% t5 |/ h* I+ a  //P以上级别才可以删除所有道具
, a$ ^/ s$ \/ g; u2 [  _: p: }  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");- X  Y3 `+ N" N& m$ J1 C
}2 s+ `; T: z3 `2 A+ |, K
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );9 M6 `+ q7 ]$ h  C* T
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ {  r! f- ]( f; em_wndMenu.SetFocus();
) v# e4 T4 t$ j) `0 E6 {}" H1 [4 S( H2 n! l. S
------------------------------------------------------------------------------------------------------------; l" W1 D% I" W/ y" O: M1 l8 \) v
*************************
& @6 |9 s' H+ ~) U4 _WndField.h文件
4 W6 N  n# C  \% S" |% h*************************
1 i- C; S: r8 c  D$ v搜索:BOOL m_bReport;) @) F$ |8 d+ N# m6 l9 `' y2 g
其后添加:
# {- H: {7 }: i7 tCWndMenu m_wndMenu;
5 V# Q( ^- @& t/ s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);1 f* Q( J+ ~2 O6 S2 Z
其后添加:
3 `, X& f  n! M* B; o  N& q) }virtual void OnRButtonUp(UINT nFlags, CPoint point);+ h. \8 I4 E: G& r/ ~

) o- a* C6 ?6 A) i+ L; h
# \" K8 e9 F* ~- t$ J- ?* f1 W

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-25 09:03 , Processed in 0.073494 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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