飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
# y/ Y: k% x8 o; B搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  W4 L9 o' V4 G# g! R/ w0 [
5 N# h" E7 }0 Q% s% dstruct sItem
" m" }* x0 l4 J9 Y! b5 _' Y{
. p% C1 w: e: R, M  {  mDWORD dwId;& a5 |9 S0 r5 K6 ]7 S; _# w2 j
DWORD dwKind2;
: u/ L" \. ]" g" ^4 l5 W! u. Q* oDWORD dwItemId;% \9 s  x/ V2 E+ [% F) {# e: o. k7 b* N
BYTE nIndex;# y; q) y0 z6 P! A2 z% |/ q
sItem(){
! H" u7 k/ b: X2 g+ u1 M2 v  dwId = dwKind2 = dwItemId = nIndex = 0;
( {& D8 F/ L: v: v* I6 I( v}1 g' I3 i; W( F8 x0 Z) O$ J; b
bool operator < (const sItem p2)
. h1 ?  {: @) `$ Q{
: O* e6 r3 C2 P) f, \- s  if (dwKind2 == p2.dwKind2)$ X" L) O& P" R: e; f
  {) A) I' O- X- \) n
   return dwItemId < p2.dwItemId;6 A( T" B0 f. e
  }else{
( }) r9 J/ i1 E6 q$ k0 v   return dwKind2 < p2.dwKind2;
2 s6 Q4 e8 E" q# b1 U  }
0 s8 L" q0 y4 h; y+ h}) a' `- y% x( i; m" Y7 e! q8 Z$ E$ b
};
: J/ d) K# J2 W% z- Dclass CInventorySort/ _* f# W6 @/ }0 a! Y0 R8 f/ Z4 U
{! K- u5 c2 Y% u
public:& Y' a) W: t# N& S; B# Q
CInventorySort()
( J7 |+ K6 F$ |7 ^- K/ t$ V$ X{
, E: R! x% V8 g+ v, a  m_dwPos = 0;5 W3 V% G" W1 u% A1 q
}
6 c  F( s! @+ H~CInventorySort(){}
9 H# G$ d: l3 q# @; sprivate:
) K( O5 Q" s: [2 M7 s% `7 h) [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
+ m: y. Y% [. v1 fDWORD m_dwPos;5 p- X( k/ n, O( |
public:: r$ M2 P! ~; s, m7 s  a: o4 \
void Add(BYTE nIndex)
5 e' c! C) d  z  T8 p{& m/ m* d& I" f# e
  if (m_dwPos >= MAX_INVENTORY)
3 E) C! N, J9 d- F' i3 p) U( i  {2 l7 E; M! p6 S" F' K/ j1 w" ?  n
   return;$ {) ?8 {& `* b3 E& c8 w0 J/ k% z
  }% j$ [; l; H* u; O- i
  m_Item[m_dwPos].nIndex = nIndex;
, w/ X% D' b# v) F  m_Item[m_dwPos].dwId = m_dwPos;
+ V2 h0 M6 v5 e2 b8 ^  m_dwPos++;* [0 @$ S" w9 |0 B! |0 k; W8 L% G6 T
}  s! Z1 w3 z5 r( A3 y% x
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列8 E, W( m/ H) X, U
{/ J$ }( a; X' {* K  ~* c
  for (int i=0;i<MAX_INVENTORY;i++)7 K$ y, b4 B/ k9 x
  {
4 j$ U" u0 `7 \5 x, k6 ^   if (m_Item.dwId == dwId). Y3 v5 c+ U. @& A  r
   {# |3 y8 h  I- N- {
    return m_Item.nIndex;2 h9 _" O6 V5 T& Z
   }
- @' b& g6 m2 L  }
3 ]7 e4 ?; }3 N0 O; W& y9 \4 v  return 255;
- j2 f5 {' J+ m( b# w& t& r}
% E8 h( _' D, u7 a6 q- s9 Hvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! T+ `; p7 B  o' J- S/ f{3 m1 w, X, [+ f
  BYTE nTmp = 0;
' ~: z: j. c/ i" j  bool bDest = false,bSrc = false;+ m( a6 {% s  H4 H/ }
  for (int i=0;i<MAX_INVENTORY;i++)4 D% [# j, R9 h3 F/ W
  {
: w& p5 v. Q; N; M% u2 ~   if (dwSrcId == m_Item.dwId)
9 ~9 x( g9 Y( e6 P4 y4 _   {
4 C* L+ [( D$ j4 _4 ]5 U4 b7 X    //id相等 则 改变对应的dest和src
2 k( v8 G8 B$ H( w' t2 U; C    nTmp = m_Item.nIndex;& Z$ V% z0 M9 e) y# P" z
    m_Item.nIndex = dest;
) Q0 y: Q$ y( R9 x" h3 Y; b   }
% V, j# u4 b! n! ?! }% k/ {, n  }4 Q/ j6 L9 ~9 K9 |' J  \. r( Q5 a
  //临时数据保存完毕,交换开始, \6 S; l, ?7 ~% C% P
  for (int i=0;i<MAX_INVENTORY;i++)
* `: \6 u2 C8 w" O& u  t/ h  {8 [" X- f- _$ x- z; V) i8 ]
   if (dest == m_Item.nIndex)% u6 L" e+ W7 s- E: h
   {1 `% i' n" \! K9 X
    //id相等 则 改变对应的dest和src1 F9 i& G) s) c, |: {' m
    m_Item.nIndex = nTmp;0 a4 J, a0 R) ~( g1 z6 K
   }
6 N, O; `9 \' J3 B  }
: N+ i# x! b& `5 t: O}. x: s+ R( |; Y% Q/ M" r/ |5 _& |
};
& c" n  B( o4 E2 G-------------------------------------------------------------------------! i' S; ^5 ~0 c, O% g' L& D
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: x4 B  C% N, b- e- G& l& i" M搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( M% |8 k& D3 w
紧靠其上添加:+ W. c5 I- d+ }' a/ i; n  J
if( pWndBase == &m_wndMenu ); S5 d9 ]4 b) ~) a( N1 \
{. Y+ s" w" m% H0 z  A+ C
  switch( nID )& p! X2 x4 y1 V+ _+ S! d) ?
  {
% E! Z) e# Y# e7 |  case 2:, C4 D5 G# z, ?2 r- n) z$ J! h
   {
" k: n- v$ g$ ?2 j; r    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
+ R4 _2 L. y( s; V    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
+ m# D% t; h- i5 z    {3 C# Q7 V8 J7 S. ^$ Q% a. r
     break;
- q( V. O0 X  A- u' @4 b7 s    }8 N, R2 {7 ]7 M# [! {
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
2 w) k5 S) Q5 u. Q; `* S7 Y. g    {. K" [$ \2 u5 a& _) A. o. I
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
) L: F' q' X9 o! L" H     if( !pItemElem )5 o, t# Y% u& Y; H* A% d6 |
      continue;, W1 U7 x2 h: N1 h
     if(pItemElem->GetExtra() > 0)
7 T5 ?3 K/ q  ^& {9 |4 \      continue;' V2 {% ?  C# H, k8 S7 ^3 T  L: V
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
, q3 E& A6 s9 [* c5 h      continue;
. R: V7 e6 c; ]     if( g_pPlayer->IsUsing( pItemElem ) )" b" Q" E, s5 m1 Q; K6 ?9 }
      continue;5 o2 o' r* y+ ~/ N6 G# d
     if( pItemElem->IsUndestructable() == TRUE )
5 ~3 W" C* {8 x$ {# V4 u. n     {% I% J/ ?' A2 p1 b5 I: n8 O1 ~9 t( j
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! j3 n  k. ~+ H& V' |, ]% ~% w      continue;
% |% p! j9 v9 p! h     }/ }  u& t( J/ V3 n
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
, ?* d' K: E  M6 L7 W4 Y2 F    }
0 Y$ D9 [) d7 R. j, ^# o    break;
, y9 r8 d3 B+ K& ^2 G   }
5 u  a% V9 \% j; q  case 1:
, H7 Q: L+ v7 c% m   {
6 x# v( h7 K4 N4 F    //整理背包
- W, s+ \! G6 I, t3 m" t5 C    //////////////////////////////////////////////////////////////////////////
: C3 e9 x; G5 b% B8 c    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
; b* u+ |) m2 U  D# H    //////////////////////////////////////////////////////////////////////////# \! r) F. T5 h1 \0 u
    //////////////////////////////////////////////////////////////////////////) o: Q& c, t. j! s2 }6 m& B  ^
    CInventorySort* pInvSort = new CInventorySort;+ r* @  m) _1 E. {3 @: n, ^
    vector <sItem> vItem;
- M5 X# p, {$ O, `) v    vItem.resize(MAX_INVENTORY);//初始化大小
$ t9 O+ t; [# P& |% ]0 P0 A% C! [     //////////////////////////////////////////////////////////////////////////
! `* J. S- t0 O$ F, x- L0 R     //填充数据  |& G8 c# f- U# ^* Y( O6 `
     for (int i=0;i<MAX_INVENTORY;i++)- ~8 M- I9 e) f" u% I8 T  b" \
     {$ b" `- D2 I9 l) A' b; x) p
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);8 e; H* R5 S0 Q8 R8 C& M
      if (!pItemElem)
! A4 i- O) v& i. ?$ {8 j      {
5 `1 w; s! N4 R       vItem.dwKind2 = 0xffffffff;
9 e3 E4 {; `/ b6 l       vItem.dwItemId = 0xffffffff;
# p6 f* I) z( ^       vItem.nIndex = i;
- \# C( k7 ?4 N& E6 `3 @! A! D      }else {
9 \" t+ A- _' J( B5 Y       ItemProp* pProp = pItemElem->GetProp();+ T7 g7 i$ d# |9 E/ V( j0 Z+ X
       vItem.dwKind2 = pProp->dwItemKind2;/ X/ t* m1 K, `7 y4 D& A
       vItem.dwItemId = pItemElem->m_dwItemId;3 i) o# X/ K+ e0 r6 `( c3 `
       vItem.nIndex = i;
- |  O0 d& }0 w1 H      }
; S$ k/ i8 u% D; d) X/ d      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);0 w- s& {' F( R1 g" B
     }
6 r) m  @1 V; T# M0 m     //////////////////////////////////////////////////////////////////////////
) Z' ~1 E' _* Z( y; g3 Y     sort(vItem.begin(),vItem.end());//排序
. T* i5 l' R5 J6 R. X     //////////////////////////////////////////////////////////////////////////
: q# m! f, z! e     //交换% V6 F6 Y# l; m6 @
     for (size_t i=0;i<vItem.size();i++)
' [# J% F6 Z$ i9 T* z/ v* x     {
: ]: K: |% n/ e, U1 B6 s2 C      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. L8 ?( V  }6 H
      pInvSort->Add(vItem.nIndex);
5 Z( S2 H" Z% H3 E     }3 J+ Q  k$ a, @4 n0 |5 e
     BYTE nDestPos = 0;: k8 S7 J) L- B! Q& K% d2 s
     for (int i=0;i<MAX_INVENTORY;i++)
% t' z% w/ c' B  g/ c7 }, |     {
2 ~6 m! J) u- z% ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, i" T# D! u* a3 ^
      if (pItemElem)
% U' g* `$ ~. {* g) i, O6 ^      {$ z6 {6 D7 }( u5 Y* {
       if (IsUsingItem(pItemElem))
- J% o+ R) ~9 ?9 ~       {
/ H6 H* U' J/ H% F3 ]        //这个位置无法放2 e0 D2 j4 F4 K
        nDestPos++;
- F( R: t2 j: z) D- ^       }. e2 w0 }  o3 ^" [; m' h3 ?
      }  k% A* R8 J( ]
      BYTE nSrc = pInvSort->GetItemSrc(i);' O' D7 i. I; `2 {7 ]8 B% @* @- m
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- x7 G7 c5 b- v; g. ]- X- r" L) @
      if (pItemElem)
. ?2 I: M) R) W( Q+ p: |7 _+ G$ D      {
! d& G$ C+ \+ H( M       if (IsUsingItem(pItemElem))
+ A( F$ `( c% W       {
7 U( Y+ h8 c$ ?: g' J+ N  f        //这个道具无法移动,跳过8 \' M0 ]! x) T+ G+ j# Q
        continue;$ g, F% k5 C! J- ~) N
       }
+ E. D5 L/ k, r2 p( A1 }$ M# ]: S      }else{# C: z( [- b3 k4 f
       //空位置 不用动' c- y1 p3 N3 |! H4 P: J
       continue;
' B0 S! F* Z9 C+ J) W      }
1 t  \% l8 g7 ], t5 Q( R6 p# M      //////////////////////////////////////////////////////////////////////////
5 F+ E! ]; w# S& F% X8 Y1 r      //开始移动
/ l* \* u2 O- [2 ?4 o7 V  d      if (nSrc == nDestPos)# W/ U1 M. f% G" f
      {0 E) Y! ?3 C6 R: E. I6 _& X
       //原地不动
1 |8 e' r; s/ y, x       nDestPos++;5 D0 H7 n  v7 |1 `  B" {0 X
       continue;: r2 O8 T5 x- m0 _% U0 e- b$ F0 G
      }& n( o+ }: P+ H# B/ y
      pInvSort->MoveItem(i,nDestPos);
: N7 Y, `: m  |5 E* e. E" C% L/ W      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
$ B4 J) _3 ^4 I      Sleep(5);
. o8 h% f. g. m) G3 {      //Error("移动 - %d->%d",nSrc,nDestPos);+ r: T/ i  s3 V$ S8 ~: d( g
      nDestPos++;; o4 B2 r3 \! l& I: l
     }9 Y$ t. J5 I8 G* y2 k2 u
     //取第一个元素的信息
) v' F* |# n3 R4 y1 t" {) H     /*' t6 m. T8 d, R
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: f# s. |1 R: b8 j: @     {
+ I6 n* ^2 H& w/ T9 o      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- V: `$ h& R+ u9 V      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 X# t% L9 d" u% A- r. p# d" l     }
+ N% V5 s" y9 V: I& V0 T& r# P     */$ [2 c  f; Z8 I; O5 O
    //////////////////////////////////////////////////////////////////////////
( m% X: S6 l6 ~0 b, p, D    break;
$ q1 W( b, @; X6 Q5 d! L$ ~   }
$ q* R5 q+ _* S" h1 i( Q4 }6 ]/ S  } 6 Q! z% r" V& t7 k3 m
}
7 F. @/ A9 Q' O4 T: j! ]m_wndMenu.SetVisible(FALSE);9 v0 a, c( i2 g$ ?( ?2 a0 }

8 _" R$ @$ c; v+ T: e1 s. a--------------------------------------------------------------------------------------------------------: o/ t0 k9 v# M0 `6 N
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)4 u2 L! E$ T' Y: J
{
# U. g1 W; I4 L( a; ~BaseMouseCursor();
  z! ~+ c  G- {5 M}
- D% d- K" k8 s0 Z3 Q5 a0 _# v在其下添加:6 I2 J! x3 N* J1 W  h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
+ O9 V- r$ m6 L6 `. R{! h. G  D+ O* i0 t$ c. f
m_wndMenu.DeleteAllMenu();, k0 j5 {9 |/ i3 p0 H& a0 b5 U' X
m_wndMenu.CreateMenu(this);9 L) d8 K& y! }8 D8 Z, {
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 N7 X  ?) v' x2 e
0 i6 g9 C4 a5 p' B) u; W- ~4 Y" iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 Y6 y0 M! y- V& t$ {  t7 Y* a{5 Z- I' U  B; j4 G+ E0 d/ f0 m
  //P以上级别才可以删除所有道具7 E! J# K1 w4 z- y' H
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");( J  c$ n+ ]" J' n0 s1 I
}
& D8 r5 B# p$ `1 [6 Hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );/ Q3 w) E; b& M6 P; p5 K9 e
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- G1 i5 ~" _( Y# F5 Dm_wndMenu.SetFocus();
( G. f/ q) @& y" g}
1 I0 P6 c, P) u" r/ m' z, \/ `------------------------------------------------------------------------------------------------------------
, C6 n- R& r4 h4 y& I+ g5 Z; X( ~*************************
  l5 l+ V5 q/ {* ZWndField.h文件
" W4 |) _: g( K% J4 f2 g*************************
" _# X, F, }* @" r8 W# O5 [$ j/ T搜索:BOOL m_bReport;
* ^' a! g/ b+ V- J1 C$ z5 ~" w其后添加:
: }7 @0 l  V1 u+ O4 qCWndMenu m_wndMenu;- s" Y7 z9 k0 m# d0 N! J0 @
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& D. ?/ N2 \# v4 @; {
其后添加:. ^5 Q" C, N  q4 [" a
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 [$ G7 B' \! o
" t. _1 Q- j) @4 y
& H) @4 z* ^' X

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-19 00:10 , Processed in 0.064307 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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