飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1092

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1092
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件7 s3 ?* Y% Y/ M$ \7 `
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
  m9 I7 g9 h9 Q) j1 H+ I/ u0 G" W, ?' H- w  O
struct sItem
' \& T$ r+ K: D) ]9 J{
7 J) F/ ~' V7 o- d5 p6 dDWORD dwId;
% v9 H0 l& \2 b) _' T; s7 fDWORD dwKind2;4 M7 z4 ~* v  H* o% D) \6 j& @
DWORD dwItemId;4 Y' W3 N' \+ d/ j) H
BYTE nIndex;
1 {# ~* f) i3 P0 c" dsItem(){! S- ]3 R  Z# T" C+ D" \
  dwId = dwKind2 = dwItemId = nIndex = 0;
* S8 ~" b. M6 g/ u0 W}
* S& L! @$ @+ ~1 P, A) @bool operator < (const sItem p2)
- i* N7 U, m& i) Q/ v' g{
# X( r+ O& ]# U$ @3 C) o* m  if (dwKind2 == p2.dwKind2)
* l( R/ M2 B" [  {
4 z6 z4 X( E" n   return dwItemId < p2.dwItemId;
# ?( L( q: `7 a  }else{
2 a# }. f7 p, K/ S' M   return dwKind2 < p2.dwKind2;
! U" S6 t4 w) G- v4 P  }: W3 s' l: T+ ]
}* v; [2 U0 N+ P0 E. X
};3 ?  s" P* `% ~# M3 g% J) H
class CInventorySort
6 {( I* Z- s' z# O{
# g- x6 E+ _; x5 K# M; Epublic:  D" L5 G7 c/ V8 [; _  \
CInventorySort()
, R  @- \0 C9 I! s& J{
0 W$ w: Z, Q# E2 N  m_dwPos = 0;6 ^! ?6 ~- W" g+ p/ ^9 C0 S
}6 ?0 F; h; n% `# A
~CInventorySort(){}
( r" t2 {% `: M' m+ A4 K% Sprivate:
. m" B: i: G3 w: A, NsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
* G- Y* L- S4 H' Z( dDWORD m_dwPos;
7 n& y% Y" ?" i1 fpublic:
: s" x" v: s) i8 A0 @void Add(BYTE nIndex)9 G5 U2 J3 b% e4 }8 e  `
{0 ~) g5 y' h' H( q& ^7 e
  if (m_dwPos >= MAX_INVENTORY)
: _( V1 G( A9 g6 a% r  {% g1 P! H  z$ z& G8 i7 {7 X
   return;( U! _, E0 J1 D% l" n
  }3 ~. Z7 W0 ~9 B( h7 H7 \' q. G
  m_Item[m_dwPos].nIndex = nIndex;9 h5 k; ~% K& v- E3 _4 b% D/ ?) G0 C
  m_Item[m_dwPos].dwId = m_dwPos;2 a/ ?) w& M2 O, D1 U2 d* @2 v
  m_dwPos++;+ p0 l* j- t8 N# M
}
, f. i7 |1 X' R7 [  n8 |BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
7 q. b5 h0 c" G8 n) n{
. Q9 @. Q4 ]- h/ v/ u  for (int i=0;i<MAX_INVENTORY;i++)% @  G' b8 {& q  Q- m: t
  {
$ y- e: ^4 u# J& z# {   if (m_Item.dwId == dwId)
$ m/ b1 D$ O# N0 _   {
; R, N3 x) L; W' i& J( ?    return m_Item.nIndex;
' N& Y$ w2 @4 G6 k0 F% D2 b. _   }
# d4 D4 l3 B! U  }
; Z/ o% m8 K! F* }! C( r7 d) w  return 255;
% ]. p+ A7 l& j% |0 l}3 s$ C$ x; m5 O
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置% o' @2 T% L' C4 v1 k
{
0 w  E& F2 U( ]+ F9 g1 ]! w  BYTE nTmp = 0;" ]8 ]8 J" w0 l) |, v
  bool bDest = false,bSrc = false;
$ E4 n9 |5 r2 v0 R" O# m7 l  A! N  for (int i=0;i<MAX_INVENTORY;i++)
& e* b1 p) J5 U6 e3 h* t+ F' e  {
7 g8 J- W% p  l* I1 z   if (dwSrcId == m_Item.dwId)
$ ^8 l6 E) V! W; Y  m7 X8 G8 h1 d   {! E0 N6 ?# Z/ f2 b' n5 a
    //id相等 则 改变对应的dest和src! H: |8 U4 j# [' s5 W# _
    nTmp = m_Item.nIndex;  k8 W& z: q+ [0 O
    m_Item.nIndex = dest;0 A: N3 q; V% u
   }
+ [1 G1 a1 s+ s1 t3 Y1 C% d  }
6 ?- ^: Z, ^( G& ^! \  //临时数据保存完毕,交换开始
9 ^. E1 n) P! m* k  for (int i=0;i<MAX_INVENTORY;i++)
% X  f: @2 g8 P. W7 _9 X  {
/ w" B' I# m! F; |( ^   if (dest == m_Item.nIndex)
' L2 s; c1 ?& J, c% ~   {3 C3 N- ]' z& t: X+ p
    //id相等 则 改变对应的dest和src/ Q) }& }, p# \0 b$ p/ z
    m_Item.nIndex = nTmp;9 R# X5 G- m# a, b  t
   }
# U  E7 ?+ @( J  }+ a  b; x) G" {
}
3 B9 U7 q( L' b8 a# g, I+ G  P# ]};
1 s1 x& Z2 p6 u5 y) X2 U-------------------------------------------------------------------------0 _# v, R9 }( g% x0 K) D9 `: }
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )2 h. j* J2 u' [# g; v
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);) h( ~! ^/ W( j% f+ c
紧靠其上添加:
2 d5 O! Y$ ?% `" H7 ?- I6 qif( pWndBase == &m_wndMenu )
& u5 m) X; w3 p5 j# m& f$ v{
# S6 K& y* G0 X  switch( nID )! G- y7 Z! c9 U* W
  {
/ ~( I; m. N( L6 ?  case 2:3 c8 b4 r8 R  h/ ]
   {
: y7 i( C8 @6 S9 t+ |    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);  ]' i. K) ^9 \/ K5 \
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); V) @4 `2 R6 D
    {' x, W, ^& j1 |2 z7 p* a8 ^
     break;1 C4 v3 j) j* A" t/ z
    }3 K' j5 x0 ], i% N
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)  u. r$ |* D4 p6 y/ V8 i
    {
8 Y: O! F. d$ F; Y2 [     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
( L1 J" i& a6 V% v     if( !pItemElem )
- |/ E/ B4 x  n' K) g& X  w& M! Y      continue;
4 {6 P0 t% ?" j4 q( f/ k; b; ^' Q     if(pItemElem->GetExtra() > 0)! I- B' O. I% Z* p" ]9 a! S+ d
      continue;
4 y: a, Y0 O" y" a1 ?" X     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" C- |6 r/ R" _% {6 P* y0 _: ^      continue;
9 c% [. {  z$ K8 E8 R5 \     if( g_pPlayer->IsUsing( pItemElem ) ), V- Q& q% G, N6 e3 j/ j
      continue;
- o7 j6 \' A+ o     if( pItemElem->IsUndestructable() == TRUE )0 D* d9 M) M2 N8 ?9 D/ c
     {
1 Y. U0 i! z! r1 R& T8 f1 n- Y2 K      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );4 w+ E* z+ G* S
      continue;
, z( T; v" d/ b/ \! q. X  X+ A     }
, d& B& F/ Z( H" r$ `     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" ~/ ~/ s8 l1 t) c    }
6 j! z- }/ S0 m! T: G" K    break;- x6 \" h% ^% s! Y' E0 H
   }
& N: ?2 p, D1 d( r  case 1:
5 e7 m; D5 p9 \1 ^   {; R' J% [# x, F, G+ y' O3 d  @' @
    //整理背包7 L; y* H7 m' b& v8 Z4 ^
    //////////////////////////////////////////////////////////////////////////
9 j3 w3 i2 R0 C    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
4 q) K5 c+ p4 l) l- n" M    //////////////////////////////////////////////////////////////////////////
/ u4 p3 {  r1 p! q. c! t4 a1 e( ?    //////////////////////////////////////////////////////////////////////////5 T( U5 p& c, P/ }9 O$ Y
    CInventorySort* pInvSort = new CInventorySort;% i6 ~( v# P3 M2 N
    vector <sItem> vItem;& D  m" M: F( f- n1 u3 ~
    vItem.resize(MAX_INVENTORY);//初始化大小
" @7 k/ g9 e( i8 I) ?     //////////////////////////////////////////////////////////////////////////4 E3 ~  k: H+ e
     //填充数据
3 W  }& e7 K% x0 A4 N5 p7 w     for (int i=0;i<MAX_INVENTORY;i++)
' j; `: u$ A1 J  J     {
6 H4 y  \; H9 m+ o  |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* K3 M6 H* C. U3 c9 s
      if (!pItemElem)
- O& `( `9 z! c. U( v      {, H" N% h! [/ A8 P# e
       vItem.dwKind2 = 0xffffffff;2 @* u. }0 b& J
       vItem.dwItemId = 0xffffffff;
/ j! P7 p% M- d% ?       vItem.nIndex = i;
: A' d6 ~1 d* Q% f& n$ ^. |9 x8 v      }else {  f- c' P) o+ O) N1 m' x
       ItemProp* pProp = pItemElem->GetProp();
# _, l3 h7 V% \/ q3 B       vItem.dwKind2 = pProp->dwItemKind2;4 _$ _/ {; A2 U0 R# \
       vItem.dwItemId = pItemElem->m_dwItemId;; x# i1 i& ^& Q
       vItem.nIndex = i;
$ w0 g9 w/ R; k+ W% u/ P/ ?6 Z* S      }
; q9 R2 A, G4 S6 N8 t0 v  G: m6 b      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);  a0 J. n" P: d- i, J' l
     }
% Y  I; k6 G& I: [     //////////////////////////////////////////////////////////////////////////
& V. N$ d1 o6 x. R3 [. `     sort(vItem.begin(),vItem.end());//排序
- a$ X! r. e5 s& m( l% l7 o     //////////////////////////////////////////////////////////////////////////; B1 T- H3 [% t5 ]! M
     //交换
+ k# Y+ n$ G1 k- b. Z     for (size_t i=0;i<vItem.size();i++)
* ?/ ^5 {* `3 G, ], [     {; ?: ~  L' V/ ~1 k4 P
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);& l, i8 O+ }- A" ^4 I# y
      pInvSort->Add(vItem.nIndex);
- U9 `7 j) O! i9 V     }
3 J% O) J0 _" D! o     BYTE nDestPos = 0;
- k4 ]7 e0 f+ ^+ \& m+ b/ K! \     for (int i=0;i<MAX_INVENTORY;i++)
" i# n( a# \1 a8 z) }+ {, }     {
  O4 U4 w( L8 `- ^+ F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);3 }! O. Z* ]8 I2 u. F5 H
      if (pItemElem)7 Y' y1 J" O  X4 O5 d0 R
      {/ j1 _( X, M- G: m: O) S. y
       if (IsUsingItem(pItemElem))
. t( Q" R8 o( u2 N       {- T! x! E( ?0 x9 v) n
        //这个位置无法放/ I1 w) [$ W" V" _7 B; W3 x
        nDestPos++;0 Y1 V% c' c! q& m& I
       }
- j" d9 K- \$ r0 M& u      }
; Y% a3 @( F! W3 }      BYTE nSrc = pInvSort->GetItemSrc(i);
# n2 O) k9 k+ ]$ z! e! v$ K      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);$ y# ]9 _) W& S  M
      if (pItemElem)/ D. \% k( i  O
      {2 L8 k, A+ H' P1 H8 N3 k
       if (IsUsingItem(pItemElem))
, q. q6 J' w) D3 ]       {
7 H8 {( r, V/ J! e" @# ^        //这个道具无法移动,跳过
0 m9 @! w* b0 p, q, t! b! ?        continue;
# k& }: A& o/ {$ r# X       }
0 Y$ a! w/ C! I$ T" P      }else{) u; E  d% o, |  U
       //空位置 不用动& Z9 w, ]) m, k" C
       continue;* K# T, o2 D9 Z/ b+ l0 h1 D
      }
: I; f+ D6 }" w4 D# ?      //////////////////////////////////////////////////////////////////////////
5 @. ^& [/ X+ h3 H8 m+ X1 S      //开始移动$ w1 U7 k- O3 G/ {/ B. Y
      if (nSrc == nDestPos)
2 Q3 n0 \6 U# ^- `& D      {; r3 T3 E4 A) f4 ?; ]1 D
       //原地不动
# Z1 s2 t5 L3 X& d" C       nDestPos++;
6 v& |  U: d, b; ~9 ]       continue;
2 J& u3 d3 K7 a5 J/ V* x0 W, H" G      }8 S4 Z, N# q) d" L
      pInvSort->MoveItem(i,nDestPos);% c7 W3 ?7 D) T7 U0 a; H
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
# T# ]# D# g: f2 }      Sleep(5);3 G7 U" X+ m5 q& d: g, Y' d
      //Error("移动 - %d->%d",nSrc,nDestPos);: J8 ^' B" x% }! `
      nDestPos++;
* u% B. j4 Q' t     }0 {5 G0 F0 J( H3 {( g' C
     //取第一个元素的信息
- v6 ?. p1 e3 C     /*
9 f& J3 X* F$ `     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
% B' K. b! g3 a. C" E7 @     {
, C. B* E$ |2 h! a9 t      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 K+ w, h0 N; D, n; P
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
  g/ Y/ q" K% l6 B$ f, H4 b     }
7 a  |# g6 p  e7 c$ l: u2 v     */- |. j0 X8 ~+ V8 d) X1 V2 a; A
    //////////////////////////////////////////////////////////////////////////* }2 K- X2 o) z/ [- O
    break;
- u( e2 K, S* S! K   }
& i2 S# R4 u6 s7 g2 [  } ( P8 P6 C) @' \0 B& }9 l% t
}' x- h9 B( n& t3 x5 O/ f
m_wndMenu.SetVisible(FALSE);
/ I9 S9 y) o# s8 g; M
: t, M0 ?/ v4 g, a% }2 `- K& k9 W--------------------------------------------------------------------------------------------------------( @( S2 U& Z/ e# K  G; t
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)3 l- k& M- n( M: H( G) n
{
% ]2 B; P/ D; H: M) \* VBaseMouseCursor();
6 `  Q& C) m: }" L0 `0 Z$ J! ~}2 M" g6 e, U1 a" T
在其下添加:
( Q( C( G3 H4 [void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)+ W$ q, E- F$ t0 l) S- e
{
; X3 S% O0 P6 U& b/ m5 Z- sm_wndMenu.DeleteAllMenu();3 w& |6 v4 I# [1 ~8 [3 H$ X
m_wndMenu.CreateMenu(this);
6 D0 y9 l& c' v0 t3 rm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");/ R. q2 N7 a0 J9 u9 y/ B* J! D+ F7 T

" u/ j0 k- {9 c/ N! uif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))' E4 E0 N% {0 G% ^, y' R
{
6 S; {! I0 i$ s: I7 v& g, d/ o  //P以上级别才可以删除所有道具, s# Q' @8 v$ g$ }3 [
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");# T5 f/ e6 M- H2 ~1 Y
}  p( ]; g: b9 U3 k4 v" X) D. I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
/ j. P# K' Q1 e. z5 I7 d/ Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. C- N7 C/ }5 k8 d
m_wndMenu.SetFocus();
6 v7 f) f. G. y# y}
. B5 k. S0 b( ~. J$ b------------------------------------------------------------------------------------------------------------
% _. h* D8 g' I7 |6 K6 p*************************4 }' G5 ?3 s6 l) n
WndField.h文件2 ]% @1 C6 M5 O* ^" ^
*************************
1 u$ I0 n9 j: ~6 t, @搜索:BOOL m_bReport;$ ~! [, G/ s" h- M; c1 m. Z
其后添加:
' U' e; K/ s0 ]% ^4 TCWndMenu m_wndMenu;2 Y8 ?$ I2 H, |5 w
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);& H1 Q2 R6 t8 F3 h! a8 p
其后添加:7 J5 G* u" b; Z8 T0 y* j! \4 @. M0 m
virtual void OnRButtonUp(UINT nFlags, CPoint point);2 H$ `) L! ~( b

: k& m' K0 o8 }7 P2 ^" z" r2 }6 Z3 E& a+ ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-31 02:42 , Processed in 0.071609 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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