飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
" S: W/ T- n% S5 v- }* M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
# p0 L) e6 R6 @) X6 x$ N2 D* V9 U; }+ `
struct sItem9 Y; N# h7 \. x, q) E) D8 A
{
9 _$ P8 t5 i; DDWORD dwId;: M  o. Y; |0 c+ |1 J
DWORD dwKind2;
$ e' v1 b9 R4 Z  }  PDWORD dwItemId;' Y6 l8 x  y: C. Q5 d# C9 I
BYTE nIndex;( e7 I# Y/ M; G2 j
sItem(){
3 f) A1 y/ A9 z, G3 L, L  dwId = dwKind2 = dwItemId = nIndex = 0;
: g( C+ W" ^* z, L, {}
) ^' j0 v& L' u% f- ebool operator < (const sItem p2)* S% |# _* m- Z/ Z$ Y8 T4 X' }1 z$ H
{
1 y1 b; _2 g# m' ?6 q7 K( N4 ~* O  if (dwKind2 == p2.dwKind2)
  ?; [8 r9 {' o/ o2 k; W  {
4 q' T! X3 K* d   return dwItemId < p2.dwItemId;! Q/ e, M0 L4 k: v4 U7 e- s
  }else{% Z  U, y: d4 q& n% N
   return dwKind2 < p2.dwKind2;+ x* F3 Q  g% b: C! o
  }6 H+ ^0 M# l- [. d9 ~. O4 m
}
8 A" O, H% y1 k( O4 v};% H9 W6 J% ?( B
class CInventorySort
( Y7 o8 E& X# u4 z" w0 d{
( c) e- E; c$ p9 c- ?- cpublic:: q# k% E( P& X& `, U
CInventorySort(). c5 J1 K( c: @; l- F/ f
{( b( f" |# A. }& [
  m_dwPos = 0;
# I0 ^" E# u# z7 a& _8 i( N}5 R* L3 a, N0 K3 n# b( O
~CInventorySort(){}& m+ b5 ?2 P2 t* G
private:! t( v8 W" F) B- K: B- Y/ K. L
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
" Z* u  k6 u8 y) ?$ x5 vDWORD m_dwPos;
* L0 n( q& U+ A8 ]! fpublic:
3 f5 G! B) g6 h+ Y4 i4 K2 uvoid Add(BYTE nIndex)
$ Y6 `' U+ Z: ^& D) @{1 [4 L3 c( T, J- G' \- r
  if (m_dwPos >= MAX_INVENTORY), D* F* L& V% Q! M
  {2 N: P. X5 o4 Q
   return;
+ F1 S7 E' p/ ?1 ]; e5 U9 G' i/ z  }( h* g1 E, r, W: W6 }
  m_Item[m_dwPos].nIndex = nIndex;
2 a, q0 F8 Q5 e1 I' c. d9 ^3 S6 L  m_Item[m_dwPos].dwId = m_dwPos;
# U! A& ~- k& z% w) y% I  m_dwPos++;
& H8 U# h3 Z8 W/ u! f+ H1 D6 {}
" |* k5 d; R5 k6 l% ], a+ O4 b5 M0 UBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. [3 {4 e) [' x; d' i* W: O
{! r% x& X+ C' H2 ?
  for (int i=0;i<MAX_INVENTORY;i++)
9 q: G+ l% V2 Q: w2 j6 Y  {
  k  R; D$ _- ]! N3 ~% Q/ @' x0 `   if (m_Item.dwId == dwId)
0 p. b  A! S' C8 g3 z$ a2 f   {
, t# j0 ^( a) X    return m_Item.nIndex;
/ R8 i8 U- c* T) |1 r" V2 Z   }0 t) {4 ^3 x; y- \* r2 E3 Q  l
  }
' O7 W# Y- x  J! g. I% v2 e! d  return 255;- W. I9 H4 M3 [
}8 E+ l0 q  w! Y9 X" e( Q  b) g
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置" I) |+ U& e2 b. F
{8 g  J" G, Y  j( X# J: L
  BYTE nTmp = 0;
) W$ t& ], C6 v* m$ t  bool bDest = false,bSrc = false;
- f0 N3 H) I8 f+ w% m  for (int i=0;i<MAX_INVENTORY;i++)
0 U3 t, S/ F. B7 F, T* z5 P  {4 Z6 T& R% G# u- ?6 z0 E
   if (dwSrcId == m_Item.dwId)
1 O8 K5 C, F8 b* z   {1 B$ c: }4 L% L8 u# b' x
    //id相等 则 改变对应的dest和src
6 s6 v! U1 I4 V, o8 Y% N! V    nTmp = m_Item.nIndex;
- A9 u; W$ K- K/ w    m_Item.nIndex = dest;' I: Z$ a; X0 t7 {. A4 X
   }5 {" B. o$ m4 S  U
  }, r2 z8 }( J  u2 z& M
  //临时数据保存完毕,交换开始
3 H1 [7 `  x/ v# P7 B  for (int i=0;i<MAX_INVENTORY;i++)/ S5 t/ v& D# s) R% b+ U( o7 D* y
  {+ \3 @2 y! V; H( b1 X
   if (dest == m_Item.nIndex)
) S$ ?0 x! I" i: ]% Z   {% g+ C* j, X2 [0 L4 {
    //id相等 则 改变对应的dest和src
- ]( l8 m9 ^8 A( w. R5 G    m_Item.nIndex = nTmp;2 H) O. \$ M+ }/ t1 X! o9 Z% m
   }& a6 F  `, k% b6 l+ y  ]9 C
  }
# d1 ]# C5 H- I3 \" Y& @}
3 C) o1 v% T2 J0 y+ |};- L5 W) r- {7 T9 u
-------------------------------------------------------------------------
9 {3 P; ^7 W7 E' \9 I* Q依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )1 z( Z1 V( G5 [! b" ?# X& H2 P: M! a
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
: @( e) ]( _5 r紧靠其上添加:5 O& G' c1 Z3 J7 E
if( pWndBase == &m_wndMenu )
% I' W. M) G2 j$ n/ `9 z1 r6 U{( j2 c  m! w- V( o% ?
  switch( nID )5 I$ e2 p) }& d; S+ y: _  G3 p
  {
* b6 }, w; m* r/ S1 X  case 2:+ T4 _9 w# z% s
   {1 n- f: w0 @4 q" g1 O1 s2 [
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& c5 S, B" [3 B* M. ^' D/ f
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))% I/ p- P4 x) X2 o
    {
2 O/ w: a  {4 F" t     break;' ^6 |6 k8 X5 b: x
    }
: f8 @" h' t2 u9 V: n- ~    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++): l6 a" |3 I/ @' `- j" J
    {- H+ |, V  M9 g6 r
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);, s0 l# w6 k6 R: ^" @, G
     if( !pItemElem )
: I% U- R+ T9 ~2 P      continue;
5 y$ C* E& w  g/ Q' |& C. v3 v     if(pItemElem->GetExtra() > 0)
- @7 ~  I- U3 j& o3 L' j- @" E: A      continue;6 z( Q4 E9 u+ N
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  K* x  l9 I# \5 M0 P, C      continue;
; T6 ^' \& h, u+ |8 y     if( g_pPlayer->IsUsing( pItemElem ) )6 U& R6 `% z7 R
      continue;! C% i$ o3 H" p* H: r! H7 N( Z# h/ c6 p
     if( pItemElem->IsUndestructable() == TRUE )" _! R6 T5 \4 l: P+ `
     {
8 A4 T* S0 `" _      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
4 }* X3 J9 m! m1 h$ |      continue;
; N: v% T' {. {$ W     }
' H( K$ d2 w1 ?0 Z, a! A' M     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
. u' v6 {9 i( m2 C    }8 w& J- U, N$ @5 g5 k" J1 N( N
    break;
$ }+ |- s+ r6 G" B( V   }
/ h- ]& c; e, n- x% o, n5 T  case 1:% L2 O) f3 Q4 ?3 R4 |
   {
. V7 V$ @. Y( e: B    //整理背包
: Y1 A8 q3 z: L: Q) i0 _  M+ w    //////////////////////////////////////////////////////////////////////////
" X. C5 l) w: t% Y; b. }2 l. ~3 X8 y9 F    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );) p1 Z; t  `$ O' R$ U! G5 t9 a
    //////////////////////////////////////////////////////////////////////////
+ S: Y  G9 D) @  H6 [0 v- d    //////////////////////////////////////////////////////////////////////////8 }: w3 a3 M6 e" B) M9 ~, G, ?
    CInventorySort* pInvSort = new CInventorySort;
1 ^  i3 f) T( k' I    vector <sItem> vItem;4 ]: y" ]* Z7 P# c6 f$ P+ Q/ U
    vItem.resize(MAX_INVENTORY);//初始化大小
+ e: {; Z8 A8 r2 y4 p' D. y     //////////////////////////////////////////////////////////////////////////# c3 T7 U8 ^2 f- d
     //填充数据
: S: Y( |( }0 d     for (int i=0;i<MAX_INVENTORY;i++)
" S2 a3 }; Y8 e. I, w5 m     {  N, O' \# C# g3 x9 C+ l
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" l& K& H! B( `; V      if (!pItemElem)
8 Y9 ]$ D1 K5 H- C  D" I8 ^/ m1 g      {
8 S0 p- ^8 X6 J* _! @* {) V       vItem.dwKind2 = 0xffffffff;
* D1 q4 J: `& Y4 B/ q, W& T       vItem.dwItemId = 0xffffffff;
! t: [2 G6 i) J" k3 Z! X. v% M% v# I       vItem.nIndex = i;# ?- ~  ^3 S2 L. W# p
      }else {8 j4 h6 J6 L: N2 W3 t
       ItemProp* pProp = pItemElem->GetProp();/ D8 f7 a$ C. L
       vItem.dwKind2 = pProp->dwItemKind2;
. {! @2 N. w/ q8 z$ _       vItem.dwItemId = pItemElem->m_dwItemId;
+ a1 g9 T  E1 o3 k/ f$ d       vItem.nIndex = i;
8 Q  O  j+ S! P9 p      }
; G% O3 G3 |" p% L" A) N$ l      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ n' a8 i% A4 s     }# @% r& e1 p) F
     //////////////////////////////////////////////////////////////////////////
4 X0 ]9 Q  x) l; i- {: I2 R     sort(vItem.begin(),vItem.end());//排序
5 C) F) j. H  |/ `9 y- I     //////////////////////////////////////////////////////////////////////////* B* K6 x4 B" q( |
     //交换
* d3 B6 B4 F; O% p     for (size_t i=0;i<vItem.size();i++)2 c2 o, u& f) R5 h, D  l+ ]" E
     {
( B4 L0 q$ X' W$ f' U0 e. K      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* n+ O  `% v: ?) ?# [1 g      pInvSort->Add(vItem.nIndex);
6 H5 f, x  {! Z. k; L     }
1 f' u9 z  A' Z5 G     BYTE nDestPos = 0;3 \, f3 B) A2 x
     for (int i=0;i<MAX_INVENTORY;i++)8 g+ d" r/ e& W& N# t7 J
     {
9 G5 h$ S) L: I      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
# H# @, W; j1 ^( s9 D. o; p8 H% e) b      if (pItemElem)$ o! t8 ?% ~5 o2 @) a5 n
      {
& a9 D9 c0 M0 O9 E       if (IsUsingItem(pItemElem))1 h. g+ @+ i( n6 A, Z: y  f8 s  u
       {1 g2 s" j6 u- @/ h$ y, e% Z# f. C1 }# l
        //这个位置无法放
7 C3 w/ X+ v/ t  e        nDestPos++;7 r- u3 @7 M. j
       }  e/ L. k7 L# ]/ R* d
      }
6 Z3 ~( D" |2 V% I. b      BYTE nSrc = pInvSort->GetItemSrc(i);4 ^4 S' r6 T$ G( f
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
' Z' K' o1 ^: C      if (pItemElem)" n* s. @/ g0 O1 `) d
      {" j; d* o, v4 P; v) j( U
       if (IsUsingItem(pItemElem))
, U# \. i. C4 Z( ?- [& }       {2 G/ n# k7 {2 i; r' b$ z) e
        //这个道具无法移动,跳过
9 @8 C0 m! q) ^- A% e        continue;
. o. P5 f5 g8 E6 A" j1 S       }9 ]1 r4 ?3 a: p3 f+ l. o5 `% Q- H
      }else{
  Y' |2 [3 C/ Y! C$ I: Z       //空位置 不用动, Z; A( c" V8 A: a0 v" q1 B
       continue;! X) x4 f- w- Z# H* U
      }5 T/ \6 J7 |: s6 f
      //////////////////////////////////////////////////////////////////////////
  g# [0 C  D! [2 t; ?      //开始移动
' g+ [+ j( o/ L( T, _      if (nSrc == nDestPos)
+ O# E- Y2 J+ R% e6 f# [5 J      {3 d) l; J/ w2 Y4 m' c5 D0 Q" A
       //原地不动
- X8 f. G0 M( T       nDestPos++;
. Z9 C! c8 U2 F( d3 l, N9 l5 W       continue;7 w1 w/ M  k' g' b& E8 R
      }
" r2 |; V5 R+ p9 N+ u) `) P      pInvSort->MoveItem(i,nDestPos);
/ u4 r1 [/ n9 Y" J6 P) O5 b5 Q      g_DPlay.SendMoveItem(0,nSrc,nDestPos);6 N! z! O- a" {, ?0 q( e# C+ I# w: L
      Sleep(5);9 ^4 l' D# m8 q9 d& g8 f3 B$ x
      //Error("移动 - %d->%d",nSrc,nDestPos);
4 h9 v3 n5 N( X1 k/ g      nDestPos++;
% {2 z4 A9 V6 \) O  k! J1 \- g     }
& v; y) j3 k3 b, Y     //取第一个元素的信息1 s6 K8 v0 J9 n8 ~6 U1 f# o. q# E3 X
     /*
  F" @4 B; g& N2 z     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)9 l( k. X3 X3 m! Y4 i4 A
     {
3 s$ \4 Y) D5 m( Q* A& V      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# E3 Q: B7 Q5 n2 _& e
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);9 t9 Z: U9 u/ Z$ v- I4 e
     }' U3 d7 q* Z  q/ a7 R" R/ w
     */
- {6 E' Y' a7 {& Q) a* `+ K% r: J1 K& n    //////////////////////////////////////////////////////////////////////////
% l. {* a& [0 [; X0 j; x" h' `    break;
0 X4 n0 Y! P+ @; e' S, s9 ~   }
4 t) E# y4 N7 W6 H# B9 M. }  } 7 h+ E8 C2 @4 s2 U( o
}8 w  K" t6 Q3 J: I. W, @
m_wndMenu.SetVisible(FALSE);
* r1 Q9 U: k! G4 B$ O2 Z* |' |" A& z
--------------------------------------------------------------------------------------------------------
5 w4 q3 {8 Y1 A* w3 n/ w8 y, [搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
; l* Y- n$ \9 Y4 F7 {, y, v3 ~{* U4 H: I' q& W% Z
BaseMouseCursor();' E9 R9 I  \1 h& A# v0 x6 N
}6 C& w1 e5 _* o& b* O9 t7 Z! X
在其下添加:
6 V7 N2 d1 R' uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)& A: |( P3 h) j  T. _4 r8 q" k
{
" Z% k( f" W9 L6 z5 I) Hm_wndMenu.DeleteAllMenu();
: K7 J6 n1 ]$ g" m# B$ U/ Hm_wndMenu.CreateMenu(this);* I: T, [. L: K$ r) x" F* I1 t
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");0 m1 i, d/ ^( f" \# {

" G6 |, p, c( Y2 Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
  L; `1 G. ^- m+ y0 J0 X{
* V8 X: y* r$ t+ X5 L% r  //P以上级别才可以删除所有道具4 v3 W* Z+ A) J, }% {) u3 b+ z
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
) D1 K- C$ P) o4 W& y% X* R( g7 q}# l+ D7 \2 T3 m8 D3 ?
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 K; K! ~$ D1 s9 w9 ~: Vm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
4 u5 y) N" E' k7 V! Q6 t7 Om_wndMenu.SetFocus();5 W! b* z1 N8 H2 o2 F, N# e6 n
}* t4 o/ L9 {5 B2 G2 t
------------------------------------------------------------------------------------------------------------! C" P' h, s$ K. b/ @
*************************
5 \+ ]% ~& u6 t* DWndField.h文件
1 T( _1 @8 Q5 L. P*************************
& p- `/ }, r2 Z4 M+ B搜索:BOOL m_bReport;
8 U1 D8 Z9 U0 k# [$ h0 Q其后添加:7 {$ D: e% J' m/ A, y
CWndMenu m_wndMenu;9 Q+ a& [% f* R
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 b- {7 t" I6 C8 z" d, q其后添加:9 D, v; w0 z4 M- k0 g/ G4 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);1 D4 c; M' K9 h4 D
' V7 i% a: `8 x0 r5 j3 M7 H

0 _: n9 a6 y# d

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 19:48 , Processed in 0.065462 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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