飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1092

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1092
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件2 Q* W' j8 q- b8 k; i7 x7 H* n1 V$ [
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; ]' N8 B2 P) ~9 k3 r; l! D9 L, n9 w: A
struct sItem% g6 X) r5 p1 _! ?" ~( q. W
{
' d9 @  S* N9 X4 b% IDWORD dwId;* z6 v9 Y) h% j6 a& `
DWORD dwKind2;7 n" C0 g& p. Q! f: p1 Z" P
DWORD dwItemId;& m' k, N' D& I% |, |
BYTE nIndex;
8 f8 D& L$ x# a: U  ^$ z" K7 B6 YsItem(){; O! ^# u* \5 y1 Y* u* l: D
  dwId = dwKind2 = dwItemId = nIndex = 0;
- J7 B- p  x% C9 d}. W& Q+ ~$ m. u! s  C, |+ s
bool operator < (const sItem p2)6 h$ ^2 V* q. |4 b8 i) P$ P
{2 _( {6 B, t  e, r( Q1 v
  if (dwKind2 == p2.dwKind2); r# \$ n- u0 _
  {
! b) Y0 P% `: I+ i4 n& S   return dwItemId < p2.dwItemId;
* E- t, K) {. c' m  }else{$ f9 _# @$ e: V. D9 W0 R2 w- U
   return dwKind2 < p2.dwKind2;) ^" [5 I* q& j: J- o% v
  }
7 p( r3 y! ?# p. G% G}0 i/ o4 v' k5 R9 i: |, \
};
) q& r$ m  O8 Z: ^4 N* }" |9 Lclass CInventorySort
" t, k: q: V# g/ v6 ?& j# h% j{% O+ N7 h. r; w0 e8 r9 Z; `2 h
public:- I/ y- W1 M  p5 ?' q
CInventorySort()
/ K9 g9 {, `, @& D/ l( X& `) l' F" T{- K) V, Z3 H: K6 ]7 f3 N% p
  m_dwPos = 0;: ^( U; c9 o7 V& j' `  w" V. s
}
; _' D( I" _1 L  o* L. W; E9 E~CInventorySort(){}
8 D* \6 M- N" z2 M' T/ nprivate:
  b$ e0 B7 p- g0 k" ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( c# y2 {& l! ~+ @" S
DWORD m_dwPos;
/ {) @  ~5 }0 O4 `! R# u4 e, k0 rpublic:9 R9 m) }0 }7 e1 _* D
void Add(BYTE nIndex)
) s3 g& ]) _, m( l* m{
, w$ H" v7 M+ k. K+ i( R/ w  if (m_dwPos >= MAX_INVENTORY)
' z, Z. N; }% }! c  {
4 V* z8 p. U8 Y$ l   return;
1 V3 N! n# V2 F; C  }. a7 o, E5 C7 I" L4 _" f
  m_Item[m_dwPos].nIndex = nIndex;
/ n- c4 R. O2 z% l5 ?, j+ j0 W/ Y  m_Item[m_dwPos].dwId = m_dwPos;  i0 b: e! ?2 F  {
  m_dwPos++;7 |! K( b# T0 l) d7 g
}4 r) s! ?0 S: ~$ d3 \! ?8 O* D
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 {0 Q* R5 \% P: ^, r: O/ i2 I  x# ^
{
- z! G) l4 Q0 a/ S8 f7 ]) {  for (int i=0;i<MAX_INVENTORY;i++)
# Y( D3 a0 e5 d, a* I$ G  {
* i, H% v& b9 _; b) O   if (m_Item.dwId == dwId)
; G% }& e9 J" n   {$ i; B$ V+ t% j6 c. R
    return m_Item.nIndex;7 d- b' r1 k( T3 ^% J9 I3 G% K
   }
" M1 d4 s& h6 H# c. x  }
8 Q/ _* }! f+ O  return 255;' t& V6 l% p1 B; P. z; E" S5 R. V
}
" H; f) k; O% G  O/ \- evoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置9 Z+ ~4 ?: n( F& R# X
{7 t: f9 @6 }! B+ |( H. J4 C1 w
  BYTE nTmp = 0;, g9 P$ A$ r/ G8 N' J1 G: U5 W( {
  bool bDest = false,bSrc = false;
4 s. t' D9 h7 C  u" v2 C. j  for (int i=0;i<MAX_INVENTORY;i++)5 f! m% J# {. F8 k: S) |0 c2 N- |
  {( ^8 p4 g) J& l$ A
   if (dwSrcId == m_Item.dwId)* m/ s/ T4 E# H- K
   {) i1 e- D( b2 z5 G3 l
    //id相等 则 改变对应的dest和src4 V2 ?1 L& R! g7 ~! O
    nTmp = m_Item.nIndex;4 ]' Y# X4 q3 h6 q
    m_Item.nIndex = dest;# y; C$ C9 C' o0 j% F' E8 W: D
   }) N) _" a9 D3 A5 L4 h0 n9 l1 c; S- l
  }
; j  n; T! A, K2 E! R  //临时数据保存完毕,交换开始
5 u9 L! j5 X: \' A. k6 ^  for (int i=0;i<MAX_INVENTORY;i++)
) ?- l. ?1 I! ~4 X5 K8 ^  {% \, u  e( O4 {/ ~* K
   if (dest == m_Item.nIndex)5 T4 t' b! O% ^# l+ v  a8 S  Z
   {
% ]+ _' _, ^8 \) a' j  \8 S    //id相等 则 改变对应的dest和src, ]5 I8 I8 d" v
    m_Item.nIndex = nTmp;; [% Y7 ]) l, r. C' ]- {: ~
   }6 e1 y# B/ C2 m- b) ^
  }9 `) n9 b' s! J0 ~6 j
}
. y- ?. V  y8 j};
* M# v5 k/ R# L( l- w-------------------------------------------------------------------------
" r7 [# @! z5 m: j$ B2 m: e% S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  t# V' c3 F+ A2 H搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
( v% p6 h/ B3 r7 ?7 R4 q7 |" q, _紧靠其上添加:
, Y8 P( P% f$ q: Z( y5 N: Oif( pWndBase == &m_wndMenu )  [' ^% u6 d( h9 d% v$ W! a
{
% X6 K# d+ {1 F  switch( nID )
$ S* Y  r. Y" F4 c* `6 Z1 }3 ]  {
& T& P8 \$ I" r& J$ u# ^- B  case 2:$ G9 z& {- r4 _; N/ L: X  R
   {' c4 j6 `. g6 T) c0 V' l' Y
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
  W' G( T; b+ w6 `! D    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
; r% \' {4 F4 r0 `) ?' [    {
$ u6 q# ?$ l+ Z. f4 R- ^     break;
2 O" g/ k, C( R3 I" G    }
. a) ?! m+ G+ Z( _    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++). A4 O  \: v% F4 \! v! H# U: m
    {
+ k3 H0 J( ~0 G9 G; `" K, _0 e7 Q     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);  A; C1 a, @& t# }9 n  W8 W
     if( !pItemElem )
) Q" I/ `) v3 g+ |, [" _+ I& p* D0 K      continue;
1 V/ ^  r( W; ?4 ~) s5 U( W* Y     if(pItemElem->GetExtra() > 0)
9 p% u/ o. L6 U( b      continue;
+ i0 j# S) i; G     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
! v  |5 N! y0 R( X9 D& z- X7 h      continue;; O# d" K4 J8 g4 L! b
     if( g_pPlayer->IsUsing( pItemElem ) )3 |+ a2 M& Q  Y
      continue;# @, N/ M* H9 i0 c7 P0 a
     if( pItemElem->IsUndestructable() == TRUE )% Y1 |& M' z6 t/ f- X. Z
     {
/ T- ~% s: K1 e; I      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );, }' ?$ [3 g% G$ U
      continue;! `2 Z0 Y( y4 M2 h
     }
' E8 Y- \/ @9 f: H     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
* Z; f6 l2 N& {# V    }& N) C( {  `0 V" [
    break;
& g' }" G( \& G   }
, ~' I* k( r/ \7 `/ T  case 1:+ r4 E9 Q$ F$ V' z/ }
   {/ A1 d- ?5 F3 X2 ^
    //整理背包
) \/ q" d2 S! R8 n, Y2 H, |5 B0 v    //////////////////////////////////////////////////////////////////////////% I5 [0 X8 S8 h
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
% c$ y+ `3 w7 B5 f. i% d    //////////////////////////////////////////////////////////////////////////
5 A. _3 k7 L# {$ X6 j    //////////////////////////////////////////////////////////////////////////
$ O5 \) V% K- _3 a; b7 n    CInventorySort* pInvSort = new CInventorySort;
7 K- L1 q' E$ V- p0 {    vector <sItem> vItem;; S% r! _& ~9 [6 d
    vItem.resize(MAX_INVENTORY);//初始化大小* I7 Y! Z) L# z' B$ w
     //////////////////////////////////////////////////////////////////////////. C) y+ l  {2 ?+ d4 C
     //填充数据
/ U: t) K5 U3 c: U' ^9 A6 \: p     for (int i=0;i<MAX_INVENTORY;i++)3 o3 `, j4 l" v4 U3 g
     {
8 A5 \$ D; n6 D2 }2 ^1 ]) y      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& e* W& x" B: ^' ~4 y4 F
      if (!pItemElem); q" `/ y$ R$ I
      {
0 ]( R( R' |2 z$ P3 W       vItem.dwKind2 = 0xffffffff;
+ U. }* J+ A. n/ i       vItem.dwItemId = 0xffffffff;1 u' N* C, h9 X' s6 P4 ?8 S/ j
       vItem.nIndex = i;5 G. H! Y0 E# m7 r4 t8 i$ U! `
      }else {
% L  X& ^, m  [7 W) m% z' D       ItemProp* pProp = pItemElem->GetProp();
" v. C- l5 @3 \! E       vItem.dwKind2 = pProp->dwItemKind2;. H4 N3 [! C, i  U$ N7 c# ]
       vItem.dwItemId = pItemElem->m_dwItemId;) I2 y  J, D7 A
       vItem.nIndex = i;: k& Y' u7 X1 y2 v* n
      }2 X# j- m/ F9 I. l1 }# A
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- R. ]8 U! f, X1 y2 x/ f     }9 [7 e$ e  x* Y7 U6 M0 z4 x
     //////////////////////////////////////////////////////////////////////////) [0 a0 a: [  O1 i1 R  L, I( a
     sort(vItem.begin(),vItem.end());//排序- Z8 ~0 V4 O4 v
     //////////////////////////////////////////////////////////////////////////
7 w8 q' j% B. j# W- L1 r5 t. o     //交换
- Y) i/ \" }# Z7 ?: S" x$ q     for (size_t i=0;i<vItem.size();i++)+ {# O" ]. q( r: Q
     {. G+ X1 k' P) ]# c) c& Z
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% Q0 `0 c( S, x& o      pInvSort->Add(vItem.nIndex);
" s  N5 F: r( q9 g( `& n, E     }
6 I' e. E/ n8 \0 |% d9 [. O     BYTE nDestPos = 0;; v0 J8 X: o* |
     for (int i=0;i<MAX_INVENTORY;i++)
/ y/ [+ j) b1 ?0 ^$ c     {
( `! q+ ~$ o2 B7 V      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);( \( R+ Y5 S, U# Q3 T& K
      if (pItemElem)! g, B6 Y: H4 M4 P, h
      {" \3 N; z4 r3 T
       if (IsUsingItem(pItemElem))
- ]( _3 O+ k9 e8 z" c       {
  B4 E$ O5 k: f+ C; I1 ]        //这个位置无法放
9 V( |) \2 V! j0 p        nDestPos++;) b% [8 i8 O" \7 ^' I# n
       }
* g$ y" d" ]( s  h! z, G2 \; J) c      }
# D, V8 @! }) ~3 z2 j* L7 ^7 X      BYTE nSrc = pInvSort->GetItemSrc(i);8 a" e! Q' n: s0 c; I: Q
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
  s+ x* L5 x8 `7 J3 P3 j      if (pItemElem)
( c+ x8 ?9 T% R5 P1 \      {
6 U& @! X$ j% G2 b" K  R5 g( j# P+ w# S7 ]       if (IsUsingItem(pItemElem))
0 m6 ]$ l, q0 ?       {
& {2 p0 g( H( }# x8 M        //这个道具无法移动,跳过4 h0 j2 R2 j3 k' t" m# ^
        continue;
2 h' I# Y5 l. A       }) Z2 d2 i6 l: o
      }else{6 j* r2 [3 h! R. Q! [
       //空位置 不用动% k7 ~4 l, r9 n
       continue;
" {1 E8 ?7 [- X9 W# \" p      }6 j3 L7 m" x$ d: s- \. F- |  |* \$ o
      //////////////////////////////////////////////////////////////////////////
% V* z4 H* b4 t! U      //开始移动8 U0 w; p: d) k, S  g
      if (nSrc == nDestPos)& x; r. y9 ]0 g- S
      {
2 w/ M  }$ y2 u* l0 s. C       //原地不动* V1 ^! d0 a# X+ ]  @6 [
       nDestPos++;# l& \% h. W. Z. }& y5 N: i8 ~6 A0 z
       continue;- G) F/ r. n3 x
      }  Z* {/ A, }/ [* q! a/ x8 R1 g
      pInvSort->MoveItem(i,nDestPos);# b: Z+ L4 b! v3 \( S5 N
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
  Y) P- Q; z; m  j! u* m& {8 O, I      Sleep(5);
: i, S3 @1 U3 ~9 o) d; }7 `      //Error("移动 - %d->%d",nSrc,nDestPos);
. u: U, f& U1 K; I      nDestPos++;+ h, K& d% N. w8 h& D% Y7 S2 d
     }
# ^2 O2 v# E" M# x: T     //取第一个元素的信息0 k* X2 b# ]8 e% E; o; r; k
     /*
4 N1 A$ Q, J" U5 r$ N     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)6 u2 a7 V. H0 \3 v8 X1 V1 X
     {8 v0 [1 q" k; A" h& ?3 c
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; L; r9 l& L( p' w      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 U: a0 s' g" x- C     }$ I2 K, V, T& x$ A  D8 V
     */
) m% ^% Y6 T. w. G  z) S1 I1 F    //////////////////////////////////////////////////////////////////////////
" k- m4 P' g2 R    break;
7 B0 p, K1 `( Z7 @   }/ \, I0 N* w1 A% [2 T
  }
: u9 M' j. T% C, i( g1 {( r}
" Q; c; X% N8 e- T$ I$ d; fm_wndMenu.SetVisible(FALSE);, ]2 A- }2 w+ x

% r. ~/ i# s1 F5 l* V5 b--------------------------------------------------------------------------------------------------------! I9 u( a) l  E7 c- ^8 _  W& D, s
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; Y1 S) l* ?2 C* {& P{. k, n/ y) Z& \; r* |
BaseMouseCursor();
2 ~/ ?& ^3 V1 U3 B) }* ]}
8 I. C8 Q( M" V9 a  X( t( F在其下添加:
4 Y1 z$ }5 k! R3 {0 \/ Hvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point), P) q6 O* h/ b
{
( ]7 Q7 K7 c: m, h7 |$ J5 f8 bm_wndMenu.DeleteAllMenu();, [1 G( X0 U! s) J' s: a
m_wndMenu.CreateMenu(this);
! L& |; L/ `6 V8 d2 ~1 I$ T- wm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
2 f" C7 }0 S" [* w  i, [& `1 ~
- L/ S1 ?' U9 i, k" C: J" K& cif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
! ]0 M% t: q/ E1 I+ K$ {4 Z{* n. W8 }1 G( U5 {) Q/ m% Y
  //P以上级别才可以删除所有道具3 `: ]: M2 p. N* u
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");: |  _7 W6 y$ r3 |2 {
}+ ]0 f( C. `6 \( l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ T! Q6 ]$ J8 D* u$ A9 j
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
# f: ^+ Z  @" Z- ^7 b' km_wndMenu.SetFocus();
2 ^! }& D+ c. E0 }7 Z}
( k; ]5 q+ b0 @% I------------------------------------------------------------------------------------------------------------
& Q) ^; n5 R0 K8 y# X9 Y*************************+ q: V* l3 H' ^% p; Y3 L6 |& a
WndField.h文件
1 |1 s8 z- n* p( |*************************' M: O: F" ~) r: I' }" B
搜索:BOOL m_bReport;% B4 @1 y( N1 t- X' i, s
其后添加:8 Y7 f( n8 M0 x2 _" {
CWndMenu m_wndMenu;" D. |" G5 I: x' l
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: h+ c; L! P% `' h
其后添加:
' T# x1 A9 S0 b& y& p+ @2 n% \virtual void OnRButtonUp(UINT nFlags, CPoint point);9 A. f8 G+ D) K; c- g
& W% K# ?9 z/ _- E8 E8 u$ u

3 t( m8 u3 S5 |, n! _% Z

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-30 21:54 , Processed in 0.076087 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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