飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
  `& K# b% z. c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 S" X' Y" A7 O" b( m' F# s3 b1 X. B- j9 T" f# {/ z
struct sItem% y9 v; q) E1 g+ g! ]
{
1 \3 C, W( m1 C8 N3 X5 vDWORD dwId;5 J1 S: I# I! O& S
DWORD dwKind2;8 n; `$ h7 L3 H7 p* _# E
DWORD dwItemId;
" J! r8 c# o: ]. w/ r( H. B- mBYTE nIndex;2 M, t+ I" `+ K: N
sItem(){
6 e* v5 X  w4 R0 G8 N6 ]/ a0 [: ]8 ?  dwId = dwKind2 = dwItemId = nIndex = 0;7 m% a6 j3 U% k- G* |" E. t+ m
}* l4 [- r$ ^! Q9 M
bool operator < (const sItem p2), \. g. f1 ]6 ~9 j; _8 l
{
" u  }8 }* u! p: s8 ^+ K  if (dwKind2 == p2.dwKind2)9 r* x! l. v+ E/ V3 L( J
  {
! i# u, Q: L! `6 N; O   return dwItemId < p2.dwItemId;+ L4 s# X3 f& A1 J
  }else{5 T& _$ u# t# b( y- ]
   return dwKind2 < p2.dwKind2;
8 d( q$ y& b3 ~, j  }
# I% s) M/ R0 y8 O5 h# h}
) X- N" k7 a# z" Z5 ?" p- L};
' s$ c+ `' G- f# J: Wclass CInventorySort6 M9 O: _& W0 ^8 ?" Y" R
{$ X5 E$ m% u" P- j
public:
! J" P- R" N& n9 u! @) E) u5 }5 K0 b+ _CInventorySort()( u$ `* i. ~% a( g- o6 L
{. z% @9 P$ M2 c2 ?+ d& E
  m_dwPos = 0;
3 l+ W+ C) H7 D7 i/ ?( c5 o& y! a}
$ F2 M9 @" V& o~CInventorySort(){}. R/ u" F+ w4 V+ j
private:4 [' o* S' ^" Y7 S9 j1 b& Y1 m+ u
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息( N) z4 r+ O2 ]7 g& c
DWORD m_dwPos;
7 m5 U( u& A6 y+ E- v  R) P$ ~public:
$ |  U1 @8 F( Y" _( Tvoid Add(BYTE nIndex)8 @4 H, ?8 H! X# c
{; m3 u0 B* R3 [4 w2 F
  if (m_dwPos >= MAX_INVENTORY)6 F$ \* v+ F' w4 [# C
  {
" u8 F, _/ N  m2 Y4 f( B   return;
8 T2 y- }) H3 M% I0 _  }
/ J. W( X; q8 n7 d4 R1 t; Z5 {+ i4 d, ^  m_Item[m_dwPos].nIndex = nIndex;% B+ f  g7 C, P( s$ G, H
  m_Item[m_dwPos].dwId = m_dwPos;
& a, c' L9 o% m1 P; p" o2 e7 k  m_dwPos++;
) o  e  G, n  T' u7 H# U}" i5 e$ y/ N$ v% M
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
4 i$ z  v; Q4 k" L% V{
/ L/ b2 `4 V, V  I  for (int i=0;i<MAX_INVENTORY;i++)( C- Y, a( V2 D* r" U
  {
; h4 S! m4 \# @5 p$ }1 A+ D; @   if (m_Item.dwId == dwId)
9 D& y4 r7 x( b   {
/ d/ Y" s* L! g$ f* y) R2 D& I' R+ \    return m_Item.nIndex;
$ R2 o7 \/ w/ R0 h   }, a$ H% {2 h) n( |& P2 q5 }; w
  }
, g/ k9 A2 u% S! z4 G" m2 f  return 255;8 g3 X1 s) G$ v
}
, t1 n& h; P: |% r# V+ e, {. Svoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
8 P9 x- B1 V: U1 I$ X{( f0 Q; c. B( c
  BYTE nTmp = 0;* S, M4 ~7 V/ c+ P3 S
  bool bDest = false,bSrc = false;0 z7 b! o; s( X8 q3 ~, H
  for (int i=0;i<MAX_INVENTORY;i++)
% C7 T- _7 ]0 ~0 a  {
" C. }6 x8 g/ j+ W0 b$ s   if (dwSrcId == m_Item.dwId)$ U$ v: F+ A: `$ s
   {
" N/ P: l: B" Y    //id相等 则 改变对应的dest和src7 z, J! ?  o" ?
    nTmp = m_Item.nIndex;( S, W' ]+ [/ Y: z( r
    m_Item.nIndex = dest;
; o( N; P' g# U& t7 `; ?# e4 a   }; A' }# A  k2 Y7 e4 I/ o
  }! u5 G" O0 X% C1 @
  //临时数据保存完毕,交换开始, c$ o8 O# z7 z/ t% ~
  for (int i=0;i<MAX_INVENTORY;i++)' S/ M6 j$ U, q  u! `
  {. _6 R. Q- ]7 X4 h$ h
   if (dest == m_Item.nIndex)
# h  }, t# ^5 p- J   {" v: g' K6 |8 I( c% ^9 T
    //id相等 则 改变对应的dest和src
0 f' q) \7 U$ d- m- p' x    m_Item.nIndex = nTmp;
- C- Z, s4 c! ^/ G% j1 _; _( K( b   }
) t# s% v4 }/ a$ O* a; B0 p4 s$ o4 E  F  }
$ h! z/ g  P% C* O6 y) X5 U}
" R: n9 j+ N8 ]. A) b; Z. P};
: A* _; u9 s% S! w7 _8 k-------------------------------------------------------------------------
! R% F( L) _4 k% P( q. \6 l依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )' u4 w% W4 f: m% F, h& c
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
2 K$ n# U* Q% y& w) n) u" K紧靠其上添加:+ b: N& [0 p: }: W% s; x
if( pWndBase == &m_wndMenu )
8 W7 X2 {" A* f' ^  i5 i7 d{
* p: f# a. u9 [; g" t5 }  switch( nID )
8 H+ h+ ?7 {" c  c6 s0 |  {& {* G6 r# u9 e. V; Y+ z+ g
  case 2:
% m5 ^0 ]  f8 \3 P  Q) `2 @   {2 e8 A2 M2 q/ U' `% Q( h+ W( o
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);7 |; O- ], k1 A, W/ H( |
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 S  n9 j/ A. g& ]    {. b6 M/ `% e7 x( W$ E
     break;7 M+ g! ~& J( U4 D& [: K
    }
3 s8 M! w# Y3 T" U" i3 T5 l    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& o5 v) d( c; c' N
    {- W; q1 B2 h# w5 R
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
+ U3 p+ B, h  y9 V3 |) D. {2 [% d     if( !pItemElem )
$ W# d' I7 t- O) w  }7 |! o$ p3 {      continue;: A; e2 }2 d6 g$ M; ]" v' b
     if(pItemElem->GetExtra() > 0)
$ s% _0 A9 G( K! d      continue;
9 J* p5 c; J5 v! T: v* R     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
$ q$ y% h' }0 a7 f- `2 W+ _3 T+ S      continue;
3 D" D, C6 [% w) `     if( g_pPlayer->IsUsing( pItemElem ) )
5 C) d2 x% G; u0 _& l      continue;
6 V6 W; l* q! d4 g     if( pItemElem->IsUndestructable() == TRUE )
6 T4 W+ t% `, }     {
8 C; h  A) C" ]/ e      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );( g/ M  k; ]/ S6 X8 t2 \
      continue;
& |: H# M: ?3 R! w& _     }
4 E6 [. C+ @- A7 K4 `     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
" C! w. R* x! i" |$ ]" J  n. x( v    }6 ^3 {4 `1 a3 h  U" R
    break;5 `) l8 H5 D# ]5 k" S. u* n8 y
   }& G+ f' h2 @, v0 q3 L% x- R
  case 1:
9 C0 J" M, Y; \" T5 N   {9 @0 K1 L9 M8 E6 Q* O
    //整理背包
8 \+ T: e% U- l    //////////////////////////////////////////////////////////////////////////
/ c+ x. G1 v; d. k( q3 k    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
- d& P! j7 m- o. V8 [% K3 S    //////////////////////////////////////////////////////////////////////////. ^! [3 L5 l  C
    //////////////////////////////////////////////////////////////////////////& C7 R( P! j- d
    CInventorySort* pInvSort = new CInventorySort;
; x8 T% j1 n. j    vector <sItem> vItem;/ ~8 Z3 B) K. e; ^! w0 Y
    vItem.resize(MAX_INVENTORY);//初始化大小
  {* K/ z  Q5 b2 T     //////////////////////////////////////////////////////////////////////////
- j+ K- `1 y3 H     //填充数据1 W2 k( A- b, e1 E( B+ v3 V- l7 A8 E- n- o
     for (int i=0;i<MAX_INVENTORY;i++)1 `% R$ r* x; |
     {; N. D; f/ b! W
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" @% K1 O- i+ z
      if (!pItemElem)
, m. l: ~8 A( W' |" C0 T& E1 h; m      {! y+ T  ^( K# p& r# X# a
       vItem.dwKind2 = 0xffffffff;
/ s- n% D) ~/ z& I       vItem.dwItemId = 0xffffffff;
# E. r1 ?4 I8 K       vItem.nIndex = i;6 }+ [* D8 n& Z+ U9 R% l
      }else {
6 B3 q' O; j  ^& a2 P! Y       ItemProp* pProp = pItemElem->GetProp();
6 d6 P6 U5 w- q: X3 O4 N# z       vItem.dwKind2 = pProp->dwItemKind2;3 }( l8 ~6 w+ l5 j+ U1 \4 \8 e. _% _
       vItem.dwItemId = pItemElem->m_dwItemId;% U5 P$ X+ ?$ v5 a, y. |
       vItem.nIndex = i;7 V. _" ^4 l8 u1 T9 Z' o7 Z# t7 L
      }& f* u3 i) n. ]# y& a  P, L, I
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" ?& }' C; _% F$ h  G     }
9 ~9 l, I6 h1 \+ G     //////////////////////////////////////////////////////////////////////////" }# f" \, E  R) K& W1 A5 Y
     sort(vItem.begin(),vItem.end());//排序9 V. Y. G# n# @
     //////////////////////////////////////////////////////////////////////////$ z% s9 }! l- I: q& H# ^  v3 K- H
     //交换
  |+ C+ D% J8 U+ c4 Z1 e     for (size_t i=0;i<vItem.size();i++)( Y" M% [+ ]" y8 p1 G
     {
6 Z$ {6 {! c" r& d3 V      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- @0 a% _6 }% v
      pInvSort->Add(vItem.nIndex);9 E; e% f2 Y- r+ [
     }, s% y" c* U2 }5 r0 `
     BYTE nDestPos = 0;
  m0 U3 t9 B" a3 p7 \! ^# k* X5 q     for (int i=0;i<MAX_INVENTORY;i++)
4 R% A9 Q$ x# {) T4 _2 `% `     {
4 D, w3 d+ _" X% J' i      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);8 ?5 d( g9 t+ M+ V# m- t
      if (pItemElem)
  X2 _9 A6 _; Q      {% t& }8 E8 u8 o. [' ]( g
       if (IsUsingItem(pItemElem))& u1 V% _/ F+ X9 b: R# ?
       {4 e/ s" `1 G3 s# g
        //这个位置无法放
( W  x7 ]2 ^+ T  u6 f        nDestPos++;6 |+ f% O% V2 B0 O1 B
       }
$ Y6 Z: ?. b5 \6 k* }      }
$ X1 c+ a6 `3 v$ t: n9 m0 Y      BYTE nSrc = pInvSort->GetItemSrc(i);2 h+ Z8 ]: P" v& A) `$ ?1 E; h
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# C/ ^) g! b( F1 M+ ?% F      if (pItemElem)
9 D+ _6 ^$ _. `. v/ ?3 F      {
9 a& f# u8 {: x+ c; e( y% ~       if (IsUsingItem(pItemElem))* `3 U" b3 V/ K- N, ]8 {2 S
       {
$ w/ j6 Y( m& X- o        //这个道具无法移动,跳过
2 N2 H/ W- A0 h1 u# E; y+ x% y& u: U        continue;
5 ]4 S  Q0 N6 V' X% Y$ B$ i5 d; V3 z       }
+ [- U" C9 S1 I' p( w! L+ l      }else{1 W/ n$ A+ k& f+ S
       //空位置 不用动
$ d3 c( N" W# P" Z4 I3 E, Z       continue;
5 E7 H6 Z$ Q2 [& y      }9 w/ F, \9 |+ \9 N( i& c
      //////////////////////////////////////////////////////////////////////////1 Z! x1 [3 P9 ~
      //开始移动$ h3 L- B5 t6 \, l
      if (nSrc == nDestPos)) X( ~5 ?0 v% x; l3 P+ \" S
      {
2 R3 g% r+ u( A4 e, J       //原地不动
1 S# j+ A3 w2 e% t& f/ e       nDestPos++;& B5 X; _- k( b5 Z7 d
       continue;' b2 _3 [3 i* C- A/ k. u
      }2 W& z- b' |, S4 Z# H
      pInvSort->MoveItem(i,nDestPos);
/ B  E8 k9 p2 ~! \2 y* A      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) r5 |- I1 M2 @  G+ h      Sleep(5);
; H) R+ b8 v# R" X      //Error("移动 - %d->%d",nSrc,nDestPos);, m# E; g1 m3 z3 |- m. V5 ^% d
      nDestPos++;/ F0 ]* G9 N1 g/ p5 P9 s3 I
     }
& K  D" Z9 i6 E- m- ~5 M8 {     //取第一个元素的信息
: K! u" t# F' t1 s- ]8 u     /*( R& v+ A+ t! `/ @/ {
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
* N: t# b2 t9 X2 l     {
) a7 Z! B% B( T0 j9 D% O8 E1 V      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
& t3 ^/ ^0 m  l5 |; U0 [, s      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);7 l' i5 J' v* I  X3 q. `/ h) G
     }$ N! B' h2 x( @0 M9 t2 h" O
     */7 S! E1 u6 Z. Q! S$ @2 H. e
    //////////////////////////////////////////////////////////////////////////) W1 q/ `+ X4 b2 B3 J: `( Y
    break;$ r( l' y* R% O, R, n/ W( @0 q
   }
, m  E5 X1 h2 g7 @2 w  } / \" B$ M6 i% R! m9 @6 U
}! q7 j' l/ \( x9 m
m_wndMenu.SetVisible(FALSE);8 Z3 X! f% _6 R% v5 y7 u

. a4 A, S5 B( Q9 o3 D' o& B: U" p" R$ K--------------------------------------------------------------------------------------------------------
- ?, k9 b1 H" Z8 L; _0 L: _搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
, T, D+ \+ b5 Y0 \2 I# i8 U( S{
3 W2 p1 @, t/ `$ H; r) _BaseMouseCursor();
6 L" i4 H& O9 k3 G. B4 ~}
# K, ^: O. z, y在其下添加:! f: y& J  @8 [3 x% D; C
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 H2 a2 I9 N" P* C* E5 E/ s
{0 E! N0 V8 G% g0 \, R
m_wndMenu.DeleteAllMenu();5 g6 O# P; S3 j$ v
m_wndMenu.CreateMenu(this);
3 l" C, [0 g9 `5 i$ h/ `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");, ]  b( t8 Y( O. ?

0 b) P$ W5 L6 a# G7 b) Iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))/ a& x9 p6 [) Q8 w( A
{
9 ]5 ]) a/ ?% z: z  //P以上级别才可以删除所有道具4 i: R% K$ m* K: r5 m. f
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
3 L2 m6 ]/ {5 o2 b}7 q' [' j0 M. {
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
5 K$ P5 x0 _: sm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );  S% n! _: U- C! Y  c8 c& ~
m_wndMenu.SetFocus();/ K- e- N4 C8 ]! Q: l- P* ]& M
}
3 H* ]8 _# R2 |2 u2 e------------------------------------------------------------------------------------------------------------
% c- h6 r: t- J4 G( h% [*************************  ?  R+ S9 x- |' u  t
WndField.h文件
. M8 [1 y: p* e8 [  `. K' @# t: k6 f- T*************************$ Z1 H: \+ B0 @3 F& L( q# K4 B* E
搜索:BOOL m_bReport;
( n# j: J0 d0 t, z9 C其后添加:: c. ~% `: j5 j1 L
CWndMenu m_wndMenu;
% O/ D4 x1 t0 S& d1 H0 u/ w搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
- g: f& |7 C% j其后添加:" j% @* F, n, C1 `( o) K7 ]
virtual void OnRButtonUp(UINT nFlags, CPoint point);9 ^. h+ Q6 z+ y

* o+ ~  i. [: T7 A" z8 R  q7 b, Q/ T* s
5 I: y. k$ L* f7 L/ w2 d4 u/ B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 08:53 , Processed in 0.066965 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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