飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
( k% C# m% `/ o6 D7 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, h1 E+ p! ~# ~8 u9 m5 g- L; X! a* r8 N5 ]# v4 O$ J
struct sItem8 g& v* N, e, z: n
{
8 U" V* p+ H/ ^DWORD dwId;! X4 s- t- y& v. ^, U: U- @
DWORD dwKind2;: f6 I% L* ~9 e' t: O* F
DWORD dwItemId;
% R  h( p7 e+ z0 C6 GBYTE nIndex;
4 y$ v& v( v7 U: `sItem(){& I+ i9 i  p! w# F! G; s
  dwId = dwKind2 = dwItemId = nIndex = 0;0 I1 V* ^, R$ O
}
8 X- X3 |, A, ^# {8 fbool operator < (const sItem p2)8 i9 w6 d  C' u
{
/ d1 U! t, O  h0 y  if (dwKind2 == p2.dwKind2)
! P5 C1 l" e1 X  @8 a# a; b  {* e4 n# L7 H+ B0 d
   return dwItemId < p2.dwItemId;
; i' {& f, z" U+ ]: ?  }else{
0 l3 u2 o) q# ?7 f) R" z& V   return dwKind2 < p2.dwKind2;
7 T: K8 P- y: B; u' L$ A  `  }
. K& ~5 N( P& B9 G/ p  _}  L3 V2 g- h& U+ H. P) h7 g
};+ o  z+ B3 H6 u: S  O: N
class CInventorySort; M1 l) I$ n9 Z
{6 }: L5 u" q6 j. Q) B( ^4 H3 D
public:
) |) l. z! S# Q( a! bCInventorySort()* ~. ?; K8 _* O+ c4 W; w
{
6 h" u# z% K) K, o' P  m_dwPos = 0;, V- x# i6 L; \* T" u9 {5 B
}' K6 T3 \, J+ p1 a* P; A
~CInventorySort(){}
( B% i& h1 F. H" t! i, k1 v8 [private:( H5 E  a: l2 z1 n" d3 @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息/ Q, N* u& R6 X- R9 V
DWORD m_dwPos;
: ~% _; {. J' y( U/ j$ Apublic:8 i& b6 T# I: x
void Add(BYTE nIndex)
: D# [9 o/ T4 @$ C3 D{
, U( O' |) @9 @# Z) w  if (m_dwPos >= MAX_INVENTORY)+ d8 \& w/ K' \! c+ F
  {
# g- o; f% M' o: E3 \   return;
0 D) j/ \3 G5 {. Q) x/ U  }
1 X2 r4 ~) w& s# t2 o  m_Item[m_dwPos].nIndex = nIndex;
" o: i7 R. h5 w, c# v/ S  m_Item[m_dwPos].dwId = m_dwPos;
9 Q" v3 @' v" \6 N  n$ L" h  m_dwPos++;
3 \4 n9 j% v! `- [4 o}
  {9 k, p2 g) v4 h) U  fBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
" R; q& c3 w2 X4 s{
$ E/ q% S. i! J; S  {- t  for (int i=0;i<MAX_INVENTORY;i++)6 o) m$ F, G% T8 M; T8 _* f
  {
; u$ @4 @, }5 w' h4 v+ L" F   if (m_Item.dwId == dwId)& ]% r9 ^2 q0 x7 u
   {3 b4 T5 f8 P2 n
    return m_Item.nIndex;+ _2 P# e1 A9 X$ M  k9 \
   }
% y" k1 e3 C* ^8 `& h  }
5 ^8 ]( `5 u' q& \! R, p  return 255;
3 z  H7 w9 R! C# B2 S}
5 [- L: a' z" b4 }void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! ?" U! c" Y' X( b" P0 S{$ x0 d: N6 W0 ]( H4 H- m3 C
  BYTE nTmp = 0;% A; P; h" U  W% X8 y7 m, {9 m
  bool bDest = false,bSrc = false;
# o9 k- U' F3 ^! u( T  for (int i=0;i<MAX_INVENTORY;i++)
; q- T: x1 `, J  {- T4 Y. p! T- K3 }5 E1 _
   if (dwSrcId == m_Item.dwId)
5 |; M# @' p, w   {
5 J! Z" v( \* `# u0 d$ p    //id相等 则 改变对应的dest和src8 @  b4 O" N& C1 d% D
    nTmp = m_Item.nIndex;
0 T' w1 S3 k% }3 S    m_Item.nIndex = dest;( a4 F; P5 a1 @; i
   }. T' e0 b5 ~* `$ _9 Z% o
  }5 l% t5 ^2 P' f# [. J/ U
  //临时数据保存完毕,交换开始
& ]3 ^7 r( G6 j& H  for (int i=0;i<MAX_INVENTORY;i++)7 B- m( \( o4 w, v# _. L2 C. j
  {
9 ^7 C% z! c, w+ [: v% C6 T6 @% s" w+ }   if (dest == m_Item.nIndex)
( q- C1 i2 N8 b% s% s* ~  m   {
! u! _9 O9 _$ _* L3 u4 Q5 B: v" R5 P) g    //id相等 则 改变对应的dest和src
& C4 L( ?8 ]8 `: c& p2 J& Z6 M/ r- q    m_Item.nIndex = nTmp;! I: j* H3 S# G
   }
& z% P5 e4 n; U  }
4 T& C; M& n$ O' p% H}
; x4 V# d: Z# J& Q0 T& Z- K! [};
% i* b3 ?9 ^+ i4 \-------------------------------------------------------------------------9 Y0 x, y7 H+ ~& ^" u( a* O: w/ [
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 ]$ F0 R* x9 j* D. O0 A搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);# u1 |$ U/ Z+ }; v7 e. i9 `
紧靠其上添加:! G# Q" y. G2 S! ]$ E7 V- W
if( pWndBase == &m_wndMenu )
1 z9 L5 j9 e0 v5 b2 j3 l$ u4 F{2 V7 c! d) ^6 d* R. i
  switch( nID )
  {) Z7 Q! F" ^2 |' a  {; p, ^: ]( @4 y
  case 2:
$ g' c+ |1 H6 I$ [; y   {
- l: H- b  r) t& `2 o( `    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
6 Z) x9 d: O* J. a5 t    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 B3 S# C  Z2 o    {, h  E6 l1 A; r  U" G
     break;
* Y& W: F' G7 I% B1 @8 P    }
' R& k4 K8 N# c* N    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)+ E8 w/ p8 W- M* }) v9 V" w, R) @) s
    {% ^5 R' P- K# b' ~0 S1 B+ d
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ E" G" v% a4 R4 M: X, g# F
     if( !pItemElem )
; k! B! h/ P9 [' s      continue;! C2 i# b9 @& Y4 u% t  {
     if(pItemElem->GetExtra() > 0)" b( R2 L; q! i- Y0 N! I
      continue;  k- A! o# P0 u$ b7 L
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) & U" v2 P5 U& \# s. F! ]
      continue;& c3 a" E4 ?2 s$ z, d8 ^9 L6 ]
     if( g_pPlayer->IsUsing( pItemElem ) )
- c5 ]  M3 Q  Z# n+ B  G/ L& e      continue;
3 U, n& G& N  S     if( pItemElem->IsUndestructable() == TRUE )6 [9 k1 m* B2 u! s8 @; F
     {$ c+ P9 d$ r$ r! x/ d  m) ^
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
/ ^4 {% L3 a  Q/ G9 W' |0 z! f5 z      continue;/ X3 P! ?3 j; B
     }
2 m1 ^" u6 K3 Y& f6 J     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ ~6 U+ z! b- D* A    }' a' z' F& a) P$ l0 W. T9 E4 ]4 }$ |( X+ }
    break;
7 D! }" w/ Q2 ?8 L   }9 a7 q6 d  F- z3 o4 N# V: E: J
  case 1:, I- w3 l; F  t# u9 f
   {& j1 N4 ~& }3 P; V: E3 ~8 Y2 u
    //整理背包
6 v: c/ D$ l4 L" t" m" Z    //////////////////////////////////////////////////////////////////////////
3 X# z8 R" N/ Q1 C& M, ]6 y    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( J7 C% k# V4 D" }    //////////////////////////////////////////////////////////////////////////
" |; u& K( }$ u* a    //////////////////////////////////////////////////////////////////////////' s: S& c" f, Q3 k; Q
    CInventorySort* pInvSort = new CInventorySort;( w* ~. N, U1 `  [: ?1 i
    vector <sItem> vItem;3 x& c0 W3 O" E# z
    vItem.resize(MAX_INVENTORY);//初始化大小
7 Y% C2 ^' s/ d8 H& W  f$ ?     //////////////////////////////////////////////////////////////////////////8 k. l* {' o; Q/ @6 [3 g, o
     //填充数据: d6 h9 H) R& u: j6 i/ j
     for (int i=0;i<MAX_INVENTORY;i++)7 `+ H" Z0 \# z8 E9 D% `2 U
     {
* d9 F4 {% O6 `. V; p4 z% n- j      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);( x, a$ L8 Z5 O. f
      if (!pItemElem)
& r& M. D4 T5 b/ j, n  u      {
' Z& n6 ^7 C+ _. t, w+ u       vItem.dwKind2 = 0xffffffff;
7 `% o9 d7 v% O7 U! S' L. ^* _" W       vItem.dwItemId = 0xffffffff;3 G( a2 P3 l6 S% L2 C5 A( T8 ^9 l
       vItem.nIndex = i;, R( D5 y7 q& G! r/ T
      }else {
5 t1 F+ }' S  q" h: g1 v9 L+ t% J       ItemProp* pProp = pItemElem->GetProp();* @5 G# \3 d# ?5 ]2 Q3 H
       vItem.dwKind2 = pProp->dwItemKind2;2 V; I! `& _  _( e9 ]/ \
       vItem.dwItemId = pItemElem->m_dwItemId;
- P# x9 k$ W, r) J1 g0 [, d, C       vItem.nIndex = i;- a/ w( ?* v( K2 {# D  G8 c
      }
# m' w0 K: d7 i6 T      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
! \8 |+ Q' ?6 ~2 V% n3 }     }
; E! d" w9 C3 x1 V) q6 _8 O     //////////////////////////////////////////////////////////////////////////
6 ~7 _" c' g# d  F; u     sort(vItem.begin(),vItem.end());//排序
7 ]0 d* s" T3 \5 L     //////////////////////////////////////////////////////////////////////////* L. U$ \1 D( A0 b
     //交换2 ?0 x, l! g7 Q% H- P2 G: ?
     for (size_t i=0;i<vItem.size();i++)
  v' P7 W) ]' i5 M9 B     {2 d% }) d' U% P! F; B8 E
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
; Q5 C/ Y2 W# ~) U" a/ f3 @& p      pInvSort->Add(vItem.nIndex);
9 b* W+ ?  p/ O" ~     }& E! U2 B& v" V3 a- T1 X
     BYTE nDestPos = 0;
  a$ L4 y9 F4 V! {' ~; G     for (int i=0;i<MAX_INVENTORY;i++)4 B2 E0 w1 |* F- k
     {
6 F  B9 ?: {, O6 X7 T      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
. e! I7 {/ h8 M3 U# ^      if (pItemElem)* [" a" N: d8 @8 p3 `( U" n
      {" Y1 @$ ]" I" J! P" j
       if (IsUsingItem(pItemElem))
4 F, X- V$ J4 ]8 f5 E$ Z* C       {
& f7 m8 K+ E# }% K        //这个位置无法放) K* c7 I% O$ n: I( B4 {6 s% L# {$ b+ {
        nDestPos++;
, p" e: O* C8 p1 F. f       }
/ ?. P8 ?( P1 ]9 k      }
0 i0 [( v. R$ h  W2 d- e0 ~5 @4 z      BYTE nSrc = pInvSort->GetItemSrc(i);
( o% w/ Z: a7 p* x, S" x& n      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);2 x1 F$ Z% v  s+ H. }0 h1 G
      if (pItemElem)" z- C0 u( {8 f1 v9 ~  O
      {
5 f: w$ p9 D% N+ R( F$ g+ \       if (IsUsingItem(pItemElem))
& d, [/ C* H+ C& Z2 o       {
' ]4 f) C* [  x* ]9 b; F6 b/ f        //这个道具无法移动,跳过; l: r! H* X5 d% [5 ^' e6 x2 i
        continue;
2 z+ c5 k1 v( o. g# w5 @$ r" j       }
' a( I( {/ `" s) b0 I9 p4 t      }else{) S. A; q4 |' G. c
       //空位置 不用动
8 f* W1 j+ ]1 J+ n8 C0 C       continue;
5 V2 @! d% c4 }1 k) ?  n7 C* j      }; f$ y- z" k; s: R% d2 M/ I* z/ a
      //////////////////////////////////////////////////////////////////////////* j/ w6 N5 D4 m7 Q
      //开始移动
7 n" s4 E* E; n2 v" ~9 F      if (nSrc == nDestPos), c9 x' v  W: f& \& e% |3 o$ e3 c
      {$ `- J( L  z! Q9 z6 @
       //原地不动2 a1 p0 {1 f9 U4 C% h$ R
       nDestPos++;
  J5 V: `* K+ p6 D" G' F+ A) H       continue;$ U* M1 M5 s3 j7 h8 D
      }' e$ i. o/ a, d5 }9 Z4 m
      pInvSort->MoveItem(i,nDestPos);/ y0 k4 L3 q  n1 E, W" i. a+ x. a
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);* R- g$ l  h9 Y& J5 t
      Sleep(5);9 G/ k  [4 f9 z6 |
      //Error("移动 - %d->%d",nSrc,nDestPos);
, |4 M; X$ i1 K  C$ w      nDestPos++;# v7 E0 @8 h8 d( V
     }) s$ \, B; s! n8 d2 ?
     //取第一个元素的信息
: g! {7 H" e$ z3 f9 X+ ]6 @$ |7 ~     /*
2 A( t  j' S: Y2 `0 S7 V& O     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)$ d; i4 O5 w8 o3 f& I
     {
! @/ d4 N: c' `7 }3 ?8 K0 e8 {      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
: ^8 F0 p3 ?+ C      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);, z: P( j; v; `# W( n$ V, {9 ]3 F1 ?
     }
: l5 A/ y. J0 P6 J6 u3 [     */% M9 C& S/ i+ F! a2 o
    //////////////////////////////////////////////////////////////////////////! u5 K( R( f$ W# s+ r
    break;- ~% C$ \& p3 l9 H
   }0 Y2 g3 ^8 r  N+ A# f
  }
) `  a7 m1 J8 z# T; p}& q7 x( [9 d. f
m_wndMenu.SetVisible(FALSE);4 `3 V1 `: n# e3 p0 F: Y
/ k8 y! D% A5 b9 ~& e3 @9 e
--------------------------------------------------------------------------------------------------------+ I5 G8 R, B! J3 U( O/ q3 u
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)5 t% w5 \0 Q/ }& X2 ]
{" r# D2 {, k9 _/ w% Z5 c/ g
BaseMouseCursor();
8 D) f& {" I( b7 D2 o, l) X# q$ q) \}, S6 Z: t0 J/ t0 h7 {
在其下添加:
) I' K1 j. `2 f! t% P( B8 d) A2 d3 m0 r$ fvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
# R; }8 ^" M; t, i& i{
' g. G* Q6 U) b+ e. G1 Im_wndMenu.DeleteAllMenu();
! ]1 C4 I, i1 N4 I2 j  O! K+ q0 Km_wndMenu.CreateMenu(this);# m  C0 @& m- O/ m7 i0 q
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");3 _4 o! [( ^2 q' J  o' X
6 z% J) [4 Q9 D8 `
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- ^" s2 q9 S7 \" ^' W
{
" T7 \3 m9 r' J" I- O  //P以上级别才可以删除所有道具8 Y& o# q6 S4 @+ @
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 e9 Z4 T- E1 n' O" B6 M
}1 j: t% j6 }) L! K4 c
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
* f" Z" `2 _2 p6 pm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
3 n+ ?/ D0 u% A, Zm_wndMenu.SetFocus();
9 k! y2 T8 p+ B5 Y7 i% Y}4 Q! A- n; ]5 G
------------------------------------------------------------------------------------------------------------. Q' h7 K  ^9 E' R0 E+ p
*************************# V/ F( b+ J5 D
WndField.h文件
7 Z" w/ _" P8 X) O% k*************************
+ K# r  c# K. h1 Q. H搜索:BOOL m_bReport;+ t+ I, J0 q# I6 b  d: l9 V) P
其后添加:1 d# t6 D3 h( u9 Z+ \
CWndMenu m_wndMenu;
% p) N# S; q8 |搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
7 m) J$ m( H7 p+ Y其后添加:
# V! F2 E$ a3 v7 q) S" ?: _) mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
" p% t7 y3 L- N7 w3 ~& ^+ ?) k$ i% B* I& ]9 M" {

) M- N' t$ l# r; D

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 08:25 , Processed in 0.074836 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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