飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件% o1 s( H1 m; M$ E" B7 D
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; H: [0 X3 j+ }+ S9 s$ N0 Q: B! q0 E0 L; G
struct sItem, L# B6 q3 M5 C- r5 f
{
/ o# s$ J5 J5 T6 B! R/ ]+ WDWORD dwId;. C' ^, M' J& N+ F4 \/ i4 @/ [1 U
DWORD dwKind2;2 w( K8 q; M# k/ G4 V
DWORD dwItemId;% _* z  M  g0 q
BYTE nIndex;
0 a8 k0 h: D* M( lsItem(){
: P8 S3 _2 Y+ V1 y2 }2 ^  dwId = dwKind2 = dwItemId = nIndex = 0;7 @" [& u( Y/ _/ y
}
1 c& a& E1 W/ I. n, pbool operator < (const sItem p2)2 ~: ~- j; U, l0 V" r
{2 D; @; x; x/ Q3 n1 ?
  if (dwKind2 == p2.dwKind2)7 \# }8 b7 ], O- f8 P
  {
# n3 x% @  k- s4 k! B* k  O   return dwItemId < p2.dwItemId;5 s0 c* }5 p0 C3 a
  }else{. }5 w/ f) _/ n& K) l( ^/ z6 ~
   return dwKind2 < p2.dwKind2;& D0 ?8 U& G; H
  }
3 `" B3 ?, z5 H5 Z}) A8 \) o- w2 r0 [' Q+ ?
};
1 T) z1 N4 n  f9 E1 T# e" aclass CInventorySort
4 G# w# Q3 _6 L( u# W{
- U5 f' |2 J* K  t* Spublic:7 r) A4 y1 E" L8 C
CInventorySort()7 I& ?6 U( o7 D1 ]  ^# I' N" g$ y
{
3 [/ P. \% a. M' e' u  m_dwPos = 0;
; [. h! M# e! x  `6 t7 g}
* v  j- P" L2 s+ [8 G6 ]' H: t~CInventorySort(){}
/ }  E9 {! i/ W+ Sprivate:) Z  U" z8 W- }+ |/ y& ?3 _
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息$ N; F2 \) z7 [
DWORD m_dwPos;9 c: K( g  m4 x1 Y
public:
6 g3 W# q# r+ U; V- m; nvoid Add(BYTE nIndex)( {( s3 z& e! s
{2 g3 ]8 X/ w0 k/ G) _
  if (m_dwPos >= MAX_INVENTORY)
7 k/ H6 [/ @. Z2 \/ w  {4 p1 ]7 Q% B! L) H* c/ i
   return;- [% m3 j* a7 g; A# J. s, d. y% C
  }3 s3 b; I' K2 `6 V7 K* V, a
  m_Item[m_dwPos].nIndex = nIndex;
+ p6 o! Z3 W3 a+ C  m_Item[m_dwPos].dwId = m_dwPos;+ h1 w( s/ a0 I& i5 b; ?
  m_dwPos++;
3 V' X0 z5 U) H}
- i* @3 }8 D4 [% }( X0 ?BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列; ~* X# I5 r$ Q
{0 h# G* |5 z! m8 Z
  for (int i=0;i<MAX_INVENTORY;i++)
, e" ]% ~/ d, B: P1 s  {
+ R+ \+ T& z" \, r5 T& [3 P   if (m_Item.dwId == dwId)
  J0 Z' X+ F4 P, X   {# z! l7 q  b( i# p
    return m_Item.nIndex;
0 A+ O2 E2 J) e( V4 Z) h   }
- e' o2 q- [; C: |, q2 d! g3 M  }- C: u; V! w) d7 O8 @/ y/ w7 n
  return 255;) r! r( o6 S6 b# F/ ]0 G
}  t3 p; [  x: x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
/ @3 t4 Z2 |/ v: `9 K6 P% Q* U& T{; z* o2 C. U9 d) n
  BYTE nTmp = 0;
8 n. c) r! O' E  bool bDest = false,bSrc = false;
8 d- i% }1 T0 s$ o3 E  for (int i=0;i<MAX_INVENTORY;i++)
5 f! ^, [. A. ?- ^/ e  {' }' I1 @# a& [! ^# P
   if (dwSrcId == m_Item.dwId)0 c5 Y& O, |# u
   {
+ {  m6 J" |) |    //id相等 则 改变对应的dest和src1 c8 a" `( f! _/ Y0 ~8 R, t
    nTmp = m_Item.nIndex;
1 ^$ V- a# j; e: f! @    m_Item.nIndex = dest;. G4 @( |& m/ D) d$ k0 i& w
   }. ?' e+ N8 R+ Q' C( P' K
  }( k( }% v* B- e1 f! H
  //临时数据保存完毕,交换开始5 N4 m4 }/ k8 {4 O5 S/ r3 I
  for (int i=0;i<MAX_INVENTORY;i++)/ ?# p* q8 s- L% [" v+ O/ z
  {
0 S8 v* g5 ?, u" G$ X+ ^1 B" Z6 Z   if (dest == m_Item.nIndex)
' _6 J9 Q3 ]* u* d# ]# C4 ?8 L   {" ?$ K8 J, E+ K, y5 S$ }  O" D" H
    //id相等 则 改变对应的dest和src3 R3 `' \$ T+ j  l& l: |5 f2 ?
    m_Item.nIndex = nTmp;& `/ F& v. e5 {" D% O1 ^
   }
  x* D, \4 {9 B) N6 Q7 @  }
- z) G2 j) F. l" E/ [}) e  B  A; |2 V
};
+ W4 @# z( s& Q- |5 `3 J-------------------------------------------------------------------------( V  }4 v. Z& M. c0 [0 [) C! d" O
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
0 X$ h1 h5 m* X! _搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
" m( X1 `1 ~& G$ v) i( N8 ]8 S6 x紧靠其上添加:
) e% {4 s5 a- i( kif( pWndBase == &m_wndMenu )# n% P# \& j/ j0 a( }# _2 `& }
{
& e, A) Y0 p6 c4 i0 G! {# t1 e  switch( nID )
% y# z. }2 H! M  o+ W# b( _  {; I0 n. y$ p; ?$ E
  case 2:
& B- m. t; ~5 h/ a0 ~) I3 {2 J  V4 M   {
, X; S2 H3 m8 f( ]  b- v    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);& b% O" `& B" [  }# P- P
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))+ p  @; q6 W/ j! c" k5 M+ S4 Q
    {6 S! Q/ ~, A$ ~2 Q& S! G
     break;
2 x/ z$ ^; K  j7 {, T2 x    }$ z$ q; F# O2 ^. n
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
$ P' T) g# x* I; m    {
3 T+ t7 k3 m, e7 |! X     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 P* I! j: ~5 u+ j- Z) i4 _
     if( !pItemElem )
# g9 p/ y+ ?" `: [; [$ R1 e) @      continue;
2 S/ w5 e  A: q% J     if(pItemElem->GetExtra() > 0); _6 s- I( `5 U. o9 ~# x# ]0 O
      continue;
/ S% p' ?  X  J1 X% w' x     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) ' {, }) v! D7 S
      continue;/ M$ h3 P# T2 r8 u; c  k* ]
     if( g_pPlayer->IsUsing( pItemElem ) )" f6 R7 y4 U# Q
      continue;. x* a" d9 C' h1 `2 Q- ^
     if( pItemElem->IsUndestructable() == TRUE )1 Q8 F6 a" w$ x# b2 C/ U$ P2 X- ~
     {
. Y7 M" g& A3 N/ o      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );" H5 {, P* w0 R: d7 j. n
      continue;
- j$ Q" r1 K+ i+ I/ O3 {     }) D+ p9 C5 r) N& d& D! Z
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 L7 |) _" z# C* N: O    }
2 j+ L) H2 f8 Z# X8 j! i9 T    break;
, {+ i# \' I' y   }% G, ^# X% E6 i' f; B. H7 [
  case 1:6 m- N2 }8 m% V5 B% l8 z: T
   {& x) X+ M/ K; X; p4 p6 s. j
    //整理背包/ W, Z5 D& F  ~' Q% \6 H" v
    //////////////////////////////////////////////////////////////////////////
) K& J  z* C/ L9 J- D    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
  D/ O4 E4 f, P4 p6 U    //////////////////////////////////////////////////////////////////////////6 q. F& c( X# {6 }0 u/ y8 t. A  z
    //////////////////////////////////////////////////////////////////////////* g6 M* W7 o8 o; `" k' z0 s0 f
    CInventorySort* pInvSort = new CInventorySort;
. q6 k+ h( K2 n0 Z    vector <sItem> vItem;
. T7 b$ n6 L. \    vItem.resize(MAX_INVENTORY);//初始化大小
+ g  G0 G5 [3 f. t. u     //////////////////////////////////////////////////////////////////////////- S4 P& c" V" m
     //填充数据
/ b! x# l" O! x" N* }     for (int i=0;i<MAX_INVENTORY;i++)/ H, G# b0 ~7 s: Z% i7 q% \
     {; r9 D( s9 C/ H$ O
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ C2 G8 K; {+ a0 R) m, J- j
      if (!pItemElem)+ S; ]* h6 f1 ]2 w5 k1 ?
      {
% l, c- z- f2 X* ?6 L- t       vItem.dwKind2 = 0xffffffff;
: g* B; |/ E' W* x2 {/ D       vItem.dwItemId = 0xffffffff;
0 N: K  Z4 ~' S0 l" l       vItem.nIndex = i;. W! n, y( h: n5 Q
      }else {# T6 u/ @# Y# _3 |; y8 A7 M9 s3 ]
       ItemProp* pProp = pItemElem->GetProp();$ h' k: T1 Y3 ?, J6 }: x) E$ M
       vItem.dwKind2 = pProp->dwItemKind2;
, C4 _! k/ h& [2 ~3 K       vItem.dwItemId = pItemElem->m_dwItemId;
9 s/ }( ]2 u6 Y       vItem.nIndex = i;6 P0 L0 y$ w; s' O' i8 B
      }1 h" u, ~( `6 D' [
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
8 M% {: W$ ~/ v! j  D/ e7 }     }
6 }  Z, W0 c- ?% w; g     //////////////////////////////////////////////////////////////////////////: T; Z4 N; u  d' ]
     sort(vItem.begin(),vItem.end());//排序
1 u0 D$ V* M6 R     //////////////////////////////////////////////////////////////////////////
# }  E* J* b) C2 D. G1 G     //交换
. r  W' y8 E# m' {/ ~& d) }     for (size_t i=0;i<vItem.size();i++)
  d# Q  g/ r0 |1 G/ l# N/ D! u     {
4 j' e$ K0 J  t3 T. Y      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);. V/ _4 J; y" ?; V, l0 f4 j
      pInvSort->Add(vItem.nIndex);
% f4 u: \- N! A0 w+ i2 Y% Z     }
: C. S, s7 H: g$ v     BYTE nDestPos = 0;
: J4 X4 A0 K% o8 s9 T     for (int i=0;i<MAX_INVENTORY;i++)( q/ j/ N7 n8 E6 k5 |, P+ `
     {$ w* ]( ]. [3 ~2 L/ v4 L
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);: w0 O) L( o* l' L
      if (pItemElem)6 ?! M# q7 e  O8 i3 {! [% L
      {
' z' S* j" B* H) I       if (IsUsingItem(pItemElem))
8 I2 {" b  P, q, C4 y* {- U       {0 _! c6 ~$ V# f: v
        //这个位置无法放6 r% [/ \: i3 I% C* i
        nDestPos++;
: O/ p& w# B+ [       }
: z/ U0 m6 V; d/ l/ k      }8 a6 l. s' W7 ^# b1 `
      BYTE nSrc = pInvSort->GetItemSrc(i);& Y1 j3 O& O% \9 z2 g# q/ h
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
9 M) J( Z6 `* Q8 F; Z      if (pItemElem)
; B1 c0 Q% t' v6 R2 T0 B      {
- p, b4 U( K4 [6 F8 p& C4 B% h       if (IsUsingItem(pItemElem))' w3 W9 c( o, k$ {; \$ `
       {
4 o; N. Z( p, f& t: J6 o        //这个道具无法移动,跳过
, d) ~, D* s5 ?' E. a        continue;4 H5 Y% V$ [+ Z5 r, z
       }" I6 G: N* D/ _( a
      }else{
. h8 s# n4 k- [9 V; @; T/ t3 H$ f$ ~       //空位置 不用动0 U; P6 x2 E9 F
       continue;
! [3 N5 c/ P7 D. z* R. y* f! _      }! a- L, ?0 t. c
      /////////////////////////////////////////////////////////////////////////// K. M# j5 z' w- D9 F7 x, X
      //开始移动
& g" Z! i# `$ D; x- |      if (nSrc == nDestPos)
  W. g4 q7 k9 B# F! L1 {+ ~- @      {
9 \' m3 w- X+ H" |0 t7 ]" d: D       //原地不动
- ]/ b) d2 A& f3 Q+ Q8 a& x5 |       nDestPos++;, x9 K; _* o  Y/ D
       continue;( H+ H4 k/ g5 k  b6 Q
      }
& \: H# c" U0 [' J" [& s: p  r$ R      pInvSort->MoveItem(i,nDestPos);
, V3 t  x2 n4 Z+ Y1 U, _      g_DPlay.SendMoveItem(0,nSrc,nDestPos);/ S3 o9 ?7 A. N
      Sleep(5);
% D- Q) G, d" F& t) h# L# _6 n: b& C& [      //Error("移动 - %d->%d",nSrc,nDestPos);$ R  Q5 D2 O# O! ^5 H0 f/ s2 |1 x
      nDestPos++;
4 u5 A8 F% d. T9 A8 X) ?  W     }+ c/ a, X# `8 e) p* M! p& R
     //取第一个元素的信息5 C$ _1 W- W3 a
     /*& L% h, F2 W, N$ u( L  K) T
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
, ^9 f) \2 d+ y4 z. @     {
/ X" |$ i2 @0 z* }; ?      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
- P9 }; [# K( f5 t5 c% I$ F      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
/ w! E( m" z7 s2 T     }+ ]. l, B9 C6 t! ]
     */
8 U9 t: z& E! P0 a( _    //////////////////////////////////////////////////////////////////////////
6 I* K% m, X( c  y* E    break;
% [& s. K/ v4 n( }; n# N7 d$ c   }, b$ u6 t5 ^3 ~7 \0 _
  }   |* k6 |" q$ {/ L  O
}& {9 w& [, \( q) f
m_wndMenu.SetVisible(FALSE);
# F2 M. {# p5 K2 |8 ]  R. ^& S0 ]. J# F9 r/ y$ h8 F# V
--------------------------------------------------------------------------------------------------------
% S6 V5 Z4 I4 \  o+ s6 [4 a搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
7 @* @/ l# l( x% @$ [{. U# b7 T( J" V0 o( Z; v  M" b
BaseMouseCursor();0 D: l1 o7 ]# {
}: @4 x8 Q# W3 f5 }
在其下添加:* ?$ Y( @+ [" N0 H
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) U8 N7 [2 T/ d/ N: z+ O
{' z6 O7 e0 m, w8 `) W
m_wndMenu.DeleteAllMenu();  Z1 r% x% X! A
m_wndMenu.CreateMenu(this);; q- s1 L' e  B; W" z
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");$ H# w7 @7 k$ ]
$ W' }& h3 m% }/ m) c0 g
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" `# |/ k# t, g. g
{0 _/ d! ^9 E8 k" o  D. L) O
  //P以上级别才可以删除所有道具
+ x1 N& r( X9 t6 ^. B& H  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; V& j+ c( g/ C. k}. p# G4 ^: H! D; K" v- ]& P9 T
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );+ ~& A& {$ b( o. z/ z3 U
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );. z& g$ @4 `: W/ C# \7 E
m_wndMenu.SetFocus();
0 t% |/ t2 g! E) L}( T: u/ F5 {& O( D: ~4 m% d1 D
------------------------------------------------------------------------------------------------------------
; l$ \6 H2 c* s*************************
5 l! k; ]) e# m% {9 OWndField.h文件. S3 I1 g8 _$ W4 d! Z5 U
*************************
3 s, k3 X& U- P搜索:BOOL m_bReport;
1 o+ u7 W' g4 ~& A4 J. ?: r其后添加:
3 J* C4 j; M! O7 D; h8 iCWndMenu m_wndMenu;
* J# n8 ]8 z. T+ l搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);, j% b( T8 K; o; J: |
其后添加:
/ u, e) W# R+ P7 M8 I3 i' i+ Avirtual void OnRButtonUp(UINT nFlags, CPoint point);
2 [0 U& c" [; b6 K- @2 X% w. p8 T. Z: y' C9 F" ?. W

7 F' j4 v0 R; {2 _# t+ i

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 12:35 , Processed in 0.066102 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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