飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件# |  [3 h) ?9 G5 b0 E
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# I% _7 |( x2 o% Q: b9 o& K8 e8 d2 I0 ]: ]" R# K
struct sItem& L6 G+ \% P: [* A2 n/ Q" M1 h
{
* A. O7 p& F$ G4 p3 ZDWORD dwId;/ ?2 e; x; O/ F& e+ R
DWORD dwKind2;
% Z9 S$ `& y$ t/ E2 D, V- ]3 KDWORD dwItemId;, h: Z) Z) F) A' L4 e# [. i4 _
BYTE nIndex;# T$ T9 M4 r% I
sItem(){7 V0 l9 V( i* X& }$ }( }6 q' Y
  dwId = dwKind2 = dwItemId = nIndex = 0;
( e5 K0 V- l( D7 z}
: c3 Y. z, R! T; x( @$ f5 M/ Ubool operator < (const sItem p2)( x- X! J3 c9 r& @1 d2 W2 b  C; W4 X
{5 @* X& C4 K# j8 N' J# ^
  if (dwKind2 == p2.dwKind2)
; M1 T& A, R; I; ~# ]! ~1 L  {
+ T/ W. Q, p# u! B   return dwItemId < p2.dwItemId;. R! F6 d) {& X  A, O. V) X
  }else{
. F8 J" H* |, B) H% I; d  z   return dwKind2 < p2.dwKind2;+ e% J( x/ H4 k2 I6 t
  }( r, q  s6 |. o
}3 A& [" Y+ u$ W( B+ x+ f
};4 |2 C6 \: k- Z- l
class CInventorySort6 K+ Q$ C: W' K: c2 L* D& r
{
4 J: o! \4 T$ y& J& d! c" T9 c/ T7 opublic:2 P& R" q% c, F, W: s/ `+ Y( N# A7 F
CInventorySort(), ^3 h+ o. b4 D2 B5 H
{
9 J' ^! `5 J) ]! U- a  m_dwPos = 0;
" m8 b. i" Q+ u& C8 b, q}
$ d2 ~0 p" u. p& @% C! U( Y~CInventorySort(){}4 ^7 A, N. [! U4 ~
private:
' E3 E( t; z2 x* G& M. P( FsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ \7 S* G% r6 eDWORD m_dwPos;$ M8 o7 \' D$ s' H1 j
public:. [) O; A9 K. A2 o; @
void Add(BYTE nIndex)
' ^5 g6 l& n8 j$ a4 Z. Z. t$ q{; b- {4 P% t0 @: h! H" e& d
  if (m_dwPos >= MAX_INVENTORY)0 ?1 U" H# Q. o2 z- C
  {
7 e# @+ Q+ Y4 f5 F   return;0 T1 T- \( O4 ^6 `* ]. z- p$ U' a
  }1 h( n* J9 ?/ E4 m
  m_Item[m_dwPos].nIndex = nIndex;9 R! ]+ h) F9 L$ {7 j4 ?
  m_Item[m_dwPos].dwId = m_dwPos;8 Q* L! K, g7 L" j% j3 B# m
  m_dwPos++;6 H9 ]8 |5 P, p" }" q6 ]1 \2 m
}) S. `% j$ F9 k% |
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 x1 F3 K2 P3 M/ S- R+ W
{
6 `4 n5 x$ \- x2 H$ ~  for (int i=0;i<MAX_INVENTORY;i++)
" B% @" a9 I7 I# S' c) I: e  {
8 M3 p) `) P! a) [: ]   if (m_Item.dwId == dwId)$ J) U, }% v( K9 M
   {
+ X: h/ ]& O; Y+ I  N    return m_Item.nIndex;
$ E3 N' E) _5 j8 ^1 Y" Q& B   }
) }, m8 T% ^, N( i) |) V  }( `/ n: |; N0 |5 ?
  return 255;
9 B! p+ U2 j6 i- f  w}
9 G! {( ^% w! `/ {0 I5 ]void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
+ i7 |3 t0 j+ a5 K+ V$ K{
6 i4 C7 F2 Y* G! I8 J; |  BYTE nTmp = 0;
/ v( `& s/ x  r. d4 h) ~- r  A  bool bDest = false,bSrc = false;
5 H, t2 P, O/ X7 w2 t# k: H# X  for (int i=0;i<MAX_INVENTORY;i++)
! I) g1 E$ W- a; ~: L. x% w& J" e) G  {
7 S  ~2 V  _8 |- Q9 z   if (dwSrcId == m_Item.dwId); W9 d- W' Q) L# r- |6 s4 N. ~1 X
   {( v# s$ B, r9 X  x* v# V
    //id相等 则 改变对应的dest和src- `8 A3 t  u8 z, j5 N" E3 W2 \
    nTmp = m_Item.nIndex;
6 L4 R) E2 C3 j1 X6 S% Y+ X; o+ M    m_Item.nIndex = dest;2 H4 X7 G) ~1 ~/ i, \1 w6 L2 l. r' W7 A
   }
& E% b8 @7 T) _: D! L7 I  }
! v; M$ s" A; t5 h# ?# ~6 C% X  //临时数据保存完毕,交换开始' d7 v3 [' ]2 X7 e
  for (int i=0;i<MAX_INVENTORY;i++)1 N/ a# t' T6 i( U0 V7 V- s0 j
  {3 a# F) I8 A  u' s& o1 u
   if (dest == m_Item.nIndex)
: R" g  W# e; a+ p) ^% B! y   {$ k8 K8 R9 S" J6 X
    //id相等 则 改变对应的dest和src
% F: J* [3 y4 B" r    m_Item.nIndex = nTmp;$ P# M+ g: Z* @) t. F
   }' l0 F# ^6 u; r- f! T
  }4 }. W- b- M0 @" `! T
}
' j% m! m8 p6 G' O};4 ]6 v0 p8 N7 A
-------------------------------------------------------------------------
; \8 ^) C/ M" o; h: W依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  R/ X0 Y3 Z, K, x8 M2 D4 Z' }# E搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);3 X$ G4 M  Y9 F
紧靠其上添加:- Y: {- {" H7 B0 P& F& |5 m
if( pWndBase == &m_wndMenu )
  G5 u/ }7 S- P6 b: N2 F{9 ?$ d. r1 T3 n7 I; u# D8 p
  switch( nID )4 ?3 i" s5 y. N8 }9 u7 @8 u  h
  {. s9 P7 K( K$ ^
  case 2:
* o: D- Z9 u2 I, [2 E   {1 Q+ F3 [7 ^, E- d
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);* S% `  X" v# w1 S# {/ D
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ V% j$ ~6 t( p. ?    {/ r8 n! e, h( Z, x
     break;
1 O; o+ E' a# U' D* [- Q, e" }    }+ q, M! r# f1 M7 x3 U" n! o; L4 N
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)8 V1 h7 t# S, ~; `) y
    {
6 A9 T8 b. k: m+ x5 f$ M1 l" y" l     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" \. X0 y) \9 J/ O: @
     if( !pItemElem )6 M% f7 W6 _& ~+ J# @
      continue;' g8 u4 ~$ \  W- G% n7 |- d* J
     if(pItemElem->GetExtra() > 0)1 S# \& m2 h; s3 h% p$ \, @
      continue;
& Z1 Q0 m: u4 c& z     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
/ k. T; h3 [* _, }      continue;
; e( }# l, a4 b) ^7 z     if( g_pPlayer->IsUsing( pItemElem ) )! V1 @# n  q) G9 ]* ^
      continue;
' Q' @6 ?9 n/ T4 q3 ^2 j5 A     if( pItemElem->IsUndestructable() == TRUE ). W! v( L( @( @
     {
: d. M7 G, m" H# h0 O* w( V2 I1 U3 }      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );3 X  `% ^3 W/ W& ~# E
      continue;; A" D3 r2 `; P( G3 a$ @1 X
     }" @: ]3 z$ \, ~+ a, v
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
- G# g! Y$ x7 n, @' E8 O    }
0 ]9 @+ u9 E4 G' S! W    break;
8 p9 ?$ p+ n; f3 z  f# C   }' q  t- R! o2 e/ J2 L
  case 1:- k! Y& a0 P, B
   {- a2 i3 J5 O. R4 `0 K
    //整理背包& F6 @3 N5 e* b3 {9 H  N
    //////////////////////////////////////////////////////////////////////////0 ~4 ?7 @/ ]- l0 U* C8 p  z
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 N0 A% t  @- y& W9 K$ `    /////////////////////////////////////////////////////////////////////////// Y4 N6 d, f% O6 a& [
    //////////////////////////////////////////////////////////////////////////1 Q# w: K+ A* u0 J. [
    CInventorySort* pInvSort = new CInventorySort;/ q1 c) u1 l& ^! J9 Q/ h
    vector <sItem> vItem;
. ~$ Y2 W" J* T# b" m4 _. a    vItem.resize(MAX_INVENTORY);//初始化大小5 Q# E( C- O/ b% N( y- V2 h0 d; O
     //////////////////////////////////////////////////////////////////////////
7 z& V  p# K0 Q3 X2 ?     //填充数据; m+ X& b: @( s: Z( ]' V
     for (int i=0;i<MAX_INVENTORY;i++), y2 Z+ G( I7 r1 o2 n- g; N! D
     {- M2 l3 A( `5 a2 {
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);7 T7 T: m) o& t2 B3 l$ o
      if (!pItemElem)
. ?4 f& `2 v( I2 F5 d2 @      {
0 @, ^# p1 A. c6 T8 ~/ T/ `       vItem.dwKind2 = 0xffffffff;
( r8 A& o3 ^1 w- z+ [& m% i7 o       vItem.dwItemId = 0xffffffff;
- U5 \# l2 g% M8 }6 W       vItem.nIndex = i;' ]' \1 g0 I9 d, p4 G1 y
      }else {) s/ D$ d' n' ~5 @  R5 D; W
       ItemProp* pProp = pItemElem->GetProp();
6 e7 m; B/ m! \1 k       vItem.dwKind2 = pProp->dwItemKind2;2 v8 I9 h/ K  R+ {0 L5 c9 ~/ I, ~
       vItem.dwItemId = pItemElem->m_dwItemId;! H5 L0 H$ h6 J. B
       vItem.nIndex = i;
# q( `' b; ^- `: W: e6 C$ c5 T- m      }1 H( C: G2 A$ {8 J7 A( r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% p& m3 Q7 U4 m1 N5 s
     }0 _* H  O1 z/ P. L2 L
     //////////////////////////////////////////////////////////////////////////) M! b5 R  h# X; B+ q$ I1 O
     sort(vItem.begin(),vItem.end());//排序
( e$ a; u; i9 p4 t  t     //////////////////////////////////////////////////////////////////////////1 T7 @' \. K( K
     //交换, ^& E$ R8 g1 y8 t. [7 g
     for (size_t i=0;i<vItem.size();i++)
- K+ l: ]* D4 [* F     {
3 t8 R( u  p- @: q      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: H7 `% w( W: E6 A      pInvSort->Add(vItem.nIndex);) l9 ^) n4 ]" U
     }
" e5 q" n  H- E0 |  }" X5 U) ?) h     BYTE nDestPos = 0;) Q$ @- r2 T$ t7 Q7 m
     for (int i=0;i<MAX_INVENTORY;i++)
" Y) O1 @, T* v9 P' M$ h* n     {( G- z* }0 I% p! S7 v
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' [. w' ]: L8 L* N      if (pItemElem)4 T1 Q0 ^6 Y1 v' b* U
      {+ l, _4 q- X0 x
       if (IsUsingItem(pItemElem))
" m% t0 A8 b5 T* x* _3 G" g  N       {
+ n' E& c- b$ A/ P) Y' A        //这个位置无法放
4 {& _; @  \+ |3 \) f( ?) z        nDestPos++;: E- m% V  j+ ~) F7 @4 x+ K  V
       }& O# E0 ?4 @& O3 c2 J3 b" h7 A
      }3 K! `! M6 G6 N# G1 L1 t1 q3 b
      BYTE nSrc = pInvSort->GetItemSrc(i);
' i, k& t# g: [3 u; l: j      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
1 c! `3 D4 m8 l& g      if (pItemElem)5 y. i7 a% B- ?4 j. [+ I3 p
      {9 J( ]6 Y1 q/ t) e
       if (IsUsingItem(pItemElem))
% ?4 h4 K& t  N0 g! c, t+ e4 n4 S       {
! ?* y4 `$ b$ V& v1 x& l4 e& g        //这个道具无法移动,跳过3 R4 F) K0 C- ?+ U) K
        continue;
# F3 G* W& {: @       }
8 y; T6 k3 b/ \. f$ I6 g5 s" O# g# R      }else{
6 i! a( B8 y# F  y9 l2 k       //空位置 不用动  H( w( Z3 O) v- U% @2 X
       continue;) j5 [$ J3 t: n, p: F- X# A& }9 v1 ~
      }& ]; c& [5 z: s6 t8 I
      //////////////////////////////////////////////////////////////////////////
* D) g4 P% T0 W* r      //开始移动5 q  H! n$ c( ?5 E- E3 m4 T8 V
      if (nSrc == nDestPos)
2 n4 z1 F# h/ T7 k. C* ?8 j      {
" h8 \( T8 S( N  x       //原地不动" S, D, V, s3 V. |6 ^& J
       nDestPos++;
: ~/ s+ e4 g4 v! Q) K# f% q       continue;
8 w* U0 m3 P6 L  o  ^/ Y& K7 N      }: W, f. T8 i: C7 U$ @/ H
      pInvSort->MoveItem(i,nDestPos);6 M8 E: i4 l- r9 x2 B1 d, F
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: l5 b& R7 x8 G$ [' X) W5 r      Sleep(5);
3 r# P' y1 x# H  D' `      //Error("移动 - %d->%d",nSrc,nDestPos);
, O! v; b, W% S7 B+ E& t" a! u/ F      nDestPos++;# a$ z! e& e7 {2 e7 m6 l
     }8 m7 `- Z. r3 u  g/ }1 G
     //取第一个元素的信息
' \! o) t  a- P6 f" [     /*0 M2 U  i/ n8 |3 b; G7 y& A
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( g8 W/ t' Q) ]9 C0 X5 D+ Q. a     {7 Y4 U$ \  @; x: R$ |. I( v
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# u8 x7 r8 Z$ V! M# k
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);& ?4 ^; S8 D# n) ?, }+ N
     }
9 T6 Q7 w; _, ]. Y0 A" i     */
" f, J# I5 c4 H8 v    //////////////////////////////////////////////////////////////////////////
" }) o3 D" d; P+ K& J. v    break;
, ]( Z2 I( e$ k: m% r' O4 H( ~( c$ k   }7 U3 N) F/ w  S. y  z+ u
  }
+ d% P/ V) e) y) w5 U}
  h5 B, g3 n5 H% \4 H! S' Rm_wndMenu.SetVisible(FALSE);/ D! c1 w% m+ Y+ V9 A6 l, `
* I% q4 {" Y! x! K" u& C' _
--------------------------------------------------------------------------------------------------------
) q4 q( Z* {( ]2 c9 |- U; Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
8 q& F; N- Q$ @) N* t  ^3 b{
3 h, Z9 P$ V- M; i/ VBaseMouseCursor();. e% q! ]  {4 k6 F$ {! ^/ l
}
9 x) A2 I9 p  h' |在其下添加:3 [( y% c/ Y1 \
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
7 G: T7 ]# ^" ]% p, ?" `+ ~& s4 p7 a{
1 ^: @. E1 o! km_wndMenu.DeleteAllMenu();, q% X, l$ T& m) j) @
m_wndMenu.CreateMenu(this);
8 S. J  j" X$ ?! Z6 Bm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 Q8 y/ Z1 Z4 d9 ~7 f8 W
+ M* C( U2 D9 I. I+ j$ k
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& v$ y' b! ]5 I* B) s& n{
! n8 U1 O/ g3 \$ m& A  //P以上级别才可以删除所有道具8 t6 w) d+ ?$ B! \1 m3 N; L
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 n+ A& d! I! y0 L}3 b0 u; l; i. |/ I1 h, o! [
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );% Z2 _% I$ a  \& g5 Y+ \# v3 g; C
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: M) v) ^/ V/ G$ O0 i
m_wndMenu.SetFocus();
" |; C( I6 w2 K" {$ ?1 V}
& A( I* ~# k; }; w- g' ^# [0 X3 t------------------------------------------------------------------------------------------------------------
# o- H" ^+ n# Z' e7 ~*************************
9 D1 V. ?( l# O$ Z* O" G8 LWndField.h文件9 `& z) a0 o( Y
*************************
& @6 q; I; u3 d  W9 C$ v% c搜索:BOOL m_bReport;
& k3 m& O, i! k* O其后添加:
6 p2 l, \! V$ {CWndMenu m_wndMenu;
7 ~8 h. f: Y9 T) s+ \搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
9 R- k+ |: ]2 j. A: r9 P$ u其后添加:) S. z* f" }5 M+ l1 s
virtual void OnRButtonUp(UINT nFlags, CPoint point);
# }, x  V- |0 R! w8 Z- ]
$ y. `/ W! v  }, U% A+ b9 q0 B' c& Y: R. `4 m2 E6 S# R

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 21:30 , Processed in 0.077947 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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