飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
* Q4 ], E) ]- ~4 B( p6 }搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 I$ H- E! }2 ?3 ~  ~( q0 q# N2 `
struct sItem" Z2 v# G/ K  e1 r$ o, U
{
# ^0 ~- m* ]- L  C! ]- qDWORD dwId;. x! Z+ J* v' G, K
DWORD dwKind2;+ j4 o" \5 a2 Y* C
DWORD dwItemId;
  F6 m8 v* Y% Z2 t0 Y2 ABYTE nIndex;0 [+ j6 j5 z! O& d& |& |
sItem(){) T7 w* _; k0 R" @- ]* ~0 `+ s
  dwId = dwKind2 = dwItemId = nIndex = 0;2 f+ S/ x# H! |9 B
}
- ?/ E8 y) c, F1 s5 r( Ebool operator < (const sItem p2)* P& A* j. p' `9 l; f
{. o: y; I) N' M, Q5 I6 w' M
  if (dwKind2 == p2.dwKind2)
1 z- b2 s: I0 t9 W; `  {. e* N8 B# K; {# F6 c
   return dwItemId < p2.dwItemId;
* q2 w/ ], B2 k% Z) T4 G  }else{8 Z9 j7 P- E! E: w  h. S' }
   return dwKind2 < p2.dwKind2;
5 G" c2 A; k3 G' ~  }# ^+ z1 L1 @, z
}
( ?# ]. R  X( l: J};
; x( x: _2 e* D: \' |2 `class CInventorySort; P" f4 x. R4 Q  r
{
7 z: ]" ~! ^  q2 K# N5 l& mpublic:  i* ?% `; [8 w, `" g. L1 _( P8 C
CInventorySort()
; {8 u, K& P/ k: L8 v& }{
8 w, B; r5 ?4 T6 p: L  m_dwPos = 0;0 t" m3 \5 F; q, T; ?( I
}" x0 U8 M4 z+ a3 j" Z* M
~CInventorySort(){}5 e0 ^2 Q2 v4 I$ |
private:
. s4 g. _, y1 J/ G. C2 g, l6 a: r1 z, msItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
  F4 o8 p" u2 z) SDWORD m_dwPos;# q* w- a4 k5 H7 x
public:
5 M/ z+ i7 \* k( l$ ?void Add(BYTE nIndex)9 r9 `9 B' ~# p' x& ]5 q+ p
{
% ?/ [. w8 z, k9 b4 Q2 l( f3 D  if (m_dwPos >= MAX_INVENTORY)
: V2 g" p+ J( |. A* M0 ^  {
3 m) X# e' }" K4 c. B5 C  A   return;$ R  a2 Y: _! i9 [' ?+ {8 a
  }9 o, @: z8 K. m  t% x9 g7 ?8 A
  m_Item[m_dwPos].nIndex = nIndex;! f  T) j# l, t3 E8 S0 O3 x
  m_Item[m_dwPos].dwId = m_dwPos;
; k" K2 y! W! p# q$ Q# f  J  m_dwPos++;' \2 |5 _- b6 p$ Z  i, r
}7 y2 N2 b, m# H" J3 w
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
5 V+ a6 Q8 a4 L+ G8 i$ X{0 n1 I! b% ~8 @  j" @( K& I
  for (int i=0;i<MAX_INVENTORY;i++)
! v, r, B  T' }' Z. A2 ]  {" G) V: J4 p$ v0 N8 R
   if (m_Item.dwId == dwId)
. N  M1 F! {, Z, [8 @7 L   {; T6 V% O) H9 m  D/ N2 B2 r5 ^
    return m_Item.nIndex;5 }! F: u! X5 T! R
   }3 t$ {/ c" l- _
  }
; @( i( U1 n; z" @  return 255;
) m# f  r$ L+ ~. }* c: I: }/ r}# t* i% |1 q7 b8 t4 X) e
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
! x0 ?# |9 ?0 U7 T) T{: o4 s9 b5 }! j$ V1 {
  BYTE nTmp = 0;' G) e/ L" v. k
  bool bDest = false,bSrc = false;
7 c: J0 V- B. T. k/ ~* m  for (int i=0;i<MAX_INVENTORY;i++)
0 T( d# a0 T) }& g1 F  {$ @; I* |' e0 N* Y
   if (dwSrcId == m_Item.dwId). e4 a" }; H) j! u
   {' i; O/ g6 l' W* {  A# C
    //id相等 则 改变对应的dest和src
6 {( P( n$ U) T: v    nTmp = m_Item.nIndex;
' z" m5 Y. l: ]' u( c  t    m_Item.nIndex = dest;
! v0 Q0 ~, v2 ?2 A, P0 _" r4 E   }
/ Y( C! ^( \3 D' @/ f0 ~  }! L9 w1 C+ R1 P4 Z. T
  //临时数据保存完毕,交换开始
" z7 P# D( J* p' f1 N& y  for (int i=0;i<MAX_INVENTORY;i++)+ S" \3 L9 Y9 M4 p! ^6 u  b$ C& q
  {
# Z2 E7 d! x6 h* X) x7 j   if (dest == m_Item.nIndex)
$ h" g" w/ o$ f# {3 n   {
  G! e( G" I6 b3 j' T    //id相等 则 改变对应的dest和src; E/ c" {( C4 `) O6 F) q. ]
    m_Item.nIndex = nTmp;+ ^8 p- U3 A0 j( f' r1 K
   }# z' G- o$ G- ?: i% H) P
  }5 H' K& l0 L0 n8 o
}. b) j7 F9 h$ X  J. |
};
& T$ @! M8 c- s% j# M-------------------------------------------------------------------------
5 a* U0 N4 q6 {' e1 w0 S( K  i# f依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), q" g* P2 F; \$ v- c7 ?3 |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);( ^7 Q( V+ F5 B6 ~! Z# O& Q
紧靠其上添加:
' Z. V) y. q0 p) V% Y) |0 xif( pWndBase == &m_wndMenu )' K$ R0 l' n+ U: t  J& `0 Z
{
7 q# `8 N  d) o) ]  switch( nID )
1 P$ \6 U. W! R/ k4 C  {
7 o9 ?+ _2 s0 {" w  case 2:
9 q! H2 L3 h# u$ F3 l   {( T3 v; g; [7 E* c# d7 n
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 ?! V# f( h9 l    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); Z2 S% p$ _$ o4 S, E
    {
: L* c0 g2 i& B- l9 |( _     break;
/ R# q8 X$ W, \" \    }2 e+ ]. J3 ^2 R' p% s
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. R- W* x& C! u( k$ ]( t* t2 P    {
: ]1 X' j' C+ b4 {     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 k) }$ m$ }/ {+ [8 t8 T
     if( !pItemElem )
* M5 S4 p( w1 V+ m, R$ b      continue;
  M- K: D1 Z' A/ s7 O     if(pItemElem->GetExtra() > 0)
. [2 j8 U. q! J$ d+ w- J      continue;3 z3 Z4 g4 i1 ]1 y- z
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' e6 u0 D- h- ~( b
      continue;
# g; j0 L3 X2 ^# E; H     if( g_pPlayer->IsUsing( pItemElem ) )2 X$ l7 }) L1 |' B1 i
      continue;% F& M! [9 s+ b$ d8 Q
     if( pItemElem->IsUndestructable() == TRUE )
6 @# T# I' q1 O. [( Y5 [     {
3 ?9 N& F# |/ F$ M0 a      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( W7 e! W& V0 {& Y3 e
      continue;
# v2 D* Q1 Y* i( A     }# d2 L! i/ V" s9 u2 t# V
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);: X  F8 A: I# W+ a- B
    }
$ {7 i5 F2 [7 H" h    break;
+ U! f% f6 ]& l7 ~) i. d" a7 V   }. o$ r) V' h( z5 w, L
  case 1:5 a1 e7 i; r) F" ^. Q4 ]8 b& y
   {' H4 E# ~1 ?1 y  o7 G3 {
    //整理背包# L" ?: B7 z4 p
    //////////////////////////////////////////////////////////////////////////+ o$ d, D5 Q, h& k0 {; d5 H+ R) T3 }
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 k9 U5 Y, ]) F, ^# [) `    //////////////////////////////////////////////////////////////////////////
2 P0 j0 v' @# z1 I- \    //////////////////////////////////////////////////////////////////////////, ^! }, E! K9 n5 Q/ J+ D/ `
    CInventorySort* pInvSort = new CInventorySort;
- a; T0 r1 Z% A# L    vector <sItem> vItem;4 v; A; X$ G) A' z
    vItem.resize(MAX_INVENTORY);//初始化大小2 K7 z/ O4 ]# W2 U7 o, r0 ~
     //////////////////////////////////////////////////////////////////////////
7 e2 q' p; a7 @2 @     //填充数据: @# {! W; a" P+ z* P( C
     for (int i=0;i<MAX_INVENTORY;i++)
3 E- G* }' k. {/ ~' f- ?     {* J$ `, T5 Z9 N' N* F
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ ~' e1 W- K$ I      if (!pItemElem)) ?# c+ ]$ [5 c
      {
. O* X/ q4 V" o7 I       vItem.dwKind2 = 0xffffffff;
& i: e- G5 O% r( ?       vItem.dwItemId = 0xffffffff;
( P; R. ^* z+ G% |* p! C& _       vItem.nIndex = i;
" S7 w8 F9 s% M" N' T2 x5 }      }else {
$ ?' }0 \. ]0 Q# q( l& l; Q       ItemProp* pProp = pItemElem->GetProp();
& Q; E4 J: {$ ]1 b- a% _       vItem.dwKind2 = pProp->dwItemKind2;
! {. ]& [* O  T( ?) P* s  ~       vItem.dwItemId = pItemElem->m_dwItemId;
: I4 E( Y* y+ `5 ^( n# \       vItem.nIndex = i;
/ w1 h7 X+ ^9 p8 J      }7 Y: i$ e" W# C  O( h2 j$ w
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);+ f) j" @# D- G/ O- i; L
     }, |' K, O8 v; z4 s7 T* p6 o# S
     //////////////////////////////////////////////////////////////////////////$ N; X2 g. z# k( F5 D
     sort(vItem.begin(),vItem.end());//排序. _: E4 |3 |9 V& j. |! r
     //////////////////////////////////////////////////////////////////////////% C5 E0 K* v! Z8 c5 I
     //交换; \7 e1 [3 J6 T) g# X% P
     for (size_t i=0;i<vItem.size();i++); p! f: Z: J- I0 s. a8 f. G
     {
: d% d& T3 W5 i1 ^! i# S& U3 F      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- x$ y3 n6 a+ t; v- x" E
      pInvSort->Add(vItem.nIndex);
, o* q, X3 N- \( M     }
' A: F& h/ N7 ]! G4 n     BYTE nDestPos = 0;  u3 H9 L6 A) `3 N/ `2 ?
     for (int i=0;i<MAX_INVENTORY;i++); c* P0 H4 \0 x
     {! s$ {+ N) S$ W* t6 v) F/ g
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);$ x# T1 m5 Z) ^# q
      if (pItemElem)7 h+ Q  M0 k$ E; x" X
      {
! H1 w& H0 j! }% D6 Z" R       if (IsUsingItem(pItemElem))
% H+ G7 }9 L2 W4 \3 N5 n# }       {  E. r  e5 x! _. t( i+ l
        //这个位置无法放
' A2 Q# ~) E. H& n7 e        nDestPos++;1 V% U3 m+ o& m
       }
8 D/ ^& \" Q9 J2 J      }* @/ f. @/ B: L# l3 c
      BYTE nSrc = pInvSort->GetItemSrc(i);
, J. ~6 G  k- I. F6 }, T      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% b5 A$ E8 R( ?
      if (pItemElem)% Q# a0 z3 e% K5 f8 O3 C6 @
      {
/ Z& J1 k$ u# n/ p7 H' H       if (IsUsingItem(pItemElem))+ ]: v/ O. f# d5 M5 P
       {$ ^- r3 o- O1 L; @$ h; ~4 h9 q
        //这个道具无法移动,跳过
+ Y1 X' ]9 V* E& t        continue;: A; k+ W1 p  p& C
       }
" K6 T" ^/ Q3 U/ Q4 ?$ E; k      }else{
3 t1 d5 B$ X# H5 H# ~/ u       //空位置 不用动
: u% i* O/ J9 ^; j& |# `       continue;! r) u' Y- Q6 [
      }" Y3 L# g7 s0 G( L& O
      //////////////////////////////////////////////////////////////////////////
# [' K3 @% b( l, A  ]: K6 v      //开始移动
) M/ w# n1 P! P$ K, F; k      if (nSrc == nDestPos)% m2 Y9 o9 y  q/ }( R6 V) D2 \
      {
" N: s* b/ k2 O2 s1 ]# I$ l9 G       //原地不动3 J0 R0 C! x4 v7 o' N" l0 [' `" j
       nDestPos++;
2 t( g- P- h2 O$ e2 F5 f       continue;
4 q+ R8 K4 ^$ e! G      }
( _6 N* F) ~- i6 P* U% k# f; F      pInvSort->MoveItem(i,nDestPos);" O/ n3 W3 H4 {3 Z+ J- P: u4 Q, C
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 L% @9 Z3 c9 l4 K* _) a7 O      Sleep(5);
+ E: i" P: P- i      //Error("移动 - %d->%d",nSrc,nDestPos);
$ L; g1 L+ X% F) z      nDestPos++;
" a* a3 O, X5 x1 ^     }
: C, V  m# T* \2 s: W* `4 U     //取第一个元素的信息: h5 A7 q" G$ ^- r( T, [
     /*
7 r! z, G( q0 m+ D     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)# v4 i2 |/ ~2 }
     {% k! [. S# J5 F) W$ E9 W
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);0 U) K6 z  \7 e: y$ c
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% |) I7 K, {, A2 J, `- F$ M5 w
     }
* F: c! q9 @) ?3 b! H' O0 O5 a* h     */
5 q  ?# E. k+ O    //////////////////////////////////////////////////////////////////////////) v+ H9 w1 p0 e' C8 S- F' }% e
    break;
8 m$ Z3 E0 }- x   }
* @" ]( d" V1 T" j& T  }
8 O) @4 u2 w9 N, @; c) a}
5 ^9 O+ K9 x9 _2 Im_wndMenu.SetVisible(FALSE);
5 t. k6 f4 e7 ^/ S; ]; A9 h8 n
& n8 `2 T4 o# P, y" C--------------------------------------------------------------------------------------------------------
" d  _+ _4 V/ E0 R1 B6 e搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
( R" Z( W: e) D{. {$ G6 H0 a3 M8 t. d, u0 N2 {
BaseMouseCursor();
( A! t& A$ ]* a/ j: E2 b}
8 g1 i- S& n0 f' z4 l在其下添加:
$ k5 ~# R( q5 T( yvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)7 d/ ?( Y  \( b
{
  l0 k% h  k0 G& f+ Lm_wndMenu.DeleteAllMenu();: B6 n: [( A6 i6 k$ M7 W
m_wndMenu.CreateMenu(this);
7 U$ Y* H" x# C) X" F1 O, S. Jm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");+ h+ K3 l) I: k5 x8 K4 R! U$ l
! s* s% q) I# N( j
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))) Q1 Y0 W0 p' V" W" y' q
{
: D! l( o& v5 g( \$ X  //P以上级别才可以删除所有道具2 I4 ]+ r$ r0 }7 v/ {
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");; T( ?) ?* y" |  a1 C# k. X0 ]
}& a" p  W! O. ^
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );6 |! S& w& p7 X% M& G2 O8 m3 j% O
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
! g, v' X0 x, \1 \m_wndMenu.SetFocus();
0 d- j& ]- r1 R0 H7 m}
: y  Q% g/ u# T. z6 j! J. T------------------------------------------------------------------------------------------------------------
7 U, N9 S5 ?- `3 J( W' C8 i*************************
: I5 g2 ^' e" i; f6 YWndField.h文件
. J+ J+ Z6 F1 h( `) k5 b0 @*************************0 Y7 p& e& _- L3 c/ h2 a
搜索:BOOL m_bReport;
6 x+ n8 E$ Z' {1 z% Q6 c) p( I( Q  D, F其后添加:
7 G, ]* _- j! b  l  P5 ?CWndMenu m_wndMenu;9 U: @: _5 n, R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);  C# {, ^1 S! a+ t. N3 q
其后添加:$ F7 W8 ?2 w: C- T4 V
virtual void OnRButtonUp(UINT nFlags, CPoint point);
" ]: {) g- w4 x5 f. I1 ]/ l( q" f1 n- @: C! j
  ]7 M6 G/ M8 f5 Y- ?

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-21 01:17 , Processed in 0.071255 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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