飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
7 X* X  b% {) W/ T# _搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), Y2 d$ I# b, ~4 p
: Y9 [! k$ f! |' b: X: U$ e. U4 M
struct sItem
$ r# ~: b0 Y9 P, M# a" W8 X{
. U3 ?4 j) H1 Z/ f* h6 \DWORD dwId;' d* h7 u; F2 J% s( T& |
DWORD dwKind2;7 }& r/ Z/ f7 B4 Z0 e! r* j
DWORD dwItemId;
4 a* b; L9 s* _) |& E( y) `' t( |BYTE nIndex;4 F' [- O- b) y* `
sItem(){
+ F5 y) ]2 D; @  dwId = dwKind2 = dwItemId = nIndex = 0;9 O9 U/ r6 d: Y- ^6 Q2 u6 L- _
}! J7 U1 f$ J6 \9 @, v% G
bool operator < (const sItem p2)
" @& |! k+ Y. q9 |: c{* I" E! k( P) E( l
  if (dwKind2 == p2.dwKind2)/ M1 d& k' O. l5 ?6 c$ V: b) i
  {+ O. E5 }! v) T- p: W! f
   return dwItemId < p2.dwItemId;; D$ K0 \9 Y' `, w' \9 J4 X; \% r
  }else{
6 f7 K4 o$ K4 A/ P( }1 I   return dwKind2 < p2.dwKind2;
" S5 r  j5 |0 m: d- c  }
' F: E8 j: l9 x% a* R}0 V6 i1 J; M" C- y0 Y- S, P8 a
};9 V& p% K  E4 {4 D1 m
class CInventorySort) O+ q2 G: a8 K3 @) p6 G
{
% \/ N/ f& A0 |. M: N9 vpublic:' l* q" }6 k. C5 t6 y( r
CInventorySort()" M2 }" g1 a( n  N+ O2 V
{
  m+ U! j2 X, E7 \* e( x  T  m_dwPos = 0;: H2 V  U1 g3 l0 e  M/ ~, z/ Z) e
}, O; ]" y8 E7 C# w) O
~CInventorySort(){}
6 M/ ~, D. B7 @2 ~/ e) k( Z3 Sprivate:. H" ^% s2 {) L4 C/ O/ @3 ]
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息* k# z' n0 s# g( r8 m3 b1 }- a) o
DWORD m_dwPos;2 I* D+ _3 X  M' K! v* T' O' A
public:
, l' ]$ K+ M3 A$ Z+ }$ dvoid Add(BYTE nIndex)
1 A3 [$ S: y8 d; m( A! V  I; c{+ i, n! u5 D+ N* T- I  g* p) A: C
  if (m_dwPos >= MAX_INVENTORY)
* v  ?: u1 I8 C  {
7 U) r: q7 P) [$ X6 x7 p   return;
% @0 c: Z9 j" ]8 m- [  }
8 k" A7 r8 }2 A8 J1 N9 g" J  m_Item[m_dwPos].nIndex = nIndex;
' w, F( n9 J$ E/ [2 \. T  m_Item[m_dwPos].dwId = m_dwPos;* ?+ M; I# U* a5 ^; B
  m_dwPos++;# H5 R5 p" T$ v; Q9 x
}) N2 J( P, w2 c2 j( X+ T+ q
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, |: H" U' |5 R: O4 o. Z- A
{
4 Z+ \/ g/ J6 U+ ?  for (int i=0;i<MAX_INVENTORY;i++), i! L; L' S; W, C* f: k% x
  {
& p$ T/ f2 v: |- M   if (m_Item.dwId == dwId)+ a) o- t# H2 _7 Q! T: d+ \
   {" |) E* i4 F! B3 o7 G
    return m_Item.nIndex;, B3 Z/ X. D' k6 {
   }1 N9 Q* g5 z; d: Z; W1 Z
  }
( j$ c' q1 b; r  return 255;
$ m* p% b, c/ \}" M$ _" b9 r9 t  ?$ n) F7 j8 _& o0 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
# v$ O$ J9 ?* }* D. a/ |{
2 f6 U5 S2 P# o) U% r! v  BYTE nTmp = 0;- M7 f; W3 E% `- N6 e/ X
  bool bDest = false,bSrc = false;
" {# {7 z: A8 w4 s, \% U  for (int i=0;i<MAX_INVENTORY;i++)* b  |: E/ d5 s: g
  {5 y" }6 B4 N+ a6 g' M
   if (dwSrcId == m_Item.dwId)
4 V8 G, L0 F  T8 x4 }6 S7 e   {  l; t$ \& f3 e3 J
    //id相等 则 改变对应的dest和src% Y: D' p5 H& g) l: m
    nTmp = m_Item.nIndex;
: X) d. S. Q$ g5 B" z3 \: d    m_Item.nIndex = dest;
8 G$ x$ ^# }( z   }% q) R  z. d; P3 m! Y5 x* Y, e4 t- ^3 i+ S
  }
" x. b# h2 V) r$ |; t( ?& S  //临时数据保存完毕,交换开始. v  V' f& K) G6 s$ j9 @7 T- g
  for (int i=0;i<MAX_INVENTORY;i++)1 g: i% J6 f' |" j6 Y7 T8 d; r  i" [
  {* W6 _/ _! m1 {6 I& m2 ?* [
   if (dest == m_Item.nIndex): s+ i. F# I' x, l
   {# z8 h4 t+ s- r- |
    //id相等 则 改变对应的dest和src
% ~% E& D1 _6 I1 A5 c    m_Item.nIndex = nTmp;. y1 b- f( F8 M: U; |; v) N' g2 ^
   }
3 `) ^  }/ ~( r: D' i  }. A8 X- p' n8 x$ g* u
}
( w$ P: M8 f0 a% n, V6 I) b};% t- N- N4 m( `( h' Q. Z
-------------------------------------------------------------------------2 h2 U: Y/ [7 v" A" O! {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 K1 p8 L0 Z: w- _, s! t2 H
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
. f0 V: C& V) E8 ~* a. R紧靠其上添加:
8 P2 a* ?8 p8 S0 y5 kif( pWndBase == &m_wndMenu )6 P# g" _( b3 P3 b9 Y$ G
{4 S9 ?7 U/ I6 y: A
  switch( nID ). z2 r; g: t  U" y  T
  {
5 q$ d1 [# [+ @% Z9 O# `  H* l, j  case 2:
# t5 I* f. n" f1 r4 w! U. h0 Z7 q9 \   {
, O, E  S' y, T    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);/ L2 A4 o. X5 F0 B. S2 f/ P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
8 f5 @# N2 t7 P, X$ D& p8 \    {
7 U# _* ]- Z, W3 Q     break;
- J9 F2 H  E; J0 ]( E6 g    }
/ }; {5 Q$ U3 y5 G2 n    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
/ \  i. i6 p4 o; I* ]( ~    {$ x% ]- \0 E+ E8 k
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# G' b; f3 O5 ?/ v3 x+ Q     if( !pItemElem ): @4 c. t8 |# e7 I! g  ~# X  G0 k
      continue;8 B- K* P" B  v" v
     if(pItemElem->GetExtra() > 0)
" M/ H# m2 W( t% _& g) g      continue;
  U5 r9 J8 N$ V7 V: g4 \+ o     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
- v/ D. x$ [9 X" b9 u/ J      continue;
/ ?) c5 v% ~$ P* C: _" n  W     if( g_pPlayer->IsUsing( pItemElem ) ). T0 X% B/ H) q0 M' H
      continue;
+ V( x* m( }* _! ~     if( pItemElem->IsUndestructable() == TRUE )
$ h3 a6 i+ T' O     {
5 Z, A8 c& Z" `4 E      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
  R( d% U, ]! V) [      continue;, v/ b: H1 q( d4 m( K
     }9 k" a, l( i6 k, {
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" m+ Z# @) _# Y5 {( O    }8 x  f; I% G: ^* E
    break;7 w6 B5 x; r- _. h4 C  _/ C3 a9 p
   }
3 c) n9 P, `0 @7 r8 L* m0 K  case 1:1 R* D0 |8 y5 ^- _1 @
   {
# ?: a0 T" a# m    //整理背包
9 n$ ^" I# D# C5 B9 x# Q7 |    //////////////////////////////////////////////////////////////////////////4 p% d. i! q3 e4 G
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
9 I6 k- H' \9 ~4 i4 c  h    //////////////////////////////////////////////////////////////////////////
$ Q/ f& u+ C% ?    //////////////////////////////////////////////////////////////////////////
, s1 r5 g" Z1 v- S" T    CInventorySort* pInvSort = new CInventorySort;1 M6 A& f& q) g: g" c6 f
    vector <sItem> vItem;9 n3 R5 I6 N3 p+ `' F/ d
    vItem.resize(MAX_INVENTORY);//初始化大小# E9 n' V. V+ c0 Y& `, @
     //////////////////////////////////////////////////////////////////////////
4 n' O, Q7 G& I$ v" S1 }     //填充数据
9 l' k% V. p$ H; F( Q" E( l" y     for (int i=0;i<MAX_INVENTORY;i++)
  |2 F$ u  k! n     {- h! I" _. @" Y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& U  U2 J6 A: Y: T
      if (!pItemElem). l5 I0 m( d2 _: I1 ^$ D
      {
1 |! z: }! d- c" U3 [* }& {       vItem.dwKind2 = 0xffffffff;
' T, X' I1 u0 m6 r- K       vItem.dwItemId = 0xffffffff;0 Z8 Y# N, Q/ D. h! \
       vItem.nIndex = i;3 d4 F/ w  \. m% F3 E' p
      }else {
7 j0 G9 }& [# M  \$ Y/ C       ItemProp* pProp = pItemElem->GetProp();
9 z) M( O4 e# ?8 D! o       vItem.dwKind2 = pProp->dwItemKind2;% |' N( ~0 K, V* U5 }' a4 h
       vItem.dwItemId = pItemElem->m_dwItemId;* I) _" ]! {6 A2 V2 F2 R$ T
       vItem.nIndex = i;
8 I* y# ^% S2 H8 o- Q0 ]9 T3 |      }
9 C# h% W+ s5 B1 j) z2 a7 N      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' G- G3 Q: F4 T) p
     }/ |/ ^  E9 w: _3 T6 k; j, X
     //////////////////////////////////////////////////////////////////////////
; m3 c; u# g; r3 o7 j     sort(vItem.begin(),vItem.end());//排序
2 e' D* g( H( t     //////////////////////////////////////////////////////////////////////////
  g6 \; l0 b0 q: @$ k9 d; @/ \     //交换8 _: b; ?- `$ Z3 p  t" V
     for (size_t i=0;i<vItem.size();i++)& {5 Q( R% ]/ Y- e7 \+ w
     {
- p6 w5 n4 a4 O/ I# E: P, L5 z3 d5 ~      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" m# E# f9 e6 M
      pInvSort->Add(vItem.nIndex);
% g+ N' ^) C8 g3 b     }! \- }" r$ l. a  h8 t' X
     BYTE nDestPos = 0;
0 b' s: P8 N8 B6 r     for (int i=0;i<MAX_INVENTORY;i++)2 }, @# Z4 l6 q  R+ N: G
     {  G, S4 a, ]7 L  q( G8 o! Z
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);/ t0 S- P6 V& @* z8 O
      if (pItemElem)5 y! a# _) u1 w1 u. y  Z9 _! O
      {: I7 u# m) m  u: q
       if (IsUsingItem(pItemElem))
2 B/ Z+ L& s% ^2 s7 @       {# l5 Z$ V5 R1 `; W- D9 r
        //这个位置无法放1 A0 D1 y2 ]0 I2 f# i5 @
        nDestPos++;& f- ^  Z, R; ^
       }% y1 Z& Q& x" i4 p& Y) d# _
      }
0 r: T, }& t- j* N# h) X2 u: d      BYTE nSrc = pInvSort->GetItemSrc(i);) O9 v' f3 B6 @& b3 F# I1 \7 r
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);6 S( s  J5 M# y) y/ n% h" x
      if (pItemElem)
2 O# N% }% z6 q: n+ N      {9 K# l! e3 R( n+ v
       if (IsUsingItem(pItemElem))$ x4 U* R0 s( \# s" j
       {( t; `- J6 F5 L- |
        //这个道具无法移动,跳过  O' ]. x" L; u7 W; p3 S
        continue;; ~: J$ ~2 P3 o. d
       }
4 w" {. t  b, z; _# }* Z      }else{
+ Y* ~, k! P" b8 k       //空位置 不用动
! ?/ T" I5 ~$ S) p       continue;9 {* `3 |- C9 y  `- E9 B- ~
      }
5 V6 T* R% i3 Y6 C      //////////////////////////////////////////////////////////////////////////
( h1 A7 ]3 }' ^8 c" E      //开始移动& u: t3 [& Y. L4 y4 ?7 [7 _
      if (nSrc == nDestPos)
- c( d% U1 v, m% V- V      {" m% ^! k/ P8 |  H0 Z  @; `+ F/ q
       //原地不动
4 _: N7 x: v2 f' Y( F" z$ N7 G       nDestPos++;
' d. L) K$ q; ]% R2 X" s       continue;2 A1 T1 [) w( w" a; r/ ^
      }" d/ M- ^  C1 A
      pInvSort->MoveItem(i,nDestPos);: m+ J6 F! {, S5 Y  x
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& F5 ?* {: K8 `2 c      Sleep(5);9 ~+ V" n% ?, C. `4 G2 n
      //Error("移动 - %d->%d",nSrc,nDestPos);
: {0 c. J. Z0 n. A6 [. C      nDestPos++;5 i3 `9 Z+ r3 p) {2 P6 C! L) j
     }( p! G, |6 S4 y( [% c3 \7 h7 `
     //取第一个元素的信息! c4 P, c3 N" I3 y- L6 v4 ^
     /*3 L& M& p6 ?& x+ E' ?9 z
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
( d  F+ _+ k* [5 w. Q     {; m7 t/ H; _4 \/ _& g
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 q1 [, J1 R8 z7 o) Z1 J0 g      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);4 I) X/ e4 a7 c" ^# v; V/ V* g/ W
     }
) L4 d! S! K7 \& k9 U     */
1 L; Z7 z& V: F) K1 A/ b- F    //////////////////////////////////////////////////////////////////////////
% R* A( _" `1 \6 @    break;
. `& W: x3 r! B: O; u& Z   }
. D( D( B4 W7 ~% S, G  }
$ z, H1 H4 ?" ~0 i) [}+ Q' t5 d/ o7 h0 G; T
m_wndMenu.SetVisible(FALSE);
! k1 B& A9 z  c$ h; p' z! J! Y
/ [  J2 ^4 Q3 n1 W# s4 j* g--------------------------------------------------------------------------------------------------------
2 ~  m! U! O/ ]2 M+ S5 D搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)9 E" P* R- j* s* r3 B
{. Z7 @0 m! E5 m4 O/ T( V
BaseMouseCursor();
% ]) Y( U8 E, c  x: W" R7 b# V6 y}
# _' R/ X3 s2 i: W2 U在其下添加:
. a* L* b4 Y9 o! x; U% a3 u6 fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)9 l3 e2 u( r, P. j9 c; V
{
! `3 O7 @0 M2 Z( N9 Zm_wndMenu.DeleteAllMenu();
) `6 }6 j7 Q- em_wndMenu.CreateMenu(this);
& d5 k4 t8 e- E5 cm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 n  P- X( Q  i) a5 ^# [
: g- F. d8 _' x8 zif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. b" u( D2 J" L% U{. \* E  T9 F. G6 w" W
  //P以上级别才可以删除所有道具
7 r4 W  Q! i- h3 c  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
: m; K; [0 D8 z}( ?: b  t9 |5 }4 X8 P3 E# S2 P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
; j# n4 ~8 W; m7 E1 f( P! Y$ wm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
  H: c; j. o* e2 n( a# lm_wndMenu.SetFocus();
: p" }( i  P5 w7 H8 T}
' H; s1 k8 _3 W( A. s------------------------------------------------------------------------------------------------------------% ?# k- F- u9 P! o8 o' W
*************************/ N4 @7 a4 I/ H' q- A. y7 z
WndField.h文件
+ I1 C$ u, m# }) r! z' a* K5 p*************************$ a  W3 }  V; p* v1 F
搜索:BOOL m_bReport;
$ Q6 J7 ^' B; ~& n& a其后添加:0 K3 S; z* n$ I2 @, i# N; S: e
CWndMenu m_wndMenu;
9 g: D' O% o0 J搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);+ ^& m' G" @8 r% @+ V( y/ W7 k8 H
其后添加:
2 x. C+ c& h( Y1 Rvirtual void OnRButtonUp(UINT nFlags, CPoint point);- K& A9 d6 P8 E8 C  r9 G! n

' n" _  t4 o1 \5 m' d: O! t6 N% D; x9 k; g( v  m

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-7 14:44 , Processed in 0.207007 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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