飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
6 N- |4 ~2 I8 h& M, I! \7 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
8 t% S5 ?- }# a) f2 g+ |  H" T/ r- l( P" o4 P' h
struct sItem! M* D6 O& h: g3 I" U3 M
{3 _, j  Q* _) ?/ Y/ e; z( b5 y
DWORD dwId;! x* r+ x% R2 `/ j1 N0 s
DWORD dwKind2;
; v3 z( @' `* M8 EDWORD dwItemId;
1 q: J0 V8 n" y# M: r( V' fBYTE nIndex;3 N7 s. s* b' e; D4 d: V
sItem(){
1 N5 a% }3 x# R' n+ r- X  dwId = dwKind2 = dwItemId = nIndex = 0;% V% m! S/ c4 }. a% R" s
}% Z+ R7 ]- d( n1 I/ F$ {$ E5 ^
bool operator < (const sItem p2)
7 a' g. e2 b# H# X5 X, i; Y{
% m# V3 ~0 L5 I8 j7 S( r  if (dwKind2 == p2.dwKind2)
8 J4 k1 Z3 U1 ?+ I' v0 h( s* X* Z' I  {( E/ [( w; f% B0 f/ M3 j! C
   return dwItemId < p2.dwItemId;
/ s. p/ D; X/ M7 O/ K# ~% j  }else{
& c% S" {; W6 C( D4 V   return dwKind2 < p2.dwKind2;
/ e8 m! U( N  K; H) `& W" A  }# E( t* ]% }( x/ P
}
, A. ]0 X' S0 J7 Y$ T$ @7 I/ p- a};
/ f4 F) R" j7 }# I3 i* }class CInventorySort) q! s2 J) N! Y8 o; N3 J
{. ^( i5 A; G  U0 ~, n# g5 M
public:
7 [% A/ A3 ]7 u* V+ @  U* ~- q- mCInventorySort()! p$ l' S& m, U. j# `; l; S
{% a: \3 \4 F( x/ G! F# j$ Z* R3 t8 l% x
  m_dwPos = 0;7 M7 R) b* _5 z; [
}4 F9 K2 P: P7 Z& m3 w8 c, i
~CInventorySort(){}! s4 D2 Q+ J; T- }! x6 k; k7 Z
private:" m1 F; b! L3 }- J( c0 J. ~- r
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
3 }) X+ u: C& Y9 I- t; S( e; j+ lDWORD m_dwPos;$ e5 e( m7 ]' B; f7 ]
public:
- |) {1 ^- u1 R7 M4 |0 {/ t, R& ]void Add(BYTE nIndex)
0 d1 M( z4 D. R- S+ m+ g# ^{
" z9 \0 I1 K7 p/ N5 }" j7 o( `5 \8 F  if (m_dwPos >= MAX_INVENTORY)
, y& A- x# {+ x  n& N  {
1 Y( L1 v/ U# W# N( P   return;
( p$ t! a) k/ k% J1 g8 V  }  S) f* r, v3 s/ o' h
  m_Item[m_dwPos].nIndex = nIndex;
7 o, a: a  j$ |1 u, J$ t  m_Item[m_dwPos].dwId = m_dwPos;
, }' [/ m7 b; K9 h* ?+ }/ z( n  m_dwPos++;
6 D  ^0 H# N4 n- R# y}
4 P, M0 e, _1 vBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列, @+ n: \$ `! ^% E: |1 V$ W3 T
{- p4 d& X4 W% i: g: ]
  for (int i=0;i<MAX_INVENTORY;i++)3 W- i# \, R4 Y  e# n, f0 V5 n
  {
7 K. a& d7 e. ]) I  G! @6 K0 m   if (m_Item.dwId == dwId): M; e- h) f2 n5 t- j
   {
8 t; T! q$ G+ t) n6 R" B    return m_Item.nIndex;) K( |4 P+ J$ [9 a: l
   }
. T- r3 d% E7 P$ y  }
2 T+ V4 N* }8 X0 H9 D  return 255;8 E# N  P: z' e2 Q6 Q8 ^
}
9 U2 x& e$ u0 n  s6 g( rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
" i+ [) Y# {% s( }: t# {- a) _/ K{4 N4 w3 Q1 L1 K# r
  BYTE nTmp = 0;/ B# S+ l) O* t# C
  bool bDest = false,bSrc = false;
3 J2 }5 U$ ], T0 A  for (int i=0;i<MAX_INVENTORY;i++)) l1 c) B/ \2 O* r! C
  {! c0 S7 W7 r. Y) [1 ?
   if (dwSrcId == m_Item.dwId)# y+ i( {4 |& F  G. O* T0 {
   {1 o5 [- x5 C2 |/ S
    //id相等 则 改变对应的dest和src
2 l2 m. h% A8 t    nTmp = m_Item.nIndex;9 }& O& {& G# b, H" ]- g* W
    m_Item.nIndex = dest;
5 l& P" z8 c+ N5 i! T, y' n   }
  W& w/ N  b" E, w  }. t6 S/ A. S9 i9 i  o
  //临时数据保存完毕,交换开始
. D) R2 u& \' i$ M1 V  G2 L  for (int i=0;i<MAX_INVENTORY;i++)- u; |, I% ]: {7 L
  {5 Z7 U4 d6 k" [" x
   if (dest == m_Item.nIndex)
# v: Y# m: G1 ?* c, M   {8 Q) q4 G* m- a% V
    //id相等 则 改变对应的dest和src) w3 L2 ~* r* k7 n
    m_Item.nIndex = nTmp;2 E8 S# L# ^- v
   }
3 G* ?4 d/ o3 E  }
7 i% a4 H5 O: D}
6 j/ i. v% X' U, H" E};$ i" j. x1 m9 b2 }' M
-------------------------------------------------------------------------
0 l5 N. J- v+ N- |依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
* t1 v1 C9 w; o$ V搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- ]. i4 s- F8 L- p紧靠其上添加:
# x% W3 l( S3 T/ q  Aif( pWndBase == &m_wndMenu )! j- l% }/ B7 v2 ]" ]
{
1 ^7 l, u  i2 `; V3 j  switch( nID )
$ @; s3 @) r' w2 \, Z  {
8 ~0 P+ |( _2 P+ n3 B( l+ R  case 2:
* ?8 o. v7 z) b+ i   {+ c" j8 q/ ]  t+ ?8 E2 N3 _* R- F! V
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);. k% A1 D* _, P1 o2 S& J$ l2 U
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))  Z( K! g  M- p' z+ Q& y2 ?
    {3 X8 A9 t0 Y+ k. s) k% d6 h) E
     break;5 `' h$ D: H9 f! o& f. u
    }2 ]/ r$ O% Z0 g8 |. q0 V8 {
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)% d( i& G2 V) i' L  C+ u
    {
  F$ S' l- T7 j  M     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
% w$ f, V5 X5 D* m+ n0 G& n     if( !pItemElem )
- y; P, @5 D! @! ^8 c. ?      continue;
5 _+ J/ A! \+ d; x     if(pItemElem->GetExtra() > 0)
$ ?4 m' G/ m! }( j! R5 X0 u      continue;
  z8 K* k* O) l1 T     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 l& }$ i( X7 y, b
      continue;) i1 l; |7 w2 f; ^! L0 G  |3 q# ^  a
     if( g_pPlayer->IsUsing( pItemElem ) )% X* L1 j3 E) a( C# x6 a
      continue;3 L7 |5 h" w9 H7 N& X" v7 h; y
     if( pItemElem->IsUndestructable() == TRUE )
* p! N) D" N8 d8 l) O     {% u3 ^. m& {$ @5 H7 K8 w$ D
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );) ^3 h) N" G* X- ?9 k# s* F
      continue;
1 Q4 ^5 r3 t: t+ ?) `8 F     }( Q& j5 o, X% R, J3 l+ ^% R
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
: R' F+ g7 H/ \6 c( r    }
  J9 a% U" x+ D+ R4 l6 X3 P. S5 p# i    break;
% l) B: U' `. p; }7 a) o3 m9 l   }* o9 J8 T) o1 ~, O1 H) a9 S  a  F
  case 1:# @- O2 t3 i1 w- U$ |
   {) @8 o$ j$ k: @- x% l
    //整理背包
, d2 @" M# f) [; x: z    //////////////////////////////////////////////////////////////////////////1 V6 L8 \" z) e3 `& V
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );+ X. ^# E- ^. w5 C
    //////////////////////////////////////////////////////////////////////////2 l9 O! f2 K, o3 I& h0 |8 @
    //////////////////////////////////////////////////////////////////////////! ~- u$ ?) U3 B! A! G7 M
    CInventorySort* pInvSort = new CInventorySort;
3 T& N. M: C0 L/ {4 c* a3 W; V" ~    vector <sItem> vItem;* _2 \* g" ]- k3 |! f2 y. D0 e4 B
    vItem.resize(MAX_INVENTORY);//初始化大小- V& {1 D; [, X" O! I& _, V6 ~
     //////////////////////////////////////////////////////////////////////////  z' y8 @4 U% K7 o8 A! A' C  H
     //填充数据
. [  n+ y6 ~- U/ S! n/ g2 q" p     for (int i=0;i<MAX_INVENTORY;i++)
8 {4 ?5 a4 _3 e0 L4 q1 M     {1 _/ C- `5 {1 O' i. b& t6 v" @
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);' v! k9 I) C; v9 D4 x
      if (!pItemElem)+ L: K5 V1 V4 W
      {
/ z9 i4 K$ T, |3 s  i+ }5 A  X       vItem.dwKind2 = 0xffffffff;
2 K8 h8 a3 p0 c" m       vItem.dwItemId = 0xffffffff;& R) Q: v5 |. g: K
       vItem.nIndex = i;. \$ z& a4 }( n0 f* q( e8 r" |
      }else {
: C1 y& n$ ~* l: D7 a       ItemProp* pProp = pItemElem->GetProp();2 S3 w4 P( _6 J4 ^. p; W) G! n4 m
       vItem.dwKind2 = pProp->dwItemKind2;
8 }$ }- Z( ^4 N+ E) ~$ P* h, Y       vItem.dwItemId = pItemElem->m_dwItemId;2 ]" K: a4 O0 j: m# R4 t* _
       vItem.nIndex = i;2 h$ C  L, G: @4 \: I
      }* W8 S! D8 d8 H8 `& @4 h
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) p" k- p% x  J0 h0 h& M     }+ E( x0 h5 i4 U4 l4 o% Q
     //////////////////////////////////////////////////////////////////////////
9 ?9 g. l1 o1 p! f6 E     sort(vItem.begin(),vItem.end());//排序2 q2 D6 W' j  y, A0 J4 k
     //////////////////////////////////////////////////////////////////////////' `: x8 ~0 e: @! }; U* ~
     //交换
1 L9 ~9 i+ L! A0 I' g2 f     for (size_t i=0;i<vItem.size();i++)  i$ D) |- X5 y+ Z
     {
+ U. H" F4 c8 M3 g9 d      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' R9 S" D" {' S' ?5 a
      pInvSort->Add(vItem.nIndex);
7 `) G/ {; K7 e4 ^3 ]0 |+ ?/ P     }
5 l$ i4 \1 S8 i' q. {* `     BYTE nDestPos = 0;+ G. j6 i1 h  e. h/ d
     for (int i=0;i<MAX_INVENTORY;i++)
$ C# q7 r8 Y& F* |) T6 q& }     {
* ]/ k% y3 H9 R& F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ Q0 x/ C0 u& \2 t5 K; s* q      if (pItemElem)
5 m! i& q- q& b: n$ i3 ], ^      {( I( O! I, m& A! ^! ]1 [; u) ^
       if (IsUsingItem(pItemElem))3 B+ k2 G% i( f. q8 [
       {
2 w4 }' m6 ]# W  f5 P. i: y0 h        //这个位置无法放
* ?& D1 c1 {1 d1 B" `2 A4 \        nDestPos++;7 L0 D4 D4 ^0 ~' J- e
       }
6 z, I0 p) B- y) w5 T: v      }
6 O1 k3 x: W+ x- C3 ^      BYTE nSrc = pInvSort->GetItemSrc(i);
* g! o4 |9 X. l      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);# m$ z6 h2 _4 `
      if (pItemElem)
$ P9 w( [9 b1 f9 P  `: h' L. @: [3 X2 k      {9 P2 [: a! _; c# q; u
       if (IsUsingItem(pItemElem))
0 b/ `. V; }# ~; P+ e       {
0 M0 p( E  n. ?        //这个道具无法移动,跳过
) P- e9 g0 z% v+ e        continue;
. r( E/ |  ^, g% I9 n& W2 f. w       }
" J/ q9 q$ R8 l5 a      }else{
% r- y/ [( C1 d       //空位置 不用动
* `% l) ?2 _1 F       continue;( X' @2 n% u8 S8 {- y% \
      }
3 A4 L( J2 B: n. s/ e2 S      //////////////////////////////////////////////////////////////////////////
! a! I3 H, X: l3 M/ s      //开始移动
: G/ b# n) W' l* o      if (nSrc == nDestPos)$ T9 T5 @1 ~3 A0 P
      {. {$ c& D/ c. s1 C, l* h
       //原地不动2 d3 j: K& z1 L  u; j
       nDestPos++;
, k  r, @# G: }5 Y& V9 F5 K       continue;+ d$ M- Z+ x7 ^4 P7 u  j
      }5 Z  S$ F& i2 a& z; v
      pInvSort->MoveItem(i,nDestPos);, B* B% i" Y- j. X& s" _1 D! o8 ?
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
" u4 b. v9 N0 J5 U. p, j% i5 d      Sleep(5);, ]4 C8 p+ q6 u8 P
      //Error("移动 - %d->%d",nSrc,nDestPos);
' m" u7 s* b$ v* E" G( m      nDestPos++;9 R9 k5 A0 K( _2 W
     }7 V+ i4 p( }7 X! o) ?/ a
     //取第一个元素的信息, C4 U  Y7 C6 T/ `
     /*8 G, w8 p5 R' E5 c
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
9 _- l+ c9 a# R: v# I9 a     {) r) q/ W# F/ U+ _& ?$ ?' B: a
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 Q/ q+ d7 I6 c# f: |      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% ~3 G( o0 V# S
     }
+ |2 R) [$ i5 M! `2 N     */
# ~# b+ t* G0 c* H; z+ q! B3 m    //////////////////////////////////////////////////////////////////////////" P2 Q4 x0 r$ ~0 h; O- Z* Q' F
    break;3 ^  l2 H' e) u6 B0 J% k
   }
" V1 w6 ~. \2 ~. G% T  }
% P7 K8 c% @6 y' F/ c2 j) {}* U: {9 u( D& T' A% @
m_wndMenu.SetVisible(FALSE);
% o, A1 L  k3 H2 f$ v0 i! c: b4 R/ X2 p' D- b5 X& I& `4 t* u
--------------------------------------------------------------------------------------------------------& c  B9 J" V) @( e- ^$ y$ l) O
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# `4 q+ N6 G3 ^9 `' N7 r
{# b9 b1 {' ]1 I! f. D7 p3 h" D* N" b
BaseMouseCursor();# y9 l  D4 n% ~( I, M* L, I, a! L
}
0 c; Z1 I- Q! B9 j3 U在其下添加:7 F/ d8 x) {; o3 ~( M* a
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
8 B. G' \  d# D0 m& u  @" q% _. L{; P# s" r/ u' T, N, e
m_wndMenu.DeleteAllMenu();
) Y# T4 W2 K6 R0 i: l) V' q1 m8 Wm_wndMenu.CreateMenu(this);
, n  y6 X3 h( t3 ]m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
3 e: a4 B# `, L
. q6 `) V* k% ~( D8 rif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)): c, \! ^( R; k' M
{
8 g* l) F0 H$ t; O. P3 i+ Y4 _" C  //P以上级别才可以删除所有道具$ q# L  S9 j/ m1 Q5 R* U5 C
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");  N1 J6 [3 k: Z% C
}
3 |4 z6 s0 w& X9 H3 f$ @" b9 km_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );$ H) I, ^# ~7 w% b3 Q
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );- e# o# e) Z" L' O3 @7 M
m_wndMenu.SetFocus();
& F8 a! ^# m! X* |4 g4 j; P}
) z/ A, a9 E+ b------------------------------------------------------------------------------------------------------------9 N: I# u; N/ C! q; y1 X+ X
*************************
3 Q# r# u# P- H! Y$ i. v7 h5 ~WndField.h文件
" O/ r; B7 g, r/ m6 w, o* C*************************
9 @; V1 P3 S% U: y0 G搜索:BOOL m_bReport;
. T2 Z% ]0 O% [; l; a7 K) j* |0 A其后添加:
0 R  y$ l& T9 b  E. Y7 i0 V, vCWndMenu m_wndMenu;
0 l3 l0 \' Y, m" T) P. n搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);- A! p& }' P8 G
其后添加:
8 U/ R9 ?/ W+ @( P" dvirtual void OnRButtonUp(UINT nFlags, CPoint point);
# r( }0 V6 J& x
6 O9 g$ R* _/ W- y3 J: |- p, I. U! h) w

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 14:17 , Processed in 0.063246 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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