飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
& Q7 o  |. D3 h搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
4 |& m5 Q2 n0 I# P1 @8 M
, N9 f0 ~! i( J2 E2 ^struct sItem4 }4 x' \3 ]$ o$ e$ Y) O2 D! ?
{
9 X; P8 K! O" aDWORD dwId;
5 U4 S" o# e5 h/ xDWORD dwKind2;/ p3 U, \' n/ n0 t
DWORD dwItemId;, O! G4 J( j0 r9 F! d3 i2 C& q, @
BYTE nIndex;: Z7 }1 a6 y9 B+ o; o* I6 v# ?1 E
sItem(){
+ w' j4 C$ q$ ~! H" u8 y2 W  dwId = dwKind2 = dwItemId = nIndex = 0;7 Q& ~3 g4 Q8 F  W
}
$ d& S' W" n+ K! G( b# H4 fbool operator < (const sItem p2)4 @- e1 I+ z( i; T! K
{
9 o) K) o* f. Q  if (dwKind2 == p2.dwKind2)
2 g# r4 F" p7 d, z0 P- @7 X  {+ g" d" u2 O" L: S1 W# q  ~4 M
   return dwItemId < p2.dwItemId;/ X9 y, `. ]) `1 g
  }else{$ g  u( m' _% \2 k
   return dwKind2 < p2.dwKind2;
9 P: N) Q# e: w1 E  }& E' ]) m! ?: S: ^" H
}! E" P" y% b8 d' T
};, U; t$ G. D; x9 R: _& G" k( w
class CInventorySort* z: f4 q) w# H) R- o6 X7 o
{
1 L4 {+ F% F, v% @  a$ J" }  xpublic:% D% s0 ]' d4 m, k( d
CInventorySort()! X; t3 P% l7 X9 Y
{0 M: u! b7 f' F4 ~. q( a& I* W2 a$ Z
  m_dwPos = 0;
$ z4 j+ S6 n1 J3 d/ \+ K4 H3 f+ Q}
, `0 Y4 C4 q+ R/ H  ^~CInventorySort(){}
: h$ u+ c5 @& `! t# _private:
+ r# G& ^% m3 G/ ^9 W2 _0 R5 |4 M( [sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息) \6 ~0 F2 |/ b
DWORD m_dwPos;' Q2 i( ~- p: `
public:
( ?8 t/ v1 g: d; n8 ?void Add(BYTE nIndex)% a. ^. ^+ ?' B  X) k
{
2 k* [4 q  Q  A: u. C8 T2 [' _, ~+ x  if (m_dwPos >= MAX_INVENTORY)  `+ S. u8 k6 Y2 L5 E
  {
# u/ \, V5 }* E1 E3 @6 a, t' b   return;
1 g/ P1 E: j: k3 e6 X6 Z  }2 a, b5 B9 {' x9 W' _
  m_Item[m_dwPos].nIndex = nIndex;
( B( Y; l9 }! q6 z1 @  m_Item[m_dwPos].dwId = m_dwPos;) ?; E. f6 W! m$ y
  m_dwPos++;
+ {$ x3 y. z( @3 h" k8 \! b* w: n}7 S# i# d( f( s4 b3 F
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列. c) |4 A- d7 J% j3 r/ N9 F  W/ W
{
2 ]: ?" \' T0 i  for (int i=0;i<MAX_INVENTORY;i++)3 E+ L, J! e% ?* z+ i+ e6 Z
  {  {: i8 \/ h$ t+ B( [' N% d
   if (m_Item.dwId == dwId)
5 T; ~$ v% m9 h   {
$ y4 {" z# [7 p. p) P; U    return m_Item.nIndex;
; }: \' q, Z  d# f8 ~- Q- D) V1 a   }4 C$ B- u+ T" \4 a/ T
  }
: p; w/ a# J0 z/ x* q  return 255;
8 D; N5 M( K; D6 w9 L" @}! ]3 c; Y" Y; m5 X- Z$ o* H, z4 }
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ v! w' q* ]. Q2 t. n" o" z* w3 k{" v( Q- y" Z$ `! ^* j
  BYTE nTmp = 0;8 g  F4 i0 ^$ @6 s# @- z
  bool bDest = false,bSrc = false;. t- l& e" O" Q) ^* r7 Y4 I6 f
  for (int i=0;i<MAX_INVENTORY;i++)
. f- Y9 s6 N4 Z  {6 H7 `. ?1 E1 J. C- _
   if (dwSrcId == m_Item.dwId)
. f8 `7 q5 ]1 T( r  J; Y9 U+ t   {6 W7 _  b; w! r3 `* T$ N& E
    //id相等 则 改变对应的dest和src
' Z0 ^7 E  S- k5 r# t    nTmp = m_Item.nIndex;. \0 @+ C, `( \7 ^: i' V- c
    m_Item.nIndex = dest;
  }* H5 T. [* `- B( D* S9 R   }
' g  O( [; U# H! l/ b  }
! M* M, G8 @6 }2 f& d! b  //临时数据保存完毕,交换开始
- b! R3 m' U! u8 g0 P& v" |# e- t  for (int i=0;i<MAX_INVENTORY;i++)
7 \+ c0 r, d( n" e8 m; E  {
! X! t! w  `; M( g3 V- z, Q   if (dest == m_Item.nIndex)  D2 @: F! ^; n! D, v
   {( n8 m' o' L9 z( @( N$ C; u
    //id相等 则 改变对应的dest和src
3 [$ e6 w0 \" m: h# v- K    m_Item.nIndex = nTmp;: D- L& @8 P) e7 `# [
   }
* {' i1 \7 A2 h. {& m, g0 M; a  }' H1 E! x. K; s, U; x6 c
}
) k2 ]0 M3 x  d9 M};
" w8 I; d1 ^: I8 Q-------------------------------------------------------------------------
$ O& P) B7 ?4 A# l1 l& p依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 c' q4 b5 Z+ \8 t搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
6 v) S9 m5 m: p8 W0 [; N紧靠其上添加:
6 x( `- f7 s9 H: Jif( pWndBase == &m_wndMenu )4 O+ G/ k1 E' d3 i! s3 K
{1 ^6 Y# a1 G- t" I
  switch( nID )( D3 c) j9 q' s3 ~) q
  {3 F6 i4 f8 }8 V6 F% s- N6 h
  case 2:3 A8 m9 I6 |: ?( ?& T2 Y6 v* I
   {  O) F# g0 K( j/ h% ]" p
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);9 b. ^# S! S! y
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); g5 \' D+ S9 v: @4 n
    {
2 g2 K/ g; W1 ~8 j+ N- v( ~     break;
% P5 t) ^' s. w. z    }; f& e5 s  Y8 z" n1 I" n* e
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)3 p% c/ j5 c4 ^9 b. U
    {
7 T% E, E  m2 N) T     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" `. g' ?! B/ \: Q- b     if( !pItemElem ). y: a+ b; Q: m$ w( i3 S7 I+ b8 x
      continue;
$ x4 E  J; X5 P' V( W     if(pItemElem->GetExtra() > 0)1 v- ^6 b# k/ Q8 u
      continue;
3 o: t6 Y+ F$ H7 ]) T& z; e2 ^, L$ t     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 3 x9 X) v! t5 ~) A4 {
      continue;: v+ T6 o- k) h! u! |9 v0 O: d5 T
     if( g_pPlayer->IsUsing( pItemElem ) )' K& S5 ~7 P* G0 \- C
      continue;
, M- m9 M7 e  p/ ]     if( pItemElem->IsUndestructable() == TRUE )
) {- b* D# R, F; B$ N+ v$ e     {8 T4 ^$ y& j0 a% U( C& L
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );* d+ y3 U$ n2 {
      continue;  l) B, H2 f- R$ e
     }
) V' B  v6 P7 k# p) M4 ~" x     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
$ o8 f7 E0 j1 E    }
9 R9 T) k" s2 A    break;) ], _* l/ r4 a* W2 h( }
   }# Z1 ?+ `. k3 Y2 g+ L" P) F
  case 1:- S0 l5 J# p' x4 G  p
   {9 [) E# K5 A7 A' R2 x" `
    //整理背包
* J2 E4 i& D& m    //////////////////////////////////////////////////////////////////////////
1 v0 ?7 f% g  I$ c) G, r6 ^    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
  k* d2 v: a: m& n9 ]) ]    //////////////////////////////////////////////////////////////////////////
; u/ b) ~8 l+ ~0 N    //////////////////////////////////////////////////////////////////////////
0 {0 g/ X5 F  M5 f# \- p    CInventorySort* pInvSort = new CInventorySort;
5 \! d9 n" u2 k# X    vector <sItem> vItem;
! O) {* m6 u% c7 J    vItem.resize(MAX_INVENTORY);//初始化大小( L" P# t1 I/ D
     //////////////////////////////////////////////////////////////////////////& z  ]. p/ `3 A  J
     //填充数据
8 x# z/ v6 \6 C( W     for (int i=0;i<MAX_INVENTORY;i++). O, \' a7 K" N6 P  b
     {
5 W: ^* h1 z3 A5 ]      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 l0 X: q" r2 B4 \' X6 P# I: C
      if (!pItemElem)  E2 C/ ?, m1 y0 c4 X
      {. G' c7 E6 }( N4 K3 w4 B4 `- k
       vItem.dwKind2 = 0xffffffff;* T0 E) ]& S" `9 H3 v8 R
       vItem.dwItemId = 0xffffffff;2 H' V/ T/ z' n1 ~6 f1 P/ _3 Q
       vItem.nIndex = i;
0 x; g6 L) j9 Y9 @" H      }else {
6 ^7 q1 E  R: O% m4 o8 P       ItemProp* pProp = pItemElem->GetProp();3 f0 e9 E8 C* |- M7 q/ z
       vItem.dwKind2 = pProp->dwItemKind2;
  M. R% Z- z8 @# G" v       vItem.dwItemId = pItemElem->m_dwItemId;' x: ]$ l3 s5 O( A0 g
       vItem.nIndex = i;, i- [- `0 `# \7 F+ }) ]
      }
6 U# h/ U9 H' [4 c5 k      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
4 ^' y! N7 [& @$ [! W     }6 ]0 n5 M: k* I2 I8 C
     //////////////////////////////////////////////////////////////////////////
; z+ c; M1 T' N" o4 @% O0 `     sort(vItem.begin(),vItem.end());//排序
1 w5 ]9 j2 j3 x1 g3 _0 h( D3 ?' p$ R     //////////////////////////////////////////////////////////////////////////
' u% A5 f/ o9 Q& ~     //交换) N/ D) U9 ?& K, k4 U3 k, {) B
     for (size_t i=0;i<vItem.size();i++)
* _1 M0 U4 ]2 U7 ^     {( R' t: b" J& n4 Y. v* ^" X
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);- \9 U! h6 N7 {9 z+ o. [
      pInvSort->Add(vItem.nIndex);% g% d0 b3 G/ M- x
     }. D; J1 o0 T- ~9 S6 f; i% \& G
     BYTE nDestPos = 0;
/ C. r6 v0 B& D0 l: c( @0 @0 \     for (int i=0;i<MAX_INVENTORY;i++)
/ j+ c/ |- Y+ P, k1 F$ M! c* [1 X! O     {
! E, S5 e  g2 U' h- l      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
! G; R0 z0 \1 {: W$ ?: t; |: Y      if (pItemElem)
1 v4 r: T2 L0 O2 B3 g  }      {
0 U( [! K& X/ d5 @: |       if (IsUsingItem(pItemElem))4 w0 a. x0 D* ~- E* t5 e
       {; h! {$ ?  g' G8 o
        //这个位置无法放; ]' `/ w- Q  j/ k
        nDestPos++;! D$ P! D/ `. d- `
       }
$ ?& w. K3 J" m5 J! a' F      }9 x6 q0 K; {% e6 d; G5 \
      BYTE nSrc = pInvSort->GetItemSrc(i);
" @; \- k* V' }; D' V/ G; Y      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
, Y3 [. E( x9 |* {3 O4 F5 a/ k      if (pItemElem)
6 ?! I$ t+ v1 B5 B( d  y      {& T3 N9 P; ^% z4 }3 o, H
       if (IsUsingItem(pItemElem))& ]7 P- t4 I9 b  j  ?7 ]. c! j
       {0 n$ A  u2 c8 U; B' m
        //这个道具无法移动,跳过3 b/ t# k. ]6 @1 c) T; l
        continue;! m) ~  _% s% J6 v6 x
       }
; D6 G- N; R9 D5 M( e4 E8 i      }else{6 h- U# B: |0 D
       //空位置 不用动$ e3 g1 C$ G2 u1 U; |
       continue;" A& r' u# y6 E0 b
      }
* q1 G& r. d; U8 V* g) E7 @  C8 C      //////////////////////////////////////////////////////////////////////////% N0 Q9 p, P; w% y! S
      //开始移动1 I' I) L+ E& y" V! ^7 V; l
      if (nSrc == nDestPos), S4 }# N* _/ }- m. o' r5 C- x* v
      {
+ b9 w# z) j  k' S1 A       //原地不动% ~; _% t$ t4 |/ a
       nDestPos++;
8 O8 c$ [, H9 k& Z; F5 [" u$ A       continue;& r  Y( X  N! n8 _8 q
      }
. l5 R1 S4 _% \; y( A6 l' K      pInvSort->MoveItem(i,nDestPos);
* H% G9 C& F/ b7 I9 L, c/ J' |: }      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
: Z( ^! B. F# O8 y/ `5 j1 R7 w      Sleep(5);
; z, z3 \! M/ C; e4 K      //Error("移动 - %d->%d",nSrc,nDestPos);
" ]! `3 b& R$ v4 n      nDestPos++;
8 }/ P" i& r" w6 @' ^2 N4 d     }' t, b7 N& e+ g$ b
     //取第一个元素的信息. {4 y0 M$ d' j# y1 j0 N
     /*
" I/ T. a# I- P0 J6 o& y3 ?     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" }3 l, f- y; i3 j; v0 t
     {
4 }( l) E& {. c  z! d' A      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);& Z. b  X1 ]; O
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% e- s( e* e/ X( |
     }
7 c6 R; V4 Z+ H  n' h- C. [     */
2 G. Z5 O' `4 [, x+ ~; L& A    //////////////////////////////////////////////////////////////////////////: Q8 P: X4 ]9 o; w1 p" o' x
    break;1 A- d  I  j" p' W7 @
   }/ o, H( j8 |- H% K& T
  }
4 J! o8 S# ~8 }2 M3 ~' s}
  w6 b6 q( z7 rm_wndMenu.SetVisible(FALSE);
4 T1 O% z: V- o) u& p* k% r: H1 u* `3 {, A6 D; \
--------------------------------------------------------------------------------------------------------; c4 W6 R5 H5 @; A/ F
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)- l1 C2 C/ D2 k. M0 d5 J. p4 F
{
0 c& V6 U0 ?9 p& \BaseMouseCursor();0 k5 L& o  V6 B5 s) c9 q
}
2 _& s7 o9 s1 L+ r6 `1 h) \! `8 A在其下添加:
( B' t. ^; Y) y* t7 a# b* ^void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) x  k+ _: c9 I! {5 t
{; C$ d% [) n0 n) `/ F! C
m_wndMenu.DeleteAllMenu();
+ J% ~' p4 E& |1 r; cm_wndMenu.CreateMenu(this);# X- D& \( G' _' @1 ]
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
, W% D) Z8 p, u# ~: ~0 I$ m) Q0 z! ?$ X. O0 i2 g7 O
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 [  k6 B* s5 f  m
{1 E+ |. i- r6 D1 z8 i
  //P以上级别才可以删除所有道具2 k& f+ X& r- f5 v. d
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");& s+ K. N& H" h( J, ?7 C8 a1 _
}; d- K2 e- K- I
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: o- Z4 z% l  A. z# h0 w7 Tm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- N* X9 x! u! a( ]) qm_wndMenu.SetFocus();; {* m7 Y& t- W  ~8 B' r
}" D  t& i2 p# _' l2 g1 G1 U
------------------------------------------------------------------------------------------------------------
5 [/ `" _& u; h$ S7 F" X0 G*************************+ a# P  A! e9 ?  p2 L* n" h  Z1 |
WndField.h文件" R) Y  d. x  _  N  K
*************************5 N: ~+ |9 y/ f3 m- _0 m/ \
搜索:BOOL m_bReport;
! |5 f7 a# J+ N* D! `" @! Q* |其后添加:! V  [. q/ V* [* l9 W8 ]
CWndMenu m_wndMenu;
6 J& v3 |: a; m* t5 T/ _! o搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
; f# `, w# l2 P其后添加:
4 l3 x2 \% q" I, Lvirtual void OnRButtonUp(UINT nFlags, CPoint point);  r/ f- k, B+ h

0 h3 t! U4 h* D  P6 J2 x* Y: F$ e! s! R  }1 c/ }% N5 ?# I

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-1 14:51 , Processed in 0.065349 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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