飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
. ]  e( m  Z+ R搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
. w+ Y- i) l! b0 p. A4 q& M6 k
7 i/ ?9 D" k2 ~( q& g! Astruct sItem
+ v) o: F6 i+ Z; V& {, h; `{3 A" @  [- E. r6 Z) J9 h; h4 @& M" D
DWORD dwId;' s, b) j) f, n: i) p
DWORD dwKind2;
0 r4 m) ?/ U* W5 mDWORD dwItemId;$ C% v9 {" J* r0 J4 }- v- m; I. z
BYTE nIndex;, d2 }4 H( e( q
sItem(){$ k  Z' u/ r5 Z2 J
  dwId = dwKind2 = dwItemId = nIndex = 0;
  F0 f" G% O6 ~1 a4 I( q}
) m* z$ ~( q* d, [1 O( K7 Ebool operator < (const sItem p2)2 S9 }3 B+ F5 y" u9 ?: o
{1 _5 S& n7 S- Q& D
  if (dwKind2 == p2.dwKind2)
. b: v9 h3 m! B  {: y$ n" j4 e; y+ X# V# A$ a2 d
   return dwItemId < p2.dwItemId;. c! ~0 E+ H1 |2 ]% D
  }else{1 H1 [$ N* n8 Q4 {
   return dwKind2 < p2.dwKind2;
3 _- O2 G7 u( I1 S) m  }% w9 w. l$ x: C1 h7 b# s
}
& W# |: m0 x' G3 v6 S};
, c% M' w. N4 H( J3 ^  Zclass CInventorySort
0 ?# l8 B: G1 o, ]( n{
) O! b# v/ n! ~1 |& g2 g2 _2 z3 mpublic:
8 d* D) p* R; P8 }& G: `3 gCInventorySort()! c, E7 w9 o$ p/ B4 ~$ M3 b
{
: U  y6 N9 z9 m  ]  m_dwPos = 0;% Y1 t% _, u  s0 o" v
}7 y. `- @5 r, @) X* L7 Q
~CInventorySort(){}% Q+ D5 E% i, R" A. v! m+ X
private:
1 X4 _# T& s! ]( ~sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
' E' f+ D$ ?) s9 @. x9 K# y; @/ i! gDWORD m_dwPos;
5 n  Q5 ?8 j5 `+ d% E5 Y3 Q) w- F' @6 upublic:( t) Y6 X8 W0 x
void Add(BYTE nIndex)
' y! M, p9 r* D$ Q2 {& d{
2 y3 q; m( t8 E0 r2 ~; j5 e+ D  if (m_dwPos >= MAX_INVENTORY)1 Z7 a2 {( g7 s' W) n2 a, J# g. {6 `
  {
. ?2 j5 l6 H  e: ?; v# K   return;6 @2 W, x8 Y. {* h+ M, G
  }. h- p3 ]1 [6 G. h8 F
  m_Item[m_dwPos].nIndex = nIndex;: }& C% {/ B$ Y: q. n
  m_Item[m_dwPos].dwId = m_dwPos;4 j% H+ i; O# z: f# z0 |+ q
  m_dwPos++;
1 b2 X. R- N" m8 x}
( q- {  U/ Y+ f; V; R1 {BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列0 S/ W  x: q* A% G) R/ f8 h! D/ Z
{/ P+ o3 \1 G4 B, b4 U4 A* r: r
  for (int i=0;i<MAX_INVENTORY;i++)+ ?6 i% s& D7 ]
  {
! s% [' n( V, g7 H5 l   if (m_Item.dwId == dwId)- D# e( j% g* b/ i
   {
5 \5 Z9 W8 R8 \, T    return m_Item.nIndex;
3 C2 o+ n+ K- I  P   }2 _( C7 C, R  R0 f
  }) R4 Z5 h% Z7 X" H
  return 255;
- i: |- o7 u, K( [}+ p/ |0 u( A, ?3 q: Q% v8 @5 m
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* _2 L" ?% |" i* F+ q* w& r{
  F+ R/ g; v( D* Q  BYTE nTmp = 0;
0 U6 ]4 Q* S& N  bool bDest = false,bSrc = false;8 B( m' p( m& b, H5 R4 ~2 q( f
  for (int i=0;i<MAX_INVENTORY;i++)
7 p. z; n5 T- K% T8 j3 g  {( z4 X6 r7 s( p* t: P% e
   if (dwSrcId == m_Item.dwId)/ ]# y) v8 _) a) A5 R, i8 M. x
   {4 S" M$ r) s! ^1 y. Y( g7 x) M
    //id相等 则 改变对应的dest和src
8 g/ e- C+ w/ ~( ~3 W    nTmp = m_Item.nIndex;
) F# A( h( r) r2 k$ b    m_Item.nIndex = dest;+ ^0 ]" ?# U0 q4 e
   }$ E/ R& a) ]2 f3 s
  }
+ k8 r' ]9 q$ U1 F; ]9 t. {  //临时数据保存完毕,交换开始0 \6 K: P$ x. F6 T4 B% N
  for (int i=0;i<MAX_INVENTORY;i++)
; s+ p. N. R* A9 N( p% _  {
2 i2 h& \/ o. r# a# R  ~5 ?6 r/ L$ a   if (dest == m_Item.nIndex)& ~  F$ K# Z! }$ V0 Z
   {; F- H- g$ N( }- ]$ f
    //id相等 则 改变对应的dest和src
+ N. k: I+ S3 }    m_Item.nIndex = nTmp;
: ]7 T- K3 v1 b, A$ z   }! b- c. H# T  C+ ~
  }
( l4 B$ u( P/ G, g8 w1 c6 C}; V  g0 N$ j5 \9 e/ }) r0 V
};4 d  |4 w$ Q& L# S
-------------------------------------------------------------------------
! d$ Q1 m. J* j依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )" J, K7 b7 @( G0 l
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
  L1 u. B/ F- z紧靠其上添加:0 h; {; O- y' D* ]0 ^+ M
if( pWndBase == &m_wndMenu )
+ R) }) x  X& R% l{0 b. ]; |3 b' q2 ]; u
  switch( nID )
; z& T9 G$ }; Y  {. |& Z$ x8 v5 X& }0 y
  case 2:* C: \  H0 N" x  m$ l  c
   {6 W1 y- K3 b' {+ B
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
5 X) G& m9 z5 L% y" V4 C    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
. K. |" q+ ?2 @# p    {
- H/ J3 L* d- u( e! W2 j# L     break;
6 J, x. ^5 N* j4 Y$ y    }
% Q: ]2 o9 S6 a5 V! e6 b    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)2 k& ^7 g/ B# x% F
    {1 n$ C( s  @4 X' I5 L
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
0 \9 }8 K" J$ L" ], U4 ?     if( !pItemElem )" ]5 U9 G. R9 t" U) d
      continue;
3 ~) O# k  D0 l- Z! {! E     if(pItemElem->GetExtra() > 0)
; P* ~: G$ S: k      continue;
3 E4 c8 _( @6 ?4 p. F     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : e2 c7 v& D' t" J9 t1 I" a; b
      continue;4 W0 T" w% K0 i2 V% ^
     if( g_pPlayer->IsUsing( pItemElem ) )$ A9 U# `" c# E! |" p. a
      continue;2 ^: O$ F5 Y; |9 Z2 B& ]
     if( pItemElem->IsUndestructable() == TRUE )6 I- E: k% Q+ |3 N
     {+ w/ O2 t7 w5 r0 |
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
7 e- Z/ U5 x! L      continue;
' z6 l" j5 D7 U0 F3 @; [) i     }
+ I# Q$ y2 K2 G' R' l) ~. p     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);& m! x0 \8 F& I3 ^% u
    }
1 C2 A( W( K5 h- n+ o    break;
- V2 u$ F5 b$ b   }
- e6 x1 b9 y8 q9 C7 [) A; H2 n  case 1:% D/ s, a1 n3 x0 q4 p
   {
) _  J4 K7 q6 z4 y3 n    //整理背包( X* K0 U/ n, d4 T  ?$ R+ ~
    //////////////////////////////////////////////////////////////////////////
* a3 \9 \& T- W    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 [+ g2 `3 w. d, P    //////////////////////////////////////////////////////////////////////////
6 m2 |% {( X$ S& H4 s    //////////////////////////////////////////////////////////////////////////
5 @' b$ h# R0 B$ L  [    CInventorySort* pInvSort = new CInventorySort;
% r$ z, K2 A6 N( T4 g  R% J0 Q  H    vector <sItem> vItem;+ P8 X0 G) P; g0 h6 _
    vItem.resize(MAX_INVENTORY);//初始化大小
- n7 S9 a$ y) _% ~8 P/ b  Z& c     //////////////////////////////////////////////////////////////////////////
4 Z  v& Y" b0 x3 m, j% b1 Q6 Z" o     //填充数据
7 \4 q8 ^5 z  R3 y     for (int i=0;i<MAX_INVENTORY;i++)3 a- w) m1 e3 C6 d3 ^4 E
     {
* A+ I; e9 s7 k# n) o      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* i/ h# W5 x3 R  r! M
      if (!pItemElem)
- G: r" b5 R* R; N% e. w% a# \      {3 i  _, f0 b; J
       vItem.dwKind2 = 0xffffffff;
$ s2 ^: L5 a! |7 W/ Z7 s       vItem.dwItemId = 0xffffffff;6 P7 \, m% [7 U/ o# A4 \* Q' A# ~
       vItem.nIndex = i;  k$ B! D4 X* o& b/ A( ?
      }else {; C7 R# }, V* a" X7 n
       ItemProp* pProp = pItemElem->GetProp();& h" H$ \1 X! g$ y
       vItem.dwKind2 = pProp->dwItemKind2;
- h  U# ~  f' h' T% Q       vItem.dwItemId = pItemElem->m_dwItemId;
4 D3 e: p- u+ l2 X       vItem.nIndex = i;
' j7 P" D, x7 P      }
( ~& V1 d: v) @% \5 M      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
: |" a/ B) U- c8 V     }
% R1 x1 S. y  F* V3 g; S" T0 T6 b     //////////////////////////////////////////////////////////////////////////& I+ D# I- ~& W! R
     sort(vItem.begin(),vItem.end());//排序
+ t: L% G  j( a  P# Z$ ]( M+ r     //////////////////////////////////////////////////////////////////////////0 c9 z; {( ]: H( F" b' @; ~
     //交换! ~. A" U: y' a: ^1 N, O) B: M
     for (size_t i=0;i<vItem.size();i++)9 ?2 K4 h8 ?, n: |2 |) W
     {
3 O& [# n/ j7 s5 b" {3 T7 i7 Z- Y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* q% Y6 U  H/ C' T
      pInvSort->Add(vItem.nIndex);' L" m# b1 H* O3 H- i
     }( E! Q+ `3 G+ N, F1 y8 u
     BYTE nDestPos = 0;6 u( c* s: E& E) e: `9 A
     for (int i=0;i<MAX_INVENTORY;i++)
. u5 i4 j" A% e/ p8 `5 W$ J6 p     {
+ L# s6 ?: v/ }, j* g( _8 }  e; |      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
1 V) x$ \6 R( T+ E) n! ?      if (pItemElem)4 f8 W+ r. f% c" x
      {7 j, e, J* M; U# o: c8 k3 B6 I
       if (IsUsingItem(pItemElem))2 G6 ?+ c1 w' ^/ h3 u, }  J
       {
1 P9 t5 Y, s3 a& c8 A( I) Q% J7 S        //这个位置无法放* s! F  a+ Z* M  P& @3 ^
        nDestPos++;
# b+ x& ^) r4 o7 z' ^: ?       }2 B9 k" g; H" P. @9 G2 t: `( d
      }* G/ u5 w" B: f. Y1 T$ E
      BYTE nSrc = pInvSort->GetItemSrc(i);
9 B& d! H! `, V  Y' T( N9 y- D      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
6 m5 [( }( ?% |/ Q- y# c      if (pItemElem)
( Q  |, l/ c5 Q# e2 Q      {
/ Y0 B  x$ {( V       if (IsUsingItem(pItemElem))3 i- d8 S& R# Z. X! ?0 M$ i
       {
' Y. f  u1 v6 e- i& [        //这个道具无法移动,跳过* S% A4 v* D2 i. H5 o
        continue;6 r% ]9 W1 n6 H4 r; I
       }
, _3 R7 Q1 @; J+ ^7 g( ?9 n      }else{+ L5 V6 R. T' x# {0 ~
       //空位置 不用动. K  @, j9 E  z3 l
       continue;, L' C& }# |! _
      }
" ?  s" [& }6 V7 A- u4 U      //////////////////////////////////////////////////////////////////////////9 P, j, h6 A# Y: ], O
      //开始移动
' S  l1 A0 r0 a! c      if (nSrc == nDestPos)
+ n7 J9 A- j& D9 [: x/ K+ |- a% D      {! z' L6 c5 ?6 A/ A  Q& C1 g
       //原地不动& h4 H/ W8 P* [$ w, c; v5 J+ ^9 l
       nDestPos++;* ?# Z& Q! `- C
       continue;" j& _2 m# u: D  F+ V! r6 E& k5 v
      }( Y6 K9 R1 i4 P; X8 f9 D- U& [. b
      pInvSort->MoveItem(i,nDestPos);" B/ g1 `; F$ Y% j5 Y6 R
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
) n0 D& j$ a, p      Sleep(5);
" j8 }9 R0 [+ h* O/ f      //Error("移动 - %d->%d",nSrc,nDestPos);
# S. w" D' U4 H: p0 e      nDestPos++;; M# V, M7 c7 z3 T5 n
     }- ~+ L) \/ Z9 h4 A& r+ L
     //取第一个元素的信息# X7 `5 R6 k7 x+ B( j/ _/ ?, y
     /*7 a% e7 H+ u- y7 o  J
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
1 J2 g) I! A; V! T# c. ?     {
* a; m- h7 ?9 T% ]      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);: M, h0 P1 v2 w( C7 N, N: f- Q- \/ O
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
' P/ ]- D4 C, G5 n     }
' d; A1 x4 p+ u9 e     */7 p6 r% ~& k$ G1 C
    //////////////////////////////////////////////////////////////////////////1 A4 J0 t& q+ Z+ k. b5 G
    break;- q( x: @  L: D/ b& o+ r6 Z3 b( L
   }9 g- i9 j$ h8 y/ _( b
  }
4 v9 q( ]. ^4 h+ r}
% x" o8 [; h0 u/ u9 @m_wndMenu.SetVisible(FALSE);3 y- k9 e* k7 k! w  ]

& y& Q1 B- N: f  x* D$ Y, y1 J--------------------------------------------------------------------------------------------------------- Y# h' Z( x; ~/ y$ x- x( F6 x
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# G! J/ C  B5 K+ Z
{
! n! _2 f4 S6 `. B  X2 }5 L3 \BaseMouseCursor();
6 d$ b, ]& }) m2 [+ o6 {}: s* l# s" T+ J$ B& `8 N& P
在其下添加:6 j' X, R: j  ^' |8 s# ?% o
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point). A- {7 l# |) P( k+ A3 ^6 n
{
7 E- r: l8 r7 A. l/ N+ d2 g7 M% wm_wndMenu.DeleteAllMenu();5 M6 D1 P" g- U) E* i+ o% a
m_wndMenu.CreateMenu(this);
3 e! I! ^' s8 u2 Nm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
* T5 i9 ]+ ~1 {0 e
( y: X( Q! D$ g6 Qif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))3 K; d" l2 z/ b
{
$ I: C( `# \( {2 j6 j  //P以上级别才可以删除所有道具
0 r  R4 S) t/ i8 V4 W  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 u/ Y, i) r( o/ p! m3 x5 z
}3 {6 ]3 Y7 e) @; b, N5 ?. R
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
3 H" o" I7 K' E% h6 ?' Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
" H2 s4 I4 l' N* z  im_wndMenu.SetFocus();; G7 C- `  g* i. h2 [8 M
}
. \3 J3 `0 |; @! x  l* p0 A1 X: }  V------------------------------------------------------------------------------------------------------------
& H2 t) w" N/ u- r3 W*************************
1 ~' C* t+ }( F# l2 R3 `WndField.h文件
# v% z0 @9 F; j$ G* R*************************
) F% i5 d: Q: v8 P, v1 x搜索:BOOL m_bReport;
1 [/ f6 K9 P# S其后添加:
% R6 H0 v* T! {$ wCWndMenu m_wndMenu;
0 ?& L: }: K! E, W7 h4 {搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);7 ?' S) b+ q9 g" U0 b# R
其后添加:
: \5 O/ N1 L, x9 C; P; zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
; z6 C# z7 v! d: d4 ]& P: P- X2 d  [( ]. v. H
# Y5 N" R% I; V- }

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 10:33 , Processed in 0.063903 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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