飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
$ R# q; \, e0 W6 b5 Z搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )% ^8 Q6 }* M: H9 i( C7 ]6 H3 c9 k
0 \2 n: G0 `: ~. L& r) h5 M
struct sItem0 j, u% M, b. s, p3 G. O
{
' i8 s, x( C6 j, D, k4 xDWORD dwId;4 U4 _* ?# f3 h! X/ |1 u
DWORD dwKind2;* d7 h  y0 v' V# f
DWORD dwItemId;9 O6 l% t2 d5 r
BYTE nIndex;8 i3 m6 {( Z7 v
sItem(){
/ `- D' P* S1 d2 a, [# r  dwId = dwKind2 = dwItemId = nIndex = 0;/ u/ ^# t7 ~' d
}
" \4 W" C: f4 m  s7 Z% sbool operator < (const sItem p2)- R/ J3 o; J/ Q, y. y
{) r! e8 p* y9 X. W" k( T
  if (dwKind2 == p2.dwKind2)
! ]' @: T- \' F/ `0 C; _. W0 {  {5 v; D* g2 I( N0 K
   return dwItemId < p2.dwItemId;0 I5 b% W9 D! w; I' F& ^
  }else{* U- G4 e- k& v
   return dwKind2 < p2.dwKind2;
. ]8 V; f2 L! H/ ^  }. F1 Q6 H( B3 @
}0 _  j5 y4 Z, q) O* x
};
/ j7 X  ~: x; x/ Y( E  @2 Cclass CInventorySort' m! k* I, j! b
{
( Q+ m  v  M4 }' M8 r6 Kpublic:$ v* U+ Z  J2 T) D
CInventorySort()& X1 m5 N. ?; ^. R( b: J; D3 Y
{+ ?! @. a  l! ]" Z* Q% \/ t
  m_dwPos = 0;
' H0 Q2 y- f5 W) Q# c6 m}
; ?* J3 T3 Q- G+ }~CInventorySort(){}
9 L  ?9 }8 e% G  Pprivate:6 T" {' `7 G7 V- @
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息- K9 W" ]; t: p4 r) [, p7 e; w
DWORD m_dwPos;
2 k- o! b% L2 \" S- jpublic:/ r9 ?; n1 \8 }+ w- Z5 N$ R9 R
void Add(BYTE nIndex)
7 U2 c. {3 |4 P2 R{
# Q5 J8 X* M7 k  if (m_dwPos >= MAX_INVENTORY)
! q& `0 _9 w3 J8 N1 `' M  {
" Z# k4 e3 w7 ]9 [; `( d   return;* U; P  s; \8 y6 Y
  }# \& m, Z- y; Q6 Y; ?, y
  m_Item[m_dwPos].nIndex = nIndex;
. F* _2 e$ D0 Y: h  m_Item[m_dwPos].dwId = m_dwPos;
2 ^* U- t) ?: V9 f$ }" I( h  m_dwPos++;+ m; g# Q  o: A  u# ^; c  p
}! c" E- j7 k8 e0 ?1 [) A
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列' r: J( V% B+ ?) K
{( r+ c5 ^8 `) h* C, P( s
  for (int i=0;i<MAX_INVENTORY;i++)
3 t4 G( U0 ~& Q2 ]6 v  {
' F) r: |! ]  H( m; o% j   if (m_Item.dwId == dwId)
0 b& P3 j* C. Z9 t* [   {
3 Z% v$ n" j) S  s' |6 \    return m_Item.nIndex;; `2 r2 ^. G- x8 {, g
   }1 P1 H: c) N2 M$ w1 U
  }
; u4 N9 l8 m6 V  return 255;3 t5 O1 W( S  b
}; {+ q# b" O# t) P/ V
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置6 G6 Y# `6 U! S# q4 D/ d
{
) F9 Z" D. D1 h. T  k  BYTE nTmp = 0;* {$ ^$ ^# ]$ {& }* p/ \% f
  bool bDest = false,bSrc = false;3 |2 Q$ V9 w2 y* Z7 s: m
  for (int i=0;i<MAX_INVENTORY;i++)
4 R8 z5 k" s% H3 ]$ ]: o+ c* Y  {- D. d/ H, K. X& ]; [
   if (dwSrcId == m_Item.dwId)
) B$ ~5 v0 L) G; x1 F. E   {* q4 a# X% d  ?$ U( D) f# e
    //id相等 则 改变对应的dest和src7 ?8 j7 H  |' ?
    nTmp = m_Item.nIndex;
1 o5 ]( u3 V' N; h, i    m_Item.nIndex = dest;
% u4 G  ?( k8 v8 n   }
: }, a6 q" R& C! o( d4 [4 C1 e  }2 Y7 Z0 O- N/ z+ {7 C' c0 p
  //临时数据保存完毕,交换开始" T  _2 r, T- d/ k
  for (int i=0;i<MAX_INVENTORY;i++)
: B& T2 ~+ g  y  {
/ ]( l3 t8 }' l6 z9 q   if (dest == m_Item.nIndex)
$ r* t$ x1 y$ B) R5 |! B0 L" t$ y   {: U+ Y# E) f7 C4 `
    //id相等 则 改变对应的dest和src
/ R* q% t3 U3 t% U3 c    m_Item.nIndex = nTmp;: U1 u2 y" u4 y  ]  K4 k
   }
5 i& T6 e, }7 N: l/ m, F  }
1 ^) M( R4 H: o% V3 X8 Y}
. l: O9 H8 K1 L9 A5 q+ ?* Q};
3 V% u, y# ]! A1 r) u4 o-------------------------------------------------------------------------
: X' B& j6 h6 G5 c依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& Z* t6 P' ^! g
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 m6 M( j  J# R紧靠其上添加:
& |- t: F/ ~9 V' m: [" b! Sif( pWndBase == &m_wndMenu )
$ F. _: h" o0 _8 ^0 L' Q{2 }6 j8 G2 f4 I/ C9 n" T+ u/ j; Y
  switch( nID )
) N2 ], o: I) b. V# J" s- Q  {
1 `8 P1 ^7 `- K, n  case 2:
4 p, I( |1 ^' c# Q, M, b+ g   {
' ~% W9 D! ]. o0 v    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 M2 G6 ]: z% Q9 d& |% j- w4 v
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR)); _+ }9 E8 w* J6 |) ^' A$ ?
    {
( K( {7 [5 {; E: b$ C     break;
) h/ D! H) N, a5 O2 w! F$ y    }
4 I8 _* Y6 n2 Y4 M  j! p. p    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& v% z2 _: e7 X  B% |
    {
9 l4 U+ ^9 a( g3 ~     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
7 J) J( @4 U! @% o7 M  F     if( !pItemElem ): P( ?* G) r) R3 i/ r( `2 F
      continue;3 C' o' O6 _0 A7 E1 w3 o
     if(pItemElem->GetExtra() > 0): w' H$ E8 f% t3 z6 I9 [) T: H/ }
      continue;9 I1 g$ ?, Y8 l) @
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
" K( ^" E3 T( x7 X% B& s3 |; ?* w      continue;7 M- P+ x& J' h- w
     if( g_pPlayer->IsUsing( pItemElem ) )
/ C- \+ z+ }7 e* W/ p: _      continue;
; |: X# J) b4 e& D) V! j$ V     if( pItemElem->IsUndestructable() == TRUE )
3 ]5 k" K. @5 R& e  |, w     {
( h& ^8 I* K- n7 |, }      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
! q4 w9 i# W$ Z% w0 Z      continue;
/ n4 S. @( d: S7 y5 V: Z) e     }: n. ~# T# V8 k3 J+ O" B
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
; w( \  L; }- W# p    }9 q* L. v: Q; ?
    break;2 `! D$ R0 K# Z- {/ d1 G2 S, k
   }" k5 L* h7 _& O% R! L9 {8 ^+ v# k
  case 1:* Y* Y- v0 A) o% i8 L
   {% s0 Y' M2 F2 D$ ]7 \, c6 I. ^
    //整理背包6 ^# w. e; l2 J: p7 R+ t) R6 {( A
    //////////////////////////////////////////////////////////////////////////
1 N$ V" i9 V  g' [    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );" m2 E0 x1 t* q
    //////////////////////////////////////////////////////////////////////////- E  |% m# K- d. u, A& j# ?9 g9 A
    /////////////////////////////////////////////////////////////////////////// `6 ^% @$ {: M6 E: B
    CInventorySort* pInvSort = new CInventorySort;7 A3 p% O7 ?, B
    vector <sItem> vItem;" ^  G8 E- T( W( d. W
    vItem.resize(MAX_INVENTORY);//初始化大小
$ Q2 p* r! O$ J. t6 |) [     //////////////////////////////////////////////////////////////////////////& x8 a9 y: x* n
     //填充数据5 M$ g5 D" Z. a4 X
     for (int i=0;i<MAX_INVENTORY;i++)
( p: E- L: t) i3 P# O     {6 n5 Q) e; W2 X+ D! K
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* Q8 W9 e: k3 U) x. u
      if (!pItemElem)4 f' ~4 k* m' f2 p8 y5 ]" m
      {
; g+ m! N- y& z/ \; k6 ^" r       vItem.dwKind2 = 0xffffffff;
/ q, {* V+ N1 h       vItem.dwItemId = 0xffffffff;
+ Z8 r0 R* Z: o7 h, S* D       vItem.nIndex = i;
: U2 D; v4 T6 O7 h& N. z' M: P      }else {
& p5 h0 g# q2 ^* }2 P       ItemProp* pProp = pItemElem->GetProp();
6 F4 ]  F/ J4 K- t% g" s       vItem.dwKind2 = pProp->dwItemKind2;
9 A6 s* q% t& B5 i0 ]) N+ q( \  E       vItem.dwItemId = pItemElem->m_dwItemId;+ e5 L, p3 y* c! X! S( T
       vItem.nIndex = i;
6 ?, E4 _9 l" S  G) h! X      }" R) W, h  }# `4 [" {; t
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" r% ^) ]( Z# u' J% j     }1 P4 Z9 v) ?. e
     //////////////////////////////////////////////////////////////////////////2 ^: k) e+ g; j$ n" W" N- A/ X' r
     sort(vItem.begin(),vItem.end());//排序
+ p! f" K& g9 h# D1 H6 c8 v     //////////////////////////////////////////////////////////////////////////; o( v. v& S5 Y8 V2 O
     //交换. e0 x' D! [" X, m* j+ n/ f$ ~
     for (size_t i=0;i<vItem.size();i++)# U# Z* x+ ]6 Q8 i# X" i
     {
* j; x. M% y+ j, \      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
, \* O# q% F# W% C& |9 D: ~      pInvSort->Add(vItem.nIndex);
7 l/ r7 ]7 E' G6 F1 d* a     }
. M$ v9 c+ Z: H# `     BYTE nDestPos = 0;
3 ?* [: O) n7 U0 ~5 O# Z     for (int i=0;i<MAX_INVENTORY;i++)2 h; l! z, Z$ N  Z( o
     {6 O, t5 [) G; T& ]9 x+ R! c
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);4 O: D( M: f# Y$ q" h
      if (pItemElem)
% H6 `" }, n$ a) ]+ m/ M+ o" p      {: @% m' v: v  z; j! e; M4 D+ [- M
       if (IsUsingItem(pItemElem))
3 D6 `- R2 A- e+ b: K0 ]3 W       {  @1 {" k( U) s) _
        //这个位置无法放7 B) k" I4 V5 I4 V& `
        nDestPos++;
' \  u9 X- _. `7 F6 B       }
+ S' ^# E+ l$ u0 A1 `$ o      }1 a. {( o, L% Y
      BYTE nSrc = pInvSort->GetItemSrc(i);
) P% F: `" Q1 k9 @      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
. J% ~5 m- P7 E$ L9 m  x- t      if (pItemElem)1 Y  F/ I5 K5 `: M4 j
      {/ K& y) d) @0 `- C
       if (IsUsingItem(pItemElem))
. s3 A) P3 T% V+ ?2 [! t% S       {
3 H6 }' u4 ~4 u* `; I! t. L        //这个道具无法移动,跳过# G- z) r8 M  I+ ]
        continue;
1 F* [% x5 d9 h' [       }
! e2 W' X6 {2 c: G* A      }else{
* k8 W  L6 Z# `$ H) c" G3 B; ]6 S       //空位置 不用动3 i1 C; K' f" w9 ?: z$ X
       continue;" i4 ^) B& y' ~1 r3 G& M
      }. |+ J& _- @5 E
      //////////////////////////////////////////////////////////////////////////  U8 o2 a3 [) Z; _  n
      //开始移动
3 }( S% h! V' r* G      if (nSrc == nDestPos)
. ~9 W9 J( J! e1 O( q      {
* D5 g4 b* K0 \# r4 }3 u       //原地不动
7 R+ N* t5 X) V4 U+ |6 @       nDestPos++;
1 C$ j" h) b# \1 F' u. O       continue;+ ]" c* A# L1 i6 ?
      }
; E# }  F- r( i# D8 v      pInvSort->MoveItem(i,nDestPos);$ j, O/ T, ^$ J! t2 C  l# X5 i* H
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
( c2 f  D  `5 {2 C& `* }$ G4 X      Sleep(5);  a" H9 p7 f4 g) T/ F+ t
      //Error("移动 - %d->%d",nSrc,nDestPos);
  p8 Y4 S/ Z3 ]* r2 @2 w      nDestPos++;7 H+ N1 _4 ~8 @+ C% p! S
     }# j) ~$ T, R# E( J  C1 n. V
     //取第一个元素的信息9 G' L+ e' J2 I" o% w+ A
     /*
8 \6 U4 P# \+ k! X7 v     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)! Z- l8 A0 N# p/ L* P: T/ s
     {9 y( S& a* M, ]* u
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);2 K# u1 I( J  M+ S+ S9 h" K  b
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);% u) h5 ^/ S) _, H; s' L
     }
& O$ X: Z) Y8 Z0 I" h6 {     */
+ J8 f4 y- e: n5 O# U8 i    //////////////////////////////////////////////////////////////////////////$ @: J; K1 o2 F+ Q
    break;% v6 b# S' n0 ^( X2 N* ]
   }
- P! j: c, R# L" m* d* G  ]( v  } , Q! b" ?- @( |, V) C: H5 Z
}0 i7 s! z# Y: V0 ]  f- |( ~
m_wndMenu.SetVisible(FALSE);
- k. t/ P9 r6 i6 @, `$ Y, K" F+ A; ]. B, ?7 u
--------------------------------------------------------------------------------------------------------. R$ U" Q8 d( v! U* Z2 j$ H
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
6 b, `& Z, {1 R+ T& {* T{
. F; j% O: y$ tBaseMouseCursor();) N! |' y: F# V" r; O8 \5 x/ m' d
}
1 y/ _& t/ Q8 U1 }9 X- J在其下添加:4 w6 u9 F2 D5 y
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)2 R$ {5 _$ _; `+ g7 n+ ]: ^
{
# t, E; o: s6 Y$ N/ W  I" d8 Rm_wndMenu.DeleteAllMenu();6 @+ A/ v1 M/ N- x6 L& c5 H' Z
m_wndMenu.CreateMenu(this);! |, \7 N3 }9 e8 H* }# B4 Y
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 U" @& J) I* f6 ?/ G/ F
1 U; M3 w; l9 }: W( D
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* R$ V# U9 ?# i) z7 |3 A
{9 \, E+ e8 e+ ]8 @8 W- U+ U
  //P以上级别才可以删除所有道具0 N  G. ]3 }- _; C- ?  ?6 x
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
( s+ `9 r# ~3 _" q}
+ {/ u3 t. H3 G1 Zm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );  s$ ~! R( X4 d3 s0 |9 ?+ n
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );) ^2 I+ `" l) R" q
m_wndMenu.SetFocus();" e  E2 }! o' R9 W
}! M& ^/ j- |" J3 A1 \
------------------------------------------------------------------------------------------------------------
8 y' O% R4 K3 o5 H; R*************************
7 J5 w# t# Z( F7 v; I) Z6 mWndField.h文件
; c1 Y: K* @' Z- w) [*************************
# e! C  w) Y6 B搜索:BOOL m_bReport;& K# ?) v+ f. k& `
其后添加:# g! S' {' z* ?& L) F
CWndMenu m_wndMenu;
  F4 i. |$ O  g7 d, P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! Z% q& K% e2 [' o" P4 o* V( u
其后添加:
6 A2 k& ?; K$ v) O) b/ O( o$ Wvirtual void OnRButtonUp(UINT nFlags, CPoint point);
3 k% Q7 Q% w6 ~; @
% \8 K+ R9 v9 a0 |9 n* \. O6 ?8 L. J% u

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 10:56 , Processed in 0.069776 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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